ATLAS Offline Software
Loading...
Searching...
No Matches
TreeBranchHelpers.h
Go to the documentation of this file.
1// Dear emacs, this is -*- c++ -*-
2//
3// Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
4//
5#ifndef ASGANALYSISALGORITHMS_TREEBRANCHHELPERS_H
6#define ASGANALYSISALGORITHMS_TREEBRANCHHELPERS_H
7// System include(s):
8#include <unordered_map>
9#include <string>
10#include <vector>
11#include <memory>
12#include <list>
13
14// Framework include(s):
22
23// EDM include(s):
26
27// Forward declaration(s):
28class TClass;
29class TTree;
30class TVirtualCollectionProxy;
31namespace SG {
32 class AuxVectorBase;
34}
35
36namespace CP
37{
48
50 {
52#ifdef XAOD_STANDALONE
54#else
56#endif
57
58
59
62 {
64 std::string branchDecl;
65
67 std::string sgName;
68
70 std::string auxName;
71
73 std::string branchName;
74
76 std::string typeName;
77
79 bool nominalOnly = false;
80
82 std::string metTermName;
83
84
87
89 const std::type_info* auxType = nullptr;
90
92 const std::type_info* auxVecType = nullptr;
93
96
97
100
103
106
107
109 StatusCode parse (const std::string& branchDecl, MsgStream& msg);
110
112 StatusCode configureTypes (std::set<std::string>& decosWithoutType, MsgStream& msg);
113
115 StatusCode configureSystematics (ISystematicsSvc& sysSvc, MsgStream& msg);
116 };
117
118
119
122 {
124 const BranchConfig *branchConfig = nullptr;
125
127 std::size_t sysIndex = 0u;
128
130 bool isNominal = false;
131
133 std::string sgName;
134
136 std::string auxName;
137
139 std::string branchName;
140
141
143 StatusCode configureNames (const BranchConfig& branchConfig, const CP::SystematicSet& sys, ISystematicsSvc& sysSvc, MsgStream& msg);
144 };
145
146
147
150 {
151 public:
153 virtual ~IBranchProcessor() = default;
154 };
155
156
157
167 {
168 public:
170 virtual ~IObjectProcessor() = default;
171
178 virtual StatusCode retrieveProcess (StoreType& evtStore) = 0;
179
193 virtual StatusCode addBranch( TTree& tree, const BranchConfig& branchConfig, OutputBranchData& outputData ) = 0;
194 };
195
196
197
198
199
216
217 public:
232 StatusCode setup( TTree& tree, const BranchConfig& branchConfig, OutputBranchData& outputData, MsgStream& msg );
233
246 StatusCode process( const SG::AuxElement& element,
247 MsgStream& msg );
248
250 std::string m_branchName;
252 std::unique_ptr< SG::TypelessConstAccessor > m_acc;
256 std::unique_ptr< SG::IAuxTypeVector > m_data;
258 void* m_dataPtr = nullptr;
259
260 }; // class ElementBranchProcessor
261
262
263
286
287 public:
289 StatusCode setup( TTree& tree, const BranchConfig& branchConfig, OutputBranchData& outputData, MsgStream& msg );
291 StatusCode resize( size_t size, MsgStream& msg );
293 StatusCode process( const SG::AuxElement& element, size_t index,
294 MsgStream& msg );
295
297 std::string m_branchName;
299 std::unique_ptr< SG::TypelessConstAccessor > m_acc;
303 std::unique_ptr< SG::IAuxTypeVector > m_data;
305 void* m_dataPtr = nullptr;
306
307 }; // class ContainerBranchProcessor
308
309
310
311
319
320 public:
327 ElementProcessorRegular(const std::string& sgName);
328
330 StatusCode retrieveProcess (StoreType& evtStore) override;
331
348 StatusCode addBranch( TTree& tree, const BranchConfig& branchConfig, OutputBranchData& outputData ) override;
349
350 private:
351
361 std::vector<std::unique_ptr<ElementBranchProcessor>> m_branches;
362
364 std::string m_sgName;
365
366 }; // class ElementProcessorRegular
367
368
381
382 public:
389 ContainerProcessorRegular(const std::string& sgName);
390
392 StatusCode retrieveProcess (StoreType& evtStore) override;
393
410 StatusCode addBranch( TTree& tree, const BranchConfig& branchConfig, OutputBranchData& outputData ) override;
411
412 private:
422 std::vector<std::unique_ptr<ContainerBranchProcessor>> m_branches;
424 TVirtualCollectionProxy* m_collProxy = nullptr;
427
429 std::string m_sgName;
430
431 }; // class ContainerProcessorRegular
432
433
434
442
443 public:
450 ElementProcessorMet (const std::string& sgName, const std::string& termName);
451
453 StatusCode retrieveProcess (StoreType& evtStore) override;
454
471 StatusCode addBranch( TTree& tree, const BranchConfig& branchConfig, OutputBranchData& outputData ) override;
472
473 private:
474
484 std::vector<std::unique_ptr<ElementBranchProcessor>> m_branches;
485
487 std::string m_sgName;
488
490 std::string m_termName;
491
492 }; // class ElementProcessorMet
493
494
495
497 public:
498 using AsgMessagingForward::AsgMessagingForward;
499
502 StatusCode setupTree(const std::vector<std::string>& branches, std::unordered_set<std::string> nonContainers, ISystematicsSvc& sysSvc, TTree& tree );
503
505 StatusCode setupBranch( const BranchConfig& branchConfig, OutputBranchData& outputData, TTree& tree );
506
507 StatusCode process (StoreType& evtStore);
508
509 IObjectProcessor& getObjectProcessor (const BranchConfig& branchConfig, const std::string& sgName);
510
512 std::unordered_set<std::string> m_nonContainers;
513
515 std::unordered_map< std::string, std::unique_ptr<IObjectProcessor>> m_processors;
516 };
517 }
518}
519
520#endif
Base class for elements of a container that can have aux data.
Abstract interface for manipulating vectors of arbitrary types.
Define macros for attributes used to control the static checker.
the interface for the central systematics service
Class to wrap a set of SystematicVariations.
Class writing one variable from an xAOD object into a branch.
std::string m_branchName
Name of the branch being written.
StatusCode resize(size_t size, MsgStream &msg)
Function (re)sizing the variable for a new event.
std::unique_ptr< SG::IAuxTypeVector > m_data
The object managing the memory of the written variable.
std::unique_ptr< SG::TypelessConstAccessor > m_acc
Object accessing the variable in question.
StatusCode setup(TTree &tree, const BranchConfig &branchConfig, OutputBranchData &outputData, MsgStream &msg)
Function setting up the object, and the branch.
const SG::IAuxTypeVectorFactory * m_factory
Pointer to the helper object that handles this variable.
void * m_dataPtr
Helper variable, pointing at the object to be written.
TVirtualCollectionProxy * m_collProxy
Collection proxy used for iterating over the container.
std::string m_sgName
Name of the object in the event store.
int m_auxElementOffset
Offset of the element type to SG::AuxElement.
StatusCode retrieveProcess(StoreType &evtStore) override
retrieve and process the object
StatusCode addBranch(TTree &tree, const BranchConfig &branchConfig, OutputBranchData &outputData) override
Add one branch to the output tree.
std::vector< std::unique_ptr< ContainerBranchProcessor > > m_branches
List of branch processors set up for this xAOD object.
ContainerProcessorRegular(const std::string &sgName)
Default constructor.
Class writing one variable from an xAOD object into a branch.
std::unique_ptr< SG::IAuxTypeVector > m_data
The object managing the memory of the written variable.
void * m_dataPtr
Helper variable, pointing at the object to be written.
const SG::IAuxTypeVectorFactory * m_factory
Pointer to the helper object that handles this variable.
std::string m_branchName
Name of the branch being written.
StatusCode setup(TTree &tree, const BranchConfig &branchConfig, OutputBranchData &outputData, MsgStream &msg)
Function setting up the object, and the branch.
std::unique_ptr< SG::TypelessConstAccessor > m_acc
Object accessing the variable in question.
std::vector< std::unique_ptr< ElementBranchProcessor > > m_branches
List of branch processors set up for this xAOD object.
std::string m_termName
Name of the MET term to retrieve.
StatusCode addBranch(TTree &tree, const BranchConfig &branchConfig, OutputBranchData &outputData) override
Add one branch to the output tree.
ElementProcessorMet(const std::string &sgName, const std::string &termName)
Default constructor.
StatusCode retrieveProcess(StoreType &evtStore) override
retrieve and process the object
std::string m_sgName
Name of the object in the event store.
StatusCode retrieveProcess(StoreType &evtStore) override
retrieve and process the object
StatusCode addBranch(TTree &tree, const BranchConfig &branchConfig, OutputBranchData &outputData) override
Add one branch to the output tree.
std::string m_sgName
Name of the object in the event store.
ElementProcessorRegular(const std::string &sgName)
Default constructor.
std::vector< std::unique_ptr< ElementBranchProcessor > > m_branches
List of branch processors set up for this xAOD object.
the interface class for branch processors
virtual ~IBranchProcessor()=default
virtual destructor
the interface class for classes reading an object from the event store and processing it
virtual StatusCode addBranch(TTree &tree, const BranchConfig &branchConfig, OutputBranchData &outputData)=0
Add one branch to the output tree.
virtual StatusCode retrieveProcess(StoreType &evtStore)=0
retrieve and process the object
virtual ~IObjectProcessor()=default
virtual destructor
StatusCode setupBranch(const BranchConfig &branchConfig, OutputBranchData &outputData, TTree &tree)
Function setting up an individual branch on the first event.
std::unordered_set< std::string > m_nonContainers
the non-containers
IObjectProcessor & getObjectProcessor(const BranchConfig &branchConfig, const std::string &sgName)
StatusCode setupTree(const std::vector< std::string > &branches, std::unordered_set< std::string > nonContainers, ISystematicsSvc &sysSvc, TTree &tree)
Function setting up the internal data structures on the first event for regular branches.
std::unordered_map< std::string, std::unique_ptr< IObjectProcessor > > m_processors
object processors
Base class for elements of a container that can have aux data.
Definition AuxElement.h:483
Manage index tracking and synchronization of auxiliary data.
Interface for factory objects that create vectors.
The Athena Transient Store API.
base class to forward messages to another class
Class mimicking the AthMessaging class from the offline software.
Wrapper for TEvent to make it look like StoreGate.
Definition SgTEvent.h:44
const std::string process
a namespace for helper functions and objects for filling tree branches
StoreGateSvc StoreType
the type of the event store in the current environment
Select isolated Photons, Electrons and Muons.
Forward declaration.
static const auxid_t null_auxid
To signal no aux data item.
Definition AuxTypes.h:30
size_t auxid_t
Identifier for a particular aux data item.
Definition AuxTypes.h:27
Definition index.py:1
void ErrorHandler ATLAS_NOT_THREAD_SAFE(Int_t level, Bool_t abort, const char *location, const char *message)
Function filtering the warnings coming from ROOT.
Definition Init.cxx:105
the user configuration of an output branch
std::string branchDecl
the original user configuration string
std::string sgName
the SG name of the object to read from
const SG::IAuxTypeVectorFactory * auxFactory
pointer to the aux vector factory
std::string auxName
the aux data variable name to read from
const std::type_info * auxVecType
the vector type of the decoration we read
CP::SystematicSet auxNameFilterSys
the affecting systematics for the auxName
CP::SystematicSet sgNameFilterSys
the affecting systematics for the sgName
CP::SystematicSet branchNameFilterSys
the affecting systematics for the branchName
const std::type_info * auxType
the type of the decoration we read
StatusCode configureSystematics(ISystematicsSvc &sysSvc, MsgStream &msg)
configure the systematics
SG::auxid_t nominalAuxId
the aux-id for the nominal decoration
std::string branchName
the name of the output branch
std::string metTermName
MET ONLY: the name of the MET term to write out.
bool nominalOnly
whether we only want to write out the nominal
StatusCode configureTypes(std::set< std::string > &decosWithoutType, MsgStream &msg)
configure the associated decoration types
StatusCode parse(const std::string &branchDecl, MsgStream &msg)
parse the user configuration string
std::string typeName
the name of the type (or empty to read from aux-registry)
the data for a single output branch
bool isNominal
whether this is unaffected by systematics (i.e. nominal)
const BranchConfig * branchConfig
the BranchConfig we are based on
std::size_t sysIndex
the index in the systematics list
StatusCode configureNames(const BranchConfig &branchConfig, const CP::SystematicSet &sys, ISystematicsSvc &sysSvc, MsgStream &msg)
configure names for systematics
std::string auxName
the name of the decoration in the aux-store
std::string sgName
the SG name of the object to read from
std::string branchName
the name of the output branch
MsgStream & msg
Definition testRead.cxx:32
TChain * tree