X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=qualityscores.cpp;h=fca3d9f4c9cd17947116fbdb9a872bfce863fe47;hb=662c0b60d65f79f672ab199300b7ee4975233465;hp=aafa5794e206b936793cf6ffce6109f66eebaf86;hpb=bdb5d82e2a73829b4e1fa42656ad9bcb57e3e948;p=mothur.git diff --git a/qualityscores.cpp b/qualityscores.cpp index aafa579..fca3d9f 100644 --- a/qualityscores.cpp +++ b/qualityscores.cpp @@ -16,6 +16,7 @@ QualityScores::QualityScores(){ m = MothurOut::getInstance(); seqName = ""; seqLength = -1; + } catch(exception& e) { m->errorOut(e, "QualityScores", "QualityScores"); @@ -25,82 +26,42 @@ QualityScores::QualityScores(){ /**************************************************************************************************/ -QualityScores::QualityScores(ifstream& qFile, int l){ +QualityScores::QualityScores(ifstream& qFile){ try { m = MothurOut::getInstance(); - + seqName = ""; - seqLength = l; int score; qFile >> seqName; - - while (!qFile.eof()) { char c = qFile.get(); if (c == 10 || c == 13 || c == -1){ break; } } // get rest of line - m->gobble(qFile); - if (seqName == "") { m->mothurOut("Error reading quality file, name blank at position, " + toString(qFile.tellg())); m->mothurOutEndLine(); } - else { - seqName = seqName.substr(1); - } - - //m->getline(qFile, line); - //istringstream qualStream(line); - - //while(qualStream){ - // qualStream >> score; - // qScores.push_back(score); - //} - //qScores.pop_back(); - - //seqLength = qScores.size(); - - /*while(!in.eof()){ - string saveName = ""; - string name = ""; - string scores = ""; - - in >> name; - //cout << name << endl; - if (name.length() != 0) { - saveName = name.substr(1); - while (!in.eof()) { - char c = in.get(); - if (c == 10 || c == 13){ break; } - else { name += c; } - } - m->gobble(in); - } - - while(in){ - char letter= in.get(); - if(letter == '>'){ in.putback(letter); break; } - else{ scores += letter; } - } - - //istringstream iss (scores,istringstream::in); - - //int count = 0; int tempScore; - //while (iss) { iss >> tempScore; count++; } - //cout << saveName << '\t' << count << endl; - - m->gobble(in); - }*/ + m->getline(qFile); + if (seqName == "") { + m->mothurOut("Error reading quality file, name blank at position, " + toString(qFile.tellg())); + m->mothurOutEndLine(); + } + else{ + seqName = seqName.substr(1); + } + string qScoreString = m->getline(qFile); - for(int i=0;i> score; + istringstream qScoreStringStream(qScoreString); + while(!qScoreStringStream.eof()){ + qScoreStringStream >> score; qScores.push_back(score); } - m->gobble(qFile); - + qScores.pop_back(); + seqLength = qScores.size(); } catch(exception& e) { m->errorOut(e, "QualityScores", "QualityScores"); exit(1); } - + } + /**************************************************************************************************/ string QualityScores::getName(){ @@ -197,9 +158,12 @@ bool QualityScores::stripQualThreshold(Sequence& sequence, double qThreshold){ } } + //every score passed + if (end == (seqLength-1)) { end = seqLength; } + sequence.setUnaligned(rawSequence.substr(0,end)); trimQScores(-1, end); - + return 1; } catch(exception& e) { @@ -237,9 +201,11 @@ bool QualityScores::stripQualRollingAverage(Sequence& sequence, double qThreshol if(end == -1){ end = seqLength; } + sequence.setUnaligned(rawSequence.substr(0,end)); trimQScores(-1, end); + return 1; } catch(exception& e) { @@ -265,12 +231,12 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int int start = 0; if(seqLength < windowSize) { return 0; } - + while(start < seqLength){ double windowSum = 0.0000; for(int i=start;i= seqLength){ end = seqLength - 1; } } - if(end == -1){ end = seqLength; } sequence.setUnaligned(rawSequence.substr(0,end)); @@ -343,6 +308,7 @@ void QualityScores::updateQScoreErrorMap(map >& qualErrorMap, try { int seqLength = errorSeq.size(); + int qIndex = start - 1; for(int i=0;i >& qualErrorMap, else if(errorSeq[i] == 'd') { /* there are no qScores for deletions */ } if(errorSeq[i] != 'd') { qIndex++; } - + if(qIndex > stop){ break; } } } catch(exception& e) {