X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=qualityscores.cpp;h=566b44c6bad55402fae1374aab0212547befe7cc;hb=49d2b7459c5027557564b21e9487dadafbbbdc96;hp=520d0bb56eae9c66a936311ca71aa5330bf29aa1;hpb=220dc345e493cddc569521111ce32ac4d965ab7f;p=mothur.git diff --git a/qualityscores.cpp b/qualityscores.cpp index 520d0bb..566b44c 100644 --- a/qualityscores.cpp +++ b/qualityscores.cpp @@ -36,7 +36,7 @@ QualityScores::QualityScores(ifstream& qFile){ 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(); @@ -46,16 +46,26 @@ QualityScores::QualityScores(ifstream& qFile){ } string qScoreString = m->getline(qFile); + //cout << qScoreString << endl; while(qFile.peek() != '>' && qFile.peek() != EOF){ - qScoreString += ' ' + m->getline(qFile); + 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; m->gobble(qScoreStringStream); - + string temp; + qScoreStringStream >> temp; m->gobble(qScoreStringStream); + + //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); + + //cout << count << '\t' << score << endl; qScores.push_back(score); count++; } @@ -104,7 +114,7 @@ QualityScores::QualityScores(ifstream& qFile){ // qScores.pop_back(); seqLength = qScores.size(); - //cout << "seqlenght = " << seqLength << '\t' << count << endl; + //cout << "seqlength = " << seqLength << '\t' << count << endl; } catch(exception& e) { @@ -286,23 +296,26 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int 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 @@ -314,7 +327,7 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int return 1; } catch(exception& e) { - m->errorOut(e, "QualityScores", "flipQScores"); + m->errorOut(e, "QualityScores", "stripQualWindowAverage"); exit(1); } @@ -373,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; } } }