]> git.donarmstrong.com Git - mothur.git/blobdiff - readcolumn.cpp
added forward and reverse barcodes to trim.seqs to process illumina seqs
[mothur.git] / readcolumn.cpp
index 29c967e0cbed51e375d21e0e755f14b7d1c7bd0d..53a8c4263dddc4687acc5a64cf7c5b1d27aac647 100644 (file)
 
 ReadColumnMatrix::ReadColumnMatrix(string df) : distFile(df){
        
-       successOpen = openInputFile(distFile, fileHandle);
+       successOpen = m->openInputFile(distFile, fileHandle);
+       sim = false;
        
 }
+/***********************************************************************/
+
+ReadColumnMatrix::ReadColumnMatrix(string df, bool s) : distFile(df){
+       
+       successOpen = m->openInputFile(distFile, fileHandle);
+       sim = s;
+}
 
 /***********************************************************************/
 
-void ReadColumnMatrix::read(NameAssignment* nameMap){
+int ReadColumnMatrix::read(NameAssignment* nameMap){
        try {           
 
                string firstName, secondName;
@@ -38,20 +46,20 @@ void ReadColumnMatrix::read(NameAssignment* nameMap){
                //need to see if this is a square or a triangular matrix...
        
                while(fileHandle && lt == 1){  //let's assume it's a triangular matrix...
+
                
                        fileHandle >> firstName >> secondName >> distance;      // get the row and column names and distance
+                       
+                       if (m->control_pressed) {  fileHandle.close();  delete reading; return 0; }
        
                        map<string,int>::iterator itA = nameMap->find(firstName);
                        map<string,int>::iterator itB = nameMap->find(secondName);
-                       
-                       if(itA == nameMap->end()){
-                               cerr << "AAError: Sequence '" << firstName << "' was not found in the names file, please correct\n";
-                       }
-                       if(itB == nameMap->end()){
-                               cerr << "ABError: Sequence '" << secondName << "' was not found in the names file, please correct\n";
-                       }
+                               
+                       if(itA == nameMap->end()){  m->mothurOut("AAError: Sequence '" + firstName + "' was not found in the names file, please correct\n"); exit(1);  }
+                       if(itB == nameMap->end()){  m->mothurOut("ABError: Sequence '" + secondName + "' was not found in the names file, please correct\n"); exit(1);  }
 
                        if (distance == -1) { distance = 1000000; }
+                       else if (sim) { distance = 1.0 - distance;  }  //user has entered a sim matrix that we need to convert.
                        
                        if(distance < cutoff && itA != itB){
                                if(itA->second > itB->second){
@@ -86,29 +94,29 @@ void ReadColumnMatrix::read(NameAssignment* nameMap){
                                }
                                reading->update(itA->second * nseqs);
                        }
-                       gobble(fileHandle);
+                       m->gobble(fileHandle);
                }
 
                if(lt == 0){  // oops, it was square
+       
                        fileHandle.close();  //let's start over
                        D->clear();  //let's start over
                   
-                       openInputFile(distFile, fileHandle);  //let's start over
+                       m->openInputFile(distFile, fileHandle);  //let's start over
 
                        while(fileHandle){
                                fileHandle >> firstName >> secondName >> distance;
+                               
+                               if (m->control_pressed) {  fileHandle.close();  delete reading; return 0; }
                
                                map<string,int>::iterator itA = nameMap->find(firstName);
                                map<string,int>::iterator itB = nameMap->find(secondName);
                                
-                               if(itA == nameMap->end()){
-                                       cerr << "BError: Sequence '" << firstName << "' was not found in the names file, please correct\n";
-                               }
-                               if(itB == nameMap->end()){
-                                       cerr << "BError: Sequence '" << secondName << "' was not found in the names file, please correct\n";
-                               }
+                               if(itA == nameMap->end()){  m->mothurOut("AAError: Sequence '" + firstName + "' was not found in the names file, please correct\n"); exit(1);  }
+                               if(itB == nameMap->end()){  m->mothurOut("ABError: Sequence '" + secondName + "' was not found in the names file, please correct\n"); exit(1);  }
                                
                                if (distance == -1) { distance = 1000000; }
+                               else if (sim) { distance = 1.0 - distance;  }  //user has entered a sim matrix that we need to convert.
                                
                                if(distance < cutoff && itA->second > itB->second){
                                        PCell value(itA->second, itB->second, distance);
@@ -116,18 +124,22 @@ void ReadColumnMatrix::read(NameAssignment* nameMap){
                                        reading->update(itA->second * nseqs);
                                }
                
-                               gobble(fileHandle);
+                               m->gobble(fileHandle);
                        }
                }
-
+               
+               if (m->control_pressed) {  fileHandle.close();  delete reading; return 0; }
+               
                reading->finish();
                fileHandle.close();
 
                list->setLabel("0");
+               
+               return 1;
 
        }
        catch(exception& e) {
-               errorOut(e, "ReadColumnMatrix", "read");
+               m->errorOut(e, "ReadColumnMatrix", "read");
                exit(1);
        }
 }