Loading [MathJax]/jax/output/SVG/config.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
Prompt::DecoratePromptLeptonImproved Class Reference

#include <DecoratePromptLeptonImproved.h>

Inheritance diagram for Prompt::DecoratePromptLeptonImproved:
Collaboration 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. More...
 
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies. More...
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
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. More...
 

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 > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

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) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 61 of file DecoratePromptLeptonImproved.h.

Member Typedef Documentation

◆ AccessFloat

Definition at line 162 of file DecoratePromptLeptonImproved.h.

◆ AccessVertex

Definition at line 163 of file DecoratePromptLeptonImproved.h.

◆ decoratorFloatH_t

Definition at line 93 of file DecoratePromptLeptonImproved.h.

◆ decoratorShortH_t

Definition at line 94 of file DecoratePromptLeptonImproved.h.

◆ DecorMap_t

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

Definition at line 248 of file DecoratePromptLeptonImproved.h.

◆ floatAccessorMap

Definition at line 165 of file DecoratePromptLeptonImproved.h.

◆ 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 {}

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 }

◆ 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 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

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

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

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

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

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

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

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ 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 }

◆ 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 }

◆ 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 }

◆ 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.

95 { return m_detStore; }

◆ evtStore() [1/2]

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.

85 { return m_evtStore; }

◆ evtStore() [2/2]

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

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

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ 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  //
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());
180  floatDecors.emplace_back (k, ctx);
181  }
182 
183  std::vector<decoratorShortH_t> shortDecors;
184  shortDecors.reserve (m_shortDecorHandleKeys.size());
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);
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);
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 }

◆ 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 }

◆ 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));
135  ATH_MSG_INFO("Muon time: " << PrintResetStopWatch(m_timerMuon));
136  ATH_MSG_INFO("Elec time: " << PrintResetStopWatch(m_timerElec));
137  }
138 
139  return StatusCode::SUCCESS;
140 }

◆ 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 }

◆ 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 
526  sumCoreEt_large += cluster->pt();
527  }
528  }
529  }
530 
531  if(elec.pt() > 0.0) CaloClusterSumEtRel = sumCoreEt_large/elec.pt();
532 
534 
535  //
536  // Get lepton isolation variables
537  //
538  const double Topoetcone30rel = accessIsolation(accessCalIsolation30, elec);
539  const double Ptvarcone30rel = accessIsolation(accessTrackIsolation30, elec);
540 
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 }

◆ 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 
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 }

◆ 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  //
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 }

◆ 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 }

◆ 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 }

◆ 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 
65  ATH_CHECK(m_primaryVertexKey.initialize());
67 
68  ATH_MSG_DEBUG("Initializing " << m_electronsKey);
69 
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 }

◆ 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 }

◆ 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  //
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  //
312  m_floatDecorHandleKeys.clear();
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)) {
324  m_floatDecorMap.try_emplace (m_BDTVarKey, m_floatDecorHandleKeys.size());
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 }

◆ 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 }

◆ 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() [1/2]

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg() [2/2]

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

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ 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();
383  PBASE::renounce (h);
384  }

◆ 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  {
365  handlesArray.renounce();
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, PyAthena::Alg, and AthHistogramAlgorithm.

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 }

◆ 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) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ m_accessDeepSecondaryVertex

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

Definition at line 232 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 179 of file DecoratePromptLeptonImproved.h.

◆ m_accessRNNMap

floatAccessorMap Prompt::DecoratePromptLeptonImproved::m_accessRNNMap
private

Definition at line 234 of file DecoratePromptLeptonImproved.h.

◆ m_allVars

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

Definition at line 223 of file DecoratePromptLeptonImproved.h.

◆ m_BDTName

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

Definition at line 176 of file DecoratePromptLeptonImproved.h.

◆ m_BDTVarKey

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

Definition at line 227 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 205 of file DecoratePromptLeptonImproved.h.

◆ m_configFileVersion

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

Definition at line 173 of file DecoratePromptLeptonImproved.h.

◆ 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 174 of file DecoratePromptLeptonImproved.h.

◆ 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 195 of file DecoratePromptLeptonImproved.h.

◆ 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 210 of file DecoratePromptLeptonImproved.h.

◆ 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 182 of file DecoratePromptLeptonImproved.h.

◆ 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 183 of file DecoratePromptLeptonImproved.h.

◆ m_floatDecorHandleKeys

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

Definition at line 243 of file DecoratePromptLeptonImproved.h.

◆ m_floatDecorMap

DecorMap_t Prompt::DecoratePromptLeptonImproved::m_floatDecorMap
private

Definition at line 249 of file DecoratePromptLeptonImproved.h.

◆ m_floatVars

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

Definition at line 222 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 175 of file DecoratePromptLeptonImproved.h.

◆ m_intVars

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

Definition at line 221 of file DecoratePromptLeptonImproved.h.

◆ m_leptonPtBinHist

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

Definition at line 236 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 186 of file DecoratePromptLeptonImproved.h.

◆ 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 168 of file DecoratePromptLeptonImproved.h.

◆ 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 196 of file DecoratePromptLeptonImproved.h.

◆ 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 177 of file DecoratePromptLeptonImproved.h.

◆ 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 214 of file DecoratePromptLeptonImproved.h.

◆ m_primaryVertexKey

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

Definition at line 202 of file DecoratePromptLeptonImproved.h.

◆ m_printTime

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

Definition at line 188 of file DecoratePromptLeptonImproved.h.

◆ m_shortDecorHandleKeys

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

Definition at line 245 of file DecoratePromptLeptonImproved.h.

◆ m_shortDecorMap

DecorMap_t Prompt::DecoratePromptLeptonImproved::m_shortDecorMap
private

Definition at line 250 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 181 of file DecoratePromptLeptonImproved.h.

◆ 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 180 of file DecoratePromptLeptonImproved.h.

◆ m_timerAll

TStopwatch Prompt::DecoratePromptLeptonImproved::m_timerAll
private

Definition at line 238 of file DecoratePromptLeptonImproved.h.

◆ m_timerElec

TStopwatch Prompt::DecoratePromptLeptonImproved::m_timerElec
private

Definition at line 241 of file DecoratePromptLeptonImproved.h.

◆ m_timerExec

TStopwatch Prompt::DecoratePromptLeptonImproved::m_timerExec
private

Definition at line 239 of file DecoratePromptLeptonImproved.h.

◆ m_timerMuon

TStopwatch Prompt::DecoratePromptLeptonImproved::m_timerMuon
private

Definition at line 240 of file DecoratePromptLeptonImproved.h.

◆ m_TMVAReader

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

Definition at line 229 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 199 of file DecoratePromptLeptonImproved.h.

◆ 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 225 of file DecoratePromptLeptonImproved.h.

◆ m_varTMVA

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

Definition at line 230 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 194 of file DecoratePromptLeptonImproved.h.

◆ m_vertexLinkName

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

Definition at line 190 of file DecoratePromptLeptonImproved.h.

◆ m_vertexMinChiSquaredProb

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

Definition at line 191 of file DecoratePromptLeptonImproved.h.

◆ 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 192 of file DecoratePromptLeptonImproved.h.

◆ 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 193 of file DecoratePromptLeptonImproved.h.

◆ 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 184 of file DecoratePromptLeptonImproved.h.

◆ 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 185 of file DecoratePromptLeptonImproved.h.

◆ 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:
Prompt::DecoratePromptLeptonImproved::m_primaryVertexKey
SG::ReadHandleKey< xAOD::VertexContainer > m_primaryVertexKey
Definition: DecoratePromptLeptonImproved.h:202
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
xAOD::CaloCluster_v1::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition: CaloCluster_v1.cxx:256
SG::WriteDecorHandleKey
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
Definition: StoreGate/StoreGate/WriteDecorHandleKey.h:89
Prompt::DecoratePromptLeptonImproved::getVertexLongitudinalNormDist
double getVertexLongitudinalNormDist(const xAOD::IParticle &lepton, const xAOD::Vertex *secondaryVertex, const xAOD::Vertex *primaryVertex) const
Definition: DecoratePromptLeptonImproved.cxx:875
Prompt::Def::RawPt
@ RawPt
Definition: VarHolder.h:94
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:196
Prompt::DecoratePromptLeptonImproved::m_vetoDecoratorShortVars
Gaudi::Property< std::vector< std::string > > m_vetoDecoratorShortVars
Definition: DecoratePromptLeptonImproved.h:185
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
Prompt::DecoratePromptLeptonImproved::m_vetoDecoratorFloatVars
Gaudi::Property< std::vector< std::string > > m_vetoDecoratorFloatVars
Definition: DecoratePromptLeptonImproved.h:184
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
Prompt::GetAuxVar
bool GetAuxVar(const T1 &obj, T2 &value, const std::string &var_name)
Definition: PromptUtils.h:93
Prompt::DecoratePromptLeptonImproved::m_elecMinCalErelConeSize
Gaudi::Property< double > m_elecMinCalErelConeSize
Definition: DecoratePromptLeptonImproved.h:195
Prompt::getVertexFitProb
double getVertexFitProb(const xAOD::Vertex *vtx)
Definition: PromptUtils.cxx:21
Prompt::Def::TrackJetNTrack
@ TrackJetNTrack
Definition: VarHolder.h:69
Prompt::DecoratePromptLeptonImproved::m_leptonPtBinsVector
Gaudi::Property< std::vector< double > > m_leptonPtBinsVector
Definition: DecoratePromptLeptonImproved.h:186
Prompt::DecoratePromptLeptonImproved::initializeTMVAReader
bool initializeTMVAReader()
Definition: DecoratePromptLeptonImproved.cxx:220
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Prompt::DecoratePromptLeptonImproved::m_intVars
std::vector< Prompt::Def::Var > m_intVars
Definition: DecoratePromptLeptonImproved.h:221
Prompt::VarHolder::addVar
bool addVar(unsigned key, double value)
Adds a variable to the VarHolder.
Definition: VarHolder.h:210
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:75
Prompt::VarHolder
Definition: VarHolder.h:112
Prompt::DecoratePromptLeptonImproved::m_allVars
std::vector< Prompt::Def::Var > m_allVars
Definition: DecoratePromptLeptonImproved.h:223
Prompt::DecoratePromptLeptonImproved::m_accessRNNMap
floatAccessorMap m_accessRNNMap
Definition: DecoratePromptLeptonImproved.h:234
Prompt::DecoratePromptLeptonImproved::m_BDTName
Gaudi::Property< std::string > m_BDTName
Definition: DecoratePromptLeptonImproved.h:176
Prompt::DecoratePromptLeptonImproved::initializeConstAccessors
void initializeConstAccessors()
Definition: DecoratePromptLeptonImproved.cxx:381
AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
defineDB.jets
jets
Definition: JetTagCalibration/share/defineDB.py:24
AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
xAOD::JetConstituentVector::size
size_t size() const
number of constituents
Definition: JetConstituentVector.cxx:102
Prompt::DecoratePromptLeptonImproved::m_electronsKey
SG::ReadHandleKey< xAOD::ElectronContainer > m_electronsKey
Definition: DecoratePromptLeptonImproved.h:210
Prompt::DecoratePromptLeptonImproved::findTrackJet
std::pair< double, const xAOD::Jet * > findTrackJet(const T &part, const xAOD::JetContainer &jets)
Definition: DecoratePromptLeptonImproved.cxx:845
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
Prompt::DecoratePromptLeptonImproved::m_vertexMinThetaEcapElec
Gaudi::Property< double > m_vertexMinThetaEcapElec
Definition: DecoratePromptLeptonImproved.h:193
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:112
Prompt::DecoratePromptLeptonImproved::m_stringFloatVars
Gaudi::Property< std::vector< std::string > > m_stringFloatVars
Definition: DecoratePromptLeptonImproved.h:181
Prompt::DecoratePromptLeptonImproved::getMuonAnpVariables
void getMuonAnpVariables(const xAOD::Muon &muon, Prompt::VarHolder &vars, const xAOD::Vertex *primaryVertex) const
Definition: DecoratePromptLeptonImproved.cxx:592
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Prompt::DecoratePromptLeptonImproved::m_vertexBarrEcapAbsEtaAt
Gaudi::Property< double > m_vertexBarrEcapAbsEtaAt
Definition: DecoratePromptLeptonImproved.h:194
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
xAOD::Jet_v1::getConstituents
JetConstituentVector getConstituents() const
Return a vector of consituents. The object behaves like vector<const IParticle*>. See JetConstituentV...
Definition: Jet_v1.cxx:147
Prompt::DecoratePromptLeptonImproved::m_shortDecorHandleKeys
SG::WriteDecorHandleKeyArray< xAOD::IParticleContainer > m_shortDecorHandleKeys
Definition: DecoratePromptLeptonImproved.h:246
Phi_mpi_pi
__HOSTDEV__ double Phi_mpi_pi(double)
Definition: GeoRegion.cxx:7
Prompt::PrintResetStopWatch
std::string PrintResetStopWatch(TStopwatch &watch)
Definition: PromptUtils.cxx:244
Prompt::DecoratePromptLeptonImproved::DecorMap_t
std::unordered_map< Def::Var, size_t > DecorMap_t
Definition: DecoratePromptLeptonImproved.h:248
Prompt::Def::DRlj
@ DRlj
Definition: VarHolder.h:70
Prompt::DecoratePromptLeptonImproved::getElectronAnpVariables
void getElectronAnpVariables(const xAOD::Electron &elec, const xAOD::CaloClusterContainer &clusters, Prompt::VarHolder &vars, const xAOD::Vertex *primaryVertex)
Definition: DecoratePromptLeptonImproved.cxx:504
Prompt::DecoratePromptLeptonImproved::m_muonsKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonsKey
Definition: DecoratePromptLeptonImproved.h:214
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
python.utils.AtlRunQueryTimer.timer
def timer(name, disabled=False)
Definition: AtlRunQueryTimer.py:86
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Prompt::DecoratePromptLeptonImproved::m_timerExec
TStopwatch m_timerExec
Definition: DecoratePromptLeptonImproved.h:239
Prompt::Def::PtFrac
@ PtFrac
Definition: VarHolder.h:71
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
Prompt::DecoratePromptLeptonImproved::m_TMVAReader
std::unique_ptr< TMVA::Reader > m_TMVAReader
Definition: DecoratePromptLeptonImproved.h:229
Prompt::Def::NONE
@ NONE
Definition: VarHolder.h:68
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
Prompt::VarHolder::getVar
double getVar(const unsigned key) const
Definition: VarHolder.h:275
Prompt::DecoratePromptLeptonImproved::m_timerElec
TStopwatch m_timerElec
Definition: DecoratePromptLeptonImproved.h:241
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:62
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
AthCommonDataStore
Definition: AthCommonDataStore.h:52
AthAlgorithm::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthAlgorithm.cxx:66
Prompt::Def::Ptvarcone30rel
@ Ptvarcone30rel
Definition: VarHolder.h:91
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Prompt::DecoratePromptLeptonImproved::m_extraDecoratorShortVars
Gaudi::Property< std::vector< std::string > > m_extraDecoratorShortVars
Definition: DecoratePromptLeptonImproved.h:183
Prompt::Def::MVAXBin
@ MVAXBin
Definition: VarHolder.h:93
Prompt::DecoratePromptLeptonImproved::m_methodTitleMVA
Gaudi::Property< std::string > m_methodTitleMVA
Definition: DecoratePromptLeptonImproved.h:177
columnar::ContainerId::cluster
@ cluster
AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
xAOD::CaloCluster_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition: CaloCluster_v1.cxx:251
lumiFormat.i
int i
Definition: lumiFormat.py:85
xmin
double xmin
Definition: listroot.cxx:60
Prompt::DecoratePromptLeptonImproved::m_extraDecoratorFloatVars
Gaudi::Property< std::vector< std::string > > m_extraDecoratorFloatVars
Definition: DecoratePromptLeptonImproved.h:182
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:73
xAOD::Egamma_v1::caloCluster
const xAOD::CaloCluster * caloCluster(size_t index=0) const
Pointer to the xAOD::CaloCluster/s that define the electron candidate.
Definition: Egamma_v1.cxx:388
Prompt::DecoratePromptLeptonImproved::m_BDTVarKey
Prompt::Def::Var m_BDTVarKey
Definition: DecoratePromptLeptonImproved.h:227
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:572
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
Prompt::DecoratePromptLeptonImproved::m_inputVarDecoratePrefix
Gaudi::Property< std::string > m_inputVarDecoratePrefix
Definition: DecoratePromptLeptonImproved.h:175
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Prompt::DecoratePromptLeptonImproved::m_printTime
Gaudi::Property< bool > m_printTime
Definition: DecoratePromptLeptonImproved.h:188
AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
Prompt::DecoratePromptLeptonImproved::m_floatVars
std::vector< Prompt::Def::Var > m_floatVars
Definition: DecoratePromptLeptonImproved.h:222
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
Prompt::DecoratePromptLeptonImproved::m_floatDecorMap
DecorMap_t m_floatDecorMap
Definition: DecoratePromptLeptonImproved.h:249
Prompt::DecoratePromptLeptonImproved::m_shortDecorMap
DecorMap_t m_shortDecorMap
Definition: DecoratePromptLeptonImproved.h:250
Prompt::Def::CandVertex_NPassVtx
@ CandVertex_NPassVtx
Definition: VarHolder.h:100
Prompt::DecoratePromptLeptonImproved::m_maxLepTrackJetDR
Gaudi::Property< double > m_maxLepTrackJetDR
Definition: DecoratePromptLeptonImproved.h:196
Prompt::DecoratePromptLeptonImproved::accessIsolation
float accessIsolation(const SG::ConstAccessor< float > &isoAccessor, const xAOD::IParticle &particle) const
Definition: DecoratePromptLeptonImproved.cxx:741
Prompt::DecoratePromptLeptonImproved::decorateElec
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)
Definition: DecoratePromptLeptonImproved.cxx:404
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
Prompt::Def::CaloClusterSumEtRel
@ CaloClusterSumEtRel
Definition: VarHolder.h:96
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Prompt::DecoratePromptLeptonImproved::addVarsToTMVA
void addVarsToTMVA(Prompt::VarHolder &vars)
Definition: DecoratePromptLeptonImproved.cxx:762
Prompt::DecoratePromptLeptonImproved::m_leptonPtBinHist
std::unique_ptr< TH1D > m_leptonPtBinHist
Definition: DecoratePromptLeptonImproved.h:236
Prompt::DecoratePromptLeptonImproved::m_accessorRNNVars
Gaudi::Property< std::vector< std::string > > m_accessorRNNVars
Definition: DecoratePromptLeptonImproved.h:179
xAOD::IParticle::p4
virtual FourMom_t p4() const =0
The full 4-momentum of the particle.
Prompt::DecoratePromptLeptonImproved::m_stringIntVars
Gaudi::Property< std::vector< std::string > > m_stringIntVars
Definition: DecoratePromptLeptonImproved.h:180
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
xAOD::Electron_v1
Definition: Electron_v1.h:34
Prompt::DecoratePromptLeptonImproved::m_clusterContainerKey
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_clusterContainerKey
Definition: DecoratePromptLeptonImproved.h:205
Prompt::DecoratePromptLeptonImproved::fillVarDefault
void fillVarDefault(Prompt::VarHolder &vars) const
Definition: DecoratePromptLeptonImproved.cxx:789
Prompt::DecoratePromptLeptonImproved::AccessFloat
SG::ConstAccessor< float > AccessFloat
Definition: DecoratePromptLeptonImproved.h:162
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
Prompt::DecoratePromptLeptonImproved::m_configPathOverride
Gaudi::Property< std::string > m_configPathOverride
Definition: DecoratePromptLeptonImproved.h:174
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
AthAlgorithm::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Definition: AthAlgorithm.h:79
Prompt::DecoratePromptLeptonImproved::m_varTMVA
std::vector< Float_t > m_varTMVA
Definition: DecoratePromptLeptonImproved.h:230
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
xAOD::Jet_v1::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: Jet_v1.cxx:71
a
TList * a
Definition: liststreamerinfos.cxx:10
h
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
Prompt::DecoratePromptLeptonImproved::m_timerAll
TStopwatch m_timerAll
Definition: DecoratePromptLeptonImproved.h:238
std::sort
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
Definition: DVL_algorithms.h:623
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
SG::makeContDecorKey
std::string makeContDecorKey(const std::string &cont, const std::string &decor)
Make a StoreGate key from container and decoration name.
Definition: DecorKeyHelpers.cxx:59
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
Prompt::DecoratePromptLeptonImproved::m_floatDecorHandleKeys
SG::WriteDecorHandleKeyArray< xAOD::IParticleContainer > m_floatDecorHandleKeys
Definition: DecoratePromptLeptonImproved.h:244
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
xAOD::EgammaParameters::electron
@ electron
Definition: EgammaEnums.h:18
Prompt::Def::Ptvarcone30_TightTTVA_pt500rel
@ Ptvarcone30_TightTTVA_pt500rel
Definition: VarHolder.h:92
xmax
double xmax
Definition: listroot.cxx:61
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:629
xAOD::Egamma_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: Egamma_v1.cxx:65
Prompt::Def::CandVertex_normDistToPriVtxLongitudinalBest
@ CandVertex_normDistToPriVtxLongitudinalBest
Definition: VarHolder.h:98
Prompt::Def::PtRel
@ PtRel
Definition: VarHolder.h:72
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
AthAlgorithm::AthAlgorithm
AthAlgorithm()
Default constructor:
xAOD::Egamma_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: Egamma_v1.cxx:70
Prompt::DecoratePromptLeptonImproved::m_vertexLinkName
Gaudi::Property< std::string > m_vertexLinkName
Definition: DecoratePromptLeptonImproved.h:190
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
Prompt::DecoratePromptLeptonImproved::getMutualVariables
void getMutualVariables(const xAOD::IParticle &particle, const xAOD::Jet &track_jet, const xAOD::TrackParticle *track, Prompt::VarHolder &vars) const
Definition: DecoratePromptLeptonImproved.cxx:670
Prompt::DecoratePromptLeptonImproved::m_configFileVersion
Gaudi::Property< std::string > m_configFileVersion
Definition: DecoratePromptLeptonImproved.h:173
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
Prompt::DecoratePromptLeptonImproved::m_accessDeepSecondaryVertex
std::optional< AccessVertex > m_accessDeepSecondaryVertex
Definition: DecoratePromptLeptonImproved.h:232
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Prompt::DecoratePromptLeptonImproved::m_timerMuon
TStopwatch m_timerMuon
Definition: DecoratePromptLeptonImproved.h:240
Prompt::DecoratePromptLeptonImproved::m_vertexMinThetaBarrElec
Gaudi::Property< double > m_vertexMinThetaBarrElec
Definition: DecoratePromptLeptonImproved.h:192
Prompt::Def::Var
Var
Definition: VarHolder.h:57
Prompt::DecoratePromptLeptonImproved::m_vertexMinChiSquaredProb
Gaudi::Property< double > m_vertexMinChiSquaredProb
Definition: DecoratePromptLeptonImproved.h:191
xAOD::Jet_v1::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
Definition: Jet_v1.cxx:44
Prompt::DecoratePromptLeptonImproved::initializeDecorators
StatusCode initializeDecorators()
Definition: DecoratePromptLeptonImproved.cxx:262
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
Prompt::DecoratePromptLeptonImproved::decorateMuon
void decorateMuon(const xAOD::Muon &muon, const xAOD::JetContainer &trackJets, const xAOD::Vertex *primaryVertex, std::vector< decoratorFloatH_t > &floatDecors, std::vector< decoratorShortH_t > &shortDecors)
Definition: DecoratePromptLeptonImproved.cxx:455
Prompt::Def::CandVertex_normDistToPriVtxLongitudinalBest_ThetaCutVtx
@ CandVertex_normDistToPriVtxLongitudinalBest_ThetaCutVtx
Definition: VarHolder.h:99
InDetDD::electrons
@ electrons
Definition: InDetDD_Defs.h:17
Prompt::Def::Topoetcone30rel
@ Topoetcone30rel
Definition: VarHolder.h:90
Prompt::Def::CaloClusterERel
@ CaloClusterERel
Definition: VarHolder.h:95
Prompt::DecoratePromptLeptonImproved::getVertexCosThetaWithLepDir
double getVertexCosThetaWithLepDir(const xAOD::IParticle &lepton, const xAOD::Vertex *secondaryVertex, const xAOD::Vertex *primaryVertex) const
Definition: DecoratePromptLeptonImproved.cxx:902
Prompt::DecoratePromptLeptonImproved::m_vars
std::unique_ptr< Prompt::VarHolder > m_vars
Definition: DecoratePromptLeptonImproved.h:225
match
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Definition: hcg.cxx:356
fitman.k
k
Definition: fitman.py:528
ServiceHandle< ICondSvc >
Prompt::DecoratePromptLeptonImproved::decorateAuxLepton
void decorateAuxLepton(const xAOD::IParticle &particle, Prompt::VarHolder &vars, std::vector< decoratorFloatH_t > &floatDecors, std::vector< decoratorShortH_t > &shortDecors) const
Definition: DecoratePromptLeptonImproved.cxx:804
Prompt::VarHolder::asStr
std::string asStr(const uint32_t key, const double val)
Definition: VarHolder.cxx:178
Prompt::DecoratePromptLeptonImproved::m_trackJetsKey
SG::ReadHandleKey< xAOD::JetContainer > m_trackJetsKey
Definition: DecoratePromptLeptonImproved.h:199
Prompt::DecoratePromptLeptonImproved::m_leptonsName
Gaudi::Property< std::string > m_leptonsName
Definition: DecoratePromptLeptonImproved.h:168