#include "RunCollector.h" #include #include #include #include #include #include namespace EventBuilder { RunCollector::RunCollector(): m_initFlag(false), m_directory(""), m_prefix(""), m_suffix(""), m_minRun(0), m_maxRun(0) { } RunCollector::RunCollector(const std::string& dirname, const std::string& prefix, const std::string& suffix) : m_initFlag(true), m_directory(dirname), m_prefix(prefix), m_suffix(suffix), m_minRun(0), m_maxRun(0) { } RunCollector::RunCollector(const std::string& dirname, const std::string& prefix, const std::string& suffix, int min, int max) : m_initFlag(true), m_directory(dirname), m_prefix(prefix), m_suffix(suffix), m_minRun(min), m_maxRun(max) { } RunCollector::~RunCollector() {} void RunCollector::SetSearchParams(const std::string& dirname, const std::string& prefix, const std::string& suffix, int min, int max) { m_directory = dirname.c_str(); m_prefix = prefix.c_str(); m_suffix = suffix.c_str(); m_minRun = min; m_maxRun = max; m_initFlag = true; } bool RunCollector::GrabAllFiles() { if(!m_initFlag) return false; TSystemDirectory sysdir(m_directory.c_str(), m_directory.c_str()); TList *flist = sysdir.GetListOfFiles(); m_filelist.clear(); if(!flist) //Make sure list is real. If not, means no directory { std::cerr<<"Unable to find any files in directory; check name given to the input.txt"<GetName(); if(temp.size() < m_prefix.size() || temp.size() < m_suffix.size()) continue; else if(!file->IsDirectory() && !temp.compare(0,m_prefix.size(),m_prefix) && !temp.compare(temp.size()-m_suffix.size(), m_suffix.size(), m_suffix)) { fname = m_directory+temp; m_filelist.push_back(fname); } } delete flist; if(m_filelist.size()>0) return true; else { std::cerr<<"Unable to find files with matching run name in directory; check input.txt"<GetName(); if(temp.size() < m_prefix.size() || temp.size() < runno.size()) continue; else if(!file->IsDirectory() && !temp.compare(0,m_prefix.size(),m_prefix) && !temp.compare(temp.size()-runno.size(),runno.size(), runno)) { fname = m_directory+temp; break; } } delete flist; return fname; } /*Grabs all files within a specified run range*/ bool RunCollector::GrabFilesInRange() { if(!m_initFlag) return false; TSystemDirectory sysdir(m_directory.c_str(), m_directory.c_str()); TList *flist = sysdir.GetListOfFiles(); m_filelist.clear(); if(!flist) { std::cerr<<"Unable to find any files in directory; check name given to input.txt"<GetName(); if(temp.size() < m_prefix.size() || temp.size() < runno.size()) continue; else if(!file->IsDirectory() && !temp.compare(0,m_prefix.size(),m_prefix) && !temp.compare(temp.size()-runno.size(),runno.size(), runno)) { fname = m_directory+temp; m_filelist.push_back(fname); break; //if we find the file, break out of iterator loop } } } delete flist; if(m_filelist.size()>0) return true; else { std::cerr<<"Unable to find files with matching run name in directory; check input.txt"<Add(m_filelist[i].c_str()); std::cout<<"Merging runs into single file..."<Merge(output,0,"fast"); std::cout<<"Finished merging"<Add(m_filelist[i].c_str()); std::cout<<"Merging runs "<Merge(output,0,"fast"); std::cout<<"Finished merging"<IsOpen()) output->Close(); return false; } }