ATLAS Offline Software
Loading...
Searching...
No Matches
Prompt::DecoratePromptLeptonImproved Class Reference

#include <DecoratePromptLeptonImproved.h>

Inheritance diagram for Prompt::DecoratePromptLeptonImproved:

Public Member Functions

 DecoratePromptLeptonImproved (const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode initialize () override
virtual StatusCode execute () override
virtual StatusCode finalize () override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
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 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

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

using decoratorFloatH_t = SG::WriteDecorHandle<xAOD::IParticleContainer, float>
using decoratorShortH_t = SG::WriteDecorHandle<xAOD::IParticleContainer, short>
using AccessFloat = SG::ConstAccessor<float>
using AccessVertex = SG::ConstAccessor<std::vector<ElementLink<xAOD::VertexContainer> > >
using floatAccessorMap = std::map<Prompt::Def::Var, AccessFloat>
using DecorMap_t = std::unordered_map<Def::Var, size_t>
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

bool initializeTMVAReader ()
StatusCode initializeDecorators ()
void initializeConstAccessors ()
void decorateElec (const xAOD::Electron &electron, const xAOD::JetContainer &trackJets, const xAOD::CaloClusterContainer &clusters, const xAOD::Vertex *primaryVertex, std::vector< decoratorFloatH_t > &floatDecors, std::vector< decoratorShortH_t > &shortDecors)
void decorateMuon (const xAOD::Muon &muon, const xAOD::JetContainer &trackJets, const xAOD::Vertex *primaryVertex, std::vector< decoratorFloatH_t > &floatDecors, std::vector< decoratorShortH_t > &shortDecors)
void getMutualVariables (const xAOD::IParticle &particle, const xAOD::Jet &track_jet, const xAOD::TrackParticle *track, Prompt::VarHolder &vars) const
void getMuonAnpVariables (const xAOD::Muon &muon, Prompt::VarHolder &vars, const xAOD::Vertex *primaryVertex) const
void getElectronAnpVariables (const xAOD::Electron &elec, const xAOD::CaloClusterContainer &clusters, Prompt::VarHolder &vars, const xAOD::Vertex *primaryVertex)
float accessIsolation (const SG::ConstAccessor< float > &isoAccessor, const xAOD::IParticle &particle) const
void addVarsToTMVA (Prompt::VarHolder &vars)
void fillVarDefault (Prompt::VarHolder &vars) const
void decorateAuxLepton (const xAOD::IParticle &particle, Prompt::VarHolder &vars, std::vector< decoratorFloatH_t > &floatDecors, std::vector< decoratorShortH_t > &shortDecors) const
template<class T>
std::pair< double, const xAOD::Jet * > findTrackJet (const T &part, const xAOD::JetContainer &jets)
double getVertexLongitudinalNormDist (const xAOD::IParticle &lepton, const xAOD::Vertex *secondaryVertex, const xAOD::Vertex *primaryVertex) const
double getVertexCosThetaWithLepDir (const xAOD::IParticle &lepton, const xAOD::Vertex *secondaryVertex, const xAOD::Vertex *primaryVertex) const
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_leptonsName
Gaudi::Property< std::string > m_configFileVersion {this, "ConfigFileVersion", "", "BDT weight file version"}
Gaudi::Property< std::string > m_configPathOverride {this, "ConfigPathOverride", "", "Path of the local BDT weight file you want to study/test"}
Gaudi::Property< std::string > m_inputVarDecoratePrefix {this, "InputVarDecoratePrefix", "", "Prefix of the variables that will be decorated into the lepton"}
Gaudi::Property< std::string > m_BDTName {this, "BDTName", "", "BDT name"}
Gaudi::Property< std::string > m_methodTitleMVA {this, "MethodTitleMVA", "BDT", "Help to config the path of the BDT xml file"}
Gaudi::Property< std::vector< std::string > > m_accessorRNNVars {this, "accessorRNNVars", {}, "Name of the RNN accessor of the lepton"}
Gaudi::Property< std::vector< std::string > > m_stringIntVars {this, "stringIntVars", {}, "Vector of the BDT int variables' names and they will be decorated into lepton if not in the veto list"}
Gaudi::Property< std::vector< std::string > > m_stringFloatVars {this, "stringFloatVars", {}, "Vector of the BDT float variables' names and they will be decorated into lepton if not in the veto list"}
Gaudi::Property< std::vector< std::string > > m_extraDecoratorFloatVars {this, "extraDecoratorFloatVars", {}, "Extra float variables' names you want to compute and decorate into the lepton"}
Gaudi::Property< std::vector< std::string > > m_extraDecoratorShortVars {this, "extraDecoratorShortVars", {}, "Extra short variables' names you want to compute and decorate into the lepton"}
Gaudi::Property< std::vector< std::string > > m_vetoDecoratorFloatVars {this, "vetoDecoratorFloatVars", {}, "Vector of the float variables' names you do not want to save"}
Gaudi::Property< std::vector< std::string > > m_vetoDecoratorShortVars {this, "vetoDecoratorShortVars", {}, "Vector of the short variables' names you do not want to save"}
Gaudi::Property< std::vector< double > > m_leptonPtBinsVector {this, "leptonPtBinsVector", {}, "pT bin edges that are used for MVABin calculation"}
Gaudi::Property< bool > m_printTime {this, "PrintTime", false, "Whether to print current time"}
Gaudi::Property< std::string > m_vertexLinkName {this, "VertexLinkName", "", "ElementLink name of the secondary vertices"}
Gaudi::Property< double > m_vertexMinChiSquaredProb {this, "VertexMinChiSquaredProb", 0.03, "Vertex chi2 cut"}
Gaudi::Property< double > m_vertexMinThetaBarrElec {this, "VertexMinThetaBarrElec", 0.002, "Vertex theta between lepton and the direction of sv-pv cut for barrel electrons"}
Gaudi::Property< double > m_vertexMinThetaEcapElec {this, "VertexMinThetaEcapElec", 0.001, "Vertex theta between lepton and the direction of sv-pv cut for central electrons"}
Gaudi::Property< double > m_vertexBarrEcapAbsEtaAt {this, "VertexBarrEcapAbsEtaAt", 1.37, "Relate to the vertex cut above, define the barrel and central electrons by abs(eta)"}
Gaudi::Property< double > m_elecMinCalErelConeSize {this, "ElecMinCalErelConeSize", 0.15, "Cut of the cluster for calculating the core energy of the lepton"}
Gaudi::Property< double > m_maxLepTrackJetDR {this, "maxLepTrackJetDR", 0.4, "Maximum distance between lepton and track jet for track jet matching"}
SG::ReadHandleKey< xAOD::JetContainerm_trackJetsKey
SG::ReadHandleKey< xAOD::VertexContainerm_primaryVertexKey
SG::ReadHandleKey< xAOD::CaloClusterContainerm_clusterContainerKey
SG::ReadHandleKey< xAOD::ElectronContainerm_electronsKey
SG::ReadHandleKey< xAOD::MuonContainerm_muonsKey
std::vector< Prompt::Def::Varm_intVars
std::vector< Prompt::Def::Varm_floatVars
std::vector< Prompt::Def::Varm_allVars
std::unique_ptr< Prompt::VarHolderm_vars
Prompt::Def::Var m_BDTVarKey
std::unique_ptr< TMVA::Reader > m_TMVAReader
std::vector< Float_t > m_varTMVA
std::optional< AccessVertexm_accessDeepSecondaryVertex
floatAccessorMap m_accessRNNMap
std::unique_ptr< TH1D > m_leptonPtBinHist
TStopwatch m_timerAll
TStopwatch m_timerExec
TStopwatch m_timerMuon
TStopwatch m_timerElec
SG::WriteDecorHandleKeyArray< xAOD::IParticleContainerm_floatDecorHandleKeys { this, "FloatDecorHandleKeys", {} }
SG::WriteDecorHandleKeyArray< xAOD::IParticleContainerm_shortDecorHandleKeys { this, "ShortDecorHandleKeys", {} }
DecorMap_t m_floatDecorMap
DecorMap_t m_shortDecorMap
DataObjIDColl m_extendedExtraObjects
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 51 of file DecoratePromptLeptonImproved.h.

Member Typedef Documentation

◆ AccessFloat

◆ AccessVertex

◆ decoratorFloatH_t

◆ decoratorShortH_t

◆ DecorMap_t

using Prompt::DecoratePromptLeptonImproved::DecorMap_t = std::unordered_map<Def::Var, size_t>
private

Definition at line 228 of file DecoratePromptLeptonImproved.h.

◆ floatAccessorMap

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ DecoratePromptLeptonImproved()

Prompt::DecoratePromptLeptonImproved::DecoratePromptLeptonImproved ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 38 of file DecoratePromptLeptonImproved.cxx.

38 :
39 AthAlgorithm(name, pSvcLocator),
41{}
AthAlgorithm()
Default constructor:

Member Function Documentation

◆ accessIsolation()

float Prompt::DecoratePromptLeptonImproved::accessIsolation ( const SG::ConstAccessor< float > & isoAccessor,
const xAOD::IParticle & particle ) const
private

Definition at line 741 of file DecoratePromptLeptonImproved.cxx.

744 {
745 double isolation = -99., isolationrel = -99.;
746
747 if(isoAccessor.isAvailable(particle)) {
748 isolation = isoAccessor(particle);
749 }
750 else {
751 ATH_MSG_WARNING("Lepton isolation not found in auxiliary store");
752 }
753
754 if(particle.pt() > 0.0) {
755 isolationrel = isolation / particle.pt();
756 }
757
758 return isolationrel;
759}
#define ATH_MSG_WARNING(x)
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses

◆ addVarsToTMVA()

void Prompt::DecoratePromptLeptonImproved::addVarsToTMVA ( Prompt::VarHolder & vars)
private

Definition at line 762 of file DecoratePromptLeptonImproved.cxx.

763{
764 //
765 // Add variables to TMVA reader
766 //
767 for(unsigned i = 0; i < m_allVars.size(); ++i) {
768 m_varTMVA[i] = 0.0;
769
770 if(!vars.getVar(m_allVars.at(i), m_varTMVA[i])) {
771 ATH_MSG_WARNING("Missing input variable: " << m_vars->asStr(m_allVars.at(i)));
772 }
773 }
774
775 //
776 // Decorate lepton with classifier response, if goodJet
777 //
778 float bdt_weight = m_TMVAReader->EvaluateMVA(m_methodTitleMVA.toString());
779
780 if(m_BDTVarKey != Def::NONE) {
781 vars.addVar(m_BDTVarKey, bdt_weight);
782 }
783 else {
784 ATH_MSG_WARNING("addVarsToTMVA - invalid Def::Var key for " << m_BDTName);
785 }
786}
std::unique_ptr< Prompt::VarHolder > m_vars
double getVar(const unsigned key) const
Definition VarHolder.h:265
bool addVar(unsigned key, double value)
Adds a variable to the VarHolder.
Definition VarHolder.h:200

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::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< Algorithm > >::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>

◆ decorateAuxLepton()

void Prompt::DecoratePromptLeptonImproved::decorateAuxLepton ( const xAOD::IParticle & particle,
Prompt::VarHolder & vars,
std::vector< decoratorFloatH_t > & floatDecors,
std::vector< decoratorShortH_t > & shortDecors ) const
private

Definition at line 804 of file DecoratePromptLeptonImproved.cxx.

810{
811 //
812 // Decorate lepton with input short variables
813 //
814 for(const DecorMap_t::value_type &dec: m_shortDecorMap) {
815 double val = 0.0;
816
817 if(vars.getVar(dec.first, val)) {
818 shortDecors.at(dec.second)(particle) = static_cast<short>(val);
819
820 ATH_MSG_DEBUG("Short variable: " << vars.asStr(dec.first) << " = " << val);
821 }
822 else {
823 ATH_MSG_WARNING("Short variable " << vars.asStr(dec.first) << " not decorated to lepton");
824 }
825 }
826
827 //
828 // Decorate lepton with input float variables
829 //
830 for(const DecorMap_t::value_type &dec: m_floatDecorMap) {
831 double val = 0.0;
832
833 if(vars.getVar(dec.first, val)) {
834 floatDecors.at(dec.second)(particle) = val;
835
836 ATH_MSG_DEBUG("Float variable: " << vars.asStr(dec.first) << " = " << val);
837 }
838 else {
839 ATH_MSG_WARNING("Float variable " << vars.asStr(dec.first) << " not decorated to lepton");
840 }
841 }
842}
#define ATH_MSG_DEBUG(x)
std::string asStr(const uint32_t key, const double val)

◆ decorateElec()

void Prompt::DecoratePromptLeptonImproved::decorateElec ( const xAOD::Electron & electron,
const xAOD::JetContainer & trackJets,
const xAOD::CaloClusterContainer & clusters,
const xAOD::Vertex * primaryVertex,
std::vector< decoratorFloatH_t > & floatDecors,
std::vector< decoratorShortH_t > & shortDecors )
private

Definition at line 404 of file DecoratePromptLeptonImproved.cxx.

412{
413 //
414 // Find nearest track jet to electron
415 //
416 TimerScopeHelper timer(m_timerElec);
417
418 Prompt::VarHolder vars;
419
420 std::pair<double, const xAOD::Jet*> match = findTrackJet(electron, trackJets);
421
422 if(match.second) {
423 //
424 // Get muon calorimeter energy variable, RNN and secondary vertex variables
425 //
426 getElectronAnpVariables(electron, clusters, vars, primaryVertex);
427
428 //
429 // Get mutual variables, passing track as argument
430 //
431 getMutualVariables(electron, *match.second, electron.trackParticle(), vars);
432
433 //
434 // Pass variables to TMVA
435 //
436 addVarsToTMVA(vars);
437 }
438 else {
439 //
440 // Decorate electron with default values
441 //
442 fillVarDefault(vars);
443
444 ATH_MSG_DEBUG("No track jet found near to electron");
445 }
446
447 //
448 // Decorate electron with input vars and BDT weight
449 //
450 decorateAuxLepton(electron, vars, floatDecors, shortDecors);
451}
std::pair< double, const xAOD::Jet * > findTrackJet(const T &part, const xAOD::JetContainer &jets)
void getMutualVariables(const xAOD::IParticle &particle, const xAOD::Jet &track_jet, const xAOD::TrackParticle *track, Prompt::VarHolder &vars) const
void fillVarDefault(Prompt::VarHolder &vars) const
void getElectronAnpVariables(const xAOD::Electron &elec, const xAOD::CaloClusterContainer &clusters, Prompt::VarHolder &vars, const xAOD::Vertex *primaryVertex)
void decorateAuxLepton(const xAOD::IParticle &particle, Prompt::VarHolder &vars, std::vector< decoratorFloatH_t > &floatDecors, std::vector< decoratorShortH_t > &shortDecors) const
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Definition hcg.cxx:357
timer(name, disabled=False)

◆ decorateMuon()

void Prompt::DecoratePromptLeptonImproved::decorateMuon ( const xAOD::Muon & muon,
const xAOD::JetContainer & trackJets,
const xAOD::Vertex * primaryVertex,
std::vector< decoratorFloatH_t > & floatDecors,
std::vector< decoratorShortH_t > & shortDecors )
private

Definition at line 455 of file DecoratePromptLeptonImproved.cxx.

462{
463 //
464 // Find nearest track jet to muon
465 //
466 TimerScopeHelper timer(m_timerMuon);
467
468 Prompt::VarHolder vars;
469
470 std::pair<double, const xAOD::Jet*> match = findTrackJet(muon, trackJets);
471
472 if(match.second) {
473 //
474 // Get muon calorimeter energy variable, RNN and secondary vertex variables
475 //
476 getMuonAnpVariables(muon, vars, primaryVertex);
477
478 //
479 // Get mutual variables, passing track as argument
480 //
481 getMutualVariables(muon, *match.second, muon.primaryTrackParticle(), vars);
482
483 //
484 // Add variables to TMVA Reader
485 //
486 addVarsToTMVA(vars);
487 }
488 else {
489 //
490 // Decorate muon with default values
491 //
492 fillVarDefault(vars);
493
494 ATH_MSG_DEBUG("No track jet found near to muon");
495 }
496
497 //
498 // Decorate muon with input vars and BDT weight
499 //
500 decorateAuxLepton(muon, vars, floatDecors, shortDecors);
501}
void getMuonAnpVariables(const xAOD::Muon &muon, Prompt::VarHolder &vars, const xAOD::Vertex *primaryVertex) const

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::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< Algorithm > >::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 Prompt::DecoratePromptLeptonImproved::execute ( )
overridevirtual

Definition at line 144 of file DecoratePromptLeptonImproved.cxx.

145{
146 //
147 // Start execute timer
148 //
149 TimerScopeHelper timer(m_timerExec);
150
151 const EventContext& ctx = Gaudi::Hive::currentContext();
152
153 //
154 // Retrieve containers from evtStore
155 //
156 SG::ReadHandle<xAOD::JetContainer> trackJets(m_trackJetsKey, ctx);
157 SG::ReadHandle<xAOD::VertexContainer> vertices(m_primaryVertexKey, ctx);
158 SG::ReadHandle<xAOD::CaloClusterContainer> clusters(m_clusterContainerKey, ctx);
159
160 ATH_MSG_DEBUG("======================================="
161 << "\n\t\t\t Size of vertex container: " << vertices ->size()
162 << "\n\t\t\t Size of track jet container: " << trackJets->size()
163 << "\n-----------------------------------------------------------------");
164
165 //
166 // Find default Primary Vertex
167 //
168 const xAOD::Vertex *primaryVertex = nullptr;
169
170 for(const xAOD::Vertex *vertex: *vertices) {
171 if(vertex->vertexType() == xAOD::VxType::PriVtx) {
172 primaryVertex = vertex;
173 break;
174 }
175 }
176
177 std::vector<decoratorFloatH_t> floatDecors;
178 floatDecors.reserve (m_floatDecorHandleKeys.size());
179 for (const SG::WriteDecorHandleKey<xAOD::IParticleContainer>& k : m_floatDecorHandleKeys) {
180 floatDecors.emplace_back (k, ctx);
181 }
182
183 std::vector<decoratorShortH_t> shortDecors;
184 shortDecors.reserve (m_shortDecorHandleKeys.size());
185 for (const SG::WriteDecorHandleKey<xAOD::IParticleContainer>& k : m_shortDecorHandleKeys) {
186 shortDecors.emplace_back (k, ctx);
187 }
188
189 if(m_leptonsName == "Electrons") {
190 //
191 // Process electrons
192 //
193 ATH_MSG_DEBUG("Reading " << m_electronsKey);
194 SG::ReadHandle<xAOD::ElectronContainer> electrons(m_electronsKey, ctx);
195
196 for(const xAOD::Electron *elec: *electrons) {
197 decorateElec(*elec, *trackJets, *clusters, primaryVertex, floatDecors, shortDecors);
198 }
199 } else if(m_leptonsName == "Muons") {
200 //
201 // Process muons
202 //
203 ATH_MSG_DEBUG("Reading " << m_muonsKey);
204 SG::ReadHandle<xAOD::MuonContainer> muons(m_muonsKey, ctx);
205
206 for(const xAOD::Muon *muon: *muons) {
207 decorateMuon(*muon, *trackJets, primaryVertex, floatDecors, shortDecors);
208 ATH_MSG_DEBUG("Muon decorated");
209 }
210 } else {
211 ATH_MSG_ERROR("Must specify Electrons or Muons");
212 return StatusCode::FAILURE;
213 }
214
215 return StatusCode::SUCCESS;
216}
#define ATH_MSG_ERROR(x)
SG::ReadHandleKey< xAOD::VertexContainer > m_primaryVertexKey
SG::WriteDecorHandleKeyArray< xAOD::IParticleContainer > m_shortDecorHandleKeys
SG::WriteDecorHandleKeyArray< xAOD::IParticleContainer > m_floatDecorHandleKeys
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_clusterContainerKey
SG::ReadHandleKey< xAOD::ElectronContainer > m_electronsKey
void decorateElec(const xAOD::Electron &electron, const xAOD::JetContainer &trackJets, const xAOD::CaloClusterContainer &clusters, const xAOD::Vertex *primaryVertex, std::vector< decoratorFloatH_t > &floatDecors, std::vector< decoratorShortH_t > &shortDecors)
SG::ReadHandleKey< xAOD::MuonContainer > m_muonsKey
SG::ReadHandleKey< xAOD::JetContainer > m_trackJetsKey
void decorateMuon(const xAOD::Muon &muon, const xAOD::JetContainer &trackJets, const xAOD::Vertex *primaryVertex, std::vector< decoratorFloatH_t > &floatDecors, std::vector< decoratorShortH_t > &shortDecors)
@ PriVtx
Primary vertex.
Vertex_v1 Vertex
Define the latest version of the vertex class.
Muon_v1 Muon
Reference the current persistent version:
Electron_v1 Electron
Definition of the current "egamma version".

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::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

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ fillVarDefault()

void Prompt::DecoratePromptLeptonImproved::fillVarDefault ( Prompt::VarHolder & vars) const
private

Definition at line 789 of file DecoratePromptLeptonImproved.cxx.

790{
791 //
792 // Add default values to VarHolder
793 //
794 for(const DecorMap_t::value_type &dec: m_floatDecorMap) {
795 vars.addVar(dec.first, -99.0);
796 }
797
798 for(const DecorMap_t::value_type &dec: m_shortDecorMap) {
799 vars.addVar(dec.first, -99.0);
800 }
801}

◆ finalize()

StatusCode Prompt::DecoratePromptLeptonImproved::finalize ( )
overridevirtual

Definition at line 124 of file DecoratePromptLeptonImproved.cxx.

125{
126 if(m_printTime) {
127 //
128 // Print full time stopwatch
129 //
130 m_timerAll.Stop();
131
132 ATH_MSG_INFO("Real time: " << m_timerAll.RealTime() << "\t CPU time: " << m_timerAll.CpuTime());
133
134 ATH_MSG_INFO("Execute time: " << PrintResetStopWatch(m_timerExec));
137 }
138
139 return StatusCode::SUCCESS;
140}
#define ATH_MSG_INFO(x)
std::string PrintResetStopWatch(TStopwatch &watch)

◆ findTrackJet()

template<class T>
std::pair< double, const xAOD::Jet * > Prompt::DecoratePromptLeptonImproved::findTrackJet ( const T & part,
const xAOD::JetContainer & jets )
private

Definition at line 845 of file DecoratePromptLeptonImproved.cxx.

847{
848 //
849 // Find nearest track jet and a return a pair of dR and xAOD::Jet*
850 //
851 const xAOD::Jet *minjet = 0;
852 double mindr = 10.0;
853 std::pair<double, const xAOD::Jet*> match(mindr, minjet);
854
855 for(const xAOD::Jet* jet: jets) {
856 const double dr = part.p4().DeltaR(jet->p4());
857
858 if(!minjet || dr < mindr) {
859 mindr = dr;
860 minjet = jet;
861 match = std::make_pair(mindr, minjet);
862 }
863 }
864
865
866 if(minjet && mindr < m_maxLepTrackJetDR) {
867 return match;
868 }
869
870 minjet = 0;
871 return std::make_pair(10., minjet);
872}
Jet_v1 Jet
Definition of the current "jet version".

◆ getElectronAnpVariables()

void Prompt::DecoratePromptLeptonImproved::getElectronAnpVariables ( const xAOD::Electron & elec,
const xAOD::CaloClusterContainer & clusters,
Prompt::VarHolder & vars,
const xAOD::Vertex * primaryVertex )
private

Definition at line 504 of file DecoratePromptLeptonImproved.cxx.

510{
511 //
512 // Get Muon variables - calorimeter
513 //
514 double sumCoreEt_large = 0.0, CaloClusterSumEtRel = 0.0;
515
516 if(elec.caloCluster()) {
517 const double elec_calEta = elec.caloCluster()->eta();
518 const double elec_calPhi = elec.caloCluster()->phi();
519
520 for(const xAOD::CaloCluster *cluster: clusters) {
521 const double deta = elec_calEta - cluster->eta();
522 const double dphi = TVector2::Phi_mpi_pi(elec_calPhi - cluster->phi());
523 const double dr = std::sqrt(deta*deta + dphi*dphi);
524
525 if(dr < m_elecMinCalErelConeSize) {
526 sumCoreEt_large += cluster->pt();
527 }
528 }
529 }
530
531 if(elec.pt() > 0.0) CaloClusterSumEtRel = sumCoreEt_large/elec.pt();
532
533 vars.addVar(Prompt::Def::CaloClusterSumEtRel, CaloClusterSumEtRel);
534
535 //
536 // Get lepton isolation variables
537 //
538 const double Topoetcone30rel = accessIsolation(accessCalIsolation30, elec);
539 const double Ptvarcone30rel = accessIsolation(accessTrackIsolation30, elec);
540
541 vars.addVar(Prompt::Def::Topoetcone30rel, Topoetcone30rel);
542 vars.addVar(Prompt::Def::Ptvarcone30rel, Ptvarcone30rel);
543
544 //
545 // Get secondary vertex variable
546 //
547 std::vector<double> goodVertexNdistLong;
548
549 if(m_accessDeepSecondaryVertex->isAvailable(elec)) {
550 std::vector<ElementLink<xAOD::VertexContainer> > vtxLinks = (*m_accessDeepSecondaryVertex)(elec);
551
552 for(ElementLink<xAOD::VertexContainer> &vtxLink: vtxLinks) {
553 if(!vtxLink.isValid()) {
554 ATH_MSG_WARNING("VertexContainer : invalid link");
555 continue;
556 }
557
558 const xAOD::Vertex *vtx = *vtxLink;
559
560 const double fitProb = Prompt::getVertexFitProb(vtx);
561
562 if(fitProb < m_vertexMinChiSquaredProb) {
563 continue;
564 }
565
566 const double theta = std::acos(getVertexCosThetaWithLepDir(elec, vtx, primaryVertex));
567
568 if (theta < m_vertexMinThetaBarrElec && std::fabs(elec.eta()) <= m_vertexBarrEcapAbsEtaAt) continue;
569 else if (theta < m_vertexMinThetaEcapElec && std::fabs(elec.eta()) > m_vertexBarrEcapAbsEtaAt) continue;
570
571 const double vertex_ndist_long = getVertexLongitudinalNormDist(elec, vtx, primaryVertex);
572
573 goodVertexNdistLong.push_back(vertex_ndist_long);
574 }
575 }
576 else {
577 ATH_MSG_WARNING("VertexContainer : " << m_vertexLinkName << " not found for the electron");
578 }
579
580 double best_vertex_ndist_long = 0.0;
581
582 if(goodVertexNdistLong.size() > 0) {
583 std::sort(goodVertexNdistLong.begin(), goodVertexNdistLong.end());
584 best_vertex_ndist_long = goodVertexNdistLong.back();
585 }
586
588 vars.addVar(Prompt::Def::CandVertex_NPassVtx, goodVertexNdistLong.size());
589}
Scalar theta() const
theta method
double getVertexCosThetaWithLepDir(const xAOD::IParticle &lepton, const xAOD::Vertex *secondaryVertex, const xAOD::Vertex *primaryVertex) const
double getVertexLongitudinalNormDist(const xAOD::IParticle &lepton, const xAOD::Vertex *secondaryVertex, const xAOD::Vertex *primaryVertex) const
std::optional< AccessVertex > m_accessDeepSecondaryVertex
float accessIsolation(const SG::ConstAccessor< float > &isoAccessor, const xAOD::IParticle &particle) const
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual double phi() const
The azimuthal angle ( ) of the particle.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition Egamma_v1.cxx:66
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition Egamma_v1.cxx:71
const xAOD::CaloCluster * caloCluster(size_t index=0) const
Pointer to the xAOD::CaloCluster/s that define the electron candidate.
@ Topoetcone30rel
Definition VarHolder.h:60
@ CandVertex_normDistToPriVtxLongitudinalBest_ThetaCutVtx
Definition VarHolder.h:69
@ CandVertex_NPassVtx
Definition VarHolder.h:70
@ CaloClusterSumEtRel
Definition VarHolder.h:66
double getVertexFitProb(const xAOD::Vertex *vtx)
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.

◆ getMuonAnpVariables()

void Prompt::DecoratePromptLeptonImproved::getMuonAnpVariables ( const xAOD::Muon & muon,
Prompt::VarHolder & vars,
const xAOD::Vertex * primaryVertex ) const
private

Definition at line 592 of file DecoratePromptLeptonImproved.cxx.

597{
598 //
599 // Get Muon variables - calorimeter
600 //
601 double calE = -99.0, peloss = -99.0, caloClusterERel = -99.0;
602
603 if(muon.clusterLink().isValid()) {
604 const xAOD::CaloCluster* cluster = *(muon.clusterLink());
605
606 if(accessMuonCalE.isAvailable(*cluster) && accessMuonParamEnergyLoss.isAvailable(muon)) {
607 calE = accessMuonCalE(*cluster);
608 peloss = accessMuonParamEnergyLoss(muon);
609
610 caloClusterERel = calE/peloss;
611 }
612 else {
613 ATH_MSG_WARNING("Muon calE or ParamEnergyLoss not found in auxiliary store");
614 }
615 }
616
617 vars.addVar(Prompt::Def::CaloClusterERel, caloClusterERel);
618
619 //
620 // Get lepton isolation variables
621 //
622 const double Topoetcone30rel = accessIsolation(accessCalIsolation30, muon);
623 const double ptvarcone30TightTTVAPt500rel = accessIsolation(accessTrackIsolation30TTVA, muon);
624
625 vars.addVar(Prompt::Def::Topoetcone30rel, Topoetcone30rel);
626 vars.addVar(Prompt::Def::Ptvarcone30_TightTTVA_pt500rel, ptvarcone30TightTTVAPt500rel);
627
628 //
629 // Get Muon Secondary Vertex variable
630 //
631 std::vector<double> goodVertexNdistLong;
632
633 if(m_accessDeepSecondaryVertex->isAvailable(muon)) {
634 std::vector<ElementLink<xAOD::VertexContainer> > vtxLinks = (*m_accessDeepSecondaryVertex)(muon);
635 goodVertexNdistLong.reserve(vtxLinks.size());
636
637 for(ElementLink<xAOD::VertexContainer> &vtxLink: vtxLinks) {
638 if(!vtxLink.isValid()) {
639 ATH_MSG_WARNING("VertexContainer : invalid link");
640 continue;
641 }
642
643 const xAOD::Vertex *vtx = *vtxLink;
644
645 const double fitProb = Prompt::getVertexFitProb(vtx);
646
647 if(fitProb > m_vertexMinChiSquaredProb) {
648 const double vertex_ndist_long = getVertexLongitudinalNormDist(muon, vtx, primaryVertex);
649
650 goodVertexNdistLong.push_back(vertex_ndist_long);
651 }
652 }
653 }
654 else {
655 ATH_MSG_WARNING("VertexContainer : " << m_vertexLinkName << " not found for the muon");
656 }
657
658 double best_vertex_ndist_long = 0.0;
659
660 if(goodVertexNdistLong.size() > 0) {
661 std::sort(goodVertexNdistLong.begin(), goodVertexNdistLong.end());
662 best_vertex_ndist_long = goodVertexNdistLong.back();
663 }
664
666 vars.addVar(Prompt::Def::CandVertex_NPassVtx, goodVertexNdistLong.size());
667}
@ Ptvarcone30_TightTTVA_pt500rel
Definition VarHolder.h:62
@ CaloClusterERel
Definition VarHolder.h:65
@ CandVertex_normDistToPriVtxLongitudinalBest
Definition VarHolder.h:68

◆ getMutualVariables()

void Prompt::DecoratePromptLeptonImproved::getMutualVariables ( const xAOD::IParticle & particle,
const xAOD::Jet & track_jet,
const xAOD::TrackParticle * track,
Prompt::VarHolder & vars ) const
private

Definition at line 670 of file DecoratePromptLeptonImproved.cxx.

676{
677 //
678 // Add lepton - jet variables to VarHolder
679 //
680 double PtFrac = -99.;
681 double PtRel = -99.;
682
683 if(particle.pt() > 0.0 && track_jet.pt() > 0.0) {
684
685 if(track) {
686 PtFrac = track->pt()/track_jet.pt();
687 }
688
689 const double angle = particle.p4().Vect().Angle(track_jet.p4().Vect());
690
691 PtRel = particle.pt() * std::sin(angle);
692 }
693
694 //
695 // Add vars to VarHolder
696 //
697 vars.addVar(Prompt::Def::PtFrac, PtFrac);
698 vars.addVar(Prompt::Def::PtRel, PtRel);
699 vars.addVar(Prompt::Def::DRlj, track_jet.p4().DeltaR(particle.p4()));
701
702 //
703 // Get RNN variables
704 //
705 for(const floatAccessorMap::value_type &acc: m_accessRNNMap) {
706 if(acc.second.isAvailable(particle)) {
707 vars.addVar(acc.first, acc.second(particle));
708 }
709 else {
710 ATH_MSG_WARNING("LeptonTagger RNN not found in auxiliary store for variable=" << vars.asStr(acc.first));
711 }
712 }
713
714 //
715 // Get lepton variables - pT X bin
716 //
717 const double lepPt = particle.pt();
718
719 const double xmax = m_leptonPtBinHist->GetXaxis()->GetXmax();
720 const double xmin = m_leptonPtBinHist->GetXaxis()->GetXmin();
721
722 int curr_bin = 0;
723
724 if(xmin < lepPt && lepPt < xmax) {
725 curr_bin = m_leptonPtBinHist->FindBin(lepPt);
726 }
727 else if (!(lepPt < xmax)) {
728 curr_bin = m_leptonPtBinHist->GetNbinsX();
729 }
730 else if (!(lepPt > xmin)) {
731 curr_bin = 1;
732 }
733
734 vars.addVar(Prompt::Def::MVAXBin, curr_bin);
735 vars.addVar(Prompt::Def::RawPt, lepPt);
736
737 ATH_MSG_DEBUG("getMutualVariables - lepPt = " << lepPt << ", MVAXBin = " << curr_bin);
738}
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
size_t size() const
number of constituents
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition Jet_v1.cxx:71
JetConstituentVector getConstituents() const
Return a vector of consituents. The object behaves like vector<const IParticle*>. See JetConstituentV...
Definition Jet_v1.cxx:147
virtual double pt() const
The transverse momentum ( ) of the particle.
Definition Jet_v1.cxx:44
double xmax
Definition listroot.cxx:61
double xmin
Definition listroot.cxx:60

◆ getVertexCosThetaWithLepDir()

double Prompt::DecoratePromptLeptonImproved::getVertexCosThetaWithLepDir ( const xAOD::IParticle & lepton,
const xAOD::Vertex * secondaryVertex,
const xAOD::Vertex * primaryVertex ) const
private

Definition at line 902 of file DecoratePromptLeptonImproved.cxx.

905{
906 //
907 // get the Longitudinal nomalized distance between the secondary vertex and primary vertex
908 //
909 if(!secondaryVertex || !primaryVertex) {
910 ATH_MSG_WARNING("GetVertexThetaWithLepDir - invalid pointer of lepton/secondaryVertex/primaryVertex");
911 return 0.0;
912 }
913
914 const Amg::Vector3D sv_to_pv_v3 = secondaryVertex->position() - primaryVertex->position();
915
916 const TVector3 sv_to_pv_t3 = TVector3(sv_to_pv_v3.x(), sv_to_pv_v3.y(), sv_to_pv_v3.z());
917 const TVector3 lepton_dirt = lepton.p4().Vect();
918
919 const double cos_theta = sv_to_pv_t3.Unit()*lepton_dirt.Unit();
920
921 return cos_theta;
922}
virtual FourMom_t p4() const =0
The full 4-momentum of the particle.
const Amg::Vector3D & position() const
Returns the 3-pos.
Eigen::Matrix< double, 3, 1 > Vector3D

◆ getVertexLongitudinalNormDist()

double Prompt::DecoratePromptLeptonImproved::getVertexLongitudinalNormDist ( const xAOD::IParticle & lepton,
const xAOD::Vertex * secondaryVertex,
const xAOD::Vertex * primaryVertex ) const
private

Definition at line 875 of file DecoratePromptLeptonImproved.cxx.

880{
881 //
882 // get the Longitudinal normalized distance between the secondary vertex and primary vertex
883 //
884 if(!secondaryVertex || !primaryVertex) {
885 ATH_MSG_WARNING("getVertexLongitudinalNormDist - invalid pointer of lepton/secondaryVertex/primaryVertex");
886 return 0.0;
887 }
888
889
890 float normDist_SVPV = 0.0;
891
892 if(!Prompt::GetAuxVar(*secondaryVertex, normDist_SVPV, "normDistToPriVtx")) {
893 ATH_MSG_WARNING("getVertexLongitudinalNormDist - missing \"normDistToPriVtx\"");
894 }
895
896 double cos_theta = getVertexCosThetaWithLepDir(lepton, secondaryVertex, primaryVertex);
897
898 return normDist_SVPV*cos_theta;
899}
bool GetAuxVar(const T1 &obj, T2 &value, const std::string &var_name)
Definition PromptUtils.h:83

◆ initialize()

StatusCode Prompt::DecoratePromptLeptonImproved::initialize ( )
overridevirtual

Definition at line 44 of file DecoratePromptLeptonImproved.cxx.

45{
46 ATH_MSG_DEBUG("Initializing DecoratePromptLeptonImproved...");
47 ATH_MSG_DEBUG("m_leptonsName = " << m_leptonsName);
48 if (m_printTime)
49 {
50 //
51 // Reset timers
52 //
53 m_timerAll .Reset();
54 m_timerExec.Reset();
55 m_timerMuon.Reset();
56 m_timerElec.Reset();
57
58 //
59 // Start full timer
60 //
61 m_timerAll.Start();
62 }
63
64 ATH_CHECK(m_trackJetsKey.initialize());
65 ATH_CHECK(m_primaryVertexKey.initialize());
66 ATH_CHECK(m_clusterContainerKey.initialize());
67
68 ATH_MSG_DEBUG("Initializing " << m_electronsKey);
69
70 ATH_CHECK(m_electronsKey.initialize(m_leptonsName == "Electrons"));
71 ATH_CHECK(m_muonsKey.initialize(m_leptonsName == "Muons"));
72
73 ATH_MSG_DEBUG("Number of int vars to read: " << m_stringIntVars.size());
74 ATH_MSG_DEBUG("Number of float vars to read: " << m_stringFloatVars.size());
75
76 // Setup variable holder
77 m_vars = std::make_unique<Prompt::VarHolder>();
78
79 //
80 // Read vector<string> vars into vector<Var> and append
81 //
82 m_intVars = m_vars->readVectorVars(m_stringIntVars);
83 m_floatVars = m_vars->readVectorVars(m_stringFloatVars);
84
85 m_allVars.insert(m_allVars.end(), m_intVars .begin(), m_intVars .end());
86 m_allVars.insert(m_allVars.end(), m_floatVars.begin(), m_floatVars.end());
87
88 m_varTMVA.resize(m_allVars.size());
89
90
91 //
92 // Get key for recording BDT output
93 //
94 m_BDTVarKey = m_vars->registerDynamicVar(m_BDTName);
95
96 if(m_BDTVarKey == Def::NONE) {
97 ATH_MSG_ERROR("Failed to create key for BDT name=" << m_BDTName);
98 return StatusCode::FAILURE;
99 }
100
101 //
102 // Fill decorator maps
103 //
105
106 //
107 // Initialize const accessors
108 //
110
111 ATH_MSG_DEBUG("Initialized DecoratePromptLeptonImproved.");
112
113 //
114 // Initialize TMVA Reader
115 //
117
118 ATH_MSG_DEBUG("Initialized TMVA Reader.");
119
120 return StatusCode::SUCCESS;
121}
#define ATH_CHECK
Evaluate an expression and check for errors.
Gaudi::Property< std::vector< std::string > > m_stringFloatVars
Gaudi::Property< std::vector< std::string > > m_stringIntVars

◆ initializeConstAccessors()

void Prompt::DecoratePromptLeptonImproved::initializeConstAccessors ( )
private

Definition at line 381 of file DecoratePromptLeptonImproved.cxx.

382{
383 //
384 // Instantiate isolation accessors
385 //
387
388 //
389 // Instantiate accessors for RNN variables
390 //
391 for(const std::string &name: m_accessorRNNVars) {
392 const Def::Var akey = m_vars->registerDynamicVar(name);
393
394 if(m_accessRNNMap.insert(floatAccessorMap::value_type(akey, AccessFloat(name))).second) {
395 ATH_MSG_DEBUG("Add float RNN accessor: " << name);
396 }
397 else {
398 ATH_MSG_WARNING("Skip duplicate float accessor: " << name);
399 }
400 }
401}
Gaudi::Property< std::vector< std::string > > m_accessorRNNVars

◆ initializeDecorators()

StatusCode Prompt::DecoratePromptLeptonImproved::initializeDecorators ( )
private

Definition at line 262 of file DecoratePromptLeptonImproved.cxx.

263{
264 std::string inputContName;
265 if (m_leptonsName == "Electrons") {
266 inputContName = m_electronsKey.key();
267 }
268 else if (m_leptonsName == "Muons") {
269 inputContName = m_muonsKey.key();
270 }
271 else {
272 ATH_MSG_ERROR ("LeptonContainerName was " << m_leptonsName <<
273 "; must be either Electrons or Muons");
274 return StatusCode::FAILURE;
275 }
276
277 DecorMap_t vetoedVars;
278 for(const std::string &vvar: m_vetoDecoratorFloatVars) {
279 const Def::Var vkey = m_vars->registerDynamicVar(vvar);
280
281 if(vkey == Def::NONE) {
282 ATH_MSG_ERROR("Failed to create key for variable name=" << vvar);
283 return StatusCode::FAILURE;
284 }
285
286 vetoedVars.try_emplace (vkey, 0);
287 }
288 for(const std::string &vvar: m_vetoDecoratorShortVars) {
289 const Def::Var vkey = m_vars->registerDynamicVar(vvar);
290
291 if(vkey == Def::NONE) {
292 ATH_MSG_ERROR("Failed to create key for variable name=" << vvar);
293 return StatusCode::FAILURE;
294 }
295
296 vetoedVars.try_emplace (vkey, 0);
297 }
298
299 //
300 // Fill short variable map
301 //
302 for(Prompt::Def::Var &var: m_intVars) {
303 if (!vetoedVars.contains (var)) {
304 m_shortDecorMap.try_emplace (var, m_shortDecorHandleKeys.size());
305 m_shortDecorHandleKeys.push_back (SG::makeContDecorKey (inputContName, m_inputVarDecoratePrefix + m_vars->asStr(var)));
306 }
307 }
308
309 //
310 // Fill float variable map
311 //
313 for(Prompt::Def::Var &var: m_floatVars) {
314 if (!vetoedVars.contains (var)) {
315 m_floatDecorMap.try_emplace (var, m_floatDecorHandleKeys.size());
316 m_floatDecorHandleKeys.push_back (SG::makeContDecorKey (inputContName, m_inputVarDecoratePrefix + m_vars->asStr(var)));
317 }
318 }
319
320 //
321 // Fill additional variables
322 //
323 if (!vetoedVars.contains (m_BDTVarKey)) {
325 m_floatDecorHandleKeys.push_back (SG::makeContDecorKey (inputContName, m_BDTName));
326 }
327
328 for(const std::string &evar: m_extraDecoratorFloatVars) {
329 const Def::Var ekey = m_vars->registerDynamicVar(evar);
330
331 if(ekey == Def::NONE) {
332 ATH_MSG_ERROR("Failed to create key for variable name=" << evar);
333 return StatusCode::FAILURE;
334 }
335
336 if (!vetoedVars.contains (ekey)) {
337 m_floatDecorMap.try_emplace (ekey, m_floatDecorHandleKeys.size());
338 m_floatDecorHandleKeys.push_back (SG::makeContDecorKey (inputContName, m_inputVarDecoratePrefix + evar));
339 }
340 }
341
342 for(const std::string &evar: m_extraDecoratorShortVars) {
343 const Def::Var ekey = m_vars->registerDynamicVar(evar);
344
345 if(ekey == Def::NONE) {
346 ATH_MSG_ERROR("Failed to create key for variable name=" << evar);
347 return StatusCode::FAILURE;
348 }
349
350 if (!vetoedVars.contains (ekey)) {
351 m_shortDecorMap.try_emplace (ekey, m_shortDecorHandleKeys.size());
352 m_shortDecorHandleKeys.push_back (SG::makeContDecorKey (inputContName, m_inputVarDecoratePrefix + evar));
353 }
354 }
355
356 ATH_CHECK(m_shortDecorHandleKeys.initialize());
357 ATH_CHECK(m_floatDecorHandleKeys.initialize());
358
359 // Print decorator counts
360 ATH_MSG_DEBUG("Added " << m_shortDecorHandleKeys.size() << " short decorators");
361 ATH_MSG_DEBUG("Added " << m_floatDecorHandleKeys.size() << " float decorators");
362
363 // Instantiate MVA X bin
364 if(m_leptonPtBinsVector.size() < 2) {
365 ATH_MSG_ERROR("Invalid PtBins size=" << m_leptonPtBinsVector.size());
366 return StatusCode::FAILURE;
367 }
368
369 std::unique_ptr<double []> PtBins = std::make_unique<double []>(m_leptonPtBinsVector.size());
370
371 for(unsigned i = 0; i < m_leptonPtBinsVector.size(); i++) {
372 PtBins[i] = m_leptonPtBinsVector[i];
373 }
374
375 m_leptonPtBinHist = std::make_unique<TH1D>("PtBin", "PtBin", m_leptonPtBinsVector.size() - 1, PtBins.get());
376
377 return StatusCode::SUCCESS;
378}
Gaudi::Property< std::vector< double > > m_leptonPtBinsVector
Gaudi::Property< std::vector< std::string > > m_vetoDecoratorShortVars
std::unordered_map< Def::Var, size_t > DecorMap_t
Gaudi::Property< std::vector< std::string > > m_extraDecoratorShortVars
Gaudi::Property< std::string > m_inputVarDecoratePrefix
Gaudi::Property< std::vector< std::string > > m_extraDecoratorFloatVars
Gaudi::Property< std::vector< std::string > > m_vetoDecoratorFloatVars
std::string makeContDecorKey(const std::string &cont, const std::string &decor)
Make a StoreGate key from container and decoration name.

◆ initializeTMVAReader()

bool Prompt::DecoratePromptLeptonImproved::initializeTMVAReader ( )
private

Definition at line 220 of file DecoratePromptLeptonImproved.cxx.

221{
222 //
223 // Make new instance of TMVA Reader and add variables
224 //
225 m_TMVAReader = std::make_unique<TMVA::Reader>();
226
227 for(unsigned i = 0; i < m_allVars.size(); ++i) {
228 m_TMVAReader->AddVariable(m_vars->asStr(m_allVars.at(i)), &m_varTMVA[i]);
229 }
230
231 //
232 // Get path to xml training file
233 //
234 std::string fullPathToFile = PathResolverFindCalibFile("JetTagNonPromptLepton/"
236 + "/TMVAClassification_" + m_methodTitleMVA + ".weights.xml");
237
238 if(!m_configPathOverride.empty()) {
239 ATH_MSG_INFO("Override path resolver result");
240 fullPathToFile = m_configPathOverride;
241 }
242
243 ATH_MSG_INFO("TMVA configuration file: " + fullPathToFile);
244 ATH_MSG_INFO("TMVA method name: " + m_methodTitleMVA);
245
246 //
247 // Book an instance of BDT reader if path is available
248 //
249 if(fullPathToFile == "") {
250 ATH_MSG_ERROR("Could not find path to xml training file");
251 return false;
252 }
253 else {
254 m_TMVAReader->BookMVA(m_methodTitleMVA.toString(), fullPathToFile);
255 }
256
257 return true;
258}
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Gaudi::Property< std::string > m_configFileVersion
Gaudi::Property< std::string > m_configPathOverride

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::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.

◆ msg()

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msgLvl()

bool AthCommonMsg< Algorithm >::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< Algorithm > >::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.

◆ 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< Algorithm > >::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< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
static Double_t sc
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::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< Algorithm > >::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_accessDeepSecondaryVertex

std::optional<AccessVertex> Prompt::DecoratePromptLeptonImproved::m_accessDeepSecondaryVertex
private

Definition at line 212 of file DecoratePromptLeptonImproved.h.

◆ m_accessorRNNVars

Gaudi::Property<std::vector<std::string> > Prompt::DecoratePromptLeptonImproved::m_accessorRNNVars {this, "accessorRNNVars", {}, "Name of the RNN accessor of the lepton"}
private

Definition at line 159 of file DecoratePromptLeptonImproved.h.

159{this, "accessorRNNVars", {}, "Name of the RNN accessor of the lepton"};

◆ m_accessRNNMap

floatAccessorMap Prompt::DecoratePromptLeptonImproved::m_accessRNNMap
private

Definition at line 214 of file DecoratePromptLeptonImproved.h.

◆ m_allVars

std::vector<Prompt::Def::Var> Prompt::DecoratePromptLeptonImproved::m_allVars
private

Definition at line 203 of file DecoratePromptLeptonImproved.h.

◆ m_BDTName

Gaudi::Property<std::string> Prompt::DecoratePromptLeptonImproved::m_BDTName {this, "BDTName", "", "BDT name"}
private

Definition at line 156 of file DecoratePromptLeptonImproved.h.

156{this, "BDTName", "", "BDT name"};

◆ m_BDTVarKey

Prompt::Def::Var Prompt::DecoratePromptLeptonImproved::m_BDTVarKey
private

Definition at line 207 of file DecoratePromptLeptonImproved.h.

◆ m_clusterContainerKey

SG::ReadHandleKey<xAOD::CaloClusterContainer> Prompt::DecoratePromptLeptonImproved::m_clusterContainerKey
private
Initial value:
{
this, "ClusterContainerName", "",
"Container name of the Clusters which are used to calculate the input variables for the PromptLeptonImproved"
}

Definition at line 185 of file DecoratePromptLeptonImproved.h.

185 {
186 this, "ClusterContainerName", "",
187 "Container name of the Clusters which are used to calculate the input variables for the PromptLeptonImproved"
188 };

◆ m_configFileVersion

Gaudi::Property<std::string> Prompt::DecoratePromptLeptonImproved::m_configFileVersion {this, "ConfigFileVersion", "", "BDT weight file version"}
private

Definition at line 153 of file DecoratePromptLeptonImproved.h.

153{this, "ConfigFileVersion", "", "BDT weight file version"};

◆ m_configPathOverride

Gaudi::Property<std::string> Prompt::DecoratePromptLeptonImproved::m_configPathOverride {this, "ConfigPathOverride", "", "Path of the local BDT weight file you want to study/test"}
private

Definition at line 154 of file DecoratePromptLeptonImproved.h.

154{this, "ConfigPathOverride", "", "Path of the local BDT weight file you want to study/test"};

◆ m_detStore

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

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_elecMinCalErelConeSize

Gaudi::Property<double> Prompt::DecoratePromptLeptonImproved::m_elecMinCalErelConeSize {this, "ElecMinCalErelConeSize", 0.15, "Cut of the cluster for calculating the core energy of the lepton"}
private

Definition at line 175 of file DecoratePromptLeptonImproved.h.

175{this, "ElecMinCalErelConeSize", 0.15, "Cut of the cluster for calculating the core energy of the lepton"};

◆ m_electronsKey

SG::ReadHandleKey<xAOD::ElectronContainer> Prompt::DecoratePromptLeptonImproved::m_electronsKey
private
Initial value:
{
this, "ElectronContainerKey", "Electrons",
"Container's name of the electrons that you want to decorate"
}

Definition at line 190 of file DecoratePromptLeptonImproved.h.

190 {
191 this, "ElectronContainerKey", "Electrons",
192 "Container's name of the electrons that you want to decorate"
193 };

◆ m_evtStore

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

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_extraDecoratorFloatVars

Gaudi::Property<std::vector<std::string> > Prompt::DecoratePromptLeptonImproved::m_extraDecoratorFloatVars {this, "extraDecoratorFloatVars", {}, "Extra float variables' names you want to compute and decorate into the lepton"}
private

Definition at line 162 of file DecoratePromptLeptonImproved.h.

162{this, "extraDecoratorFloatVars", {}, "Extra float variables' names you want to compute and decorate into the lepton"};

◆ m_extraDecoratorShortVars

Gaudi::Property<std::vector<std::string> > Prompt::DecoratePromptLeptonImproved::m_extraDecoratorShortVars {this, "extraDecoratorShortVars", {}, "Extra short variables' names you want to compute and decorate into the lepton"}
private

Definition at line 163 of file DecoratePromptLeptonImproved.h.

163{this, "extraDecoratorShortVars", {}, "Extra short variables' names you want to compute and decorate into the lepton"};

◆ m_floatDecorHandleKeys

SG::WriteDecorHandleKeyArray<xAOD::IParticleContainer> Prompt::DecoratePromptLeptonImproved::m_floatDecorHandleKeys { this, "FloatDecorHandleKeys", {} }
private

Definition at line 223 of file DecoratePromptLeptonImproved.h.

224{ this, "FloatDecorHandleKeys", {} };

◆ m_floatDecorMap

DecorMap_t Prompt::DecoratePromptLeptonImproved::m_floatDecorMap
private

Definition at line 229 of file DecoratePromptLeptonImproved.h.

◆ m_floatVars

std::vector<Prompt::Def::Var> Prompt::DecoratePromptLeptonImproved::m_floatVars
private

Definition at line 202 of file DecoratePromptLeptonImproved.h.

◆ m_inputVarDecoratePrefix

Gaudi::Property<std::string> Prompt::DecoratePromptLeptonImproved::m_inputVarDecoratePrefix {this, "InputVarDecoratePrefix", "", "Prefix of the variables that will be decorated into the lepton"}
private

Definition at line 155 of file DecoratePromptLeptonImproved.h.

155{this, "InputVarDecoratePrefix", "", "Prefix of the variables that will be decorated into the lepton"};

◆ m_intVars

std::vector<Prompt::Def::Var> Prompt::DecoratePromptLeptonImproved::m_intVars
private

Definition at line 201 of file DecoratePromptLeptonImproved.h.

◆ m_leptonPtBinHist

std::unique_ptr<TH1D> Prompt::DecoratePromptLeptonImproved::m_leptonPtBinHist
private

Definition at line 216 of file DecoratePromptLeptonImproved.h.

◆ m_leptonPtBinsVector

Gaudi::Property<std::vector<double> > Prompt::DecoratePromptLeptonImproved::m_leptonPtBinsVector {this, "leptonPtBinsVector", {}, "pT bin edges that are used for MVABin calculation"}
private

Definition at line 166 of file DecoratePromptLeptonImproved.h.

166{this, "leptonPtBinsVector", {}, "pT bin edges that are used for MVABin calculation"};

◆ m_leptonsName

Gaudi::Property<std::string> Prompt::DecoratePromptLeptonImproved::m_leptonsName
private
Initial value:
{
this, "LeptonContainerName", "",
"Container's name of the lepton that you want to decorate. Also need to set ElectronContainerKey or MuonContainerKey accordingly"
}

Definition at line 148 of file DecoratePromptLeptonImproved.h.

148 {
149 this, "LeptonContainerName", "",
150 "Container's name of the lepton that you want to decorate. Also need to set ElectronContainerKey or MuonContainerKey accordingly"
151 };

◆ m_maxLepTrackJetDR

Gaudi::Property<double> Prompt::DecoratePromptLeptonImproved::m_maxLepTrackJetDR {this, "maxLepTrackJetDR", 0.4, "Maximum distance between lepton and track jet for track jet matching"}
private

Definition at line 176 of file DecoratePromptLeptonImproved.h.

176{this, "maxLepTrackJetDR", 0.4, "Maximum distance between lepton and track jet for track jet matching"};

◆ m_methodTitleMVA

Gaudi::Property<std::string> Prompt::DecoratePromptLeptonImproved::m_methodTitleMVA {this, "MethodTitleMVA", "BDT", "Help to config the path of the BDT xml file"}
private

Definition at line 157 of file DecoratePromptLeptonImproved.h.

157{this, "MethodTitleMVA", "BDT", "Help to config the path of the BDT xml file"};

◆ m_muonsKey

SG::ReadHandleKey<xAOD::MuonContainer> Prompt::DecoratePromptLeptonImproved::m_muonsKey
private
Initial value:
{
this, "MuonContainerKey", "Muons",
"Container's name of the muons that you want to decorate"
}

Definition at line 194 of file DecoratePromptLeptonImproved.h.

194 {
195 this, "MuonContainerKey", "Muons",
196 "Container's name of the muons that you want to decorate"
197 };

◆ m_primaryVertexKey

SG::ReadHandleKey<xAOD::VertexContainer> Prompt::DecoratePromptLeptonImproved::m_primaryVertexKey
private
Initial value:
{
this, "PrimaryVertexContainerName", "", "Primary vertex container name"
}

Definition at line 182 of file DecoratePromptLeptonImproved.h.

182 {
183 this, "PrimaryVertexContainerName", "", "Primary vertex container name"
184 };

◆ m_printTime

Gaudi::Property<bool> Prompt::DecoratePromptLeptonImproved::m_printTime {this, "PrintTime", false, "Whether to print current time"}
private

Definition at line 168 of file DecoratePromptLeptonImproved.h.

168{this, "PrintTime", false, "Whether to print current time"};

◆ m_shortDecorHandleKeys

SG::WriteDecorHandleKeyArray<xAOD::IParticleContainer> Prompt::DecoratePromptLeptonImproved::m_shortDecorHandleKeys { this, "ShortDecorHandleKeys", {} }
private

Definition at line 225 of file DecoratePromptLeptonImproved.h.

226{ this, "ShortDecorHandleKeys", {} };

◆ m_shortDecorMap

DecorMap_t Prompt::DecoratePromptLeptonImproved::m_shortDecorMap
private

Definition at line 230 of file DecoratePromptLeptonImproved.h.

◆ m_stringFloatVars

Gaudi::Property<std::vector<std::string> > Prompt::DecoratePromptLeptonImproved::m_stringFloatVars {this, "stringFloatVars", {}, "Vector of the BDT float variables' names and they will be decorated into lepton if not in the veto list"}
private

Definition at line 161 of file DecoratePromptLeptonImproved.h.

161{this, "stringFloatVars", {}, "Vector of the BDT float variables' names and they will be decorated into lepton if not in the veto list"};

◆ m_stringIntVars

Gaudi::Property<std::vector<std::string> > Prompt::DecoratePromptLeptonImproved::m_stringIntVars {this, "stringIntVars", {}, "Vector of the BDT int variables' names and they will be decorated into lepton if not in the veto list"}
private

Definition at line 160 of file DecoratePromptLeptonImproved.h.

160{this, "stringIntVars", {}, "Vector of the BDT int variables' names and they will be decorated into lepton if not in the veto list"};

◆ m_timerAll

TStopwatch Prompt::DecoratePromptLeptonImproved::m_timerAll
private

Definition at line 218 of file DecoratePromptLeptonImproved.h.

◆ m_timerElec

TStopwatch Prompt::DecoratePromptLeptonImproved::m_timerElec
private

Definition at line 221 of file DecoratePromptLeptonImproved.h.

◆ m_timerExec

TStopwatch Prompt::DecoratePromptLeptonImproved::m_timerExec
private

Definition at line 219 of file DecoratePromptLeptonImproved.h.

◆ m_timerMuon

TStopwatch Prompt::DecoratePromptLeptonImproved::m_timerMuon
private

Definition at line 220 of file DecoratePromptLeptonImproved.h.

◆ m_TMVAReader

std::unique_ptr<TMVA::Reader> Prompt::DecoratePromptLeptonImproved::m_TMVAReader
private

Definition at line 209 of file DecoratePromptLeptonImproved.h.

◆ m_trackJetsKey

SG::ReadHandleKey<xAOD::JetContainer> Prompt::DecoratePromptLeptonImproved::m_trackJetsKey
private
Initial value:
{
this, "TrackJetContainerName", "", "Track Jet container name"
}

Definition at line 179 of file DecoratePromptLeptonImproved.h.

179 {
180 this, "TrackJetContainerName", "", "Track Jet container name"
181 };

◆ m_varHandleArraysDeclared

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

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vars

std::unique_ptr<Prompt::VarHolder> Prompt::DecoratePromptLeptonImproved::m_vars
private

Definition at line 205 of file DecoratePromptLeptonImproved.h.

◆ m_varTMVA

std::vector<Float_t> Prompt::DecoratePromptLeptonImproved::m_varTMVA
private

Definition at line 210 of file DecoratePromptLeptonImproved.h.

◆ m_vertexBarrEcapAbsEtaAt

Gaudi::Property<double> Prompt::DecoratePromptLeptonImproved::m_vertexBarrEcapAbsEtaAt {this, "VertexBarrEcapAbsEtaAt", 1.37, "Relate to the vertex cut above, define the barrel and central electrons by abs(eta)"}
private

Definition at line 174 of file DecoratePromptLeptonImproved.h.

174{this, "VertexBarrEcapAbsEtaAt", 1.37, "Relate to the vertex cut above, define the barrel and central electrons by abs(eta)"};

◆ m_vertexLinkName

Gaudi::Property<std::string> Prompt::DecoratePromptLeptonImproved::m_vertexLinkName {this, "VertexLinkName", "", "ElementLink name of the secondary vertices"}
private

Definition at line 170 of file DecoratePromptLeptonImproved.h.

170{this, "VertexLinkName", "", "ElementLink name of the secondary vertices"};

◆ m_vertexMinChiSquaredProb

Gaudi::Property<double> Prompt::DecoratePromptLeptonImproved::m_vertexMinChiSquaredProb {this, "VertexMinChiSquaredProb", 0.03, "Vertex chi2 cut"}
private

Definition at line 171 of file DecoratePromptLeptonImproved.h.

171{this, "VertexMinChiSquaredProb", 0.03, "Vertex chi2 cut"};

◆ m_vertexMinThetaBarrElec

Gaudi::Property<double> Prompt::DecoratePromptLeptonImproved::m_vertexMinThetaBarrElec {this, "VertexMinThetaBarrElec", 0.002, "Vertex theta between lepton and the direction of sv-pv cut for barrel electrons"}
private

Definition at line 172 of file DecoratePromptLeptonImproved.h.

172{this, "VertexMinThetaBarrElec", 0.002, "Vertex theta between lepton and the direction of sv-pv cut for barrel electrons"};

◆ m_vertexMinThetaEcapElec

Gaudi::Property<double> Prompt::DecoratePromptLeptonImproved::m_vertexMinThetaEcapElec {this, "VertexMinThetaEcapElec", 0.001, "Vertex theta between lepton and the direction of sv-pv cut for central electrons"}
private

Definition at line 173 of file DecoratePromptLeptonImproved.h.

173{this, "VertexMinThetaEcapElec", 0.001, "Vertex theta between lepton and the direction of sv-pv cut for central electrons"};

◆ m_vetoDecoratorFloatVars

Gaudi::Property<std::vector<std::string> > Prompt::DecoratePromptLeptonImproved::m_vetoDecoratorFloatVars {this, "vetoDecoratorFloatVars", {}, "Vector of the float variables' names you do not want to save"}
private

Definition at line 164 of file DecoratePromptLeptonImproved.h.

164{this, "vetoDecoratorFloatVars", {}, "Vector of the float variables' names you do not want to save"};

◆ m_vetoDecoratorShortVars

Gaudi::Property<std::vector<std::string> > Prompt::DecoratePromptLeptonImproved::m_vetoDecoratorShortVars {this, "vetoDecoratorShortVars", {}, "Vector of the short variables' names you do not want to save"}
private

Definition at line 165 of file DecoratePromptLeptonImproved.h.

165{this, "vetoDecoratorShortVars", {}, "Vector of the short variables' names you do not want to save"};

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.


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