void ScaledAray::write(){ char bf[1024]; sprintf(bf,"%s.wig",outFile); FILE *outWigFile=xopen(bf,"wt"); verb("\nwrite WIG correlations"); ScoredRange pos, pos0; min=1.e+128; max=-1.e+128; for(int i=0; i<profileLength; i++){ if(min > array[i]) min = array[i]; if(max < array[i]) max = array[i]; } double lmax=-1000; fprintf(outWigFile,"track type=wiggle_0 "); char *s=strrchr(outFile,'/'); if(s==0) s=outFile; else s++; fprintf(outWigFile,"description=\"correlation: %s\" \n",s); fprintf(outWigFile,"#Param "); if((outWIG & WIG_BASE) == WIG_BASE ) fprintf(outWigFile,"BASE " ); if((outWIG & WIG_CENTER)== WIG_CENTER) fprintf(outWigFile,"CENTER "); if((outWIG & WIG_SUM) == WIG_SUM ) fprintf(outWigFile,"SUM " ); if((outWIG & WIG_MULT) == WIG_MULT ) fprintf(outWigFile,"MULT " ); fprintf(outWigFile,"\n"); fprintf(outWigFile,"#Scale data: min=%.4f; max=%.4f; LOG scale: x=1000*log(a*array[i]+b); a=(e-1)/(max-min); b=1-min*a\n", min,max); fprintf(outWigFile,"#Source statstics: av1=%.4f; av2=%.4f; sd1=%.4f; sd2=%.4f\n", bTrack1.av0,bTrack2.av0, bTrack1.sd0,bTrack2.sd0); int kmin=1000, kmax=0; double a=(2.718281828-1)/(max-min), b=1-min*a; for(int i=0; i<profileLength; i++){ double z=a*array[i]+b; // double z=(array[i]+max-2*min)/(max-min); if(lmax < z) lmax=z; int k=(int)(log(z)*1000); if(kmin > k) kmin=k; if(kmax < k) kmax=k; //if(k > 998) deb("maxPos=%i k=%i",i,kmax); double v1=bTrack1.getValue(i,0), v2=bTrack2.getValue(i,0); if(k>=outThreshold && v1*v2!=0){ filePos2Pos(i,&pos,stepSize); if(pos.chrom != pos0.chrom || pos.beg-pos0.beg > stepSize){ fprintf(outWigFile,"fixedStep chrom=%s start=%li step=%i span=%i\n", pos.chrom,pos.beg,stepSize,stepSize); } pos0.chrom=pos.chrom; pos0.beg=pos.beg; fprintf(outWigFile,"%i\n",k); //int bb1=bTrack1.bytes[i], bb2=bTrack2.bytes[i]; //double cc=(v1-bTrack1.av0)*(v2-bTrack2.av0)/bTrack1.sd0/bTrack2.sd0; // fprintf(outWigFile,"%i\t%.3f\t%.4f\tv1=%.2f\tv2=%.2f\t%i\t%i\n",k,array[i],cc,v1,v2,bb1,bb2); //if(cc>10000){ // deb("%i\t%.3f\t%.4f\tv1=%.2f\tv2=%.2f\t%i\t%i",k,array[i],cc,v1,v2,bb1,bb2); //} } } //deb("\nkmin=%i kmax=%i lmax=%f",kmin, kmax,lmax); fclose(outWigFile); }
void writeBedGr(FILE* f, FloatArray *array, float lTreshold, float rTreshold){ ScoredRange pos, pos0; if(lTreshold == NA) lTreshold= 1.e+8; if(rTreshold == NA) rTreshold=-1.e+8; for(int i=0; i<profileLength; i++){ if(i%1000000 ==0) {verb("%5.1f%%\r",1.*i/profileLength*100);} float x=array->get(i); if(x <= rTreshold && x >= lTreshold) x=NA; filePos2Pos(i,&pos,binSize); pos.score=x; // filePos2Pos(i,&pos,binSize); pos.score=x; if(pos.chrom == pos0.chrom && abs(pos.score - pos0.score) < 0.000001){ pos0.end=pos.end; continue; } if(pos0.chrom !=0){ pos0.printBGraph(f); } pos0.beg=pos.beg; pos0.end=pos.end; pos0.chrom=pos.chrom; pos0.score=pos.score; } if(pos0.chrom !=0) pos0.printBGraph(f); }