X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=simulation.cpp;h=97cee6ee610fc1f6f37202b1e5c9715e95cec2e1;hb=1b2999c4407ef8419fb89b66b843b7141caff4da;hp=5b1e7320dec60e69c2cae1cbb64ffa6cc55ccc44;hpb=3b9adf8b8f6287a38d0aac8487cefb1b2cba6aa0;p=rsem.git diff --git a/simulation.cpp b/simulation.cpp index 5b1e732..97cee6e 100644 --- a/simulation.cpp +++ b/simulation.cpp @@ -31,7 +31,7 @@ using namespace std; -int N; +READ_INT_TYPE N; int model_type, M, m; Refs refs; @@ -138,49 +138,37 @@ void simulate(char* modelF, char* resultsF) { fin.close(); for (int i = 1; i <= M; i++) theta[i] = theta[i] / denom * (1.0 - theta[0]); - int tmp2140 = 0; + READ_INT_TYPE resimulation_count = 0; //simulating... model.startSimulation(&sampler, theta); - for (int i = 0; i < N; i++) { - while (!model.simulate(i, read, sid)) { ++tmp2140; }//; + for (READ_INT_TYPE i = 0; i < N; i++) { + while (!model.simulate(i, read, sid)) { ++resimulation_count; } read.write(n_os, os); ++counts[sid]; - if ((i + 1) % 1000000 == 0 && verbose) printf("GEN %d\n", i + 1); + if ((i + 1) % 1000000 == 0 && verbose) cout<<"GEN "<< i + 1<< endl; } model.finishSimulation(); - printf("Total number of resimulation is %d\n", tmp2140); + cout<< "Total number of resimulation is "<< resimulation_count<< endl; } void writeResFiles(char* outFN) { FILE *fo; double denom; - //calculate normalized read fraction - double *nrf = new double[M + 1]; - memset(nrf, 0, sizeof(double) * (M + 1)); - denom = 0.0; - for (int i = 1; i <= M; i++) - if (eel[i] > EPSILON) { - nrf[i] = counts[i]; - denom += nrf[i]; - } - else { - if (counts[i] > EPSILON) { printf("Warning: An isoform which EEL is less than %.6g gets sampled!\n", MINEEL); } - } - assert(denom > 0.0); - for (int i = 1; i <= M; i++) nrf[i] /= denom; - //calculate tau values double *tau = new double[M + 1]; memset(tau, 0, sizeof(double) * (M + 1)); denom = 0.0; for (int i = 1; i <= M; i++) - if (eel[i] > EPSILON) { - tau[i] = nrf[i] / eel[i]; - denom += tau[i]; - } + if (eel[i] > EPSILON) { + tau[i] = counts[i] / eel[i]; + denom += tau[i]; + } + else { + if (counts[i] > EPSILON) { printf("Warning: An isoform which EEL is less than %.6g gets sampled!\n", MINEEL); } + } assert(denom > 0.0); for (int i = 1; i <= M; i++) tau[i] /= denom; @@ -189,7 +177,7 @@ void writeResFiles(char* outFN) { fo = fopen(isoResF, "w"); for (int i = 1; i <= M; i++) { const Transcript& transcript = transcripts.getTranscriptAt(i); - fprintf(fo, "%s\t%.2f\t%.15g\t%.15g", transcript.getTranscriptID().c_str(), counts[i], nrf[i], tau[i]); + fprintf(fo, "%s\t%.2f\t%.15g", transcript.getTranscriptID().c_str(), counts[i], tau[i]); if (transcript.getLeft() != "") { fprintf(fo, "\t%s", transcript.getLeft().c_str()); } fprintf(fo, "\n"); @@ -200,22 +188,20 @@ void writeResFiles(char* outFN) { sprintf(geneResF, "%s.sim.genes.results", outFN); fo = fopen(geneResF, "w"); for (int i = 0; i < m; i++) { - double sum_c = 0.0, sum_nrf = 0.0, sum_tau = 0.0; + double sum_c = 0.0, sum_tau = 0.0; int b = gi.spAt(i), e = gi.spAt(i + 1); for (int j = b; j < e; j++) { sum_c += counts[j]; - sum_nrf += nrf[j]; sum_tau += tau[j]; } const string& gene_id = transcripts.getTranscriptAt(b).getGeneID(); - fprintf(fo, "%s\t%.2f\t%.15g\t%.15g\t", gene_id.c_str(), sum_c, sum_nrf, sum_tau); + fprintf(fo, "%s\t%.2f\t%.15g\t", gene_id.c_str(), sum_c, sum_tau); for (int j = b; j < e; j++) { fprintf(fo, "%s%c", transcripts.getTranscriptAt(j).getTranscriptID().c_str(), (j < e - 1 ? ',' : '\n')); } } fclose(fo); - delete[] nrf; delete[] tau; } @@ -251,7 +237,7 @@ int main(int argc, char* argv[]) { //read model type from modelF fi = fopen(argv[2], "r"); if (fi == NULL) { fprintf(stderr, "Cannot open %s! It may not exist.\n", argv[2]); exit(-1); } - fscanf(fi, "%d", &model_type); + assert(fscanf(fi, "%d", &model_type) == 1); fclose(fi); theta = new double[M + 1];