comparison massdb-helper.R @ 2:20d69a062da3 draft

planemo upload for repository https://github.com/workflow4metabolomics/lcmsmatching.git commit d4048accde6bdfd5b3e14f5394902d38991854f8
author prog
date Thu, 02 Mar 2017 08:55:00 -0500
parents
children
comparison
equal deleted inserted replaced
1:253d531a0193 2:20d69a062da3
1 simplifySpectrum <- function(spec) {
2 if(length(spec) == 0){
3 return(NA_real_)
4 }
5 #print(spec)
6 if (nrow(spec) == 0)
7 return(NA_real_)
8 if (ncol(spec) != 2) {
9 spec[, BIODB.PEAK.MZ]
10 mint <- BIODB.GROUP.INTENSITY %in% colnames(spec)
11 pint <- which(mint[1])
12 if (length(pint) == 0)
13 stop(
14 "No intensity column founds, if there is more than 2 column, columns should be named",
15 paste0(BIODB.GROUP.INTENSITY, collapse = ", ")
16 )
17 spec <- spec[, c(BIODB.PEAK.MZ, BIODB.GROUP.INTENSITY[pint[1]])]
18 ###Normalizing the intenities.
19 }
20 spec[, 2] <- as.numeric(spec[, 2]) * 100 / max(as.numeric(spec[, 2]))
21 colnames(spec) <- c(BIODB.PEAK.MZ, BIODB.PEAK.RELATIVE.INTENSITY)
22 spec
23 }
24
25
26
27 calcDistance <-
28 function(spec1 ,
29 spec2,
30 npmin = 2,
31 fun = c("wcosine"),
32 params = list()) {
33 #fun <- match.arg(fun)
34
35 #SPec are always notmlized in pourcentage toa voir issues;
36 spec1 <- simplifySpectrum(spec1)
37 spec2 <- simplifySpectrum(spec2)
38 if(is.na(spec1)||is.na(spec2)) return(list(matched=numeric(0),similarity=0))
39 params$mz1 <- as.numeric(spec1[, BIODB.PEAK.MZ])
40 params$mz2 <- as.numeric(spec2[, BIODB.PEAK.MZ])
41 params$int1 <- as.numeric(spec1[, BIODB.PEAK.RELATIVE.INTENSITY])
42 params$int2 <- as.numeric(spec2[, BIODB.PEAK.RELATIVE.INTENSITY])
43 res <- do.call(fun, args = params)
44 if (sum(res$matched != -1) < npmin)
45 return(list(matched = res$matched, similarity = 0))
46 list(matched = res$matched,
47 similarity = res$measure)
48 }
49
50
51
52 ###The returned sim list is not ordered
53 compareSpectra <-
54 function(spec,
55 libspec,
56 npmin = 2,
57 fun = BIODB.MSMS.DIST.WCOSINE,
58 params = list(),
59 decreasing = TRUE) {
60 #fun <- match.arg(fun)
61 if (length(libspec) == 0) {
62 return(NULL)
63 }
64 if (nrow(spec) == 0) {
65 return(NULL)
66 }
67
68 ####spec is directly normalized.
69 vall <-
70 sapply(
71 libspec,
72 calcDistance,
73 spec1 = spec,
74 params = params,
75 fun = fun,
76 simplify = FALSE
77 )
78 ####the list is ordered with the chosen metric.
79 sim <-
80 vapply(vall,
81 '[[',
82 i = "similarity",
83 FUN.VALUE = ifelse(decreasing, 0, 1))
84 osim <- order(sim, decreasing = decreasing)
85 matched <- sapply(vall, '[[', i = "matched", simplify = FALSE)
86
87 return(list(
88 ord = osim,
89 matched = matched,
90 similarity = sim
91 ))
92 }