annotate test/cnmops.R @ 0:3ea49d2fa85f draft default tip

Uploaded
author ric
date Fri, 07 Oct 2016 05:08:11 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
1 # Load ExomeDepth library (without warnings)
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
2 suppressMessages(library(cn.mops))
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
3
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
4 # Import parameters from xml wrapper (args_file)
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
5 args <- commandArgs(trailingOnly=TRUE)
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
6 param <- read.table(args[1],sep="=", as.is=TRUE)
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
7
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
8 # Set common parameters
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
9 target <- read.table(param[match("target",param[,1]),2], sep="\t", as.is=TRUE)
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
10 padding <- as.numeric(param[match("padding",param[,1]),2])
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
11 mapping_mode <- param[match("mapping_mode",param[,1]),2]
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
12 output <- param[match("output",param[,1]),2]
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
13
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
14 # Set advanced parameters
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
15 advanced_mode <- ifelse("advanced_mode" %in% param[,1], TRUE, FALSE)
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
16 if (advanced_mode){
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
17 prior_impact <- as.integer(param[match("prior_impact",param[,1]),2])
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
18 cyc <- as.integer(param[match("cyc",param[,1]),2])
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
19 norm_type <- param[match("norm_type",param[,1]),2]
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
20 norm <- as.logical(param[match("norm",param[,1]),2])
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
21 upper_threshold <- as.numeric(param[match("upper_threshold",param[,1]),2])
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
22 lower_threshold <- as.numeric(param[match("lower_threshold",param[,1]),2])
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
23 min_width <- as.integer(param[match("min_width",param[,1]),2])
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
24 seq_alg <- param[match("seq_alg",param[,1]),2]
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
25 min_read_count <- as.integer(param[match("min_read_count",param[,1]),2])
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
26 use_median <- as.logical(param[match("use_median",param[,1]),2])
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
27 }
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
28
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
29 # Create symbolic links for multiple bam and bai
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
30 bam <- param[param[,1]=="bam",2]
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
31 bam_bai <- param[param[,1]=="bam_bai",2]
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
32 bam_label <- param[param[,1]=="bam_label",2]
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
33 bam_label <- gsub(" ", "_", bam_label)
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
34
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
35 for(i in 1:length(bam)){
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
36 stopifnot(file.symlink(bam[i], paste(bam_label[i], "bam", sep=".")))
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
37 stopifnot(file.symlink(bam_bai[i], paste(bam_label[i], "bam.bai", sep=".")))
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
38 }
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
39
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
40 # Create genomic ranges
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
41 gr <- GRanges(target[,1],IRanges(target[,2]-padding,target[,3]+padding))
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
42 # Merge overlapping segments (make sense if padding != 0)
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
43 gr <- reduce(gr)
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
44
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
45
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
46 # Get read counts
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
47 BAMFiles <- paste(bam_label, "bam", sep=".")
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
48 X <- suppressMessages(getSegmentReadCountsFromBAM(BAMFiles,GR=gr,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
49 mode=mapping_mode,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
50 sampleNames=bam_label))
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
51
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
52 if (advanced_mode){
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
53 resCNMOPS <- suppressMessages(exomecn.mops(X,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
54 priorImpact=prior_impact,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
55 cyc=cyc,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
56 normType=norm_type,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
57 norm=norm,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
58 upperThreshold=upper_threshold,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
59 lowerThreshold=lower_threshold,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
60 minWidth=min_width,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
61 seqAlgorithm=seq_alg,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
62 minReadCount=min_read_count,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
63 useMedian=use_median))
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
64 }else{
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
65 resCNMOPS <- suppressMessages(exomecn.mops(X))
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
66 }
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
67
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
68 resCNMOPS <- calcIntegerCopyNumbers(resCNMOPS)
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
69
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
70 # Extract individual CNV calls
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
71 # Legend for CN values is as follows:
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
72 # The copy number classes default to CN0, CN1, CN2, CN3, .., CN8.
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
73 # CN2 is the normal copy number for diploid samples.
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
74 # CN1 is a heterozygous deletion and
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
75 # CN0 is a homozygous deletion.
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
76 # CN3 thru CN8 are amplifications.
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
77 # For non-tumor samples the highest copy number class is 8 - higher copy numbers have not been reported.
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
78 # CN8 is expected to have 4 times as many reads (for times as high coverage) as CN2.
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
79 # For tumor samples very high copy numbers have been observed (e.g. CN64),
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
80 # therefore the parameters of cn.mops have to be adjusted to allow for high copy numbers.
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
81 # A way to set the parameters is given in https://gist.github.com/gklambauer/8955203
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
82 res <- cnvs(resCNMOPS)
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
83
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
84 # Convert results to data.frame
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
85 df <- data.frame(chr=as.character(seqnames(res)),
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
86 starts=start(res),
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
87 #ranges(res),
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
88 ends=end(res),
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
89 as.data.frame(elementMetadata(res)))
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
90
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
91 # Remove CN2 (= normal copy number), if any
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
92 df <- df[df$CN != "CN2",]
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
93
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
94 # Write results
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
95 write.table(df, sep='\t', quote=FALSE, file = output,
3ea49d2fa85f Uploaded
ric
parents:
diff changeset
96 row.names = FALSE, dec=".")