Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}