annotate oncodriveclust_merge.R @ 2:c3ed203d814d draft

Uploaded
author morinlab
date Sun, 04 Dec 2016 20:47:23 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
1 require(maftools);
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
2 library(argparse);
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
3 require(data.table);
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
4
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
5 ###
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
6
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
7 parser <- ArgumentParser(description="Create a Gene Lollipop using Maftools");
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
8
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
9 parser$add_argument(
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
10 "--input_maf", "-maf",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
11 required="True",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
12 help="Input Variants in MAF format"
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
13 );
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
14
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
15 parser$add_argument(
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
16 "--gene_blacklist", "-gl",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
17 help="Input gene list with separated by newline"
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
18 );
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
19
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
20 parser$add_argument(
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
21 "--min_mut", "-mm",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
22 default=5,
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
23 help="Minimum number of mutations seen in the gene for it to be included in the calculation");
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
24
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
25 parser$add_argument(
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
26 "--fdr", "-f",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
27 default=0.1,
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
28 help="FDR threshold to use in plots and returned gene list");
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
29
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
30 parser$add_argument(
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
31 "--aacol", "-ac",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
32 help="Optionally provide the name of the column that contains the amino acid annotation in your MAF file");
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
33
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
34 parser$add_argument(
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
35 "--output_detail", "-o",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
36 required="True",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
37 help="Output text file for oncodriveclust detail"
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
38 )
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
39
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
40 parser$add_argument(
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
41 "--output_plot", "-p",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
42 required="True",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
43 help="Output pdf file for oncodriveclust detail"
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
44 )
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
45
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
46 args <- parser$parse_args();
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
47
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
48 ###
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
49
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
50
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
51 aacol = 'HGVSp_Short'
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
52 if(!is.null(args$aacol)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
53 aacol = args$aacol
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
54 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
55
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
56 min_mut = as.integer(args$min_mut)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
57
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
58
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
59 #--------------------- based on binaomial distribution, estimate threshhold.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
60 get_threshold = function(gene_muts, gene_length){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
61 th = which(unlist(lapply(X = 2:gene_muts, FUN = function(x) dbinom(x = x, size = gene_muts, prob = 1/gene_length) )) < 0.01)[1]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
62 return(th+1)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
63 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
64 #-------------------- end of function.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
65
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
66 parse_prot_fix = function(dat, AACol, gl, m, calBg = FALSE, nBg){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
67
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
68 if(is.null(AACol)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
69 if(! 'AAChange' %in% colnames(dat)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
70 message('Available fields:')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
71 print(colnames(dat))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
72 stop('AAChange field not found in MAF. Use argument AACol to manually specifiy field name containing protein changes.')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
73 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
74 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
75 colnames(dat)[which(colnames(dat) == AACol)] = 'AAChange'
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
76 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
77
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
78 all.prot.dat = dat[,.(Hugo_Symbol, Variant_Classification, AAChange)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
79 all.prot.dat = all.prot.dat[Variant_Classification != 'Splice_Site']
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
80 #parse AAchanges to get postion
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
81 prot.spl = strsplit(x = as.character(all.prot.dat$AAChange), split = '.', fixed = TRUE)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
82 prot.conv = sapply(prot.spl, function(x) x[length(x)])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
83
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
84 all.prot.dat[,conv := prot.conv]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
85 all.prot.dat = all.prot.dat[!conv == 'NULL']
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
86
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
87 #If conversions are in HGVSp_long (default HGVSp) format, we will remove strings Ter followed by anything (e.g; p.Asn1986GlnfsTer13)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
88 pos = gsub(pattern = 'Ter.*', replacement = '',x = all.prot.dat$conv)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
89
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
90 #Following parsing takes care of most of HGVSp_short and HGVSp_long format
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
91 pos = gsub(pattern = '[[:alpha:]]', replacement = '', x = pos)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
92 pos = gsub(pattern = '\\*$', replacement = '', x = pos) #Remove * if nonsense mutation ends with *
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
93 pos = gsub(pattern = '^\\*', replacement = '', x = pos) #Remove * if nonsense mutation starts with *
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
94 pos = gsub(pattern = '\\*.*', replacement = '', x = pos) #Remove * followed by position e.g, p.C229Lfs*18
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
95
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
96 pos = suppressWarnings( as.numeric(sapply(strsplit(x = pos, split = '_', fixed = TRUE), '[', 1)) )
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
97 all.prot.dat[,pos := pos]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
98
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
99 if(nrow( all.prot.dat[is.na(all.prot.dat$pos),]) > 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
100 #message(paste('Removed', nrow( all.prot.dat[is.na(all.prot.dat$pos),]), 'mutations for which AA position was not available', sep = ' '))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
101 #print(prot.dat[is.na(prot.dat$pos),])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
102 all.prot.dat = all.prot.dat[!is.na(all.prot.dat$pos),]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
103 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
104
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
105 gene.sum = summarizeMaf_fix(maf = dat)$gene.summary
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
106 #gene.sum = merge.data.frame(x = gene.sum, y = gl, by = 'Hugo_Symbol', all.x = TRUE)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
107 gene.sum = merge(x = gene.sum, y = gl, by = 'Hugo_Symbol', all.x = TRUE)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
108 #gene.sum = gene.sum[!is.na(gene.sum$aa.length),]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
109 gene.sum = gene.sum[!is.na(gene.sum$aa.length)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
110
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
111 num_mut_colIndex = which(colnames(gene.sum) == 'total')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
112 aalen_colIndex = which(colnames(gene.sum) == 'aa.length')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
113
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
114 #Get background threshold
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
115 gene.sum$th = apply(gene.sum, 1, function(x) get_threshold(gene_muts = as.numeric(x[num_mut_colIndex]), gene_length = as.numeric(x[aalen_colIndex])))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
116 #use only genes with atleast 2 (or m ) mutations.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
117 gene.sum = gene.sum[total >= m]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
118
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
119 if(calBg){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
120 if(nrow(gene.sum) < nBg){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
121 #message("Not enough genes to build background. Using predefined values. (Mean = 0.279; SD = 0.13)")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
122 return(NULL)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
123 } else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
124 syn.res = c()
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
125 pb <- txtProgressBar(min = 0, max = nrow(gene.sum), style = 3) #progress bar
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
126
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
127 for(i in 1:nrow(gene.sum)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
128 prot.dat = all.prot.dat[Hugo_Symbol == gene.sum[i, "Hugo_Symbol"]]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
129 syn.res = rbind(syn.res, cluster_prot_fix(prot.dat = prot.dat, gene = gene.sum[i, "Hugo_Symbol"], th = gene.sum[i,"th"], protLen = gene.sum[i,"aa.length"]))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
130 setTxtProgressBar(pb, i)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
131 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
132 return(syn.res)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
133 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
134 } else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
135 nonsyn.res = c()
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
136 pb <- txtProgressBar(min = 0, max = nrow(gene.sum), style = 3) #progress bar
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
137
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
138 for(i in 1:nrow(gene.sum)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
139 hs = gene.sum[i, Hugo_Symbol]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
140 #print(hs)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
141 prot.dat = all.prot.dat[Hugo_Symbol %in% hs]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
142 nonsyn.res = rbind(nonsyn.res, cluster_prot_fix(prot.dat = prot.dat, gene = hs, th = gene.sum[Hugo_Symbol %in% hs, th], protLen = gene.sum[Hugo_Symbol %in% hs, aa.length]))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
143 setTxtProgressBar(pb, i)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
144 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
145 return(nonsyn.res)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
146 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
147 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
148
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
149 cluster_prot_fix = function(prot.dat, gene, th, protLen){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
150
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
151 mergeDist = 5 #hard coded inter event distance.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
152 #prot.dat = all.prot.dat[Hugo_Symbol == gene]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
153
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
154 #Summarise counts per position
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
155 pos.counts = prot.dat[,.N,pos]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
156 pos.counts = pos.counts[order(pos)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
157
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
158 #classify position as meaningful if its greater than background threshhold.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
159 pos.counts$cluster = ifelse(test = pos.counts$N >= th, yes = 'meaningful', no = 'nonMeaningful')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
160
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
161 #Just choose meaningful positions
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
162 clust.tbl = pos.counts[cluster %in% 'meaningful']
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
163 nonclust.tbl = pos.counts[cluster %in% 'nonMeaningful']
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
164
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
165 if(nrow(clust.tbl) == 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
166 #message(paste('No meaningful positions found for', gene, sep=' '))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
167 return(NULL)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
168 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
169
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
170 clust.tbl$distance = c(0,diff(clust.tbl$pos)) #calculate inter event distance.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
171
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
172 #If more than one meaningful positions are found within a 5 aa distance, join them to form a cluster.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
173 if(nrow(clust.tbl) > 1){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
174
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
175 #initialize variables.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
176 cstart = end = clust.tbl[1,pos]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
177 n = clust.tbl[1,N]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
178 cdf = c()
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
179 cluster = 1
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
180
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
181 #Go through entire table and update variables.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
182 for(i in 2:nrow(clust.tbl)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
183 pos = clust.tbl[i,pos]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
184
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
185 d = clust.tbl[i,distance]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
186
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
187 if(d < mergeDist){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
188 end = pos
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
189 n = n + clust.tbl[i,N]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
190 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
191 tempdf = data.frame(cluster = paste('cluster', cluster, sep='_'), start = cstart, end = end ,N = n)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
192 cdf = rbind(cdf, tempdf)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
193 cstart = end = pos
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
194 n = clust.tbl[i,N]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
195 cluster = cluster + 1
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
196 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
197 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
198 cdf = rbind(cdf, data.frame(cluster = paste('cluster', cluster, sep='_'), start = cstart, end = end ,N = n))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
199 } else {
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
200 cdf = data.frame(cluster = 'cluster_1', start = clust.tbl$pos, end = clust.tbl$pos ,N = clust.tbl$N)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
201 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
202
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
203 #merge adjacent variants to clusters.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
204 for(i in 1:nrow(cdf)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
205 tempcdf = cdf[i,]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
206 nonclust.tbl$startDist = nonclust.tbl$pos - tempcdf$start
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
207 nonclust.tbl$endDist = nonclust.tbl$pos - tempcdf$end
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
208
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
209 merge.adj.to.start = nonclust.tbl[startDist >= -5 & startDist <= 0]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
210 if(nrow(merge.adj.to.start) > 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
211 tempcdf$start = merge.adj.to.start[which(merge.adj.to.start$startDist == min(merge.adj.to.start$startDist)),pos]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
212 tempcdf$N = tempcdf$N + sum(merge.adj.to.start$N)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
213 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
214
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
215 merge.adj.to.end = nonclust.tbl[endDist <= 5 & endDist >= 0]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
216 if(nrow(merge.adj.to.end) > 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
217 tempcdf$end = merge.adj.to.end[which(merge.adj.to.end$endDist == max(merge.adj.to.end$endDist)),pos]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
218 tempcdf$N = tempcdf$N + sum(merge.adj.to.end$N)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
219 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
220 cdf[i,] = tempcdf
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
221 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
222 cdf$Hugo_Symbol = gene
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
223
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
224 #Calcluate cluster score.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
225
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
226 total.muts = nrow(prot.dat) #total variants for this gene.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
227 clusterScores = c()
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
228
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
229 for(i in 1:nrow(cdf)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
230 temp.prot.dat = prot.dat[pos >= as.numeric(cdf$start[i]) & pos <= as.numeric(cdf$end[i])]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
231 temp.prot.dat.summary = temp.prot.dat[,.N, pos]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
232 temp.prot.dat.summary[,fraction:= N/total.muts]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
233
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
234 peak = temp.prot.dat.summary[N == max(N), pos]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
235
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
236 posVector = as.numeric(temp.prot.dat.summary[,pos])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
237 fractionMutVector = unlist(lapply(posVector, FUN = function(x) temp.prot.dat.summary[pos == x, fraction]))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
238 distanceVector = suppressWarnings(abs(posVector - peak))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
239
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
240 clusterScores = c(clusterScores, sum( fractionMutVector / (sqrt(2)^ distanceVector)))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
241
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
242 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
243
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
244 cdf$clusterScore = clusterScores
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
245
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
246 gene.clust.res = data.frame(Hugo_Symbol = gene, clusters = nrow(cdf), muts_in_clusters = sum(cdf$N), clusterScores = sum(cdf$clusterScore), protLen = protLen)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
247 return(gene.clust.res)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
248 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
249
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
250
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
251
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
252
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
253
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
254 createOncoMatrix<- function(maf){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
255
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
256 message('Creating oncomatrix (this might take a while)..')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
257
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
258 oncomat = data.table::dcast(data = maf[,.(Hugo_Symbol, Variant_Classification, Tumor_Sample_Barcode)], formula = Hugo_Symbol ~ Tumor_Sample_Barcode,
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
259 fun.aggregate = function(x) {ifelse(test = length(as.character(x))>1 ,
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
260 no = as.character(x), yes = vcr(x, gis = FALSE))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
261 }, value.var = 'Variant_Classification', fill = '')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
262
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
263 #If maf contains only one sample converting to matrix is not trivial.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
264 if(ncol(oncomat) == 2){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
265 genes = oncomat[,Hugo_Symbol]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
266 sampleId = colnames(oncomat)[2]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
267 oncomat = as.matrix(data.frame(row.names = genes, sample = oncomat[,2, with =FALSE]))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
268 }else if(nrow(oncomat) == 1){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
269 #If MAF has only one gene
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
270 gene = oncomat[,Hugo_Symbol]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
271 oncomat[,Hugo_Symbol:= NULL]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
272 oncomat = as.matrix(oncomat)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
273 rownames(oncomat) = gene
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
274 sampleID = colnames(oncomat)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
275 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
276 oncomat = as.matrix(oncomat)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
277 rownames(oncomat) = oncomat[,1]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
278 oncomat = oncomat[,-1]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
279 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
280
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
281 variant.classes = as.character(unique(maf[,Variant_Classification]))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
282 variant.classes = c('',variant.classes, 'Multi_Hit')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
283 names(variant.classes) = 0:(length(variant.classes)-1)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
284
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
285 #Complex variant classes will be assigned a single integer.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
286 vc.onc = unique(unlist(apply(oncomat, 2, unique)))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
287 vc.onc = vc.onc[!vc.onc %in% names(variant.classes)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
288 names(vc.onc) = rep(as.character(as.numeric(names(variant.classes)[length(variant.classes)])+1), length(vc.onc))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
289 variant.classes2 = c(variant.classes, vc.onc)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
290
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
291 oncomat.copy <- oncomat
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
292 #Make a numeric coded matrix
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
293 for(i in 1:length(variant.classes2)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
294 oncomat[oncomat == variant.classes2[i]] = names(variant.classes2)[i]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
295 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
296
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
297 #If maf has only one gene
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
298 if(nrow(oncomat) == 1){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
299 mdf = t(matrix(as.numeric(oncomat)))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
300 rownames(mdf) = gene
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
301 colnames(mdf) = sampleID
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
302 return(list(oncomat = oncomat.copy, nummat = mdf, vc = variant.classes))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
303 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
304
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
305 #convert from character to numeric
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
306 mdf = as.matrix(apply(oncomat, 2, function(x) as.numeric(as.character(x))))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
307 rownames(mdf) = rownames(oncomat.copy)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
308
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
309 message('Sorting..')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
310
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
311 #If MAF file contains a single sample, simple sorting is enuf.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
312 if(ncol(mdf) == 1){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
313 mdf = as.matrix(mdf[order(mdf, decreasing = TRUE),])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
314 colnames(mdf) = sampleId
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
315
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
316 oncomat.copy = as.matrix(oncomat.copy[rownames(mdf),])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
317 colnames(oncomat.copy) = sampleId
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
318
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
319 return(list(oncomat = oncomat.copy, nummat = mdf, vc = variant.classes))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
320 } else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
321 #Sort by rows as well columns if >1 samples present in MAF
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
322 #Add total variants per gene
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
323 mdf = cbind(mdf, variants = apply(mdf, 1, function(x) {
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
324 length(x[x != "0"])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
325 }))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
326 #Sort by total variants
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
327 mdf = mdf[order(mdf[, ncol(mdf)], decreasing = TRUE), ]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
328 colnames(mdf) = gsub(pattern = "^X", replacement = "", colnames(mdf))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
329 nMut = mdf[, ncol(mdf)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
330
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
331 mdf = mdf[, -ncol(mdf)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
332
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
333 mdf.temp.copy = mdf #temp copy of original unsorted numeric coded matrix
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
334
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
335 mdf[mdf != 0] = 1 #replacing all non-zero integers with 1 improves sorting (& grouping)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
336 tmdf = t(mdf) #transposematrix
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
337 mdf = t(tmdf[do.call(order, c(as.list(as.data.frame(tmdf)), decreasing = TRUE)), ]) #sort
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
338
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
339 mdf.temp.copy = mdf.temp.copy[rownames(mdf),] #organise original matrix into sorted matrix
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
340 mdf.temp.copy = mdf.temp.copy[,colnames(mdf)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
341 mdf = mdf.temp.copy
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
342
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
343 #organise original character matrix into sorted matrix
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
344 oncomat.copy <- oncomat.copy[,colnames(mdf)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
345 oncomat.copy <- oncomat.copy[rownames(mdf),]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
346
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
347 return(list(oncomat = oncomat.copy, nummat = mdf, vc = variant.classes))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
348 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
349 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
350
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
351 validateMaf<-function(maf, rdup = TRUE, isTCGA = isTCGA){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
352
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
353 #necessary fields.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
354 required.fields = c('Hugo_Symbol', 'Chromosome', 'Start_Position', 'End_Position', 'Reference_Allele', 'Tumor_Seq_Allele2',
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
355 'Variant_Classification', 'Variant_Type', 'Tumor_Sample_Barcode')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
356
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
357 #Change column names to standard names; i.e, camel case
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
358 for(i in 1:length(required.fields)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
359 colId = suppressWarnings(grep(pattern = required.fields[i], x = colnames(maf), ignore.case = TRUE))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
360 if(length(colId) > 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
361 colnames(maf)[colId] = required.fields[i]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
362 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
363 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
364
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
365 missing.fileds = required.fields[!required.fields %in% colnames(maf)] #check if any of them are missing
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
366
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
367 if(length(missing.fileds) > 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
368 missing.fileds = paste(missing.fileds[1], sep = ',', collapse = ', ')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
369 stop(paste('missing required fields from MAF:', missing.fileds)) #stop if any of required.fields are missing
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
370 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
371
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
372 #convert "-" to "." in "Tumor_Sample_Barcode" to avoid complexity in naming
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
373 maf$Tumor_Sample_Barcode = gsub(pattern = '-', replacement = '.', x = as.character(maf$Tumor_Sample_Barcode))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
374
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
375 if(rdup){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
376 maf = maf[, variantId := paste(Chromosome, Start_Position, Tumor_Sample_Barcode, sep = ':')]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
377 if(nrow(maf[duplicated(variantId)]) > 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
378 message("NOTE: Removed ", nrow(maf[duplicated(variantId)]) ," duplicated variants")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
379 maf = maf[!duplicated(variantId)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
380 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
381 maf[,variantId := NULL]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
382 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
383
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
384 if(nrow(maf[Hugo_Symbol %in% ""]) > 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
385 message('NOTE: Found ', nrow(maf[Hugo_Symbol %in% ""]), ' variants with no Gene Symbols.')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
386 print(maf[Hugo_Symbol %in% "", required.fields, with = FALSE])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
387 message("Annotating them as 'UnknownGene' for convenience")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
388 maf$Hugo_Symbol = ifelse(test = maf$Hugo_Symbol == "", yes = 'UnknownGene', no = maf$Hugo_Symbol)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
389 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
390
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
391 if(nrow(maf[is.na(Hugo_Symbol)]) > 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
392 message('NOTE: Found ', nrow(maf[is.na(Hugo_Symbol) > 0]), ' variants with no Gene Symbols.')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
393 print(maf[is.na(Hugo_Symbol), required.fields, with =FALSE])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
394 message("Annotating them as 'UnknownGene' for convenience")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
395 maf$Hugo_Symbol = ifelse(test = is.na(maf$Hugo_Symbol), yes = 'UnknownGene', no = maf$Hugo_Symbol)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
396 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
397
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
398 if(isTCGA){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
399 maf$Tumor_Sample_Barcode = substr(x = maf$Tumor_Sample_Barcode, start = 1, stop = 12)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
400 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
401
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
402 return(maf)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
403 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
404
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
405 read.maf_fix = function(maf, removeSilent = TRUE, useAll = TRUE, gisticAllLesionsFile = NULL, gisticAmpGenesFile = NULL,
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
406 gisticDelGenesFile = NULL, cnTable = NULL, removeDuplicatedVariants = TRUE, isTCGA = FALSE){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
407
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
408 message('reading maf..')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
409
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
410 if(as.logical(length(grep(pattern = 'gz$', x = maf, fixed = FALSE)))){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
411 #If system is Linux use fread, else use gz connection to read gz file.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
412 if(Sys.info()[['sysname']] == 'Windows'){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
413 maf.gz = gzfile(description = maf, open = 'r')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
414 suppressWarnings(maf <- data.table(read.csv(file = maf.gz, header = TRUE, sep = '\t', stringsAsFactors = FALSE)))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
415 close(maf.gz)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
416 } else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
417 maf = suppressWarnings(data.table::fread(input = paste('zcat <', maf), sep = '\t', stringsAsFactors = FALSE, verbose = FALSE, data.table = TRUE, showProgress = TRUE, header = TRUE))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
418 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
419 } else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
420 suppressWarnings(maf <- data.table::fread(input = maf, sep = "\t", stringsAsFactors = FALSE, verbose = FALSE, data.table = TRUE, showProgress = TRUE, header = TRUE))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
421 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
422
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
423 #validate MAF file
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
424 maf = validateMaf(maf = maf, isTCGA = isTCGA, rdup = removeDuplicatedVariants)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
425
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
426 #validation check for variants classified as Somatic in Mutation_Status field.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
427 if(length(colnames(maf)[colnames(x = maf) %in% 'Mutation_Status']) > 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
428 if(!useAll){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
429 message('Using only Somatic variants from Mutation_Status. Switch on useAll to include everything.')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
430 maf = maf[Mutation_Status %in% "Somatic"]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
431
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
432 if(nrow(maf) == 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
433 stop('No more Somatic mutations left after filtering for Mutation_Status! Maybe set useAll to TRUE ?')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
434 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
435
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
436 #maf = subset(maf, Mutation_Status == 'Somatic')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
437 }else {
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
438 message('Using all variants.')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
439 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
440 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
441 message('Mutation_Status not found. Assuming all variants are Somatic and validated.')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
442 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
443 #Variant Classification with Low/Modifier variant consequences. http://asia.ensembl.org/Help/Glossary?id=535
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
444 silent = c("3'UTR", "5'UTR", "3'Flank", "Targeted_Region", "Silent", "Intron",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
445 "RNA", "IGR", "Splice_Region", "5'Flank", "lincRNA")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
446 #Variant Classification with High/Moderate variant consequences. http://asia.ensembl.org/Help/Glossary?id=535
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
447 vc.nonSilent = c("Frame_Shift_Del", "Frame_Shift_Ins", "Splice_Site", "Translation_Start_Site",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
448 "Nonsense_Mutation", "Nonstop_Mutation", "In_Frame_Del",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
449 "In_Frame_Ins", "Missense_Mutation")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
450
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
451 maf.silent = maf[Variant_Classification %in% silent]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
452
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
453 if(removeSilent){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
454
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
455 if(nrow(maf.silent) > 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
456 maf.silent.vc = maf.silent[,.N, .(Tumor_Sample_Barcode, Variant_Classification)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
457 maf.silent.vc.cast = data.table::dcast(data = maf.silent.vc, formula = Tumor_Sample_Barcode ~ Variant_Classification, fill = 0, value.var = 'N') #why dcast is not returning it as data.table ?
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
458 summary.silent = data.table(ID = c('Samples',colnames(maf.silent.vc.cast)[2:ncol(maf.silent.vc.cast)]),
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
459 N = c(nrow(maf.silent.vc.cast), colSums(maf.silent.vc.cast[,2:ncol(maf.silent.vc.cast), with = FALSE])))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
460
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
461 maf = maf[!Variant_Classification %in% silent] #Remove silent variants from main table
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
462 message(paste('Excluding',nrow(maf.silent), 'silent variants.'))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
463 print(summary.silent)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
464 } else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
465 message(message(paste('Excluding',nrow(maf.silent), 'silent variants.')))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
466 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
467 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
468 message('Silent variants are being kept!')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
469 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
470
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
471 if(!is.null(gisticAllLesionsFile)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
472 gisticIp = readGistic(gisticAllLesionsFile = gisticAllLesionsFile, gisticAmpGenesFile = gisticAmpGenesFile,
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
473 gisticDelGenesFile = gisticDelGenesFile, isTCGA = isTCGA)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
474 gisticIp = gisticIp@data
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
475
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
476 gisticIp[, id := paste(Hugo_Symbol, Tumor_Sample_Barcode, sep=':')]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
477 gisticIp = gisticIp[!duplicated(id)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
478 gisticIp[,id := NULL]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
479
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
480 maf = rbind(maf, gisticIp, fill =TRUE)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
481 oncomat = createOncoMatrix(maf)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
482 }else if(!is.null(cnTable)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
483 message('Processing copy number data..')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
484 cnDat = data.table::fread(input = cnTable, sep = '\t', stringsAsFactors = FALSE, header = TRUE, colClasses = 'character')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
485 colnames(cnDat) = c('Hugo_Symbol', 'Tumor_Sample_Barcode', 'Variant_Classification')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
486 cnDat$Variant_Type = 'CNV'
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
487 suppressWarnings(cnDat[, id := paste(Hugo_Symbol, Tumor_Sample_Barcode, sep=':')])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
488 cnDat = cnDat[!duplicated(id)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
489 cnDat[,id := NULL]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
490 maf = rbind(maf, cnDat, fill =TRUE)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
491 oncomat = createOncoMatrix(maf)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
492 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
493 oncomat = createOncoMatrix(maf)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
494 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
495
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
496 #convert to factors
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
497 maf$Variant_Type = as.factor(as.character(maf$Variant_Type))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
498 maf$Variant_Classification = as.factor(as.character(maf$Variant_Classification))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
499 maf$Tumor_Sample_Barcode = as.factor(as.character(maf$Tumor_Sample_Barcode))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
500
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
501 message('Summarizing..')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
502 mafSummary = summarizeMaf_fix(maf = maf)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
503
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
504 #Create MAF object
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
505 m = MAF(data = maf, variants.per.sample = mafSummary$variants.per.sample, variant.type.summary = mafSummary$variant.type.summary,
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
506 variant.classification.summary = mafSummary$variant.classification.summary,gene.summary = mafSummary$gene.summary,
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
507 oncoMatrix = oncomat$oncomat, numericMatrix = oncomat$nummat, summary = mafSummary$summary,
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
508 classCode = oncomat$vc, maf.silent = maf.silent)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
509
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
510
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
511 message('Done !')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
512 return(m)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
513 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
514
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
515
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
516 #' Class MAF
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
517 #' @description S4 class for storing summarized MAF.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
518 #' @slot data data.table of original MAF file.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
519 #' @slot variants.per.sample table containing variants per sample
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
520 #' @slot variant.type.summary table containing variant types per sample
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
521 #' @slot variant.classification.summary table containing variant classification per sample
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
522 #' @slot gene.summary table containing variant classification per gene
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
523 #' @slot oncoMatrix character matrix of dimension n*m where n is number of genes and m is number of variants
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
524 #' @slot numericMatrix numeric matrix of dimension n*m where n is number of genes and m is number of variants
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
525 #' @slot summary table with basic MAF summary stats
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
526 #' @slot classCode mapping between numeric values in numericMatrix and Variant Classification
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
527 #' @slot maf.silent subset of main MAF containing only silent variants
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
528 #' @exportClass MAF
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
529 #' @import methods
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
530 #' @seealso \code{\link{getGeneSummary}} \code{\link{getSampleSummary}} \code{\link{getFields}}
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
531
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
532 ## MAF object
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
533 MAF <- setClass(Class = 'MAF', slots = c(data = 'data.table', variants.per.sample = 'data.table', variant.type.summary = 'data.table',
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
534 variant.classification.summary = 'data.table', gene.summary = 'data.table', oncoMatrix = 'matrix',
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
535 numericMatrix = 'matrix', summary = 'data.table', classCode = 'character',
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
536 maf.silent = 'data.table'))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
537
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
538 setMethod(f = 'show', signature = 'MAF', definition = function(object){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
539 cat(paste('An object of class ', class(object), "\n"))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
540 print(object@summary)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
541 })
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
542
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
543
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
544 summarizeMaf_fix = function(maf){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
545
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
546 if('NCBI_Build' %in% colnames(maf)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
547 NCBI_Build = unique(maf[!Variant_Type %in% 'CNV', NCBI_Build])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
548 NCBI_Build = NCBI_Build[!is.na(NCBI_Build)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
549
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
550 if(length(NCBI_Build) > 1){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
551 message('NOTE: Mutiple reference builds found!')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
552 NCBI_Build = do.call(paste, c(as.list(NCBI_Build), sep=";"))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
553 message(NCBI_Build)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
554 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
555 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
556 NCBI_Build = NA
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
557 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
558
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
559 if('Center' %in% colnames(maf)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
560 Center = unique(maf[!Variant_Type %in% 'CNV', Center])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
561 #Center = Center[is.na(Center)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
562 if(length(Center) > 1){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
563 message('Mutiple centers found.')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
564 Center = do.call(paste, c(as.list(Center), sep=";"))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
565 print(Center)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
566 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
567 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
568 Center = NA
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
569 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
570
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
571 #nGenes
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
572 nGenes = length(unique(maf[,Hugo_Symbol]))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
573
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
574
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
575
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
576 #Top 20 FLAGS - https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4267152/
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
577 flags = c("TTN", "MUC16", "OBSCN", "AHNAK2", "SYNE1", "FLG", "MUC5B",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
578 "DNAH17", "PLEC", "DST", "SYNE2", "NEB", "HSPG2", "LAMA5", "AHNAK",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
579 "HMCN1", "USH2A", "DNAH11", "MACF1", "MUC17")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
580
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
581 #Variants per TSB
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
582 tsb = maf[,.N, Tumor_Sample_Barcode]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
583 colnames(tsb)[2] = 'Variants'
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
584 tsb = tsb[order(tsb$Variants, decreasing = TRUE),]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
585
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
586 #summarise and casting by 'Variant_Classification'
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
587 vc = maf[,.N, .(Tumor_Sample_Barcode, Variant_Classification )]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
588 vc.cast = data.table::dcast(data = vc, formula = Tumor_Sample_Barcode ~ Variant_Classification, fill = 0, value.var = 'N')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
589
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
590 if(any(colnames(vc.cast) %in% c('Amp', 'Del'))){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
591 vc.cast.cnv = vc.cast[,colnames(vc.cast)[colnames(vc.cast) %in% c('Amp', 'Del')], with =FALSE]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
592 vc.cast.cnv$CNV_total = rowSums(x = vc.cast.cnv)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
593
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
594 vc.cast = vc.cast[,!colnames(vc.cast)[colnames(vc.cast) %in% c('Amp', 'Del')], with =FALSE]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
595 vc.cast[,total:=rowSums(vc.cast[,2:ncol(vc.cast), with = FALSE])]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
596
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
597 vc.cast = cbind(vc.cast, vc.cast.cnv)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
598 vc.cast = vc.cast[order(total, CNV_total, decreasing = TRUE)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
599
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
600 vc.mean = as.numeric(as.character(c(NA, NA, NA, NA, apply(vc.cast[,2:ncol(vc.cast), with = FALSE], 2, mean))))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
601 vc.median = as.numeric(as.character(c(NA, NA, NA, NA, apply(vc.cast[,2:ncol(vc.cast), with = FALSE], 2, median))))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
602 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
603 vc.cast[,total:=rowSums(vc.cast[,2:ncol(vc.cast), with = FALSE])]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
604 vc.cast = vc.cast[order(total, decreasing = TRUE)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
605
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
606 vc.mean = as.numeric(as.character(c(NA, NA, NA, NA, apply(vc.cast[,2:ncol(vc.cast), with = FALSE], 2, mean))))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
607 vc.median = as.numeric(as.character(c(NA, NA, NA, NA, apply(vc.cast[,2:ncol(vc.cast), with = FALSE], 2, median))))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
608 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
609
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
610 #summarise and casting by 'Variant_Type'
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
611 vt = maf[,.N, .(Tumor_Sample_Barcode, Variant_Type )]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
612 vt.cast = data.table::dcast(data = vt, formula = Tumor_Sample_Barcode ~ Variant_Type, value.var = 'N', fill = 0)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
613 if(any(colnames(vt.cast) %in% c('CNV'))){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
614 vt.cast.cnv = vt.cast[,colnames(vt.cast)[colnames(vt.cast) %in% c('CNV')], with =FALSE]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
615
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
616 vt.cast = vt.cast[,!colnames(vt.cast)[colnames(vt.cast) %in% c('CNV')], with =FALSE]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
617 vt.cast[,total:=rowSums(vt.cast[,2:ncol(vt.cast), with = FALSE])]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
618 vt.cast = vt.cast[order(total, decreasing = TRUE)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
619
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
620 vt.cast = cbind(vt.cast, vt.cast.cnv)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
621 vt.cast[order(total, CNV, decreasing = TRUE)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
622 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
623 vt.cast[,total:=rowSums(vt.cast[,2:ncol(vt.cast), with = FALSE])]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
624 vt.cast = vt.cast[order(total, decreasing = TRUE)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
625 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
626
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
627 #summarise and casting by 'Hugo_Symbol'
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
628 hs = maf[,.N, .(Hugo_Symbol, Variant_Classification)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
629 hs.cast = data.table::dcast(data = hs, formula = Hugo_Symbol ~Variant_Classification, fill = 0, value.var = 'N')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
630 #----
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
631 if(any(colnames(hs.cast) %in% c('Amp', 'Del'))){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
632 hs.cast.cnv = hs.cast[,colnames(hs.cast)[colnames(hs.cast) %in% c('Amp', 'Del')], with =FALSE]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
633 hs.cast.cnv$CNV_total = rowSums(x = hs.cast.cnv)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
634
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
635 hs.cast = hs.cast[,!colnames(hs.cast)[colnames(hs.cast) %in% c('Amp', 'Del')], with =FALSE]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
636 hs.cast[,total:=rowSums(hs.cast[,2:ncol(hs.cast), with = FALSE])]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
637
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
638 hs.cast = cbind(hs.cast, hs.cast.cnv)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
639 hs.cast = hs.cast[order(total, CNV_total, decreasing = TRUE)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
640
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
641 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
642 hs.cast[,total:=rowSums(hs.cast[,2:ncol(hs.cast), with = FALSE])]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
643 hs.cast = hs.cast[order(total, decreasing = TRUE)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
644
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
645 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
646 #Get in how many samples a gene ismutated
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
647 numMutatedSamples = maf[!Variant_Type %in% 'CNV', .(MutatedSamples = length(unique(Tumor_Sample_Barcode))), by = Hugo_Symbol]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
648 #Merge and sort
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
649 hs.cast = merge(hs.cast, numMutatedSamples, by = 'Hugo_Symbol', all = TRUE)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
650 hs.cast = hs.cast[order(MutatedSamples, total, decreasing = TRUE)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
651 #Make a summarized table
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
652 summary = data.table::data.table(ID = c('NCBI_Build', 'Center','Samples', 'nGenes',colnames(vc.cast)[2:ncol(vc.cast)]),
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
653 summary = c(NCBI_Build, Center, nrow(vc.cast), nGenes, colSums(vc.cast[,2:ncol(vc.cast), with =FALSE])))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
654 summary[,Mean := vc.mean]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
655 summary[,Median := vc.median]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
656
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
657 print(summary)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
658
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
659 message("Frequently mutated genes..")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
660 print(hs.cast)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
661
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
662 #Check for flags.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
663 if(nrow(hs.cast) > 10){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
664 topten = hs.cast[1:10, Hugo_Symbol]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
665 topten = topten[topten %in% flags]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
666 if(length(topten) > 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
667 message('NOTE: Possible FLAGS among top ten genes:')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
668 print(topten)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
669 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
670 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
671
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
672 return(list(variants.per.sample = tsb, variant.type.summary = vt.cast, variant.classification.summary = vc.cast,
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
673 gene.summary = hs.cast, summary = summary))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
674 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
675
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
676 oncodrive_fix = function(maf, AACol = NULL, minMut = 5, pvalMethod = 'zscore', nBgGenes = 100, bgEstimate = TRUE, ignoreGenes = NULL){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
677
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
678 #Proetin Length source
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
679 gl = system.file('extdata', 'prot_len.txt.gz', package = 'maftools')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
680
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
681 if(Sys.info()[['sysname']] == 'Windows'){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
682 gl.gz = gzfile(description = gl, open = 'r')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
683 gl <- suppressWarnings( data.table(read.csv( file = gl.gz, header = TRUE, sep = '\t', stringsAsFactors = FALSE)) )
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
684 close(gl.gz)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
685 } else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
686 gl = data.table::fread(input = paste('zcat <', gl), sep = '\t', stringsAsFactors = FALSE)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
687 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
688
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
689 pval.options = c('zscore', 'poisson', 'combined')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
690
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
691 if(!pvalMethod %in% pval.options){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
692 stop('pvalMethod can only be either zscore, poisson or combined')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
693 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
694
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
695 if(length(pvalMethod) > 1){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
696 stop('pvalMethod can only be either zscore, poisson or combined')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
697 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
698
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
699
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
700 #syn variants for background
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
701 syn.maf = maf@maf.silent
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
702 #number of samples in maf
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
703 numSamples = as.numeric(maf@summary[3,summary])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
704 #Perform clustering and calculate background scores.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
705 if(bgEstimate){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
706 if(nrow(syn.maf) == 0){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
707 message('No syn mutations found! Skipping background estimation. Using predefined values. (Mean = 0.279; SD = 0.13)')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
708 bg.mean = 0.279
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
709 bg.sd = 0.13
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
710 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
711 message('Estimating background scores from synonymous variants..')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
712 syn.bg.scores = parse_prot_fix(dat = syn.maf, AACol = AACol, gl, m = minMut, calBg = TRUE, nBg = nBgGenes)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
713
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
714 #If number of genes to calculate background scores is not enough, use predefined scores.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
715 if(is.null(syn.bg.scores)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
716 message("Not enough genes to build background. Using predefined values. (Mean = 0.279; SD = 0.13)")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
717 bg.mean = 0.279
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
718 bg.sd = 0.13
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
719 }else {
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
720 if(nrow(syn.bg.scores) < nBgGenes){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
721 message("Not enough genes to build background. Using predefined values. (Mean = 0.279; SD = 0.13)")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
722 bg.mean = 0.279
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
723 bg.sd = 0.13
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
724 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
725 bg.mean = mean(syn.bg.scores$clusterScores)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
726 bg.sd = sd(syn.bg.scores$clusterScores)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
727 message(paste('Estimated background mean: ', bg.mean))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
728 message(paste('Estimated background SD: ', bg.sd))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
729 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
730 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
731 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
732 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
733 message("Using predefined values for background. (Mean = 0.279; SD = 0.13)")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
734 bg.mean = 0.279
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
735 bg.sd = 0.13
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
736 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
737
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
738
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
739
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
740 #non-syn variants
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
741 non.syn.maf = maf@data
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
742 #Variant Classification with Low/Modifier variant consequences. http://asia.ensembl.org/Help/Glossary?id=535
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
743 silent = c("3'UTR", "5'UTR", "3'Flank", "Targeted_Region", "Silent", "Intron",
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
744 "RNA", "IGR", "Splice_Region", "5'Flank", "lincRNA", "Amp", "Del")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
745 non.syn.maf = non.syn.maf[!Variant_Classification %in% silent] #Remove silent variants from main table
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
746
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
747 #Remove genes to ignore
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
748 if(!is.null(ignoreGenes)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
749 ignoreGenes.count = nrow(non.syn.maf[Hugo_Symbol %in% ignoreGenes])
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
750 message(paste('Removed', ignoreGenes.count, 'variants belonging to', paste(ignoreGenes, collapse = ', ', sep=',')))
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
751 non.syn.maf = non.syn.maf[!Hugo_Symbol %in% ignoreGenes]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
752 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
753
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
754 #Perform clustering and calculate cluster scores for nonsyn variants.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
755 message('Estimating cluster scores from non-syn variants..')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
756 nonsyn.scores = parse_prot_fix(dat = non.syn.maf, AACol = AACol, gl = gl, m = minMut, calBg = FALSE, nBg = nBgGenes)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
757
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
758 if(pvalMethod == 'combined'){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
759 message('Comapring with background model and estimating p-values..')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
760 nonsyn.scores$zscore = (nonsyn.scores$clusterScores - bg.mean) / bg.sd
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
761 nonsyn.scores$tPval = 1- pnorm(nonsyn.scores$zscore)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
762 nonsyn.scores$tFdr = p.adjust(nonsyn.scores$tPval, method = 'fdr')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
763
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
764 nonsyn.scores = merge(getGeneSummary(maf), nonsyn.scores, by = 'Hugo_Symbol')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
765 nonsyn.scores[,fract_muts_in_clusters := muts_in_clusters/total]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
766
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
767 counts.glm = glm(formula = total ~ protLen+clusters, family = poisson(link = identity), data = nonsyn.scores) #Poisson model
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
768 nonsyn.scores$Expected = counts.glm$fitted.values #Get expected number of events (mutations) from the model
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
769
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
770 observed_mut_colIndex = which(colnames(nonsyn.scores) == 'total')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
771 expected_mut_colIndex = which(colnames(nonsyn.scores) == 'Expected')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
772
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
773 #Poisson test to caluclate difference (p-value)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
774 nonsyn.scores$poissonPval = apply(nonsyn.scores, 1, function(x) {
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
775 poisson.test(as.numeric(x[observed_mut_colIndex]), as.numeric(x[expected_mut_colIndex]))$p.value
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
776 })
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
777
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
778 nonsyn.scores$poissonFdr = p.adjust(nonsyn.scores$poissonPval)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
779 nonsyn.scores = nonsyn.scores[order(poissonFdr)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
780
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
781 nonsyn.scores$fdr = apply(nonsyn.scores[,.(tFdr, poissonFdr)], MARGIN = 1, FUN = min)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
782
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
783 } else if(pvalMethod == 'zscore'){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
784 #Oncodrive clust way of caluclating pvalues
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
785 #Calculate z scores; compare it to bg scores and estimate z-score, pvalues, corrected pvalues (fdr) (assumes normal distribution)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
786 message('Comapring with background model and estimating p-values..')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
787 nonsyn.scores$zscore = (nonsyn.scores$clusterScores - bg.mean) / bg.sd
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
788 nonsyn.scores$pval = 1- pnorm(nonsyn.scores$zscore)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
789 nonsyn.scores$fdr = p.adjust(nonsyn.scores$pval, method = 'fdr')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
790
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
791 nonsyn.scores = merge(getGeneSummary(maf), nonsyn.scores, by = 'Hugo_Symbol')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
792 nonsyn.scores[,fract_muts_in_clusters := muts_in_clusters/total]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
793 #nonsyn.scores[,fract_MutatedSamples := MutatedSamples/numSamples]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
794 nonsyn.scores = nonsyn.scores[order(fdr)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
795 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
796 #Assuming poisson distribution of mutation counts
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
797 #Now model observed number of mutations as a function of number of clusters and protein length. Calculate expected number of events based on poisson distribution.
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
798 nonsyn.scores = merge(getGeneSummary(maf), nonsyn.scores, by = 'Hugo_Symbol')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
799 nonsyn.scores[,fract_muts_in_clusters := muts_in_clusters/total]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
800
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
801 counts.glm = glm(formula = total ~ protLen+clusters, family = poisson(link = identity), data = nonsyn.scores) #Poisson model
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
802 nonsyn.scores$Expected = counts.glm$fitted.values #Get expected number of events (mutations) from the model
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
803
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
804 observed_mut_colIndex = which(colnames(nonsyn.scores) == 'total')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
805 expected_mut_colIndex = which(colnames(nonsyn.scores) == 'Expected')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
806
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
807 #Poisson test to caluclate difference (p-value)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
808 nonsyn.scores$pval = apply(nonsyn.scores, 1, function(x) {
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
809 poisson.test(as.numeric(x[observed_mut_colIndex]), as.numeric(x[expected_mut_colIndex]))$p.value
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
810 })
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
811
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
812 nonsyn.scores$fdr = p.adjust(nonsyn.scores$pval)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
813 nonsyn.scores = nonsyn.scores[order(fdr)]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
814 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
815 message('Done !')
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
816 return(nonsyn.scores)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
817 }
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
818
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
819
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
820 laml = read.maf(maf = args$input_maf, removeSilent = F, useAll = T)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
821
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
822 if(is.null(args$gene_blacklist)){
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
823 laml.sig = oncodrive(maf =laml, AACol = aacol, pvalMethod = 'zscore',minMut = min_mut)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
824 write.table(laml.sig,file=args$output_detail, quote=FALSE,row.names=FALSE,sep="\t")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
825 pdf(args$output_plot)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
826 plotOncodrive(res=laml.sig,fdrCutOff=as.numeric(args$fdr),useFraction=TRUE)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
827 dev.off()
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
828 }else{
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
829 all_genes <- read.table(args$gene_blacklist, stringsAsFactors=FALSE)[,1]
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
830 laml.sig = oncodrive(maf =laml, AACol = aacol, pvalMethod = 'zscore',minMut = min_mut,ignoreGenes=all_genes)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
831 write.table(laml.sig,file=args$output_detail, quote=FALSE,row.names=FALSE,sep="\t")
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
832 pdf(args$output_plot)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
833 plotOncodrive(res=laml.sig,fdrCutOff=as.numeric(args$fdr),useFraction=TRUE)
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
834 dev.off()
c3ed203d814d Uploaded
morinlab
parents:
diff changeset
835 }