annotate mtls_analyze/map_ChIP_peaks_to_genes.R @ 4:b465306d00ba draft default tip

Uploaded
author kmace
date Mon, 23 Jul 2012 13:00:15 -0400
parents a903c48f05b4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
1 ## .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-.
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
2 ## /|/ \|\ /|/ \|\ /|/ \|\ /|/ \|\ /|/ \|\ /|/ \|\ / / \ \ / / \ \
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
3 ##`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' ' '
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
4 ## Nov 2011 th17
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
5 ## Bonneau lab - "Aviv Madar" <am2654@nyu.edu>,
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
6 ## NYU - Center for Genomics and Systems Biology
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
7 ## .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-.
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
8 ## /|/ \|\ /|/ \|\ /|/ \|\ /|/ \|\ /|/ \|\ /|/ \|\ / / \ \ / / \ \
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
9 ##`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' ' '
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
10
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
11 rm(list=ls())
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
12 debug=F
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
13 script.version=0.1
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
14 print.error <- function(){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
15 cat("
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
16 NAME
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
17 map_ChIP_peaks_to_genes.R
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
18
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
19 DESCRIPTION
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
20 This script takes a MACS tab delimited file as input and
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
21 produces two files:
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
22
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
23 1) genes.xls
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
24 A gene centered table that stores the peaks that are
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
25 proximal (within x[kb] of TSS) and distal (within the
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
26 gene's region + y[kb] upstream or downstream of TSS and
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
27 TES respectively).
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
28
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
29 2) peaks.xls
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
30 A peak centered table that equals the MACS input table plus
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
31 colums for proximal and distal targets of each peak and
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
32 their distance from TSS (if exist). For gene.xls script also
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
33 gives a poisson model based -log10(pval) score for proximal
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
34 and genewide enrichment of peaks for each gene with at least
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
35 one prox/dist peak associated with it.
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
36
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
37 ARGUMENTS
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
38 input_file=path
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
39 Path to MACS file.
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
40
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
41 refseq_table=path
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
42 Path to refseq table (gives TSS/TES locations for all genes).
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
43
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
44 path_output=path
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
45 Path to save genes.xls and peaks.xls output files.
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
46
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
47 tss.dist=N
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
48 The absolute distance from TSS where we connect a peak to
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
49 gene (for proximal peaks).
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
50
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
51 gene.wide.dist=N
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
52 The absolute distance from TSS or TES where we connect a peak
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
53 to gene (for peaks hitting anywhere in gene).
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
54
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
55 effective.genome.size=N
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
56 The effective mappable genome size (for mm9 the value is
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
57 1.87e9. For hg19 the value is 2.7e9 (from MACS manual)).
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
58
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
59 macs.skip.lines=N
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
60 Number of lines to skip in input_file.
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
61
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
62 EXAMPLE
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
63 Rscript map_ChIP_peaks_to_genes_v.1.R \\
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
64 input_file=SL971_SL970_peaks.xls \\
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
65 refseq_table=UCSC_mm9_refseq_genes_Sep_15_2011.txt \\
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
66 path_output=./ \\
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
67 tss.dist=5000 \\
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
68 gene.wide.dist=10000 \\
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
69 effective.genome.size=1.87e9 \\
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
70 macs.skip.lines=23
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
71
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
72 CITATION
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
73 Please cite us if you used this script: The transcription
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
74 factor network regulating Th17 lineage specification and
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
75 function. Maria Ciofani, Aviv Madar, Carolina Galan, Kieran
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
76 Mace, Ashish Agarwal, Kim Newberry, Richard M. Myers, Richard
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
77 Bonneau and Dan R. Littman et. al. (in preperation).
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
78
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
79 ")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
80 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
81
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
82 # retrieve args
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
83 if(debug==T){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
84 cmd.args <- c(
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
85 # "input_file=input/th17/used_for_paper/rawData/MACS_Sep_15_2011/SL971_SL970_peaks.xls",
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
86 "input_file=input/th17/used_for_paper/rawData/MACS_Sep_15_2011/SL3594_SL3592_peaks.xls",
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
87 "refseq_table=input/th17/used_for_paper/rawData/UCSC_mm9_refseq_genes_Sep_15_2011.txt",
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
88 "path_output=/Users/aviv/Desktop/test_script/",
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
89 "tss.dist=5000",
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
90 "tes.dist=10000",
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
91 "effective.genome.size=1.87e9",
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
92 "gene.wide.dist=10000",
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
93 "macs.skip.lines=23"
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
94 )
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
95 } else {
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
96 cmd.args <- commandArgs();
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
97 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
98
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
99 if(length(grep("--version",cmd.args))){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
100 cat("version",script.version,"\n")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
101 q()
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
102 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
103
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
104 arg.names.cmd.line <- sapply(strsplit(cmd.args,"="),function(i) i[1])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
105 args.val.cmd.line <- sapply(strsplit(cmd.args,"="),function(i) i[2])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
106
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
107 arg.nms <- c("input_file","refseq_table","path_output","tss.dist",
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
108 "gene.wide.dist","effective.genome.size","macs.skip.lines")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
109 arg.val <- character(length=length(arg.nms))
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
110 for(i in 1:length(arg.nms)){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
111 ix <- which(arg.names.cmd.line==arg.nms[i])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
112 if(length(ix)==1){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
113 arg.val[i] <- args.val.cmd.line[ix]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
114 } else {
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
115 stop("######could not find ",arg.nms[i]," arg######\n\n",print.error())
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
116
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
117 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
118 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
119 if(debug==T){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
120 print(paste(arg.nms,"=",arg.val))
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
121 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
122 # the files here adhere to tab delim format
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
123 path.input.macs <- arg.val[1]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
124 path.input.refseq <- arg.val[2]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
125 path.output <- arg.val[3]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
126 tss.dist <- as.numeric(arg.val[4])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
127 gene.wide.dist <- as.numeric(arg.val[5])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
128 effective.genome.size <- as.numeric(arg.val[6])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
129 macs.skip.lines=as.numeric(arg.val[7])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
130
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
131 if(debug==T){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
132 # if(1){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
133 load("/Users/aviv/Desktop/r.u.RData")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
134 gn.nms <- rownames(r.u)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
135 } else {
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
136 ##################
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
137 ### step 1 handle refseq table file (read, make unique)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
138 cat("reading refseq table",path.input.refseq,"\n")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
139 refseq <- read.delim(file=path.input.refseq)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
140 # refseq can have many transcripts for each gene
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
141 # here i make it have only one transcript for each gene (the longest one)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
142 cat("for transcripts matching more than one gene keeping only the longest transcript\n")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
143 refseq$name2 <- as.character(refseq$name2)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
144 refseq$chrom <- as.character(refseq$chrom)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
145 refseq$strand <- as.character(refseq$strand)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
146 gn.nms <- unique(refseq$name2)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
147 #x <- sort(table(refseq$name2),decreasing=T)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
148 #gn.nms.non.unique <- names(x)[which(x>1)]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
149 #gn.nms.unique <- names(x)[which(x==1)]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
150 # create refseq unique r.u
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
151 n <- length(gn.nms)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
152 r.u <- data.frame(cbind(chrom=rep("NA",n),strand=rep("NA",n),txStart=rep(0,n),txEnd=rep(0,n)),stringsAsFactors=FALSE,row.names=gn.nms)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
153 for(i in 1:n){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
154 ix <- which(refseq$name2==gn.nms[i])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
155 if(length(ix)==0) {
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
156 error("could not find gene", ng.nms[i], "in refseq table. Bailing out...\n")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
157 } else if (length(ix)>1){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
158 l <- apply(refseq[ix,c("txStart","txEnd")],1,function(i) abs(i[1]-i[2]) )
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
159 l.max <- max(l)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
160 ix <- ix[which(l==l.max)[1]]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
161 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
162 r.u[gn.nms[i],c("chrom","strand","txStart","txEnd")] <- refseq[ix,c("chrom","strand","txStart","txEnd")]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
163 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
164 r.u[,"txStart"] <- as.numeric(r.u[,"txStart"])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
165 r.u[,"txEnd"] <- as.numeric(r.u[,"txEnd"])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
166
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
167 # switch TSS and TES if we have chr "-"
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
168 cat("correcting TSS, TES assiments in refseq table based on strand\n")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
169 ix <- which(r.u$strand=="-")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
170 tmp.tes <- r.u$txStart[ix]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
171 tmp.tss <- r.u$txEnd[ix]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
172 r.u[ix,c("txStart","txEnd")] <- cbind(tmp.tss,tmp.tes)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
173 # ############
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
174 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
175
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
176
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
177 #### step 2 read macs file
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
178 cat("reading Macs file",path.input.macs,"\n")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
179
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
180 # read macs file
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
181 M <- read.delim(file=path.input.macs,skip=macs.skip.lines)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
182 trgt.prox <- NA
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
183 trgt.dist <- NA
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
184 dtss.prox <- NA
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
185 dtss.dist <- NA
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
186 M.annot <- cbind(M,trgt.prox,trgt.dist,dtss.prox,dtss.dist)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
187 M.annot[is.na(M.annot)] <- ""
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
188 # get the number of genes
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
189 m <- length(gn.nms)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
190 if(debug==T){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
191 # m <- 100
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
192 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
193 f.nm.peak <- paste(sep="",path.output,"peaks.xls")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
194 f.nm.gene <- paste(sep="",path.output,"genes.xls")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
195 # for each genes in the expt (j goes over genes)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
196 cat(file=f.nm.gene,sep="\t","Gene_ID","prox_n_peak","genewide_n_peak","gn_length","strand","prox_mean_pval","genewide_mean_pval",
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
197 "prox_max_pval","genewide_max_pval",
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
198 "prox_pois_model_pval","genewide_pois_model_pval","(peak_id,summit,d_TSS,d_TES,class,pval,fold_enrich,FDR),(..)\n")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
199 peaks.summit <- (M[,"start"]+M[,"summit"])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
200 cat(sep="","mapping MACS peaks to genes\n")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
201 for (j in 1:m){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
202 if(j%%20==0){cat(".")}
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
203 tss <- r.u[j,"txStart"]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
204 tes <- r.u[j,"txEnd"]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
205 gn.lngth <- abs(tss-tes)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
206 strand <- r.u[j,"strand"]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
207 chr <- r.u[j,"chrom"]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
208 if(strand=="+"){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
209 d.tss.all <- peaks.summit-tss
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
210 d.tes.all <- peaks.summit-tes
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
211 } else {
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
212 d.tss.all <- tss-peaks.summit
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
213 d.tes.all <- tes-peaks.summit
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
214 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
215 ix.distal <- sort(union( c(which( abs(d.tss.all) < gene.wide.dist ),which( abs(d.tes.all) < gene.wide.dist )),
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
216 which( sign(d.tss.all) != sign(d.tes.all) )),decreasing=TRUE)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
217 ix.prox <- sort(which( abs(d.tss.all) < tss.dist ),decreasing=TRUE)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
218 ix.prox <- ix.prox[which(M[ix.prox,"chr"]==chr)]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
219 ix.distal <- ix.distal[which(M[ix.distal,"chr"]==chr)]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
220 n.peaks.prox <- length(ix.prox)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
221 n.peaks.distal <- length(ix.distal)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
222 # if there is at least one peak hitting gene j
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
223 if(n.peaks.distal > 0){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
224 # for each peak (l goes over peaks)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
225 peaks.line <- paste(sep="","(")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
226 for (k in 1:n.peaks.distal){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
227 if(k>1){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
228 peaks.line <- paste(sep="",peaks.line,";(")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
229 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
230 d.tss <- d.tss.all[ ix.distal[k] ]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
231 d.tes <- d.tes.all[ ix.distal[k] ]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
232 if(sign(d.tss)!=sign(d.tes)){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
233 class="intra"
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
234 } else if(d.tss<=0){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
235 class="upstream"
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
236 } else if(d.tss>0){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
237 class="downstream"
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
238 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
239 peaks.line <- paste(sep="",peaks.line,paste(sep=",", ix.distal[k], peaks.summit[ ix.distal[k] ],
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
240 d.tss, d.tes, class, M[ ix.distal[k] ,7], M[ ix.distal[k] ,8], M[ ix.distal[k] ,9] ),")")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
241 # handle M.annot
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
242 dtss <- d.tss.all[ ix.distal[k] ]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
243 prev.trgt <- M.annot[ix.distal[k],"trgt.dist"]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
244 if(prev.trgt!=""){ # if peak already is with trgt choose one with min dtss
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
245 if(abs(dtss)<abs(as.numeric(M.annot[ix.distal[k],"dtss.dist"]))){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
246 M.annot[ix.distal[k],"dtss.dist"] <- dtss
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
247 M.annot[ix.distal[k],"trgt.dist"] <- gn.nms[j]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
248 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
249 } else { # if peak does not have trgt add current trgt
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
250 M.annot[ix.distal[k],"dtss.dist"] <- dtss
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
251 M.annot[ix.distal[k],"trgt.dist"] <- gn.nms[j]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
252 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
253 # calc the pval for these many peaks in proximal region and in gene-wide region
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
254 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
255 if(n.peaks.prox > 0){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
256 mean.pval.prox <- mean(M[ ix.prox ,7])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
257 max.pval.prox <- max(M[ ix.prox ,7])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
258 expected.num.peaks.genome.wide.prox <- length(which(M[,7]>=mean.pval.prox))
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
259 # lambda = num peaks / genome size * searched region
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
260 lambda.prox <- expected.num.peaks.genome.wide.prox/effective.genome.size*(tss.dist*2)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
261 pval.pois.prox <- -log10(ppois(n.peaks.prox,lambda.prox,lower.tail=FALSE))
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
262 # handle M.annot
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
263 for(k in 1:n.peaks.prox){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
264 dtss <- d.tss.all[ ix.prox[k] ]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
265 prev.trgt <- M.annot[ix.prox[k],"trgt.prox"]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
266 if(prev.trgt!=""){ # if peak already is with trgt choose one with min dtss
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
267 if(abs(dtss)<abs(as.numeric(M.annot[ix.prox[k],"dtss.prox"]))){
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
268 M.annot[ix.prox[k],"dtss.prox"] <- dtss
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
269 M.annot[ix.prox[k],"trgt.prox"] <- gn.nms[j]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
270 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
271 } else { # if peak does not have trgt add current trgt
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
272 M.annot[ix.prox[k],"dtss.prox"] <- dtss
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
273 M.annot[ix.prox[k],"trgt.prox"] <- gn.nms[j]
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
274 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
275 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
276 } else {
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
277 mean.pval.prox <- "NA"
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
278 max.pval.prox <- "NA"
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
279 pval.pois.prox <- "NA"
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
280 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
281 mean.pval.distal <- mean(M[ ix.distal ,7])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
282 max.pval.distal <- max(M[ ix.distal ,7])
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
283 expected.num.peaks.genome.wide.distal <- length(which(M[,7]>=mean.pval.distal))
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
284 # lambda = num peaks / genome size * searched region
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
285 lambda.distal <- expected.num.peaks.genome.wide.distal/effective.genome.size*(gn.lngth+gene.wide.dist*2)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
286 pval.pois.distal <- -log10(ppois(n.peaks.distal,lambda.distal,lower.tail=FALSE))
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
287 # pring peaks for gene j
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
288 core.line <- paste(sep="\t",gn.nms[ j ],n.peaks.prox,n.peaks.distal,gn.lngth,strand,
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
289 mean.pval.prox,mean.pval.distal,max.pval.prox,max.pval.distal,
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
290 pval.pois.prox,pval.pois.distal)
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
291 cat(file=f.nm.gene,append=TRUE,sep="",core.line,"\t",peaks.line,"\n")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
292 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
293 }
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
294 cat("Done!\n")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
295
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
296 cat(file=f.nm.peak,colnames(M.annot),"\n",sep="\t")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
297 write.table(file=f.nm.peak,append=T,col.names=F,row.names=F,M.annot,sep="\t")
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
298
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
299
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
300
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
301
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
302
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
303
a903c48f05b4 Added non-integrated scripts to galaxy
kmace
parents:
diff changeset
304