void SplitAbundCommand::help(){
try {
m->mothurOut("The split.abund command reads a fasta file and a list or a names file splits the sequences into rare and abundant groups. \n");
- m->mothurOut("The split.abund command parameters are list, name, cutoff, group, label, groups and accnos.\n");
+ m->mothurOut("The split.abund command parameters are fasta, list, name, cutoff, group, label, groups, cutoff and accnos.\n");
m->mothurOut("The fasta and a list or name parameter are required, and you must provide a cutoff value.\n");
m->mothurOut("The cutoff parameter is used to qualify what is abundant and rare.\n");
m->mothurOut("The group parameter allows you to parse a group file into rare and abundant groups.\n");
m->mothurOut("The groups parameter allows you to parse the files into rare and abundant files by group. \n");
m->mothurOut("For example if you set groups=A-B-C, you will get a .A.abund, .A.rare, .B.abund, .B.rare, .C.abund, .C.rare files. \n");
m->mothurOut("If you want .abund and .rare files for all groups, set groups=all. \n");
- m->mothurOut("The split.abund command should be used in the following format: split.abund(list=yourListFile, group=yourGroupFile, label=yourLabels, cutoff=yourCutoff).\n");
- m->mothurOut("Example: split.abundt(list=abrecovery.fn.list, group=abrecovery.groups, label=0.03, cutoff=2).\n");
+ m->mothurOut("The split.abund command should be used in the following format: split.abund(fasta=yourFasta, list=yourListFile, group=yourGroupFile, label=yourLabels, cutoff=yourCutoff).\n");
+ m->mothurOut("Example: split.abund(fasta=abrecovery.fasta, list=abrecovery.fn.list, group=abrecovery.groups, label=0.03, cutoff=2).\n");
m->mothurOut("Note: No spaces between parameter labels (i.e. list), '=' and parameters (i.e.yourListfile).\n\n");
}
if (abort == true) { return 0; }
if (listfile != "") { //you are using a listfile to determine abundance
+ if (outputDir == "") { outputDir = hasPath(listfile); }
//remove old files so you can append later....
string fileroot = outputDir + getRootName(getSimpleName(listfile));
remove((fileroot + "rare.list").c_str());
remove((fileroot + "abund.list").c_str());
- wroteListFile["rare"] = false;
- wroteListFile["abund"] = false;
+ outputNames.push_back((fileroot + "rare.list"));
+ outputNames.push_back((fileroot + "abund.list"));
}else{
for (int i=0; i<Groups.size(); i++) {
remove((fileroot + Groups[i] + ".rare.list").c_str());
remove((fileroot + Groups[i] + ".abund.list").c_str());
-
- wroteListFile[(Groups[i] + ".rare")] = false;
- wroteListFile[(Groups[i] + ".abund")] = false;
+
+ outputNames.push_back((fileroot + Groups[i] + ".rare.list"));
+ outputNames.push_back((fileroot + Groups[i] + ".abund.list"));
}
}
delete input;
- for (map<string, bool>::iterator itBool = wroteListFile.begin(); itBool != wroteListFile.end(); itBool++) {
- string filename = fileroot + itBool->first;
- if (itBool->second) { //we wrote to this file
- outputNames.push_back(filename);
- }else{
- remove(filename.c_str());
- }
- }
-
if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0; }
-
}else { //you are using the namefile to determine abundance
-
+ if (outputDir == "") { outputDir = hasPath(namefile); }
+
splitNames();
writeNames();
ofstream aout;
ofstream rout;
- if (rareNames.size() != 0) {
- string rare = outputDir + getRootName(getSimpleName(listfile)) + ".rare.list";
- wroteListFile["rare"] = true;
- openOutputFileAppend(rare, rout);
- rout << thisList->getLabel() << '\t' << numRareBins << '\t';
- }
+ string rare = outputDir + getRootName(getSimpleName(listfile)) + "rare.list";
+ openOutputFileAppend(rare, rout);
+ outputNames.push_back(rare);
- if (abundNames.size() != 0) {
- string abund = outputDir + getRootName(getSimpleName(listfile)) + ".abund.list";
- wroteListFile["abund"] = true;
- openOutputFileAppend(abund, aout);
- rout << thisList->getLabel() << '\t' << numAbundBins << '\t';
- }
+ string abund = outputDir + getRootName(getSimpleName(listfile)) + "abund.list";
+ openOutputFileAppend(abund, aout);
+ outputNames.push_back(abund);
+
+ if (rareNames.size() != 0) { rout << thisList->getLabel() << '\t' << numRareBins << '\t'; }
+ if (abundNames.size() != 0) { aout << thisList->getLabel() << '\t' << numAbundBins << '\t'; }
for (int i = 0; i < thisList->getNumBins(); i++) {
if (m->control_pressed) { break; }
else { aout << bin << '\t'; }
}
- if (rareNames.size() != 0) { rout << endl; rout.close(); }
- if (abundNames.size() != 0) { aout << endl; aout.close(); }
-
+ if (rareNames.size() != 0) { rout << endl; }
+ if (abundNames.size() != 0) { aout << endl; }
+
+ rout.close();
+ aout.close();
+
}else{ //parse names by abundance and group
string fileroot = outputDir + getRootName(getSimpleName(listfile));
ofstream* temp;
ofstream* temp2;
- map<string, bool> wroteFile;
+ //map<string, bool> wroteFile;
map<string, ofstream*> filehandles;
map<string, ofstream*>::iterator it3;
//end list vector
for (it3 = filehandles.begin(); it3 != filehandles.end(); it3++) {
(*(filehandles[it3->first])) << thisList->getLabel() << '\t' << groupNumBins[it3->first] << '\t' << groupVector[it3->first] << endl; // label numBins listvector for that group
- wroteListFile[it3->first] = true;
(*(filehandles[it3->first])).close();
delete it3->second;
}
ofstream aout;
ofstream rout;
+ string rare = outputDir + getRootName(getSimpleName(namefile)) + "rare.names";
+ openOutputFile(rare, rout);
+ outputNames.push_back(rare);
+
+ string abund = outputDir + getRootName(getSimpleName(namefile)) + "abund.names";
+ openOutputFile(abund, aout);
+ outputNames.push_back(abund);
+
if (rareNames.size() != 0) {
- string rare = outputDir + getRootName(getSimpleName(namefile)) + "rare.names";
- openOutputFile(rare, rout);
- outputNames.push_back(rare);
-
for (set<string>::iterator itRare = rareNames.begin(); itRare != rareNames.end(); itRare++) {
rout << (*itRare) << '\t' << nameMap[(*itRare)] << endl;
}
- rout.close();
}
+ rout.close();
if (abundNames.size() != 0) {
- string abund = outputDir + getRootName(getSimpleName(namefile)) + "abund.names";
- openOutputFile(abund, aout);
- outputNames.push_back(abund);
-
for (set<string>::iterator itAbund = abundNames.begin(); itAbund != abundNames.end(); itAbund++) {
aout << (*itAbund) << '\t' << nameMap[(*itAbund)] << endl;
}
- aout.close();
}
-
+ aout.close();
+
}else{ //parse names by abundance and group
string fileroot = outputDir + getRootName(getSimpleName(namefile));
ofstream* temp;
ofstream* temp2;
- map<string, bool> wroteFile;
map<string, ofstream*> filehandles;
map<string, ofstream*>::iterator it3;
openOutputFile(fileroot + Groups[i] + ".rare.names", *(filehandles[Groups[i]+".rare"]));
openOutputFile(fileroot + Groups[i] + ".abund.names", *(filehandles[Groups[i]+".abund"]));
-
- wroteFile[Groups[i] + ".rare"] = false;
- wroteFile[Groups[i] + ".abund"] = false;
}
for (map<string, string>::iterator itName = nameMap.begin(); itName != nameMap.end(); itName++) {
}
}
- for (itout = outputStrings.begin(); itout != outputStrings.end(); itout++) {
- *(filehandles[itout->first]) << itout->second << endl;
- wroteFile[itout->first] = true;
- }
+ for (itout = outputStrings.begin(); itout != outputStrings.end(); itout++) { *(filehandles[itout->first]) << itout->second << endl; }
}
for (it3 = filehandles.begin(); it3 != filehandles.end(); it3++) {
(*(filehandles[it3->first])).close();
- if (wroteFile[it3->first] == true) { outputNames.push_back(fileroot + it3->first + ".names"); }
- else { remove((it3->first).c_str()); }
+ outputNames.push_back(fileroot + it3->first + ".names");
delete it3->second;
}
}
ofstream aout;
ofstream rout;
- if (rareNames.size() != 0) {
- string rare = outputDir + getRootName(getSimpleName(inputFile)) + tag + "rare.accnos";
- openOutputFile(rare, rout);
- outputNames.push_back(rare);
-
- for (set<string>::iterator itRare = rareNames.begin(); itRare != rareNames.end(); itRare++) {
- rout << (*itRare) << endl;
- }
- rout.close();
+
+ string rare = outputDir + getRootName(getSimpleName(inputFile)) + tag + "rare.accnos";
+ openOutputFile(rare, rout);
+ outputNames.push_back(rare);
+
+ for (set<string>::iterator itRare = rareNames.begin(); itRare != rareNames.end(); itRare++) {
+ rout << (*itRare) << endl;
}
+ rout.close();
+
+ string abund = outputDir + getRootName(getSimpleName(inputFile)) + tag + "abund.accnos";
+ openOutputFile(abund, aout);
+ outputNames.push_back(abund);
- if (abundNames.size() != 0) {
- string abund = outputDir + getRootName(getSimpleName(inputFile)) + tag + "abund.accnos";
- openOutputFile(abund, aout);
- outputNames.push_back(abund);
-
- for (set<string>::iterator itAbund = abundNames.begin(); itAbund != abundNames.end(); itAbund++) {
- aout << (*itAbund) << endl;
- }
- aout.close();
+ for (set<string>::iterator itAbund = abundNames.begin(); itAbund != abundNames.end(); itAbund++) {
+ aout << (*itAbund) << endl;
}
+ aout.close();
+
}else{ //parse names by abundance and group
string fileroot = outputDir + getRootName(getSimpleName(inputFile));
ofstream* temp;
ofstream* temp2;
- map<string, bool> wroteFile;
map<string, ofstream*> filehandles;
map<string, ofstream*>::iterator it3;
openOutputFile(fileroot + tag + Groups[i] + ".rare.accnos", *(filehandles[Groups[i]+".rare"]));
openOutputFile(fileroot + tag + Groups[i] + ".abund.accnos", *(filehandles[Groups[i]+".abund"]));
-
- wroteFile[Groups[i] + ".rare"] = false;
- wroteFile[Groups[i] + ".abund"] = false;
}
//write rare
if (inUsersGroups(group, Groups)) { //only add if this is in a group we want
*(filehandles[group+".rare"]) << *itRare << endl;
- wroteFile[group+".rare"] = true;
}
}
if (inUsersGroups(group, Groups)) { //only add if this is in a group we want
*(filehandles[group+".abund"]) << *itAbund << endl;
- wroteFile[group+".abund"] = true;
}
}
//close files
for (it3 = filehandles.begin(); it3 != filehandles.end(); it3++) {
(*(filehandles[it3->first])).close();
- if (wroteFile[it3->first] == true) { outputNames.push_back(fileroot + tag + it3->first + ".accnos"); }
- else { remove((fileroot + tag + it3->first + ".accnos").c_str()); }
+ outputNames.push_back(fileroot + tag + it3->first + ".accnos");
delete it3->second;
}
}
ofstream aout;
ofstream rout;
- if (rareNames.size() != 0) {
- string rare = outputDir + getRootName(getSimpleName(groupfile)) + tag + "rare.groups";
- openOutputFile(rare, rout);
- outputNames.push_back(rare);
- }
+ string rare = outputDir + getRootName(getSimpleName(groupfile)) + tag + "rare.groups";
+ openOutputFile(rare, rout);
+ outputNames.push_back(rare);
+
+ string abund = outputDir + getRootName(getSimpleName(groupfile)) + tag + "abund.groups";
+ openOutputFile(abund, aout);
+ outputNames.push_back(abund);
- if (abundNames.size() != 0) {
- string abund = outputDir + getRootName(getSimpleName(groupfile)) + tag + "abund.groups";
- openOutputFile(abund, aout);
- outputNames.push_back(abund);
- }
-
-
for (map<string, string>::iterator itName = nameMap.begin(); itName != nameMap.end(); itName++) {
vector<string> names;
splitAtComma(itName->second, names); //parses bin into individual sequence names
if (rareNames.count(itName->first) != 0) { //you are a rare name
rout << names[i] << '\t' << group << endl;
}else{ //you are a abund name
- rout << names[i] << '\t' << group << endl;
+ aout << names[i] << '\t' << group << endl;
}
}
}
}
- if (rareNames.size() != 0) { rout.close(); }
- if (abundNames.size() != 0) { aout.close(); }
+ rout.close();
+ aout.close();
}else{ //parse names by abundance and group
string fileroot = outputDir + getRootName(getSimpleName(groupfile));
ofstream* temp;
ofstream* temp2;
- map<string, bool> wroteFile;
map<string, ofstream*> filehandles;
map<string, ofstream*>::iterator it3;
openOutputFile(fileroot + tag + Groups[i] + ".rare.groups", *(filehandles[Groups[i]+".rare"]));
openOutputFile(fileroot + tag + Groups[i] + ".abund.groups", *(filehandles[Groups[i]+".abund"]));
-
- wroteFile[Groups[i] + ".rare"] = false;
- wroteFile[Groups[i] + ".abund"] = false;
}
for (map<string, string>::iterator itName = nameMap.begin(); itName != nameMap.end(); itName++) {
if (inUsersGroups(group, Groups)) { //only add if this is in a group we want
*(filehandles[group+rareAbund]) << names[i] << '\t' << group << endl;
- wroteFile[group+rareAbund] = true;
}
}
}
for (it3 = filehandles.begin(); it3 != filehandles.end(); it3++) {
(*(filehandles[it3->first])).close();
- if (wroteFile[it3->first] == true) { outputNames.push_back(fileroot + tag + it3->first + ".groups"); }
- else { remove((fileroot + tag + it3->first + ".groups").c_str()); }
+ outputNames.push_back(fileroot + tag + it3->first + ".groups");
delete it3->second;
}
}
ofstream aout;
ofstream rout;
- if (rareNames.size() != 0) {
- string rare = outputDir + getRootName(getSimpleName(fastafile)) + tag + "rare.fasta";
- openOutputFile(rare, rout);
- outputNames.push_back(rare);
- }
-
- if (abundNames.size() != 0) {
- string abund = outputDir + getRootName(getSimpleName(fastafile)) + tag + "abund.fasta";
- openOutputFile(abund, aout);
- outputNames.push_back(abund);
- }
-
-
+ string rare = outputDir + getRootName(getSimpleName(fastafile)) + tag + "rare.fasta";
+ openOutputFile(rare, rout);
+ outputNames.push_back(rare);
+
+ string abund = outputDir + getRootName(getSimpleName(fastafile)) + tag + "abund.fasta";
+ openOutputFile(abund, aout);
+ outputNames.push_back(abund);
+
//open input file
ifstream in;
openInputFile(fastafile, in);
}
}
in.close();
- if (rareNames.size() != 0) { rout.close(); }
- if (abundNames.size() != 0) { aout.close(); }
+ rout.close();
+ aout.close();
}else{ //parse names by abundance and group
string fileroot = outputDir + getRootName(getSimpleName(fastafile));
ofstream* temp;
ofstream* temp2;
- map<string, bool> wroteFile;
map<string, ofstream*> filehandles;
map<string, ofstream*>::iterator it3;
openOutputFile(fileroot + tag + Groups[i] + ".rare.fasta", *(filehandles[Groups[i]+".rare"]));
openOutputFile(fileroot + tag + Groups[i] + ".abund.fasta", *(filehandles[Groups[i]+".abund"]));
-
- wroteFile[Groups[i] + ".rare"] = false;
- wroteFile[Groups[i] + ".abund"] = false;
}
//open input file
if (inUsersGroups(group, Groups)) { //only add if this is in a group we want
seq.printSequence(*(filehandles[group+rareAbund]));
- wroteFile[group+rareAbund] = true;
}else if(group == "not found") {
m->mothurOut(seq.getName() + " is not in your groupfile. Ignoring."); m->mothurOutEndLine();
}
for (it3 = filehandles.begin(); it3 != filehandles.end(); it3++) {
(*(filehandles[it3->first])).close();
- if (wroteFile[it3->first] == true) { outputNames.push_back(fileroot + tag + it3->first + ".fasta"); }
- else { remove((fileroot + tag + it3->first + ".fasta").c_str()); }
+ outputNames.push_back(fileroot + tag + it3->first + ".fasta");
delete it3->second;
}
}