]> git.donarmstrong.com Git - mothur.git/blobdiff - readphylip.cpp
added forward and reverse barcodes to trim.seqs to process illumina seqs
[mothur.git] / readphylip.cpp
index bc39b52ca071d126bc9adc671e8d202c9a112dd6..1c529b26f15fdfa172c8a0f7ebcf20187e87b03b 100644 (file)
 
 ReadPhylipMatrix::ReadPhylipMatrix(string distFile){
         
-        successOpen = openInputFile(distFile, fileHandle);
+        successOpen = m->openInputFile(distFile, fileHandle);
+               sim=false;
         
 }
+/***********************************************************************/
+
+ReadPhylipMatrix::ReadPhylipMatrix(string distFile, bool s){
+       
+       successOpen = m->openInputFile(distFile, fileHandle);
+       sim=s;
+}
+
 
 /***********************************************************************/
 
-void ReadPhylipMatrix::read(NameAssignment* nameMap){
+int ReadPhylipMatrix::read(NameAssignment* nameMap){
         try {
         
                         float distance;
                         int square, nseqs;
                         string name;
                         vector<string> matrixNames;
-        
-                        fileHandle >> nseqs >> name;
-
+                                               
+                                               string numTest;
+                                               fileHandle >> numTest >> name;
+                       
+                                               if (!m->isContainingOnlyDigits(numTest)) { m->mothurOut("[ERROR]: expected a number and got " + numTest + ", quitting."); m->mothurOutEndLine(); exit(1); }
+                                               else { convert(numTest, nseqs); }
+                       
                         matrixNames.push_back(name);
 
                         if(nameMap == NULL){
@@ -38,7 +51,7 @@ void ReadPhylipMatrix::read(NameAssignment* nameMap){
                         }
                         else{
                                 list = new ListVector(nameMap->getListVector());
-                                if(nameMap->count(name)==0){        cout << "Error: Sequence '" << name << "' was not found in the names file, please correct" << endl; }
+                                if(nameMap->count(name)==0){        m->mothurOut("Error: Sequence '" + name + "' was not found in the names file, please correct"); m->mothurOutEndLine(); }
                         }
         
                         char d;
@@ -59,25 +72,33 @@ void ReadPhylipMatrix::read(NameAssignment* nameMap){
                         }
         
                         Progress* reading;
-        
+      
                         if(square == 0){
 
                                 reading = new Progress("Reading matrix:     ", nseqs * (nseqs - 1) / 2);
                 
                                 int        index = 0;
-                
+               
                                 for(int i=1;i<nseqs;i++){
+                                                                               if (m->control_pressed) {  fileHandle.close();  delete reading; return 0; }
+                                                                               
                                         fileHandle >> name;
                                         matrixNames.push_back(name);
+                                               
         
                                         //there's A LOT of repeated code throughout this method...
                                         if(nameMap == NULL){
                                                 list->set(i, name);
                                         
                                                 for(int j=0;j<i;j++){
+                                                                                               
+                                                                                                               if (m->control_pressed) { delete reading; fileHandle.close(); return 0;  }
+                                                                                                               
                                                         fileHandle >> distance;
+                                                                                       
                                                 
                                                         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){
                                                                 PCell value(i, j, distance);
@@ -89,12 +110,15 @@ void ReadPhylipMatrix::read(NameAssignment* nameMap){
                                 
                                         }
                                         else{
-                                                if(nameMap->count(name)==0){        cout << "Error: Sequence '" << name << "' was not found in the names file, please correct" << endl; }
+                                                if(nameMap->count(name)==0){        m->mothurOut("Error: Sequence '" + name + "' was not found in the names file, please correct"); m->mothurOutEndLine(); }
                                 
                                                 for(int j=0;j<i;j++){
                                                         fileHandle >> distance;
+                                                                                                               
+                                                                                                               if (m->control_pressed) { delete reading; fileHandle.close(); return 0;  }
                                 
                                                         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){
                                                                 PCell value(nameMap->get(matrixNames[i]), nameMap->get(matrixNames[j]), distance);
@@ -115,13 +139,18 @@ void ReadPhylipMatrix::read(NameAssignment* nameMap){
                                 for(int i=1;i<nseqs;i++){
                                         fileHandle >> name;                
                                         matrixNames.push_back(name);
+                                                                               
+                                                                               
         
                                         if(nameMap == NULL){
                                                 list->set(i, name);
                                                 for(int j=0;j<nseqs;j++){
                                                         fileHandle >> distance;
-                                        
+                                                                                                               
+                                                                                                               if (m->control_pressed) {  fileHandle.close();  delete reading; return 0; }
+                                                                                                               
                                                         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 && j < i){
                                                                 PCell value(i, j, distance);
@@ -133,14 +162,17 @@ void ReadPhylipMatrix::read(NameAssignment* nameMap){
                                         
                                         }
                                         else{
-                                                if(nameMap->count(name)==0){        cout << "Error: Sequence '" << name << "' was not found in the names file, please correct" << endl; }
+                                                if(nameMap->count(name)==0){        m->mothurOut("Error: Sequence '" + name + "' was not found in the names file, please correct"); m->mothurOutEndLine(); }
                                 
                                                 for(int j=0;j<nseqs;j++){
                                                         fileHandle >> distance;
-                        
-                                                        if (distance == -1) { distance = 1000000; }
+                                                                                                               
+                                                                                                               if (m->control_pressed) {  fileHandle.close();  delete reading; return 0; }
+                                                                                                               
+                                                       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 && j < i){
+                                                                                                               if(distance < cutoff && j < i){
                                                                 PCell value(nameMap->get(matrixNames[i]), nameMap->get(matrixNames[j]), distance);
                                                                 D->addCell(value);
                                                         }
@@ -150,36 +182,37 @@ void ReadPhylipMatrix::read(NameAssignment* nameMap){
                                         }
                                 }
                         }
+                                               
+                                               if (m->control_pressed) {  fileHandle.close();  delete reading; return 0; }
+                                               
                         reading->finish();
                         delete reading;
 
                         list->setLabel("0");
                         fileHandle.close();
 
-                        if(nameMap != NULL){
+                     /*   if(nameMap != NULL){
                                 for(int i=0;i<matrixNames.size();i++){
                                         nameMap->erase(matrixNames[i]);
                                 }
                                 if(nameMap->size() > 0){
                                         //should probably tell them what is missing if we missed something
-                                        cout << "missed something" << '\t' << nameMap->size() << endl;
+                                        m->mothurOut("missed something\t" + toString(nameMap->size())); m->mothurOutEndLine();
                                 }
-                        }
+                        } */
+                                               
+                                               return 1;
 
                 }
         catch(exception& e) {
-                cout << "Standard Error: " << e.what() << " has occurred in the ReadPhylipMatrix class Function read. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
-                exit(1);
-        }
-        catch(...) {
-                cout << "An unknown error has occurred in the ReadPhylipMatrix class function read. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+               m->errorOut(e, "ReadPhylipMatrix", "read");
                 exit(1);
         }
-}
+       }
 
 /***********************************************************************/
 
 ReadPhylipMatrix::~ReadPhylipMatrix(){
-        delete D;
-        delete list;
+       // delete D;
+       // delete list;
 }