From 3489799717f1f9002846bfd902d2886fc448f903 Mon Sep 17 00:00:00 2001
From: pschloss <pschloss>
Date: Sun, 8 May 2011 02:36:30 +0000
Subject: [PATCH] more chimera.slayer debugging

---
 chimeraslayer.cpp |  8 ++++++--
 maligner.cpp      | 24 ++++++++++++++++++++----
 maligner.h        |  2 +-
 slayer.cpp        |  3 ++-
 4 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/chimeraslayer.cpp b/chimeraslayer.cpp
index efd29d6..423f7c0 100644
--- a/chimeraslayer.cpp
+++ b/chimeraslayer.cpp
@@ -785,6 +785,7 @@ int ChimeraSlayer::getChimeras(Sequence* query) {
 
 			}
 			
+//			cout << query->getAligned() << endl;
 			//get sequence that were given from maligner results
 			vector<SeqDist> seqs;
 			map<string, float> removeDups;
@@ -792,9 +793,12 @@ int ChimeraSlayer::getChimeras(Sequence* query) {
 			map<string, string> parentNameSeq;
 			map<string, string>::iterator itSeq;
 			for (int j = 0; j < Results.size(); j++) {
+
 				float dist = (Results[j].regionEnd - Results[j].regionStart + 1) * Results[j].queryToParentLocal;
 				//only add if you are not a duplicate
-
+//				cout << Results[j].parent << '\t' << Results[j].regionEnd << '\t' << Results[j].regionStart << '\t' << Results[j].regionEnd - Results[j].regionStart +1 << '\t' << Results[j].queryToParentLocal << '\t' << dist << endl;
+				
+				
 				if(Results[j].queryToParentLocal >= 90){	//local match has to be over 90% similarity
 				
 					itDup = removeDups.find(Results[j].parent);
@@ -840,7 +844,7 @@ int ChimeraSlayer::getChimeras(Sequence* query) {
 			for (int k = 0; k < seqs.size(); k++) {  
 //				cout << seqs[k].seq->getAligned() << endl;
 				seqsForSlayer.push_back(seqs[k].seq);	
-			
+//				cout << seqs[k].seq->getName() << endl;
 			}
 			
 			if (m->control_pressed) {  for (int k = 0; k < seqs.size(); k++) {  delete seqs[k].seq;   }  return 0;  }
diff --git a/maligner.cpp b/maligner.cpp
index 1205cef..0cd8336 100644
--- a/maligner.cpp
+++ b/maligner.cpp
@@ -144,8 +144,8 @@ string Maligner::chimeraMaligner(int chimeraPenalty, DeCalculator* decalc) {
 			temp.parentAligned = db[seqIndex]->getAligned();
 			temp.nastRegionStart = spotMap[regionStart];
 			temp.nastRegionEnd = spotMap[regionEnd];
-			temp.regionStart = regionStart;
-			temp.regionEnd = regionEnd;
+			temp.regionStart = unalignedMap[regionStart];
+			temp.regionEnd = unalignedMap[regionEnd];
 			
 			string parentInRange = refSeqs[seqIndex]->getAligned();
 			parentInRange = parentInRange.substr(traceStart, (traceEnd-traceStart+1));
@@ -280,7 +280,22 @@ void Maligner::verticalFilter(vector<Sequence*> seqs) {
 			
 			seqs[i]->setAligned(newAligned);
 		}
-
+		
+		string query = seqs[seqs.size()-1]->getAligned();
+		int queryLength = query.length();
+		
+		unalignedMap.resize(queryLength, 0);
+		
+		
+		for(int i=1;i<queryLength;i++){
+			if(query[i] != '.' && query[i] != '-'){
+				unalignedMap[i] = unalignedMap[i-1] + 1;
+			}
+			else{
+				unalignedMap[i] = unalignedMap[i-1];
+			}
+		}
+		
 		spotMap = newMap;
 	}
 	catch(exception& e) {
@@ -436,12 +451,13 @@ vector<score_struct> Maligner::extractHighestPath(vector<vector<score_struct> >
 			}
 		}
 		
-//		cout << highestScore << endl;
 		vector<score_struct> path;
 		
 		int rowIndex = highestStruct.row;
 		int pos = highestStruct.col;
 		int score = highestStruct.score;
+
+//		cout << rowIndex << '\t' << pos << '\t' << score << endl;
 		
 		while (pos >= 0 && score > 0) {
 			score_struct temp = ms[rowIndex][pos];
diff --git a/maligner.h b/maligner.h
index da270d6..4f5c949 100644
--- a/maligner.h
+++ b/maligner.h
@@ -36,7 +36,7 @@ class Maligner {
 		float minDivR, percentIdenticalQueryChimera;
 		vector<results> outputResults;
 		map<int, int> spotMap;
-		
+		vector<int> unalignedMap;
 		vector<Sequence*> minCoverageFilter(vector<Sequence*>);  //removes top matches that do not have minimum coverage with query.
 		int computeChimeraPenalty();
 		void verticalFilter(vector<Sequence*>);
diff --git a/slayer.cpp b/slayer.cpp
index 8e17f87..92b4673 100644
--- a/slayer.cpp
+++ b/slayer.cpp
@@ -34,7 +34,7 @@ string Slayer::getResults(Sequence* query, vector<Sequence*> refSeqs) {
 				vector<data_struct> divs = runBellerophon(q, leftParent, rightParent, spots);
 	
 				if (m->control_pressed) { delete q; delete leftParent; delete rightParent; return "no"; }
-					
+//				cout << "examining:\t" << refSeqs[i]->getName() << '\t' << refSeqs[j]->getName() << endl;
 				vector<data_struct> selectedDivs;
 				for (int k = 0; k < divs.size(); k++) {
 					
@@ -46,6 +46,7 @@ string Slayer::getResults(Sequence* query, vector<Sequence*> refSeqs) {
 					int numSNPSLeft = snpsLeft.size();
 					int numSNPSRight = snpsRight.size();
 					
+//					cout << numSNPSLeft << '\t' << numSNPSRight << endl;
 					//require at least 4 SNPs on each side of the break
 					if ((numSNPSLeft >= 4) && (numSNPSRight >= 4)) {
 							
-- 
2.39.5