X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=filterseqscommand.cpp;h=8b68988884acb408d0e72c5c3fa407a7b9f241b6;hp=a7d42b331bc3044de372c030175da4663f9e3a9c;hb=b206f634aae1b4ce13978d203247fb64757d5482;hpb=0caf3fbabaa3ece404f8ce77f4c883dc5b1bf1dc diff --git a/filterseqscommand.cpp b/filterseqscommand.cpp index a7d42b3..8b68988 100644 --- a/filterseqscommand.cpp +++ b/filterseqscommand.cpp @@ -14,14 +14,14 @@ //********************************************************************************************************************** vector FilterSeqsCommand::setParameters(){ try { - CommandParameter pfasta("fasta", "InputTypes", "", "", "none", "none", "none",false,true); parameters.push_back(pfasta); - CommandParameter phard("hard", "InputTypes", "", "", "none", "none", "none",false,false); parameters.push_back(phard); - CommandParameter ptrump("trump", "String", "", "*", "", "", "",false,false); parameters.push_back(ptrump); - CommandParameter psoft("soft", "Number", "", "0", "", "", "",false,false); parameters.push_back(psoft); - CommandParameter pvertical("vertical", "Boolean", "", "T", "", "", "",false,false); parameters.push_back(pvertical); - CommandParameter pprocessors("processors", "Number", "", "1", "", "", "",false,false); parameters.push_back(pprocessors); - CommandParameter pinputdir("inputdir", "String", "", "", "", "", "",false,false); parameters.push_back(pinputdir); - CommandParameter poutputdir("outputdir", "String", "", "", "", "", "",false,false); parameters.push_back(poutputdir); + CommandParameter pfasta("fasta", "InputTypes", "", "", "none", "none", "none","fasta-filter",false,true, true); parameters.push_back(pfasta); + CommandParameter phard("hard", "InputTypes", "", "", "none", "none", "none","",false,false); parameters.push_back(phard); + CommandParameter ptrump("trump", "String", "", "*", "", "", "","",false,false, true); parameters.push_back(ptrump); + CommandParameter psoft("soft", "Number", "", "0", "", "", "","",false,false); parameters.push_back(psoft); + CommandParameter pvertical("vertical", "Boolean", "", "T", "", "", "","",false,false, true); parameters.push_back(pvertical); + CommandParameter pprocessors("processors", "Number", "", "1", "", "", "","",false,false, true); parameters.push_back(pprocessors); + CommandParameter pinputdir("inputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(pinputdir); + CommandParameter poutputdir("outputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(poutputdir); vector myArray; for (int i = 0; i < parameters.size(); i++) { myArray.push_back(parameters[i].name); } @@ -57,6 +57,22 @@ string FilterSeqsCommand::getHelpString(){ } } //********************************************************************************************************************** +string FilterSeqsCommand::getOutputPattern(string type) { + try { + string pattern = ""; + + if (type == "fasta") { pattern = "[filename],filter.fasta"; } + else if (type == "filter") { pattern = "[filename],filter"; } + else { m->mothurOut("[ERROR]: No definition for type " + type + " output pattern.\n"); m->control_pressed = true; } + + return pattern; + } + catch(exception& e) { + m->errorOut(e, "FilterSeqsCommand", "getOutputPattern"); + exit(1); + } +} +//********************************************************************************************************************** FilterSeqsCommand::FilterSeqsCommand(){ try { abort = true; calledHelp = true; @@ -277,9 +293,10 @@ int FilterSeqsCommand::execute() { ofstream outFilter; //prevent giantic file name - string filterFile; - if (fastafileNames.size() > 3) { filterFile = outputDir + "merge.filter"; } - else { filterFile = outputDir + filterFileName + ".filter"; } + map variables; + variables["[filename]"] = outputDir + filterFileName + "."; + if (fastafileNames.size() > 3) { variables["[filename]"] = outputDir + "merge."; } + string filterFile = getOutputFileName("filter", variables); m->openOutputFile(filterFile, outFilter); outFilter << filter << endl; @@ -342,7 +359,9 @@ int FilterSeqsCommand::filterSequences() { for (int i = 0; i < lines.size(); i++) { delete lines[i]; } lines.clear(); - string filteredFasta = outputDir + m->getRootName(m->getSimpleName(fastafileNames[s])) + "filter.fasta"; + map variables; + variables["[filename]"] = outputDir + m->getRootName(m->getSimpleName(fastafileNames[s])); + string filteredFasta = getOutputFileName("fasta", variables); #ifdef USE_MPI int pid, numSeqsPerProcessor, num; int tag = 2001; @@ -539,7 +558,7 @@ int FilterSeqsCommand::driverMPIRun(int start, int num, MPI_File& inMPI, MPI_Fil } - if((i+1) % 100 == 0){ cout << (i+1) << endl; m->mothurOutJustToLog(toString(i+1) + "\n"); } + if((i+1) % 100 == 0){ cout << (i+1) << endl; } } if(outputString != ""){ //output to file @@ -553,7 +572,7 @@ int FilterSeqsCommand::driverMPIRun(int start, int num, MPI_File& inMPI, MPI_Fil delete buf; } - if((num) % 100 != 0){ cout << (num) << endl; m->mothurOutJustToLog(toString(num) + "\n"); } + if((num) % 100 != 0){ cout << (num) << endl; } return 0; } @@ -604,10 +623,10 @@ int FilterSeqsCommand::driverRunFilter(string F, string outputFilename, string i #endif //report progress - if((count) % 100 == 0){ m->mothurOut(toString(count)); m->mothurOutEndLine(); } + if((count) % 100 == 0){ m->mothurOutJustToScreen(toString(count)+"\n"); } } //report progress - if((count) % 100 != 0){ m->mothurOut(toString(count)); m->mothurOutEndLine(); } + if((count) % 100 != 0){ m->mothurOutJustToScreen(toString(count)+"\n"); } out.close(); @@ -710,6 +729,9 @@ int FilterSeqsCommand::createProcessesRunFilter(string F, string filename, strin //Close all thread handles and free memory allocations. for(int i=0; i < pDataArray.size(); i++){ num += pDataArray[i]->count; + if (pDataArray[i]->count != pDataArray[i]->end) { + m->mothurOut("[ERROR]: process " + toString(i) + " only processed " + toString(pDataArray[i]->count) + " of " + toString(pDataArray[i]->end) + " sequences assigned to it, quitting. \n"); m->control_pressed = true; + } CloseHandle(hThreadArray[i]); delete pDataArray[i]; } @@ -984,10 +1006,10 @@ int FilterSeqsCommand::driverCreateFilter(Filters& F, string filename, linePair* #endif //report progress - if((count) % 100 == 0){ m->mothurOut(toString(count)); m->mothurOutEndLine(); } + if((count) % 100 == 0){ m->mothurOutJustToScreen(toString(count)+"\n"); } } //report progress - if((count) % 100 != 0){ m->mothurOut(toString(count)); m->mothurOutEndLine(); } + if((count) % 100 != 0){ m->mothurOutJustToScreen(toString(count)+"\n"); } in.close(); return count; @@ -1030,11 +1052,11 @@ int FilterSeqsCommand::MPICreateFilter(int start, int num, Filters& F, MPI_File& cout.flush(); //report progress - if((i+1) % 100 == 0){ cout << (i+1) << endl; m->mothurOutJustToLog(toString(i+1) + "\n"); } + if((i+1) % 100 == 0){ cout << (i+1) << endl; } } //report progress - if((num) % 100 != 0){ cout << num << endl; m->mothurOutJustToLog(toString(num) + "\n"); } + if((num) % 100 != 0){ cout << num << endl; } return 0; } @@ -1157,6 +1179,9 @@ int FilterSeqsCommand::createProcessesCreateFilter(Filters& F, string filename) //Close all thread handles and free memory allocations. for(int i=0; i < pDataArray.size(); i++){ num += pDataArray[i]->count; + if (pDataArray[i]->count != pDataArray[i]->end) { + m->mothurOut("[ERROR]: process " + toString(i) + " only processed " + toString(pDataArray[i]->count) + " of " + toString(pDataArray[i]->end) + " sequences assigned to it, quitting. \n"); m->control_pressed = true; + } F.mergeFilter(pDataArray[i]->F.getFilter()); for (int k = 0; k < alignmentLength; k++) { F.a[k] += pDataArray[i]->F.a[k]; }