#include "taxonomyequalizer.h"
/**************************************************************************************************/
-TaxEqualizer::TaxEqualizer(string tfile, int c) : cutoff(c) {
+TaxEqualizer::TaxEqualizer(string tfile, int c, string o) : cutoff(c), outputDir(o) {
try {
+ m = MothurOut::getInstance();
containsConfidence = false;
ifstream inTax;
- openInputFile(tfile, inTax);
+ m->openInputFile(tfile, inTax);
highestLevel = getHighestLevel(inTax);
-
- //if the user has specified a cutoff and it's smaller than the highest level
- if ((cutoff != -1) && (cutoff < highestLevel)) {
- highestLevel = cutoff;
- }else if (cutoff > highestLevel) {
- mothurOut("The highest level taxonomy you have is " + toString(highestLevel) + " and your cutoff is " + toString(cutoff) + ". I will set the cutoff to " + toString(highestLevel));
- mothurOutEndLine();
- }
-
- inTax.close();
- ifstream in;
- openInputFile(tfile, in);
-
- ofstream out;
- equalizedFile = getRootName(tfile) + "equalized.taxonomy";
- openOutputFile(equalizedFile, out);
- string name, tax;
- while (in) {
- in >> name >> tax; gobble(in);
+ if (!m->control_pressed) {
+
+ //if the user has specified a cutoff and it's smaller than the highest level
+ if ((cutoff != -1) && (cutoff < highestLevel)) {
+ highestLevel = cutoff;
+ }else if (cutoff > highestLevel) {
+ m->mothurOut("The highest level taxonomy you have is " + toString(highestLevel) + " and your cutoff is " + toString(cutoff) + ". I will set the cutoff to " + toString(highestLevel));
+ m->mothurOutEndLine();
+ }
- if (containsConfidence) { removeConfidences(tax); }
+ inTax.close();
+ ifstream in;
+ m->openInputFile(tfile, in);
- //is this a taxonomy that needs to be extended?
- if (seqLevels[name] < highestLevel) {
- extendTaxonomy(name, tax, highestLevel);
- }else if (seqLevels[name] > highestLevel) { //this can happen if the user enters a cutoff
- truncateTaxonomy(name, tax, highestLevel);
+ ofstream out;
+ equalizedFile = outputDir + m->getRootName(m->getSimpleName(tfile)) + "equalized.taxonomy";
+ m->openOutputFile(equalizedFile, out);
+
+
+ string name, tax;
+ while (in) {
+
+ if (m->control_pressed) { break; }
+
+ in >> name >> tax; m->gobble(in);
+
+ if (containsConfidence) { m->removeConfidences(tax); }
+
+ //is this a taxonomy that needs to be extended?
+ if (seqLevels[name] < highestLevel) {
+ extendTaxonomy(name, tax, highestLevel);
+ }else if (seqLevels[name] > highestLevel) { //this can happen if the user enters a cutoff
+ truncateTaxonomy(name, tax, highestLevel);
+ }
+
+ out << name << '\t' << tax << endl;
}
- out << name << '\t' << tax << endl;
- }
+ in.close();
+ out.close();
+
+ if (m->control_pressed) { m->mothurRemove(equalizedFile); }
+ }else { inTax.close(); }
- in.close();
- out.close();
-
}
catch(exception& e) {
- errorOut(e, "TaxEqualizer", "TaxEqualizer");
+ m->errorOut(e, "TaxEqualizer", "TaxEqualizer");
exit(1);
}
}
string name, tax;
while (in) {
- in >> name >> tax; gobble(in);
+ in >> name >> tax; m->gobble(in);
//count levels in this taxonomy
int thisLevel = 0;
//save sequences level
seqLevels[name] = thisLevel;
-
+
//is this the longest taxonomy?
if (thisLevel > level) {
level = thisLevel;
testTax = tax; //testTax is used to figure out if this file has confidences we need to strip out
- }
+ }
}
int pos = testTax.find_first_of('(');
//if there are '(' then there are confidences we need to take out
if (pos != -1) { containsConfidence = true; }
-
+
return level;
}
catch(exception& e) {
- errorOut(e, "TaxEqualizer", "getHighestLevel");
+ m->errorOut(e, "TaxEqualizer", "getHighestLevel");
exit(1);
}
}
}
}
catch(exception& e) {
- errorOut(e, "TaxEqualizer", "extendTaxonomy");
+ m->errorOut(e, "TaxEqualizer", "extendTaxonomy");
exit(1);
}
}
tax += ";";
}
catch(exception& e) {
- errorOut(e, "TaxEqualizer", "truncateTaxonomy");
+ m->errorOut(e, "TaxEqualizer", "truncateTaxonomy");
exit(1);
}
}
/**************************************************************************************************/
-void TaxEqualizer::removeConfidences(string& tax) {
- try {
-
- string taxon;
- string newTax = "";
-
- while (tax.find_first_of(';') != -1) {
- //get taxon
- taxon = tax.substr(0,tax.find_first_of(';'));
- taxon = taxon.substr(0, taxon.find_first_of('(')); //rip off confidence
- taxon += ";";
-
- tax = tax.substr(tax.find_first_of(';')+1, tax.length());
- newTax += taxon;
- }
-
- tax = newTax;
- }
- catch(exception& e) {
- errorOut(e, "TaxEqualizer", "removeConfidences");
- exit(1);
- }
-}
-
-/**************************************************************************************************/