comparison create_msp.R @ 5:9ab472c5714c draft

planemo upload for repository https://github.com/computational-metabolomics/mspurity-galaxy commit afee93a926072b534bb3541e1524f1ad6a7decb9
author tomnl
date Mon, 23 Apr 2018 06:10:07 -0400
parents
children be54f396ecfe
comparison
equal deleted inserted replaced
4:ff61a6fb23bf 5:9ab472c5714c
1 suppressWarnings(suppressPackageStartupMessages(require(optparse,quietly = T)))
2 suppressWarnings(suppressPackageStartupMessages(require(msPurity)))
3 print(sessionInfo())
4 # Get the parameter
5 option_list <- list(
6 make_option(c("-i","--purity"),type="character"),
7 make_option(c("-p","--ppm"),type="numeric"),
8 make_option(c("-m","--mode"),type="character")
9 )
10 opt <- parse_args(OptionParser(option_list=option_list))
11
12 print(opt)
13
14 load(opt$purity)
15
16 grped_df <- pa@grped_df
17
18 msms <- pa@grped_ms2
19
20 puritydf <- pa@puritydf
21
22
23
24
25
26 grped_df$fileid <- sapply(grped_df$filename, function(x) which(basename(pa@fileList)==x))
27
28 puritydf$fileid <- sapply(puritydf$filename, function(x) which(basename(pa@fileList)==x))
29
30 selfrag <- as.numeric(unique(grped_df$grpid))
31
32 of <- file(description = "outfile.msp", open = "w+a")
33
34 write.msp <- function(name,precmz,prectype,spectra,ofile){
35
36 cat(paste("NAME: ", name, "\r\n", sep = ""), file = ofile)
37
38 cat(paste("PRECURSORMZ: ", precmz , "\r\n", sep = ""), file = ofile)
39
40 #cat(paste("PRECURSORTYPE: ", prectype, "\r\n", sep = ""), file = ofile) # No adducts? Annotation
41
42 cat("Comment:\r\n", file = ofile)
43
44 cat(paste("Num Peaks: ", nrow(spectra), "\r\n", sep = ""), file = ofile)
45
46 cat(paste(paste(spectra[,1], spectra[,2], sep = "\t"), sep = "\r\n"), sep = "\r\n", file = ofile)
47
48 cat("\r\n", file = ofile)
49 }
50
51 for(i in selfrag){
52
53 j <- which(grped_df$grpid==i)
54
55 spec <- msms[[as.character(i)]]
56
57 if (length(j)>1){
58
59 grpd <- grped_df[j,]
60
61 if (opt$mode=="all"){
62
63 for(jj in 1:length(j)){
64
65 idj <- paste(i,jj,sep=".")
66
67 specj <- spec[[jj]]
68
69 grpdj <- grpd[jj,]
70
71 name = paste(i, grpdj$sample, grpdj$pid, sep='-')
72
73 write.msp(name,grpdj$precurMtchMZ,"",specj,of)
74 }
75
76 }else{
77
78 prec_int <- sapply(grpd$precurMtchID, function(x) puritydf[ which(puritydf$seqNum==x & puritydf$fileid==grpd$fileid[1]), "precursorIntensity"] )
79
80 if (opt$mode=="max"){
81
82 idx <- which(prec_int==max(prec_int))
83
84 grpd <- grpd[idx,]
85 name = paste(i, grpd$sample, grpd$pid, sep='-')
86 write.msp(name,grpd$precurMtchMZ,"",specj[[idx]], of)
87 }
88
89 if (opt$mode=="average"){
90
91 file_weights <- prec_int/prec_int[which(prec_int==min(prec_int))] # spectra of the most intense precursor, largest weight
92
93 merged_msms <- do.call("rbind", spec)
94
95 colnames(merged_msms) <- c("mz","int")
96
97 file_weights <-rep(file_weights,sapply(spec,nrow))
98
99 merged_msms <- data.frame(cbind(merged_msms,file_weights))
100
101 umzs <- sort(merged_msms$mz,index.return=T)$ix
102
103 merged_msms <- merged_msms[umzs,]
104
105 umzs <- merged_msms$mz
106
107 mz_groups <- list() # mz windows to bind
108
109 mz_grouped <- c() # used mzs
110
111 ppm <- opt$ppm # ppm level to bind mzs
112
113 for(y in 1:length(umzs)){ # spectra averaging
114
115 z <- umzs[y]
116
117 if(!(z %in% mz_grouped)){
118
119 mz_range <- z*(ppm/1e6)
120
121 mz_range <- c(z-mz_range,z+mz_range)
122
123 mz_group <- which(umzs>mz_range[1] & umzs<mz_range[2])
124
125 if(length(mz_group)>1){
126
127 zz <- umzs[max(mz_group)]
128
129 mz_range <- zz*(ppm/1e6)
130
131 mz_range <- c(zz-mz_range,zz+mz_range)
132
133 mz_group2 <- which(umzs>mz_range[1] & umzs<mz_range[2])
134
135 mz_group <- append(mz_group,mz_group2)
136 }
137
138 mz_group <- unique(mz_group)
139
140 mz_grouped <- append(mz_grouped,umzs[mz_group])
141
142 mz_group <- list(mz_group)
143
144 mz_groups <- append(mz_groups,mz_group)
145 }
146 }
147
148 averaged_spec <- t(sapply(mz_groups,function(x){
149
150 if(length(x)==1){
151
152 mz <- merged_msms$mz[x]
153
154 nint <- merged_msms[x,]
155
156 nint <- nint$int*nint$file_weights
157
158 }else{
159
160 mz <- mean(merged_msms$mz[x])
161
162 nint <- sum(sapply(x,function(y){
163 nint <- merged_msms[y,]
164 nint <- nint$int*nint$file_weights
165 }))
166 }
167 return(c(mz,nint))
168 }))
169
170 write.msp(i,mean(grpd$precurMtchMZ),"",averaged_spec,of)
171
172 }
173 }
174 }else{
175 spec <- spec[[1]]
176
177 grpd <- grped_df[j,]
178 name = paste(i, grpd$sample, grpd$pid, sep='-')
179 write.msp(name,grpd$precurMtchMZ,"",spec,of)
180 }
181 }
182
183