X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=chimerarealigner.cpp;h=a07e43392a1d96727d4870154bccef452119755b;hb=1d5962b46d9e72a2b855b4176d1c47df9a163fac;hp=1da327819ab446fe62fb965f36b48211d484b97e;hpb=2a7d1455e8cfe4f67a7173f3a7249762c5436217;p=mothur.git diff --git a/chimerarealigner.cpp b/chimerarealigner.cpp index 1da3278..a07e433 100644 --- a/chimerarealigner.cpp +++ b/chimerarealigner.cpp @@ -24,7 +24,7 @@ void ChimeraReAligner::reAlign(Sequence* query, vector parents) { string qAligned = query->getAligned(); string newQuery = ""; - + //sort parents by region start sort(parents.begin(), parents.end(), compareRegionStart); @@ -34,9 +34,9 @@ void ChimeraReAligner::reAlign(Sequence* query, vector parents) { //take query and break apart into pieces using breakpoints given by results of parents for (int i = 0; i < parents.size(); i++) { - int length = parents[i].nastRegionEnd - parents[i].nastRegionStart+1; string q = qAligned.substr(parents[i].nastRegionStart, length); + Sequence* queryFrag = new Sequence(query->getName(), q); queryParts.push_back(queryFrag); @@ -55,9 +55,13 @@ void ChimeraReAligner::reAlign(Sequence* query, vector parents) { //align each peice to correct parent from results for (int i = 0; i < queryParts.size(); i++) { - alignment = new NeedlemanOverlap(-2.0, match, misMatch, longest+1); //default gapopen, match, mismatch, longestbase - Nast nast(alignment, queryParts[i], parentParts[i]); - delete alignment; + if ((queryParts[i]->getUnaligned() == "") || (parentParts[i]->getUnaligned() == "")) {;} + else { + alignment = new NeedlemanOverlap(-2.0, match, misMatch, longest+1); //default gapopen, match, mismatch, longestbase + + Nast nast(alignment, queryParts[i], parentParts[i]); + delete alignment; + } } //recombine pieces to form new query sequence @@ -77,10 +81,10 @@ void ChimeraReAligner::reAlign(Sequence* query, vector parents) { //make sure you don't cutoff end of query if (parents[parents.size()-1].nastRegionEnd < (qAligned.length()-1)) { newQuery += qAligned.substr(parents[parents.size()-1].nastRegionEnd+1); } - + //set query to new aligned string query->setAligned(newQuery); - + //free memory for (int i = 0; i < queryParts.size(); i++) { delete queryParts[i]; } for (int i = 0; i < parentParts.size(); i++) { delete parentParts[i]; }