X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=qualityscores.cpp;h=916dab3a59743e4bcb860bd9891dcfbda74504b4;hp=33ca1728052e4db59372fc2d8129e5bcbaf729c5;hb=fefd5ee1517abd3bc38b469cb2dffc85a1571c7e;hpb=567e4bca5d62bd8ea316ce5def320d070d7507b8 diff --git a/qualityscores.cpp b/qualityscores.cpp index 33ca172..916dab3 100644 --- a/qualityscores.cpp +++ b/qualityscores.cpp @@ -23,7 +23,19 @@ QualityScores::QualityScores(){ exit(1); } } +/**************************************************************************************************/ +QualityScores::QualityScores(string n, vector s){ + try { + m = MothurOut::getInstance(); + setName(n); + setScores(s); + } + catch(exception& e) { + m->errorOut(e, "QualityScores", "QualityScores"); + exit(1); + } +} /**************************************************************************************************/ QualityScores::QualityScores(ifstream& qFile){ @@ -32,22 +44,22 @@ QualityScores::QualityScores(ifstream& qFile){ m = MothurOut::getInstance(); int score; - seqName = getSequenceName(qFile); + seqName = getSequenceName(qFile); m->gobble(qFile); if (m->debug) { m->mothurOut("[DEBUG]: name = '" + seqName + "'\n."); } if (!m->control_pressed) { - string qScoreString = m->getline(qFile); + string qScoreString = m->getline(qFile); m->gobble(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."); } + string temp = m->getline(qFile); m->gobble(qFile); + //if (m->debug) { m->mothurOut("[DEBUG]: scores = '" + temp + "'\n."); } qScoreString += ' ' + temp; } - //cout << "done reading " << endl; + //cout << "done reading " << endl; istringstream qScoreStringStream(qScoreString); int count = 0; while(!qScoreStringStream.eof()){ @@ -55,7 +67,7 @@ QualityScores::QualityScores(ifstream& qFile){ string temp; qScoreStringStream >> temp; m->gobble(qScoreStringStream); - if (m->debug) { m->mothurOut("[DEBUG]: score " + toString(qScores.size()) + " = '" + temp + "'\n."); } + //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"; } @@ -68,7 +80,7 @@ QualityScores::QualityScores(ifstream& qFile){ } seqLength = qScores.size(); - //cout << "seqlength = " << seqLength << '\t' << count << endl; + //cout << "seqlength = " << seqLength << endl; } catch(exception& e) { @@ -89,9 +101,7 @@ string QualityScores::getSequenceName(ifstream& qFile) { name = name.substr(1); - for (int i = 0; i < name.length(); i++) { - if (name[i] == ':') { name[i] = '_'; m->changedSeqNames = true; } - } + m->checkName(name); }else{ m->mothurOut("Error in reading your qfile, at position " + toString(qFile.tellg()) + ". Blank name."); m->mothurOutEndLine(); m->control_pressed = true; } @@ -106,10 +116,7 @@ string QualityScores::getSequenceName(ifstream& qFile) { void QualityScores::setName(string name) { try { - for (int i = 0; i < name.length(); i++) { - if (name[i] == ':') { name[i] = '_'; m->changedSeqNames = true; } - } - + m->checkName(name); seqName = name; } catch(exception& e) { @@ -135,7 +142,7 @@ string QualityScores::getName(){ void QualityScores::printQScores(ofstream& qFile){ try { - double aveQScore = calculateAverage(); + double aveQScore = calculateAverage(false); qFile << '>' << seqName << '\t' << aveQScore << endl; @@ -205,7 +212,7 @@ bool QualityScores::stripQualThreshold(Sequence& sequence, double qThreshold){ if(seqName != sequence.getName()){ m->mothurOut("sequence name mismatch btwn fasta: " + sequence.getName() + " and qual file: " + seqName); - m->mothurOutEndLine(); + m->mothurOutEndLine(); m->control_pressed = true; } int end; @@ -233,7 +240,7 @@ bool QualityScores::stripQualThreshold(Sequence& sequence, double qThreshold){ /**************************************************************************************************/ -bool QualityScores::stripQualRollingAverage(Sequence& sequence, double qThreshold){ +bool QualityScores::stripQualRollingAverage(Sequence& sequence, double qThreshold, bool logTransform){ try { string rawSequence = sequence.getUnaligned(); int seqLength = sequence.getNumBases(); @@ -245,12 +252,22 @@ bool QualityScores::stripQualRollingAverage(Sequence& sequence, double qThreshol int end = -1; double rollingSum = 0.0000; + double value = 0.0; for(int i=0;imothurOutEndLine(); } - double aveQScore = calculateAverage(); + double aveQScore = calculateAverage(logTransform); + if (m->debug) { m->mothurOut("[DEBUG]: " + sequence.getName() + " average = " + toString(aveQScore) + "\n"); } + if(aveQScore >= qAverage) { success = 1; } else { success = 0; }