X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=qualityscores.cpp;h=566b44c6bad55402fae1374aab0212547befe7cc;hb=ce8794490ab1d83adcdb2b92e0302a1e43e17adf;hp=719bf3dc6c44cd3880ebc8b1c4d3dc352a448ee1;hpb=e840ba0e90a2b2be39e0910e4be23dde6a14cbac;p=mothur.git diff --git a/qualityscores.cpp b/qualityscores.cpp index 719bf3d..566b44c 100644 --- a/qualityscores.cpp +++ b/qualityscores.cpp @@ -31,12 +31,12 @@ QualityScores::QualityScores(ifstream& qFile){ m = MothurOut::getInstance(); - /*seqName = ""; + seqName = ""; int score; qFile >> seqName; m->getline(qFile); - + //cout << seqName << endl; if (seqName == "") { m->mothurOut("Error reading quality file, name blank at position, " + toString(qFile.tellg())); m->mothurOutEndLine(); @@ -44,63 +44,77 @@ QualityScores::QualityScores(ifstream& qFile){ else{ seqName = seqName.substr(1); } - cout << seqName << endl; + string qScoreString = m->getline(qFile); - cout << qScoreString << endl; + //cout << qScoreString << endl; + while(qFile.peek() != '>' && qFile.peek() != EOF){ + if (m->control_pressed) { break; } + string temp = m->getline(qFile); + //cout << temp << endl; + qScoreString += ' ' + temp; + } + //cout << "done reading " << endl; istringstream qScoreStringStream(qScoreString); int count = 0; while(!qScoreStringStream.eof()){ if (m->control_pressed) { break; } - qScoreStringStream >> score; - qScores.push_back(score); - cout << score << '\t' << count << endl; - count++; - } - 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()){ + string temp; + qScoreStringStream >> temp; m->gobble(qScoreStringStream); - if (m->control_pressed) { break; } + //check temp to make sure its a number + if (!m->isContainingOnlyDigits(temp)) { m->mothurOut("[ERROR]: In sequence " + seqName + "'s quality scores, expected a number and got " + temp + ", setting score to 0."); m->mothurOutEndLine(); temp = "0"; } + convert(temp, score); - qScoreStringStream >> score; + //cout << count << '\t' << score << endl; 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 << "seqlength = " << seqLength << '\t' << count << endl; } catch(exception& e) { @@ -150,6 +164,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; @@ -276,35 +293,41 @@ 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); return 1; } catch(exception& e) { - m->errorOut(e, "QualityScores", "flipQScores"); + m->errorOut(e, "QualityScores", "stripQualWindowAverage"); exit(1); } @@ -363,10 +386,11 @@ void QualityScores::updateQScoreErrorMap(map >& qualErrorMap, if(errorSeq[i] == 'm') { qualErrorMap['m'][qScores[qIndex]] += weight; } else if(errorSeq[i] == 's') { qualErrorMap['s'][qScores[qIndex]] += weight; } else if(errorSeq[i] == 'i') { qualErrorMap['i'][qScores[qIndex]] += weight; } - else if(errorSeq[i] == 'a') { qualErrorMap['a'][qScores[qIndex]] += weight; } + else if(errorSeq[i] == 'a') { qualErrorMap['a'][qScores[qIndex]] += weight; /*if(qScores[qIndex] != 0){ cout << qIndex << '\t'; }*/ } else if(errorSeq[i] == 'd') { /* there are no qScores for deletions */ } if(errorSeq[i] != 'd') { qIndex++; } + if(qIndex > stop){ break; } } }