- if (mergedResults.size() < numWanted) { numWanted = mergedResults.size(); }
-//cout << q->getName() << " merged results size = " << mergedResults.size() << '\t' << "numwanted = " << numWanted << endl;
- for (int i = 0; i < numWanted; i++) {
-//cout << db[mergedResults[i]]->getName() << '\t' << mergedResults[i] << endl;
- if (db[mergedResults[i]]->getName() != q->getName()) {
- Sequence* temp = new Sequence(db[mergedResults[i]]->getName(), db[mergedResults[i]]->getAligned());
- refResults.push_back(temp);
- indexes.push_back(mergedResults[i]);
- }
-//cout << mergedResults[i] << endl;
- }
-//cout << "done " << q->getName() << endl;
- delete queryRight;
- delete queryLeft;
-
- return refResults;
- }
- catch(exception& e) {
- m->errorOut(e, "Maligner", "getBlastSeqs");
- exit(1);
- }
-}
-//***************************************************************************************************************
-vector<Sequence*> Maligner::getKmerSeqs(Sequence* q, int num) {
- try {
- indexes.clear();
-
- //get parts of query
- string queryUnAligned = q->getUnaligned();
- string leftQuery = queryUnAligned.substr(0, int(queryUnAligned.length() * 0.33)); //first 1/3 of the sequence
- string rightQuery = queryUnAligned.substr(int(queryUnAligned.length() * 0.66)); //last 1/3 of the sequence
-
- Sequence* queryLeft = new Sequence(q->getName(), leftQuery);
- Sequence* queryRight = new Sequence(q->getName(), rightQuery);
-
- vector<int> tempIndexesLeft = databaseLeft->findClosestSequences(queryLeft, numWanted);
- vector<int> tempIndexesRight = databaseRight->findClosestSequences(queryRight, numWanted);
-
- //merge results
- map<int, int> seen;
- map<int, int>::iterator it;
-
- vector<int> mergedResults;
- for (int i = 0; i < tempIndexesLeft.size(); i++) {
- //add left if you havent already
- it = seen.find(tempIndexesLeft[i]);
- if (it == seen.end()) {
- mergedResults.push_back(tempIndexesLeft[i]);
- seen[tempIndexesLeft[i]] = tempIndexesLeft[i];
- }
-
- //add right if you havent already
- it = seen.find(tempIndexesRight[i]);
- if (it == seen.end()) {
- mergedResults.push_back(tempIndexesRight[i]);
- seen[tempIndexesRight[i]] = tempIndexesRight[i];
- }
- }
-
-//cout << q->getName() << endl;
- vector<Sequence*> refResults;
- for (int i = 0; i < numWanted; i++) {
-//cout << db[mergedResults[i]]->getName() << endl;
- Sequence* temp = new Sequence(db[mergedResults[i]]->getName(), db[mergedResults[i]]->getAligned());
- refResults.push_back(temp);
- indexes.push_back(mergedResults[i]);
- }
-//cout << endl;
- delete queryRight;
- delete queryLeft;