#include "EventBuilder.h" #include "RunCollector.h" using namespace std; RunCollector::RunCollector(): initFlag(false), dir(""), run(""), end(""), MaxRun(0), MinRun(0) { } RunCollector::RunCollector(const string& dirname, const string& prefix, const string& suffix) { dir = dirname.c_str(); run = prefix.c_str(); end = suffix.c_str(); MinRun = 0; MaxRun = LITERALMAX; initFlag = true; } RunCollector::RunCollector(const string& dirname, const string& prefix, const string& suffix, int min, int max) { dir = dirname.c_str(); run = prefix.c_str(); end = suffix.c_str(); MinRun = min; MaxRun = max; initFlag = true; } RunCollector::~RunCollector() {} void RunCollector::SetSearchParams(const string& dirname, const string& prefix, const string& suffix, int min, int max) { dir = dirname.c_str(); run = prefix.c_str(); end = suffix.c_str(); MinRun = min; MaxRun = max; initFlag = true; } int RunCollector::GrabAllFiles() { if(!initFlag) {return 0;} TSystemDirectory sysdir(dir.Data(), dir.Data()); TList *flist = sysdir.GetListOfFiles(); filelist.clear(); int counter = 0; if(flist) { //Make sure list is real. If not, means no directory TSystemFile *file; TString fname, temp; TIter next_element(flist); //List iterator while((file = (TSystemFile*)next_element())) { temp = file->GetName(); if(!file->IsDirectory() && temp.BeginsWith(run.Data()) && temp.EndsWith(end.Data())) { counter++; fname = dir+temp; filelist.push_back(fname); } } if(counter>0) { delete flist; return 1; } else { cerr<<"Unable to find files with matching run name in directory; check input.txt"<GetName(); if(!file->IsDirectory() && temp.BeginsWith(run.Data()) && temp.EndsWith(runno.c_str())) { fname = dir+temp; break; } } return fname.Data(); } /*Grabs all files within a specified run range*/ int RunCollector::GrabFilesInRange() { if(!initFlag) {return 0;} TSystemDirectory sysdir(dir.Data(), dir.Data()); TList *flist = sysdir.GetListOfFiles(); filelist.clear(); int counter = 0; if(flist) { TSystemFile *file; TString fname, temp; string runno; for(int i=MinRun; i<=MaxRun; i++) {//loop over range TIter next_element(flist);//list iterator runno = "_"+to_string(i) + end.Data(); //suffix is now _#.endData while((file = (TSystemFile*)next_element())) {//look through directory until file found temp = file->GetName(); if(!file->IsDirectory()&&temp.BeginsWith(run.Data())&&temp.EndsWith(runno.c_str())){ counter++; fname = dir+temp; filelist.push_back(fname); break; //if we find the file, break out of iterator loop } } } if(counter>0) { delete flist; return 1; } else { cerr<<"Unable to find files with matching run name in directory; check input.txt"<Add(filelist[i].Data()); } cout<<"Merging runs into single file..."<Merge(output,0,"fast"); cout<<"Finished merging"<Add(filelist[i]); } cout<<"Merging runs "<Merge(output,0,"fast"); cout<<"Finished merging"<IsOpen()) output->Close(); return 0; }