]> git.donarmstrong.com Git - mothur.git/blobdiff - qualityscores.cpp
fixed unifrac.weighted
[mothur.git] / qualityscores.cpp
index 4b315b1c397d3a42921b0071253065b26b4befe6..fa78b69d653cb841c33833d6249bab6b6ecaf18c 100644 (file)
@@ -25,32 +25,44 @@ QualityScores::QualityScores(){
 
 /**************************************************************************************************/
 
-QualityScores::QualityScores(ifstream& qFile){
+QualityScores::QualityScores(ifstream& qFile, int l){
        try {
                
                m = MothurOut::getInstance();
 
                seqName = "";
-               seqLength = -1;
+               seqLength = l;
                int score;
                
-               string line;
-               getline(qFile, line);
-               istringstream nameStream(line);
+               //string line;
+               //m->getline(qFile, line); 
+               //istringstream nameStream(line);
        
-               nameStream >> seqName;
-               seqName = seqName.substr(1); 
+               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); 
+               }
 
-               getline(qFile, line);
-               istringstream qualStream(line);
+               //m->getline(qFile, line);
+               //istringstream qualStream(line);
        
-               while(qualStream){
-                       qualStream >> score;
+               //while(qualStream){
+               //      qualStream >> score;
+               //      qScores.push_back(score);
+               //}
+               //qScores.pop_back();
+               
+               //seqLength = qScores.size();   
+               
+               for(int i=0;i<seqLength;i++){
+                       qFile >> score;
                        qScores.push_back(score);
                }
-               qScores.pop_back();
-               
-               seqLength = qScores.size();     
+               m->gobble(qFile);
+
        }
        catch(exception& e) {
                m->errorOut(e, "QualityScores", "QualityScores");
@@ -213,8 +225,8 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int
                int seqLength = sequence.getNumBases();
                
                if(seqName != sequence.getName()){
-                       m->mothurOut("sequence name mismatch btwn fasta: " + sequence.getName() + " and qual file: " + seqName);
-                       m->mothurOutEndLine();  
+                       m->mothurOut("sequence name mismatch between fasta: " + sequence.getName() + " and qual file: " + seqName);
+                       m->mothurOutEndLine();
                }
                
                int end = windowSize;
@@ -230,7 +242,7 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int
                        double windowAverage = windowSum / (double)(end-start);
                        
                        if(windowAverage < qThreshold){
-                               end = start;
+                               end = end - stepSize;
                                break;
                        }
                        start += stepSize;