]> git.donarmstrong.com Git - mothur.git/blobdiff - qualityscores.cpp
small bug with trimming of quality scores over a window. lost last base if sequence...
[mothur.git] / qualityscores.cpp
index 0641d3b7bf4ed8abc588467b946d0678766c5fb0..ae85d86199c3ce9fbec09aac5525b17db3c4297a 100644 (file)
@@ -44,20 +44,22 @@ QualityScores::QualityScores(ifstream& qFile){
                else{
                        seqName = seqName.substr(1);
                }
+               
                string qScoreString = m->getline(qFile);
                while(qFile.peek() != '>' && qFile.peek() != EOF){
-                       qScoreString += ' ' + m->getline(qFile);
+                       qScoreString +=  ' ' + m->getline(qFile);
                }
                
                istringstream qScoreStringStream(qScoreString);
                int count = 0;
                while(!qScoreStringStream.eof()){
                        if (m->control_pressed) { break; }
-                       qScoreStringStream >> score;
+                       qScoreStringStream >> score;  m->gobble(qScoreStringStream);
+
                        qScores.push_back(score);
                        count++;
                }
-               qScores.pop_back();
+               //qScores.pop_back();
                
 //             string scores = "";
 //             
@@ -82,7 +84,6 @@ QualityScores::QualityScores(ifstream& qFile){
 //                             if((letter == '>')){    qFile.putback(letter);  break;  }
 //                             else if (isprint(letter)) { scores += letter; }
 //                     }
-//                     cout << scores << endl;
 //                     m->gobble(qFile);
 //                     
 //                     break;
@@ -103,7 +104,7 @@ QualityScores::QualityScores(ifstream& qFile){
 //             qScores.pop_back();
 
                seqLength = qScores.size();
-               
+               //cout << "seqlenght = " <<     seqLength << '\t' << count << endl;
                
        }
        catch(exception& e) {
@@ -118,7 +119,6 @@ QualityScores::QualityScores(ifstream& qFile){
 string QualityScores::getName(){
        
        try {
-               cout << qScores.size() << '\t';
                return seqName;
        }
        catch(exception& e) {
@@ -154,8 +154,9 @@ void QualityScores::trimQScores(int start, int end){
        try {
                vector<int> hold;
                
-               cout << seqName << '\t' << qScores.size() << '\t' << start << '\t' << end << endl;
-               
+
+               //cout << seqName << '\t' << start << '\t' << end << '\t' << qScores.size() << endl;
+               //for (int i = 0; i < qScores.size(); i++) { cout << qScores[i] << end; }
                if(end == -1){          
                        hold = vector<int>(qScores.begin()+start, qScores.end());
                        qScores = hold;         
@@ -282,28 +283,34 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int
                
                int end = windowSize;
                int start = 0;
-               
+
                if(seqLength < windowSize) {    return 0;       }
                        
-               while(start < seqLength){
+               while((start+windowSize) < seqLength){
                        double windowSum = 0.0000;
 
                        for(int i=start;i<end;i++){
                                windowSum += qScores[i];
                        }
                        double windowAverage = windowSum / (double)(end-start);
-                       
+                               
                        if(windowAverage < qThreshold){
                                end = end - stepSize;
                                break;
                        }
+                       
                        start += stepSize;
                        end = start + windowSize;
-                       if(end >= seqLength){   end = seqLength - 1;    }
+                               
+                       if(end >= seqLength){   end = seqLength;        }
+                               
                }
-               
+       
                if(end == -1){  end = seqLength;        }
                
+               //failed first window
+               if (end < windowSize) { return 0; }
+                       
                sequence.setUnaligned(rawSequence.substr(0,end));
                trimQScores(-1, end);