Mercurial > repos > tomnl > create_sqlite_db
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 |