From: westcott <westcott> Date: Tue, 3 May 2011 13:15:50 +0000 (+0000) Subject: fixed bug with realigner for chimera slayer X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=9489965363593bb2a3e94f801b4079a32ddf8732;p=mothur.git fixed bug with realigner for chimera slayer --- diff --git a/chimerarealigner.cpp b/chimerarealigner.cpp index 48d9bc1..bfd283d 100644 --- a/chimerarealigner.cpp +++ b/chimerarealigner.cpp @@ -49,15 +49,15 @@ void ChimeraReAligner::reAlign(Sequence* query, vector<results> parents) { 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; diff --git a/chimerarealigner.h b/chimerarealigner.h index 4cee6eb..dec41ef 100644 --- a/chimerarealigner.h +++ b/chimerarealigner.h @@ -25,7 +25,6 @@ class ChimeraReAligner { private: Sequence* querySeq; - Alignment* alignment; vector<Sequence*> templateSeqs; int match, misMatch; diff --git a/chimeraslayer.cpp b/chimeraslayer.cpp index 5ba7625..5868a7c 100644 --- a/chimeraslayer.cpp +++ b/chimeraslayer.cpp @@ -811,7 +811,7 @@ int ChimeraSlayer::getChimeras(Sequence* query) { 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); } diff --git a/decalc.cpp b/decalc.cpp index def8097..4e38053 100644 --- a/decalc.cpp +++ b/decalc.cpp @@ -683,7 +683,7 @@ float DeCalculator::getCoef(vector<float> obs, vector<float> qav) { } //*************************************************************************************************************** //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(); @@ -790,6 +790,9 @@ vector<Sequence*> DeCalculator::findClosest(Sequence* querySeq, vector<Sequence* 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()) { diff --git a/decalc.h b/decalc.h index 34a470f..42e1441 100644 --- a/decalc.h +++ b/decalc.h @@ -39,7 +39,7 @@ class DeCalculator { 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); diff --git a/slayer.cpp b/slayer.cpp index 0ef7953..5ecb4ea 100644 --- a/slayer.cpp +++ b/slayer.cpp @@ -28,24 +28,18 @@ string Slayer::getResults(Sequence* query, vector<Sequence*> refSeqs) { 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();