ATLAS Offline Software
Loading...
Searching...
No Matches
TrigFastCalibWithRings Class Reference

#include <TrigFastCalibWithRings.h>

Inheritance diagram for TrigFastCalibWithRings:
Collaboration diagram for TrigFastCalibWithRings:

Public Member Functions

 TrigFastCalibWithRings (const std::string &type, const std::string &myname, const IInterface *parent)
 ~TrigFastCalibWithRings ()
StatusCode initialize () final
 Dummy implementation of the initialisation function.
StatusCode execute () const
float makeCalibWRings (const EventContext &ctx) const
StatusCode setupBDTFastCalo (const std::string &fileName)
bool checkRings (const EventContext &ctx) const
virtual void print () const
 Print the state of the tool.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
Additional helper functions, not directly mimicking Athena
template<class T>
const T * getProperty (const std::string &name) const
 Get one of the tool's properties.
const std::string & msg_level_name () const __attribute__((deprecated))
 A deprecated function for getting the message level's name.
const std::string & getName (const void *ptr) const
 Get the name of an object that is / should be in the event store.
SG::sgkey_t getKey (const void *ptr) const
 Get the (hashed) key of an object that is in the event store.

Static Public Member Functions

static const TString & getString (TObject *obj)

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

Gaudi::Property< std::string > m_CalibPath
SG::ReadHandleKey< xAOD::TrigRingerRingsContainerm_ringerKey {this, "RingerKey" , "HLT_FastCaloRinger", ""}
std::unique_ptr< TH2Poly > m_hPoly
 A TH2Poly used to extract bin numbers. Note there is an offset of 1.
std::vector< MVAUtils::BDTm_BDTs
 Where the BDTs are stored.
std::vector< TFormula > m_shifts
 shifts formulas
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 25 of file TrigFastCalibWithRings.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ TrigFastCalibWithRings()

TrigFastCalibWithRings::TrigFastCalibWithRings ( const std::string & type,
const std::string & myname,
const IInterface * parent )

Definition at line 10 of file TrigFastCalibWithRings.cxx.

10:asg::AsgTool(myname){}

◆ ~TrigFastCalibWithRings()

TrigFastCalibWithRings::~TrigFastCalibWithRings ( )

Definition at line 13 of file TrigFastCalibWithRings.cxx.

13{}

Member Function Documentation

◆ checkRings()

bool TrigFastCalibWithRings::checkRings ( const EventContext & ctx) const

Definition at line 31 of file TrigFastCalibWithRings.cxx.

31 {
32 SG::ReadHandle<xAOD::TrigRingerRingsContainer> rgCont( m_ringerKey, ctx);
33 if (rgCont.isValid()){
34 ATH_MSG_DEBUG("No valid Ringer Container");
35 return false;
36 }
37 const xAOD::TrigRingerRings_v2 *ring=rgCont->at(0);
38 if(!ring->emCluster()){
39 ATH_MSG_DEBUG("There is no link to emCluster.");
40 return false;
41 }
42
43 return true;
44
45}
#define ATH_MSG_DEBUG(x)
SG::ReadHandleKey< xAOD::TrigRingerRingsContainer > m_ringerKey
const TrigEMCluster * emCluster() const
The associated EM cluster, as a simple pointer.

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode TrigFastCalibWithRings::execute ( ) const

Definition at line 26 of file TrigFastCalibWithRings.cxx.

26 {
27
28 return StatusCode::SUCCESS;
29}

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ getKey()

SG::sgkey_t asg::AsgTool::getKey ( const void * ptr) const
inherited

Get the (hashed) key of an object that is in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::TEvent both provide ways for getting the SG::sgkey_t key for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getName
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The hashed key of the object in the store. If not found, an invalid (zero) key.

Definition at line 119 of file AsgTool.cxx.

119 {
120
121#ifdef XAOD_STANDALONE
122 // In case we use @c xAOD::TEvent, we have a direct function call
123 // for this.
124 return evtStore()->event()->getKey( ptr );
125#else
126 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
127 return ( proxy == nullptr ? 0 : proxy->sgkey() );
128#endif // XAOD_STANDALONE
129 }
ServiceHandle< StoreGateSvc > & evtStore()

◆ getName()

const std::string & asg::AsgTool::getName ( const void * ptr) const
inherited

Get the name of an object that is / should be in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::TEvent both provide ways for getting the std::string name for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getKey
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The string name of the object in the store. If not found, an empty string.

Definition at line 106 of file AsgTool.cxx.

106 {
107
108#ifdef XAOD_STANDALONE
109 // In case we use @c xAOD::TEvent, we have a direct function call
110 // for this.
111 return evtStore()->event()->getName( ptr );
112#else
113 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
114 static const std::string dummy = "";
115 return ( proxy == nullptr ? dummy : proxy->name() );
116#endif // XAOD_STANDALONE
117 }

◆ getProperty()

template<class T>
const T * asg::AsgTool::getProperty ( const std::string & name) const
inherited

Get one of the tool's properties.

◆ getString()

const TString & TrigFastCalibWithRings::getString ( TObject * obj)
static

Definition at line 149 of file TrigFastCalibWithRings.cxx.

150{
151 TObjString *objS = dynamic_cast<TObjString*>(obj);
152 if (!objS) {
153 throw std::runtime_error("egammaMVACalibTool::getString was passed something that was not a string object");
154 }
155 return objS->GetString();
156}

◆ initialize()

StatusCode TrigFastCalibWithRings::initialize ( void )
finalvirtual

Dummy implementation of the initialisation function.

It's here to allow the dual-use tools to skip defining an initialisation function. Since many are doing so...

Reimplemented from asg::AsgTool.

Definition at line 15 of file TrigFastCalibWithRings.cxx.

15 {
16
17 ATH_CHECK(m_ringerKey.initialize());
18
19 //Setup the BDTs ...
21
22
23 return StatusCode::SUCCESS;
24}
#define ATH_CHECK
Evaluate an expression and check for errors.
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Gaudi::Property< std::string > m_CalibPath
StatusCode setupBDTFastCalo(const std::string &fileName)

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ makeCalibWRings()

float TrigFastCalibWithRings::makeCalibWRings ( const EventContext & ctx) const

Definition at line 160 of file TrigFastCalibWithRings.cxx.

160 {
161 SG::ReadHandle<xAOD::TrigRingerRingsContainer> rgCont( m_ringerKey, ctx);
162 const xAOD::TrigRingerRings_v2 *ring=rgCont->at(0);
163
164
165 //Open the EventContext and create a BDT input vector: Rings + Et + eta
166 float eta_cluster=ring->emCluster()->eta();
167 float et_cluster=ring->emCluster()->et();
168 const static std::vector<float>rings=rgCont->at(0)->rings();
169
170 //Define the Rings to be used as inputs
171 const std::vector<int>inputRingsIndex{0,1,2,3,8,9,10,11,12,13,14,15,72,73,74,75,76,77,78,79,81,82,83,84,88,89,90,91};
172
173 if (!(static_cast<int>(ring ->size()) > inputRingsIndex.back())){
174 throw std::runtime_error("The last ring index is bigger than the ring's lenght");
175 }
176
177 std::vector<float>ringsInput;
178 for(auto index:inputRingsIndex)ringsInput.push_back(rings[index]);
179
180 const TH2Poly* hPoly = m_hPoly.get();
181 const int bin = hPoly->FindFixBin(eta_cluster, et_cluster/Gaudi::Units::GeV) - 1; // poly bins are shifted by one
182
183 ATH_MSG_DEBUG("Using bin: " << bin);
184
185 if (bin < 0) {
186 ATH_MSG_DEBUG("The bin is under/overflow; just return the energy");
187 return et_cluster;
188 }
189
190 if (bin >= static_cast<int>(m_BDTs.size())) {
191 ATH_MSG_WARNING("The bin is outside the range, so just return the energy");
192 return et_cluster;
193 }
194
195 // select the bdt and functions. (shifts are done later if needed)
196 // if there is only one BDT just use that
197 const int bin_BDT = m_BDTs.size() != 1 ? bin : 0;
198 const auto& bdt = m_BDTs[bin_BDT];
199
200 // evaluate the BDT response
201 const float mvaOutput = bdt.GetResponse(ringsInput);
202
203
204
205 return et_cluster*mvaOutput;
206}
#define ATH_MSG_WARNING(x)
std::vector< MVAUtils::BDT > m_BDTs
Where the BDTs are stored.
std::unique_ptr< TH2Poly > m_hPoly
A TH2Poly used to extract bin numbers. Note there is an offset of 1.
float et() const
get Et (calibrated)
float eta() const
get Eta (calibrated)

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msg_level_name()

const std::string & asg::AsgTool::msg_level_name ( ) const
inherited

A deprecated function for getting the message level's name.

Instead of using this, weirdly named function, user code should get the string name of the current minimum message level (in case they really need it...), with:

MSG::name( msg().level() )

This function's name doesn't follow the ATLAS coding rules, and as such will be removed in the not too distant future.

Returns
The string name of the current minimum message level that's printed

Definition at line 101 of file AsgTool.cxx.

101 {
102
103 return MSG::name( msg().level() );
104 }
MsgStream & msg() const
const std::string & name(Level lvl)
Convenience function for translating message levels to strings.
Definition MsgLevel.cxx:19

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ print()

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setupBDTFastCalo()

StatusCode TrigFastCalibWithRings::setupBDTFastCalo ( const std::string & fileName)

Definition at line 48 of file TrigFastCalibWithRings.cxx.

48 {
49
50
51
52 std::unique_ptr<TFile> f(TFile::Open(fileName.c_str()));
53 if (!f || f->IsZombie()) {
54 ATH_MSG_FATAL("Could not open " << fileName);
55 return StatusCode::FAILURE;
56 }
57
58 // Load hPoly
59 TH2Poly *hPoly = nullptr;
60 f->GetObject("hPoly", hPoly);
61 if (!hPoly) {
62 ATH_MSG_FATAL("Could not find hPoly");
63 return StatusCode::FAILURE;
64 }
65 //pass ownership to class variable
66 m_hPoly.reset(static_cast<TH2Poly*>(hPoly));
67 m_hPoly->SetDirectory(nullptr);
68
69 // Load variables
70 TObjArray *variablesTmp = nullptr;
71 f->GetObject("variables", variablesTmp);
72 if (!variablesTmp) {
73 ATH_MSG_FATAL("Could not find variables");
74 return StatusCode::FAILURE;
75 }
76 auto variables = std::unique_ptr<TObjArray>(variablesTmp);
77 variables->SetOwner(); // to delete the objects when d-tor is called
78
79 // Load shifts
80 TObjArray *shiftsTmp = nullptr;
81 f->GetObject("shifts", shiftsTmp);
82 if (!shiftsTmp) {
83 ATH_MSG_FATAL("Could not find shifts");
84 return StatusCode::FAILURE;
85 }
86 auto shifts = std::unique_ptr<TObjArray>(shiftsTmp);
87 shifts->SetOwner(); // to delete the objects when d-tor is called
88
89 // Load trees
90 TObjArray *treesTmp = nullptr;
91 //std::unique_ptr<TObjArray> trees;
92 TObjArray *trees = nullptr;
93 f->GetObject("trees", treesTmp);
94 if (treesTmp) {
95 trees = treesTmp;
96 trees->SetOwner(); // to delete the objects when d-tor is called
97 ATH_MSG_DEBUG("setupBDT " << "BDTs read from TObjArray");
98 } else {
99 ATH_MSG_DEBUG("setupBDT " << "Reading trees individually");
100 trees = new TObjArray();
101 trees->SetOwner(); // to delete the objects when d-tor is called
102 for (int i = 0; i < variables->GetEntries(); ++i)
103 {
104 TTree *tree = nullptr;
105 f->GetObject(Form("BDT%d", i), tree);
106 if (tree) tree->SetCacheSize(0);
107 trees->AddAtAndExpand(tree, i);
108 }
109 }
110
111 // Ensure the objects have (the same number of) entries
112 if (!trees->GetEntries() || !(trees->GetEntries() == variables->GetEntries())) {
113 ATH_MSG_FATAL("Tree has size " << trees->GetEntries()
114 << " while variables has size " << variables->GetEntries());
115 return StatusCode::FAILURE;
116 }
117
118 // Loop simultaneously over trees, variables and shifts
119 // Define the BDTs, the list of variables and the shift for each BDT
120 TObjString *str2;
121
122 TTree *tree;
123 TIter nextTree(trees);
124 TIter nextVariables(variables.get());
125 TIter nextShift(shifts.get());
126 for (int i=0; (tree = (TTree*) nextTree()) && ((TObjString*) nextVariables()); ++i)
127 {
128 m_BDTs.emplace_back(tree);
129
130 std::vector<std::function<float(const xAOD::Egamma*, const xAOD::CaloCluster*)> > funcs;
131 // Loop over variables, which are separated by comma
132 char separator_var = ';';
133 if (getString(variables->At(i)).Index(";") < 1) separator_var = ','; // old versions
134 std::unique_ptr<TObjArray> tokens(getString(variables->At(i)).Tokenize(separator_var));
135 TIter nextVar(tokens.get());
136 while ((str2 = (TObjString*) nextVar()))
137 {
138 const TString& varName = getString(str2);
139 if (!varName.Length()) {
140 ATH_MSG_FATAL("There was an empty variable name!");
141 return StatusCode::FAILURE;
142 }
143 }
144 }
145return StatusCode::SUCCESS;
146}
#define ATH_MSG_FATAL(x)
static const TString & getString(TObject *obj)
str varName
end cluster ToT and charge
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
Egamma_v1 Egamma
Definition of the current "egamma version".
Definition Egamma.h:17
TChain * tree

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_BDTs

std::vector<MVAUtils::BDT> TrigFastCalibWithRings::m_BDTs
private

Where the BDTs are stored.

Definition at line 48 of file TrigFastCalibWithRings.h.

◆ m_CalibPath

Gaudi::Property<std::string> TrigFastCalibWithRings::m_CalibPath
private
Initial value:
{this, "CalibPath", "",
"Path to BDT File"}

Definition at line 41 of file TrigFastCalibWithRings.h.

41 {this, "CalibPath", "",
42 "Path to BDT File"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_hPoly

std::unique_ptr<TH2Poly> TrigFastCalibWithRings::m_hPoly
private

A TH2Poly used to extract bin numbers. Note there is an offset of 1.

Definition at line 45 of file TrigFastCalibWithRings.h.

◆ m_ringerKey

SG::ReadHandleKey<xAOD::TrigRingerRingsContainer> TrigFastCalibWithRings::m_ringerKey {this, "RingerKey" , "HLT_FastCaloRinger", ""}
private

Definition at line 43 of file TrigFastCalibWithRings.h.

43{this, "RingerKey" , "HLT_FastCaloRinger", ""};

◆ m_shifts

std::vector<TFormula> TrigFastCalibWithRings::m_shifts
private

shifts formulas

Definition at line 51 of file TrigFastCalibWithRings.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: