mapTrRegion2Genome=function(ts,te,trid){ ex=exons(txdb, filter=list(tx_name = trid )); r=ranges(ex); s=start(r); e=end(r); st=as.logical(strand(ex)[1]=="-"); ne=length(ex); sok=0; if (st) { for (j in (ne):1) { start = s[j] end = e[j]; width = end - start + 1; if (ts <= width) { if (sok==0){ mts=end-ts; mtsa=start; sok=1;sei=j; } } else{ ts = ts- width; } if (te <= width) break; te=te-width; } return(c(st,end-te+1,mts+1,mtsa,end,sei,j)); } else { for (j in 1:ne) { start = s[j] end = e[j]; width = end - start + 1; # print (c(j,ts,te,start,end,sok)) if (ts <= width) { if (sok==0){ mts=start+ts; mtsa=end; sok=1;sei=j; } } else{ ts = ts - width; } if (te <= width) break; te=te-width; } return(c(st,start+te-1,mts-1,mtsa,start,sei,j)); } } mapAllTrRegions2Genome=function(gr_ranges){ all_s=NULL; all_e=NULL; all_st=NULL; all_id=NULL; all_i=NULL; ids=as.vector(gr_ranges@seqnames) for (i in 1:length(ids)){ m=mapTrRegion2Genome(start(gr_ranges)[i],end(gr_ranges)[i],ids[i]); d=m[6]-m[7];d=d*d; if (m[1]==0){st="-";}else{st="+";} all_id=append(all_id,ids[i]); all_st=append(all_st,st); all_i=append(all_i,i); if (d==0){ all_s=append(all_s,m[3]); all_e=append(all_e,m[2]); } else { if (d==1){#span 1 intron all_s=append(all_s,m[3]); all_e=append(all_e,m[4]); all_id=append(all_id,ids[i]); all_s=append(all_s,m[5]); all_e=append(all_e,m[2]); all_st=append(all_st,st); all_i=append(all_i,i); }else{ print (c("Err cluster spans 2 introns",i)) } } } return(cbind(all_id,all_s,all_e,all_st,all_i)) }