X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=qualityscores.cpp;h=26492245e2b9805144125052d57045a834bc3f95;hp=5b64b133a0c3df43cfb018c03d9867136661f100;hb=a8e2df1b96a57f5f29576b08361b86a96a8eff4f;hpb=19fcbbdba99658f5eca244803280f9ee7f9f6607 diff --git a/qualityscores.cpp b/qualityscores.cpp index 5b64b13..2649224 100644 --- a/qualityscores.cpp +++ b/qualityscores.cpp @@ -30,89 +30,43 @@ QualityScores::QualityScores(ifstream& qFile){ try { m = MothurOut::getInstance(); - - seqName = ""; + int score; + seqName = getSequenceName(qFile); + + if (m->debug) { m->mothurOut("[DEBUG]: name = '" + seqName + "'\n."); } + + if (!m->control_pressed) { + string qScoreString = m->getline(qFile); + + if (m->debug) { m->mothurOut("[DEBUG]: scores = '" + qScoreString + "'\n."); } + + while(qFile.peek() != '>' && qFile.peek() != EOF){ + if (m->control_pressed) { break; } + string temp = m->getline(qFile); + if (m->debug) { m->mothurOut("[DEBUG]: scores = '" + temp + "'\n."); } + qScoreString += ' ' + temp; + } + //cout << "done reading " << endl; + istringstream qScoreStringStream(qScoreString); + int count = 0; + while(!qScoreStringStream.eof()){ + if (m->control_pressed) { break; } + string temp; + qScoreStringStream >> temp; m->gobble(qScoreStringStream); + + if (m->debug) { m->mothurOut("[DEBUG]: score " + toString(qScores.size()) + " = '" + temp + "'\n."); } + + //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++; + } + } - 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(); - } - else{ - seqName = seqName.substr(1); - } - - string qScoreString = m->getline(qFile); - //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; } - 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++; - } - //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; @@ -123,7 +77,41 @@ QualityScores::QualityScores(ifstream& qFile){ } } - +//******************************************************************************************************************** +string QualityScores::getSequenceName(ifstream& qFile) { + try { + string name = ""; + + qFile >> name; + m->getline(qFile); + + if (name.length() != 0) { + + name = name.substr(1); + + m->checkName(name); + + }else{ m->mothurOut("Error in reading your qfile, at position " + toString(qFile.tellg()) + ". Blank name."); m->mothurOutEndLine(); m->control_pressed = true; } + + return name; + } + catch(exception& e) { + m->errorOut(e, "QualityScores", "getSequenceName"); + exit(1); + } +} +//******************************************************************************************************************** +void QualityScores::setName(string name) { + try { + + m->checkName(name); + seqName = name; + } + catch(exception& e) { + m->errorOut(e, "QualityScores", "setName"); + exit(1); + } +} /**************************************************************************************************/ string QualityScores::getName(){ @@ -327,7 +315,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); } @@ -423,13 +411,13 @@ void QualityScores::updateReverseMap(vector >& reverseMap, int start try { int index = 0; - for(int i=stop-1;i>=start;i--){ + for(int i=stop-1;i>=start-1;i--){ reverseMap[index++][qScores[i]] += weight; } } catch(exception& e) { - m->errorOut(e, "QualityScores", "updateForwardMap"); + m->errorOut(e, "QualityScores", "updateReverseMap"); exit(1); } }