X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=nast.cpp;h=9cdf1b26619a170b7f7d67cc9edc60d89d66559a;hb=515c3398ea27e2105f616fc5662b2a7ceb486aa0;hp=50d3b2440f3a2523257d20faabba51098b345cd4;hpb=2a07f8664a7fd1ef0d572b88e8b5bede24cc0b3c;p=mothur.git diff --git a/nast.cpp b/nast.cpp index 50d3b24..9cdf1b2 100644 --- a/nast.cpp +++ b/nast.cpp @@ -38,13 +38,12 @@ Nast::Nast(Alignment* method, Sequence* cand, Sequence* temp) : alignment(method void Nast::pairwiseAlignSeqs(){ // Here we call one of the pairwise alignment methods to align our unaligned candidate // and template sequences - try { - + try { alignment->align(candidateSeq->getUnaligned(), templateSeq->getUnaligned()); string candAln = alignment->getSeqAAln(); string tempAln = alignment->getSeqBAln(); - + if(candAln == ""){ candidateSeq->setPairwise(""); @@ -91,11 +90,16 @@ void Nast::removeExtraGaps(string& candAln, string tempAln, string newTemplateAl // here we do steps C-F of Fig. 2 from DeSantis et al. try { + //cout << candAln << endl; + //cout << tempAln << endl; + //cout << newTemplateAlign << endl; + //cout << endl; + int longAlignmentLength = newTemplateAlign.length(); for(int i=0; i move stuff left there's if(leftRoom >= insertLength){ // enough room to the left to move + //cout << "lr newTemplateAlign = " << newTemplateAlign.length() << '\t' << i << '\t' << insertLength << endl; string leftTemplateString = newTemplateAlign.substr(0,i); - string rightTemplateString = newTemplateAlign.substr(i+insertLength); + string rightTemplateString = newTemplateAlign.substr((i+insertLength)); newTemplateAlign = leftTemplateString + rightTemplateString; longAlignmentLength = newTemplateAlign.length(); - - string leftCandidateString = candAln.substr(0,leftIndex-insertLength+1); - string rightCandidateString = candAln.substr(leftIndex+1); + //cout << "lr candAln = " << candAln.length() << '\t' << leftIndex << '\t' << endl; + string leftCandidateString = candAln.substr(0,(leftIndex-insertLength+1)); + string rightCandidateString = candAln.substr((leftIndex+1)); candAln = leftCandidateString + rightCandidateString; } else{ // not enough room to the left, have to steal some space to + + //cout << "in else lr newTemplateAlign = " << newTemplateAlign.length() << '\t' << i << '\t' << insertLength << endl; string leftTemplateString = newTemplateAlign.substr(0,i); // the right - string rightTemplateString = newTemplateAlign.substr(i+insertLength); + string rightTemplateString = newTemplateAlign.substr((i+insertLength)); newTemplateAlign = leftTemplateString + rightTemplateString; longAlignmentLength = newTemplateAlign.length(); - - string leftCandidateString = candAln.substr(0,leftIndex-leftRoom+1); - string insertString = candAln.substr(leftIndex+1,rightIndex-leftIndex-1); - string rightCandidateString = candAln.substr(rightIndex+(insertLength-leftRoom)); + //cout << " in else lr candAln = " << candAln.length() << '\t' << " leftIndex = " << leftIndex << " leftroom = " << leftRoom << " rightIndex = " << rightIndex << '\t' << endl; + string leftCandidateString = candAln.substr(0,(leftIndex-leftRoom+1)); + string insertString = candAln.substr((leftIndex+1),(rightIndex-leftIndex-1)); + string rightCandidateString = candAln.substr((rightIndex+(insertLength-leftRoom))); candAln = leftCandidateString + insertString + rightCandidateString; } } else{ // the right gap is closer - > move stuff right there's if(rightRoom >= insertLength){ // enough room to the right to move + //cout << "rr newTemplateAlign = " << newTemplateAlign.length() << '\t' << i << '\t' << i+insertLength << endl; string leftTemplateString = newTemplateAlign.substr(0,i); - string rightTemplateString = newTemplateAlign.substr(i+insertLength); + string rightTemplateString = newTemplateAlign.substr((i+insertLength)); newTemplateAlign = leftTemplateString + rightTemplateString; longAlignmentLength = newTemplateAlign.length(); - + //cout << "rr candAln = " << candAln.length() << '\t' << i << '\t' << rightIndex << '\t' << rightIndex+insertLength << endl; string leftCandidateString = candAln.substr(0,rightIndex); - string rightCandidateString = candAln.substr(rightIndex+insertLength); + string rightCandidateString = candAln.substr((rightIndex+insertLength)); candAln = leftCandidateString + rightCandidateString; } else{ // not enough room to the right, have to steal some // space to the left lets move left and then right... + //cout << "in else rr newTemplateAlign = " << newTemplateAlign.length() << '\t' << i << '\t' << i+insertLength << endl; string leftTemplateString = newTemplateAlign.substr(0,i); - string rightTemplateString = newTemplateAlign.substr(i+insertLength); + string rightTemplateString = newTemplateAlign.substr((i+insertLength)); newTemplateAlign = leftTemplateString + rightTemplateString; longAlignmentLength = newTemplateAlign.length(); - - string leftCandidateString = candAln.substr(0,leftIndex-(insertLength-rightRoom)+1); - string insertString = candAln.substr(leftIndex+1,rightIndex-leftIndex-1); - string rightCandidateString = candAln.substr(rightIndex+rightRoom); + //cout << "in else rr candAln = " << candAln.length() << '\t' << '\t' << (leftIndex-(insertLength-rightRoom)+1) << '\t' << (leftIndex+1,rightIndex-leftIndex-1) << '\t' << (rightIndex+rightRoom) << endl; + string leftCandidateString = candAln.substr(0,(leftIndex-(insertLength-rightRoom)+1)); + string insertString = candAln.substr((leftIndex+1),(rightIndex-leftIndex-1)); + string rightCandidateString = candAln.substr((rightIndex+rightRoom)); candAln = leftCandidateString + insertString + rightCandidateString; } @@ -182,21 +191,25 @@ void Nast::removeExtraGaps(string& candAln, string tempAln, string newTemplateAl } else{ // there could be a case where there isn't enough room in either direction to move stuff - +//cout << "in else else newTemplateAlign = " << newTemplateAlign.length() << '\t' << i << '\t' << (i+leftRoom+rightRoom) << endl; string leftTemplateString = newTemplateAlign.substr(0,i); - string rightTemplateString = newTemplateAlign.substr(i+leftRoom+rightRoom); + string rightTemplateString = newTemplateAlign.substr((i+leftRoom+rightRoom)); newTemplateAlign = leftTemplateString + rightTemplateString; longAlignmentLength = newTemplateAlign.length(); - string leftCandidateString = candAln.substr(0,leftIndex-leftRoom+1); - string insertString = candAln.substr(leftIndex+1,rightIndex-leftIndex-1); - string rightCandidateString = candAln.substr(rightIndex+rightRoom); + //cout << "in else else newTemplateAlign = " << candAln.length() << '\t' << (leftIndex-leftRoom+1) << '\t' << (leftIndex+1) << '\t' << (rightIndex-leftIndex-1) << '\t' << (rightIndex+rightRoom) << endl; + string leftCandidateString = candAln.substr(0,(leftIndex-leftRoom+1)); + string insertString = candAln.substr((leftIndex+1),(rightIndex-leftIndex-1)); + string rightCandidateString = candAln.substr((rightIndex+rightRoom)); candAln = leftCandidateString + insertString + rightCandidateString; i -= (leftRoom + rightRoom); } // i -= insertLength; + + //if i is negative, we want to remove the extra gaps to the right + if (i < 0) { cout << "i is negative" << endl; } } } }