Exemplo n.º 1
0
    Matrix* matrixU = newMatrix(3, 3, (double []){
        2.0, 1.0, -1.0,
        0.0, 3.0, 2.0,
        0.0, 0.0, -3.0
    });

    /*
    Matrix* matrixY = newMatrix(3, 1, (double []){
        2.0,
        3.0,
        -1.0,
    });*/

    Matrix* matrixY2 = newMatrix(3, 1, (double []){
        2.0,
        -3.0,
        9.0,
    });

    //Matrix* c = newFS(matrixL, matrixY);
    Matrix* c = newBS(matrixU, matrixY2);
    Matrix_showFlat(c);

    //deleteMatrix(matrixL);
    deleteMatrix(matrixU);
    //deleteMatrix(matrixY);
    deleteMatrix(matrixY2);
    deleteMatrix(c);
}
Exemplo n.º 2
0
void reads::detectBS()
{
	param.fragLengthMean += param.smoothArm; // add the soomth arm to the average length
	//param.fragLengthVar  = param.fragLengthMean * param.fragLengthMean / 8.0;
	param.fragLengthVar  = param.fragLengthMean * param.fragLengthMean / 10.0;
	//param.fragLengthVar  = param.fragLengthMean * 20.0;
	param.lmLength = (int) (0.8 * param.fragLengthMean);
	param.lmArm = param.lmLength / 2;
	vector<int> f_maxPos, r_maxPos;
	vector<double> f_max, r_max, tmp, tmp2;
	//double R2_theshold = param.R2_cutoff;
	int i, j;
	int totalRC = readsClusterVec.size();
	//int arm = param.smoothArm + param.lmArm;
  int arm;
  if (param.smoothArm > 0) 
	  arm = param.smoothArm + param.lmArm + 5; //param.motifWidth / 4; // add the half motif width for shift the binding site a litter farther from the signal
  else
	  arm = 3 * param.smoothBandwidth + param.lmArm + 5; //param.motifWidth / 4;
	vector<readsCluster> sub_rcv;
	char strand;
	double pval;
	double foldChange;
	double qval1, qval2;
	int chrIdx;
	int pos = 0;
	double R2 = 0;
	double slope = 0;

	if (totalRC == 0)
		return;

	// for linear model
	lm *lm_signal;
	lm_signal = new lm();
	lm_signal->generateX();

	sort(readsClusterVec.begin(), readsClusterVec.end(), mem_fun_ref(&readsCluster::sortByPos));
	for (i=0; i<totalRC; i++)
	{
		strand = readsClusterVec[i].r_strand;
		chrIdx = readsClusterVec[i].r_chrIdx;
		pval = readsClusterVec[i].pval;
		foldChange = readsClusterVec[i].foldChange;
		qval1 = readsClusterVec[i].qval1;
		qval2 = readsClusterVec[i].qval2;
		if (strand == 'f' || strand == '+')
		{

			if (lm_signal->slipSolve(readsClusterVec[i].r_vec, 'f'))
			{
        logVec(lm_signal->slopeVec, tmp);
				multiVec(tmp, lm_signal->R2Vec, tmp2);

        //printf("fwd R2 slope log_slope R2*log_slope vecs:\n");
        //printVec(lm_signal->R2Vec);
        //printVec(lm_signal->slopeVec);
        //printVec(tmp);
        //printVec(tmp2);

				getTopN(tmp2, lm_signal->slopeVec, f_max, f_maxPos, 2, param.motifWidth);
				//getTopN(lm_signal->R2Vec, lm_signal->slopeVec, f_max, f_maxPos, 2, param.motifWidth);
				for (j=0; j<(int)f_maxPos.size(); j++)
				{
					pos = readsClusterVec[i].r_end + arm - f_maxPos[j];
					R2 = lm_signal->R2Vec[f_maxPos[j]];
					slope = lm_signal->slopeVec[f_maxPos[j]];

		      bingdingSite newBS(chrIdx, pos, R2, slope, strand, pval, foldChange, qval1, qval2);
		      BSVec.push_back(newBS);
		      if (slope > maxSlope)
			      maxSlope = slope;
		      if (R2 > maxR2)
			      maxR2 = R2;
		      if (foldChange > maxFC)
			      maxFC = foldChange;

					/*if (lm_signal->R2Vec[f_maxPos[j]] > R2_theshold)
					{
						bingdingSite newBS(readsClusterVec[i].r_chrIdx, readsClusterVec[i].r_end + arm - f_maxPos[j], lm_signal->R2Vec[f_maxPos[j]], lm_signal->slopeVec[f_maxPos[j]], '+');
						//printf("%d\t%d\t%d\t%d\t%f\t%f\t+\n",readsClusterVec[i].r_end, arm, f_maxPos[j], readsClusterVec[i].r_end + arm - f_maxPos[j], lm_signal->R2Vec[f_maxPos[j]], lm_signal->slopeVec[f_maxPos[j]]);
						BSVec.push_back(newBS);
						if (lm_signal->slopeVec[f_maxPos[j]] > maxSlope)
							maxSlope = lm_signal->slopeVec[f_maxPos[j]];
					}*/
				}
			}
		}
		if (strand == 'r' || strand == '-')
		{
			if (lm_signal->slipSolve(readsClusterVec[i].r_vec, 'r'))
			{
        logVec(lm_signal->slopeVec, tmp);
				multiVec(tmp, lm_signal->R2Vec, tmp2);

        //printf("rvs R2 slope log_slope R2*log_slope vecs:\n");
        //printVec(lm_signal->R2Vec);
        //printVec(lm_signal->slopeVec);
        //printVec(tmp);
        //printVec(tmp2);

				getTopN(tmp2, lm_signal->slopeVec, r_max, r_maxPos, 2, param.motifWidth);
				//getTopN(lm_signal->R2Vec, lm_signal->slopeVec, r_max, r_maxPos, 2, param.motifWidth);
				for (j=0; j<(int)r_maxPos.size(); j++)
				{
					pos = readsClusterVec[i].r_start - arm + r_maxPos[j];
					R2 = lm_signal->R2Vec[r_maxPos[j]];
					slope = lm_signal->slopeVec[r_maxPos[j]];

		      bingdingSite newBS(chrIdx, pos, R2, slope, strand, pval, foldChange, qval1, qval2);
		      BSVec.push_back(newBS);
		      if (slope > maxSlope)
			      maxSlope = slope;
		      if (R2 > maxR2)
			      maxR2 = R2;
		      if (foldChange > maxFC)
			      maxFC = foldChange;

					/*if (lm_signal->R2Vec[r_maxPos[j]] > R2_theshold)
					{
						bingdingSite newBS(readsClusterVec[i].r_chrIdx, readsClusterVec[i].r_start - arm + r_maxPos[j], lm_signal->R2Vec[r_maxPos[j]], lm_signal->slopeVec[r_maxPos[j]], '-');
						//printf("%d\t%d\t%d\t%d\t%f\t%f\t-\n",readsClusterVec[i].r_start, arm, r_maxPos[j], readsClusterVec[i].r_start - arm + r_maxPos[j], lm_signal->R2Vec[r_maxPos[j]], lm_signal->slopeVec[r_maxPos[j]]);
						BSVec.push_back(newBS);
						if (lm_signal->slopeVec[r_maxPos[j]] > maxSlope)
							maxSlope = lm_signal->slopeVec[r_maxPos[j]];
					}*/
				}
			}
		}
		//chrIdx(chrIdx), pos(pos), R2(R2), slope(slope), strand(strand), pval(pval), foldChange(foldChange),qval(qval)

		/*if (param.VERBOSE && i % 100 == 0)
			printf("  %.2f%% done...\r", 100.0 * (double) i / (double) totalRC);*/
	}
}