]> git.donarmstrong.com Git - mothur.git/blobdiff - qualityscores.cpp
added modify names parameter to set.dir
[mothur.git] / qualityscores.cpp
index 566b44c6bad55402fae1374aab0212547befe7cc..26492245e2b9805144125052d57045a834bc3f95 100644 (file)
@@ -30,89 +30,43 @@ QualityScores::QualityScores(ifstream& qFile){
        try {
                
                m = MothurOut::getInstance();
-               
-               seqName = "";
+
                int score;
+               seqName = getSequenceName(qFile);
+               
+        if (m->debug) { m->mothurOut("[DEBUG]: name = '" + seqName + "'\n.");  }
+        
+               if (!m->control_pressed) {
+            string qScoreString = m->getline(qFile);
+            
+            if (m->debug) { m->mothurOut("[DEBUG]: scores = '" + qScoreString + "'\n.");  }
+            
+            while(qFile.peek() != '>' && qFile.peek() != EOF){
+                if (m->control_pressed) { break; }
+                string temp = m->getline(qFile);
+                if (m->debug) { m->mothurOut("[DEBUG]: scores = '" + temp + "'\n.");  }
+                qScoreString +=  ' ' + temp;
+            }
+            //cout << "done reading " << endl; 
+            istringstream qScoreStringStream(qScoreString);
+            int count = 0;
+            while(!qScoreStringStream.eof()){
+                if (m->control_pressed) { break; }
+                string temp;
+                qScoreStringStream >> temp;  m->gobble(qScoreStringStream);
+                
+                if (m->debug) { m->mothurOut("[DEBUG]: score " + toString(qScores.size()) + " = '" + temp + "'\n.");  }
+                
+                //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++;
+            }
+        }
                
-               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(); 
-               }
-               else{
-                       seqName = seqName.substr(1);
-               }
-               
-               string qScoreString = m->getline(qFile);
-               //cout << qScoreString << endl;
-               while(qFile.peek() != '>' && qFile.peek() != EOF){
-                       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; }
-                       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();
-               
-//             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();
                //cout << "seqlength = " << seqLength << '\t' << count << endl;
                
@@ -123,7 +77,41 @@ QualityScores::QualityScores(ifstream& qFile){
        }                                                       
        
 }
-
+//********************************************************************************************************************
+string QualityScores::getSequenceName(ifstream& qFile) {
+       try {
+               string name = "";
+               
+        qFile >> name;
+        m->getline(qFile);
+               
+               if (name.length() != 0) { 
+            
+                       name = name.substr(1); 
+            
+            m->checkName(name);
+            
+        }else{ m->mothurOut("Error in reading your qfile, at position " + toString(qFile.tellg()) + ". Blank name."); m->mothurOutEndLine(); m->control_pressed = true;  }
+        
+               return name;
+       }
+       catch(exception& e) {
+               m->errorOut(e, "QualityScores", "getSequenceName");
+               exit(1);
+       }
+}
+//********************************************************************************************************************
+void QualityScores::setName(string name) {
+       try {
+      
+        m->checkName(name);   
+        seqName = name;
+       }
+       catch(exception& e) {
+               m->errorOut(e, "QualityScores", "setName");
+               exit(1);
+       }
+}
 /**************************************************************************************************/
 
 string QualityScores::getName(){
@@ -423,13 +411,13 @@ void QualityScores::updateReverseMap(vector<vector<int> >& reverseMap, int start
        try {
                
                int index = 0;
-               for(int i=stop-1;i>=start;i--){
+               for(int i=stop-1;i>=start-1;i--){
                        reverseMap[index++][qScores[i]] += weight;
                }
                
        }       
        catch(exception& e) {
-               m->errorOut(e, "QualityScores", "updateForwardMap");
+               m->errorOut(e, "QualityScores", "updateReverseMap");
                exit(1);
        }
 }