]> 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 6dee9862ec2c7582aa9a56dd2f5e8bd4f2ce9127..719bf3dc6c44cd3880ebc8b1c4d3dc352a448ee1 100644 (file)
@@ -31,7 +31,7 @@ QualityScores::QualityScores(ifstream& qFile){
                
                m = MothurOut::getInstance();
                
-               seqName = "";
+               /*seqName = "";
                int score;
                
                qFile >> seqName; 
@@ -44,16 +44,64 @@ QualityScores::QualityScores(ifstream& qFile){
                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 = "";
+               
+               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;
                }
+               
+               //convert scores string to qScores
+               istringstream qScoreStringStream(scores);
+               
+               int score;
+               while(!qScoreStringStream.eof()){
+                       
+                       if (m->control_pressed) { break; }
+                       
+                       qScoreStringStream >> score;
+                       qScores.push_back(score);
+               }
+               
                qScores.pop_back();
                seqLength = qScores.size();
+               
+               
        }
        catch(exception& e) {
                m->errorOut(e, "QualityScores", "QualityScores");
@@ -194,7 +242,6 @@ 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;
                        }
                }
@@ -308,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;   }
@@ -318,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) {