]> git.donarmstrong.com Git - mothur.git/blobdiff - kmerdb.cpp
added phylo.diversity command. added hard parameter to cluster, hcluster and read...
[mothur.git] / kmerdb.cpp
index bf8679e57a932af0567df8a456f038b76fbf0fae..77d93daf4b6c8cf18a8be546fcd4eb41c0dc7301 100644 (file)
@@ -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(){}
 
@@ -94,7 +96,7 @@ vector<int> KmerDB::findClosestSequences(Sequence* candidateSeq, int num){
                return topMatches;              
        }
        catch(exception& e) {
-               errorOut(e, "KmerDB", "findClosestSequences");
+               m->errorOut(e, "KmerDB", "findClosestSequences");
                exit(1);
        }       
 }
@@ -118,7 +120,7 @@ void KmerDB::generateDB(){
                
        }
        catch(exception& e) {
-               errorOut(e, "KmerDB", "generateDB");
+               m->errorOut(e, "KmerDB", "generateDB");
                exit(1);
        }       
        
@@ -143,7 +145,7 @@ void KmerDB::addSequence(Sequence seq) {
                count++;
        }
        catch(exception& e) {
-               errorOut(e, "KmerDB", "addSequence");
+               m->errorOut(e, "KmerDB", "addSequence");
                exit(1);
        }       
 }
@@ -170,9 +172,80 @@ 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<int> KmerDB::getSequencesWithKmer(int kmer) {
+       try {
+               
+               vector<int> 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);
+       }       
+}
+#ifdef USE_MPI 
+/**************************************************************************************************/
+int KmerDB::MPISend(int receiver) {
+       try {
+               
+               //send kmerSize - int
+               MPI_Send(&kmerSize, 1, MPI_INT, receiver, 2001, MPI_COMM_WORLD); 
+               
+               return 0;
+       }
+       catch(exception& e) {
+               m->errorOut(e, "KmerDB", "MPISend");
+               exit(1);
+       }
+}
+/**************************************************************************************************/
+int KmerDB::MPIRecv(int sender) {
+       try {
+               MPI_Status status;
+               
+               //receive kmerSize - int
+               MPI_Recv(&kmerSize, 1, MPI_INT, sender, 2001, MPI_COMM_WORLD, &status);
+               
+               //set maxKmer 
+               int power4s[14] = { 1, 4, 16, 64, 256, 1024, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216, 67108864 };
+               count = 0;
+               maxKmer = power4s[kmerSize];
+               kmerLocations.resize(maxKmer+1);
+               
+               return 0;
+       }
+       catch(exception& e) {
+               m->errorOut(e, "KmerDB", "MPIRecv");
+               exit(1);
+       }
+}
+#endif
+/**************************************************************************************************/
+
 
 /**************************************************************************************************/
+
+