X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=pairwiseseqscommand.cpp;h=f261dd91ff256f953fed82114e42e3d79ff7f5cc;hb=173a1a82a4e4aa6bef8e4ba77bce342fb9c6563e;hp=18412fdeac778159551d32e8573edd1dddc321bf;hpb=cdf9083dc32543cc640e72e9ca3aee0323cbad45;p=mothur.git diff --git a/pairwiseseqscommand.cpp b/pairwiseseqscommand.cpp index 18412fd..f261dd9 100644 --- a/pairwiseseqscommand.cpp +++ b/pairwiseseqscommand.cpp @@ -442,27 +442,18 @@ int PairwiseSeqsCommand::execute(){ }else{ //you have multiple processors for (int i = 0; i < processors; i++) { - lines.push_back(new linePair()); + distlinePair tempLine; + lines.push_back(tempLine); if (output != "square") { - lines[i]->start = 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); } } - - createProcesses(outputFile); - - map::iterator it = processIDS.begin(); - rename((outputFile + toString(it->second) + ".temp").c_str(), outputFile.c_str()); - it++; - //append and remove temp files - for (; it != processIDS.end(); it++) { - m->appendFiles((outputFile + toString(it->second) + ".temp"), outputFile); - remove((outputFile + toString(it->second) + ".temp").c_str()); - } + createProcesses(outputFile); } #else //ifstream inFASTA; @@ -522,7 +513,7 @@ int PairwiseSeqsCommand::execute(){ void PairwiseSeqsCommand::createProcesses(string filename) { try { #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) - int process = 0; + int process = 1; processIDS.clear(); //loop through and create all the processes you want @@ -530,24 +521,35 @@ void PairwiseSeqsCommand::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); 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."); m->mothurOutEndLine(); - for (map::iterator it = processIDS.begin(); it != processIDS.end(); it++) { int temp = it->second; kill (temp, SIGINT); } + for (int i=0;i::iterator it = processIDS.begin(); it != processIDS.end(); it++) { - int temp = it->second; + for (int i=0;iappendFiles((filename + toString(processIDS[i]) + ".temp"), filename); + remove((filename + toString(processIDS[i]) + ".temp").c_str()); + } #endif } catch(exception& e) {