]> git.donarmstrong.com Git - mothur.git/commitdiff
fixed bug with realigner for chimera slayer
authorwestcott <westcott>
Tue, 3 May 2011 13:15:50 +0000 (13:15 +0000)
committerwestcott <westcott>
Tue, 3 May 2011 13:15:50 +0000 (13:15 +0000)
chimerarealigner.cpp
chimerarealigner.h
chimeraslayer.cpp
decalc.cpp
decalc.h
slayer.cpp

index 48d9bc16a14b3afa8ad7588141cc9ffaaf2e03c2..bfd283db0d1b66db7df4606d980cc9d54dad58a7 100644 (file)
@@ -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;
index 4cee6eb020643e1b1ed356b597b856614b1b0d9b..dec41ef716eb9bcd35864bb461ade028786b2133 100644 (file)
@@ -25,7 +25,6 @@ class ChimeraReAligner  {
                                
        private:
                Sequence* querySeq;
-               Alignment* alignment;
                vector<Sequence*> templateSeqs;
                int match, misMatch;
                
index 5ba762517fdd8e94fc464c358eafd68190533e58..5868a7c721e69a9206a668536f35d02d573c9568 100644 (file)
@@ -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);  }
index def8097745a576681717c7443340d9af5bb62d81..4e38053beff596047cb56a7a50cf283b11d92f99 100644 (file)
@@ -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()) {  
index 34a470fa5f33470db6e69a296bfa21e137f7b7f7..42e14416004efbea78edb36e19bf6a799d3ab523 100644 (file)
--- 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); 
index 0ef795309a3f758c4f20e47e2e7504386aeaeb80..5ecb4ea7c5c430b34efc934b1e736915f363438c 100644 (file)
@@ -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();