inFastaName = m->getFastaFile();
if (inFastaName != "") { m->mothurOut("Using " + inFastaName + " as input file for the fasta parameter."); m->mothurOutEndLine(); }
else { m->mothurOut("You have no current fastafile and the fasta parameter is required."); m->mothurOutEndLine(); abort = true; }
- }
+ }else { m->setFastaFile(inFastaName); }
//if the user changes the output directory command factory will send this info to us in the output parameter
outputDir = validParameter.validFile(parameters, "outputdir", false); if (outputDir == "not found"){
}
oldNameMapFName = validParameter.validFile(parameters, "name", true);
- if (oldNameMapFName == "not open") { abort = true; }
+ if (oldNameMapFName == "not open") { oldNameMapFName = ""; abort = true; }
else if (oldNameMapFName == "not found"){ oldNameMapFName = ""; }
+ else { m->setNameFile(oldNameMapFName); }
+
+ if (oldNameMapFName == "") {
+ vector<string> files; files.push_back(inFastaName);
+ parser.getNameFile(files);
+ }
+
}
}
map<string, string> nameMap;
map<string, string>::iterator itNames;
- if (oldNameMapFName != "") { m->readNames(oldNameMapFName, nameMap); }
+ if (oldNameMapFName != "") {
+ m->readNames(oldNameMapFName, nameMap);
+ if (oldNameMapFName == outNameFile){ outNameFile = outputDir + m->getRootName(m->getSimpleName(inFastaName)) + "unique.names"; }
+ }
if (m->control_pressed) { return 0; }
map<string, string>::iterator itStrings;
set<string> nameInFastaFile; //for sanity checking
set<string>::iterator itname;
+ vector<string> nameFileOrder;
int count = 0;
while (!in.eof()) {
- if (m->control_pressed) { in.close(); outFasta.close(); remove(outFastaFile.c_str()); return 0; }
+ if (m->control_pressed) { in.close(); outFasta.close(); m->mothurRemove(outFastaFile); return 0; }
Sequence seq(in);
m->mothurOut("[ERROR]: " + seq.getName() + " is in your fasta file, and not in your namefile, please correct."); m->mothurOutEndLine();
}else {
sequenceStrings[seq.getAligned()] = itNames->second;
+ nameFileOrder.push_back(seq.getAligned());
}
- }else { sequenceStrings[seq.getAligned()] = seq.getName(); }
+ }else { sequenceStrings[seq.getAligned()] = seq.getName(); nameFileOrder.push_back(seq.getAligned()); }
}else { //this is a dup
if (oldNameMapFName != "") {
itNames = nameMap.find(seq.getName());
in.close();
outFasta.close();
- if (m->control_pressed) { remove(outFastaFile.c_str()); return 0; }
+ if (m->control_pressed) { m->mothurRemove(outFastaFile); return 0; }
//print new names file
ofstream outNames;
m->openOutputFile(outNameFile, outNames);
- for (itStrings = sequenceStrings.begin(); itStrings != sequenceStrings.end(); itStrings++) {
- if (m->control_pressed) { outputTypes.clear(); remove(outFastaFile.c_str()); outNames.close(); remove(outNameFile.c_str()); return 0; }
+ for (int i = 0; i < nameFileOrder.size(); i++) {
+ //for (itStrings = sequenceStrings.begin(); itStrings != sequenceStrings.end(); itStrings++) {
+ if (m->control_pressed) { outputTypes.clear(); m->mothurRemove(outFastaFile); outNames.close(); m->mothurRemove(outNameFile); return 0; }
- //get rep name
- int pos = (itStrings->second).find_first_of(',');
+ itStrings = sequenceStrings.find(nameFileOrder[i]);
- if (pos == string::npos) { // only reps itself
- outNames << itStrings->second << '\t' << itStrings->second << endl;
- }else {
- outNames << (itStrings->second).substr(0, pos) << '\t' << itStrings->second << endl;
- }
+ if (itStrings != sequenceStrings.end()) {
+ //get rep name
+ int pos = (itStrings->second).find_first_of(',');
+
+ if (pos == string::npos) { // only reps itself
+ outNames << itStrings->second << '\t' << itStrings->second << endl;
+ }else {
+ outNames << (itStrings->second).substr(0, pos) << '\t' << itStrings->second << endl;
+ }
+ }else{ m->mothurOut("[ERROR]: mismatch in namefile print."); m->mothurOutEndLine(); m->control_pressed = true; }
}
outNames.close();
- if (m->control_pressed) { outputTypes.clear(); remove(outFastaFile.c_str()); remove(outNameFile.c_str()); return 0; }
+ if (m->control_pressed) { outputTypes.clear(); m->mothurRemove(outFastaFile); m->mothurRemove(outNameFile); return 0; }
m->mothurOutEndLine();
m->mothurOut("Output File Names: "); m->mothurOutEndLine();