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;
26namespace xAODPrivate {
27class HolderBucket;
28class Loader;
29} // namespace xAODPrivate
30
31namespace xAOD {
32namespace Details {
33
36#ifdef XAOD_STANDALONE
38#else
39 implements<IProxyDict>;
40#endif
41
42// Forward declaration(s).
43class IObjectManager;
44
45} // namespace Details
46
47// Forward declaration(s).
49class TVirtualManager;
50
57class Event : public TVirtualEvent,
59 public asg::AsgMessaging {
60
61 // Declare the friend functions/classes.
63 friend class xAODPrivate::Loader;
64
65 public:
67 Event(std::string_view name);
69 virtual ~Event();
70
73
75 void setActive() const;
76
78 void setAuxItemList(const std::string& containerKey,
79 const std::string& itemList);
80
82 StatusCode addListener(TVirtualIncidentListener* listener);
84 StatusCode removeListener(TVirtualIncidentListener* listener);
86 void clearListeners();
87
89 StatusCode addNameRemap(const std::string& onfile,
90 const std::string& newName);
92 void clearNameRemap();
94 void printNameRemap() const;
95
97 void printProxyWarnings(bool value = true);
98
100
103
105 const EventFormat* inputEventFormat() const;
107 const EventFormat* outputEventFormat() const;
108
110
113
115 std::string dump();
116
118 void printIOStats() const;
119
121 template <typename T>
122 bool contains(const std::string& key);
124 template <typename T>
125 bool transientContains(const std::string& key) const;
126
128 template <typename T>
129 StatusCode keys(std::vector<std::string>& vkeys, bool metadata) const;
130
132 template <typename T>
133 StatusCode retrieve(const T*& obj, const std::string& key);
135 template <typename T>
136 StatusCode retrieve(T*& obj, const std::string& key);
137
139 template <typename T>
140 StatusCode record(T* obj, const std::string& key);
142 template <typename T>
143 StatusCode record(std::unique_ptr<T> obj, const std::string& key);
144
146 StatusCode copy(const std::string& pattern = ".*");
147
149
152
154 template <typename T>
155 bool containsMeta(const std::string& key);
157 template <typename T>
158 bool transientContainsMeta(const std::string& key) const;
159
161 template <typename T>
162 StatusCode metaKeys(std::vector<std::string>& vkeys) const;
163
165 template <typename T>
166 StatusCode retrieveMetaInput(const T*& obj, const std::string& key);
167
169 template <typename T>
170 StatusCode retrieveMetaOutput(const T*& obj, const std::string& key);
172 template <typename T>
173 StatusCode retrieveMetaOutput(T*& obj, const std::string& key);
174
176 template <typename T>
177 StatusCode recordMeta(T* obj, const std::string& key);
180 template <typename T>
181 StatusCode recordMeta(std::unique_ptr<T> obj, const std::string& key);
182
184
187
189 SG::sgkey_t getHash(const std::string& key) const override;
191 SG::sgkey_t getKey(const void* obj) const override;
193 const std::string& getName(const void* obj) const override;
195 const std::string& getName(SG::sgkey_t hash) const override;
196
197 protected:
199 void* getOutputObject(SG::sgkey_t key, const std::type_info& ti) override;
201 const void* getInputObject(SG::sgkey_t key, const std::type_info& ti,
202 bool silent) override;
203
205
208
210 SG::DataProxy* proxy(const void* const pTransient) const override;
211
213 SG::DataProxy* proxy(const CLID& id, const std::string& key) const override;
214
216 SG::DataProxy* proxy_exact(SG::sgkey_t sgkey) const override;
217
219 StatusCode addToStore(CLID id, SG::DataProxy* proxy) override;
220
222 std::vector<const SG::DataProxy*> proxies() const override;
223
225 SG::sgkey_t stringToKey(const std::string& str, CLID clid) override;
226
228 const std::string* keyToString(SG::sgkey_t key) const override;
229
231 const std::string* keyToString(SG::sgkey_t key, CLID& clid) const override;
232
234 void registerKey(SG::sgkey_t key, const std::string& str, CLID clid) override;
235
238 const std::string& key, bool allowMods,
239 bool returnExisting) override;
240
242 const std::string& name() const override;
243
245
247 StatusCode recordTypeless(void* obj, const std::string& typeName,
248 const std::string& key, bool overwrite = false,
249 bool metadata = true, bool isOwner = true);
250
253
255 virtual bool hasInput() const = 0;
257 virtual bool hasOutput() const = 0;
258
260 virtual StatusCode getNames(const std::string& targetClassName,
261 std::vector<std::string>& vkeys,
262 bool metadata = false) const = 0;
263
265 virtual StatusCode connectObject(const std::string& key, bool silent) = 0;
267 virtual StatusCode connectMetaObject(const std::string& key, bool silent) = 0;
269 virtual StatusCode connectAux(const std::string& prefix, bool standalone) = 0;
272 virtual StatusCode connectMetaAux(const std::string& prefix,
273 bool standalone) = 0;
274
276 virtual StatusCode setAuxStore(const std::string& key,
278 bool metadata) = 0;
279
281 virtual StatusCode record(void* obj, const std::string& typeName,
282 const std::string& key, bool overwrite,
283 bool metadata, bool isOwner) = 0;
285 virtual StatusCode recordAux(TVirtualManager& mgr, const std::string& key,
286 bool metadata) = 0;
287
289
291 void* getOutputObject(const std::string& key, const std::type_info& ti,
292 bool metadata) const;
294 const void* getInputObject(const std::string& key, const std::type_info& ti,
295 bool silent, bool metadata);
297 bool contains(const std::string& key, const std::type_info& ti,
298 bool metadata);
300 bool transientContains(const std::string& key, const std::type_info& ti,
301 bool metadata) const;
302
304 using Object_t =
305 std::unordered_map<std::string, std::unique_ptr<TVirtualManager>>;
306
311 std::set<std::string> m_inputMissingObjects;
314
319
324
326 std::unordered_map<std::string, std::set<std::string>> m_auxItemList;
327
329 std::vector<TVirtualIncidentListener*> m_listeners;
330
332 std::unordered_map<std::string, std::string> m_nameRemapping;
333
336
339
341 struct BranchInfo {
343 std::unique_ptr<SG::DataProxy> m_proxy;
345 const ::TClass* m_class = 0;
346 }; // struct BranchInfo
347
349 using upgrade_mutex_t = AthContainers_detail::upgrade_mutex;
355
357 mutable SG::SGKeyMap<BranchInfo> m_branches
358 ATLAS_THREAD_SAFE; // protected by mutex
359
361
364
367 SG::sgkey_t sgkey) const;
368
370 const BranchInfo* getBranchInfo(SG::sgkey_t sgkey) const;
371
373
374}; // class Event
375
376} // namespace xAOD
377
378// Include the implementation of the template functions.
380
381#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:321
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:311
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.
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:354
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:351
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:308
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
virtual ~Event()
Virtual destructor.
Definition EventCore.cxx:39
StatusCode copy(const std::string &pattern=".*")
Copy an object directly from the input to the output.
Definition EventIO.cxx:28
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.
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:335
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:304
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.
std::unordered_map< std::string, std::string > m_nameRemapping
Container name re-mapping rules.
Definition Event.h:332
Object_t m_inputMetaObjects
Collection of all the managed input meta-objects.
Definition Event.h:316
std::unordered_map< std::string, std::set< std::string > > m_auxItemList
Rules for selecting which auxiliary branches to write.
Definition Event.h:326
EventFormat * m_outputEventFormat
Format of the current output file.
Definition Event.h:323
bool transientContains(const std::string &key, const std::type_info &ti, bool metadata) const
Internal function checking if an object is already in memory.
Object_t m_outputObjects
Collection of all the managed output object.
Definition Event.h:313
SG::SGKeyMap< BranchInfo > m_branches ATLAS_THREAD_SAFE
Map from hashed sgkey to BranchInfo.
Definition Event.h:358
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:349
std::vector< TVirtualIncidentListener * > m_listeners
Listeners who should be notified when certain incidents happen.
Definition Event.h:329
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:318
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:35
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:341
std::unique_ptr< SG::DataProxy > m_proxy
Data proxy describing this branch/object.
Definition Event.h:343
const ::TClass * m_class
Dictionary describing this branch/object.
Definition Event.h:345
Threading definitions.