.getElement <- function(name, elements = NULL) {
if (!is.list(elements) || length(elements)==0 ) {
elements <- initializePSE()
}
rex <- paste ("^",name,"$", sep="")
elements [[grep (rex, sapply (elements, function(x) {x$name}))]]
}
getMass <- function(molecule) {
molecule$exactmass
}
getIsotope <- function(molecule, index) {
molecule$isotope[[1]][,index]
}
getFormula <- function(molecule) {
if (is.null(molecule$formula)) {
lapply(molecule, function(x) {x$formula})
} else {
molecule$formula
}
}
getScore <- function(molecule) {
if (is.null(molecule$score)) {
lapply(molecule, function(x) {x$score})
} else {
molecule$score
}
}
getValid <- function(molecule) {
if (is.null(molecule$valid)) {
lapply(molecule, function(x) {x$valid})
} else {
molecule$valid
}
}
getMolecule <- function(formula, elements = NULL, z = 0, maxisotopes=10) {
# Use full PSE unless stated otherwise
if (!is.list(elements) || length(elements)==0 ) {
elements <- initializePSE()
}
# Remember ordering of element names,
# but ensure list of elements is ordered
# by mass
element_order <- sapply(elements, function(x){x$name})
elements <- elements[order(sapply(elements, function(x){x$mass}))]
# Call imslib to parse formula and calculate
# masses and isotope pattern
molecule <- .Call("getMolecule",
formula, elements, element_order,
z, maxisotopes,
PACKAGE="Rdisop")
molecule
}
addMolecules <- function(formula1, formula2,
elements = NULL, maxisotopes=10)
{
# First argument may be vector of formulas,
# Second is single molecule only!
if (length(formula2) >1 ) {
stop("Second formula must be single Molecule")
}
# Use full PSE unless stated otherwise
if (!is.list(elements) || length(elements)==0 ) {
elements <- initializePSE()
}
# Remember ordering of element names,
# but ensure list of elements is ordered
# by mass
element_order <- sapply(elements, function(x){x$name})
elements <- elements[order(sapply(elements, function(x){x$mass}))]
# Call imslib to parse formula and calculate
# masses and isotope pattern
molecule <- .Call("addMolecules",
formula1, formula2,
elements, element_order,
maxisotopes,
PACKAGE="Rdisop")
molecule
}
subMolecules <- function(formula1, formula2,
elements = NULL, maxisotopes=10)
{
# First argument may be vector of formulas,
# Second is single molecule only!
if (length(formula2) >1 ) {
stop("Second formula must be single Molecule")
}
# Use full PSE unless stated otherwise
if (!is.list(elements) || length(elements)==0 ) {
elements <- initializePSE()
}
# Remember ordering of element names,
# but ensure list of elements is ordered
# by mass
element_order <- sapply(elements, function(x){x$name})
elements <- elements[order(sapply(elements, function(x){x$mass}))]
# Call imslib to parse formula and calculate
# masses and isotope pattern
molecule <- .Call("subMolecules",
formula1, formula2,
elements, element_order,
maxisotopes,
PACKAGE="Rdisop")
molecule
}
decomposeMass <- function(mass, ppm=2.0, mzabs=0.0001,
elements=NULL, filter=NULL, z=0, maxisotopes=10,
minElements="C0", maxElements="C999999") {
decomposeIsotopes(c(mass), c(1), ppm=ppm, mzabs=mzabs,
elements=elements, filter=filter, z=z, maxisotopes=maxisotopes,
minElements=minElements, maxElements=maxElements)
}
decomposeIsotopes <- function(masses, intensities, ppm=2.0, mzabs=0.0001,
elements=NULL, filter=NULL, z=0, maxisotopes=10,
minElements="C0", maxElements="C999999")
{
# Use limited limited CHNOPS unless stated otherwise
if (!is.list(elements) || length(elements)==0 ) {
elements <- initializeCHNOPS()
}
# If only a single mass is given,
# intensities are irrelevant
if (length(masses) == 1) {
intensities <- 1
}
if (length(masses) != length(intensities) ) {
stop("masses and intensities have different lengths!")
}
# Calculate (average) mass difference,
# guess charge and recalculate
#
charge <- 1
# Remember ordering of element names,
# but ensure list of elements is ordered
# by mass
element_order <- sapply(elements, function(x){x$name})
elements <- elements[order(sapply(elements, function(x){x$mass}))]
##
## Calculate relative Error based on masses[1] and mzabs
##
ppm <- ppm + mzabs/masses[1]*1000000
# Finally ready to make the call...
molecules <- .Call("decomposeIsotopes",
masses, intensities, ppm, elements, element_order, z,
maxisotopes,
minElements, maxElements,
PACKAGE="Rdisop")
molecules
}
#
# Obtain the similarity score
# between two molecules / isotope Patterns
#
isotopeScore <- function(molecule, masses, intensities,
elements=NULL, filter=NULL, z=0) {
# Use limited limited CHNOPS unless stated otherwise
if (!is.list(elements) || length(elements)==0 ) {
elements <- initializeCHNOPS()
}
# If only a single mass is given,
# intensities are irrelevant
if (length(masses) == 1) {
intensities <- 1
}
if (length(masses) != length(intensities) ) {
stop("masses and intensities have different lengths!")
}
# molecule <- getMolecule(formula)
# massintensities<-matrix(NA,ncol=length(masses),nrow=2)
# for(i in 1:length(masses))
{
# massintensities[1,i]<-masses[i];
# massintensities[2,i]<-intensities[i];
}
# molecule$isotopes <- list(massintensities)
# scoreMolecule(molecule,elements,filter,z);
predictedMass<-molecule$isotopes[[1]][1,];
predictedAbundances<-molecule$isotopes[[1]][2,];
score <- .Call("calculateScore",predictedMass,predictedAbundances,masses,intensities,PACKAGE="Rdisop")
score
# molecule
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.