//***************************************************************************************************************
-Bellerophon::Bellerophon(string name) {
+Bellerophon::Bellerophon(string name, string o) {
try {
fastafile = name;
+ outputDir = o;
}
catch(exception& e) {
errorOut(e, "Bellerophon", "Bellerophon");
}
//***************************************************************************************************************
-void Bellerophon::getChimeras() {
+int Bellerophon::getChimeras() {
try {
//do soft filter
if (filter) {
string optionString = "fasta=" + fastafile + ", soft=50";
+ if (outputDir != "") { optionString += ", outputdir=" + outputDir; }
+
filterSeqs = new FilterSeqsCommand(optionString);
filterSeqs->execute();
delete filterSeqs;
//reset fastafile to filtered file
- fastafile = getRootName(fastafile) + "filter.fasta";
+ if (outputDir == "") { fastafile = getRootName(fastafile) + "filter.fasta"; }
+ else { fastafile = outputDir + getRootName(getSimpleName(fastafile)) + "filter.fasta"; }
+
}
distCalculator = new eachGapDist();
//read in sequences
seqs = readSeqs(fastafile);
+ if (unaligned) { mothurOut("Your sequences need to be aligned when you use the bellerophon method."); mothurOutEndLine(); return 1; }
+
int numSeqs = seqs.size();
if (numSeqs == 0) { mothurOut("Error in reading you sequences."); mothurOutEndLine(); exit(1); }
}else{ increment = 0; }
}
-cout << "increment = " << increment << endl;
+
if (increment == 0) { iters = 1; }
else { iters = ((seqs[0]->getAlignLength() - (2*window)) / increment); }
vector<Sequence> left; vector<Sequence> right;
for (int i = 0; i < seqs.size(); i++) {
-//cout << "whole = " << seqs[i].getAligned() << endl;
+//cout << "midpoint = " << midpoint << "\twindow = " << window << endl;
+//cout << "whole = " << seqs[i]->getAligned().length() << endl;
//save left side
string seqLeft = seqs[i]->getAligned().substr(midpoint-window, window);
Sequence tempLeft;
tempLeft.setName(seqs[i]->getName());
tempLeft.setAligned(seqLeft);
left.push_back(tempLeft);
-//cout << "left = " << tempLeft.getAligned() << endl;
+//cout << "left = " << tempLeft.getAligned().length() << endl;
//save right side
string seqRight = seqs[i]->getAligned().substr(midpoint, window);
Sequence tempRight;
tempRight.setName(seqs[i]->getName());
tempRight.setAligned(seqRight);
right.push_back(tempRight);
-//cout << "right = " << seqRight << endl;
+//cout << "right = " << seqRight.length() << endl;
}
//adjust midpoint by increment
delete SparseLeft;
delete SparseRight;
-
//fill preference structure
generatePreferences(distMapLeft, distMapRight, midpoint);
//how much higher or lower is this than expected
pref[i].score[0] = pref[i].score[0] / expectedPercent;
-
-
-
+
}
//sort Preferences highest to lowest
sort(pref.begin(), pref.end(), comparePref);
+
+ return 0;
}
catch(exception& e) {
//calculate the dme
-
int count0 = 0;
for (int i = 0; i < pref.size(); i++) { dme += pref[i].score[1]; if (pref[i].score[1] == 0.0) { count0++; } }