]> git.donarmstrong.com Git - mothur.git/blobdiff - blastdb.cpp
v 19.3
[mothur.git] / blastdb.cpp
index 70349e50f0264b68fba76c4f04ebbddd0c8c96f6..48ae1686a35aae2f1a19e980c8b057c827c40021 100644 (file)
@@ -20,6 +20,7 @@ gapOpen(gO), gapExtend(gE), match(m), misMatch(mM) {
        count = 0;
 
        int randNumber = rand();
+       //int randNumber = 12345;
        dbFileName = tag + toString(randNumber) + ".template.unaligned.fasta";
        queryFileName = tag + toString(randNumber) + ".candidate.unaligned.fasta";
        blastFileName = tag + toString(randNumber) + ".blast";
@@ -32,6 +33,7 @@ BlastDB::BlastDB() : Database() {
                count = 0;
 
                int randNumber = rand();
+               //int randNumber = 12345;
                dbFileName = toString(randNumber) + ".template.unaligned.fasta";
                queryFileName = toString(randNumber) + ".candidate.unaligned.fasta";
                blastFileName = toString(randNumber) + ".blast";
@@ -67,7 +69,8 @@ vector<int> BlastDB::findClosestSequences(Sequence* seq, int n) {
                vector<int> topMatches;
                
                ofstream queryFile;
-               m->openOutputFile((queryFileName+seq->getName()), queryFile);
+               int randNumber = rand();
+               m->openOutputFile((queryFileName+toString(randNumber)), queryFile);
                queryFile << '>' << seq->getName() << endl;
                queryFile << seq->getUnaligned() << endl;
                queryFile.close();
@@ -80,16 +83,19 @@ vector<int> BlastDB::findClosestSequences(Sequence* seq, int n) {
                string blastCommand;
                #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
                
-                       blastCommand = path + "blast/bin/blastall -p blastn -d " + dbFileName + " -m 8 -W 28 -v " + toString(n) + " -b " + toString(n);;
-                       blastCommand += (" -i " + (queryFileName+seq->getName()) + " -o " + blastFileName+seq->getName());
+                       blastCommand = path + "blast/bin/blastall -p blastn -d " + dbFileName + " -m 8 -W 28 -v " + toString(n) + " -b " + toString(n);
+                       blastCommand += (" -i " + (queryFileName+toString(randNumber)) + " -o " + blastFileName+toString(randNumber));
                #else
-                       blastCommand =  "\"" + path + "blast\\bin\\blastall\" -p blastn -d " + dbFileName + " -m 8 -W 28 -v " + toString(n) + " -b " + toString(n);;
-                       blastCommand += (" -i " + (queryFileName+seq->getName()) + " -o " + blastFileName+seq->getName());
+                       blastCommand =  "\"" + path + "blast\\bin\\blastall\" -p blastn -d " + "\"" + dbFileName + "\"" + " -m 8 -W 28 -v " + toString(n) + " -b " + toString(n);
+                       blastCommand += (" -i " + (queryFileName+toString(randNumber)) + " -o " + blastFileName+toString(randNumber));
+                       //wrap entire string in ""
+                       blastCommand = "\"" + blastCommand + "\"";
                #endif
+               
                system(blastCommand.c_str());
                
                ifstream m8FileHandle;
-               m->openInputFile(blastFileName+seq->getName(), m8FileHandle, "no error");
+               m->openInputFile(blastFileName+toString(randNumber), m8FileHandle, "no error");
                
                string dummy;
                int templateAccession;
@@ -105,8 +111,8 @@ vector<int> BlastDB::findClosestSequences(Sequence* seq, int n) {
                        topMatches.push_back(templateAccession);
                }
                m8FileHandle.close();
-               remove((queryFileName+seq->getName()).c_str());
-               remove((blastFileName+seq->getName()).c_str());
+               remove((queryFileName+toString(randNumber)).c_str());
+               remove((blastFileName+toString(randNumber)).c_str());
 
                return topMatches;
        }
@@ -125,8 +131,9 @@ vector<int> BlastDB::findClosestMegaBlast(Sequence* seq, int n, int minPerID) {
                Scores.clear();
                
                ofstream queryFile;
-
-               m->openOutputFile((queryFileName+seq->getName()), queryFile);
+               int randNumber = rand();
+               //int randNumber = 12345;
+               m->openOutputFile((queryFileName+toString(randNumber)), queryFile);
                queryFile << '>' << seq->getName() << endl;
                queryFile << seq->getUnaligned() << endl;
                queryFile.close();
@@ -138,16 +145,22 @@ vector<int> BlastDB::findClosestMegaBlast(Sequence* seq, int n, int minPerID) {
                string blastCommand;
                #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
                        blastCommand = path + "blast/bin/megablast -e 1e-10 -d " + dbFileName + " -m 8 -b " + toString(n) + " -v " + toString(n); //-W 28 -p blastn
-                       blastCommand += (" -i " + (queryFileName+seq->getName()) + " -o " + blastFileName+seq->getName());
+                       blastCommand += (" -i " + (queryFileName+toString(randNumber)) + " -o " + blastFileName+toString(randNumber));
                #else
-                       blastCommand =  "\"" + path + "blast\\bin\\megablast\" -e 1e-10 -d " + dbFileName + " -m 8 -b " + toString(n) + " -v " + toString(n); //-W 28 -p blastn
-                       blastCommand += (" -i " + (queryFileName+seq->getName()) + " -o " + blastFileName+seq->getName());
+               //blastCommand = path + "blast\\bin\\megablast -e 1e-10 -d " + dbFileName + " -m 8 -b " + toString(n) + " -v " + toString(n); //-W 28 -p blastn
+               //blastCommand += (" -i " + (queryFileName+toString(randNumber)) + " -o " + blastFileName+toString(randNumber));
+
+                       blastCommand =  "\"" + path + "blast\\bin\\megablast\" -e 1e-10 -d " + "\"" + dbFileName + "\"" + " -m 8 -b " + toString(n) + " -v " + toString(n); //-W 28 -p blastn
+                       blastCommand += (" -i " + (queryFileName+toString(randNumber)) + " -o " + blastFileName+toString(randNumber));
+                       //wrap entire string in ""
+                       blastCommand = "\"" + blastCommand + "\"";
+
                #endif
-               
+               //cout << blastCommand << endl;
                system(blastCommand.c_str());
 
                ifstream m8FileHandle;
-               m->openInputFile(blastFileName+seq->getName(), m8FileHandle, "no error");
+               m->openInputFile(blastFileName+toString(randNumber), m8FileHandle, "no error");
        
                string dummy, eScore;
                int templateAccession;
@@ -168,8 +181,8 @@ vector<int> BlastDB::findClosestMegaBlast(Sequence* seq, int n, int minPerID) {
 //cout << templateAccession << endl;
                }
                m8FileHandle.close();
-               remove((queryFileName+seq->getName()).c_str());
-               remove((blastFileName+seq->getName()).c_str());
+               remove((queryFileName+toString(randNumber)).c_str());
+               remove((blastFileName+toString(randNumber)).c_str());
 //cout << "\n" ;               
                return topMatches;
        }
@@ -213,8 +226,13 @@ void BlastDB::generateDB() {
                #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
                        formatdbCommand = path + "blast/bin/formatdb -p F -o T -i " + dbFileName;       //      format the database, -o option gives us the ability
                #else
-                       formatdbCommand = "\"" + path + "blast\\bin\\formatdb\" -p F -o T -i " + dbFileName;
+                       //formatdbCommand = path + "blast\\bin\\formatdb -p F -o T -i " + dbFileName;   //      format the database, -o option gives us the ability
+
+                       formatdbCommand = "\"" + path + "blast\\bin\\formatdb\" -p F -o T -i " + "\"" +  dbFileName + "\"";
+                       //wrap entire string in ""
+                       formatdbCommand = "\"" + formatdbCommand + "\"";
                #endif
+               //cout << formatdbCommand << endl;
                system(formatdbCommand.c_str());                                                                //      to get the right sequence names, i think. -p F
                                                                                                                                        //      option tells formatdb that seqs are DNA, not prot
                //m->mothurOut("DONE."); m->mothurOutEndLine(); m->mothurOutEndLine(); cout.flush();