X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=simulation.cpp;h=e0c9cec83c1891ee9e5ec099602c94fe024ef9d3;hb=cb94fd597b180aa7cb01ae84c9d1025201b98d8e;hp=2511f33693ce42a3751d07542dca2ce8139a0f54;hpb=58f823f5be6dfbe00896fc44ac3aac5e881e9c5c;p=rsem.git diff --git a/simulation.cpp b/simulation.cpp index 2511f33..e0c9cec 100644 --- a/simulation.cpp +++ b/simulation.cpp @@ -127,7 +127,7 @@ void simulate(char* modelF, char* resultsF) { for (int i = 1; i <= M; i++) { getline(fin, line); size_t pos = 0; - for (int j = 0; j < 3; j++) pos = line.find_first_of('\t', pos) + 1; + for (int j = 0; j < 2; j++) pos = line.find_first_of('\t', pos) + 1; size_t pos2 = line.find_first_of('\t', pos); if (pos2 == string::npos) pos2 = line.length(); tau = atof(line.substr(pos, pos2 - pos).c_str()); @@ -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; + int resimulation_count = 0; //simulating... model.startSimulation(&sampler, theta); for (int i = 0; i < N; i++) { - while (!model.simulate(i, read, sid)) { ++tmp2140; }//; + 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); } model.finishSimulation(); - printf("Total number of resimulation is %d\n", tmp2140); + printf("Total number of resimulation is %d\n", resimulation_count); } 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];