]> git.donarmstrong.com Git - mothur.git/blobdiff - qualityscores.cpp
worked on trim.seqs - added in the groupfiles for allfiles=t, cleaned up the outputNa...
[mothur.git] / qualityscores.cpp
index aafa5794e206b936793cf6ffce6109f66eebaf86..719bf3dc6c44cd3880ebc8b1c4d3dc352a448ee1 100644 (file)
@@ -16,6 +16,7 @@ QualityScores::QualityScores(){
                m = MothurOut::getInstance();
                seqName = "";
                seqLength = -1;
+               
        }
        catch(exception& e) {
                m->errorOut(e, "QualityScores", "QualityScores");
@@ -25,82 +26,90 @@ QualityScores::QualityScores(){
 
 /**************************************************************************************************/
 
-QualityScores::QualityScores(ifstream& qFile, int l){
+QualityScores::QualityScores(ifstream& qFile){
        try {
                
                m = MothurOut::getInstance();
-
-               seqName = "";
-               seqLength = l;
+               
+               /*seqName = "";
                int score;
                
                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(); 
+               }
+               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 = "";
                
-               //m->getline(qFile, line);
-               //istringstream qualStream(line);
-       
-               //while(qualStream){
-               //      qualStream >> score;
-               //      qScores.push_back(score);
-               //}
-               //qScores.pop_back();
-               
-               //seqLength = qScores.size();   
-               
-               /*while(!in.eof()){     
-                       string saveName = "";
-                       string name = "";
-                       string scores = "";
+               while(!qFile.eof()){    
+                       
+                       qFile >> seqName; 
                        
-                       in >> name; 
-                       //cout << name << endl;         
-                       if (name.length() != 0) { 
-                               saveName = name.substr(1);
-                               while (!in.eof())       {       
-                                       char c = in.get(); 
+                       //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;  }
-                                       else { name += c; }     
                                } 
-                               m->gobble(in);
+                               m->gobble(qFile);
                        }
                        
-                       while(in){
-                               char letter= in.get();
-                               if(letter == '>'){      in.putback(letter);     break;  }
-                               else{ scores += letter; }
+                       //get scores
+                       while(qFile){
+                               char letter=qFile.get();
+                               if((letter == '>')){    qFile.putback(letter);  break;  }
+                               else if (isprint(letter)) { scores += letter; }
                        }
                        
-                //istringstream iss (scores,istringstream::in);
-                
-                //int count = 0; int tempScore;
-                //while (iss) { iss >> tempScore; count++; }
-                //cout << saveName << '\t' << count << endl;   
+                       m->gobble(qFile);
                        
-                       m->gobble(in);
-               }*/             
-               
+                       break;
+               }
                
+               //convert scores string to qScores
+               istringstream qScoreStringStream(scores);
                
-               for(int i=0;i<seqLength;i++){
-                       qFile >> score;
+               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);
        }                                                       
-
+       
 }
+
 /**************************************************************************************************/
 
 string QualityScores::getName(){
@@ -197,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) {
@@ -230,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) {
@@ -265,12 +278,12 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int
                int start = 0;
                
                if(seqLength < windowSize) {    return 0;       }
-               
+                       
                while(start < seqLength){
                        double windowSum = 0.0000;
 
                        for(int i=start;i<end;i++){
-                               windowSum += qScores[i];                                
+                               windowSum += qScores[i];
                        }
                        double windowAverage = windowSum / (double)(end-start);
                        
@@ -283,7 +296,6 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int
                        if(end >= seqLength){   end = seqLength - 1;    }
                }
                
-               
                if(end == -1){  end = seqLength;        }
                
                sequence.setUnaligned(rawSequence.substr(0,end));
@@ -343,7 +355,9 @@ void QualityScores::updateQScoreErrorMap(map<char, vector<int> >& qualErrorMap,
        try {
 
                int seqLength = errorSeq.size();
+               
                int qIndex = start - 1;
+
                for(int i=0;i<seqLength;i++){
                        
                        if(errorSeq[i] == 'm')          {       qualErrorMap['m'][qScores[qIndex]] += weight;   }
@@ -353,7 +367,7 @@ void QualityScores::updateQScoreErrorMap(map<char, vector<int> >& qualErrorMap,
                        else if(errorSeq[i] == 'd')     {       /*      there are no qScores for deletions      */              }
 
                        if(errorSeq[i] != 'd')          {       qIndex++;       }
-
+                       if(qIndex > stop){      break;  }
                }       
        }
        catch(exception& e) {