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";
+ dbFileName = tag + toString(getpid()) + toString(randNumber) + ".template.unaligned.fasta";
+ queryFileName = tag + toString(getpid()) + toString(randNumber) + ".candidate.unaligned.fasta";
+ blastFileName = tag + toString(getpid()) + toString(randNumber) + ".blast";
//make sure blast exists in the write place
path = m->argv;
int randNumber = rand();
//int randNumber = 12345;
- dbFileName = toString(randNumber) + ".template.unaligned.fasta";
- queryFileName = toString(randNumber) + ".candidate.unaligned.fasta";
- blastFileName = toString(randNumber) + ".blast";
+ dbFileName = toString(randNumber) + toString(getpid()) + ".template.unaligned.fasta";
+ queryFileName = toString(randNumber) + toString(getpid()) + ".candidate.unaligned.fasta";
+ blastFileName = toString(randNumber) + toString(getpid()) + ".blast";
//make sure blast exists in the write place
path = m->argv;
ofstream queryFile;
int randNumber = rand();
- m->openOutputFile((queryFileName+toString(randNumber)), queryFile);
+ m->openOutputFile((queryFileName+toString(getpid())+toString(randNumber)), queryFile);
queryFile << '>' << seq->getName() << endl;
queryFile << seq->getUnaligned() << endl;
queryFile.close();
#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+toString(randNumber)) + " -o " + blastFileName+toString(randNumber));
+ blastCommand += (" -i " + (queryFileName+toString(getpid())+toString(randNumber)) + " -o " + blastFileName+toString(getpid())+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+toString(randNumber)) + " -o " + blastFileName+toString(randNumber));
+ blastCommand += (" -i " + (queryFileName+toString(getpid())+toString(randNumber)) + " -o " + blastFileName+toString(getpid())+toString(randNumber));
//wrap entire string in ""
blastCommand = "\"" + blastCommand + "\"";
#endif
system(blastCommand.c_str());
ifstream m8FileHandle;
- m->openInputFile(blastFileName+toString(randNumber), m8FileHandle, "no error");
+ m->openInputFile(blastFileName+toString(getpid())+toString(randNumber), m8FileHandle, "no error");
string dummy;
int templateAccession;
topMatches.push_back(templateAccession);
}
m8FileHandle.close();
- remove((queryFileName+toString(randNumber)).c_str());
- remove((blastFileName+toString(randNumber)).c_str());
+ remove((queryFileName+toString(getpid())+toString(randNumber)).c_str());
+ remove((blastFileName+toString(getpid())+toString(randNumber)).c_str());
return topMatches;
}
ofstream queryFile;
int randNumber = rand();
//int randNumber = 12345;
- m->openOutputFile((queryFileName+toString(randNumber)), queryFile);
+ m->openOutputFile((queryFileName+toString(getpid())+toString(randNumber)), queryFile);
queryFile << '>' << seq->getName() << endl;
queryFile << seq->getUnaligned() << endl;
queryFile.close();
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+toString(randNumber)) + " -o " + blastFileName+toString(randNumber));
+ blastCommand += (" -i " + (queryFileName+toString(getpid())+toString(randNumber)) + " -o " + blastFileName+toString(getpid())+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+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));
+ blastCommand += (" -i " + (queryFileName+toString(getpid())+toString(randNumber)) + " -o " + blastFileName+toString(getpid())+toString(randNumber));
//wrap entire string in ""
blastCommand = "\"" + blastCommand + "\"";
#endif
- //cout << blastCommand << endl;
system(blastCommand.c_str());
ifstream m8FileHandle;
- m->openInputFile(blastFileName+toString(randNumber), m8FileHandle, "no error");
+ m->openInputFile(blastFileName+toString(getpid())+toString(randNumber), m8FileHandle, "no error");
string dummy, eScore;
int templateAccession;
//cout << templateAccession << endl;
}
m8FileHandle.close();
- remove((queryFileName+toString(randNumber)).c_str());
- remove((blastFileName+toString(randNumber)).c_str());
+ remove((queryFileName+toString(getpid())+toString(randNumber)).c_str());
+ remove((blastFileName+toString(getpid())+toString(randNumber)).c_str());
//cout << "\n" ;
return topMatches;
}
virtual Sequence print(ostream&, ostream&){ Sequence temp; return temp; }
virtual Sequence print(ostream&, ostream&, data_results, data_results) { Sequence temp; return temp; }
virtual int print(ostream&, ostream&, string){ return 0; }
+ virtual int getNumNoParents(){ return 0; }
virtual data_results getResults() { data_results results; return results; }
#ifdef USE_MPI
numWanted = numw;
realign = r;
trimChimera = trim;
+ numNoParents = 0;
doPrep();
}
realign = r;
trimChimera = trim;
priority = prior;
+ numNoParents = 0;
createFilter(templateSeqs, 0.0); //just removed columns where all seqs have a gap
//string qname = q->getName().substr(0, q->getName().find_last_of('_'));
//cout << qname << endl;
+ if (mergedResults.size() == 0) { numNoParents++; }
+
for (int i = 0; i < mergedResults.size(); i++) {
//cout << q->getName() << mergedResults[i] << '\t' << db[mergedResults[i]]->getName() << endl;
if (db[mergedResults[i]]->getName() != q.getName()) {
delete queryRight;
delete queryLeft;
- if (refResults.size() == 0) { m->mothurOut("[WARNING]: megablast returned 0 potential parents, so we are not able to check " + q.getName() + ". This could be due to formatdb.exe not being setup properly, please check formatdb.log for errors."); m->mothurOutEndLine(); }
-
return refResults;
}
catch(exception& e) {
Sequence print(ostream&, ostream&, data_results, data_results);
void printHeader(ostream&);
int doPrep();
+ int getNumNoParents() { return numNoParents; }
data_results getResults() { return printResults; }
#ifdef USE_MPI
Database* databaseLeft;
map<string, int> priority; //for template=self, seqname, seqAligned, abundance
set<string> chimericSeqs; //for template=self, so we don't add chimeric sequences to the userTemplate set
+ int numNoParents;
vector<data_struct> chimeraResults;
data_results printResults;
//do your part
driverMPI(startIndex, numSeqsPerProcessor, inMPI, outMPI, outMPIAccnos, outMPIFasta, MPIPos);
+ int numNoParents = chimera->getNumNoParents();
+ int temp;
+ for(int i = 1; i < processors; i++) {
+ MPI_Recv(&temp, 1, MPI_INT, 1, tag, MPI_COMM_WORLD, &status);
+ numNoParents += temp;
+ }
+
+
+ if (numSeqs == numNoParents) { m->mothurOut("[WARNING]: megablast returned 0 potential parents for all your sequences. This could be due to formatdb.exe not being setup properly, please check formatdb.log for errors."); m->mothurOutEndLine(); }
+
if (m->control_pressed) { outputTypes.clear(); MPI_File_close(&inMPI); MPI_File_close(&outMPI); if (trim) { MPI_File_close(&outMPIFasta); } MPI_File_close(&outMPIAccnos); for (int j = 0; j < outputNames.size(); j++) { remove(outputNames[j].c_str()); } remove(outputFileName.c_str()); remove(accnosFileName.c_str()); delete chimera; return 0; }
}else{ //you are a child process
//do your part
driverMPI(startIndex, numSeqsPerProcessor, inMPI, outMPI, outMPIAccnos, outMPIFasta, MPIPos);
+
+ int numNoParents = chimera->getNumNoParents();
+ MPI_Send(&numNoParents, 1, MPI_INT, 0, tag, MPI_COMM_WORLD);
if (m->control_pressed) { outputTypes.clear(); MPI_File_close(&inMPI); MPI_File_close(&outMPI); if (trim) { MPI_File_close(&outMPIFasta); } MPI_File_close(&outMPIAccnos); for (int j = 0; j < outputNames.size(); j++) { remove(outputNames[j].c_str()); } delete chimera; return 0; }
if(processors == 1){
numSeqs = driver(lines[0], outputFileName, fastaFileNames[s], accnosFileName, trimFastaFileName);
+ int numNoParents = chimera->getNumNoParents();
+ if (numNoParents == numSeqs) { m->mothurOut("[WARNING]: megablast returned 0 potential parents for all your sequences. This could be due to formatdb.exe not being setup properly, please check formatdb.log for errors."); m->mothurOutEndLine(); }
+
if (m->control_pressed) { outputTypes.clear(); if (trim) { remove(trimFastaFileName.c_str()); } remove(outputFileName.c_str()); remove(tempHeader.c_str()); remove(accnosFileName.c_str()); for (int j = 0; j < outputNames.size(); j++) { remove(outputNames[j].c_str()); } for (int i = 0; i < lines.size(); i++) { delete lines[i]; } lines.clear(); delete chimera; return 0; }
}else{
#else
numSeqs = driver(lines[0], outputFileName, fastaFileNames[s], accnosFileName, trimFastaFileName);
+ int numNoParents = chimera->getNumNoParents();
+ if (numNoParents == numSeqs) { m->mothurOut("[WARNING]: megablast returned 0 potential parents for all your sequences. This could be due to formatdb.exe not being setup properly, please check formatdb.log for errors."); m->mothurOutEndLine(); }
+
+
if (m->control_pressed) { outputTypes.clear(); if (trim) { remove(trimFastaFileName.c_str()); } remove(outputFileName.c_str()); remove(tempHeader.c_str()); remove(accnosFileName.c_str()); for (int j = 0; j < outputNames.size(); j++) { remove(outputNames[j].c_str()); } for (int i = 0; i < lines.size(); i++) { delete lines[i]; } lines.clear(); delete chimera; return 0; }
#endif
string candidateAligned = candidateSeq->getAligned();
if (candidateSeq->getName() != "") { //incase there is a commented sequence at the end of a file
-
if (candidateSeq->getAligned().length() != templateSeqsLength) {
m->mothurOut(candidateSeq->getName() + " is not the same length as the template sequences. Skipping."); m->mothurOutEndLine();
}else{
ofstream out;
string tempFile = outputFileName + toString(getpid()) + ".num.temp";
m->openOutputFile(tempFile, out);
- out << num << endl;
+ out << num << '\t' << chimera->getNumNoParents() << endl;
out.close();
-
exit(0);
}else {
m->mothurOut("[ERROR]: unable to spawn the necessary processes."); m->mothurOutEndLine();
wait(&temp);
}
+ int numNoParents = 0;
for (int i = 0; i < processIDS.size(); i++) {
ifstream in;
string tempFile = outputFileName + toString(processIDS[i]) + ".num.temp";
m->openInputFile(tempFile, in);
- if (!in.eof()) { int tempNum = 0; in >> tempNum; num += tempNum; }
+ if (!in.eof()) { int tempNum = 0; int tempNumParents = 0; in >> tempNum >> tempNumParents; num += tempNum; numNoParents += tempNumParents; }
in.close(); remove(tempFile.c_str());
}
+ if (num == numNoParents) { m->mothurOut("[WARNING]: megablast returned 0 potential parents for all your sequences. This could be due to formatdb.exe not being setup properly, please check formatdb.log for errors."); m->mothurOutEndLine(); }
+
return num;
#endif
}
}
#ifdef USE_MPI
//***************************************************************************************************************
-Sequence* Pintail::print(MPI_File& out, MPI_File& outAcc) {
+Sequence Pintail::print(MPI_File& out, MPI_File& outAcc) {
try {
string outputString = "";
MPI_File_write_shared(outAcc, buf, length, MPI_CHAR, &statusAcc);
delete buf;
- return NULL;
+ return *querySeq;
}
outputString += "Observed\t";
MPI_File_write_shared(out, buf2, length, MPI_CHAR, &status);
delete buf2;
- return NULL;
+ return *querySeq;
}
catch(exception& e) {
m->errorOut(e, "Pintail", "print");