string qAligned = query->getAligned();
string newQuery = "";
- //cout << qAligned.length() << endl;
+
//sort parents by region start
sort(parents.begin(), parents.end(), compareRegionStart);
//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;
}
//set query to new aligned string
query->setAligned(newQuery);
- //cout << newQuery.length() << endl;
+
//free memory
for (int i = 0; i < queryParts.size(); i++) { delete queryParts[i]; }
for (int i = 0; i < parentParts.size(); i++) { delete parentParts[i]; }
rightRoom = 0; leftRoom = 0;
// Part D of Fig. 2 from DeSantis et al. // template sequence and the official template sequence
- for(leftIndex=i-1;leftIndex>0;leftIndex--){ // then we've got problems...
+ for(leftIndex=i-1;leftIndex>0;leftIndex--){ // then we've got problems...
if(!isalpha(candAln[leftIndex])){
leftRoom = 1; //count how far it is to the nearest gap on the LEFT side of the anomaly
while(leftIndex-leftRoom>=0 && !isalpha(candAln[leftIndex-leftRoom])) { leftRoom++; }
break;
}
}
-
+
int insertLength = 0; // figure out how long the anomaly is
while(!isalpha(newTemplateAlign[i + insertLength])) { insertLength++; }
if(insertLength > maxInsertLength){ maxInsertLength = insertLength; }
if((i-leftIndex) <= (rightIndex-i)){ // the left gap is closer - > move stuff left there's
if(leftRoom >= insertLength){ // enough room to the left to move
-
string leftTemplateString = newTemplateAlign.substr(0,i);
string rightTemplateString = newTemplateAlign.substr(i+insertLength);
newTemplateAlign = leftTemplateString + rightTemplateString;
}
else{ // the right gap is closer - > move stuff right there's
if(rightRoom >= insertLength){ // enough room to the right to move
-
string leftTemplateString = newTemplateAlign.substr(0,i);
string rightTemplateString = newTemplateAlign.substr(i+insertLength);
newTemplateAlign = leftTemplateString + rightTemplateString;
candAln = leftCandidateString + rightCandidateString;
}
- else{ // not enough room to the right, have to steal some
-
+ else{ // not enough room to the right, have to steal some
// space to the left lets move left and then right...
string leftTemplateString = newTemplateAlign.substr(0,i);
string rightTemplateString = newTemplateAlign.substr(i+insertLength);
}
}
+ i -= insertLength;
+
}
else{
- // there could be a case where there isn't enough room in
- string leftTemplateString = newTemplateAlign.substr(0,i); // either direction to move stuff
+ // there could be a case where there isn't enough room in either direction to move stuff
+
+ string leftTemplateString = newTemplateAlign.substr(0,i);
string rightTemplateString = newTemplateAlign.substr(i+leftRoom+rightRoom);
newTemplateAlign = leftTemplateString + rightTemplateString;
longAlignmentLength = newTemplateAlign.length();
string insertString = candAln.substr(leftIndex+1,rightIndex-leftIndex-1);
string rightCandidateString = candAln.substr(rightIndex+rightRoom);
candAln = leftCandidateString + insertString + rightCandidateString;
-
+
+ i -= (leftRoom + rightRoom);
}
- i -= insertLength;
+// i -= insertLength;
}
}
}