exit(1);
}
}
-
+//**********************************************************************************************************************
+string PreClusterCommand::getOutputFileNameTag(string type, string inputName=""){
+ try {
+ string outputFileName = "";
+ map<string, vector<string> >::iterator it;
+
+ //is this a type this command creates
+ it = outputTypes.find(type);
+ if (it == outputTypes.end()) { m->mothurOut("[ERROR]: this command doesn't create a " + type + " output file.\n"); }
+ else {
+ if (type == "fasta") { outputFileName = "precluster" + m->getExtension(inputName); }
+ else if (type == "name") { outputFileName = "precluster.names"; }
+ else if (type == "map") { outputFileName = "precluster.map"; }
+ else { m->mothurOut("[ERROR]: No definition for type " + type + " output file tag.\n"); m->control_pressed = true; }
+ }
+ return outputFileName;
+ }
+ catch(exception& e) {
+ m->errorOut(e, "PreClusterCommand", "getOutputFileNameTag");
+ exit(1);
+ }
+}
//**********************************************************************************************************************
PreClusterCommand::PreClusterCommand(){
try {
int start = time(NULL);
string fileroot = outputDir + m->getRootName(m->getSimpleName(fastafile));
- string newFastaFile = fileroot + "precluster" + m->getExtension(fastafile);
- string newNamesFile = fileroot + "precluster.names";
- string newMapFile = fileroot + "precluster.map"; //add group name if by group
+ string newFastaFile = fileroot + getOutputFileNameTag("fasta", fastafile);
+ string newNamesFile = fileroot + getOutputFileNameTag("name");
+ string newMapFile = fileroot + getOutputFileNameTag("map"); //add group name if by group
outputNames.push_back(newFastaFile); outputTypes["fasta"].push_back(newFastaFile);
outputNames.push_back(newNamesFile); outputTypes["name"].push_back(newNamesFile);
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();
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();
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
//////////////////////////////////////////////////////////////////////////////////////////////////////