X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=qualityscores.cpp;h=719bf3dc6c44cd3880ebc8b1c4d3dc352a448ee1;hb=e840ba0e90a2b2be39e0910e4be23dde6a14cbac;hp=fa78b69d653cb841c33833d6249bab6b6ecaf18c;hpb=260ae19c36cb11a53ddc5a75b5e507f8dd8b31d6;p=mothur.git diff --git a/qualityscores.cpp b/qualityscores.cpp index fa78b69..719bf3d 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,50 +26,88 @@ QualityScores::QualityScores(){ /**************************************************************************************************/ -QualityScores::QualityScores(ifstream& qFile, int l){ +QualityScores::QualityScores(ifstream& qFile){ try { m = MothurOut::getInstance(); - - seqName = ""; - seqLength = l; + + /*seqName = ""; int score; - //string line; - //m->getline(qFile, line); - //istringstream nameStream(line); - 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); + + if (seqName == "") { + m->mothurOut("Error reading quality file, name blank at position, " + toString(qFile.tellg())); + m->mothurOutEndLine(); } - - //m->getline(qFile, line); - //istringstream qualStream(line); - - //while(qualStream){ - // qualStream >> score; - // qScores.push_back(score); - //} - //qScores.pop_back(); + else{ + seqName = seqName.substr(1); + } + cout << seqName << endl; + string qScoreString = m->getline(qFile); + cout << qScoreString << 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 = ""; - //seqLength = qScores.size(); + 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; + } - for(int i=0;i> score; + //convert scores string to qScores + istringstream qScoreStringStream(scores); + + int score; + while(!qScoreStringStream.eof()){ + + if (m->control_pressed) { break; } + + 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); } - + } /**************************************************************************************************/ @@ -116,8 +155,10 @@ void QualityScores::trimQScores(int start, int end){ qScores = hold; } if(start == -1){ - hold = vector(qScores.begin(), qScores.begin()+end); //not sure if indexing is correct - qScores = hold; + if(qScores.size() > end){ + hold = vector(qScores.begin(), qScores.begin()+end); + qScores = hold; + } } seqLength = qScores.size(); @@ -165,9 +206,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) { @@ -198,16 +242,17 @@ bool QualityScores::stripQualRollingAverage(Sequence& sequence, double qThreshol if(rollingSum / (double)(i+1) < qThreshold){ end = i; -// cout << i+1 << '\t' << seqName << '\t' << rollingSum / (double)(i+1) << endl; break; } } if(end == -1){ end = seqLength; } + sequence.setUnaligned(rawSequence.substr(0,end)); trimQScores(-1, end); + return 1; } catch(exception& e) { @@ -232,12 +277,13 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int int end = windowSize; 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)); @@ -299,7 +344,68 @@ bool QualityScores::cullQualAverage(Sequence& sequence, double qAverage){ return success; } catch(exception& e) { - m->errorOut(e, "TrimSeqsCommand", "cullQualAverage"); + m->errorOut(e, "QualityScores", "cullQualAverage"); + exit(1); + } +} + +/**************************************************************************************************/ + +void QualityScores::updateQScoreErrorMap(map >& qualErrorMap, string errorSeq, int start, int stop, int weight){ + try { + + int seqLength = errorSeq.size(); + + int qIndex = start - 1; + + for(int i=0;i stop){ break; } + } + } + catch(exception& e) { + m->errorOut(e, "QualityScores", "updateQScoreErrorMap"); + exit(1); + } +} + +/**************************************************************************************************/ + +void QualityScores::updateForwardMap(vector >& forwardMap, int start, int stop, int weight){ + try { + + int index = 0; + for(int i=start-1;ierrorOut(e, "QualityScores", "updateForwardMap"); + exit(1); + } +} + +/**************************************************************************************************/ + +void QualityScores::updateReverseMap(vector >& reverseMap, int start, int stop, int weight){ + try { + + int index = 0; + for(int i=stop-1;i>=start;i--){ + reverseMap[index++][qScores[i]] += weight; + } + + } + catch(exception& e) { + m->errorOut(e, "QualityScores", "updateForwardMap"); exit(1); } }