]> git.donarmstrong.com Git - mothur.git/blobdiff - qualityscores.cpp
added otu.association command. added calcSpearman, calcKendall and calcPearson functi...
[mothur.git] / qualityscores.cpp
index c9c65042843bffddf5c6d3d7acca4ab38754ac5e..566b44c6bad55402fae1374aab0212547befe7cc 100644 (file)
@@ -36,7 +36,7 @@ QualityScores::QualityScores(ifstream& qFile){
                
                qFile >> seqName; 
                m->getline(qFile);
-               
+               //cout << seqName << endl;      
                if (seqName == "")      {
                        m->mothurOut("Error reading quality file, name blank at position, " + toString(qFile.tellg()));
                        m->mothurOutEndLine(); 
@@ -44,20 +44,32 @@ QualityScores::QualityScores(ifstream& qFile){
                else{
                        seqName = seqName.substr(1);
                }
+               
                string qScoreString = m->getline(qFile);
+               //cout << qScoreString << endl;
                while(qFile.peek() != '>' && qFile.peek() != EOF){
-                       qScoreString += ' ' + m->getline(qFile);
+                       if (m->control_pressed) { break; }
+                       string temp = m->getline(qFile);
+                       //cout << temp << endl;
+                       qScoreString +=  ' ' + temp;
                }
-               
+               //cout << "done reading " << endl;      
                istringstream qScoreStringStream(qScoreString);
                int count = 0;
                while(!qScoreStringStream.eof()){
                        if (m->control_pressed) { break; }
-                       qScoreStringStream >> score;
+                       string temp;
+                       qScoreStringStream >> temp;  m->gobble(qScoreStringStream);
+                       
+                       //check temp to make sure its a number
+                       if (!m->isContainingOnlyDigits(temp)) { m->mothurOut("[ERROR]: In sequence " + seqName + "'s quality scores, expected a number and got " + temp + ", setting score to 0."); m->mothurOutEndLine(); temp = "0"; }
+                       convert(temp, score);
+                       
+                       //cout << count << '\t' << score << endl;
                        qScores.push_back(score);
                        count++;
                }
-               qScores.pop_back();
+               //qScores.pop_back();
                
 //             string scores = "";
 //             
@@ -102,7 +114,7 @@ QualityScores::QualityScores(ifstream& qFile){
 //             qScores.pop_back();
 
                seqLength = qScores.size();
-               
+               //cout << "seqlength = " << seqLength << '\t' << count << endl;
                
        }
        catch(exception& e) {
@@ -151,7 +163,10 @@ void QualityScores::printQScores(ofstream& qFile){
 void QualityScores::trimQScores(int start, int end){
        try {
                vector<int> hold;
-                       
+               
+
+               //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;         
@@ -281,23 +296,26 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int
 
                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
@@ -309,7 +327,7 @@ bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int
                return 1;
        }
        catch(exception& e) {
-               m->errorOut(e, "QualityScores", "flipQScores");
+               m->errorOut(e, "QualityScores", "stripQualWindowAverage");
                exit(1);
        }                                                       
        
@@ -368,10 +386,11 @@ void QualityScores::updateQScoreErrorMap(map<char, vector<int> >& qualErrorMap,
                        if(errorSeq[i] == 'm')          {       qualErrorMap['m'][qScores[qIndex]] += weight;   }
                        else if(errorSeq[i] == 's')     {       qualErrorMap['s'][qScores[qIndex]] += weight;   }
                        else if(errorSeq[i] == 'i')     {       qualErrorMap['i'][qScores[qIndex]] += weight;   }
-                       else if(errorSeq[i] == 'a')     {       qualErrorMap['a'][qScores[qIndex]] += weight;   }
+                       else if(errorSeq[i] == 'a')     {       qualErrorMap['a'][qScores[qIndex]] += weight;   /*if(qScores[qIndex] != 0){     cout << qIndex << '\t';         }*/     }
                        else if(errorSeq[i] == 'd')     {       /*      there are no qScores for deletions      */              }
 
                        if(errorSeq[i] != 'd')          {       qIndex++;       }
+                                               
                        if(qIndex > stop){      break;  }
                }       
        }