X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=distancecommand.cpp;h=f7dff2e3cb3fb5e81cc8d17af0bcd8d303a5ab6a;hb=fc1ed1ae1b022719176910ab71993bd6535810ad;hp=b69b93d85c44c1fa89d08d49c0fb478b2f0cb242;hpb=c651c46022761aef61644f78462365d8f767ff0b;p=mothur.git diff --git a/distancecommand.cpp b/distancecommand.cpp index b69b93d..f7dff2e 100644 --- a/distancecommand.cpp +++ b/distancecommand.cpp @@ -8,11 +8,6 @@ */ #include "distancecommand.h" -#include "ignoregaps.h" -#include "eachgapdist.h" -#include "eachgapignore.h" -#include "onegapdist.h" -#include "onegapignore.h" //********************************************************************************************************************** vector DistanceCommand::setParameters(){ @@ -200,26 +195,6 @@ DistanceCommand::DistanceCommand(string option) { if ((column != "") && (oldfastafile != "") && (output != "column")) { m->mothurOut("You have provided column and oldfasta, indicating you want to append distances to your column file. Your output must be in column format to do so."); m->mothurOutEndLine(); abort=true; } 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"; } - - ValidCalculators validCalculator; - - if (m->isTrue(countends) == true) { - for (int i=0; icontrol_pressed) { outputTypes.clear(); delete distCalculator; m->mothurRemove(outputFile); return 0; } + if (m->control_pressed) { outputTypes.clear(); m->mothurRemove(outputFile); return 0; } #ifdef USE_MPI MPI_Comm_rank(MPI_COMM_WORLD, &pid); @@ -492,9 +467,7 @@ int DistanceCommand::execute(){ } #endif - if (m->control_pressed) { outputTypes.clear(); delete distCalculator; m->mothurRemove(outputFile); return 0; } - - delete distCalculator; + if (m->control_pressed) { outputTypes.clear(); m->mothurRemove(outputFile); return 0; } //set phylip file as new current phylipfile string current = ""; @@ -567,25 +540,80 @@ void DistanceCommand::createProcesses(string filename) { int temp = processIDS[i]; wait(&temp); } +#else + ////////////////////////////////////////////////////////////////////////////////////////////////////// + //Windows version shared memory, so be careful when passing variables through the distanceData struct. + //Above fork() will clone, so memory is separate, but that's not the case with windows, + //that's why the distance calculator was moved inside of the driver to make separate copies. + ////////////////////////////////////////////////////////////////////////////////////////////////////// + + vector pDataArray; //[processors-1]; + DWORD dwThreadIdArray[processors-1]; + HANDLE hThreadArray[processors-1]; + + //Create processor-1 worker threads. + for( int i=0; iappendFiles((filename + toString(processIDS[i]) + ".temp"), filename); m->mothurRemove((filename + toString(processIDS[i]) + ".temp")); } -#endif + } catch(exception& e) { m->errorOut(e, "DistanceCommand", "createProcesses"); exit(1); } } - /**************************************************************************************************/ /////// need to fix to work with calcs and sequencedb int DistanceCommand::driver(int startLine, int endLine, string dFileName, float cutoff){ try { - + ValidCalculators validCalculator; + Dist* distCalculator; + if (m->isTrue(countends) == true) { + for (int i=0; icontrol_pressed) { outFile.close(); return 0; } + if (m->control_pressed) { delete distCalculator; outFile.close(); return 0; } //if there was a column file given and we are appending, we don't want to calculate the distances that are already in the column file //the alignDB contains the new sequences and then the old, so if i an oldsequence and j is an old sequence then break out of this loop @@ -630,6 +658,7 @@ int DistanceCommand::driver(int startLine, int endLine, string dFileName, float m->mothurOut(toString(endLine-1) + "\t" + toString(time(NULL) - startTime)); m->mothurOutEndLine(); outFile.close(); + delete distCalculator; return 1; } @@ -642,7 +671,26 @@ int DistanceCommand::driver(int startLine, int endLine, string dFileName, float /////// need to fix to work with calcs and sequencedb int DistanceCommand::driver(int startLine, int endLine, string dFileName, string square){ try { - + ValidCalculators validCalculator; + Dist* distCalculator; + if (m->isTrue(countends) == true) { + for (int i=0; icontrol_pressed) { outFile.close(); return 0; } + if (m->control_pressed) { delete distCalculator; outFile.close(); return 0; } distCalculator->calcDist(alignDB.get(i), alignDB.get(j)); double dist = distCalculator->getDist(); @@ -680,6 +728,7 @@ int DistanceCommand::driver(int startLine, int endLine, string dFileName, string m->mothurOut(toString(endLine-1) + "\t" + toString(time(NULL) - startTime)); m->mothurOutEndLine(); outFile.close(); + delete distCalculator; return 1; } @@ -693,6 +742,28 @@ int DistanceCommand::driver(int startLine, int endLine, string dFileName, string /////// need to fix to work with calcs and sequencedb int DistanceCommand::driverMPI(int startLine, int endLine, MPI_File& outMPI, float cutoff){ try { + + ValidCalculators validCalculator; + Dist* distCalculator; + if (m->isTrue(countends) == true) { + for (int i=0; icontrol_pressed) { return 0; } + if (m->control_pressed) { delete distCalculator; return 0; } //if there was a column file given and we are appending, we don't want to calculate the distances that are already in the column file //the alignDB contains the new sequences and then the old, so if i an oldsequence and j is an old sequence then break out of this loop @@ -735,7 +806,8 @@ int DistanceCommand::driverMPI(int startLine, int endLine, MPI_File& outMPI, flo } //m->mothurOut(toString(endLine-1) + "\t" + toString(time(NULL) - startTime)); m->mothurOutEndLine(); - cout << (endLine-1) << '\t' << (time(NULL) - startTime) << endl; + cout << (endLine-1) << '\t' << (time(NULL) - startTime) << endl; + delete distCalculator; return 1; } catch(exception& e) { @@ -747,6 +819,27 @@ int DistanceCommand::driverMPI(int startLine, int endLine, MPI_File& outMPI, flo /////// need to fix to work with calcs and sequencedb int DistanceCommand::driverMPI(int startLine, int endLine, string file, unsigned long int& size){ try { + ValidCalculators validCalculator; + Dist* distCalculator; + if (m->isTrue(countends) == true) { + for (int i=0; icontrol_pressed) { return 0; } + if (m->control_pressed) { delete distCalculator; return 0; } distCalculator->calcDist(alignDB.get(i), alignDB.get(j)); double dist = distCalculator->getDist(); @@ -809,6 +902,7 @@ int DistanceCommand::driverMPI(int startLine, int endLine, string file, unsigned //m->mothurOut(toString(endLine-1) + "\t" + toString(time(NULL) - startTime)); m->mothurOutEndLine(); cout << (endLine-1) << '\t' << (time(NULL) - startTime) << endl; MPI_File_close(&outMPI); + delete distCalculator; return 1; } @@ -821,6 +915,26 @@ int DistanceCommand::driverMPI(int startLine, int endLine, string file, unsigned /////// need to fix to work with calcs and sequencedb int DistanceCommand::driverMPI(int startLine, int endLine, string file, unsigned long int& size, string square){ try { + ValidCalculators validCalculator; + Dist* distCalculator; + if (m->isTrue(countends) == true) { + for (int i=0; icontrol_pressed) { return 0; } + if (m->control_pressed) { delete distCalculator; return 0; } distCalculator->calcDist(alignDB.get(i), alignDB.get(j)); double dist = distCalculator->getDist(); @@ -883,7 +997,7 @@ int DistanceCommand::driverMPI(int startLine, int endLine, string file, unsigned //m->mothurOut(toString(endLine-1) + "\t" + toString(time(NULL) - startTime)); m->mothurOutEndLine(); cout << (endLine-1) << '\t' << (time(NULL) - startTime) << endl; MPI_File_close(&outMPI); - + delete distCalculator; return 1; } catch(exception& e) {