#include "needlemanoverlap.hpp"
//**********************************************************************************************************************
-
-vector<string> TrimFlowsCommand::getValidParameters(){
+vector<string> 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 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<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
+ vector<string> myArray;
+ for (int i = 0; i < parameters.size(); i++) { myArray.push_back(parameters[i].name); }
return myArray;
}
catch(exception& e) {
- m->errorOut(e, "TrimFlowsCommand", "getValidParameters");
+ m->errorOut(e, "TrimFlowsCommand", "setParameters");
exit(1);
}
}
-
//**********************************************************************************************************************
-
-vector<string> TrimFlowsCommand::getRequiredParameters(){
+string TrimFlowsCommand::getHelpString(){
try {
- string Array[] = {"flow"};
- vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
- 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", "getRequiredParameters");
- exit(1);
- }
-}
-
-//**********************************************************************************************************************
-
-vector<string> TrimFlowsCommand::getRequiredFiles(){
- try {
- vector<string> myArray;
- return myArray;
- }
- catch(exception& e) {
- m->errorOut(e, "TrimFlowsCommand", "getRequiredFiles");
+ m->errorOut(e, "TrimFlowsCommand", "getHelpString");
exit(1);
}
}
TrimFlowsCommand::TrimFlowsCommand(){
try {
abort = true; calledHelp = true;
+ setParameters();
vector<string> tempOutNames;
outputTypes["flow"] = tempOutNames;
outputTypes["fasta"] = tempOutNames;
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) {
//allow user to run help
if(option == "help") { help(); abort = true; calledHelp = true; }
+ else if(option == "citation") { citation(); 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<string> myArray (AlignArray, AlignArray+(sizeof(AlignArray)/sizeof(string)));
+
+ vector<string> myArray = setParameters();
OptionParser parser(option);
map<string,string> parameters = parser.getParameters();
if (path == "") { parameters["oligos"] = inputDir + it->second; }
}
-
-// it = parameters.find("group");
-// //user has given a template file
-// if(it != parameters.end()){
-// path = m->hasPath(it->second);
-// //if the user has not given a path then, add inputdir. else leave path alone.
-// if (path == "") { parameters["group"] = inputDir + it->second; }
-// }
}
//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"){
// ...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 = "450"; }
convert(temp, minFlows);
- temp = validParameter.validFile(parameters, "maxflows", false); if (temp == "not found") { temp = "720"; }
+ temp = validParameter.validFile(parameters, "maxflows", false); if (temp == "not found") { temp = "450"; }
convert(temp, maxFlows);
temp = validParameter.validFile(parameters, "oligos", true);
if (temp == "not found") { oligoFileName = ""; }
else if(temp == "not open") { abort = true; }
- else { oligoFileName = temp; }
+ else { oligoFileName = temp; m->setOligosFile(oligoFileName); }
temp = validParameter.validFile(parameters, "fasta", false); if (temp == "not found"){ fasta = 0; }
else if(m->isTrue(temp)) { fasta = 1; }
temp = validParameter.validFile(parameters, "noise", false); if (temp == "not found"){ temp = "0.70"; }
convert(temp, noise);
-
- temp = validParameter.validFile(parameters, "minlength", false); if (temp == "not found"){ temp = "0"; }
- convert(temp, minLength);
-
- temp = validParameter.validFile(parameters, "maxlength", false); if (temp == "not found"){ temp = "0"; }
- convert(temp, maxLength);
-
+
temp = validParameter.validFile(parameters, "bdiffs", false); if (temp == "not found"){ temp = "0"; }
convert(temp, bdiffs);
convert(temp, tdiffs);
if(tdiffs == 0){ tdiffs = bdiffs + pdiffs; }
- 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);
-
- if(oligoFileName == ""){ allFiles = 0; }
+ 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; }
+ else { allFiles = 1; }
numFPrimers = 0;
numRPrimers = 0;
if (pFile==NULL) perror ("Error opening file");
else{
fseek (pFile, 0, SEEK_END);
- size=ftell (pFile);
+ size=ftell(pFile);
fclose (pFile);
}
}
else{
output << barcodePrimerComboFileNames[i][j] << endl;
+ outputNames.push_back(barcodePrimerComboFileNames[i][j]);
+ outputTypes["flow"].push_back(barcodePrimerComboFileNames[i][j]);
}
}
}
output.close();
}
outputTypes["flow.files"].push_back(flowFilesFileName);
- outputNames.push_back(flowFileName);
+ outputNames.push_back(flowFilesFileName);
+
+// 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();
}
}
- FlowData flowData(numFlows, signal, noise, maxHomoP);
+ FlowData flowData(numFlows, signal, noise, maxHomoP, flowOrder);
ofstream fastaFile;
if(fasta){ m->openOutputFile(fastaFileName, fastaFile); }
trashCode += 'l';
}
- if(minLength > 0 || maxLength > 0){ //screen to see if sequence is above and below a specific number of bases
- int seqLength = currSeq.getNumBases();
- if(seqLength < minLength || seqLength > maxLength){
- success = 0;
- trashCode += 'l';
- }
- }
-
int primerIndex = 0;
int barcodeIndex = 0;
fileName = outputDir + m->getRootName(m->getSimpleName(flowFileName)) + comboGroupName + ".flow";
}
- outputNames.push_back(fileName);
- outputTypes["flow"].push_back(fileName);
outFlowFileNames[itBar->second][itPrimer->second] = fileName;
ofstream temp;
if (barcodes.size() > 0) {
map<string,int>::iterator it=barcodes.begin();
- for(it;it!=barcodes.end();it++){
+ for(map<string,int>::iterator it=barcodes.begin();it!=barcodes.end();it++){
if(it->first.length() > maxLength){
maxLength = it->first.length();
}
string rawSequence = seq.getUnaligned();
int success = pdiffs + 1; //guilty until proven innocent
-
+
//can you find the primer
for(map<string,int>::iterator it=primers.begin();it!=primers.end();it++){
string oligo = it->first;