parentParts.push_back(parent);
- if (q.length() > longest) { longest = q.length(); }
- if (p.length() > longest) { longest = p.length(); }
+ if (queryFrag->getUnaligned().length() > longest) { longest = queryFrag->getUnaligned().length(); }
+ if (parent->getUnaligned().length() > longest) { longest = parent->getUnaligned().length(); }
}
//align each peice to correct parent from results
for (int i = 0; i < queryParts.size(); i++) {
if ((queryParts[i]->getUnaligned() == "") || (parentParts[i]->getUnaligned() == "")) {;}
else {
- alignment = new NeedlemanOverlap(-2.0, match, misMatch, longest+1); //default gapopen, match, mismatch, longestbase
+ Alignment* alignment = new NeedlemanOverlap(-2.0, 1.0, -1.0, longest+1); //default gapopen, match, mismatch, longestbase
Nast nast(alignment, queryParts[i], parentParts[i]);
delete alignment;
private:
Sequence* querySeq;
- Alignment* alignment;
vector<Sequence*> templateSeqs;
int match, misMatch;
seqs.pop_back();
}
}
- cout << "got parents" << endl;
+
//put seqs into vector to send to slayer
vector<Sequence*> seqsForSlayer;
for (int k = 0; k < seqs.size(); k++) { seqsForSlayer.push_back(seqs[k].seq); }
}
//***************************************************************************************************************
//gets closest matches to each end, since chimeras will most likely have different parents on each end
-vector<Sequence*> DeCalculator::findClosest(Sequence* querySeq, vector<Sequence*>& thisTemplate, vector<Sequence*>& thisFilteredTemplate, int& numWanted) {
+vector<Sequence*> DeCalculator::findClosest(Sequence* querySeq, vector<Sequence*>& thisTemplate, vector<Sequence*>& thisFilteredTemplate, int numWanted) {
try {
//indexes.clear();
float lastLeft = distsLeft[0].dist;
//int lasti = 0;
for (int i = 0; i < numWanted+1; i++) {
+
+ if (m->control_pressed) { return seqsMatches; }
+
//add left if you havent already
it = seen.find(thisTemplate[distsLeft[i].index]->getName());
if (it == seen.end()) {
DeCalculator() { m = MothurOut::getInstance(); }
~DeCalculator() {};
- vector<Sequence*> findClosest(Sequence*, vector<Sequence*>&, vector<Sequence*>&, int&); //takes querySeq, a reference db, filteredRefDB, numWanted
+ vector<Sequence*> findClosest(Sequence*, vector<Sequence*>&, vector<Sequence*>&, int); //takes querySeq, a reference db, filteredRefDB, numWanted
Sequence* findClosest(Sequence*, vector<Sequence*>);
set<int> getPos() { return h; }
void setMask(string);
Sequence* q = new Sequence(query->getName(), query->getAligned());
Sequence* leftParent = new Sequence(refSeqs[i]->getName(), refSeqs[i]->getAligned());
Sequence* rightParent = new Sequence(refSeqs[j]->getName(), refSeqs[j]->getAligned());
- //cout << "parents: (" << refSeqs[i]->getName() << ", " << refSeqs[j]->getName() << ")\n";
+
map<int, int> spots; //map from spot in original sequence to spot in filtered sequence for query and both parents
vector<data_struct> divs = runBellerophon(q, leftParent, rightParent, spots);
- //cout << divs.size() << endl;
- if (m->control_pressed) {
- delete q;
- delete leftParent;
- delete rightParent;
- return "no";
- }
+
+ if (m->control_pressed) { delete q; delete leftParent; delete rightParent; return "no"; }
-// cout << divs.size() << endl;
vector<data_struct> selectedDivs;
for (int k = 0; k < divs.size(); k++) {
vector<snps> snpsLeft = getSNPS(divs[k].parentA.getAligned(), divs[k].querySeq.getAligned(), divs[k].parentB.getAligned(), divs[k].winLStart, divs[k].winLEnd);
vector<snps> snpsRight = getSNPS(divs[k].parentA.getAligned(), divs[k].querySeq.getAligned(), divs[k].parentB.getAligned(), divs[k].winRStart, divs[k].winREnd);
- //cout << refSeqs[i]->getName() << '\t' << refSeqs[j]->getName() << '\t' << k << divs[k].parentA.getAligned() << endl << divs[k].parentB.getAligned() << endl;
+
if (m->control_pressed) { delete q; delete leftParent; delete rightParent; return "no"; }
int numSNPSLeft = snpsLeft.size();