annotate ving.R @ 1:5feff08a06ea draft

Uploaded
author rlegendre
date Tue, 29 Jul 2014 03:15:34 -0400
parents
children 5ed41b948030
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1 #! /usr/bin/Rscript
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
2
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
3 # Il est interdit de mettre ARGUMENT comme argument long
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
4
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
5
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
6
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
7 # spec contains at least 4 columns, as many as 5 columns.
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
8 #
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
9 # column 1: long name of flag
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
10 #
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
11 # column 2: short name of flag
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
12 #
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
13 # column 3: argument flag. 0=without argument, 1=with argument
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
14 #
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
15 # column 4: mode of argument. one of "logical", "integer", "double",
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
16 # "complex", "character", "" for arguments without value (return logical)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
17 #
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
18 # column 5 (optional): description of ARGUMENT.
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
19 #
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
20
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
21
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
22 RetreiveAndDestroy=function(opt,root,stem,regexp,SearchNames,Out,isValue,NbFound,StockNames){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
23 Bool=lapply(paste(root,SearchNames,stem,sep=""),grepl,opt)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
24 names(Bool)=StockNames
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
25 Pos=lapply(Bool,which)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
26 names(Pos)=StockNames
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
27 disable=c()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
28 for (i in StockNames){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
29 nbmatch=length(Pos[[i]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
30 if(nbmatch>0){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
31 NbFound[[i]]=NbFound[[i]]+nbmatch
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
32 disable=c(disable,-1*Pos[[i]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
33 if(is.null(Out[[i]])){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
34 if(isValue[[i]]!=0){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
35 if(regexp=="next"){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
36 Out[[i]]=opt[Pos[[i]]+1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
37 disable=c(disable,-1*(Pos[[i]]+1))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
38 }else{
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
39 Out[[i]]=sub(regexp,"\\1",opt[Pos[[i]]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
40 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
41 }else{
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
42 Out[[i]]=TRUE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
43 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
44 }else{
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
45 if(isValue[[i]]!=0){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
46 if(regexp=="next"){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
47 Out[[i]]=c(Out[[i]],opt[Pos[[i]]+1])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
48 disable=c(disable,-1*(Pos[[i]]+1))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
49 }else{
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
50 Out[[i]]=c(Out[[i]],sub(regexp,"\\1",opt[Pos[[i]]]))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
51 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
52 }else{
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
53 Out[[i]]=c(Out[[i]],TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
54 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
55 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
56 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
57 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
58 if(length(disable)>0){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
59 opt=opt[disable]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
60 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
61 Out[["ARGUMENT"]]=list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
62 Out[["ARGUMENT"]][["opt"]]=opt
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
63 Out[["ARGUMENT"]][["NbFound"]]=NbFound
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
64 return(Out)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
65 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
66
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
67 getopt = function (spec=NULL,opt=commandArgs()) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
68
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
69 FindArgs=which(opt=="--args")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
70 if(length(FindArgs)!=1){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
71 stop(length(FindArgs)," --args found where 1 expected.",call.=F)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
72 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
73 ExecName=sub("--file=","",opt[FindArgs-1])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
74
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
75 if(FindArgs<length(opt)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
76 opt=opt[(FindArgs+1):length(opt)]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
77 }else{
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
78 opt=""
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
79 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
80
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
81
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
82 min.columns=5
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
83 colNames=c("LongName","ShortName","Flag","Mod","Default")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
84 max.columns=6
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
85 DimSpec=dim(spec)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
86 if(DimSpec[2]>min.columns){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
87 colNames=c(colNames,"Description")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
88 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
89
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
90 if(is.null(spec) | !is.matrix(spec) | (DimSpec[2]<min.columns | DimSpec[2]>max.columns)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
91 stop('argument "spec" is required and must be a matrix with 4|5 columns.',call.=F)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
92 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
93 colnames(spec)=colNames
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
94
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
95 spec=as.data.frame(spec,stringsAsFactors=F)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
96 #spec validation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
97 if(length(unique(c(spec$ShortName,"ARGUMENT","args")))!=DimSpec[1]+2 | length(unique(spec$LongName))!=DimSpec[1]){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
98 stop('Long|Short names for flags must be unique (Long name : "ARGUMENT" and "args" forbidden).',
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
99 "\n","List of duplicated :",
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
100 "\n","Short: ",paste(spec$ShortName[duplicated(c(spec$ShortName,"ARGUMENT","args"))],collapse=" "),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
101 "\n","Long: ",paste(spec$ShortName[duplicated(spec$LongName)],collapse=" "),call.=F)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
102 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
103 if(length(which(nchar(spec$ShortName)>1))!=0){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
104 stop('Short names flags can\'t be longer than 1 character.')
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
105 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
106
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
107
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
108 #initialize
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
109 Out=list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
110 Short2Long=list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
111 NbFound=list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
112 isValue=list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
113 for (i in 1:DimSpec[1]){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
114 Short2Long[[spec$ShortName[i]]]=spec$LongName[i]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
115 NbFound[[spec$LongName[i]]]=0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
116 isValue[[spec$LongName[i]]]=spec$Flag[i]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
117 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
118
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
119 #Map, retreive and suppress ARGUMENTs and arguments
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
120 #Value ARGUMENT --example=value
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
121 Out=RetreiveAndDestroy(opt,"^--","=.+$",".+=(.+)$",spec$LongName,Out,isValue,NbFound,spec$LongName)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
122 opt=Out[["ARGUMENT"]][["opt"]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
123 NbFound=Out[["ARGUMENT"]][["NbFound"]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
124 Out[["ARGUMENT"]]=NULL
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
125 #boolean ARGUMENT --example
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
126 Out=RetreiveAndDestroy(opt,"^--","$","$",spec$LongName,Out,isValue,NbFound,spec$LongName)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
127 opt=Out[["ARGUMENT"]][["opt"]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
128 NbFound=Out[["ARGUMENT"]][["NbFound"]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
129 Out[["ARGUMENT"]]=NULL
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
130 #short name ARGUMENT -t value OR boolean -t
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
131 Out=RetreiveAndDestroy(opt,"^-","$","next",spec$ShortName,Out,isValue,NbFound,spec$LongName)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
132 opt=Out[["ARGUMENT"]][["opt"]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
133 NbFound=Out[["ARGUMENT"]][["NbFound"]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
134 Out[["ARGUMENT"]]=NULL
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
135 #Warn about non mapped ARGUMENTs
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
136 if(length(opt)>0){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
137 PosUnkArg=which(grepl("^-",opt))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
138 if(length(PosUnkArg)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
139 message("Error, argument unreconized :","\n",paste(opt[PosUnkArg],collapse="\n"),"\n\n")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
140 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
141 if(length(PosUnkArg)>0){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
142 opt=opt[PosUnkArg*-1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
143 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
144 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
145 #Arguments
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
146 Out[["ARGUMENT"]]=opt
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
147
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
148 #Validation of ARGUMENTs
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
149 for(i in 1:DimSpec[1]){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
150 if(spec$Flag[i]=="0"){#verify boolean arguments
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
151 NbValue=length(Out[[spec$LongName[i]]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
152 if(NbValue>1){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
153 message("Warning : ",spec$LongName[i]," found ",NbValue," times")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
154 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
155 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
156 if(length(Out[[spec$LongName[i]]])==0){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
157 Out[[spec$LongName[i]]]=spec$Default[i]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
158 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
159 library("methods")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
160 Out[[spec$LongName[i]]]=as(Out[[spec$LongName[i]]],spec$Mod[i])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
161 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
162
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
163 return(Out)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
164 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
165
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
166 # column 3: argument flag. 0=no argument, 1=required argument, 2=optional argument
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
167
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
168
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
169
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
170 ### =========================================================================
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
171 ### Ving's methods
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
172 ### -------------------------------------------------------------------------
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
173 ###
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
174
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
175 ##Converts the flag numbers into binary
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
176 integer.base.b = function(x, b=2){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
177 xi <- as.integer(x)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
178 if(any(is.na(xi) | ((x-xi)!=0)))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
179 print(list(ERROR="x not integer", x=x))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
180 N <- length(x)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
181 xMax <- max(c(x,1))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
182 ndigits <- 11
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
183 Base.b <- array(NA, dim=c(N, ndigits))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
184 for(i in 1:ndigits){#i <- 1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
185 Base.b[, ndigits-i+1] <- (x %% b)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
186 x <- (x %/% b)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
187 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
188 Base.b
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
189 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
190
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
191 ##Checks if color used is an acceptable color
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
192 is.acceptable.color = function(character) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
193 tmp=try(col2rgb(character),TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
194 return(class(tmp)!="try-error")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
195 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
196
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
197 ##Combines two data frame
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
198 listOfDataFrame2DataFrame = function(x,vertical=TRUE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
199 if(length(x)==1) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
200 x[[1]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
201 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
202 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
203 if(vertical) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
204 ncol = dim(x[[1]])[2]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
205 vect=unlist(lapply(x,t))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
206 retour = as.data.frame(t(array(vect,dim=c(ncol,length(vect)/ncol))),stringsAsFactors=FALSE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
207 names(retour)=names(x[[1]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
208 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
209 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
210 nline=dim(x[[1]])[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
211 vect=unlist(x)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
212 retour=as.data.frame(array(vect,dim=c(nline,length(vect)/nline)))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
213 names(retour) = unlist(lapply(x,names))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
214 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
215 retour
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
216 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
217 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
218
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
219 # utilise la fonction scanBam d'une façon plus partique pour moi
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
220 extractFromBam = function(file,which,what) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
221 return(scanBam(file, param=ScanBamParam(which=which,what=what))[[1]][[1]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
222 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
223
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
224 ##Returns a list from cigar expression
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
225 interpreteCIGAR = function(cigar) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
226 cigar_un = strsplit(unique(cigar),split="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
227 n_cigar_un = length(cigar_un)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
228 taille_cigar = list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
229 analise_cigar = function(cigar_) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
230 cigar_sortie = list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
231 acc = ""
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
232 for(j in 1:length(cigar_)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
233 if(sum(cigar_[j]==as.character(0:9))==1) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
234 acc=paste(acc,cigar_[j],sep="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
235 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
236 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
237 cigar_sortie[[length(cigar_sortie)+1]]=as.integer(acc)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
238 cigar_sortie[[length(cigar_sortie)+1]]=cigar_[j]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
239 acc=""
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
240 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
241 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
242 return(cigar_sortie)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
243 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
244 cigar_interprete = lapply(cigar_un,analise_cigar)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
245 names(cigar_interprete) = unique(cigar)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
246
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
247 return(cigar_interprete)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
248 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
249
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
250 # prend un CIGAR splités et retourne la taille occupé par le read sur la séquence génomique (introns compris)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
251 calcule_longueur_cigar = function(cigar_) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
252 lon = 0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
253 N=length(cigar_)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
254 for(j in seq(2,N,2)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
255 if(cigar_[[j]]!="I") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
256 lon=lon+cigar_[[j-1]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
257 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
258 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
259 return(lon)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
260 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
261
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
262 # prend un CIGAR splités et retourne les positions
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
263 calcule_junction_cigar = function(cigar_) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
264 retour=list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
265 lon = 0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
266 N=length(cigar_)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
267 for(j in seq(2,N,2)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
268 if(cigar_[[j]]!="I") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
269 lon=lon+cigar_[[j-1]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
270 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
271 if(cigar_[[j]]=="N") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
272 retour[[length(retour)+1]]=c(lon-cigar_[[j-1]]+1,lon)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
273 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
274 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
275 return(retour)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
276 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
277
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
278 ##Returns a list of numbers of single read with their coordinates
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
279 compresse_coordonnees = function(debut,fin) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
280 if(length(debut)==0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
281 return(list(numeric(),numeric(),numeric()))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
282 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
283 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
284 tmp=sort(paste(debut,fin,sep="_"))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
285 tmp_rle=rle(tmp)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
286 poids=tmp_rle$lengths
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
287 values_split=strsplit(tmp_rle$values,split="_")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
288 doit = function(j) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
289 return(as.integer(values_split[[j]][1]))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
290 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
291 debut_uni=sapply(1:length(poids),doit)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
292 doit = function(j) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
293 return(as.integer(values_split[[j]][2]))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
294 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
295 fin_uni=sapply(1:length(poids),doit)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
296 ordre_debut = order(debut_uni)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
297 return(list(debut_uni[ordre_debut],fin_uni[ordre_debut],poids[ordre_debut]))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
298 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
299 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
300
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
301 RDataFileName = function(file) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
302 return(paste(file,".RData",sep=""))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
303 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
304
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
305 ##Function converts and extracts the infos from bamfile
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
306 readBam_ <-function(file_,insert_max_=2000,stranded_=TRUE,ncore_=1,libraryType_=c("standard","inverse"),fileNameRData_=NA,normalized_=NULL,chrName_=NULL,from_=1,to_=NULL) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
307 suppressPackageStartupMessages(require("Rsamtools"))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
308 suppressPackageStartupMessages(require("GenomicRanges"))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
309 ##Declaration of variables
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
310 flagstat = numeric(11)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
311 names(flagstat)=c("total","duplicates","mapped","paired","read1","read2","properly paired","itself and mate mapped","singletons","mate mapped on a different chr","QC-failed")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
312 genome_info=scanBamHeader(file_)[[1]]$targets
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
313 noms_chromosomes = names(genome_info)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
314 longueur_chromosomes = as.integer(genome_info)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
315 nombre_chromosomes = length(noms_chromosomes)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
316 brin_F = list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
317 brin_R = list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
318 brin_F_junction = list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
319 brin_R_junction = list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
320 pas<-c(1,2,6,7)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
321 i_zone = 0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
322 if(is.null(chrName_)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
323 chrName__ = noms_chromosomes
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
324 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
325 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
326 chrName__ = chrName_
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
327 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
328 ##Fragments identification
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
329 for(i in (1:nombre_chromosomes)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
330 i_zone = i_zone +1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
331 nom_chromo = noms_chromosomes[i]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
332 lon_chromo = longueur_chromosomes[i]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
333
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
334 if(!(nom_chromo %in% chrName__)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
335 brin_F[[i]] = list(numeric(),numeric(),numeric())
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
336 brin_R[[i]] = list(numeric(),numeric(),numeric())
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
337 brin_F_junction[[i]] = list(numeric(),numeric(),numeric())
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
338 brin_R_junction[[i]] = list(numeric(),numeric(),numeric())
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
339 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
340 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
341 if(is.null(to_)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
342 to_i=lon_chromo
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
343 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
344 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
345 to_i=to_[min(i_zone,length(to_))]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
346 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
347 from_i=from_[min(i_zone,length(from_))]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
348
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
349 commande = paste("RangesList(`",nom_chromo,"` = IRanges(",from_i,",",to_i,"))",sep="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
350 expr=try(parse(text=commande),TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
351 ##Function used from GenomicRanges package
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
352 which = eval(expr)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
353 what<-c("flag","mpos","cigar","mrnm","isize")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
354 param<- ScanBamParam(what=what, which=which)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
355 G_alignement<- readGAlignmentsFromBam(file=file_, param=param, use.names=TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
356 ##Case of no reads on the chromosome
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
357 start=start(G_alignement)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
358 if(length(start) == 0 ){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
359 brin_F[[i]] = list(numeric(),numeric(),numeric())
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
360 brin_R[[i]] = list(numeric(),numeric(),numeric())
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
361 brin_F_junction[[i]] = list(numeric(),numeric(),numeric())
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
362 brin_R_junction[[i]] = list(numeric(),numeric(),numeric())
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
363 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
364 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
365 end=end(G_alignement)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
366 strand=as.character(strand(G_alignement))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
367 flag=mcols(G_alignement)$flag
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
368 mpos=mcols(G_alignement)$mpos
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
369 cigar=mcols(G_alignement)$cigar
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
370 mrnm=mcols(G_alignement)$mrnm
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
371 isize=mcols(G_alignement)$isize
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
372
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
373 first_read=integer.base.b(flag)[,5]==1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
374 strand[strand =="+" & !first_read ]="*"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
375 strand[strand =="-" & !first_read ] ="+"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
376 strand[strand =="*" & !first_read ] ="-"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
377
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
378 ##Case of pairend reads
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
379 is_on_same_chr = mrnm==nom_chromo
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
380 is_on_same_chr[is.na(is_on_same_chr)] = FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
381 is_paired = is_on_same_chr & abs(isize) <= insert_max_
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
382 is_paired[first_read & strand=="+" & (isize<0 | isize>insert_max_)] = FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
383 is_paired[!first_read & strand=="+" & (isize>0 | isize < -insert_max_)] = FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
384 is_paired[first_read & strand=="-" & (isize>0 | isize < -insert_max_)] = FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
385 is_paired[!first_read & strand=="-" & (isize<0 | isize>insert_max_)] = FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
386 is_paired[is.na(is_paired)] = FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
387
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
388 debut_fragment_paired_plus<-mpos[!first_read & strand =="+" & is_paired]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
389 fin_fragment_paired_plus<-end[!first_read & strand=="+" & is_paired]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
390 debut_fragment_paired_moins<-mpos[first_read & strand=="-" & is_paired]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
391 fin_fragment_paired_moins<-end[first_read & strand =="-" & is_paired]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
392
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
393 ##Case of single reads
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
394 debut_fragment_singleton_plus = start[!is_paired & strand =="+"]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
395 fin_fragment_singleton_plus = end[!is_paired & strand =="+"]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
396 debut_fragment_singleton_moins=start[!is_paired & strand =="-"]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
397 fin_fragment_singleton_moins= end[!is_paired & strand =="-"]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
398
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
399 ##Fragments
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
400 debut_frag_plus = c(debut_fragment_paired_plus,debut_fragment_singleton_plus)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
401 fin_frag_plus = c(fin_fragment_paired_plus,fin_fragment_singleton_plus)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
402 debut_frag_moins=c(debut_fragment_paired_moins,debut_fragment_singleton_moins)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
403 fin_frag_moins = c(fin_fragment_paired_moins,fin_fragment_singleton_moins)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
404 brin_F[[i]] = compresse_coordonnees(debut_frag_plus,fin_frag_plus)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
405 brin_R[[i]] = compresse_coordonnees(debut_frag_moins,fin_frag_moins)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
406
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
407 ##CIGAR's interpreter
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
408 cigar_interprete = interpreteCIGAR(cigar)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
409 longueur_cigar = lapply(cigar_interprete,calcule_longueur_cigar)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
410 junction_cigar = lapply(cigar_interprete,calcule_junction_cigar)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
411 debut_junction = numeric()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
412 fin_junction = numeric()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
413 brin_junction = numeric()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
414 i_junction = 0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
415 ##junction read
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
416 for(j in 1:length(cigar)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
417 junctions_ = junction_cigar[[cigar[j]]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
418 if(length(junctions_)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
419 for(k in 1:length(junctions_)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
420 i_junction = i_junction + 1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
421 debut_junction[i_junction] = start[j] + junctions_[[k]][1] - 1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
422 fin_junction[i_junction] = start[j] + junctions_[[k]][2] - 1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
423 brin_junction[i_junction] = strand[j]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
424 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
425 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
426 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
427 if(i_junction==0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
428 brin_F_junction[[i]] = list(numeric(),numeric(),numeric())
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
429 brin_R_junction[[i]] = list(numeric(),numeric(),numeric())
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
430 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
431 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
432 brin_F_junction[[i]] = compresse_coordonnees(debut_junction[brin_junction=="+"],fin_junction[brin_junction=="+"])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
433 brin_R_junction[[i]] = compresse_coordonnees(debut_junction[brin_junction=="-"],fin_junction[brin_junction=="-"])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
434 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
435 ##Flagstat interpreter
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
436 flag_bits = integer.base.b(flag)#remplie les données stat pour un flag donné
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
437
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
438 ##flagstat
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
439 ##total
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
440 flagstat[1] = flagstat[1] + sum(flag_bits[,2]==0)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
441 ##duplicates
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
442 flagstat[2] = flagstat[2] + sum((flag_bits[,1]==1)&(flag_bits[,2]==0))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
443 ##mapped
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
444 flagstat[3] = flagstat[3] + sum((flag_bits[,9]==0)&(flag_bits[,2]==0))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
445 ##paired
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
446 flagstat[4] = flagstat[4] + sum((flag_bits[,11]==1)&(flag_bits[,2]==0))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
447 ##read1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
448 flagstat[5] = flagstat[5] + sum((flag_bits[,5]==1)&(flag_bits[,2]==0))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
449 ##read2
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
450 flagstat[6] = flagstat[6] + sum((flag_bits[,4]==1)&(flag_bits[,2]==0))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
451 ##iself and mate mapped
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
452 flagstat[8] = flagstat[8] + sum((flag_bits[,11]==1)&(flag_bits[,9]==0)&(flag_bits[,8]==0)&(flag_bits[,2]==0))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
453 ##singletons
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
454 flagstat[9] = flagstat[9] + sum((flag_bits[,8]==1)&(flag_bits[,2]==0))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
455 ##QC-failed
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
456 flagstat[11] = flagstat[11] + sum(flag_bits[,2]==1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
457 ##flagstat
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
458 ##mate on a different chr
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
459 flagstat[10] = flagstat[10] + sum((!is_on_same_chr)&(flag_bits[,11]==1)&(flag_bits[,9]==0)&(flag_bits[,8]==0)&(flag_bits[,2]==0))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
460 ##flagstat
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
461 ##properly paired
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
462 flagstat[7] = flagstat[7] + sum(is_paired)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
463
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
464 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
465 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
466 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
467 ##Data storing
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
468 names(brin_F) = noms_chromosomes
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
469 names(brin_R) = noms_chromosomes
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
470 names(brin_F_junction) = noms_chromosomes
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
471 names(brin_R_junction) = noms_chromosomes
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
472
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
473 bamHandler = list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
474 if(libraryType_[1]=="inverse") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
475 bamHandler[[1]] = brin_R
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
476 bamHandler[[2]] = brin_F
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
477 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
478 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
479 bamHandler[[1]] = brin_F
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
480 bamHandler[[2]] = brin_R
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
481 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
482 bamHandler[[3]] = longueur_chromosomes
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
483 bamHandler[[4]] = flagstat
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
484 bamHandler[[5]] = stranded_
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
485
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
486 if(libraryType_[1]=="inverse") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
487 bamHandler[[6]] = brin_R_junction
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
488 bamHandler[[7]] = brin_F_junction
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
489 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
490 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
491 bamHandler[[6]] = brin_F_junction
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
492 bamHandler[[7]] = brin_R_junction
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
493 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
494 bamHandler[[8]] = FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
495 if(!is.null(normalized_)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
496 for( i in pas) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
497 for(j in 1:nombre_chromosomes){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
498 bamHandler[[i]][[j]][[4]]=normalized_*bamHandler[[i]][[j]][[3]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
499 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
500 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
501 bamHandler[[8]] = TRUE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
502 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
503
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
504 names(bamHandler) = c("F","R","chrLength","flagstat","stranded","junctions_F","junctions_R","norm")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
505 if((is.null(chrName_))&(from_==1)&(is.null(to_))) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
506 if(is.null(fileNameRData_)|is.na(fileNameRData_)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
507 save(bamHandler,file=RDataFileName(file_))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
508 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
509 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
510 save(bamHandler,file=fileNameRData_)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
511 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
512 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
513 return(bamHandler)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
514 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
515
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
516 chercheBamHandlerDansFichierRData = function(fichierRData) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
517 tmp=try(load(fichierRData),TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
518 if(class(tmp)=="try-error") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
519 return(tmp)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
520 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
521 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
522 return(try(bamHandler,TRUE))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
523 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
524 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
525
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
526 ##Public Function
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
527 readBam = function(file,insert_max=2000,stranded=TRUE,reload=FALSE,ncore=1,libraryType=c("standard","inverse"),normalized=NULL,chrName=NULL,from=1,to=NULL) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
528 if(length(file)==1) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
529 nom_fichier_RData = RDataFileName(file)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
530 if(!file.exists(nom_fichier_RData)|reload) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
531 return(try(readBam_(file_=file,insert_max_=insert_max,stranded_=stranded,ncore_=ncore,libraryType_=libraryType,normalized_=normalized,chrName_=chrName,from_=from,to_=to),TRUE))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
532 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
533 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
534 load(nom_fichier_RData)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
535 return(bamHandler)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
536 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
537 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
538 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
539 require("multicore")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
540 chargeBamsDansFichiersRData = function(oneFile) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
541 nom_fichier_RData = RDataFileName(oneFile)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
542 if(!file.exists(nom_fichier_RData)|reload) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
543 bamHandler=try(readBam_(oneFile,insert_max_=insert_max,stranded_=stranded,libraryType_=libraryType,normalized_=normalized,chrName_=chrName,from_=from,to_=to),TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
544 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
545 return(nom_fichier_RData)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
546 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
547 fichiersRData = mclapply(file,chargeBamsDansFichiersRData,mc.cores=ncore)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
548 gc()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
549 return(lapply(fichiersRData,chercheBamHandlerDansFichierRData))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
550 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
551 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
552
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
553 ##Extracts the signal from bamHandler objects
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
554 extractSignal = function(bamHandlerList,chrName,from=1, to=NULL,normalized_=FALSE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
555 forward=list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
556 reverse=list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
557 chr=which(names(bamHandlerList[[1]]$F)==chrName)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
558 if(is.null(to)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
559 to=bamHandlerList[[1]]$chrLength[chr]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
560 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
561 if(normalized_) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
562 end=4
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
563 }else{
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
564 end=3
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
565 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
566 for(i in 1:length(bamHandlerList)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
567 forward_=numeric(to-from+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
568 which_read = which((bamHandlerList[[i]]$F[[chrName]][[2]]>=from)&(bamHandlerList[[i]]$F[[chrName]][[1]]<=to))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
569 n_reads=length(which_read)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
570 if(n_reads>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
571 for(k in which_read) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
572 debut_read = max(1,bamHandlerList[[i]]$F[[chrName]][[1]][k]-from+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
573 fin_read = min(bamHandlerList[[i]]$F[[chrName]][[2]][k]-from+1,to-from+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
574 forward_[debut_read:fin_read]=forward_[debut_read:fin_read]+bamHandlerList[[i]]$F[[chrName]][[end]][k]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
575 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
576 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
577 which_junctions = which((bamHandlerList[[i]]$junctions_F[[chrName]][[2]]>=from)&(bamHandlerList[[i]]$junctions_F[[chrName]][[1]]<=to))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
578 n_junctions=length(which_junctions)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
579 if(n_junctions>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
580 for(k in which_junctions) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
581 debut_junction = max(1,bamHandlerList[[i]]$junctions_F[[chrName]][[1]][k]-from+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
582 fin_junction = min(bamHandlerList[[i]]$junctions_F[[chrName]][[2]][k]-from+1,to-from+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
583 forward_[debut_junction:fin_junction]=forward_[debut_junction:fin_junction]-bamHandlerList[[i]]$junctions_F[[chrName]][[end]][k]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
584 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
585 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
586
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
587 reverse_=numeric(to-from+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
588 which_read = which((bamHandlerList[[i]]$R[[chrName]][[2]]>=from)&(bamHandlerList[[i]]$R[[chrName]][[1]]<=to))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
589 n_reads= length(which_read)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
590 if(n_reads>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
591 for(k in which_read) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
592 debut_read = max(1,bamHandlerList[[i]]$R[[chrName]][[1]][k]-from+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
593 fin_read = min(bamHandlerList[[i]]$R[[chrName]][[2]][k]-from+1,to-from+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
594 reverse_[debut_read:fin_read]=reverse_[debut_read:fin_read]+bamHandlerList[[i]]$R[[chrName]][[end]][k]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
595 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
596 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
597 which_junctions = which((bamHandlerList[[i]]$junctions_R[[chrName]][[2]]>=from)&(bamHandlerList[[i]]$junctions_R[[chrName]][[1]]<=to))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
598 n_junctions=length(which_junctions)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
599 if(n_junctions>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
600 for(k in which_junctions) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
601 debut_junction = max(1,bamHandlerList[[i]]$junctions_R[[chrName]][[1]][k]-from+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
602 fin_junction = min(bamHandlerList[[i]]$junctions_R[[chrName]][[2]][k]-from+1,to-from+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
603 reverse_[debut_junction:fin_junction]=reverse_[debut_junction:fin_junction]-bamHandlerList[[i]]$junctions_R[[chrName]][[end]][k]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
604 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
605 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
606 forward_[forward_<0]=0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
607 reverse_[reverse_<0]=0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
608 if(bamHandlerList[[i]]$stranded) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
609 forward[[i]]=forward_
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
610 reverse[[i]]=reverse_
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
611 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
612 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
613 forward[[i]]=forward_+reverse_
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
614 reverse[[i]]=numeric(to-from+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
615 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
616 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
617 chr_ = list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
618 chr_$F = forward
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
619 chr_$R = reverse
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
620 return(chr_)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
621 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
622
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
623 ##Intern function for readGff function
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
624 my.read.lines2=function(fname) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
625
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
626 s = file.info( fname )$size
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
627 buf = readChar( fname, s, useBytes=T)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
628 strsplit( buf,"\n",fixed=T,useBytes=T)[[1]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
629 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
630
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
631 ##Extracts the annotation infos from Gff file
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
632 readGff = function(file_in, from=1, to=Inf, chr=NULL, infoName=c("ID","Name","Parent","gene","Alias","orf_classification","Ontology_term","Note","GO")) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
633 tmp=try(my.read.lines2(file_in))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
634 if(!is.null(chr)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
635 tmp1=grep(chr, tmp, value=TRUE,useBytes=T)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
636 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
637 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
638 tmp1=tmp
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
639 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
640 N=length(tmp1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
641 Chr = array()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
642 Start= array()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
643 Stop= array()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
644 Strand=array()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
645 Type=array()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
646 info=list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
647 for(i in 1:length(infoName)) info[[i]] = array()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
648 names(info)=infoName
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
649 j<-1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
650 for (i in 1:N) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
651 if(substr(tmp1[i],1,1)!="#") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
652 line_split=unlist(strsplit(tmp1[i],"\t",fixed=T,useBytes=T))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
653 if((as.integer(line_split[4])<=to) & (as.integer(line_split[5])>=from)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
654 Chr[j] = line_split[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
655 Start[j] = as.integer(line_split[4])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
656 Stop[j] = as.integer(line_split[5])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
657 Strand[j]=line_split[7]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
658 Type[j] = line_split[3]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
659 ninth=unlist(strsplit(line_split[9],";",fixed=T,useBytes=T))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
660 element_ninth_empty=rep(TRUE,length(infoName))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
661 for(element_ninth in ninth) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
662 element_ninth_split = unlist(strsplit(element_ninth,"=",fixed=T,useBytes=T))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
663 if(length(element_ninth_split)==2) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
664 if(element_ninth_split[1] %in% infoName) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
665 info[[element_ninth_split[1]]][j]=element_ninth_split[2]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
666 element_ninth_empty[infoName==element_ninth_split[1]]=FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
667 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
668 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
669 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
670 for(infoName_ in infoName[element_ninth_empty]) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
671 info[[infoName_]][j]="."
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
672 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
673 j<-j+1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
674 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
675 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
676 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
677 retour = data.frame(Chr,Type,Start,Stop,Strand,info,stringsAsFactors = FALSE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
678 return(retour)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
679 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
680
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
681 ##Returns the classic visualisation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
682 plotRNAseq = function(forward,reverse,debut_vue=1,fin_vue=length(forward),chr=NULL,annot=NULL,style=NULL,top=NULL,bottom=NULL,x="",y="",titre="",repeated=FALSE,name_flags="",decal=0,ataxises=NULL,classic_plus_color="navyblue",classic_minus_color="mediumvioletred",stranded=TRUE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
683 if(repeated) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
684 forward_=numeric(fin_vue)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
685 forward_[debut_vue:fin_vue]=forward
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
686 reverse_=numeric(fin_vue)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
687 reverse_[debut_vue:fin_vue]=reverse
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
688 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
689 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
690 forward_=forward
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
691 reverse_=reverse
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
692 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
693 if(is.null(top)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
694 top=max(forward_[debut_vue:fin_vue])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
695 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
696 if(is.null(bottom)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
697 bottom=max(reverse_[debut_vue:fin_vue])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
698 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
699 if(is.null(ataxises)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
700 plot(c(debut_vue,fin_vue)+decal,c(-bottom,top),ylim=c(-bottom,top),xlab=x,ylab=y,main=titre,col="white",xaxs="i",cex.main=2,yaxt="n",cex.lab=1.8)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
701 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
702 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
703 plot(c(debut_vue,fin_vue)+decal,c(-bottom,top),ylim=c(-bottom,top),xlab=x,ylab=y,main=titre,col="white",xaxs="i",xaxt="n",cex.main=2,yaxt="n",cex.lab=1.8)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
704 ataxisesLabels=as.character(ataxises)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
705 ataxisesLabels[((1:length(ataxises))%%2)==0]=""
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
706 lim=c(-bottom,top)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
707 ataxises_y=pretty(lim,n=4)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
708 ataxisesLabels_y=as.character(abs(ataxises_y))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
709 axis(1,at=ataxises,labels=FALSE,cex.axis=2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
710 axis(1,at=ataxises,labels=ataxisesLabels,cex.axis=2,line=0.4,lwd=0)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
711 axis(2, at=ataxises_y,labels=FALSE,cex.axis=2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
712 axis(2, at=ataxises_y,labels=ataxisesLabels_y,cex.axis=2,line=-0.4,lwd=0)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
713 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
714 polygon(c(debut_vue,debut_vue:fin_vue,fin_vue)+decal,c(0,forward_[debut_vue:fin_vue],0),col=classic_plus_color,border=NA)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
715 if(stranded){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
716 text(fin_vue+(fin_vue-debut_vue)*0.01,top/2,"+",xpd=NA,cex=3)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
717 text(fin_vue+(fin_vue-debut_vue)*0.01,-bottom/2,"-",xpd=NA,cex=3)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
718 text(fin_vue+(fin_vue-debut_vue)*0.025,(top-bottom)/2,"Strand",xpd=NA,cex=2,srt=-90)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
719 polygon(c(debut_vue,debut_vue:fin_vue,fin_vue)+decal,c(0,-reverse_[debut_vue:fin_vue],0),col=classic_minus_color,border=NA)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
720 abline(h=0,lwd=2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
721 abline(h=0,col="white")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
722 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
723 #if(!is.null(chr)&!is.null(annot)&!is.null(style)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
724 # N=dim(annot)[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
725 #if(N>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
726 # for(i in 1:N) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
727 #if(annot$Strand[i]=="+") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
728 # arrows(annot$Start[i],top,annot$Stop[i],top,col=style$col[style$Type==annot$Type[i]],length=0.10)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
729 #}
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
730 #if(annot$Strand[i]=="-") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
731 # arrows(annot$Stop[i],-bottom,annot$Start[i],-bottom,col=style$col[style$Type==annot$Type[i]],length=0.10)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
732 #}
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
733 #if(annot$Strand[i]==".") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
734 # segments(annot$Start[i],top,annot$Stop[i],top,col=style$col[style$Type==annot$Type[i]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
735 #segments(annot$Stop[i],-bottom,annot$Start[i],-bottom,col=style$col[style$Type==annot$Type[i]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
736 #}
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
737 #}
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
738 #}
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
739 #}
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
740 if(name_flags!="") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
741 flags=try(get(name_flags),TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
742 if(class(flags)!="try-error") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
743 f_=flags[(flags$Chr==chr)&(flags$Stop>=debut_vue)&(flags$Start<=fin_vue),]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
744 N=dim(f_)[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
745 points(f_$Start,rep(0,N),col=2,pch=19,cex=2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
746 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
747 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
748 if(decal<=0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
749 lines(c(0,0),c(top,-bottom),col=1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
750 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
751 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
752
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
753 ##Intern function for heatmap visualisation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
754 paletteFromColors = function(colMin="blue",colMax="red",n=300,method=c("hsv","rgb")) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
755 colMinRGB = col2rgb(colMin)[,1]/255
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
756 colMaxRGB = col2rgb(colMax)[,1]/255
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
757 seqList = list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
758 if(method[1]=="rgb") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
759 for(i in 1:3) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
760 seqList[[i]]=seq(colMinRGB[i],colMaxRGB[i],length.out=n)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
761 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
762 return(rgb(seqList[[1]],seqList[[2]],seqList[[3]]))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
763 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
764 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
765 colMinHSV = rgb2hsv(colMinRGB)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
766 colMaxHSV = rgb2hsv(colMaxRGB)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
767 for(i in 1:3) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
768 seqList[[i]]=seq(colMinHSV[i],colMaxHSV[i],length.out=n)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
769 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
770 return(hsv(seqList[[1]],s=seqList[[2]],v=seqList[[3]]))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
771 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
772 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
773
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
774 ##Retuns the heatmap visualisation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
775 myHeatMap = function(data,debut_vue,fin_vue,ataxises=NULL,lim=NULL,heatmap_max_color="#000055",heatmap_min_color="#FFFFAA",heatmap_palette_method="hsv",textOnLeftSide="") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
776 palette=paletteFromColors(heatmap_min_color,heatmap_max_color,method=heatmap_palette_method)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
777 if(is.null(lim)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
778 image(debut_vue:fin_vue,1:dim(data)[1],t(data), col = palette,xlab="",ylab="",xaxt="n",yaxt="n")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
779 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
780 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
781 image(debut_vue:fin_vue,1:dim(data)[1],t(data), col = palette,xlab="",ylab="",xaxt="n",yaxt="n",zlim=lim)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
782 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
783 box()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
784 if(is.null(ataxises)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
785 axis(1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
786 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
787 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
788 if(sum(!is.na(ataxises))!=0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
789 axis(1,at=ataxises,labels=FALSE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
790 axis(3,at=ataxises,labels=FALSE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
791 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
792 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
793 if(sum(!is.na(ataxises))!=0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
794 axis(2,at=1:dim(data)[1],labels=rownames(data),las=2,cex.axis=1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
795 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
796 text(fin_vue+(fin_vue-debut_vue)*0.015,(dim(data)[1]+1)/2,textOnLeftSide,xpd=NA,cex=1,srt=-90)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
797 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
798
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
799 ##Returns the title of visualisation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
800 plotTitle=function(debut_vue=1,fin_vue=length(listForward[[1]]),chr=NULL,style=NULL) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
801 plot(c(0,1),c(0,1),col="white",ylab="",xlab="",fg="white",col.axis="white",xaxs="i",yaxs="i")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
802 text(0,0.5,paste(chr,":",debut_vue,"-",fin_vue,sep=""),cex=2.2,adj=0)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
803 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
804
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
805 ##The main function of visualisation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
806 plotVisu = function(file,typeVisu="classic",listForward,listReverse,which=1:length(listForward),stranded=TRUE,
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
807 debut_vue=1,fin_vue=length(listForward[[1]]),chr=NULL,annot=NULL,style=NULL,tops=NULL,bottoms=NULL,marks=NULL,strandMarks=NULL,
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
808 titres="",repeated=FALSE,name_flags="",decal=0,log=TRUE,classic_plus_color="navyblue",classic_minus_color="mediumvioletred",
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
809 heatmap_max_color="#FFFFAA",heatmap_min_color="#000055",heatmap_palette_method="hsv",
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
810 lines_samples_colors=c(1,3,4,2)[((0:length(listForward))%%4)+1],lines_samples_type_line=((0:length(listForward))%%4)+1,
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
811 smoothLength=trunc((fin_vue-debut_vue)/1200),annotation_color_by_strand=FALSE,annotation_placed_by_strand=FALSE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
812 n_element_vue = length(which)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
813 i_data = which[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
814 forward_matrice=NULL
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
815 reverse_matrice=NULL
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
816 all_stranded = data[[i_data]]$stranded
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
817 if(!repeated) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
818 for(i in 1:n_element_vue) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
819 i_data = which[i]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
820 forward_matrice = rbind(forward_matrice,forward[[i_data]][debut_vue:fin_vue])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
821 reverse_matrice = rbind(reverse_matrice,reverse[[i_data]][debut_vue:fin_vue])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
822 all_stranded = all_stranded & data[[i_data]]$stranded
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
823 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
824 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
825 else{
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
826 for(i in 1:n_element_vue) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
827 i_data = which[i]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
828 forward_matrice = rbind(forward_matrice,forward[[i_data]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
829 reverse_matrice = rbind(reverse_matrice,reverse[[i_data]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
830 all_stranded = all_stranded & data[[i_data]]$stranded
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
831 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
832 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
833 rownames(forward_matrice)=titres[which]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
834 rownames(reverse_matrice)=titres[which]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
835 for( i in 1:n_element_vue){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
836 if(smoothLength>1) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
837 lo=smooth(forward_matrice[i,],L=smoothLength)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
838 forward_matrice[i,]=lo
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
839 los=smooth(reverse_matrice[i,],L=smoothLength)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
840 reverse_matrice[i,]=los
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
841 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
842 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
843 if(is.null(annot)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
844 heights_ann=NULL
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
845 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
846 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
847 heights_ann=sizePlotAnnotation(annot=annot,chr=chr,debut=debut_vue,fin=fin_vue,style=style,annotation_placed_by_strand=annotation_placed_by_strand)*50
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
848 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
849 ataxises=pretty((debut_vue:fin_vue)+decal,n=14)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
850 if(log){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
851 label_scal="log2 tag densities"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
852 }else{
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
853 label_scal="tag densities"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
854 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
855 if(debut_vue==1&decal==0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
856 ataxises[1]=1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
857 }##Classic visualisation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
858 if(typeVisu=="classic") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
859 height_panels = c(40,rep(200,n_element_vue),heights_ann)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
860 png(file,1200,sum(height_panels))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
861 prev=par(no.readonly = TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
862 n_panels=length(height_panels)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
863 layout(matrix(1:n_panels,n_panels,1),heights=height_panels)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
864 par(mar=c(0, 5, 0, 4)+0.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
865 plotTitle(debut_vue=debut_vue,fin_vue=fin_vue,chr=chr)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
866 par(mar=c(2.5, 5, 2.5, 4)+0.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
867 for(element in 1:n_element_vue) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
868 i_data = which[element]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
869 plotRNAseq(listForward[[i_data]],listReverse[[i_data]],debut_vue,fin_vue,chr,annot,style,top=tops[min(element,length(tops))],bottom=bottoms[min(element,length(bottoms))],y=label_scal,titre=titres[min(i_data,length(titres))],name_flags=name_flags,repeated=repeated,decal=decal,ataxises=ataxises,classic_plus_color=classic_plus_color,classic_minus_color=classic_minus_color,stranded=stranded)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
870 if(!is.null(marks)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
871 if(is.null(tops)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
872 top=max(forward[[i_data]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
873 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
874 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
875 top=tops[min(element,length(tops))]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
876 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
877 if(is.null(bottoms)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
878 bottom=max(reverse[[i_data]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
879 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
880 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
881 bottom=bottoms[min(element,length(bottoms))]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
882 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
883 if(is.null(strandMarks)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
884 segments(marks,top,y1=-bottom,col=2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
885 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
886 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
887 if(strandMarks==0|!data[[i_data]]$stranded) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
888 segments(marks,0,y1=top,col=2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
889 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
890 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
891 if(strandMarks==1) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
892 segments(marks,0,y1=-bottom,col=2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
893 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
894 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
895 segments(marks,top,y1=-bottom,col=2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
896 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
897 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
898 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
899 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
900 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
901 par(mar=c(0,5,1,4)+0.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
902 if(!is.null(annot)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
903 plot_annotation(annot,chr,debut=debut_vue,fin=fin_vue,style=style,textSize=1.5,annotation_color_by_strand=annotation_color_by_strand,annotation_placed_by_strand=annotation_placed_by_strand)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
904 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
905 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
906 else {##Heatmap visualisation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
907 if(typeVisu=="heatmap") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
908 if(stranded) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
909 height_panels=c(40,50*n_element_vue+28,heights_ann,50*n_element_vue+30,100)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
910 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
911 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
912 height_panels=c(40,50*n_element_vue+28,heights_ann,100)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
913 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
914 png(file,1200,sum(height_panels))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
915 prev=par(no.readonly = TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
916 n_panels=length(height_panels)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
917 layout(matrix(1:n_panels,n_panels,1),heights=height_panels)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
918 par(mar=c(0, 8, 0, 2)+0.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
919 plotTitle(debut_vue=debut_vue,fin_vue=fin_vue,chr=chr)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
920 limIntensity = c(0,max(forward_matrice,reverse_matrice,na.rm=TRUE))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
921 ataxisesLabels=as.character(ataxises)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
922 ataxisesLabels[((1:length(ataxises))%%2)==0]=""
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
923 rownames(forward_matrice)=titres[which]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
924 rownames(reverse_matrice)=titres[which]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
925 par(mar=c(1, 8, 1.8, 2)+0.1,cex=1.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
926 if(stranded) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
927 tmp="Plus strand"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
928 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
929 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
930 tmp="Both strands"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
931 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
932 myHeatMap(forward_matrice[(dim(forward_matrice)[1]):1,],debut_vue+decal,fin_vue+decal,ataxises,lim=limIntensity,heatmap_max_color=heatmap_max_color,heatmap_min_color=heatmap_min_color,heatmap_palette_method=heatmap_palette_method,textOnLeftSide=tmp)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
933 axis(3,at=ataxises,labels=FALSE,cex.axis=1.4)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
934 axis(3,at=ataxises,labels=ataxisesLabels,cex.axis=1.4,line=-0.4,lwd=0)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
935 if(!is.null(marks)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
936 if(is.null(strandMarks)|!all_stranded) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
937 segments(marks,-2,y1=dim(forward_matrice)[1]+2,col=2,lwd=2,xpd=TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
938 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
939 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
940 if(strandMarks!=1) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
941 segments(marks,-2,y1=dim(forward_matrice)[1]+2,col=2,lwd=2,xpd=TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
942 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
943 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
944 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
945 if(name_flags!="") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
946 flags=try(get(name_flags),TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
947 if(class(flags)!="try-error") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
948 f_=flags[(flags$Chr==chr)&(flags$Stop>=debut_vue)&(flags$Start<=fin_vue),]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
949 N=dim(f_)[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
950 points(f_$Start,rep(0,N),col=2,pch=19,cex=2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
951 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
952 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
953 if(!is.null(annot)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
954 par(mar=c(0,8,0,2)+0.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
955 plot_annotation(annot,chr,debut=debut_vue,fin=fin_vue,style=style,textSize=0.9,annotation_color_by_strand=annotation_color_by_strand,annotation_placed_by_strand=annotation_placed_by_strand)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
956 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
957 if(stranded) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
958 par(mar=c(1, 8, 0, 2)+0.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
959 myHeatMap(reverse_matrice[(dim(reverse_matrice)[1]):1,],debut_vue+decal,fin_vue+decal,ataxises,lim=limIntensity,heatmap_max_color=heatmap_max_color,heatmap_min_color=heatmap_min_color,heatmap_palette_method=heatmap_palette_method,textOnLeftSide="Minus strand")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
960 if(!is.null(marks)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
961 if(is.null(strandMarks)|!all_stranded) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
962 segments(marks,-1,y1=dim(forward_matrice)[1]+1,col=2,lwd=2,xpd=TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
963 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
964 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
965 if(strandMarks!=0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
966 segments(marks,-1,y1=dim(forward_matrice)[1]+1,col=2,lwd=2,xpd=TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
967 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
968 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
969 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
970 axis(1,at=ataxises,labels=ataxisesLabels,cex.axis=1.4)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
971 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
972 palette=matrix(seq(limIntensity[1],limIntensity[2],length.out=2000),1,2000)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
973 rownames(palette)="0"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
974 par(mar=c(2,18,3, 12)+0.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
975 myHeatMap(palette,1,2000,ataxises=NA,heatmap_max_color=heatmap_max_color,heatmap_min_color=heatmap_min_color,heatmap_palette_method=heatmap_palette_method)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
976 labelAxisHeatmapLegend=pretty(c(limIntensity[1],limIntensity[2]),n=7)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
977 atAxisHeatmapLegend=1+((labelAxisHeatmapLegend-limIntensity[1])/(limIntensity[2]-limIntensity[1]))*1999
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
978 axis(1,at=atAxisHeatmapLegend,labels=FALSE,cex.axis=1.4)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
979 axis(1,at=atAxisHeatmapLegend,labels=labelAxisHeatmapLegend,cex.axis=1.4,line=-0.4,lwd=0)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
980 text(1000,2,label_scal,xpd=NA,font=2,cex=1.4)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
981
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
982 }##Lines visualisation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
983 else if(typeVisu=="lines"){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
984 legendSize = (floor(n_element_vue/2)+n_element_vue%%2)*40
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
985 height_panels=c(40,legendSize,400,heights_ann)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
986 n_panels=length(height_panels)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
987 png(file,1200,sum(height_panels))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
988 prev=par(no.readonly = TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
989 par(mar=c(0, 5, 0,4)+0.1,cex=1.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
990 layout(matrix(c(1:n_panels),n_panels,4),heights=height_panels)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
991 par(mar=c(0, 5, 0,4)+0.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
992 plotTitle(debut_vue=debut_vue,fin_vue=fin_vue,chr=chr)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
993 lines_legend(n_element_vue=n_element_vue,which,titres,lines_samples_colors=lines_samples_colors,lines_samples_type_line=lines_samples_type_line)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
994 par(mar=c(3, 5, 0,4)+0.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
995 plotlines(forward_matrice,reverse_matrice,which=which,debut_vue, fin_vue , chr, annot, style, tops, bottoms,marks,strandMarks,titres, repeated,name_flags,decal,ataxises=ataxises,n_element_vue=n_element_vue,y=label_scal,lines_samples_colors=lines_samples_colors,lines_samples_type_line=lines_samples_type_line,stranded=stranded)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
996 par(mar=c(0,5,0,4)+0.1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
997 if(!is.null(annot)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
998 plot_annotation(annot,chr,debut=debut_vue,fin=fin_vue,style=style,textSize=1.5,annotation_color_by_strand=annotation_color_by_strand,annotation_placed_by_strand=annotation_placed_by_strand)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
999 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1000
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1001 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1002 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1003 invisible(dev.off())
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1004 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1005
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1006 ##
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1007 smooth = function(X,L=10) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1008 x_smooth=filter(X,rep(1,L)/L)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1009 x_smooth[is.na(x_smooth)]=0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1010 return(x_smooth)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1011 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1012
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1013 ##Returns lines visualisation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1014 plotlines = function(forward_matrice,reverse_matrice,which=1:length(forward), debut_vue = 1,fin_vue =length(forward), chr=NULL, annot=NULL, style=NULL, tops=NULL,bottoms=NULL,marks=NULL,strandMarks=NULL, titres="", repeated=FALSE,name_flags="",decal=0,ataxises=NULL,n_element_vue=length(which),y="",lines_samples_colors=c(1,3,4,2)[((0:length(forward))%%4)+1],lines_samples_type_line=((0:length(forward))%%4)+1,stranded=TRUE){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1015 limIntensity = c(-max(bottoms),max(tops))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1016 plot(c(debut_vue,fin_vue)+decal,limIntensity,col="white",ylab=y,main="",xaxs="i",xaxt="n",yaxt="n",cex.lab=1.2,xlab="",cex.lab=1.8)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1017 lty=lines_samples_type_line
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1018 col=lines_samples_colors
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1019 ataxises_y= pretty(limIntensity,n=8)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1020 for(i in ataxises) abline(v=i,lty=2,col="#808080")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1021 for(i in ataxises_y) abline(h=i,lty=2,col="#808080")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1022 for( i in 1:n_element_vue){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1023 lo=forward_matrice[i,]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1024 lines((debut_vue:fin_vue)+decal,lo,type="l",lty =lty[i],col=col[i],lwd=2,xaxt="n")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1025 if(stranded) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1026 los=-reverse_matrice[i,]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1027 lines((debut_vue:fin_vue)+decal,los,type="l",lty= lty[i],col=col[i],lwd=2,xaxt="n")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1028 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1029 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1030 ataxisesLabels=as.character(ataxises)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1031 ataxisesLabels[((1:length(ataxises))%%2)==0]=""
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1032 ataxisesLabels_y=as.character(abs(ataxises_y))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1033 ataxisesLabels_y[((1:length(ataxises_y))%%2)==0]=""
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1034 axis(1,at=ataxises,labels=FALSE,cex.axis=2.6)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1035 axis(1,at=ataxises,labels=ataxisesLabels,cex.axis=2.6,line=0.6,lwd=0)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1036 axis(2, at=ataxises_y,labels=FALSE,cex.axis=2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1037 axis(2, at=ataxises_y,labels=ataxisesLabels_y,cex.axis=2,line=-0.4,lwd=0)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1038 if(stranded) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1039 abline(h=0,lwd=6)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1040 abline(h=0,col="white",lwd=4)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1041 text(fin_vue+(fin_vue-debut_vue)*0.01,tops/2,"+",xpd=NA,cex=3)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1042 text(fin_vue+(fin_vue-debut_vue)*0.01,-bottoms/2,"-",xpd=NA,cex=3)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1043 text(fin_vue+(fin_vue-debut_vue)*0.025,(tops-bottoms)/2,"Strand",xpd=NA,cex=2,srt=-90)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1044 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1045 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1046
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1047 ##Returns lines legend
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1048 lines_legend=function(n_element_vue,which,titres,lines_samples_colors=c(1,3,4,2)[((0:n_element_vue)%%4)+1],lines_samples_type_line=((0:n_element_vue)%%4)+1){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1049 lty=lines_samples_type_line
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1050 col=lines_samples_colors
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1051 n_y = floor(n_element_vue/2)+n_element_vue%%2
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1052 plot(c(0,4),c(0,-(n_y+1)),col="white", ylab="",xlab="",main="",fg="white",col.axis="white",yaxs="i")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1053 i_style=0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1054 for(i in 1:n_y) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1055 i_style=i_style+1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1056 lines(c(1.5,2),-c(i,i),col=col[i_style],lty=lty[i_style],lwd=4)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1057 text(1.48,-i,titres[which[i_style]],cex=2.6,adj=1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1058 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1059 if(n_element_vue>1) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1060 for(i in (n_y+1):n_element_vue) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1061 i_style=i_style+1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1062 lines(c(3.5,4),-c(i,i)+n_y,col=col[i_style],lty=lty[i_style],lwd=4)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1063 text(3.48,-i+n_y,titres[which[i_style]],cex=2.6,adj=1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1064 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1065 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1066 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1067
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1068 ##Returns the shape of plain arrow for the annotation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1069 plain_arrow = function(left,right,y,thickness=1,pickSize=(right-left)*0.1,pickSide=c("right","left","both","none"),col="blue") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1070 if(pickSide[1]=="right") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1071 pick_point = min(right - pickSize,right)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1072 polygon(c(left,pick_point,right,pick_point,left),c(y-thickness/2,y-thickness/2,y,y+thickness/2,y+thickness/2),col=col)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1073 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1074 if(pickSide[1]=="left") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1075 pick_point = max(left + pickSize,left)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1076 polygon(c(right,pick_point,left,pick_point,right),c(y-thickness/2,y-thickness/2,y,y+thickness/2,y+thickness/2),col=col)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1077 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1078 if(pickSide[1]=="none") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1079 polygon(c(right,left,left,right),c(y-thickness/2,y-thickness/2,y+thickness/2,y+thickness/2),col=col)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1080 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1081 if(pickSide[1]=="both") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1082 pick_point_1 = max(left + pickSize,left)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1083 pick_point_2 = min(right - pickSize,right)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1084 polygon(c(left,pick_point_1,pick_point_2,right,pick_point_2,pick_point_1),c(y,y-thickness/2,y-thickness/2,y,y+thickness/2,y+thickness/2),col=col)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1085 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1086 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1087
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1088 ##Returns the size of the panel of the annotation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1089 sizePlotAnnotation=function(annot,chr,debut,fin,style=NULL,annotation_placed_by_strand=FALSE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1090 left=c()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1091 right=c()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1092 annot_chr=annot[annot$Chr==chr,]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1093 unique_ID=unique(annot_chr$ID)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1094 for(j in 1:length(unique_ID)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1095 left[j]=min(annot_chr$Start[annot_chr$ID==unique_ID[j]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1096 right[j]=max(annot_chr$Stop[annot_chr$ID==unique_ID[j]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1097 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1098 y_plot=parking(left,right)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1099 return(max(y_plot)-min(y_plot)+1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1100 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1101
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1102 ##Function to organise the annotation shapes to display
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1103 parking = function(left,right,plus=rep(TRUE,length(left)),biggestOnesInside=TRUE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1104 y=rep(0,length(left))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1105 if(sum(plus)>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1106 left_plus=left[plus]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1107 right_plus=right[plus]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1108 y_plus=rep(0,sum(plus))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1109 lengths_plus=right_plus-left_plus
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1110 for(i in order(lengths_plus,decreasing=TRUE)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1111 otherleft_plus=left_plus
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1112 otherleft_plus[i]=NA
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1113 otherright_plus=right_plus
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1114 otherright_plus[i]=NA
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1115 placed=FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1116 y_plus[i]=0.5
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1117 while(placed==FALSE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1118 placed=sum((right_plus[i]>otherleft_plus[y_plus==y_plus[i]])&(left_plus[i]<otherright_plus[y_plus==y_plus[i]]),na.rm=TRUE)==0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1119 if(placed==FALSE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1120 y_plus[i]=y_plus[i]+1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1121 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1122 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1123 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1124 if(biggestOnesInside) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1125 y[plus]=y_plus
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1126 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1127 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1128 y[plus]=sapply(y_plus,function(i) sort(unique(y_plus))[i==sort(unique(y_plus),decreasing=TRUE)])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1129 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1130 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1131 if(sum(!plus)>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1132 left_minus=left[!plus]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1133 right_minus=right[!plus]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1134 y_minus=rep(0,sum(!plus))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1135 lengths_minus=right_minus-left_minus
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1136 for(i in order(lengths_minus,decreasing=TRUE)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1137 otherleft_minus=left_minus
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1138 otherleft_minus[i]=NA
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1139 otherright_minus=right_minus
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1140 otherright_minus[i]=NA
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1141 placed=FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1142 y_minus[i]=-0.5
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1143 while(placed==FALSE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1144 placed=sum((right_minus[i]>otherleft_minus[y_minus==y_minus[i]])&(left_minus[i]<otherright_minus[y_minus==y_minus[i]]),na.rm=TRUE)==0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1145 if(placed==FALSE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1146 y_minus[i]=y_minus[i]-1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1147 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1148 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1149 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1150 if(biggestOnesInside) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1151 y[!plus]=y_minus
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1152 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1153 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1154 y[!plus]=sapply(y_minus,function(i) sort(unique(y_minus))[i==sort(unique(y_minus),decreasing=TRUE)])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1155 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1156 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1157 return(y)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1158 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1159
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1160 ##Function to
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1161 plot_annotation = function(annot,chr,debut,fin,style=NULL,textSize=par("cex"),annotation_color_by_strand=FALSE,annotation_placed_by_strand=FALSE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1162 left=c()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1163 right=c()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1164 annot_chr=annot[annot$Chr==chr,]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1165 N = dim(annot_chr)[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1166 strand=c("-","+")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1167 if(N>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1168 unique_ID=unique(annot_chr$ID)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1169 par_prev=par(no.readonly=TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1170 for(j in 1:length(unique_ID)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1171 left[j]=min(annot_chr$Start[annot_chr$ID==unique_ID[j]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1172 right[j]=max(annot_chr$Stop[annot_chr$ID==unique_ID[j]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1173 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1174 if(annotation_placed_by_strand) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1175 y_plot=parking(left,right,annot_chr$Strand=="+",FALSE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1176 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1177 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1178 y_plot=parking(left,right,biggestOnesInside=FALSE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1179 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1180 plot(c(debut,fin),c(min(y_plot)-0.5,max(y_plot)+0.5),col="white",ylab="",xlab="",fg="white",col.axis="white",xaxs="i",yaxs="i")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1181 for(j in 1:length(unique_ID)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1182 annot_ID=annot_chr[annot_chr$ID==unique_ID[j],]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1183 x_text<-Inf
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1184 for(i_annot_ID in 1:dim(annot_ID)[1]) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1185 if(annot_ID$Strand[i_annot_ID]=="-") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1186 orientation="left"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1187 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1188 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1189 orientation="right"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1190 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1191 iDraw = FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1192 if(annot_ID$Strand[i_annot_ID]==".") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1193 tmp="+"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1194 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1195 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1196 tmp=annot_ID$Strand[i_annot_ID]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1197 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1198 style_demande = style[style$Type==annot_ID$Type[i_annot_ID]&style$Strand==tmp,]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1199 x_text<-min(x_text,annot_ID$Start[i_annot_ID])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1200 if(style_demande$shape=="box") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1201 plain_arrow(annot_ID$Start[i_annot_ID],annot_ID$Stop[i_annot_ID],y_plot[j],thickness=0.5, pickSide=orientation,col=style_demande$col,pickSize=(fin-debut)*0.02)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1202 iDraw=TRUE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1203 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1204 if(style_demande$shape =="line") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1205 segments(annot_ID$Start[i_annot_ID],y_plot[j],annot_ID$Stop[i_annot_ID],y_plot[j],col=style_demande$col)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1206 iDraw=TRUE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1207 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1208 if(style_demande$shape == "rectangle") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1209 plain_arrow(annot_ID$Start[i_annot_ID],annot_ID$Stop[i_annot_ID],y_plot[j],thickness=0.5, pickSide="none",col=style_demande$col)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1210 iDraw=TRUE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1211 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1212 if(style_demande$shape == "arrow") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1213 arrowHeads = pretty(debut:fin,n=50)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1214 x<-c(annot_ID$Start[i_annot_ID],arrowHeads[arrowHeads>annot_ID$Start[i_annot_ID]&arrowHeads<annot_ID$Stop[i_annot_ID]],annot_ID$Stop[i_annot_ID])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1215 if(annot_ID$Strand[i_annot_ID]=="-") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1216 arrows(x[2:length(x)],y_plot[j],x[1:length(x)-1],col=style_demande$col,length=0.08)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1217 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1218 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1219 arrows(x[1:length(x)-1],y_plot[j],x[2:length(x)],col=style_demande$col,length=0.08)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1220 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1221 iDraw=TRUE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1222 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1223 if(iDraw == FALSE) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1224 segments(annot_ID$Start[i_annot_ID],y_plot[j],annot_ID$Stop[i_annot_ID],y_plot[j],col="black")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1225 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1226 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1227 text(max(x_text,debut),y_plot[j]+0.4,adj=0,labels=unique_ID[j],cex=textSize)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1228 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1229 if(annotation_placed_by_strand) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1230 abline(h=0.125,lty=2,col="black")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1231 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1232 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1233 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1234
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1235 # produit la visualisation de la légende
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1236 plotLegend= function(style,width_plot=400,length_arrows=100,type="horizontal") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1237 if(type=="horizontal") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1238 style_unique = unique(style$col)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1239 n_style = length(style_unique)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1240 plot(c(0,width_plot),c(1,2*n_style+1),col="white",ylab="",xlab="",xaxs="i",fg="white",col.axis="white",main="Legend")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1241 for(i in 1:n_style) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1242 arrows(ceiling((width_plot-length_arrows)/2),2*(n_style-i+1),ceiling((width_plot+length_arrows)/2),2*(n_style-i+1),col=style_unique[i],length=0.10)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1243 text(ceiling(width_plot/2),2*(n_style-i+1)+0.5,paste(style$Type[style$col==style_unique[i]],collapse=", "),col=style_unique[i])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1244 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1245 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1246 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1247 style_unique = unique(style$col)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1248 n_style = length(style_unique)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1249 length_arrows = width_plot/(n_style*1.25)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1250 inbetween = length_arrows/4
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1251 plot(c(0,width_plot),c(0,1),col="white",ylab="",xlab="",yaxs="i",xaxt="n",yaxt="n",bty="n",xaxs="i",col.axis="white",main="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1252 text(width_plot/2,0.8,"Legend",cex=1.4,font=2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1253 for(i in 1:n_style) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1254 fleche_start = (length_arrows+inbetween)*(i-1) + inbetween/2
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1255 fleche_stop = (length_arrows+inbetween)*(i-1) + length_arrows + inbetween/2
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1256 # arrows(fleche_start,0.2,fleche_stop,0.2,col=style_unique[i],length=0.10)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1257 rect(fleche_start,0.2,fleche_stop,0.6,border=style_unique[i])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1258 text((fleche_start+fleche_stop)/2,0.4,paste(style$Type[style$col==style_unique[i]],collapse=", "),col=style_unique[i],cex=1.2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1259 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1260 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1261 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1262
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1263 html2rgb = function(codeHTML) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1264 chiffres=c(0:9,"A","B","C","D","E","F")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1265 codeHTMLsplit=unlist(strsplit(codeHTML,split=""))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1266 red = (((which(chiffres==codeHTMLsplit[2])-1)*16)+(which(chiffres==codeHTMLsplit[3])-1))/255
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1267 green = (((which(chiffres==codeHTMLsplit[4])-1)*16)+(which(chiffres==codeHTMLsplit[5])-1))/255
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1268 blue = (((which(chiffres==codeHTMLsplit[6])-1)*16)+(which(chiffres==codeHTMLsplit[7])-1))/255
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1269 return(c(red,green,blue))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1270 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1271
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1272 rgb2hsv = function(vectRGB) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1273 Cmax=max(vectRGB)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1274 Cmin=min(vectRGB)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1275 delta=Cmax-Cmin
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1276 if(delta==0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1277 H=0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1278 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1279 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1280 if(Cmax==vectRGB[1]) H=(1/6)*(((vectRGB[2]-vectRGB[3])/delta)%%6)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1281 if(Cmax==vectRGB[2]) H=(1/6)*(((vectRGB[3]-vectRGB[1])/delta)+2)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1282 if(Cmax==vectRGB[3]) H=(1/6)*(((vectRGB[1]-vectRGB[2])/delta)+4)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1283 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1284 if(delta==0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1285 S=0
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1286 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1287 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1288 S=delta/Cmax
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1289 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1290 V=Cmax
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1291
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1292 return(c(H,S,V))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1293 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1294
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1295 ### =========================================================================
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1296 ### Ving's Main
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1297 ### -------------------------------------------------------------------------
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1298 ###
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1299 {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1300 if(version$major != "3" & version$minor != "0.2") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1301 warning("You need 3.0.2 R Version to run the program")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1302 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1303 tmp = unlist(strsplit(commandArgs()[4],split="="))[2]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1304 path_split = unlist(strsplit(tmp,split="/"))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1305 path = paste(path_split[1:(length(path_split)-1)],collapse="/")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1306 arg<-commandArgs(TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1307 if(length(arg)==0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1308 cat("Ving for visualisation of RNA seq data:
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1309 Usage:
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1310 ./visualiseur.R [options] <input> [<input2> <input3> ...]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1311 options:
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1312 -o/--output <string> [default:./ouput.png]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1313 -v/--typeVisu <string> [default: classic ] (classic,lines,heatmap)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1314 -t/--description-data <string> [default: filename ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1315 -n/--normalization-coefficient <string> [default: none ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1316 -i/--inverseStrand
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1317 -u/--unstranded
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1318 -c/--chromosome-name <string> [default: first one ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1319 -d/--start <integer> [default: 1 ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1320 -f/--end <integer> [default: chr length]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1321 -a/--annotation <filename>
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1322 -r/--typeTranscript <string> [default: all ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1323 -C/--annotation-colors <string> [default: fabulous ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1324 -s/--annotation-shapes <string> [default: box ] (box,line,rectangle,arrow)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1325 -l/--scale-log
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1326 -y/--symetric-scale
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1327 --classic-plus-color <string> [default: purple ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1328 --classic-minus-color <string> [default: pink ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1329 --heatmap-max-color <string> [default: green ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1330 --heatmap-min-color <string> [default: yellow ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1331 --heatmap-palette-method <string> [default: hsv ] (hsv,rgb)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1332 --lines-samples-colors <string> [default: black ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1333 --lines-samples-type-line <string> [default: plain ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1334 --annotation-color-by-strand <logical> [default: FALSE ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1335 --annotation-placed-by-strand <logical> [default: FALSE ]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1336 \n\n")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1337 q("no")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1338 }else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1339 tmp=suppressPackageStartupMessages(require("Rsamtools"))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1340 if(!tmp) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1341 stop("Package Rsamtools required !!")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1342 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1343 tmp=suppressPackageStartupMessages(require("GenomicRanges"))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1344 if(!tmp) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1345 stop("Package GenomicRanges required !!")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1346 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1347 optArgs=getopt(
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1348 rbind(
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1349
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1350 c('output','o', 1, 'character',"output.png"),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1351 c('typeVisu', 'v', 1, 'character', "classic"),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1352 c('description-data','t',1,'character',NA),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1353 c('chromosome-name', 'c', 1, 'character', NA),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1354 c('start', 'd', 1, 'numeric',1),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1355 c('end', 'f', 1, 'numeric',NA),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1356 c('annotation','a',1,'character',NA),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1357 c('typeTranscript','r',1,'character',NA),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1358 c('annotation-colors','C',1,'character',NA),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1359 c('annotation-shapes','s','1','character',NA),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1360 c('normalization-coefficient','n','1','character',NA),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1361 c('classic-plus-color',1,1,'character',"navyblue"),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1362 c('classic-minus-color',2,1,'character',"mediumvioletred"),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1363 c('heatmap-max-color',3,1,'character',"#000055"),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1364 c('heatmap-min-color',4,1,'character',"#FFFFAA"),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1365 c('heatmap-palette-method',7,1,'character',"hsv"),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1366 c('lines-samples-colors',5,1,'character',NA),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1367 c('lines-samples-type-line',6,1,'character',NA),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1368 c('scale-log', 'l',0,'logical',FALSE),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1369 c('inverseStrand','i',0,'logical', FALSE),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1370 c('unstranded','u',0,'logical', FALSE),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1371 c('symetric-scale','y',0,'logical', FALSE),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1372 c('annotation-color-by-strand',8,0,'logical',FALSE),
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1373 c('annotation-placed-by-strand',9,0,'logical',FALSE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1374 )
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1375 )
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1376 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1377 ###################
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1378 ## ARGUMENTS
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1379 #################################################################################
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1380 files=optArgs$ARGUMENT
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1381 ##Case file doesn't exist
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1382 for( i in 1:length(files)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1383 if(!file.exists(files[i])) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1384 stop(paste(files[i],"do not exists!","\n"))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1385 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1386 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1387 imagefile=optArgs$output
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1388 typeVisu=optArgs$typeVisu
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1389 description_data=optArgs$`description-data`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1390 chrName = optArgs$`chromosome-name`[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1391 start=optArgs$start[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1392 end=optArgs$end[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1393 annotation=optArgs$annotation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1394 typeTranscript=optArgs$typeTranscript
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1395 colors=optArgs$`annotation-colors`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1396 shape_data=optArgs$`annotation-shapes`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1397 weight=optArgs$`normalization-coefficient`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1398 classic_plus_color=optArgs$`classic-plus-color`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1399 classic_minus_color=optArgs$`classic-minus-color`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1400 heatmap_max_color=optArgs$`heatmap-max-color`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1401 heatmap_min_color=optArgs$`heatmap-min-color`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1402 heatmap_palette_method=optArgs$`heatmap-palette-method`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1403 lines_samples_colors=optArgs$`lines-samples-colors`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1404 lines_samples_type_line=optArgs$`lines-samples-type-line`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1405 log=optArgs$`scale-log`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1406 inverseStrand=optArgs$inverseStrand
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1407 unstranded=optArgs$unstranded
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1408 symetric= optArgs$`symetric-scale`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1409 annotation_color_by_strand=optArgs$`annotation-color-by-strand`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1410 annotation_placed_by_strand=optArgs$`annotation-placed-by-strand`
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1411 ###################
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1412 ## MAIN
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1413 ###################################################################################
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1414
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1415
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1416 genome_info=scanBamHeader(files[1])[[1]]$targets
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1417 noms_chromosomes = names(genome_info)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1418 longueur_chromosomes = as.integer(genome_info)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1419 nombre_chromosomes = length(noms_chromosomes)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1420
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1421 ##Case no chromosome specified
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1422 if(sum(is.na(chrName))) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1423 chrName = noms_chromosomes[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1424 cat("No chromosome specified, processing chromosome :",chrName,"\n")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1425 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1426
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1427
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1428 ##Case false chromosome name
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1429 if(!(chrName %in% noms_chromosomes)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1430 stop(paste("\"",chrName,"\" is not a proper chromosome name"))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1431 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1432
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1433 if(is.na(end)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1434 end = longueur_chromosomes[chrName==noms_chromosomes]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1435 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1436
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1437 if(start > end) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1438 stop("The start is bigger than the end!")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1439 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1440
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1441 ##Case asked coordinates outside the chromosome
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1442 if(start<0|end>longueur_chromosomes[chrName==noms_chromosomes]) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1443 stop("You are outside the chromosome")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1444 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1445
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1446 if(sum(is.na(weight))>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1447 normalized_data=NULL
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1448 isnormalized=FALSE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1449 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1450 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1451 isnormalized=TRUE
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1452 normalized_data=unlist(strsplit(weight,split=","))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1453 if(length(files)!=length(normalized_data)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1454 stop("Different number of files and weights ")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1455 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1456 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1457 normalized_data=as.numeric(normalized_data)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1458 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1459 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1460
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1461 if(inverseStrand) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1462 libraryType="inverse"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1463 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1464 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1465 libraryType="standard"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1466 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1467 ##Read the bam file and extract the infos
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1468 doit=function(i,libraryType) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1469
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1470 try(readBam_(files[i], libraryType=libraryType, chrName_=chrName, from_=start, to_=end,normalized_=normalized_data[i]))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1471 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1472 data=lapply(1:length(files),doit,libraryType=libraryType)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1473 ctrl=unlist(lapply(data,class))=="try-error"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1474
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1475 if(sum(ctrl)>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1476 for(i in which(ctrl)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1477 cat("Problem with file :",files[i],"\n")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1478 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1479 stop("At least a file has problem")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1480 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1481
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1482 ##Read the GFF file and extract the infos
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1483 if(sum(is.na(annotation))==0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1484 gff=try(readGff(annotation[1],from=start,to=end,chr=chrName),TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1485 ctrl=class(gff)=="try-error"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1486 if(sum(ctrl)>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1487 stop(paste("Problem with Gff file :",annotation,"\n"))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1488 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1489 if(length(annotation)>1) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1490 for(i in 2:length(annotation)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1491 gff1=try(readGff(annotation[i],from=start,to=end,chr=chrName),TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1492 ctrl=class(gff1)=="try-error"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1493 if(sum(ctrl)>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1494 stop(paste("Problem with Gff file :",gff1,"\n"))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1495 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1496 gff=rbind(gff,gff1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1497 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1498 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1499
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1500 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1501 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1502 gff=NA
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1503 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1504
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1505
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1506 if(sum(is.na(description_data))>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1507 description_data = files
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1508 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1509 ##Case of different number of files and description
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1510 if(length(description_data)!=length(files)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1511 stop("Different number of files and description")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1512 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1513
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1514 if(sum(is.na(typeTranscript)>0)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1515 if(sum(is.na(annotation))==0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1516 typeTranscritSplit=unique(gff$Type)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1517 }else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1518 typeTranscritSplit=NA
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1519 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1520 }else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1521 typeTranscritSplit=unlist(strsplit(typeTranscript,split=","))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1522 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1523
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1524 if((sum(is.na(gff))>0)|(sum(is.na(typeTranscritSplit))>0)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1525 annot=NULL
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1526 }else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1527 annot = gff[gff$Type %in% typeTranscritSplit,]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1528 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1529
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1530 ##check the colors
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1531
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1532 if(sum(is.na(colors)>0)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1533 nTypeTranscrit = length(typeTranscritSplit)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1534 if(annotation_color_by_strand) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1535 colorsSplit=c(classic_plus_color,classic_minus_color)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1536 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1537 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1538 colorsSplit=rainbow(nTypeTranscrit+1)[1:nTypeTranscrit]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1539 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1540 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1541 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1542 colorsSplit=unlist(strsplit(colors,split=","))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1543 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1544 for(i in 1:length(colorsSplit)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1545 tmp=unlist(strsplit(colorsSplit[i],split=""))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1546 if(length(tmp)==6|length(tmp)==8) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1547 if(sum(tmp %in% c(0:9,"A","B","C","D","E","F"))==length(tmp)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1548 colorsSplit[i] = paste("#",colorsSplit[i],sep="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1549 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1550 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1551 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1552
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1553 tmp=unlist(strsplit(classic_plus_color,split=""))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1554 if(length(tmp)==6|length(tmp)==8) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1555 if(sum(tmp %in% c(0:9,"A","B","C","D","E","F"))==length(tmp)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1556 classic_plus_color = paste("#",classic_plus_color,sep="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1557 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1558 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1559 tmp=unlist(strsplit(classic_minus_color,split=""))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1560 if(length(tmp)==6|length(tmp)==8) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1561 if(sum(tmp %in% c(0:9,"A","B","C","D","E","F"))==length(tmp)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1562 classic_minus_color = paste("#",classic_minus_color,sep="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1563 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1564 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1565 tmp=unlist(strsplit(heatmap_max_color,split=""))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1566 if(length(tmp)==6|length(tmp)==8) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1567 if(sum(tmp %in% c(0:9,"A","B","C","D","E","F"))==length(tmp)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1568 heatmap_max_color = paste("#",heatmap_max_color,sep="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1569 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1570 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1571 tmp=unlist(strsplit(heatmap_min_color,split=""))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1572 if(length(tmp)==6|length(tmp)==8) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1573 if(sum(tmp %in% c(0:9,"A","B","C","D","E","F"))==length(tmp)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1574 heatmap_min_color = paste("#",heatmap_min_color,sep="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1575 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1576 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1577 if(sum(is.na(lines_samples_colors))>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1578 lines_samples_colors_split=c(1,3,4,2)[((0:(length(files)-1))%%4)+1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1579 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1580 else{
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1581 lines_samples_colors_split=unlist(strsplit(lines_samples_colors,split=","))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1582 for(i in 1:length(lines_samples_colors_split)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1583 tmp=unlist(strsplit(lines_samples_colors_split[i],split=""))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1584 if(length(tmp)==6|length(tmp)==8) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1585 if(sum(tmp %in% c(0:9,"A","B","C","D","E","F"))==length(tmp)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1586 lines_samples_colors_split[i] = paste("#",lines_samples_colors_split[i],sep="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1587 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1588 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1589 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1590 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1591 colorToCheck=c(colorsSplit,classic_plus_color,classic_minus_color,heatmap_max_color,heatmap_min_color,lines_samples_colors_split)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1592 ctrl=sapply(colorToCheck,is.acceptable.color)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1593 if(sum(!ctrl)>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1594 for(i in which(!ctrl)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1595 cat("\"",colorToCheck[i],"\" is not a proper color name.\n",sep="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1596 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1597 stop("At least one color has problem")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1598 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1599 if(annotation_color_by_strand){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1600 if(length(colorsSplit)>2) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1601 stop("You have to specify two and only two colors!")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1602 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1603 }else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1604 if(length(typeTranscritSplit)!=length(colorsSplit)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1605 stop("Please specify the same number of transcript types and colors")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1606 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1607 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1608 ##check the line types
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1609 if(sum(is.na(lines_samples_type_line))>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1610 lines_samples_type_line_split=((0:(length(files)-1))%/%4)+1
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1611 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1612 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1613 lines_samples_type_line_split=unlist(strsplit(lines_samples_type_line,split=","))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1614 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1615 if(typeVisu=="lines") {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1616 ctrl=sapply(lines_samples_type_line_split,function(x) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1617 tmp=suppressWarnings(as.numeric(x))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1618 if(!is.na(tmp)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1619 return((tmp==floor(tmp))&tmp>=1&tmp<=5)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1620 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1621 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1622 return(FALSE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1623 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1624 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1625 )
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1626 if(sum(!ctrl)>0) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1627 for(i in which(!ctrl)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1628 cat("\"",lines_samples_type_line_split[i],"\" is not a proper line style.\n",sep="")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1629 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1630 stop("At least one line style has problem")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1631 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1632 lines_samples_type_line_split=as.integer(lines_samples_type_line_split)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1633 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1634 ##check the shapes
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1635 type_shape=rep(1,length(typeTranscritSplit))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1636
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1637 if(sum(is.na(shape_data)>0)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1638 for( i in 1:length(typeTranscritSplit)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1639 type_shape[i]="box"
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1640 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1641 }else{
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1642 shape=unlist(strsplit(shape_data,split=","))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1643 shape=as.array(shape)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1644 if(length(typeTranscritSplit)!=length(shape)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1645 stop("Please specify the same number of transcript types and shapes")
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1646 }else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1647 for( i in 1:length(typeTranscritSplit)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1648 type_shape[i]= shape[[i]]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1649 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1650 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1651 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1652
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1653
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1654 ##Style for the annotation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1655 label=rep(1,length(typeTranscritSplit))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1656 style=data.frame(Type=c(typeTranscritSplit,typeTranscritSplit),Strand=c(rep("+",length(typeTranscritSplit)),rep("-",length(typeTranscritSplit))),col=NA,shape=NA,label,stringsAsFactors = FALSE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1657 for(i in 1:length(typeTranscritSplit)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1658 style$shape[style$Type==typeTranscritSplit[i]]=type_shape[i]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1659 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1660 if(annotation_color_by_strand) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1661 style$col[style$Strand=="+"]=colorsSplit[1]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1662 style$col[style$Strand=="-"]=colorsSplit[2]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1663 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1664 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1665 for(i in 1:length(typeTranscritSplit)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1666 style$col[style$Type==typeTranscritSplit[i]]=colorsSplit[i]
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1667 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1668 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1669
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1670 ##Main for visualisation
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1671 databychr=extractSignal(data,chrName,from=start,to=end,normalized_=isnormalized)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1672
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1673 {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1674 reverse=list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1675 forward=list()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1676 if(log) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1677 for(i in 1:length(databychr$F)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1678 forward_ = numeric()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1679 tmp=log2(1+databychr$F[[i]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1680 forward_[1:length(tmp)]=tmp
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1681 forward[[i]]=forward_
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1682 reverse_ = numeric()
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1683 tmp=log2(1+databychr$R[[i]])
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1684 reverse_[1:length(tmp)]=tmp
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1685 reverse[[i]]=reverse_
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1686 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1687 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1688 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1689 forward=databychr$F
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1690 reverse=databychr$R
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1691 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1692 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1693
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1694 smoothLength=max(trunc((end-start)/1200),1)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1695 if(unstranded) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1696 for(i in 1:length(databychr$F)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1697 lo=smooth(forward[[i]]+reverse[[i]],L=smoothLength)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1698 forward[[i]]=lo
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1699 los=rep(0,length(lo))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1700 reverse[[i]]=los
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1701 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1702 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1703 else {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1704 for(i in 1:length(databychr$F)){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1705 lo=smooth(forward[[i]],L=smoothLength)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1706 forward[[i]]=lo
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1707 los=smooth(reverse[[i]],L=smoothLength)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1708 reverse[[i]]=los
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1709 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1710 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1711
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1712 group_maximum = rep(1,length(databychr$F))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1713 max_forward = numeric(length(databychr$F))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1714 max_reverse = numeric(length(databychr$F))
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1715 for(i_data in 1:length(databychr$F)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1716 max_forward[i_data]=max(forward[[i_data]],na.rm=TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1717 max_reverse[i_data]=max(reverse[[i_data]],na.rm=TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1718 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1719 for(i_max in unique(group_maximum)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1720 max_forward[group_maximum==i_max]=max(max_forward[group_maximum==i_max],na.rm=TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1721 max_reverse[group_maximum==i_max]=max(max_reverse[group_maximum==i_max],na.rm=TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1722 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1723
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1724 if(symetric){
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1725 for(i_data in 1:length(databychr$F)) {
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1726 max_forward[i_data]=max(max_forward[i_data],max_reverse[i_data],na.rm=TRUE)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1727 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1728 max_reverse=max_forward
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1729 }
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1730
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1731 plotVisu(imagefile,typeVisu=typeVisu,listForward=forward,listReverse=reverse,
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1732 debut_vue=start,fin_vue=end,chr=chrName,annot=annot,repeated=TRUE,
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1733 titres=description_data,name_flags="",style=style,log=log,stranded=!unstranded,
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1734 tops=max_forward,bottoms=max_reverse,
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1735 classic_plus_color=classic_plus_color,classic_minus_color=classic_minus_color,
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1736 heatmap_max_color=heatmap_max_color,heatmap_min_color=heatmap_min_color,heatmap_palette_method=heatmap_palette_method,
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1737 lines_samples_colors=lines_samples_colors_split,lines_samples_type_line=lines_samples_type_line_split,
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1738 smoothLength=1,annotation_color_by_strand=annotation_color_by_strand,annotation_placed_by_strand=annotation_placed_by_strand)
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1739
5feff08a06ea Uploaded
rlegendre
parents:
diff changeset
1740 }