Mercurial > repos > davidvanzessen > clonal_sequences_in_paired_samples
comparison RScript.r @ 7:68c6c7624ffc draft
Uploaded
author | davidvanzessen |
---|---|
date | Thu, 18 Sep 2014 08:56:44 -0400 |
parents | 8313c6cc65c5 |
children | fa240d1c57a9 |
comparison
equal
deleted
inserted
replaced
6:8313c6cc65c5 | 7:68c6c7624ffc |
---|---|
32 dat = dat[dat$normalized_read_count >= min_cells,] | 32 dat = dat[dat$normalized_read_count >= min_cells,] |
33 dat$paste = paste(dat$Sample, dat$V_Segment_Major_Gene, dat$J_Segment_Major_Gene, dat$CDR3_Sense_Sequence) | 33 dat$paste = paste(dat$Sample, dat$V_Segment_Major_Gene, dat$J_Segment_Major_Gene, dat$CDR3_Sense_Sequence) |
34 cat("<tr><td>Removing duplicates</td></tr>", file=logfile, append=T) | 34 cat("<tr><td>Removing duplicates</td></tr>", file=logfile, append=T) |
35 dat = dat[!duplicated(dat$paste),] | 35 dat = dat[!duplicated(dat$paste),] |
36 patients = split(dat, dat$Patient, drop=T) | 36 patients = split(dat, dat$Patient, drop=T) |
37 rm(dat) | |
38 intervalReads = rev(c(0,10,25,50,100,1000,10000)) | 37 intervalReads = rev(c(0,10,25,50,100,1000,10000)) |
39 intervalFreq = rev(c(0,0.01,0.05,0.1,0.5,1,5)) | 38 intervalFreq = rev(c(0,0.01,0.05,0.1,0.5,1,5)) |
40 V_Segments = c(".*", "IGHV", "IGHD", "IGKV", "IGKV", "IgKINTR", "TRGV", "TRDV", "TRDD" , "TRBV") | 39 V_Segments = c(".*", "IGHV", "IGHD", "IGKV", "IGKV", "IgKINTR", "TRGV", "TRDV", "TRDD" , "TRBV") |
41 J_Segments = c(".*", ".*", ".*", "IGKJ", "KDE", ".*", ".*", ".*", ".*", ".*") | 40 J_Segments = c(".*", ".*", ".*", "IGKJ", "KDE", ".*", ".*", ".*", ".*", ".*") |
42 Titles = c("Total", "IGH-Vh-Jh", "IGH-Dh-Jh", "Vk-Jk", "Vk-Kde" , "Intron-Kde", "TCRG", "TCRD-Vd-Dd", "TCRD-Dd-Dd", "TCRB-Vb-Jb") | 41 Titles = c("Total", "IGH-Vh-Jh", "IGH-Dh-Jh", "Vk-Jk", "Vk-Kde" , "Intron-Kde", "TCRG", "TCRD-Vd-Dd", "TCRD-Dd-Dd", "TCRB-Vb-Jb") |
89 resBoth = vector() | 88 resBoth = vector() |
90 read1Count = vector() | 89 read1Count = vector() |
91 read2Count = vector() | 90 read2Count = vector() |
92 locussum1 = vector() | 91 locussum1 = vector() |
93 locussum2 = vector() | 92 locussum2 = vector() |
94 | |
95 print(patient) | |
96 #for(iter in 1){ | 93 #for(iter in 1){ |
97 for(iter in 1:length(product[,1])){ | 94 for(iter in 1:length(product[,1])){ |
98 threshhold = product[iter,threshholdIndex] | 95 threshhold = product[iter,threshholdIndex] |
99 V_Segment = paste(".*", as.character(product[iter,V_SegmentIndex]), ".*", sep="") | 96 V_Segment = paste(".*", as.character(product[iter,V_SegmentIndex]), ".*", sep="") |
100 J_Segment = paste(".*", as.character(product[iter,J_SegmentIndex]), ".*", sep="") | 97 J_Segment = paste(".*", as.character(product[iter,J_SegmentIndex]), ".*", sep="") |
182 cat("<tr><td>Starting Frequency analysis</td></tr>", file=logfile, append=T) | 179 cat("<tr><td>Starting Frequency analysis</td></tr>", file=logfile, append=T) |
183 | 180 |
184 interval = intervalFreq | 181 interval = intervalFreq |
185 intervalOrder = data.frame("interval"=paste(">", interval, sep=""), "intervalOrder"=1:length(interval)) | 182 intervalOrder = data.frame("interval"=paste(">", interval, sep=""), "intervalOrder"=1:length(interval)) |
186 product = data.frame("Titles"=rep(Titles, each=length(interval)), "interval"=rep(interval, times=10), "V_Segments"=rep(V_Segments, each=length(interval)), "J_Segments"=rep(J_Segments, each=length(interval))) | 183 product = data.frame("Titles"=rep(Titles, each=length(interval)), "interval"=rep(interval, times=10), "V_Segments"=rep(V_Segments, each=length(interval)), "J_Segments"=rep(J_Segments, each=length(interval))) |
187 #patientFrequencyCount(patient1) | |
188 #lapply(patients[c(5,6,10)], FUN=patientFrequencyCount) | |
189 #lapply(patients[c(5,6,7,8,13)], FUN=patientCountOnColumn, product = product, interval=interval, on="Frequency", appendtxt=T) | |
190 #lapply(patients[c(6,7,8)], FUN=patientCountOnColumn, product = product, interval=interval, on="Frequency", appendtxt=T) | |
191 #lapply(patients[c(6)], FUN=patientCountOnColumn, product = product, interval=interval, on="Frequency", appendtxt=T) | |
192 mclapply(patients, FUN=patientCountOnColumn, product = product, interval=interval, on="Frequency", appendtxt=T) | 184 mclapply(patients, FUN=patientCountOnColumn, product = product, interval=interval, on="Frequency", appendtxt=T) |
193 | 185 |
194 cat("<tr><td>Starting Cell Count analysis</td></tr>", file=logfile, append=T) | 186 cat("<tr><td>Starting Cell Count analysis</td></tr>", file=logfile, append=T) |
195 | 187 |
196 interval = intervalReads | 188 interval = intervalReads |
197 intervalOrder = data.frame("interval"=paste(">", interval, sep=""), "intervalOrder"=1:length(interval)) | 189 intervalOrder = data.frame("interval"=paste(">", interval, sep=""), "intervalOrder"=1:length(interval)) |
198 product = data.frame("Titles"=rep(Titles, each=length(interval)), "interval"=rep(interval, times=10), "V_Segments"=rep(V_Segments, each=length(interval)), "J_Segments"=rep(J_Segments, each=length(interval))) | 190 product = data.frame("Titles"=rep(Titles, each=length(interval)), "interval"=rep(interval, times=10), "V_Segments"=rep(V_Segments, each=length(interval)), "J_Segments"=rep(J_Segments, each=length(interval))) |
199 #patientResult = patientReadCount(patient1) | |
200 #lapply(patients[c(5,6,10)], FUN=patientReadCount) | |
201 #lapply(patients[c(5,6,7,8,13)], FUN=patientCountOnColumn, product = product, interval=interval, on="Clone_Molecule_Count_From_Spikes") | |
202 #lapply(patients[c(6)], FUN=patientCountOnColumn, product = product, interval=interval, on="Clone_Molecule_Count_From_Spikes") | |
203 mclapply(patients, FUN=patientCountOnColumn, product = product, interval=interval, on="Clone_Molecule_Count_From_Spikes") | 191 mclapply(patients, FUN=patientCountOnColumn, product = product, interval=interval, on="Clone_Molecule_Count_From_Spikes") |
204 | 192 |
205 cat("</table></html>", file=logfile, append=T) | 193 cat("</table></html>", file=logfile, append=T) |
206 | 194 |
195 | |
196 tripletAnalysis <- function(patient1, label1, patient2, label2, patient3, label3, product, interval, on, appendTriplets= FALSE){ | |
197 onShort = "reads" | |
198 if(on == "Frequency"){ | |
199 onShort = "freq" | |
200 } | |
201 type="triplet" | |
202 | |
203 threshholdIndex = which(colnames(product) == "interval") | |
204 V_SegmentIndex = which(colnames(product) == "V_Segments") | |
205 J_SegmentIndex = which(colnames(product) == "J_Segments") | |
206 titleIndex = which(colnames(product) == "Titles") | |
207 sampleIndex = which(colnames(patient1) == "Sample") | |
208 patientIndex = which(colnames(patient1) == "Patient") | |
209 oneSample = paste(patient1[1,sampleIndex], sep="") | |
210 twoSample = paste(patient2[1,sampleIndex], sep="") | |
211 threeSample = paste(patient3[1,sampleIndex], sep="") | |
212 | |
213 patientMerge = merge(patient1, patient2, by="Clone_Sequence") | |
214 patientMerge = merge(patientMerge, patient3, by="Clone_Sequence") | |
215 colnames(patientMerge)[32:length(colnames(patientMerge))] = paste(colnames(patientMerge)[32:length(colnames(patientMerge))], ".z", sep="") | |
216 res1 = vector() | |
217 res2 = vector() | |
218 res3 = vector() | |
219 resAll = vector() | |
220 read1Count = vector() | |
221 read2Count = vector() | |
222 read3Count = vector() | |
223 | |
224 if(appendTriplets){ | |
225 cat(paste(label1, label2, label3, sep="\t"), file="triplets.txt", append=T, sep="", fill=3) | |
226 } | |
227 for(iter in 1:length(product[,1])){ | |
228 threshhold = product[iter,threshholdIndex] | |
229 V_Segment = paste(".*", as.character(product[iter,V_SegmentIndex]), ".*", sep="") | |
230 J_Segment = paste(".*", as.character(product[iter,J_SegmentIndex]), ".*", sep="") | |
231 all = (grepl(V_Segment, patientMerge$V_Segment_Major_Gene.x) & grepl(J_Segment, patientMerge$J_Segment_Major_Gene.x) & patientMerge[,paste(on, ".x", sep="")] > threshhold & patientMerge[,paste(on, ".y", sep="")] > threshhold & patientMerge[,paste(on, ".z", sep="")] > threshhold) | |
232 one = (grepl(V_Segment, patient1$V_Segment_Major_Gene) & grepl(J_Segment, patient1$J_Segment_Major_Gene) & patient1[,on] > threshhold & !(patient1$Clone_Sequence %in% patientMerge[all,]$Clone_Sequence)) | |
233 two = (grepl(V_Segment, patient2$V_Segment_Major_Gene) & grepl(J_Segment, patient2$J_Segment_Major_Gene) & patient2[,on] > threshhold & !(patient2$Clone_Sequence %in% patientMerge[all,]$Clone_Sequence)) | |
234 three = (grepl(V_Segment, patient3$V_Segment_Major_Gene) & grepl(J_Segment, patient3$J_Segment_Major_Gene) & patient3[,on] > threshhold & !(patient3$Clone_Sequence %in% patientMerge[all,]$Clone_Sequence)) | |
235 | |
236 read1Count = append(read1Count, sum(patient1[one,]$normalized_read_count) + sum(patientMerge[all,]$normalized_read_count.x)) | |
237 read2Count = append(read2Count, sum(patient2[two,]$normalized_read_count) + sum(patientMerge[all,]$normalized_read_count.y)) | |
238 read3Count = append(read3Count, sum(patient3[three,]$normalized_read_count) + sum(patientMerge[all,]$normalized_read_count.z)) | |
239 res1 = append(res1, sum(one)) | |
240 res2 = append(res2, sum(two)) | |
241 res3 = append(res3, sum(three)) | |
242 resAll = append(resAll, sum(all)) | |
243 #threshhold = 0 | |
244 if(threshhold != 0){ | |
245 if(sum(one) > 0){ | |
246 dfOne = patient1[one,c("V_Segment_Major_Gene", "J_Segment_Major_Gene", "normalized_read_count", "Frequency", "Clone_Sequence", "Related_to_leukemia_clone")] | |
247 colnames(dfOne) = c("Proximal segment", "Distal segment", "normalized_read_count", "Frequency", "Sequence", "Related_to_leukemia_clone") | |
248 filenameOne = paste(label1, "_", product[iter, titleIndex], "_", threshhold, sep="") | |
249 write.table(dfOne, file=paste(filenameOne, ".txt", sep=""), quote=F, sep="\t", dec=",", row.names=F, col.names=T) | |
250 } | |
251 if(sum(two) > 0){ | |
252 dfTwo = patient2[two,c("V_Segment_Major_Gene", "J_Segment_Major_Gene", "normalized_read_count", "Frequency", "Clone_Sequence", "Related_to_leukemia_clone")] | |
253 colnames(dfTwo) = c("Proximal segment", "Distal segment", "normalized_read_count", "Frequency", "Sequence", "Related_to_leukemia_clone") | |
254 filenameTwo = paste(label2, "_", product[iter, titleIndex], "_", threshhold, sep="") | |
255 write.table(dfTwo, file=paste(filenameTwo, ".txt", sep=""), quote=F, sep="\t", dec=",", row.names=F, col.names=T) | |
256 } | |
257 if(sum(three) > 0){ | |
258 dfThree = patient3[three,c("V_Segment_Major_Gene", "J_Segment_Major_Gene", "normalized_read_count", "Frequency", "Clone_Sequence", "Related_to_leukemia_clone")] | |
259 colnames(dfThree) = c("Proximal segment", "Distal segment", "normalized_read_count", "Frequency", "Sequence", "Related_to_leukemia_clone") | |
260 filenameThree = paste(label3, "_", product[iter, titleIndex], "_", threshhold, sep="") | |
261 write.table(dfThree, file=paste(filenameThree, ".txt", sep=""), quote=F, sep="\t", dec=",", row.names=F, col.names=T) | |
262 } | |
263 } | |
264 if(sum(all) > 0){ | |
265 dfAll = patientMerge[all,c("V_Segment_Major_Gene.x", "J_Segment_Major_Gene.x", "normalized_read_count.x", "Frequency.x", "Related_to_leukemia_clone.x", "Clone_Sequence", "V_Segment_Major_Gene.y", "J_Segment_Major_Gene.y", "normalized_read_count.y", "Frequency.y", "Related_to_leukemia_clone.y", "V_Segment_Major_Gene.z", "J_Segment_Major_Gene.z", "normalized_read_count.z", "Frequency.z", "Related_to_leukemia_clone.z")] | |
266 colnames(dfAll) = c(paste("Proximal segment", oneSample), paste("Distal segment", oneSample), paste("Normalized_Read_Count", oneSample), paste("Frequency", oneSample), paste("Related_to_leukemia_clone", oneSample),"Sequence", paste("Proximal segment", twoSample), paste("Distal segment", twoSample), paste("Normalized_Read_Count", twoSample), paste("Frequency", twoSample), paste("Related_to_leukemia_clone", twoSample), paste("Proximal segment", threeSample), paste("Distal segment", threeSample), paste("Normalized_Read_Count", threeSample), paste("Frequency", threeSample), paste("Related_to_leukemia_clone", threeSample)) | |
267 filenameAll = paste(label1, "_", label2, "_", label3, "_", product[iter, titleIndex], "_", threshhold, sep="") | |
268 write.table(dfAll, file=paste(filenameAll, ".txt", sep=""), quote=F, sep="\t", dec=",", row.names=F, col.names=T) | |
269 } | |
270 } | |
271 patientResult = data.frame("Locus"=product$Titles, "J_Segment"=product$J_Segments, "V_Segment"=product$V_Segments, "cut_off_value"=paste(">", product$interval, sep=""), "All"=resAll, "tmp1"=res1, "read_count1" = round(read1Count), "tmp2"=res2, "read_count2"= round(read2Count), "tmp3"=res3, "read_count3"=round(read3Count)) | |
272 colnames(patientResult)[6] = oneSample | |
273 colnames(patientResult)[8] = twoSample | |
274 colnames(patientResult)[10] = threeSample | |
275 | |
276 colnamesBak = colnames(patientResult) | |
277 colnames(patientResult) = c("Ig/TCR gene rearrangement type", "Distal Gene segment", "Proximal gene segment", "cut_off_value", "Number of sequences All", paste("Number of sequences", oneSample), paste("Normalized Read Count", oneSample), paste("Number of sequences", twoSample), paste("Normalized Read Count", twoSample), paste("Number of sequences", threeSample), paste("Normalized Read Count", threeSample)) | |
278 write.table(patientResult, file=paste(label1, "_", label2, "_", label3, "_", onShort, ".txt", sep=""), quote=F, sep="\t", dec=",", row.names=F, col.names=T) | |
279 colnames(patientResult) = colnamesBak | |
280 | |
281 patientResult$Locus = factor(patientResult$Locus, Titles) | |
282 patientResult$cut_off_value = factor(patientResult$cut_off_value, paste(">", interval, sep="")) | |
283 | |
284 plt = ggplot(patientResult[,c("Locus", "cut_off_value", "All")]) | |
285 plt = plt + geom_bar( aes( x=factor(cut_off_value), y=All), stat='identity', position="dodge", fill="#79c36a") | |
286 plt = plt + facet_grid(.~Locus) + theme(axis.text.x = element_text(angle = 45, hjust = 1)) | |
287 plt = plt + geom_text(aes(ymax=max(All), x=cut_off_value,y=All,label=All), angle=90, hjust=0) | |
288 plt = plt + xlab("Reads per locus") + ylab("Count") + ggtitle("Number of clones in All") | |
289 plt = plt + theme(plot.margin = unit(c(1,8.8,0.5,1.5), "lines")) | |
290 png(paste(label1, "_", label2, "_", label3, "_", onShort, "_total_all.png", sep=""), width=1920, height=1080) | |
291 print(plt) | |
292 dev.off() | |
293 | |
294 fontSize = 4 | |
295 | |
296 bak = patientResult | |
297 patientResult = melt(patientResult[,c('Locus','cut_off_value', oneSample, twoSample, threeSample)] ,id.vars=1:2) | |
298 patientResult$relativeValue = patientResult$value * 10 | |
299 patientResult[patientResult$relativeValue == 0,]$relativeValue = 1 | |
300 plt = ggplot(patientResult) | |
301 plt = plt + geom_bar( aes( x=factor(cut_off_value), y=relativeValue, fill=variable), stat='identity', position="dodge") | |
302 plt = plt + facet_grid(.~Locus) + theme(axis.text.x = element_text(angle = 45, hjust = 1)) | |
303 plt = plt + scale_y_continuous(trans="log", breaks=10^c(0:10), labels=c(0, 10^c(0:9))) | |
304 plt = plt + geom_text(data=patientResult[patientResult$variable == oneSample,], aes(ymax=max(value), x=cut_off_value,y=relativeValue,label=value), angle=90, position=position_dodge(width=0.9), hjust=0, vjust=-0.7, size=fontSize) | |
305 plt = plt + geom_text(data=patientResult[patientResult$variable == twoSample,], aes(ymax=max(value), x=cut_off_value,y=relativeValue,label=value), angle=90, position=position_dodge(width=0.9), hjust=0, vjust=0.4, size=fontSize) | |
306 plt = plt + geom_text(data=patientResult[patientResult$variable == threeSample,], aes(ymax=max(value), x=cut_off_value,y=relativeValue,label=value), angle=90, position=position_dodge(width=0.9), hjust=0, vjust=1.5, size=fontSize) | |
307 plt = plt + xlab("Reads per locus") + ylab("Count") + ggtitle("Number of clones in only one sample") | |
308 png(paste(label1, "_", label2, "_", label3, "_", onShort, "_indiv_all.png", sep=""), width=1920, height=1080) | |
309 print(plt) | |
310 dev.off() | |
311 } | |
312 | |
313 interval = intervalReads | |
314 intervalOrder = data.frame("interval"=paste(">", interval, sep=""), "intervalOrder"=1:length(interval)) | |
315 product = data.frame("Titles"=rep(Titles, each=length(interval)), "interval"=rep(interval, times=10), "V_Segments"=rep(V_Segments, each=length(interval)), "J_Segments"=rep(J_Segments, each=length(interval))) | |
316 | |
317 one = dat[dat$Patient == "VanDongen_cALL_14696.1",] | |
318 two = dat[dat$Patient == "VanDongen_cALL_14696.2",] | |
319 three = dat[dat$Patient == "VanDongen_cALL_14696.3",] | |
320 tripletAnalysis(one, "14696_1", two, "14696_2", three, "14696_3", product=product, interval=interval, on="normalized_read_count") | |
321 | |
322 one = dat[dat$Sample == "16278_Left",] | |
323 two = dat[dat$Sample == "26402_Left",] | |
324 three = dat[dat$Sample == "26759_Left",] | |
325 tripletAnalysis(one, "16278_Left", two, "26402_Left", three, "26759_Left", product=product, interval=interval, on="normalized_read_count") | |
326 | |
327 one = dat[dat$Sample == "16278_Right",] | |
328 two = dat[dat$Sample == "26402_Right",] | |
329 three = dat[dat$Sample == "26759_Right",] | |
330 tripletAnalysis(one, "16278_Right", two, "26402_Right", three, "26759_Right", product=product, interval=interval, on="normalized_read_count") | |
331 | |
332 | |
333 interval = intervalFreq | |
334 intervalOrder = data.frame("interval"=paste(">", interval, sep=""), "intervalOrder"=1:length(interval)) | |
335 product = data.frame("Titles"=rep(Titles, each=length(interval)), "interval"=rep(interval, times=10), "V_Segments"=rep(V_Segments, each=length(interval)), "J_Segments"=rep(J_Segments, each=length(interval))) | |
336 | |
337 one = dat[dat$Patient == "VanDongen_cALL_14696.1",] | |
338 two = dat[dat$Patient == "VanDongen_cALL_14696.2",] | |
339 three = dat[dat$Patient == "VanDongen_cALL_14696.3",] | |
340 tripletAnalysis(one, "14696_1", two, "14696_2", three, "14696_3", product=product, interval=interval, on="Frequency", T) | |
341 | |
342 one = dat[dat$Sample == "16278_Left",] | |
343 two = dat[dat$Sample == "26402_Left",] | |
344 three = dat[dat$Sample == "26759_Left",] | |
345 tripletAnalysis(one, "16278_Left", two, "26402_Left", three, "26759_Left", product=product, interval=interval, on="Frequency", T) | |
346 | |
347 one = dat[dat$Sample == "16278_Right",] | |
348 two = dat[dat$Sample == "26402_Right",] | |
349 three = dat[dat$Sample == "26759_Right",] | |
350 tripletAnalysis(one, "16278_Right", two, "26402_Right", three, "26759_Right", product=product, interval=interval, on="Frequency", T) | |
351 | |
352 | |
353 |