10 #ifndef GGSTROOTREADER_H_
11 #define GGSTROOTREADER_H_
20 #include "TGeoManager.h"
23 #include "montecarlo/readers/GGSTChainReader.h"
102 return Open(std::string(fileName), filesHandler, force);
208 TChain *_FindChain(
const TString &treeName,
GGSTFilesHandler *filesHandler);
209 TChain *_CreateChain(
const TString &treeName,
GGSTFilesHandler *filesHandler);
210 bool _CheckBranches(TTree *tree1, TTree *tree2);
213 Long64_t _GetEntriesBlind();
215 std::vector<GGSTFilesHandler *> _filesHandlers;
222 ~ReadersInfo() {
delete reader; }
224 typedef std::vector<ReadersInfo *> ReadersStore;
226 ReadersStore _readers;
235 static const char *routineName =
"GGSTRootReader::GetReader";
238 if (filesHandler ==
nullptr) {
239 if (_filesHandlers.size() > 0)
240 filesHandler = _filesHandlers[0];
244 TString tName(treeName);
246 tName =
"GGSEventsTree";
250 for (
unsigned int iReader = 0; iReader < _readers.size(); iReader++) {
251 if (_readers[iReader]->filesHandler == filesHandler && _readers[iReader]->chain->GetName() == tName) {
253 T *retVal =
dynamic_cast<T *
>(_readers[iReader]->reader);
261 TChain *chain = _FindChain(tName, filesHandler);
267 if (chain->GetReadEntry() < 0)
269 if (reader->SetChain(chain)) {
272 for (
unsigned int iReader = 0; iReader < _readers.size(); iReader++) {
273 if (chain->GetEntries() != _readers[iReader]->chain->GetEntries()) {
274 COUT(WARNING) << routineName <<
"Event number for the requested reader (" << chain->GetEntries()
275 <<
") and for reader no. " << iReader <<
" (" << _readers[iReader]->chain->GetEntries()
276 <<
") do not match. The reader has not been created." << std::endl;
281 if (_currentEv != -1)
282 reader->GetEntry(_currentEv);
283 _readers.push_back(
new ReadersInfo());
284 _readers.back()->reader = reader;
285 _readers.back()->chain = chain;
286 _readers.back()->filesHandler = filesHandler;
289 COUT(WARNING) <<
"Tree " << tName <<
" cannot be read by the requested reader. The reader has not been created."
296 COUT(WARNING) <<
"Can't find tree " << tName <<
". The reader has not been created." <<
ENDL;
const GGSTGeoParams * GetGeoParams(const GGSTFilesHandler *filesHandler=nullptr)
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.
GGSTFilesHandler * Open(const char *fileName, GGSTFilesHandler *filesHandler=nullptr, bool force=false)
Open ROOT files.
const GGSTParameters * GetGenParams(const GGSTFilesHandler *filesHandler=nullptr)
Returns the generator parameters.
Class for storing the geometry parameters on Root output file.
const GGSTSimInfo * GetSimInfo(const GGSTFilesHandler *filesHandler=nullptr)
Returns the simulation informations.
GGSTFilesHandler * Open(const std::string &fileName, GGSTFilesHandler *filesHandler=nullptr, bool force=false)
Open ROOT files.
const TGeoManager * GetROOTGeometry(const GGSTFilesHandler *filesHandler=nullptr)
Returns the simulation geometry in TGeo format.
GGSTRootReader()
Constructor.
A class to store simulation informations.
Class for writing parameters into the output Root file.
T * GetReader(GGSTFilesHandler *filesHandler=nullptr, const TString &treeName="")
Get a chain reader.