X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=kmerdb.cpp;h=e7e8ab2acbbf04c8bc30c6adb84fbd3880f7b2d8;hb=d04f948b1a2a1a2984fc4a45d04403b8c121c5bc;hp=bf8679e57a932af0567df8a456f038b76fbf0fae;hpb=63e089e0b3aad1741bab60119ed7ccc784dce347;p=mothur.git diff --git a/kmerdb.cpp b/kmerdb.cpp index bf8679e..e7e8ab2 100644 --- a/kmerdb.cpp +++ b/kmerdb.cpp @@ -42,12 +42,14 @@ KmerDB::KmerDB(string fastaFileName, int kSize) : Database(), kmerSize(kSize) { } catch(exception& e) { - errorOut(e, "KmerDB", "KmerDB"); + m->errorOut(e, "KmerDB", "KmerDB"); exit(1); } } /**************************************************************************************************/ +KmerDB::KmerDB() : Database() {} +/**************************************************************************************************/ KmerDB::~KmerDB(){} @@ -73,28 +75,43 @@ 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); } - return topMatches; } catch(exception& e) { - errorOut(e, "KmerDB", "findClosestSequences"); + m->errorOut(e, "KmerDB", "findClosestSequences"); exit(1); } } @@ -105,7 +122,10 @@ void KmerDB::generateDB(){ try { ofstream kmerFile; // once we have the kmerLocations folder print it out - openOutputFile(kmerDBName, kmerFile); // to a file + m->openOutputFile(kmerDBName, kmerFile); // to a file + + //output version + kmerFile << "#" << m->getVersion() << endl; for(int i=0;ierrorOut(e, "KmerDB", "generateDB"); exit(1); } @@ -143,7 +163,7 @@ void KmerDB::addSequence(Sequence seq) { count++; } catch(exception& e) { - errorOut(e, "KmerDB", "addSequence"); + m->errorOut(e, "KmerDB", "addSequence"); exit(1); } } @@ -154,6 +174,9 @@ void KmerDB::readKmerDB(ifstream& kmerDBFile){ kmerDBFile.seekg(0); // start at the beginning of the file + //read version + string line = m->getline(kmerDBFile); m->gobble(kmerDBFile); + string seqName; int seqNumber; @@ -170,9 +193,43 @@ void KmerDB::readKmerDB(ifstream& kmerDBFile){ } catch(exception& e) { - errorOut(e, "KmerDB", "readKmerDB"); + m->errorOut(e, "KmerDB", "readKmerDB"); + exit(1); + } +} + +/**************************************************************************************************/ +int KmerDB::getCount(int kmer) { + try { + if (kmer < 0) { return 0; } //if user gives negative number + else if (kmer > maxKmer) { return 0; } //or a kmer that is bigger than maxkmer + else { return kmerLocations[kmer].size(); } // kmer is in vector range + } + catch(exception& e) { + m->errorOut(e, "KmerDB", "getCount"); + exit(1); + } +} +/**************************************************************************************************/ +vector KmerDB::getSequencesWithKmer(int kmer) { + try { + + vector seqs; + + if (kmer < 0) { } //if user gives negative number + else if (kmer > maxKmer) { } //or a kmer that is bigger than maxkmer + else { seqs = kmerLocations[kmer]; } + + return seqs; + } + catch(exception& e) { + m->errorOut(e, "KmerDB", "getSequencesWithKmer"); exit(1); } } +/**************************************************************************************************/ + /**************************************************************************************************/ + +