}
+// cout << query->getAligned() << endl;
//get sequence that were given from maligner results
vector<SeqDist> seqs;
map<string, float> removeDups;
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);
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; }
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));
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) {
}
}
-// 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];
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*>);
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++) {
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)) {