10 #ifndef GGSTROOTREADER_H_
11 #define GGSTROOTREADER_H_
22 #include "montecarlo/readers/GGSTChainReader.h"
102 return Open(std::string(fileName), filesHandler, force);
114 return Open(fileName);
192 TChain* _FindChain(
const TString &treeName,
GGSTFilesHandler* filesHandler);
193 TChain* _CreateChain(
const TString &treeName,
GGSTFilesHandler* filesHandler);
194 bool _CheckBranches(TTree *tree1, TTree *tree2);
197 Long64_t _GetEntriesBlind();
199 std::vector<GGSTFilesHandler*> _filesHandlers;
210 typedef std::vector<ReadersInfo*> ReadersStore;
212 ReadersStore _readers;
223 static const char *routineName =
"GGSTRootReader::GetReader";
226 if (filesHandler == NULL) {
227 if (_filesHandlers.size() > 0)
228 filesHandler = _filesHandlers[0];
232 TString tName(treeName);
234 tName =
"GGSEventsTree";
238 for (
unsigned int iReader = 0; iReader < _readers.size(); iReader++) {
239 if (_readers[iReader]->filesHandler == filesHandler && _readers[iReader]->chain->GetName() == tName) {
241 T* retVal =
dynamic_cast<T*
>(_readers[iReader]->reader);
249 TChain *chain = _FindChain(tName, filesHandler);
255 if (chain->GetReadEntry() < 0)
257 if (reader->SetChain(chain)) {
260 for (
unsigned int iReader = 0; iReader < _readers.size(); iReader++) {
261 if (chain->GetEntries() != _readers[iReader]->chain->GetEntries()) {
262 COUT(WARNING) << routineName <<
"Event number for the requested reader (" << chain->GetEntries()
263 <<
") and for reader no. " << iReader <<
" (" << _readers[iReader]->chain->GetEntries()
264 <<
") do not match. The reader has not been created." << std::endl;
269 if (_currentEv != -1)
270 reader->GetEntry(_currentEv);
271 _readers.push_back(
new ReadersInfo());
272 _readers.back()->reader = reader;
273 _readers.back()->chain = chain;
274 _readers.back()->filesHandler = filesHandler;
278 COUT(WARNING) <<
"Tree " << tName <<
" cannot be read by the requested reader. The reader has not been created."
286 COUT(WARNING) <<
"Can't find tree " << tName <<
". The reader has not been created." <<
ENDL;
GGSTFilesHandler * Open(const char *fileName, GGSTFilesHandler *filesHandler=NULL, bool force=false)
Open ROOT files.
const GGSTGeoParams * GetGeoParams(const GGSTFilesHandler *filesHandler=NULL)
Returns the geometry parameters.
Class to manage ROOT output readers.
Abstract class defining the interface for tree readers.
~GGSTRootReader()
Destructor.
#define COUT(level)
Smart log macro. It writes on stdout only if the specified verbosity level is lesser than the maximum...
bool OpenFile(const char *fileName)
Opens a ROOT file.
Long64_t GetEntries()
The total number of events.
Long64_t GetReadEntry()
Returns the current entry (event).
void GetEntry(Long64_t entry)
Reads an event.
Class to handle group of Root files.
const GGSTSimInfo * GetSimInfo(const GGSTFilesHandler *filesHandler=NULL)
Returns the simulation informations.
GGSTFilesHandler * Open(const std::string &fileName, GGSTFilesHandler *filesHandler=NULL, bool force=false)
Open ROOT files.
Class for storing the geometry parameters on Root output file.
GGSTRootReader()
Constructor.
T * GetReader(GGSTFilesHandler *filesHandler=NULL, const TString &treeName="")
Get a chain reader.
A class to store simulation informations.