X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=preclustercommand.cpp;h=bcff0fcd820a497da04405bef0ddb42d7d60ded9;hb=15b252e317fde72ce0a5de8776cb88112e0ed2b6;hp=8e4f3274a490679c85f992f8584605c877c84850;hpb=d6c0a11d1cecfac18b323285e7ffadb7f58e848f;p=mothur.git diff --git a/preclustercommand.cpp b/preclustercommand.cpp index 8e4f327..bcff0fc 100644 --- a/preclustercommand.cpp +++ b/preclustercommand.cpp @@ -217,17 +217,19 @@ int PreClusterCommand::execute(){ m->mothurOutEndLine(); m->mothurOut("/******************************************/"); m->mothurOutEndLine(); m->mothurOut("Running command: unique.seqs(" + inputString + ")"); m->mothurOutEndLine(); - + m->mothurCalling = true; + Command* uniqueCommand = new DeconvoluteCommand(inputString); uniqueCommand->execute(); map > filenames = uniqueCommand->getOutputFiles(); delete uniqueCommand; - + m->mothurCalling = false; m->mothurOut("/******************************************/"); m->mothurOutEndLine(); m->renameFile(filenames["fasta"][0], newFastaFile); + m->renameFile(filenames["name"][0], newNamesFile); m->mothurOut("It took " + toString(time(NULL) - start) + " secs to run pre.cluster."); m->mothurOutEndLine(); @@ -302,7 +304,7 @@ int PreClusterCommand::createProcessesGroups(SequenceParser* parser, string newF lines.push_back(linePair(startIndex, endIndex)); } -#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix) //loop through and create all the processes you want while (process != processors) { @@ -312,7 +314,17 @@ int PreClusterCommand::createProcessesGroups(SequenceParser* parser, string newF 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){ + outputNames.clear(); num = driverGroups(parser, newFName + toString(getpid()) + ".temp", newNName + toString(getpid()) + ".temp", newMFile, lines[process].start, lines[process].end, groups); + + string tempFile = toString(getpid()) + ".outputNames.temp"; + ofstream outTemp; + m->openOutputFile(tempFile, outTemp); + + outTemp << outputNames.size(); + for (int i = 0; i < outputNames.size(); i++) { outTemp << outputNames[i] << endl; } + outTemp.close(); + exit(0); }else { m->mothurOut("[ERROR]: unable to spawn the necessary processes."); m->mothurOutEndLine(); @@ -329,7 +341,23 @@ int PreClusterCommand::createProcessesGroups(SequenceParser* parser, string newF int temp = processIDS[i]; wait(&temp); } - + + for (int i = 0; i < processIDS.size(); i++) { + string tempFile = toString(processIDS[i]) + ".outputNames.temp"; + ifstream intemp; + m->openInputFile(tempFile, intemp); + + int num; + intemp >> num; + for (int k = 0; k < num; k++) { + string name = ""; + intemp >> name; m->gobble(intemp); + + outputNames.push_back(name); outputTypes["map"].push_back(name); + } + intemp.close(); + m->mothurRemove(tempFile); + } #else ////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -553,6 +581,7 @@ int PreClusterCommand::readFASTA(){ //inNames.close(); if (lengths.size() > 1) { m->control_pressed = true; m->mothurOut("[ERROR]: your sequences are not all the same length. pre.cluster requires sequences to be aligned."); m->mothurOutEndLine(); } + else if (lengths.size() == 1) { length = *(lengths.begin()); } return alignSeqs.size(); } @@ -598,6 +627,7 @@ int PreClusterCommand::loadSeqs(map& thisName, vector& } if (lengths.size() > 1) { error = true; m->mothurOut("[ERROR]: your sequences are not all the same length. pre.cluster requires sequences to be aligned."); m->mothurOutEndLine(); } + else if (lengths.size() == 1) { length = *(lengths.begin()); } //sanity check if (error) { m->control_pressed = true; }