ATLAS Offline Software
Loading...
Searching...
No Matches
Event.h
Go to the documentation of this file.
1// Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2#ifndef XAODROOTACCESS_EVENT_H
3#define XAODROOTACCESS_EVENT_H
4
5// Local include(s):
7
8// Project include(s):
16
17// System include(s).
18#include <memory>
19#include <set>
20#include <string>
21#include <unordered_map>
22#include <vector>
23
24// Forward declaration(s).
25class TClass;
26class TFile;
27namespace xAODPrivate {
28class HolderBucket;
29class Loader;
30} // namespace xAODPrivate
31
32namespace xAOD {
33namespace Details {
34
37#ifdef XAOD_STANDALONE
39#else
40 implements<IProxyDict>;
41#endif
42
43// Forward declaration(s).
44class IObjectManager;
45
46} // namespace Details
47
48// Forward declaration(s).
50class TVirtualManager;
51
58class Event : public TVirtualEvent,
60 public asg::AsgMessaging {
61
62 // Declare the friend functions/classes.
64 friend class xAODPrivate::Loader;
65
66 public:
68 Event(std::string_view name);
70 virtual ~Event();
71
74
76 static const char* const EVENT_TREE_NAME;
77 static const char* const EVENT_RNTUPLE_NAME;
78 static const char* const METADATA_OBJECT_NAME;
79
83 static std::unique_ptr<Event> createAndReadFrom(TFile& file);
84
86 virtual StatusCode readFrom(TFile& inFile) = 0;
87
89 void setActive() const;
90
92 void setAuxItemList(const std::string& containerKey,
93 const std::string& itemList);
94
96 StatusCode addListener(TVirtualIncidentListener* listener);
98 StatusCode removeListener(TVirtualIncidentListener* listener);
100 void clearListeners();
101
103 StatusCode addNameRemap(const std::string& onfile,
104 const std::string& newName);
106 void clearNameRemap();
108 void printNameRemap() const;
109
111 void printProxyWarnings(bool value = true);
112
114
117
119 virtual ::Long64_t getEntries() const = 0;
121 virtual ::Int_t getEntry(::Long64_t entry, ::Int_t getall = 0) = 0;
122
123
125 const EventFormat* inputEventFormat() const;
127 const EventFormat* outputEventFormat() const;
128
130
133
135 std::string dump();
136
138 void printIOStats() const;
139
141 template <typename T>
142 bool contains(const std::string& key);
144 template <typename T>
145 bool transientContains(const std::string& key) const;
146
148 template <typename T>
149 StatusCode keys(std::vector<std::string>& vkeys, bool metadata) const;
150
152 template <typename T>
153 StatusCode retrieve(const T*& obj, const std::string& key);
155 template <typename T>
156 StatusCode retrieve(T*& obj, const std::string& key);
157
159 template <typename T>
160 StatusCode record(T* obj, const std::string& key);
162 template <typename T>
163 StatusCode record(std::unique_ptr<T> obj, const std::string& key);
164
166 StatusCode copy(const std::string& pattern = ".*");
167
169
172
174 template <typename T>
175 bool containsMeta(const std::string& key);
177 template <typename T>
178 bool transientContainsMeta(const std::string& key) const;
179
181 template <typename T>
182 StatusCode metaKeys(std::vector<std::string>& vkeys) const;
183
185 template <typename T>
186 StatusCode retrieveMetaInput(const T*& obj, const std::string& key);
187
189 template <typename T>
190 StatusCode retrieveMetaOutput(const T*& obj, const std::string& key);
192 template <typename T>
193 StatusCode retrieveMetaOutput(T*& obj, const std::string& key);
194
196 template <typename T>
197 StatusCode recordMeta(T* obj, const std::string& key);
200 template <typename T>
201 StatusCode recordMeta(std::unique_ptr<T> obj, const std::string& key);
202
204
207
209 SG::sgkey_t getHash(const std::string& key) const override;
211 SG::sgkey_t getKey(const void* obj) const override;
213 const std::string& getName(const void* obj) const override;
215 const std::string& getName(SG::sgkey_t hash) const override;
216
217 protected:
218
220 void* getOutputObject(SG::sgkey_t key, const std::type_info& ti) override;
222 const void* getInputObject(SG::sgkey_t key, const std::type_info& ti,
223 bool silent) override;
224
226
229
231 SG::DataProxy* proxy(const void* const pTransient) const override;
232
234 SG::DataProxy* proxy(const CLID& id, const std::string& key) const override;
235
237 SG::DataProxy* proxy_exact(SG::sgkey_t sgkey) const override;
238
240 StatusCode addToStore(CLID id, SG::DataProxy* proxy) override;
241
243 std::vector<const SG::DataProxy*> proxies() const override;
244
246 SG::sgkey_t stringToKey(const std::string& str, CLID clid) override;
247
249 const std::string* keyToString(SG::sgkey_t key) const override;
250
252 const std::string* keyToString(SG::sgkey_t key, CLID& clid) const override;
253
255 void registerKey(SG::sgkey_t key, const std::string& str, CLID clid) override;
256
259 const std::string& key, bool allowMods,
260 bool returnExisting) override;
261
263 const std::string& name() const override;
264
266
268 StatusCode recordTypeless(void* obj, const std::string& typeName,
269 const std::string& key, bool overwrite = false,
270 bool metadata = true, bool isOwner = true);
271
274
276 virtual bool hasInput() const = 0;
278 virtual bool hasOutput() const = 0;
279
281 virtual StatusCode getNames(const std::string& targetClassName,
282 std::vector<std::string>& vkeys,
283 bool metadata = false) const = 0;
284
286 virtual StatusCode connectObject(const std::string& key, bool silent) = 0;
288 virtual StatusCode connectMetaObject(const std::string& key, bool silent) = 0;
290 virtual StatusCode connectAux(const std::string& prefix, bool standalone) = 0;
293 virtual StatusCode connectMetaAux(const std::string& prefix,
294 bool standalone) = 0;
295
297 virtual StatusCode setAuxStore(const std::string& key,
299 bool metadata) = 0;
300
302 virtual StatusCode record(void* obj, const std::string& typeName,
303 const std::string& key, bool overwrite,
304 bool metadata, bool isOwner) = 0;
306 virtual StatusCode recordAux(TVirtualManager& mgr, const std::string& key,
307 bool metadata) = 0;
308
310
312 void* getOutputObject(const std::string& key, const std::type_info& ti,
313 bool metadata) const;
315 const void* getInputObject(const std::string& key, const std::type_info& ti,
316 bool silent, bool metadata);
318 bool contains(const std::string& key, const std::type_info& ti,
319 bool metadata);
321 bool transientContains(const std::string& key, const std::type_info& ti,
322 bool metadata) const;
323
325 using Object_t =
326 std::unordered_map<std::string, std::unique_ptr<TVirtualManager>>;
327
332 std::set<std::string> m_inputMissingObjects;
335
340
345
347 std::unordered_map<std::string, std::set<std::string>> m_auxItemList;
348
350 std::vector<TVirtualIncidentListener*> m_listeners;
351
353 std::unordered_map<std::string, std::string> m_nameRemapping;
354
357
360
362 struct BranchInfo {
364 std::unique_ptr<SG::DataProxy> m_proxy;
366 const ::TClass* m_class = 0;
367 }; // struct BranchInfo
368
370 using upgrade_mutex_t = AthContainers_detail::upgrade_mutex;
376
378 mutable SG::SGKeyMap<BranchInfo> m_branches
379 ATLAS_THREAD_SAFE; // protected by mutex
380
382
385
388 SG::sgkey_t sgkey) const;
389
391 const BranchInfo* getBranchInfo(SG::sgkey_t sgkey) const;
392
394
395}; // class Event
396
397} // namespace xAOD
398
399// Include the implementation of the template functions.
401
402#endif // XAODROOTACCESS_EVENT_H
uint32_t CLID
The Class ID type.
Define macros for attributes used to control the static checker.
Lock object for taking out upgradable locks.
Definition threading.h:177
Class mimicking the AthMessaging class from the offline software.
Helper object for holding something through a THolder.
Manager for EDM objects created by ROOT.
Class describing one branch of the ROOT file.
StatusCode removeListener(TVirtualIncidentListener *listener)
Remove an incident listener object.
virtual bool hasInput() const =0
Check if an input file is connected to the object.
StatusCode record(std::unique_ptr< T > obj, const std::string &key)
Add an output object to the event, explicitly taking ownership of it.
StatusCode addListener(TVirtualIncidentListener *listener)
Register an incident listener object.
Definition EventCore.cxx:97
virtual StatusCode connectAux(const std::string &prefix, bool standalone)=0
Function setting up access to a set of auxiliary branches.
StatusCode retrieve(T *&obj, const std::string &key)
Retrieve an output object from the event.
EventFormat m_inputEventFormat
Format of the current input file.
Definition Event.h:342
const std::string & name() const override
Get the name of the instance.
std::set< std::string > m_inputMissingObjects
Objects that have been asked for, but were found to be missing in the current input.
Definition Event.h:332
virtual StatusCode readFrom(TFile &inFile)=0
Read from a new file - only needed for the second+ files.
StatusCode retrieveMetaInput(const T *&obj, const std::string &key)
Retrieve an input metadata object.
virtual StatusCode getNames(const std::string &targetClassName, std::vector< std::string > &vkeys, bool metadata=false) const =0
Function determining the list keys associated with a type name.
bool transientContains(const std::string &key) const
Function checking if an object is already in memory.
const EventFormat * outputEventFormat() const
Get information about the output objects.
const std::string * keyToString(SG::sgkey_t key) const override
Find the string corresponding to a given key.
virtual StatusCode recordAux(TVirtualManager &mgr, const std::string &key, bool metadata)=0
Record an auxiliary store into a connected output file.
virtual bool hasOutput() const =0
Check if an output file is connected to the object.
void registerKey(SG::sgkey_t key, const std::string &str, CLID clid) override
Remember an additional mapping from key to string/CLID.
bool contains(const std::string &key, const std::type_info &ti, bool metadata)
Internal function checking if an object is in the input.
void clearListeners()
Remove all listeners from the object.
static std::unique_ptr< Event > createAndReadFrom(TFile &file)
static method to create an Event object and readFrom a file, given by a TFile.
Definition EventIO.cxx:39
StatusCode recordMeta(T *obj, const std::string &key)
Add an object to the output file's metadata.
void clearNameRemap()
Clear the current name re-mapping.
const EventFormat * inputEventFormat() const
Get information about the input objects.
virtual StatusCode record(void *obj, const std::string &typeName, const std::string &key, bool overwrite, bool metadata, bool isOwner)=0
Record an object into a connected output file.
bool contains(const std::string &key)
Function checking if an object is available from the store.
SG::sgkey_t stringToKey(const std::string &str, CLID clid) override
Find the string corresponding to a given key.
std::vector< const SG::DataProxy * > proxies() const override
return the list of all current proxies in store
const void * getInputObject(SG::sgkey_t key, const std::type_info &ti, bool silent) override
Function for retrieving an input object in a non-template way.
upgrade_mutex_t m_branchesMutex
Mutex for multithread synchronization.
Definition Event.h:375
virtual StatusCode connectObject(const std::string &key, bool silent)=0
Function setting up access to a particular object.
AthContainers_detail::upgrading_lock< upgrade_mutex_t > upgrading_lock_t
Lock type for multithread synchronization.
Definition Event.h:372
StatusCode addNameRemap(const std::string &onfile, const std::string &newName)
Add a name re-mapping rule.
StatusCode metaKeys(std::vector< std::string > &vkeys) const
Provide a list of all metadata object keys associated with a specific type.
const std::string & getName(const void *obj) const override
Function returning the key describing a known object.
SG::DataProxy * proxy_exact(SG::sgkey_t sgkey) const override
Get proxy given a hashed key+clid.
Object_t m_inputObjects
Collection of all the managed input objects.
Definition Event.h:329
void setAuxItemList(const std::string &containerKey, const std::string &itemList)
Configure which dynamic variables to write out for a given store.
Definition EventCore.cxx:71
static const char *const METADATA_OBJECT_NAME
Name of the metadata tree or RNTuple.
Definition Event.h:78
virtual ~Event()
Virtual destructor.
Definition EventCore.cxx:39
static const char *const EVENT_TREE_NAME
Default name of the event TTree.
Definition Event.h:76
StatusCode copy(const std::string &pattern=".*")
Copy an object directly from the input to the output.
Definition EventIO.cxx:75
SG::DataProxy * recordObject(SG::DataObjectSharedPtr< DataObject > obj, const std::string &key, bool allowMods, bool returnExisting) override
Record an object in the store.
std::string dump()
Function creating a user-readable dump of the current input.
void printProxyWarnings(bool value=true)
Enable warnings associated with broken element links.
virtual::Long64_t getEntries() const =0
Get how many entries are available from the current input file(s)
Event(std::string_view name)
Constructor with a name.
Definition EventCore.cxx:27
bool m_printEventProxyWarnings
Option to silence common warnings that seem to be harmless.
Definition Event.h:356
SG::sgkey_t getKey(const void *obj) const override
Function returning the hash describing a known object.
std::unordered_map< std::string, std::unique_ptr< TVirtualManager > > Object_t
Definition of the internal data structure type.
Definition Event.h:325
void * getOutputObject(SG::sgkey_t key, const std::type_info &ti) override
Function for retrieving an output object in a non-template way.
StatusCode addToStore(CLID id, SG::DataProxy *proxy) override
Add a new proxy to the store.
StatusCode retrieveMetaOutput(T *&obj, const std::string &key)
Retrieve an output metadata object.
virtual StatusCode connectMetaObject(const std::string &key, bool silent)=0
Function setting up access to a particular metadata object.
virtual StatusCode setAuxStore(const std::string &key, Details::IObjectManager &mgr, bool metadata)=0
Function connecting a DV object to its auxiliary store.
const BranchInfo * getBranchInfo(SG::sgkey_t sgkey) const
Get the object describing one object/branch.
StatusCode record(T *obj, const std::string &key)
Add an output object to the event.
bool transientContainsMeta(const std::string &key) const
Function checking if a meta-object is already in memory.
const xAOD::EventFormatElement * getEventFormatElement(SG::sgkey_t sgkey) const
Get the metadata object for a given "SG key".
void printNameRemap() const
Print the current name re-mapping rules.
StatusCode recordTypeless(void *obj, const std::string &typeName, const std::string &key, bool overwrite=false, bool metadata=true, bool isOwner=true)
Internal function for recording an object into the output.
StatusCode keys(std::vector< std::string > &vkeys, bool metadata) const
Provide a list of all data object keys associated with a specific type.
virtual StatusCode connectMetaAux(const std::string &prefix, bool standalone)=0
Function setting up access to a set of auxiliary branches for a metadata object.
StatusCode retrieveMetaOutput(const T *&obj, const std::string &key)
Retrieve an output metadata object.
StatusCode retrieve(const T *&obj, const std::string &key)
Retrieve either an input or an output object from the event.
StatusCode recordMeta(std::unique_ptr< T > obj, const std::string &key)
Add an object to the output file's metadata, explicitly taking ownership of it.
void setActive() const
Set this event object as the currently active one.
Definition EventCore.cxx:54
SG::sgkey_t getHash(const std::string &key) const override
Function returning the hash describing an object name.
static const char *const EVENT_RNTUPLE_NAME
Name of the event RNTuple.
Definition Event.h:77
std::unordered_map< std::string, std::string > m_nameRemapping
Container name re-mapping rules.
Definition Event.h:353
Object_t m_inputMetaObjects
Collection of all the managed input meta-objects.
Definition Event.h:337
std::unordered_map< std::string, std::set< std::string > > m_auxItemList
Rules for selecting which auxiliary branches to write.
Definition Event.h:347
EventFormat * m_outputEventFormat
Format of the current output file.
Definition Event.h:344
bool transientContains(const std::string &key, const std::type_info &ti, bool metadata) const
Internal function checking if an object is already in memory.
virtual::Int_t getEntry(::Long64_t entry, ::Int_t getall=0)=0
Function loading a given entry of the input TTree.
Object_t m_outputObjects
Collection of all the managed output object.
Definition Event.h:334
SG::SGKeyMap< BranchInfo > m_branches ATLAS_THREAD_SAFE
Map from hashed sgkey to BranchInfo.
Definition Event.h:379
void printIOStats() const
Function printing the I/O statistics of the current process.
bool containsMeta(const std::string &key)
Function checking if a meta-object is available from the store.
AthContainers_detail::upgrade_mutex upgrade_mutex_t
Mutex type for multithread synchronization.
Definition Event.h:370
std::vector< TVirtualIncidentListener * > m_listeners
Listeners who should be notified when certain incidents happen.
Definition Event.h:350
SG::DataProxy * proxy(const void *const pTransient) const override
get proxy for a given data object address in memory
Object_t m_outputMetaObjects
Collection of all the managed output meta-objects.
Definition Event.h:339
Base interface for getting objects out of the input file.
Class providing an interface for classes listening to xAOD incidents.
Interface class for the "manager classes".
CxxUtils::RefCountedPtr< T > DataObjectSharedPtr
uint32_t sgkey_t
Type used for hashed StoreGate key+CLID pairs.
Definition sgkey_t.h:32
std::unordered_map< sgkey_t, T > SGKeyMap
A map using sgkey_t as a key.
Definition sgkey_t.h:93
implements< IProxyDict > IProxyDictBase
IProxyDict base class to use in a specific build environment
Definition Event.h:36
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
EventFormat_v1 EventFormat
Definition of the current event format version.
Definition EventFormat.h:16
Helper struct used by the IProxyDict code.
Definition Event.h:362
std::unique_ptr< SG::DataProxy > m_proxy
Data proxy describing this branch/object.
Definition Event.h:364
const ::TClass * m_class
Dictionary describing this branch/object.
Definition Event.h:366
Threading definitions.
TFile * file