]> git.donarmstrong.com Git - mothur.git/blobdiff - maligner.cpp
added parameter to chimera.uchime
[mothur.git] / maligner.cpp
index 1205cef5e36b8bb4381f5ae8bb516c30e934318d..f4c4a9821350c38a9bde8ca7a4fcd6ae01d6b3c3 100644 (file)
@@ -42,7 +42,7 @@ string Maligner::getResults(Sequence* q, DeCalculator* decalc) {
                }
                
                int chimeraPenalty = computeChimeraPenalty();
-               
+       
                //fills outputResults
                chimera = chimeraMaligner(chimeraPenalty, decalc);
                
@@ -95,7 +95,7 @@ string Maligner::chimeraMaligner(int chimeraPenalty, DeCalculator* decalc) {
                if (m->control_pressed) { return chimera;  }
                
                vector<trace_struct> trace = mapTraceRegionsToAlignment(path, refSeqs);
-                       
+                               
                if (trace.size() > 1) {         chimera = "yes";        }
                else { chimera = "no";  return chimera; }
                
@@ -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));
@@ -161,7 +161,7 @@ string Maligner::chimeraMaligner(int chimeraPenalty, DeCalculator* decalc) {
                        
                        temp.queryToParentLocal = computePercentID(queryInRegion, parentInRegion);
                        
-//                     cout << query->getName() << '\t' << temp.parent << '\t' << "NAST:" << temp.nastRegionStart << '-' << temp.nastRegionEnd << " G:" << temp.queryToParent << " L:" << temp.queryToParentLocal << ", " <<  temp.divR << endl;
+                       //cout << query->getName() << '\t' << temp.parent << '\t' << "NAST:" << temp.nastRegionStart << '-' << temp.nastRegionEnd << " G:" << temp.queryToParent << " L:" << temp.queryToParentLocal << ", " <<  temp.divR << endl;
 
                        outputResults.push_back(temp);
                }
@@ -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];
@@ -474,7 +490,7 @@ vector<trace_struct> Maligner::mapTraceRegionsToAlignment(vector<score_struct> p
                for (int i = 1; i < path.size(); i++) {
                        
                        int next_region_index = path[i].row;
-//                     cout << i << '\t' << next_region_index << endl;
+                       //cout << i << '\t' << next_region_index << endl;
 
                        if (next_region_index != region_index) {