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);
220 TChain *_FindChain(
const TString &treeName,
GGSTFilesHandler *filesHandler);
221 TChain *_CreateChain(
const TString &treeName,
GGSTFilesHandler *filesHandler);
222 bool _CheckBranches(TTree *tree1, TTree *tree2);
225 Long64_t _GetEntriesBlind();
227 std::vector<GGSTFilesHandler *> _filesHandlers;
234 ~ReadersInfo() {
delete reader; }
236 typedef std::vector<ReadersInfo *> ReadersStore;
238 ReadersStore _readers;
247 static const char *routineName =
"GGSTRootReader::GetReader";
250 if (filesHandler ==
nullptr) {
251 if (_filesHandlers.size() > 0)
252 filesHandler = _filesHandlers[0];
256 TString tName(treeName);
258 tName =
"GGSEventsTree";
262 for (
unsigned int iReader = 0; iReader < _readers.size(); iReader++) {
263 if (_readers[iReader]->filesHandler == filesHandler && _readers[iReader]->chain->GetName() == tName) {
265 T *retVal =
dynamic_cast<T *
>(_readers[iReader]->reader);
273 TChain *chain = _FindChain(tName, filesHandler);
279 if (chain->GetReadEntry() < 0)
281 if (reader->SetChain(chain)) {
284 for (
unsigned int iReader = 0; iReader < _readers.size(); iReader++) {
285 if (chain->GetEntries() != _readers[iReader]->chain->GetEntries()) {
286 GGSCOUT(WARNING) << routineName <<
"Event number for the requested reader (" << chain->GetEntries()
287 <<
") and for reader no. " << iReader <<
" (" << _readers[iReader]->chain->GetEntries()
288 <<
") do not match. The reader has not been created." << std::endl;
293 if (_currentEv != -1)
294 reader->GetEntry(_currentEv);
295 _readers.push_back(
new ReadersInfo());
296 _readers.back()->reader = reader;
297 _readers.back()->chain = chain;
298 _readers.back()->filesHandler = filesHandler;
301 GGSCOUT(WARNING) <<
"Tree " << tName
302 <<
" cannot be read by the requested reader. The reader has not been created." << std::endl;
308 GGSCOUT(WARNING) <<
"Can't find tree " << tName <<
". The reader has not been created." <<
GGSENDL;
bool HasROOTGeometry(GGSTFilesHandler *filesHandler=nullptr)
Checks if the data files contains the detector geometry in TGeo format.
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.
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.
const TGeoManager * GetROOTGeometry(GGSTFilesHandler *filesHandler=nullptr)
Returns the simulation geometry in TGeo format.
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.
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.