]> git.donarmstrong.com Git - mothur.git/blobdiff - trimflowscommand.cpp
paralellized dist.shared for windows
[mothur.git] / trimflowscommand.cpp
index c2ea5346125d31ed6779b1b7f20c9280a79678c1..c0c569cfd7975ba34e08adaf6fafdba203be9e9b 100644 (file)
@@ -21,7 +21,9 @@ vector<string> TrimFlowsCommand::setParameters(){
                CommandParameter pminflows("minflows", "Number", "", "450", "", "", "",false,false); parameters.push_back(pminflows);
                CommandParameter ppdiffs("pdiffs", "Number", "", "0", "", "", "",false,false); parameters.push_back(ppdiffs);
                CommandParameter pbdiffs("bdiffs", "Number", "", "0", "", "", "",false,false); parameters.push_back(pbdiffs);
-               CommandParameter ptdiffs("tdiffs", "Number", "", "0", "", "", "",false,false); parameters.push_back(ptdiffs);
+        CommandParameter pldiffs("ldiffs", "Number", "", "0", "", "", "",false,false); parameters.push_back(pldiffs);
+               CommandParameter psdiffs("sdiffs", "Number", "", "0", "", "", "",false,false); parameters.push_back(psdiffs);
+        CommandParameter ptdiffs("tdiffs", "Number", "", "0", "", "", "",false,false); parameters.push_back(ptdiffs);
                CommandParameter pprocessors("processors", "Number", "", "1", "", "", "",false,false); parameters.push_back(pprocessors);
                CommandParameter psignal("signal", "Number", "", "0.50", "", "", "",false,false); parameters.push_back(psignal);
                CommandParameter pnoise("noise", "Number", "", "0.70", "", "", "",false,false); parameters.push_back(pnoise);
@@ -149,10 +151,10 @@ TrimFlowsCommand::TrimFlowsCommand(string option)  {
                        
                        string temp;
                        temp = validParameter.validFile(parameters, "minflows", false); if (temp == "not found") { temp = "450"; }
-                       convert(temp, minFlows);  
+                       m->mothurConvert(temp, minFlows);  
 
                        temp = validParameter.validFile(parameters, "maxflows", false); if (temp == "not found") { temp = "450"; }
-                       convert(temp, maxFlows);  
+                       m->mothurConvert(temp, maxFlows);  
                        
                        
                        temp = validParameter.validFile(parameters, "oligos", true);
@@ -164,28 +166,35 @@ TrimFlowsCommand::TrimFlowsCommand(string option)  {
                        else if(m->isTrue(temp))        {       fasta = 1;      }
                        
                        temp = validParameter.validFile(parameters, "maxhomop", false);         if (temp == "not found"){       temp = "9";             }
-                       convert(temp, maxHomoP);  
+                       m->mothurConvert(temp, maxHomoP);  
 
                        temp = validParameter.validFile(parameters, "signal", false);           if (temp == "not found"){       temp = "0.50";  }
-                       convert(temp, signal);  
+                       m->mothurConvert(temp, signal);  
 
                        temp = validParameter.validFile(parameters, "noise", false);            if (temp == "not found"){       temp = "0.70";  }
-                       convert(temp, noise);  
+                       m->mothurConvert(temp, noise);  
        
                        temp = validParameter.validFile(parameters, "bdiffs", false);           if (temp == "not found"){       temp = "0";             }
-                       convert(temp, bdiffs);
+                       m->mothurConvert(temp, bdiffs);
                        
                        temp = validParameter.validFile(parameters, "pdiffs", false);           if (temp == "not found"){       temp = "0";             }
-                       convert(temp, pdiffs);
+                       m->mothurConvert(temp, pdiffs);
                        
-                       temp = validParameter.validFile(parameters, "tdiffs", false);
-                       if (temp == "not found"){ int tempTotal = pdiffs + bdiffs;  temp = toString(tempTotal); }
-                       convert(temp, tdiffs);
-                       if(tdiffs == 0){        tdiffs = bdiffs + pdiffs;       }
+            temp = validParameter.validFile(parameters, "ldiffs", false);              if (temp == "not found") { temp = "0"; }
+                       m->mothurConvert(temp, ldiffs);
+            
+            temp = validParameter.validFile(parameters, "sdiffs", false);              if (temp == "not found") { temp = "0"; }
+                       m->mothurConvert(temp, sdiffs);
+                       
+                       temp = validParameter.validFile(parameters, "tdiffs", false);           if (temp == "not found") { int tempTotal = pdiffs + bdiffs + ldiffs + sdiffs;  temp = toString(tempTotal); }
+                       m->mothurConvert(temp, tdiffs);
+                       
+                       if(tdiffs == 0){        tdiffs = bdiffs + pdiffs + ldiffs + sdiffs;     }
+
                        
                        temp = validParameter.validFile(parameters, "processors", false);       if (temp == "not found"){       temp = m->getProcessors();      }
                        m->setProcessors(temp);
-                       convert(temp, processors);
+                       m->mothurConvert(temp, processors);
        
                        flowOrder = validParameter.validFile(parameters, "order", false);
                        if (flowOrder == "not found"){ flowOrder = "TACG";              }
@@ -295,7 +304,7 @@ int TrimFlowsCommand::execute(){
                                                        m->mothurRemove(barcodePrimerComboFileNames[i][j]);
                                                }
                                                else{
-                                                       output << barcodePrimerComboFileNames[i][j] << endl;
+                                                       output << m->getFullPathName(barcodePrimerComboFileNames[i][j]) << endl;
                                                        outputNames.push_back(barcodePrimerComboFileNames[i][j]);
                                                        outputTypes["flow"].push_back(barcodePrimerComboFileNames[i][j]);
                                                }
@@ -309,7 +318,7 @@ int TrimFlowsCommand::execute(){
                        flowFilesFileName = outputDir + m->getRootName(m->getSimpleName(flowFileName)) + "flow.files";
                        m->openOutputFile(flowFilesFileName, output);
                        
-                       output << trimFlowFileName << endl;
+                       output << m->getFullPathName(trimFlowFileName) << endl;
                        
                        output.close();
                }
@@ -381,9 +390,7 @@ int TrimFlowsCommand::driverCreateTrim(string flowFileName, string trimFlowFileN
                TrimOligos trimOligos(pdiffs, bdiffs, primers, barcodes, revPrimer);
                
                while(moreSeqs) {
-                       //cout << "driver " << count << endl;
-                       
-       
+                               
                        if (m->control_pressed) { break; }
                        
                        int success = 1;
@@ -404,12 +411,26 @@ int TrimFlowsCommand::driverCreateTrim(string flowFileName, string trimFlowFileN
                        int primerIndex = 0;
                        int barcodeIndex = 0;
                        
+            if(numLinkers != 0){
+                success = trimOligos.stripLinker(currSeq);
+                if(success > ldiffs)           {       trashCode += 'k';       }
+                else{ currentSeqDiffs += success;  }
+                
+            }
+            
                        if(barcodes.size() != 0){
                                success = trimOligos.stripBarcode(currSeq, barcodeIndex);
                                if(success > bdiffs)            {       trashCode += 'b';       }
                                else{ currentSeqDiffs += success;  }
                        }
                        
+            if(numSpacers != 0){
+                success = trimOligos.stripSpacer(currSeq);
+                if(success > sdiffs)           {       trashCode += 's';       }
+                else{ currentSeqDiffs += success;  }
+                
+            }
+            
                        if(numFPrimers != 0){
                                success = trimOligos.stripForward(currSeq, primerIndex);
                                if(success > pdiffs)            {       trashCode += 'f';       }
@@ -534,6 +555,10 @@ void TrimFlowsCommand::getOligos(vector<vector<string> >& outFlowFileNames){
 
                                        barcodes[oligo]=indexBarcode; indexBarcode++;
                                        barcodeNameVector.push_back(group);
+                               }else if(type == "LINKER"){
+                                       linker.push_back(oligo);
+                               }else if(type == "SPACER"){
+                                       spacer.push_back(oligo);
                                }
                                else{
                                        m->mothurOut(type + " is not recognized as a valid type. Choices are forward, reverse, and barcode. Ignoring " + oligo + "."); m->mothurOutEndLine();  
@@ -599,6 +624,8 @@ void TrimFlowsCommand::getOligos(vector<vector<string> >& outFlowFileNames){
                
                numFPrimers = primers.size();
                numRPrimers = revPrimer.size();
+        numLinkers = linker.size();
+        numSpacers = spacer.size();
                
        }
        catch(exception& e) {