annotate lib/tarean/logo_methods.R @ 0:f6ebec6e235e draft

Uploaded
author petrn
date Thu, 19 Dec 2019 13:46:43 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
1 #! /usr/bin/env Rscript
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
2
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
3 ## FUNCTIONS:
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
4 letterA <- function(x.pos,y.pos,ht,wt,id=NULL){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
5
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
6 x <- c(0,4,6,10,8,6.8,3.2,2,0,3.6,5,6.4,3.6)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
7 y <- c(0,10,10,0,0,3,3,0,0,4,7.5,4,4)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
8 x <- 0.1*x
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
9 y <- 0.1*y
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
10
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
11 x <- x.pos + wt*x
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
12 y <- y.pos + ht*y
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
13
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
14 if (is.null(id)){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
15 id <- c(rep(1,9),rep(2,4))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
16 }else{
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
17 id <- c(rep(id,9),rep(id+1,4))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
18 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
19
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
20 fill <- c("green","white")
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
21
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
22 list(x=x,y=y,id=id,fill=fill)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
23 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
24
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
25 ## T
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
26 letterT <- function(x.pos,y.pos,ht,wt,id=NULL){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
27
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
28 x <- c(0,10,10,6,6,4,4,0)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
29 y <- c(10,10,9,9,0,0,9,9)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
30 x <- 0.1*x
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
31 y <- 0.1*y
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
32
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
33 x <- x.pos + wt*x
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
34 y <- y.pos + ht*y
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
35
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
36 if (is.null(id)){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
37 id <- rep(1,8)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
38 }else{
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
39 id <- rep(id,8)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
40 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
41
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
42 fill <- "red"
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
43
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
44 list(x=x,y=y,id=id,fill=fill)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
45 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
46
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
47 ## C
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
48 letterC <- function(x.pos,y.pos,ht,wt,id=NULL){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
49 angle1 <- seq(0.3+pi/2,pi,length=100)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
50 angle2 <- seq(pi,1.5*pi,length=100)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
51 x.l1 <- 0.5 + 0.5*sin(angle1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
52 y.l1 <- 0.5 + 0.5*cos(angle1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
53 x.l2 <- 0.5 + 0.5*sin(angle2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
54 y.l2 <- 0.5 + 0.5*cos(angle2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
55
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
56 x.l <- c(x.l1,x.l2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
57 y.l <- c(y.l1,y.l2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
58
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
59 x <- c(x.l,rev(x.l))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
60 y <- c(y.l,1-rev(y.l))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
61
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
62 x.i1 <- 0.5 +0.35*sin(angle1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
63 y.i1 <- 0.5 +0.35*cos(angle1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
64 x.i1 <- x.i1[y.i1<=max(y.l1)]
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
65 y.i1 <- y.i1[y.i1<=max(y.l1)]
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
66 y.i1[1] <- max(y.l1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
67
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
68 x.i2 <- 0.5 +0.35*sin(angle2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
69 y.i2 <- 0.5 +0.35*cos(angle2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
70
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
71 x.i <- c(x.i1,x.i2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
72 y.i <- c(y.i1,y.i2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
73
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
74 x1 <- c(x.i,rev(x.i))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
75 y1 <- c(y.i,1-rev(y.i))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
76
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
77 x <- c(x,rev(x1))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
78 y <- c(y,rev(y1))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
79
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
80 x <- x.pos + wt*x
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
81 y <- y.pos + ht*y
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
82
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
83 if (is.null(id)){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
84 id <- rep(1,length(x))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
85 }else{
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
86 id <- rep(id,length(x))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
87 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
88
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
89 fill <- "blue"
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
90
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
91 list(x=x,y=y,id=id,fill=fill)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
92 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
93
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
94
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
95 ## G
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
96 letterG <- function(x.pos,y.pos,ht,wt,id=NULL){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
97 angle1 <- seq(0.3+pi/2,pi,length=100)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
98 angle2 <- seq(pi,1.5*pi,length=100)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
99 x.l1 <- 0.5 + 0.5*sin(angle1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
100 y.l1 <- 0.5 + 0.5*cos(angle1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
101 x.l2 <- 0.5 + 0.5*sin(angle2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
102 y.l2 <- 0.5 + 0.5*cos(angle2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
103
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
104 x.l <- c(x.l1,x.l2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
105 y.l <- c(y.l1,y.l2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
106
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
107 x <- c(x.l,rev(x.l))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
108 y <- c(y.l,1-rev(y.l))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
109
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
110 x.i1 <- 0.5 +0.35*sin(angle1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
111 y.i1 <- 0.5 +0.35*cos(angle1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
112 x.i1 <- x.i1[y.i1<=max(y.l1)]
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
113 y.i1 <- y.i1[y.i1<=max(y.l1)]
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
114 y.i1[1] <- max(y.l1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
115
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
116 x.i2 <- 0.5 +0.35*sin(angle2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
117 y.i2 <- 0.5 +0.35*cos(angle2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
118
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
119 x.i <- c(x.i1,x.i2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
120 y.i <- c(y.i1,y.i2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
121
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
122 x1 <- c(x.i,rev(x.i))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
123 y1 <- c(y.i,1-rev(y.i))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
124
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
125 x <- c(x,rev(x1))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
126 y <- c(y,rev(y1))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
127
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
128 h1 <- max(y.l1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
129 r1 <- max(x.l1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
130
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
131 h1 <- 0.4
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
132 x.add <- c(r1,0.5,0.5,r1-0.2,r1-0.2,r1,r1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
133 y.add <- c(h1,h1,h1-0.1,h1-0.1,0,0,h1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
134
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
135
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
136
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
137 if (is.null(id)){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
138 id <- c(rep(1,length(x)),rep(2,length(x.add)))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
139 }else{
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
140 id <- c(rep(id,length(x)),rep(id+1,length(x.add)))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
141 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
142
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
143 x <- c(rev(x),x.add)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
144 y <- c(rev(y),y.add)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
145
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
146 x <- x.pos + wt*x
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
147 y <- y.pos + ht*y
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
148
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
149
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
150 fill <- c("orange","orange")
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
151
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
152 list(x=x,y=y,id=id,fill=fill)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
153
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
154 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
155
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
156 Letter <- function(which,x.pos,y.pos,ht,wt){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
157
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
158 if (which == "A"){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
159 letter <- letterA(x.pos,y.pos,ht,wt)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
160 }else if (which == "C"){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
161 letter <- letterC(x.pos,y.pos,ht,wt)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
162 }else if (which == "G"){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
163 letter <- letterG(x.pos,y.pos,ht,wt)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
164 }else if (which == "T"){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
165 letter <- letterT(x.pos,y.pos,ht,wt)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
166 }else{
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
167 stop("which must be one of A,C,G,T")
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
168 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
169
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
170 letter
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
171 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
172
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
173
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
174
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
175
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
176 plot_multiline_logo = function(cons.logo,read=NULL, W=50, setpar=TRUE, gaps = NULL){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
177 ## logo - base order - A C G T
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
178 if (ncol(cons.logo)==5){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
179 gaps_prob = cons.logo[,5]
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
180 }else{
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
181 gaps_prob = NULL
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
182 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
183 ps=10 # Point_Size
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
184 tm=4
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
185 pwm=as.matrix(cons.logo[,1:4])
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
186 N=nrow(pwm)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
187 Nori=N
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
188 if (N<W){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
189 W=N
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
190 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
191 s1=seq(1,N,by=W)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
192 s2=seq(W,N,by=W)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
193 if (length(s2)<length(s1)){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
194 pwm=rbind(pwm,matrix(0,nrow=W*length(s1)-N,ncol=4,dimnames=list(NULL,c('A','C','G','T'))))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
195 if (!is.null(read)){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
196 pwm_read = rbind(read,matrix(0,nrow=W*length(s1)-N,ncol=4,dimnames=list(NULL,c('A','C','G','T'))))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
197 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
198 N=nrow(pwm)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
199 s2=seq(W,N,by=W)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
200 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
201 if (setpar){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
202 par(mfrow = c(ceiling(N/W),1), mar=c(1,4,1,0))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
203 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
204 for (i in seq_along(s1)){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
205 if (!is.null(read)){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
206 plot.logo(pwm_read[s1[i]:s2[i],],maxh=2)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
207 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
208 plot.logo(pwm[s1[i]:s2[i],],maxh=max(rowSums(cons.logo)))
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
209 if(!is.null(gaps)){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
210 ## transparent rectangles
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
211 rect((gaps[ ,'start']-s1[i]+1),0, (gaps[,'end']-s1[i]+2), max(pwm), col="#00000005")
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
212
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
213 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
214 if(!is.null(gaps_prob)){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
215 rect(seq_along(s1[i]:s2[i]),
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
216 max(rowSums(cons.logo)),
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
217 seq_along(s1[i]:s2[i])+1,
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
218 max(rowSums(cons.logo)) - gaps_prob[s1[i]:s2[i]],
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
219 col="#00000030")
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
220
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
221
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
222 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
223 ticks=intersect(intersect(pretty(pretty(s1[i]:s2[i])+1),s1[i]:s2[i]),1:Nori)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
224 axis(1,at=ticks+1.5-s1[i],label=ticks,tick=FALSE)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
225 y=pretty(c(0,max(pwm)),n=tm)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
226 axis(2,at=y,label=y,las=2,cex.axis=.7)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
227 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
228 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
229
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
230 plot.logo=function(pwm,maxh=NULL){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
231 acgt=c("A","C","G","T")
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
232 pwm = pwm[,acgt]
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
233 nbp=dim(pwm)[1]
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
234 if (is.null(maxh)) {maxh=max(rowSums(pwm))}
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
235
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
236 plot(0,0,xlim=c(0,nbp),ylim=c(0,maxh),type="n",axes=F,xlab="",ylab="")
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
237 for ( i in 1:nbp){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
238 S=order(pwm[i,])
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
239 hgts=pwm[i,S]
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
240 nts=acgt[S]
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
241 ypos=c(0,cumsum(hgts)[1:3])
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
242 for (j in 1:4){
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
243 if (hgts[j]==0) next
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
244 L=Letter(which=nts[j],x.pos=i,y.pos=ypos[j],ht=hgts[j],wt=1)
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
245 Id=L$id==1
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
246 polygon(L$x[Id],L$y[Id],lty=0,col=L$fill[1])
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
247 if (sum(L$id==2)>0) {
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
248 polygon(L$x[!Id],L$y[!Id],lty=0,col=L$fill[2])
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
249 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
250 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
251 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
252 }
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
253
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
254
f6ebec6e235e Uploaded
petrn
parents:
diff changeset
255