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();