X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=distancecommand.cpp;h=3711a1d52c796006a354e3a341e4ba250fd8cf20;hb=bf83aa09a52403a2faf1a1f82489d1e0c8c32283;hp=edb6314427a423f216ab5ab6576305d8c0b51687;hpb=cbb336d5650cfe1f83a398a837794dcfbbbd3756;p=mothur.git diff --git a/distancecommand.cpp b/distancecommand.cpp index edb6314..3711a1d 100644 --- a/distancecommand.cpp +++ b/distancecommand.cpp @@ -14,6 +14,7 @@ #include "onegapdist.h" #include "onegapignore.h" + //********************************************************************************************************************** vector DistanceCommand::getValidParameters(){ try { @@ -48,7 +49,7 @@ vector DistanceCommand::getRequiredParameters(){ return myArray; } catch(exception& e) { - m->errorOut(e, "ChopSeqsCommand", "getRequiredParameters"); + m->errorOut(e, "DistanceCommand", "getRequiredParameters"); exit(1); } } @@ -210,13 +211,7 @@ DistanceCommand::DistanceCommand(string option) { //********************************************************************************************************************** -DistanceCommand::~DistanceCommand(){ - - for(int i=0;istart = int (sqrt(float(i)/float(processors)) * numSeqs); - lines[i]->end = int (sqrt(float(i+1)/float(processors)) * numSeqs); + lines[i].start = int (sqrt(float(i)/float(processors)) * numSeqs); + lines[i].end = int (sqrt(float(i+1)/float(processors)) * numSeqs); }else{ - lines[i]->start = int ((float(i)/float(processors)) * numSeqs); - lines[i]->end = int ((float(i+1)/float(processors)) * numSeqs); + lines[i].start = int ((float(i)/float(processors)) * numSeqs); + lines[i].end = int ((float(i+1)/float(processors)) * numSeqs); } - //cout << i << '\t' << lines[i]->start << '\t' << lines[i]->end << endl; + } - + createProcesses(outputFile); } #else @@ -540,34 +536,35 @@ void DistanceCommand::createProcesses(string filename) { int pid = fork(); if (pid > 0) { - processIDS[lines[process]->end] = pid; //create map from line number to pid so you can append files in correct order later + processIDS.push_back(pid); //create map from line number to pid so you can append files in correct order later process++; }else if (pid == 0){ - if (output != "square") { driver(lines[process]->start, lines[process]->end, filename + toString(getpid()) + ".temp", cutoff); } - else { driver(lines[process]->start, lines[process]->end, filename + toString(getpid()) + ".temp", "square"); } + if (output != "square") { driver(lines[process].start, lines[process].end, filename + toString(getpid()) + ".temp", cutoff); } + else { driver(lines[process].start, lines[process].end, filename + toString(getpid()) + ".temp", "square"); } exit(0); }else { m->mothurOut("[ERROR]: unable to spawn the necessary processes. Error code: " + toString(pid)); m->mothurOutEndLine(); - for (map::iterator it = processIDS.begin(); it != processIDS.end(); it++) { int temp = it->second; kill (temp, SIGINT); } + perror(" : "); + for (int i=0;istart, lines[0]->end, filename, cutoff); } - else { driver(lines[0]->start, lines[0]->end, filename, "square"); } + if (output != "square") { driver(lines[0].start, lines[0].end, filename, cutoff); } + else { driver(lines[0].start, lines[0].end, filename, "square"); } //force parent to wait until all the processes are done - for (map::iterator it = processIDS.begin(); it != processIDS.end(); it++) { - int temp = it->second; + for (int i=0;i::iterator it = processIDS.begin(); it != processIDS.end(); it++) { - m->appendFiles((filename + toString(it->second) + ".temp"), filename); - remove((filename + toString(it->second) + ".temp").c_str()); + for (int i=0;iappendFiles((filename + toString(processIDS[i]) + ".temp"), filename); + remove((filename + toString(processIDS[i]) + ".temp").c_str()); } #endif } @@ -1156,7 +1153,7 @@ bool DistanceCommand::sanityCheck() { } catch(exception& e) { - m->errorOut(e, "DistanceCommand", "m->appendFiles"); + m->errorOut(e, "DistanceCommand", "sanityCheck"); exit(1); } }