11#ifndef ATHENAROOTCOMPS_ATHENA_ROOTNTUPLEEVENTSELECTOR_H
12#define ATHENAROOTCOMPS_ATHENA_ROOTNTUPLEEVENTSELECTOR_H 1
15#include <unordered_map>
19#include "GaudiKernel/IEvtSelector.h"
20#include "GaudiKernel/IIoComponent.h"
21#include "GaudiKernel/IIncidentSvc.h"
22#include "GaudiKernel/MsgStream.h"
23#include "Gaudi/Property.h"
24#include "GaudiKernel/ServiceHandle.h"
31#include "TObjString.h"
49 public extends<AthService,
50 IEvtSelector, IEvtSelectorSeek,
51 IAddressProvider, IIoComponent, IIncidentListener>
70 virtual StatusCode
stop()
override;
71 virtual StatusCode
finalize()
override;
73 virtual void handle(
const Incident& incident)
override;
77 virtual StatusCode
createContext( Context*& refpCtxt )
const override;
79 virtual StatusCode
last( Context& refContext )
const override;
80 virtual StatusCode
next( Context& refCtxt )
const override;
81 virtual StatusCode
next( Context& refCtxt,
int jump )
const override;
82 virtual StatusCode
previous( Context& refCtxt )
const override;
83 virtual StatusCode
previous( Context& refCtxt,
int jump )
const override;
84 virtual StatusCode
rewind( Context& refCtxt )
const override;
87 IOpaqueAddress*& )
const override;
88 virtual StatusCode
releaseContext( Context*& refCtxt )
const override;
90 Context& ctx )
const override;
99 virtual StatusCode
seek (Context& refCtxt,
int evtnum)
const override;
105 virtual int curEvent (
const Context& refCtxt)
const override;
125 const EventContext& ctx)
override;
129 virtual int size (Context& refCtxt)
const override;
156 const std::string& tupleName)
const;
160 const std::string &prefix =
"")
const;
162 const std::string &prefix =
"")
const;
163 void addMetadata(TTree *metatree,
const std::string &path =
"")
const;
164 void addMetadata(TObjString *metastring,
const std::string &path =
"")
const;
169 const std::string& prefix)
const;
178 void find_coll_idx(
int evtidx,
long& coll_idx,
long& tuple_idx)
const;
191 StoreGateSvc_t m_dataStore;
194 StoreGateSvc_t m_imetaStore;
197 StoreGateSvc_t m_ometaStore;
201 ICLIDSvc_t m_clidsvc;
205 IDictSvc_t m_dictsvc;
212 StringArrayProperty m_inputCollectionsName;
215 StringProperty m_tupleName;
218 StringArrayProperty m_activeBranchNames;
224 std::vector<std::string> m_tupleNames;
227 mutable long m_nbrEvts;
230 mutable long m_curEvt;
232 struct CollMetaData {
Extension to IEvtSelector to allow for seeking.
Define macros for attributes used to control the static checker.
ROOT specific event selector context.
virtual StatusCode seek(Context &refCtxt, int evtnum) const override
Seek to a given event number.
virtual StatusCode finalize() override
virtual int size(Context &refCtxt) const override
ICollectionSize interface
RootNtupleEventSelector(const std::string &name, ISvcLocator *svcLoc)
Constructor with parameters:
virtual StatusCode releaseContext(Context *&refCtxt) const override
virtual int curEvent(const Context &refCtxt) const override
return the current event number.
void setupInputCollection(Gaudi::Details::PropertyBase &inputCollectionsName)
callback to synchronize the list of input files
virtual StatusCode loadAddresses(StoreID::type storeID, tadList &list) override
get all new addresses from Provider for this Event.
virtual StatusCode last(Context &refContext) const override
virtual StatusCode resetCriteria(const std::string &cr, Context &ctx) const override
virtual StatusCode preLoadAddresses(StoreID::type storeID, tadList &list) override
TTree * m_tuple
current tree being read
std::vector< std::vector< CollMetaData > > m_collEvts
helper method to get the collection index (into m_inputCollectionsName) and tuple index (into m_tuple...
bool m_needReload
The (python) selection function to apply on the TChain we are reading.
virtual StatusCode updateAddress(StoreID::type storeID, SG::TransientAddress *tad, const EventContext &ctx) override
update a transient Address
std::vector< TFile * > m_files
virtual StatusCode next(Context &refCtxt) const override
StatusCode endInputFile(RootNtupleEventContext *rctx) const
StatusCode do_init_io()
helper method to init the i/o components
StatusCode createMetaDataRootBranchAddresses(StoreGateSvc *store, TTree *tree, const std::string &prefix) const
helper method to create proxies for the metadata store
bool m_fireBIF
Flag to fire BeginInputFile on the next BeginEvent incident.
friend class Athena::RootNtupleEventContext
void addMetadataFromDirectoryName(const std::string &metadirname, TFile *fileObj, const std::string &prefix="") const
virtual StatusCode createContext(Context *&refpCtxt) const override
std::optional< InputFileIncidentGuard > m_inputFileGuard
RAII guard: guarantees a matching EndInputFile for every BeginInputFile.
void addMetadataFromDirectory(TDirectoryFile *metadir, const std::string &prefix="") const
void addMetadata(TTree *metatree, const std::string &path="") const
TTree * fetchNtuple(const std::string &fname, const std::string &tupleName) const
helper method to retrieve the correct tuple
virtual void handle(const Incident &incident) override
StatusCode createRootBranchAddresses(StoreID::type storeID, tadList &tads)
helper method to create proxies
virtual StatusCode previous(Context &refCtxt) const override
virtual StatusCode stop() override
virtual StatusCode io_reinit() override
Callback method to reinitialize the internal state of the component for I/O purposes (e....
virtual StatusCode rewind(Context &refCtxt) const override
virtual StatusCode createAddress(const Context &refCtxt, IOpaqueAddress *&) const override
a simple interface to interact with the Reflex dictionaries and abstract/workaround a few ROOT bugs.
The Athena Transient Store API.
Some weak symbol referencing magic... These are declared in AthenaKernel/getMessageSvc....
find_coll_idx(-1, coll_idx, tuple_idx)
StatusCode ROOTMessageFilterSvc::initialize ATLAS_NOT_THREAD_SAFE()
Return the file descriptor fataldump() uses for output.