X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=pairwiseseqscommand.cpp;h=f69faff477aee954801f0d04bb3bce67f785d1e5;hb=f509429e06e545bde69c97cacc0eb436775bd329;hp=ed11dfbdd56e0ff480bfd281b944dcaa1fab34eb;hpb=a78fa674631a7d8a8d4e5043384ee244ed65cc09;p=mothur.git diff --git a/pairwiseseqscommand.cpp b/pairwiseseqscommand.cpp index ed11dfb..f69faff 100644 --- a/pairwiseseqscommand.cpp +++ b/pairwiseseqscommand.cpp @@ -19,7 +19,7 @@ vector PairwiseSeqsCommand::setParameters(){ CommandParameter pgapopen("gapopen", "Number", "", "-2.0", "", "", "",false,false); parameters.push_back(pgapopen); CommandParameter pgapextend("gapextend", "Number", "", "-1.0", "", "", "",false,false); parameters.push_back(pgapextend); CommandParameter pprocessors("processors", "Number", "", "1", "", "", "",false,false); parameters.push_back(pprocessors); - CommandParameter poutput("output", "Multiple", "column-lt-square", "column", "", "", "",false,false); parameters.push_back(poutput); + CommandParameter poutput("output", "Multiple", "column-lt-square-phylip", "column", "", "", "",false,false); parameters.push_back(poutput); CommandParameter pcalc("calc", "Multiple", "nogaps-eachgap-onegap", "onegap", "", "", "",false,false); parameters.push_back(pcalc); CommandParameter pcountends("countends", "Boolean", "", "T", "", "", "",false,false); parameters.push_back(pcountends); CommandParameter pcompress("compress", "Boolean", "", "F", "", "", "",false,false); parameters.push_back(pcompress); @@ -64,7 +64,27 @@ string PairwiseSeqsCommand::getHelpString(){ exit(1); } } - +//********************************************************************************************************************** +string PairwiseSeqsCommand::getOutputFileNameTag(string type, string inputName=""){ + try { + string outputFileName = ""; + map >::iterator it; + + //is this a type this command creates + it = outputTypes.find(type); + if (it == outputTypes.end()) { m->mothurOut("[ERROR]: this command doesn't create a " + type + " output file.\n"); } + else { + if (type == "phylip") { outputFileName = "dist"; } + else if (type == "column") { outputFileName = "dist"; } + else { m->mothurOut("[ERROR]: No definition for type " + type + " output file tag.\n"); m->control_pressed = true; } + } + return outputFileName; + } + catch(exception& e) { + m->errorOut(e, "PairwiseSeqsCommand", "getOutputFileNameTag"); + exit(1); + } +} //********************************************************************************************************************** PairwiseSeqsCommand::PairwiseSeqsCommand(){ try { @@ -203,12 +223,15 @@ PairwiseSeqsCommand::PairwiseSeqsCommand(string option) { temp = validParameter.validFile(parameters, "mismatch", false); if (temp == "not found"){ temp = "-1.0"; } m->mothurConvert(temp, misMatch); + if (misMatch > 0) { m->mothurOut("[ERROR]: mismatch must be negative.\n"); abort=true; } temp = validParameter.validFile(parameters, "gapopen", false); if (temp == "not found"){ temp = "-2.0"; } m->mothurConvert(temp, gapOpen); + if (gapOpen > 0) { m->mothurOut("[ERROR]: gapopen must be negative.\n"); abort=true; } temp = validParameter.validFile(parameters, "gapextend", false); if (temp == "not found"){ temp = "-1.0"; } m->mothurConvert(temp, gapExtend); + if (gapExtend > 0) { m->mothurOut("[ERROR]: gapextend must be negative.\n"); abort=true; } temp = validParameter.validFile(parameters, "processors", false); if (temp == "not found"){ temp = m->getProcessors(); } m->setProcessors(temp); @@ -226,6 +249,7 @@ PairwiseSeqsCommand::PairwiseSeqsCommand(string option) { align = validParameter.validFile(parameters, "align", false); if (align == "not found"){ align = "needleman"; } output = validParameter.validFile(parameters, "output", false); if(output == "not found"){ output = "column"; } + if (output=="phylip") { output = "lt"; } if ((output != "column") && (output != "lt") && (output != "square")) { m->mothurOut(output + " is not a valid output form. Options are column, lt and square. I will use column."); m->mothurOutEndLine(); output = "column"; } calc = validParameter.validFile(parameters, "calc", false); @@ -269,14 +293,14 @@ int PairwiseSeqsCommand::execute(){ string outputFile = ""; if (output == "lt") { //does the user want lower triangle phylip formatted file - outputFile = outputDir + m->getRootName(m->getSimpleName(fastaFileNames[s])) + "phylip.dist"; + outputFile = outputDir + m->getRootName(m->getSimpleName(fastaFileNames[s])) + "phylip." + getOutputFileNameTag("phylip"); m->mothurRemove(outputFile); outputTypes["phylip"].push_back(outputFile); }else if (output == "column") { //user wants column format - outputFile = outputDir + m->getRootName(m->getSimpleName(fastaFileNames[s])) + "dist"; + outputFile = outputDir + m->getRootName(m->getSimpleName(fastaFileNames[s])) + getOutputFileNameTag("column"); outputTypes["column"].push_back(outputFile); m->mothurRemove(outputFile); }else { //assume square - outputFile = outputDir + m->getRootName(m->getSimpleName(fastaFileNames[s])) + "square.dist"; + outputFile = outputDir + m->getRootName(m->getSimpleName(fastaFileNames[s])) + "square." + getOutputFileNameTag("phylip"); m->mothurRemove(outputFile); outputTypes["phylip"].push_back(outputFile); } @@ -393,7 +417,7 @@ int PairwiseSeqsCommand::execute(){ if (output != "square"){ driverMPI(start, end, (outputFile + toString(pid) + ".temp"), size); } else { driverMPI(start, end, (outputFile + toString(pid) + ".temp"), size, output); } - if (m->control_pressed) { delete distCalculator; return 0; } + if (m->control_pressed) { return 0; } //tell parent you are done. MPI_Send(&size, 1, MPI_LONG, 0, tag, MPI_COMM_WORLD); @@ -402,7 +426,7 @@ int PairwiseSeqsCommand::execute(){ MPI_Barrier(MPI_COMM_WORLD); //make everyone wait - just in case #else - //#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) + //#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix) //if you don't need to fork anything if(processors == 1){ if (output != "square") { driver(0, numSeqs, outputFile, cutoff); } @@ -494,7 +518,7 @@ void PairwiseSeqsCommand::createProcesses(string filename) { int process = 1; processIDS.clear(); -#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix) //loop through and create all the processes you want @@ -991,6 +1015,22 @@ int PairwiseSeqsCommand::driverMPI(int startLine, int endLine, string file, unsi alignment = new NeedlemanOverlap(gapOpen, match, misMatch, longestBase); } + ValidCalculators validCalculator; + Dist* distCalculator; + if (countends) { + if (validCalculator.isValidCalculator("distance", Estimators[0]) == true) { + if (Estimators[0] == "nogaps") { distCalculator = new ignoreGaps(); } + else if (Estimators[0] == "eachgap") { distCalculator = new eachGapDist(); } + else if (Estimators[0] == "onegap") { distCalculator = new oneGapDist(); } + } + }else { + if (validCalculator.isValidCalculator("distance", Estimators[0]) == true) { + if (Estimators[0] == "nogaps") { distCalculator = new ignoreGaps(); } + else if (Estimators[0] == "eachgap"){ distCalculator = new eachGapIgnoreTermGapDist(); } + else if (Estimators[0] == "onegap") { distCalculator = new oneGapIgnoreTermGapDist(); } + } + } + string outputString = ""; size = 0;