X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=kmerdb.cpp;h=9a5d23500be955b459413beee989601f6c0ec78f;hp=29265933d8c22ea32c1f943a877b3b6cf62ccfe0;hb=b206f634aae1b4ce13978d203247fb64757d5482;hpb=260ae19c36cb11a53ddc5a75b5e507f8dd8b31d6 diff --git a/kmerdb.cpp b/kmerdb.cpp index 2926593..9a5d235 100644 --- a/kmerdb.cpp +++ b/kmerdb.cpp @@ -57,9 +57,12 @@ KmerDB::~KmerDB(){} vector KmerDB::findClosestSequences(Sequence* candidateSeq, int num){ try { + if (num > numSeqs) { m->mothurOut("[WARNING]: you requested " + toString(num) + " closest sequences, but the template only contains " + toString(numSeqs) + ", adjusting."); m->mothurOutEndLine(); num = numSeqs; } + vector topMatches; Kmer kmer(kmerSize); searchScore = 0; + Scores.clear(); vector matches(numSeqs, 0); // a record of the sequences with shared kmers vector timesKmerFound(kmerLocations.size()+1, 0); // a record of the kmers that we have already found @@ -75,24 +78,42 @@ vector KmerDB::findClosestSequences(Sequence* candidateSeq, int num){ } timesKmerFound[kmerNumber] = 1; // ok, we've seen the kmer now } - - vector seqMatches; - for(int i=0;i seqMatches; seqMatches.resize(numSeqs); + for(int i=0;i bestMatch) { + bestIndex = i; + bestMatch = matches[i]; + } + } + + searchScore = bestMatch; + searchScore = 100 * searchScore / (float) numKmers; // return the Sequence object corresponding to the db + topMatches.push_back(bestIndex); + Scores.push_back(searchScore); } - return topMatches; } catch(exception& e) { @@ -110,7 +131,7 @@ void KmerDB::generateDB(){ m->openOutputFile(kmerDBName, kmerFile); // to a file //output version - kmerFile << m->getVersion() << endl; + kmerFile << "#" << m->getVersion() << endl; for(int i=0;i maxKmer) { return 0; } //or a kmer that is bigger than maxkmer + else { return kmer.getReverseKmerNumber(kmerNumber); } // kmer is in vector range + } + catch(exception& e) { + m->errorOut(e, "KmerDB", "getReversed"); + exit(1); + } +} +/**************************************************************************************************/ vector KmerDB::getSequencesWithKmer(int kmer) { try {