function i2reg(i){ x="other"; if (i==-1){x="NA";} if (i==1){x="3utr";} if (i==2){x="cds";} if (i==3){x="5utr";} if (i==4){x="ncRNA";} if (i==5){x="intron";} if (i==6){x="exon";} return x; } BEGIN{FS=OFS="\t"; ncateg=7; f[1]=f3;f[3]=f5;f[2]=fc;f[5]=fi;f[4]=fn;f[6]=fe; for (i=1;i>"/dev/stderr"} if (a[1]==bt[1]){ bc[c,s,e,st,a[2]]=bt[1]; #store tr.id of best tr } # k=c SUBSEP s SUBSEP e SUBSEP st SUBSEP a[2] SUBSEP a[3]; nc[c,s,e,st,a[2]]++; #hash key is: chr start end strand gene_name biotype cl[c,s,e,st,a[2],i]=$4; cls[c,s,e,st,a[2],i]=$5; ncr[c,s,e,st,a[2],i]++; cbt[c,s,e,st,a[2],i]=a[3]; if (length(a[2])==0) {print "ERR no biotype in "c,s,e,st,a[2],i"|"ncr[c,s,e,st,a[2],i]} # print c,s,e,st,a[2],i"|"ncr[c,s,e,st,a[2],i]"|a" } } close(f[i]); } for (k in nc){ split(k,a,SUBSEP); if (length(a[2])>0) { m=-1;m2=-1;mi2=-1;mi=-1; for (i=1;i0){ if (x>m){ m2=m;mi2=mi;m=x;mi=i;# print "A m"m" m2"m2; } else{ if (x>m2){m2=x;mi2=i;# print "B m2"m2; } } } } if (m<0){ mi=ncateg-1; m=0+ncr[k,mi]; #get categ with max #clusters for location m2=m2;mi2=mi; } if (m==m2){ if (mi2>"/dev/stderr"; # mi=ncateg; # oco1[mi,a[6]]++; # oco2[mi2,a[6]]++; } a[6]=cbt[k,mi]; oc1[a[6]]=mi; #biotype oc1c[a[6]]=m; oc2[a[6]]=mi2; oc2c[a[6]]=m2; # split(k,a,SUBSEP); oc[a[6],mi]++; split(cl[k,mi],b,"_"); ri=++nres[k]; res[k,ri]=a[1]"\t"a[2]"\t"a[3]"\t"cl[k,mi]"\t"cls[k,mi]"\t"a[4]"\t"a[5]"\t"a[6]"\t"i2reg(mi)"\t"m"\t"i2reg(mi2)"\t"m2; resbc[k,ri]=bc[k]; resb[k,ri]=b[1]; if (bc[k]==b[1]){ print a[1],a[2],a[3],cl[k,mi],cls[k,mi],a[4],a[5],a[6],i2reg(mi),m,i2reg(mi2),m2 } }else{ print "DROPPED",a[1],a[2],a[3],cl[k,mi],cls[k,mi],a[4],a[5],a[6] >>"/dev/stderr" } } for (k in nres){ nr=nres[k]; if (nr==1){ # print res[k,1]; }else{ for (i=1;i<=nr;i++){ if (resbc[k,i]==resb[k,i]){ # print res[k,i]; break; } } } } for (i in oc){ split (i,a,SUBSEP) if (a[2]==ncateg){ # print oc[i]" "i2reg(a[2])" "a[1]" 1st max: "i2reg(1)" "oco1[1,a[1]]" "i2reg(2)" "oco1[2,a[1]]" "i2reg(3)" "0+oco1[3,a[1]]" 2nd max: "i2reg(1)" "0+oco2[1,a[1]]" "i2reg(2)" "0+oco2[2,a[1]]" "i2reg(3)" "0+oco2[3,a[1]] >>"/dev/stderr"; }else{ print oc[i]" "i2reg(a[2])" "a[1] >>"/dev/stderr"; } } exit 0; }{ }