X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=trimflowscommand.cpp;h=bb0fa0475d2bfbb344d025ae493a95c557712592;hb=1b49ed179327150ebf24d77b33d9b3e6872cc8c0;hp=960a59d3950e92590063f348f890c267a3123e12;hpb=902e0fcab76e75009ac43d3f4537e08182628d6f;p=mothur.git diff --git a/trimflowscommand.cpp b/trimflowscommand.cpp index 960a59d..bb0fa04 100644 --- a/trimflowscommand.cpp +++ b/trimflowscommand.cpp @@ -11,48 +11,47 @@ #include "needlemanoverlap.hpp" //********************************************************************************************************************** - -vector TrimFlowsCommand::getValidParameters(){ +vector TrimFlowsCommand::setParameters(){ try { - string Array[] = {"flow", "maxflows", "minflows", - "fasta", "minlength", "maxlength", "maxhomop", "signal", "noise" - "oligos", "pdiffs", "bdiffs", "tdiffs", - "allfiles", "processors", - "outputdir","inputdir" + CommandParameter pflow("flow", "InputTypes", "", "", "none", "none", "none",false,true); parameters.push_back(pflow); + CommandParameter poligos("oligos", "InputTypes", "", "", "none", "none", "none",false,false); parameters.push_back(poligos); + CommandParameter pmaxhomop("maxhomop", "Number", "", "9", "", "", "",false,false); parameters.push_back(pmaxhomop); + CommandParameter pmaxflows("maxflows", "Number", "", "720", "", "", "",false,false); parameters.push_back(pmaxflows); + CommandParameter pminflows("minflows", "Number", "", "360", "", "", "",false,false); parameters.push_back(pminflows); + CommandParameter pminlength("minlength", "Number", "", "0", "", "", "",false,false); parameters.push_back(pminlength); + CommandParameter pmaxlength("maxlength", "Number", "", "0", "", "", "",false,false); parameters.push_back(pmaxlength); + 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 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); + CommandParameter pallfiles("allfiles", "Boolean", "", "t", "", "", "",false,false); parameters.push_back(pallfiles); + CommandParameter porder("order", "String", "", "", "", "", "",false,false); parameters.push_back(porder); + CommandParameter pfasta("fasta", "Boolean", "", "F", "", "", "",false,false); parameters.push_back(pfasta); + CommandParameter pinputdir("inputdir", "String", "", "", "", "", "",false,false); parameters.push_back(pinputdir); + CommandParameter poutputdir("outputdir", "String", "", "", "", "", "",false,false); parameters.push_back(poutputdir); - }; - vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); - return myArray; - } - catch(exception& e) { - m->errorOut(e, "TrimFlowsCommand", "getValidParameters"); - exit(1); - } -} - -//********************************************************************************************************************** - -vector TrimFlowsCommand::getRequiredParameters(){ - try { - string Array[] = {"flow"}; - vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); + vector myArray; + for (int i = 0; i < parameters.size(); i++) { myArray.push_back(parameters[i].name); } return myArray; } catch(exception& e) { - m->errorOut(e, "TrimFlowsCommand", "getRequiredParameters"); + m->errorOut(e, "TrimFlowsCommand", "setParameters"); exit(1); } } - //********************************************************************************************************************** - -vector TrimFlowsCommand::getRequiredFiles(){ +string TrimFlowsCommand::getHelpString(){ try { - vector myArray; - return myArray; + string helpString = ""; + helpString += "The trim.flows command reads a flowgram file and creates .....\n"; + helpString += "Note: No spaces between parameter labels (i.e. fasta), '=' and parameters (i.e.yourFasta).\n"; + helpString += "For more details please check out the wiki http://www.mothur.org/wiki/Trim.flows.\n"; + return helpString; } catch(exception& e) { - m->errorOut(e, "TrimFlowsCommand", "getRequiredFiles"); + m->errorOut(e, "TrimFlowsCommand", "getHelpString"); exit(1); } } @@ -62,6 +61,7 @@ vector TrimFlowsCommand::getRequiredFiles(){ TrimFlowsCommand::TrimFlowsCommand(){ try { abort = true; calledHelp = true; + setParameters(); vector tempOutNames; outputTypes["flow"] = tempOutNames; outputTypes["fasta"] = tempOutNames; @@ -71,26 +71,6 @@ TrimFlowsCommand::TrimFlowsCommand(){ exit(1); } } - -//*************************************************************************************************************** - -TrimFlowsCommand::~TrimFlowsCommand(){ /* do nothing */ } - -//*************************************************************************************************************** - -void TrimFlowsCommand::help(){ - try { - m->mothurOut("The trim.flows command reads a flowgram file and creates .....\n"); - m->mothurOut("Note: No spaces between parameter labels (i.e. fasta), '=' and parameters (i.e.yourFasta).\n"); - m->mothurOut("For more details please check out the wiki http://www.mothur.org/wiki/Trim.flows.\n\n"); - - } - catch(exception& e) { - m->errorOut(e, "TrimFlowsCommand", "help"); - exit(1); - } -} - //********************************************************************************************************************** TrimFlowsCommand::TrimFlowsCommand(string option) { @@ -103,18 +83,8 @@ TrimFlowsCommand::TrimFlowsCommand(string option) { if(option == "help") { help(); abort = true; calledHelp = true; } else { - //valid paramters for this command - string AlignArray[] = {"flow", "maxflows", "minflows", - "fasta", "minlength", "maxlength", "maxhomop", "signal", "noise", - "oligos", "pdiffs", "bdiffs", "tdiffs", - "allfiles", "processors", - - // "group", - "outputdir","inputdir" - - }; - - vector myArray (AlignArray, AlignArray+(sizeof(AlignArray)/sizeof(string))); + + vector myArray = setParameters(); OptionParser parser(option); map parameters = parser.getParameters(); @@ -166,8 +136,14 @@ TrimFlowsCommand::TrimFlowsCommand(string option) { //check for required parameters flowFileName = validParameter.validFile(parameters, "flow", true); - if (flowFileName == "not found") { m->mothurOut("flow is a required parameter for the trim.flows command."); m->mothurOutEndLine(); abort = true; } - else if (flowFileName == "not open") { abort = true; } + if (flowFileName == "not found") { + flowFileName = m->getFlowFile(); + if (flowFileName != "") { m->mothurOut("Using " + flowFileName + " as input file for the flow parameter."); m->mothurOutEndLine(); } + else { + m->mothurOut("No valid current flow file. You must provide a flow file."); m->mothurOutEndLine(); + abort = true; + } + }else if (flowFileName == "not open") { flowFileName = ""; abort = true; } //if the user changes the output directory command factory will send this info to us in the output parameter outputDir = validParameter.validFile(parameters, "outputdir", false); if (outputDir == "not found"){ @@ -221,12 +197,19 @@ TrimFlowsCommand::TrimFlowsCommand(string option) { convert(temp, tdiffs); if(tdiffs == 0){ tdiffs = bdiffs + pdiffs; } - temp = validParameter.validFile(parameters, "allfiles", false); if (temp == "not found") { temp = "T"; } + temp = validParameter.validFile(parameters, "allfiles", false); if (temp == "not found"){ temp = "T"; } allFiles = m->isTrue(temp); - temp = validParameter.validFile(parameters, "processors", false); if (temp == "not found") { temp = "1"; } - convert(temp, processors); - + temp = validParameter.validFile(parameters, "processors", false); if (temp == "not found"){ temp = m->getProcessors(); } + m->setProcessors(temp); + convert(temp, processors); + + flowOrder = validParameter.validFile(parameters, "order", false); + if (flowOrder == "not found"){ flowOrder = "TACG"; } + else if(flowOrder.length() != 4){ + m->mothurOut("The value of the order option must be four bases long\n"); + } + if(oligoFileName == ""){ allFiles = 0; } numFPrimers = 0; @@ -322,6 +305,14 @@ int TrimFlowsCommand::execute(){ output.close(); } outputTypes["flow.files"].push_back(flowFilesFileName); + outputNames.push_back(flowFileName); + + //set fasta file as new current fastafile + string current = ""; + itTypes = outputTypes.find("fasta"); + if (itTypes != outputTypes.end()) { + if ((itTypes->second).size() != 0) { current = (itTypes->second)[0]; m->setFastaFile(current); } + } m->mothurOutEndLine(); m->mothurOut("Output File Names: "); m->mothurOutEndLine(); @@ -366,7 +357,7 @@ int TrimFlowsCommand::driverCreateTrim(string flowFileName, string trimFlowFileN } } - FlowData flowData(numFlows, signal, noise, maxHomoP); + FlowData flowData(numFlows, signal, noise, maxHomoP, flowOrder); ofstream fastaFile; if(fasta){ m->openOutputFile(fastaFileName, fastaFile); } @@ -431,15 +422,13 @@ int TrimFlowsCommand::driverCreateTrim(string flowFileName, string trimFlowFileN if(fasta) { currSeq.printSequence(fastaFile); } if(allFiles){ -// string fileName = outputDir + m->getRootName(m->getSimpleName(flowFileName)) + barcodePrimerCombos[barcodeIndex][primerIndex] + ".flow"; ofstream output; m->openOutputFileAppend(barcodePrimerComboFileNames[barcodeIndex][primerIndex], output); output.setf(ios::fixed, ios::floatfield); trimFlowFile.setf(ios::showpoint); flowData.printFlows(output); output.close(); - } - + } } else{ flowData.printFlows(scrapFlowFile, trashCode); @@ -733,7 +722,7 @@ int TrimFlowsCommand::stripForward(Sequence& seq, int& group){ string rawSequence = seq.getUnaligned(); int success = pdiffs + 1; //guilty until proven innocent - + //can you find the primer for(map::iterator it=primers.begin();it!=primers.end();it++){ string oligo = it->first;