X-Git-Url: https://git.donarmstrong.com/?p=rsem.git;a=blobdiff_plain;f=parseIt.cpp;h=3373ef280979428230b74d77439d61bff3a96d47;hp=55dd954d3d1e2059911987ed5a8521748b16e9a1;hb=d13cdd443afbefff6f7c8c0be818e1edcbc9cb8d;hpb=58f823f5be6dfbe00896fc44ac3aac5e881e9c5c diff --git a/parseIt.cpp b/parseIt.cpp index 55dd954..3373ef2 100644 --- a/parseIt.cpp +++ b/parseIt.cpp @@ -13,8 +13,6 @@ #include "utils.h" #include "GroupInfo.h" - -#include "Transcript.h" #include "Transcripts.h" #include "SingleRead.h" @@ -30,12 +28,11 @@ using namespace std; int read_type; // 0 SingleRead, 1 SingleReadQ, 2 PairedEndRead, 3 PairedEndReadQ -int N[3]; // note, N = N0 + N1 + N2 , but may not be equal to the total number of reads in data -int nHits; // # of hits -int nUnique, nMulti, nIsoMulti; +READ_INT_TYPE N[3]; // note, N = N0 + N1 + N2 , but may not be equal to the total number of reads in data +HIT_INT_TYPE nHits; // # of hits +READ_INT_TYPE nUnique, nMulti, nIsoMulti; char fn_list[STRLEN]; char groupF[STRLEN], tiF[STRLEN]; -char imdName[STRLEN]; char datF[STRLEN], cntF[STRLEN]; GroupInfo gi; @@ -48,8 +45,8 @@ int n_os; // number of ostreams ostream *cat[3][2]; // cat : category 1-dim 0 N0 1 N1 2 N2; 2-dim 0 mate1 1 mate2 char readOutFs[3][2][STRLEN]; -map counter; -map::iterator iter; +map counter; +map::iterator iter; void init(const char* imdName, char alignFType, const char* alignF) { @@ -87,7 +84,7 @@ void parseIt(SamParser *parser) { nUnique = nMulti = nIsoMulti = 0; memset(N, 0, sizeof(N)); - long long cnt = 0; + READ_INT_TYPE cnt = 0; record_val = -2; //indicate no recorded read now while ((val = parser->parseNext(read, hit)) >= 0) { @@ -96,6 +93,9 @@ void parseIt(SamParser *parser) { if (record_val >= 0) { record_read.write(n_os, cat[record_val]); ++N[record_val]; + } + // flush out previous read's hits if the read is alignable reads + if (record_val == 1) { hits.updateRI(); nHits += hits.getNHits(); nMulti += hits.calcNumGeneMultiReads(gi); @@ -121,12 +121,15 @@ void parseIt(SamParser *parser) { } ++cnt; - if (verbose && (cnt % 1000000 == 0)) { printf("Parsed %lld entries\n", cnt); } + if (verbose && (cnt % 1000000 == 0)) { cout<< "Parsed "<< cnt<< " entries"<< endl; } } if (record_val >= 0) { record_read.write(n_os, cat[record_val]); ++N[record_val]; + } + + if (record_val == 1) { hits.updateRI(); nHits += hits.getNHits(); nMulti += hits.calcNumGeneMultiReads(gi); @@ -163,7 +166,7 @@ int main(int argc, char* argv[]) { bool quiet = false; if (argc < 6) { - printf("Usage : rsem-parse-alignments refName sampleName sampleToken alignFType('s' for sam, 'b' for bam) alignF [-t Type] [-l fn_list] [-tag tagName] [-q]\n"); + printf("Usage : rsem-parse-alignments refName imdName statName alignFType('s' for sam, 'b' for bam) alignF [-t Type] [-l fn_list] [-tag tagName] [-q]\n"); exit(-1); } @@ -191,15 +194,14 @@ int main(int argc, char* argv[]) { sprintf(tiF, "%s.ti", argv[1]); transcripts.readFrom(tiF); - sprintf(imdName, "%s.temp/%s", argv[2], argv[3]); - sprintf(datF, "%s.dat", imdName); - sprintf(cntF, "%s.stat/%s.cnt", argv[2], argv[3]); + sprintf(datF, "%s.dat", argv[2]); + sprintf(cntF, "%s.cnt", argv[3]); - init(imdName, argv[4][0], argv[5]); + init(argv[2], argv[4][0], argv[5]); hit_out.open(datF); - string firstLine(59, ' '); + string firstLine(99, ' '); firstLine.append(1, '\n'); //May be dangerous! hit_out<first<<'\t'<second<