annotate merge_and_filter.r @ 77:58d2377b507d draft

Uploaded
author davidvanzessen
date Wed, 19 Jun 2019 04:31:44 -0400
parents ba33b94637ca
children aff3ba86ef7a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
67
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
1 args <- commandArgs(trailingOnly = TRUE)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
2
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
3
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
4 summaryfile = args[1]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
5 sequencesfile = args[2]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
6 mutationanalysisfile = args[3]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
7 mutationstatsfile = args[4]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
8 hotspotsfile = args[5]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
9 aafile = args[6]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
10 gene_identification_file= args[7]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
11 output = args[8]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
12 before.unique.file = args[9]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
13 unmatchedfile = args[10]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
14 method=args[11]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
15 functionality=args[12]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
16 unique.type=args[13]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
17 filter.unique=args[14]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
18 filter.unique.count=as.numeric(args[15])
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
19 class.filter=args[16]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
20 empty.region.filter=args[17]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
21
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
22 print(paste("filter.unique.count:", filter.unique.count))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
23
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
24 summ = read.table(summaryfile, header=T, sep="\t", fill=T, stringsAsFactors=F, quote="")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
25 sequences = read.table(sequencesfile, header=T, sep="\t", fill=T, stringsAsFactors=F, quote="")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
26 mutationanalysis = read.table(mutationanalysisfile, header=T, sep="\t", fill=T, stringsAsFactors=F, quote="")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
27 mutationstats = read.table(mutationstatsfile, header=T, sep="\t", fill=T, stringsAsFactors=F, quote="")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
28 hotspots = read.table(hotspotsfile, header=T, sep="\t", fill=T, stringsAsFactors=F, quote="")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
29 AAs = read.table(aafile, header=T, sep="\t", fill=T, stringsAsFactors=F, quote="")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
30 gene_identification = read.table(gene_identification_file, header=T, sep="\t", fill=T, stringsAsFactors=F, quote="")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
31
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
32 fix_column_names = function(df){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
33 if("V.DOMAIN.Functionality" %in% names(df)){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
34 names(df)[names(df) == "V.DOMAIN.Functionality"] = "Functionality"
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
35 print("found V.DOMAIN.Functionality, changed")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
36 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
37 if("V.DOMAIN.Functionality.comment" %in% names(df)){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
38 names(df)[names(df) == "V.DOMAIN.Functionality.comment"] = "Functionality.comment"
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
39 print("found V.DOMAIN.Functionality.comment, changed")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
40 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
41 return(df)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
42 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
43
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
44 fix_non_unique_ids = function(df){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
45 df$Sequence.ID = paste(df$Sequence.ID, 1:nrow(df))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
46 return(df)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
47 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
48
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
49 summ = fix_column_names(summ)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
50 sequences = fix_column_names(sequences)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
51 mutationanalysis = fix_column_names(mutationanalysis)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
52 mutationstats = fix_column_names(mutationstats)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
53 hotspots = fix_column_names(hotspots)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
54 AAs = fix_column_names(AAs)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
55
77
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
56 if(!("Sequence.number" %in% names(summ))){
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
57 summ["Sequence.number"] = 1:nrow(summ)
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
58 }
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
59
67
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
60 if(method == "blastn"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
61 #"qseqid\tsseqid\tpident\tlength\tmismatch\tgapopen\tqstart\tqend\tsstart\tsend\tevalue\tbitscore"
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
62 gene_identification = gene_identification[!duplicated(gene_identification$qseqid),]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
63 ref_length = data.frame(sseqid=c("ca1", "ca2", "cg1", "cg2", "cg3", "cg4", "cm"), ref.length=c(81,81,141,141,141,141,52))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
64 gene_identification = merge(gene_identification, ref_length, by="sseqid", all.x=T)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
65 gene_identification$chunk_hit_percentage = (gene_identification$length / gene_identification$ref.length) * 100
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
66 gene_identification = gene_identification[,c("qseqid", "chunk_hit_percentage", "pident", "qstart", "sseqid")]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
67 colnames(gene_identification) = c("Sequence.ID", "chunk_hit_percentage", "nt_hit_percentage", "start_locations", "best_match")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
68 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
69
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
70 #print("Summary analysis files columns")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
71 #print(names(summ))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
72
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
73
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
74
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
75 input.sequence.count = nrow(summ)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
76 print(paste("Number of sequences in summary file:", input.sequence.count))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
77
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
78 filtering.steps = data.frame(character(0), numeric(0))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
79
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
80 filtering.steps = rbind(filtering.steps, c("Input", input.sequence.count))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
81
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
82 filtering.steps[,1] = as.character(filtering.steps[,1])
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
83 filtering.steps[,2] = as.character(filtering.steps[,2])
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
84 #filtering.steps[,3] = as.numeric(filtering.steps[,3])
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
85
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
86 #print("summary files columns")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
87 #print(names(summ))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
88
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
89 summ = merge(summ, gene_identification, by="Sequence.ID")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
90
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
91 print(paste("Number of sequences after merging with gene identification:", nrow(summ)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
92
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
93 summ = summ[summ$Functionality != "No results",]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
94
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
95 print(paste("Number of sequences after 'No results' filter:", nrow(summ)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
96
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
97 filtering.steps = rbind(filtering.steps, c("After 'No results' filter", nrow(summ)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
98
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
99 if(functionality == "productive"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
100 summ = summ[summ$Functionality == "productive (see comment)" | summ$Functionality == "productive",]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
101 } else if (functionality == "unproductive"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
102 summ = summ[summ$Functionality == "unproductive (see comment)" | summ$Functionality == "unproductive",]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
103 } else if (functionality == "remove_unknown"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
104 summ = summ[summ$Functionality != "No results" & summ$Functionality != "unknown (see comment)" & summ$Functionality != "unknown",]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
105 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
106
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
107 print(paste("Number of sequences after functionality filter:", nrow(summ)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
108
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
109 filtering.steps = rbind(filtering.steps, c("After functionality filter", nrow(summ)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
110
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
111 if(F){ #to speed up debugging
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
112 set.seed(1)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
113 summ = summ[sample(nrow(summ), floor(nrow(summ) * 0.03)),]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
114 print(paste("Number of sequences after sampling 3%:", nrow(summ)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
115
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
116 filtering.steps = rbind(filtering.steps, c("Number of sequences after sampling 3%", nrow(summ)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
117 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
118
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
119 print("mutation analysis files columns")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
120 print(names(mutationanalysis[,!(names(mutationanalysis) %in% names(summ)[-1])]))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
121
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
122 result = merge(summ, mutationanalysis[,!(names(mutationanalysis) %in% names(summ)[-1])], by="Sequence.ID")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
123
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
124 print(paste("Number of sequences after merging with mutation analysis file:", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
125
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
126 #print("mutation stats files columns")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
127 #print(names(mutationstats[,!(names(mutationstats) %in% names(result)[-1])]))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
128
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
129 result = merge(result, mutationstats[,!(names(mutationstats) %in% names(result)[-1])], by="Sequence.ID")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
130
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
131 print(paste("Number of sequences after merging with mutation stats file:", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
132
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
133 print("hotspots files columns")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
134 print(names(hotspots[,!(names(hotspots) %in% names(result)[-1])]))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
135
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
136 result = merge(result, hotspots[,!(names(hotspots) %in% names(result)[-1])], by="Sequence.ID")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
137
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
138 print(paste("Number of sequences after merging with hotspots file:", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
139
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
140 print("sequences files columns")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
141 print(c("FR1.IMGT", "CDR1.IMGT", "FR2.IMGT", "CDR2.IMGT", "FR3.IMGT", "CDR3.IMGT"))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
142
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
143 sequences = sequences[,c("Sequence.ID", "FR1.IMGT", "CDR1.IMGT", "FR2.IMGT", "CDR2.IMGT", "FR3.IMGT", "CDR3.IMGT")]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
144 names(sequences) = c("Sequence.ID", "FR1.IMGT.seq", "CDR1.IMGT.seq", "FR2.IMGT.seq", "CDR2.IMGT.seq", "FR3.IMGT.seq", "CDR3.IMGT.seq")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
145 result = merge(result, sequences, by="Sequence.ID", all.x=T)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
146
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
147 AAs = AAs[,c("Sequence.ID", "CDR3.IMGT")]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
148 names(AAs) = c("Sequence.ID", "CDR3.IMGT.AA")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
149 result = merge(result, AAs, by="Sequence.ID", all.x=T)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
150
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
151 print(paste("Number of sequences in result after merging with sequences:", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
152
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
153 result$VGene = gsub("^Homsap ", "", result$V.GENE.and.allele)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
154 result$VGene = gsub("[*].*", "", result$VGene)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
155 result$DGene = gsub("^Homsap ", "", result$D.GENE.and.allele)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
156 result$DGene = gsub("[*].*", "", result$DGene)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
157 result$JGene = gsub("^Homsap ", "", result$J.GENE.and.allele)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
158 result$JGene = gsub("[*].*", "", result$JGene)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
159
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
160 splt = strsplit(class.filter, "_")[[1]]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
161 chunk_hit_threshold = as.numeric(splt[1])
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
162 nt_hit_threshold = as.numeric(splt[2])
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
163
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
164 higher_than=(result$chunk_hit_percentage >= chunk_hit_threshold & result$nt_hit_percentage >= nt_hit_threshold)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
165
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
166 if(!all(higher_than, na.rm=T)){ #check for no unmatched
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
167 result[!higher_than,"best_match"] = paste("unmatched,", result[!higher_than,"best_match"])
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
168 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
169
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
170 if(class.filter == "101_101"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
171 result$best_match = "all"
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
172 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
173
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
174 write.table(x=result, file=gsub("merged.txt$", "before_filters.txt", output), sep="\t",quote=F,row.names=F,col.names=T)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
175
77
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
176 missing.FR1 = result$FR1.IMGT.seq == "" | is.na(result$FR1.IMGT.seq)
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
177 missing.CDR1 = result$CDR1.IMGT.seq == "" | is.na(result$CDR1.IMGT.seq)
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
178 missing.FR2 = result$FR2.IMGT.seq == "" | is.na(result$FR2.IMGT.seq)
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
179 missing.CDR2 = result$CDR2.IMGT.seq == "" | is.na(result$CDR2.IMGT.seq)
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
180 missing.FR3 = result$FR3.IMGT.seq == "" | is.na(result$FR3.IMGT.seq)
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
181
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
182 print(paste("Number of empty CDR1 sequences:", sum(missing.FR1)))
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
183 print(paste("Number of empty FR2 sequences:", sum(missing.CDR1)))
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
184 print(paste("Number of empty CDR2 sequences:", sum(missing.FR2)))
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
185 print(paste("Number of empty FR3 sequences:", sum(missing.CDR2)))
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
186 print(paste("Number of empty FR3 sequences:", sum(missing.FR3)))
67
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
187
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
188 if(empty.region.filter == "leader"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
189 result = result[result$FR1.IMGT.seq != "" & result$CDR1.IMGT.seq != "" & result$FR2.IMGT.seq != "" & result$CDR2.IMGT.seq != "" & result$FR3.IMGT.seq != "", ]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
190 } else if(empty.region.filter == "FR1"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
191 result = result[result$CDR1.IMGT.seq != "" & result$FR2.IMGT.seq != "" & result$CDR2.IMGT.seq != "" & result$FR3.IMGT.seq != "", ]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
192 } else if(empty.region.filter == "CDR1"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
193 result = result[result$FR2.IMGT.seq != "" & result$CDR2.IMGT.seq != "" & result$FR3.IMGT.seq != "", ]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
194 } else if(empty.region.filter == "FR2"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
195 result = result[result$CDR2.IMGT.seq != "" & result$FR3.IMGT.seq != "", ]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
196 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
197
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
198 print(paste("After removal sequences that are missing a gene region:", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
199 filtering.steps = rbind(filtering.steps, c("After removal sequences that are missing a gene region", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
200
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
201 if(empty.region.filter == "leader"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
202 result = result[!(grepl("n|N", result$FR1.IMGT.seq) | grepl("n|N", result$FR2.IMGT.seq) | grepl("n|N", result$FR3.IMGT.seq) | grepl("n|N", result$CDR1.IMGT.seq) | grepl("n|N", result$CDR2.IMGT.seq) | grepl("n|N", result$CDR3.IMGT.seq)),]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
203 } else if(empty.region.filter == "FR1"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
204 result = result[!(grepl("n|N", result$FR2.IMGT.seq) | grepl("n|N", result$FR3.IMGT.seq) | grepl("n|N", result$CDR1.IMGT.seq) | grepl("n|N", result$CDR2.IMGT.seq) | grepl("n|N", result$CDR3.IMGT.seq)),]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
205 } else if(empty.region.filter == "CDR1"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
206 result = result[!(grepl("n|N", result$FR2.IMGT.seq) | grepl("n|N", result$FR3.IMGT.seq) | grepl("n|N", result$CDR2.IMGT.seq) | grepl("n|N", result$CDR3.IMGT.seq)),]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
207 } else if(empty.region.filter == "FR2"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
208 result = result[!(grepl("n|N", result$FR3.IMGT.seq) | grepl("n|N", result$CDR2.IMGT.seq) | grepl("n|N", result$CDR3.IMGT.seq)),]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
209 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
210
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
211 print(paste("Number of sequences in result after n filtering:", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
212 filtering.steps = rbind(filtering.steps, c("After N filter", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
213
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
214 cleanup_columns = c("FR1.IMGT.Nb.of.mutations",
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
215 "CDR1.IMGT.Nb.of.mutations",
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
216 "FR2.IMGT.Nb.of.mutations",
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
217 "CDR2.IMGT.Nb.of.mutations",
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
218 "FR3.IMGT.Nb.of.mutations")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
219
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
220 for(col in cleanup_columns){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
221 result[,col] = gsub("\\(.*\\)", "", result[,col])
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
222 result[,col] = as.numeric(result[,col])
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
223 result[is.na(result[,col]),] = 0
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
224 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
225
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
226 write.table(result, before.unique.file, sep="\t", quote=F,row.names=F,col.names=T)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
227
77
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
228
67
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
229 if(filter.unique != "no"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
230 clmns = names(result)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
231 if(filter.unique == "remove_vjaa"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
232 result$unique.def = paste(result$VGene, result$JGene, result$CDR3.IMGT.AA)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
233 } else if(empty.region.filter == "leader"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
234 result$unique.def = paste(result$FR1.IMGT.seq, result$CDR1.IMGT.seq, result$FR2.IMGT.seq, result$CDR2.IMGT.seq, result$FR3.IMGT.seq, result$CDR3.IMGT.seq)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
235 } else if(empty.region.filter == "FR1"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
236 result$unique.def = paste(result$CDR1.IMGT.seq, result$FR2.IMGT.seq, result$CDR2.IMGT.seq, result$FR3.IMGT.seq, result$CDR3.IMGT.seq)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
237 } else if(empty.region.filter == "CDR1"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
238 result$unique.def = paste(result$FR2.IMGT.seq, result$CDR2.IMGT.seq, result$FR3.IMGT.seq, result$CDR3.IMGT.seq)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
239 } else if(empty.region.filter == "FR2"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
240 result$unique.def = paste(result$CDR2.IMGT.seq, result$FR3.IMGT.seq, result$CDR3.IMGT.seq)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
241 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
242
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
243 if(grepl("remove", filter.unique)){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
244 result = result[duplicated(result$unique.def) | duplicated(result$unique.def, fromLast=T),]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
245 unique.defs = data.frame(table(result$unique.def))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
246 unique.defs = unique.defs[unique.defs$Freq >= filter.unique.count,]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
247 result = result[result$unique.def %in% unique.defs$Var1,]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
248 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
249
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
250 if(filter.unique != "remove_vjaa"){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
251 result$unique.def = paste(result$unique.def, gsub(",.*", "", result$best_match)) #keep the unique sequences that are in multiple classes, gsub so the unmatched don't have a class after it
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
252 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
253
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
254 result = result[!duplicated(result$unique.def),]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
255 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
256
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
257 write.table(result, gsub("before_unique_filter.txt", "after_unique_filter.txt", before.unique.file), sep="\t", quote=F,row.names=F,col.names=T)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
258
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
259 filtering.steps = rbind(filtering.steps, c("After filter unique sequences", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
260
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
261 print(paste("Number of sequences in result after unique filtering:", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
262
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
263 if(nrow(summ) == 0){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
264 stop("No data remaining after filter")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
265 }
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
266
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
267 result$best_match_class = gsub(",.*", "", result$best_match) #gsub so the unmatched don't have a class after it
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
268
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
269 #result$past = ""
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
270 #cls = unlist(strsplit(unique.type, ","))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
271 #for (i in 1:nrow(result)){
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
272 # result[i,"past"] = paste(result[i,cls], collapse=":")
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
273 #}
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
274
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
275
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
276
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
277 result$past = do.call(paste, c(result[unlist(strsplit(unique.type, ","))], sep = ":"))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
278
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
279 result.matched = result[!grepl("unmatched", result$best_match),]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
280 result.unmatched = result[grepl("unmatched", result$best_match),]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
281
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
282 result = rbind(result.matched, result.unmatched)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
283
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
284 result = result[!(duplicated(result$past)), ]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
285
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
286 result = result[,!(names(result) %in% c("past", "best_match_class"))]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
287
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
288 print(paste("Number of sequences in result after", unique.type, "filtering:", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
289
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
290 filtering.steps = rbind(filtering.steps, c("After remove duplicates based on filter", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
291
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
292 unmatched = result[grepl("^unmatched", result$best_match),c("Sequence.ID", "chunk_hit_percentage", "nt_hit_percentage", "start_locations", "best_match")]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
293
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
294 print(paste("Number of rows in result:", nrow(result)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
295 print(paste("Number of rows in unmatched:", nrow(unmatched)))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
296
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
297 matched.sequences = result[!grepl("^unmatched", result$best_match),]
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
298
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
299 write.table(x=matched.sequences, file=gsub("merged.txt$", "filtered.txt", output), sep="\t",quote=F,row.names=F,col.names=T)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
300
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
301 matched.sequences.count = nrow(matched.sequences)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
302 unmatched.sequences.count = sum(grepl("^unmatched", result$best_match))
77
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
303 if(matched.sequences.count <= unmatched.sequences.count){
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
304 print("WARNING NO MATCHED (SUB)CLASS SEQUENCES!!")
58d2377b507d Uploaded
davidvanzessen
parents: 67
diff changeset
305 }
67
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
306
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
307 filtering.steps = rbind(filtering.steps, c("Number of matched sequences", matched.sequences.count))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
308 filtering.steps = rbind(filtering.steps, c("Number of unmatched sequences", unmatched.sequences.count))
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
309 filtering.steps[,2] = as.numeric(filtering.steps[,2])
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
310 filtering.steps$perc = round(filtering.steps[,2] / input.sequence.count * 100, 2)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
311
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
312 write.table(x=filtering.steps, file=gsub("unmatched", "filtering_steps", unmatchedfile), sep="\t",quote=F,row.names=F,col.names=F)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
313
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
314 write.table(x=result, file=output, sep="\t",quote=F,row.names=F,col.names=T)
ba33b94637ca Uploaded
davidvanzessen
parents: 61
diff changeset
315 write.table(x=unmatched, file=unmatchedfile, sep="\t",quote=F,row.names=F,col.names=T)