#include #include #include "base/CommandLineParser.h" #include "base/FileParser.h" class JobControl { public: JobControl(int n, bool bLSF) { m_n = n; m_run = 0; m_bLSF = bLSF; } void Add(const string & cmmd, const string & out, const string & log, const string &err) { m_cmmd.push_back(cmmd); m_out.push_back(out); m_log.push_back(log); m_err.push_back(err); m_sub.push_back(0); } int Remaining() { return m_cmmd.isize(); } void Submit() { int i; // Check if they are done... for (i=0; i= m_n) break; } } } void ClearFiles() { for (int i=0; i m_sub; svec m_cmmd; svec m_out; svec m_log; svec m_err; }; int main( int argc, char** argv ) { commandArg fileCmmd("-i","input file"); commandArg nCmmd("-n","number of CPUs", 1); commandArg lsfCmmd("-lsf","run on LSF or not",false); commandLineParser P(argc,argv); P.SetDescription("Parallel execution of butterfly on a local server or on the LSF farm."); P.registerArg(fileCmmd); P.registerArg(nCmmd); P.registerArg(lsfCmmd); P.parse(); string fileName = P.GetStringValueFor(fileCmmd); int nCPUs = P.GetIntValueFor(nCmmd); bool bLSF = P.GetBoolValueFor(lsfCmmd); //comment. ??? FlatFileParser parser; parser.Open(fileName); JobControl jc(nCPUs, bLSF); jc.ClearFiles(); cout << "Reading command list..." << endl; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //parser.ParseLine(); while (parser.ParseLine()) { if (parser.GetItemCount() == 0) continue; string out = parser.AsString(parser.GetItemCount()-1); string log = out; string err = out; out += "_allProbPaths.fasta"; log += ".log"; err += ".err"; jc.Add(parser.Line(), out, log, err); } jc.ClearFiles(); //return 0; do { //cout << "Submitting a batch." << endl; jc.Submit(); //usleep(100000); sleep(1); } while (jc.Remaining() > 0); return 0; }