From 9489965363593bb2a3e94f801b4079a32ddf8732 Mon Sep 17 00:00:00 2001 From: westcott Date: Tue, 3 May 2011 13:15:50 +0000 Subject: [PATCH] fixed bug with realigner for chimera slayer --- chimerarealigner.cpp | 6 +++--- chimerarealigner.h | 1 - chimeraslayer.cpp | 2 +- decalc.cpp | 5 ++++- decalc.h | 2 +- slayer.cpp | 14 ++++---------- 6 files changed, 13 insertions(+), 17 deletions(-) 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 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 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 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 obs, vector qav) { } //*************************************************************************************************************** //gets closest matches to each end, since chimeras will most likely have different parents on each end -vector DeCalculator::findClosest(Sequence* querySeq, vector& thisTemplate, vector& thisFilteredTemplate, int& numWanted) { +vector DeCalculator::findClosest(Sequence* querySeq, vector& thisTemplate, vector& thisFilteredTemplate, int numWanted) { try { //indexes.clear(); @@ -790,6 +790,9 @@ vector DeCalculator::findClosest(Sequence* querySeq, vectorcontrol_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 findClosest(Sequence*, vector&, vector&, int&); //takes querySeq, a reference db, filteredRefDB, numWanted + vector findClosest(Sequence*, vector&, vector&, int); //takes querySeq, a reference db, filteredRefDB, numWanted Sequence* findClosest(Sequence*, vector); set 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 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 spots; //map from spot in original sequence to spot in filtered sequence for query and both parents vector 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 selectedDivs; for (int k = 0; k < divs.size(); k++) { vector snpsLeft = getSNPS(divs[k].parentA.getAligned(), divs[k].querySeq.getAligned(), divs[k].parentB.getAligned(), divs[k].winLStart, divs[k].winLEnd); vector 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(); -- 2.39.5