]> git.donarmstrong.com Git - mothur.git/commitdiff
changes to trim.flows command
authorpschloss <pschloss>
Tue, 8 Feb 2011 21:49:42 +0000 (21:49 +0000)
committerpschloss <pschloss>
Tue, 8 Feb 2011 21:49:42 +0000 (21:49 +0000)
Mothur.xcodeproj/project.pbxproj
flowdata.cpp
flowdata.h
trimflowscommand.cpp
trimflowscommand.h

index 7ddaecc7ba34325b972ba4682cd0ff17568eb2ea..9216cc134d2b406308a78eca23acb81648742e89 100644 (file)
                        attributes = {
                                ORGANIZATIONNAME = "Schloss Lab";
                        };
-                       buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "mothur" */;
+                       buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "Mothur" */;
                        compatibilityVersion = "Xcode 3.1";
                        developmentRegion = English;
                        hasScannedForEncodings = 1;
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "mothur" */ = {
+               1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "Mothur" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                                1DEB928A08733DD80010E9CD /* Debug */,
index eb6f9bfec3a88b05bf2dcd03a751b01b320430d0..39c1f8317a306c1a49488625725cbea7a4c6bd4e 100644 (file)
@@ -212,3 +212,16 @@ void FlowData::printFlows(ofstream& outFlowFile, string scrapCode){
 }
 
 //**********************************************************************************************************************
+
+string FlowData::getName(){
+       
+       try{
+               return seqName;
+       }
+       catch(exception& e) {
+               m->errorOut(e, "FlowData", "getSequence");
+               exit(1);
+       }
+}
+
+//**********************************************************************************************************************
index 09426f957f9a4ddee425fedd117d03786c9869ad..612ed37757ba942a6f4221660028ca819fdeac51 100644 (file)
@@ -21,7 +21,7 @@ public:
        FlowData(int, float, float, int);
        ~FlowData();
        bool getNext(ifstream&);
-
+       string getName();
        void capFlows(int);
        bool hasMinFlows(int);
        Sequence getSequence();
index 5c5d28b0390470ae05833f177fba7f7d1012e051..960a59d3950e92590063f348f890c267a3123e12 100644 (file)
 
 vector<string> TrimFlowsCommand::getValidParameters(){ 
        try {
-               string Array[] =  {"flow", "totalflows", "minflows",
+               string Array[] =  {"flow", "maxflows", "minflows",
                        "fasta", "minlength", "maxlength", "maxhomop", "signal", "noise"
                        "oligos", "pdiffs", "bdiffs", "tdiffs", 
                        "allfiles", "processors",
-
-
-                       
-//                     "group",
                        "outputdir","inputdir"
                
                };
@@ -108,7 +104,7 @@ TrimFlowsCommand::TrimFlowsCommand(string option)  {
                
                else {
                        //valid paramters for this command
-                       string AlignArray[] =  {"flow", "totalflows", "minflows",
+                       string AlignArray[] =  {"flow", "maxflows", "minflows",
                                "fasta", "minlength", "maxlength", "maxhomop", "signal", "noise",
                                "oligos", "pdiffs", "bdiffs", "tdiffs", 
                                "allfiles", "processors",
@@ -184,11 +180,11 @@ TrimFlowsCommand::TrimFlowsCommand(string option)  {
                        // ...at some point should added some additional type checking...
                        
                        string temp;
-                       temp = validParameter.validFile(parameters, "minflows", false);         if (temp == "not found") { temp = "360"; }
+                       temp = validParameter.validFile(parameters, "minflows", false); if (temp == "not found") { temp = "360"; }
                        convert(temp, minFlows);  
 
-                       temp = validParameter.validFile(parameters, "totalflows", false);       if (temp == "not found") { temp = "720"; }
-                       convert(temp, totalFlows);  
+                       temp = validParameter.validFile(parameters, "maxflows", false); if (temp == "not found") { temp = "720"; }
+                       convert(temp, maxFlows);  
                        
                        
                        temp = validParameter.validFile(parameters, "oligos", true);
@@ -284,10 +280,12 @@ int TrimFlowsCommand::execute(){
                
                if (m->control_pressed) {  return 0; }                  
                
+               string flowFilesFileName;
+               ofstream output;
+               
                if(allFiles){
                        
-                       ofstream output;
-                       string flowFilesFileName = outputDir + m->getRootName(m->getSimpleName(flowFileName)) + "flow.files";
+                       flowFilesFileName = outputDir + m->getRootName(m->getSimpleName(flowFileName)) + "flow.files";
                        m->openOutputFile(flowFilesFileName, output);
 
                        for(int i=0;i<barcodePrimerComboFileNames.size();i++){
@@ -306,17 +304,24 @@ int TrimFlowsCommand::execute(){
                                        }
 
                                        if(size < 10){
-//                                             m->mothurOut("deleting: " + barcodePrimerComboFileNames[i][j] + '\n');
                                                remove(barcodePrimerComboFileNames[i][j].c_str());
                                        }
                                        else{
-//                                             m->mothurOut("saving: " + barcodePrimerComboFileNames[i][j] + '\n');
                                                output << barcodePrimerComboFileNames[i][j] << endl;
                                        }
                                }
                        }
                        output.close();
                }
+               else{
+                       flowFilesFileName = outputDir + m->getRootName(m->getSimpleName(flowFileName)) + "flow.files";
+                       m->openOutputFile(flowFilesFileName, output);
+                       
+                       output << trimFlowFileName << endl;
+                       
+                       output.close();
+               }
+               outputTypes["flow.files"].push_back(flowFilesFileName);
                
                m->mothurOutEndLine();
                m->mothurOut("Output File Names: "); m->mothurOutEndLine();
@@ -346,17 +351,19 @@ int TrimFlowsCommand::driverCreateTrim(string flowFileName, string trimFlowFileN
                scrapFlowFile.setf(ios::fixed, ios::floatfield); scrapFlowFile.setf(ios::showpoint);
 
                if(line->start == 4){
-                       scrapFlowFile << totalFlows << endl;
-                       trimFlowFile << totalFlows << endl;
-                       for(int i=0;i<barcodePrimerComboFileNames.size();i++){
-                               for(int j=0;j<barcodePrimerComboFileNames[0].size();j++){
-                                       //                              barcodePrimerComboFileNames[i][j] += toString(getpid()) + ".temp";
-                                       ofstream temp;
-                                       m->openOutputFile(barcodePrimerComboFileNames[i][j], temp);
-                                       temp << totalFlows << endl;
-                                       temp.close();
-                               }
-                       }                       
+                       scrapFlowFile << maxFlows << endl;
+                       trimFlowFile << maxFlows << endl;
+                       if(allFiles){
+                               for(int i=0;i<barcodePrimerComboFileNames.size();i++){
+                                       for(int j=0;j<barcodePrimerComboFileNames[0].size();j++){
+                                               //                              barcodePrimerComboFileNames[i][j] += toString(getpid()) + ".temp";
+                                               ofstream temp;
+                                               m->openOutputFile(barcodePrimerComboFileNames[i][j], temp);
+                                               temp << maxFlows << endl;
+                                               temp.close();
+                                       }
+                               }                       
+                       }
                }
                
                FlowData flowData(numFlows, signal, noise, maxHomoP);
@@ -371,7 +378,7 @@ int TrimFlowsCommand::driverCreateTrim(string flowFileName, string trimFlowFileN
 
                int count = 0;
                bool moreSeqs = 1;
-               
+                       
                while(moreSeqs) {
                        
                        int success = 1;
@@ -379,7 +386,7 @@ int TrimFlowsCommand::driverCreateTrim(string flowFileName, string trimFlowFileN
                        string trashCode = "";
                        
                        flowData.getNext(flowFile);
-                       flowData.capFlows(totalFlows);  
+                       flowData.capFlows(maxFlows);    
                        
                        Sequence currSeq = flowData.getSequence();
                        if(!flowData.hasMinFlows(minFlows)){    //screen to see if sequence is of a minimum number of flows
@@ -395,7 +402,8 @@ int TrimFlowsCommand::driverCreateTrim(string flowFileName, string trimFlowFileN
                                }
                        }
                        
-                       int primerIndex, barcodeIndex;
+                       int primerIndex = 0;
+                       int barcodeIndex = 0;
                        
                        if(barcodes.size() != 0){
                                success = stripBarcode(currSeq, barcodeIndex);
@@ -415,16 +423,14 @@ int TrimFlowsCommand::driverCreateTrim(string flowFileName, string trimFlowFileN
                                success = stripReverse(currSeq);
                                if(!success)                            {       trashCode += 'r';       }
                        }
-                                               
-                               
+
                        if(trashCode.length() == 0){
+                                                       
                                flowData.printFlows(trimFlowFile);
+                       
+                               if(fasta)       {       currSeq.printSequence(fastaFile);       }
                                
-                               if(fasta){
-                                       currSeq.printSequence(fastaFile);
-                               }
-                               
-                               if(barcodes.size() != 0 || primers.size() != 0){
+                               if(allFiles){
 //                                     string fileName = outputDir + m->getRootName(m->getSimpleName(flowFileName)) + barcodePrimerCombos[barcodeIndex][primerIndex] + ".flow";
                                        ofstream output;
                                        m->openOutputFileAppend(barcodePrimerComboFileNames[barcodeIndex][primerIndex], output);
@@ -541,13 +547,27 @@ void TrimFlowsCommand::getOligos(vector<vector<string> >& outFlowFileNames){
                }
                oligosFile.close();
                
-               //add in potential combos       
+               if(barcodeNameVector.size() == 0 && primerNameVector[0] == ""){ allFiles = 0;   }
+               
+               //add in potential combos
+               if(barcodeNameVector.size() == 0){
+                       barcodes[""] = 0;
+                       barcodeNameVector.push_back("");                        
+               }
+               
+               if(primerNameVector.size() == 0){
+                       primers[""] = 0;
+                       primerNameVector.push_back("");                 
+               }
+               
+               
                outFlowFileNames.resize(barcodeNameVector.size());
                for(int i=0;i<outFlowFileNames.size();i++){
                        outFlowFileNames[i].assign(primerNameVector.size(), "");
                }
                
                if(allFiles){
+
                        for(map<string, int>::iterator itBar = barcodes.begin();itBar != barcodes.end();itBar++){
                                for(map<string, int>::iterator itPrimer = primers.begin();itPrimer != primers.end(); itPrimer++){
 
@@ -562,7 +582,12 @@ void TrimFlowsCommand::getOligos(vector<vector<string> >& outFlowFileNames){
                                                fileName = outputDir + m->getRootName(m->getSimpleName(flowFileName)) + comboGroupName + ".flow";
                                        }
                                        else{
-                                               comboGroupName = barcodeNameVector[itBar->second] + "." + primerNameVector[itPrimer->second];
+                                               if(barcodeName == ""){
+                                                       comboGroupName = primerNameVector[itPrimer->second];
+                                               }
+                                               else{
+                                                       comboGroupName = barcodeNameVector[itBar->second] + "." + primerNameVector[itPrimer->second];
+                                               }
                                                fileName = outputDir + m->getRootName(m->getSimpleName(flowFileName)) + comboGroupName + ".flow";
                                        }
                                        
@@ -726,7 +751,7 @@ int TrimFlowsCommand::stripForward(Sequence& seq, int& group){
                }
                
                //if you found the barcode or if you don't want to allow for diffs
-               if ((pdiffs == 0) || (success == 0)) { return success;  }
+               if ((pdiffs == 0) || (success == 0)) {  return success;  }
                
                else { //try aligning and see if you can find it
                        
@@ -1016,16 +1041,17 @@ int TrimFlowsCommand::createProcessesCreateTrim(string flowFileName, string trim
                        }else if (pid == 0){
                                
                                vector<vector<string> > tempBarcodePrimerComboFileNames = barcodePrimerComboFileNames;
-                               for(int i=0;i<tempBarcodePrimerComboFileNames.size();i++){
-                                       for(int j=0;j<tempBarcodePrimerComboFileNames[0].size();j++){
-                                               tempBarcodePrimerComboFileNames[i][j] += toString(getpid()) + ".temp";
-                                               ofstream temp;
-                                               m->openOutputFile(tempBarcodePrimerComboFileNames[i][j], temp);
-                                               temp.close();
-                                               
+                               if(allFiles){
+                                       for(int i=0;i<tempBarcodePrimerComboFileNames.size();i++){
+                                               for(int j=0;j<tempBarcodePrimerComboFileNames[0].size();j++){
+                                                       tempBarcodePrimerComboFileNames[i][j] += toString(getpid()) + ".temp";
+                                                       ofstream temp;
+                                                       m->openOutputFile(tempBarcodePrimerComboFileNames[i][j], temp);
+                                                       temp.close();
+                                                       
+                                               }
                                        }
                                }
-                                               
                                driverCreateTrim(flowFileName,
                                                                 (trimFlowFileName + toString(getpid()) + ".temp"),
                                                                 (scrapFlowFileName + toString(getpid()) + ".temp"),
index 15c698c2ffe6075101ab1105ff60f579c349c425..99103ba25af92565be2e0879c0904603aea5990c 100644 (file)
@@ -61,7 +61,7 @@ private:
        bool allFiles;
        int processors;
        int numFPrimers, numRPrimers;
-       int totalFlows, minFlows, minLength, maxLength, maxHomoP, tdiffs, bdiffs, pdiffs;
+       int maxFlows, minFlows, minLength, maxLength, maxHomoP, tdiffs, bdiffs, pdiffs;
        int numFlows;
        float signal, noise;
        bool fasta;