X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=qualityscores.cpp;h=ae85d86199c3ce9fbec09aac5525b17db3c4297a;hb=59814dd1de1def2b7d162c27c21190d8f1199cba;hp=fca3d9f4c9cd17947116fbdb9a872bfce863fe47;hpb=662c0b60d65f79f672ab199300b7ee4975233465;p=mothur.git diff --git a/qualityscores.cpp b/qualityscores.cpp index fca3d9f..ae85d86 100644 --- a/qualityscores.cpp +++ b/qualityscores.cpp @@ -46,14 +46,66 @@ QualityScores::QualityScores(ifstream& qFile){ } string qScoreString = m->getline(qFile); + while(qFile.peek() != '>' && qFile.peek() != EOF){ + qScoreString += ' ' + m->getline(qFile); + } istringstream qScoreStringStream(qScoreString); + int count = 0; while(!qScoreStringStream.eof()){ - qScoreStringStream >> score; + if (m->control_pressed) { break; } + qScoreStringStream >> score; m->gobble(qScoreStringStream); + qScores.push_back(score); + count++; } - qScores.pop_back(); + //qScores.pop_back(); + +// string scores = ""; +// +// while(!qFile.eof()){ +// +// qFile >> seqName; +// +// //get name +// if (seqName.length() != 0) { +// seqName = seqName.substr(1); +// while (!qFile.eof()) { +// char c = qFile.get(); +// //gobble junk on line +// if (c == 10 || c == 13){ break; } +// } +// m->gobble(qFile); +// } +// +// //get scores +// while(qFile){ +// char letter=qFile.get(); +// if((letter == '>')){ qFile.putback(letter); break; } +// else if (isprint(letter)) { scores += letter; } +// } +// m->gobble(qFile); +// +// break; +// } +// +// //convert scores string to qScores +// istringstream qScoreStringStream(scores); +// +// int score; +// while(!qScoreStringStream.eof()){ +// +// if (m->control_pressed) { break; } +// +// qScoreStringStream >> score; +// qScores.push_back(score); +// } +// +// qScores.pop_back(); + seqLength = qScores.size(); + //cout << "seqlenght = " << seqLength << '\t' << count << endl; + } catch(exception& e) { m->errorOut(e, "QualityScores", "QualityScores"); @@ -102,6 +154,9 @@ void QualityScores::trimQScores(int start, int end){ try { vector hold; + + //cout << seqName << '\t' << start << '\t' << end << '\t' << qScores.size() << endl; + //for (int i = 0; i < qScores.size(); i++) { cout << qScores[i] << end; } if(end == -1){ hold = vector(qScores.begin()+start, qScores.end()); qScores = hold; @@ -194,7 +249,6 @@ bool QualityScores::stripQualRollingAverage(Sequence& sequence, double qThreshol if(rollingSum / (double)(i+1) < qThreshold){ end = i; -// cout << i+1 << '\t' << seqName << '\t' << rollingSum / (double)(i+1) << endl; break; } } @@ -229,28 +283,34 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int int end = windowSize; int start = 0; - + if(seqLength < windowSize) { return 0; } - while(start < seqLength){ + while((start+windowSize) < seqLength){ double windowSum = 0.0000; for(int i=start;i= seqLength){ end = seqLength - 1; } + + if(end >= seqLength){ end = seqLength; } + } - + if(end == -1){ end = seqLength; } + //failed first window + if (end < windowSize) { return 0; } + sequence.setUnaligned(rawSequence.substr(0,end)); trimQScores(-1, end); @@ -310,6 +370,7 @@ void QualityScores::updateQScoreErrorMap(map >& qualErrorMap, int seqLength = errorSeq.size(); int qIndex = start - 1; + for(int i=0;i