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

#include <TrigGlobalEfficiencyCorrectionTool.h>

Inheritance diagram for TrigGlobalEfficiencyCorrectionTool:

Classes

struct  CachedRanking
struct  Hierarchy
struct  TagDecorator
struct  ToolKey

Public Member Functions

virtual ASG_TOOL_CLASS(TrigGlobalEfficiencyCorrectionTool, ITrigGlobalEfficiencyCorrectionTool) TrigGlobalEfficiencyCorrectionTool(const std ~TrigGlobalEfficiencyCorrectionTool ()
virtual StatusCode initialize () override
 Dummy implementation of the initialisation function.
virtual CP::CorrectionCode getEfficiencyScaleFactor (const std::vector< const xAOD::IParticle * > &particles, double &efficiencyScaleFactor) override
virtual CP::CorrectionCode getEfficiencyScaleFactor (unsigned runNumber, const std::vector< const xAOD::IParticle * > &particles, double &efficiencyScaleFactor) override
 These should in principle not be used (except by unit tests), as the CP tools require the EventInfo decoration "RandomRunNumber" to be present.
virtual CP::CorrectionCode getEfficiency (const std::vector< const xAOD::IParticle * > &particles, double &efficiencyData, double &efficiencyMc) override
virtual CP::CorrectionCode getEfficiency (unsigned runNumber, const std::vector< const xAOD::IParticle * > &particles, double &efficiencyData, double &efficiencyMc) override
virtual bool isAffectedBySystematic (const CP::SystematicVariation &systematic) const override
 Declare the interface that this class provides.
virtual CP::SystematicSet affectingSystematics () const override
 the list of all systematics this tool can be affected by
virtual CP::SystematicSet recommendedSystematics () const override
 the list of all systematics this tool recommends to use
virtual StatusCode applySystematicVariation (const CP::SystematicSet &systConfig) override
 effects: configure this tool for the given list of systematic variations.
virtual CP::CorrectionCode checkTriggerMatching (bool &matched, const std::vector< const xAOD::IParticle * > &particles) override
virtual CP::CorrectionCode checkTriggerMatching (std::unordered_map< std::string, bool > &matched_per_trigger, const std::vector< const xAOD::IParticle * > &particles) override
virtual CP::CorrectionCode getRelevantTriggers (std::vector< std::string > &triggers) override
 This will fill the 'triggers' argument with the names of the triggers relevant for the current run number, among those specified in the tool configuration.
virtual CP::CorrectionCode countTriggerLegs (const std::string &trigger, std::size_t &numberOfLegs) override
 This utility function provides the number of legs for the specified trigger.
template<class CPTool>
bool enumerateTools (ImportData &data, ToolHandleArray< CPTool > &suppliedTools, std::map< ToolKey, std::size_t > &toolIndex, flat_set< std::size_t > &collectedTags)
template<class ParticleType>
auto getEgammaTriggerLegEfficiencies (const ParticleType *p, unsigned runNumber, std::size_t leg, std::size_t tag, Efficiencies &efficiencies) -> TLE_RESULT
template<class Container>
auto rankTriggerLegs (float pt, const Container &legs) -> CachedRanking
virtual void print () const
 Print the state of the tool.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
template<typename... Args>
auto getEfficiencyScaleFactor (Args &... args) -> std::enable_if_t< validArgs< Args... >(1), CP::CorrectionCode >
 Alternatively, the list of particles can be supplied via one or several vectors of xAOD::Electron*‍/Muon*‍/Photon* The generic signature is getEfficiencyScaleFactor((const) vector<(const)Type1*>&, ..., (const) vector<(const)TypeN*>&, double& efficiencyScaleFactor) e.g.
template<typename... Args>
auto getEfficiency (Args &... args) -> std::enable_if_t< validArgs< Args... >(2), CP::CorrectionCode >
template<typename BoolOrMap, typename... Args>
auto checkTriggerMatching (BoolOrMap &matched, Args &... args) -> std::enable_if_t< validArgs< Args... >(0), CP::CorrectionCode >
Additional helper functions, not directly mimicking Athena
template<class T>
const T * getProperty (const std::string &name) const
 Get one of the tool's properties.
const std::string & msg_level_name () const __attribute__((deprecated))
 A deprecated function for getting the message level's name.
const std::string & getName (const void *ptr) const
 Get the name of an object that is / should be in the event store.
SG::sgkey_t getKey (const void *ptr) const
 Get the (hashed) key of an object that is in the event store.

Static Public Member Functions

static CP::CorrectionCode suggestElectronMapKeys (const std::map< std::string, std::string > &triggerCombination, const std::string &version, std::map< std::string, std::string > &legsPerKey)
static CP::CorrectionCode suggestPhotonMapKeys (const std::map< std::string, std::string > &triggerCombination, const std::string &version, std::map< std::string, std::string > &legsPerKey)
static CP::CorrectionCode suggestEgammaMapKeys (const std::map< std::string, std::string > &triggerCombination, const std::string &version, std::map< std::string, std::string > &legsPerKey, xAOD::Type::ObjectType type)
template<typename Arg>
static constexpr bool validArgs (unsigned nTrailingDoubles)
template<typename Arg1, typename Arg2, typename... OtherArgs>
static constexpr bool validArgs (unsigned nTrailingDoubles)
static std::string toolnameForDefaultScaleFactor ()
 To be used with the ListOfLegsPerTool property:

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.
double * handleArg (double &arg, std::vector< const xAOD::IParticle * > &)
template<typename P>
double * handleArg (const std::vector< P > &arg, std::vector< const xAOD::IParticle * > &particles)

Private Types

enum  TLE_RESULT { TLE_OK , TLE_UNAVAILABLE , TLE_ERROR }
using LeptonList = std::vector<TrigGlobEffCorr::Lepton>
template<typename Key>
using flat_set = boost::container::flat_set<Key>
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

bool loadHierarchies ()
 Internal methods (I) – initialization of the tool.
template<class CPTool>
bool enumerateTools (TrigGlobEffCorr::ImportData &data, ToolHandleArray< CPTool > &suppliedTools, std::map< ToolKey, std::size_t > &toolIndex, flat_set< std::size_t > &collectedTags)
flat_set< ToolKeyparseListOfLegs (TrigGlobEffCorr::ImportData &data, const std::string &inputList, bool &success)
bool parseTagString (const std::string &tagstring, flat_set< std::size_t > &tags)
bool loadTriggerCombination (TrigGlobEffCorr::ImportData &data, bool useDefaultElectronTools, bool useDefaultPhotonTools)
bool loadTagDecorators (const flat_set< std::size_t > &collectedElectronTags, const flat_set< std::size_t > &collectedMuonTags, const flat_set< std::size_t > &collectedPhotonTags)
bool loadListOfLegsPerTag ()
bool processDeprecatedProperties ()
bool retrieveRunNumber (unsigned &runNumber)
 Internal methods (II) – core task.
bool retrieveEventNumber (unsigned long &eventNumber)
bool aboveThreshold (const TrigGlobEffCorr::Lepton &p, std::size_t leg) const
template<class... ListOfLegs>
unsigned long getCachedTriggerLegsRanking (const TrigGlobEffCorr::Lepton &lepton, ListOfLegs... legs)
std::size_t getLoosestLegAboveThreshold (const TrigGlobEffCorr::Lepton &lepton, const flat_set< std::size_t > &legs, bool &success)
std::size_t getLoosestLeg (const TrigGlobEffCorr::Lepton &lepton, std::size_t leg1, std::size_t leg2, bool &success)
std::pair< std::size_t, std::size_t > getTwoLoosestLegs (const TrigGlobEffCorr::Lepton &lepton, const flat_set< std::size_t > &legs, bool &success)
std::vector< std::size_t > getSortedLegs (const TrigGlobEffCorr::Lepton &lepton, const flat_set< std::size_t > &legs, bool &success)
template<class Container>
CachedRanking rankTriggerLegs (float pt, const Container &legs)
template<class Particle>
bool updateLeptonList (LeptonList &leptons, const std::vector< const Particle * > &particles)
void updateMuonTriggerNames (std::size_t leg, const std::string &name)
TLE_RESULT getTriggerLegEfficiencies (const xAOD::Electron *p, unsigned runNumber, std::size_t leg, std::size_t tag, TrigGlobEffCorr::Efficiencies &efficiencies)
TLE_RESULT getTriggerLegEfficiencies (const xAOD::Muon *p, unsigned runNumber, std::size_t leg, std::size_t tag, TrigGlobEffCorr::Efficiencies &efficiencies)
TLE_RESULT getTriggerLegEfficiencies (const xAOD::Photon *p, unsigned runNumber, std::size_t leg, std::size_t tag, TrigGlobEffCorr::Efficiencies &efficiencies)
template<class ParticleType>
TLE_RESULT getEgammaTriggerLegEfficiencies (const ParticleType *p, unsigned runNumber, std::size_t leg, std::size_t tag, TrigGlobEffCorr::Efficiencies &efficiencies)
decltype(m_electronSfToolIndex) & GetScaleFactorToolIndex (const xAOD::Electron *)
decltype(m_photonSfToolIndex) & GetScaleFactorToolIndex (const xAOD::Photon *)
decltype(m_electronEffToolIndex) & GetEfficiencyToolIndex (const xAOD::Electron *)
decltype(m_photonEffToolIndex) & GetEfficiencyToolIndex (const xAOD::Photon *)
IAsgElectronEfficiencyCorrectionToolGetScaleFactorTool (const xAOD::Electron *, std::size_t index)
IAsgPhotonEfficiencyCorrectionToolGetScaleFactorTool (const xAOD::Photon *, std::size_t index)
IAsgElectronEfficiencyCorrectionToolGetEfficiencyTool (const xAOD::Electron *, std::size_t index)
IAsgPhotonEfficiencyCorrectionToolGetEfficiencyTool (const xAOD::Photon *, std::size_t index)
std::size_t getCombinedHash (const flat_set< std::size_t > &legs)
std::size_t getCombinedHash (std::size_t leg1, std::size_t leg2)
bool checkAndRecord (CP::CorrectionCode &&cc)
 Internal methods (III) – misc. helpers.
flat_set< std::size_t > listNonOrderedCSValues (const std::string &s, bool &success)
 Parses the input string (comma-separated list) and returns a set of hashes Watch out: since a flat_set is returned, the order of the entries in the input list is not preserved, as hinted by the name of the function.
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Static Private Member Functions

static constexpr const flat_set< std::size_t > & forwardLegs (const flat_set< std::size_t > &legs)
static constexpr std::array< std::size_t, 2 > forwardLegs (std::size_t leg1, std::size_t leg2)

Private Attributes

ToolHandleArray< IAsgElectronEfficiencyCorrectionToolm_suppliedElectronEfficiencyTools
 Properties:
ToolHandleArray< IAsgElectronEfficiencyCorrectionToolm_suppliedElectronScaleFactorTools
ToolHandleArray< IAsgPhotonEfficiencyCorrectionToolm_suppliedPhotonEfficiencyTools
ToolHandleArray< IAsgPhotonEfficiencyCorrectionToolm_suppliedPhotonScaleFactorTools
ToolHandleArray< CP::IMuonTriggerScaleFactorsm_suppliedMuonTools
std::map< std::string, std::string > m_legsPerTool
std::map< std::string, std::string > m_triggerCb
std::map< std::string, std::string > m_triggerCbPerYear
std::string m_leptonTagDecorations
std::map< std::string, std::string > m_tagsPerTool
std::map< std::string, std::string > m_electronLegsPerTag
std::map< std::string, std::string > m_muonLegsPerTag
 deprecated
std::map< std::string, std::string > m_legsPerTag
 deprecated
std::map< std::string, std::string > m_overrideThresholds
unsigned long m_numberOfToys
bool m_useInternalSeed
ToolHandle< Trig::IMatchingToolm_trigMatchTool
std::hash< std::string > m_hasher
std::map< std::size_t, float > m_thresholds
std::multimap< std::size_t, CachedRankingm_cachedLegRankings
std::map< ToolKey, std::size_t > m_electronSfToolIndex
std::map< ToolKey, std::size_t > m_electronEffToolIndex
std::map< ToolKey, std::size_t > m_photonSfToolIndex
std::map< ToolKey, std::size_t > m_photonEffToolIndex
std::map< ToolKey, std::size_t > m_muonToolIndex
std::set< std::size_t > m_validLegTagPairs
bool m_checkElectronLegTag
bool m_checkMuonLegTag
bool m_checkPhotonLegTag
std::map< std::size_t, std::string > m_dictionary
std::set< ToolKeym_unsupportedLegs
std::vector< Hierarchym_hierarchyMeta
std::vector< std::size_t > m_hierarchyData
bool m_initialized = false
CP::CorrectionCode m_cpCode = CP::CorrectionCode::Ok
unsigned long m_seed
bool m_validTrigMatchTool
std::vector< TagDecoratorm_leptonTagDecorators
SG::AuxElement::ConstAccessor< unsigned int > m_runNumberDecorator
std::unique_ptr< TrigGlobEffCorr::Calculatorm_calculator
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

Friends

class TrigGlobEffCorr::ImportData
class TrigGlobEffCorr::CheckConfig
class TrigGlobEffCorr::Calculator

Detailed Description

Definition at line 35 of file TrigGlobalEfficiencyCorrectionTool.h.

Member Typedef Documentation

◆ flat_set

template<typename Key>
using TrigGlobalEfficiencyCorrectionTool::flat_set = boost::container::flat_set<Key>
private

Definition at line 196 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ LeptonList

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ TLE_RESULT

Constructor & Destructor Documentation

◆ ~TrigGlobalEfficiencyCorrectionTool()

TrigGlobalEfficiencyCorrectionTool::~TrigGlobalEfficiencyCorrectionTool ( )
virtual

Definition at line 96 of file TrigGlobalEfficiencyCorrectionTool.cxx.

96 {
97 m_cpCode.ignore();
98}

Member Function Documentation

◆ aboveThreshold()

bool TrigGlobalEfficiencyCorrectionTool::aboveThreshold ( const TrigGlobEffCorr::Lepton & p,
std::size_t leg ) const
private

Definition at line 1010 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1011 {
1012 bool decision = (lepton.pt() >= m_thresholds.at(leg));
1013 if (m_validLegTagPairs.size()) {
1014 if ((lepton.type() == xAOD::Type::Electron && m_checkElectronLegTag) ||
1015 (lepton.type() == xAOD::Type::Muon && m_checkMuonLegTag) ||
1016 (lepton.type() == xAOD::Type::Photon && m_checkPhotonLegTag)) {
1017 decision = decision && (m_validLegTagPairs.find(leg ^ lepton.tag()) !=
1018 m_validLegTagPairs.end());
1019 }
1020 }
1021 ATH_MSG_DEBUG("Lepton " << lepton.particle() << " (pt=" << lepton.pt()
1022 << ") is " << (decision ? "" : "not ")
1023 << "considered suitable for firing trigger leg "
1024 << m_dictionary.at(leg));
1025 return decision;
1026}
#define ATH_MSG_DEBUG(x)
std::map< std::size_t, std::string > m_dictionary
@ Photon
The object is a photon.
Definition ObjectType.h:47
@ Muon
The object is a muon.
Definition ObjectType.h:48
@ Electron
The object is an electron.
Definition ObjectType.h:46

◆ affectingSystematics()

CP::SystematicSet TrigGlobalEfficiencyCorrectionTool::affectingSystematics ( ) const
overridevirtual

the list of all systematics this tool can be affected by

Implements CP::IReentrantSystematicsTool.

Definition at line 1222 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1223 {
1224 return CP::SystematicSet();
1225}

◆ applySystematicVariation()

StatusCode TrigGlobalEfficiencyCorrectionTool::applySystematicVariation ( const CP::SystematicSet & systConfig)
overridevirtual

effects: configure this tool for the given list of systematic variations.

any requested systematics that are not affecting this tool will be silently ignored (unless they cause other errors). failures: systematic unknown failures: requesting multiple variations on the same systematic (e.g. up & down) failures: requesting an unsupported variation on an otherwise supported systematic (e.g. a 2 sigma variation and the tool only supports 1 sigma variations) failures: unsupported combination of supported systematic failures: other tool specific errors

Implements CP::ISystematicsTool.

Definition at line 1232 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1233 {
1234 for (auto&& t : m_suppliedElectronEfficiencyTools)
1235 ANA_CHECK(t->applySystematicVariation(systematic));
1236 for (auto&& t : m_suppliedElectronScaleFactorTools)
1237 ANA_CHECK(t->applySystematicVariation(systematic));
1238 for (auto&& t : m_suppliedPhotonEfficiencyTools)
1239 ANA_CHECK(t->applySystematicVariation(systematic));
1240 for (auto&& t : m_suppliedPhotonScaleFactorTools)
1241 ANA_CHECK(t->applySystematicVariation(systematic));
1242 for (auto&& t : m_suppliedMuonTools)
1243 ANA_CHECK(t->applySystematicVariation(systematic));
1244
1245 return StatusCode::SUCCESS;
1246}
#define ANA_CHECK(EXP)
check whether the given expression was successful
ToolHandleArray< IAsgPhotonEfficiencyCorrectionTool > m_suppliedPhotonScaleFactorTools
ToolHandleArray< IAsgPhotonEfficiencyCorrectionTool > m_suppliedPhotonEfficiencyTools
ToolHandleArray< IAsgElectronEfficiencyCorrectionTool > m_suppliedElectronEfficiencyTools
Properties:
ToolHandleArray< CP::IMuonTriggerScaleFactors > m_suppliedMuonTools
ToolHandleArray< IAsgElectronEfficiencyCorrectionTool > m_suppliedElectronScaleFactorTools

◆ checkAndRecord()

bool TrigGlobalEfficiencyCorrectionTool::checkAndRecord ( CP::CorrectionCode && cc)
inlineprivate

Internal methods (III) – misc. helpers.

Definition at line 627 of file TrigGlobalEfficiencyCorrectionTool.cxx.

628 {
629 cc.setChecked();
630 if (cc > m_cpCode)
631 m_cpCode = cc;
632 return cc == CP::CorrectionCode::Ok;
633}
@ Ok
The correction was done successfully.

◆ checkTriggerMatching() [1/3]

template<typename BoolOrMap, typename... Args>
auto ITrigGlobalEfficiencyCorrectionTool::checkTriggerMatching ( BoolOrMap & matched,
Args &... args ) -> std::enable_if_t<validArgs<Args...>(0), CP::CorrectionCode>
inherited

Definition at line 111 of file ITrigGlobalEfficiencyCorrectionTool.h.

113{
114 std::vector<const xAOD::IParticle*> particles;
115 double* eff[] __attribute__((unused)) = { nullptr, handleArg(args, particles)... };
116 return checkTriggerMatching(matched, particles);
117}
__attribute__((always_inline)) inline uint16_t TileCalibDrawerBase
void unused(Args &&...)
virtual CP::CorrectionCode checkTriggerMatching(bool &matched, const std::vector< const xAOD::IParticle * > &particles)=0
double * handleArg(double &arg, std::vector< const xAOD::IParticle * > &)

◆ checkTriggerMatching() [2/3]

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::checkTriggerMatching ( bool & matched,
const std::vector< const xAOD::IParticle * > & particles )
overridevirtual

Implements ITrigGlobalEfficiencyCorrectionTool.

Definition at line 914 of file TrigGlobalEfficiencyCorrectionTool.cxx.

916 {
917 unsigned runNumber;
918 if (!retrieveRunNumber(runNumber)) {
920 "Unable to retrieve run number, aborting checkTriggerMatching()");
922 }
925 "A valid IMatchingTool instance should be provided via the property "
926 "'TriggerMatchingTool'");
928 }
929 LeptonList leptons;
930 updateLeptonList(leptons, particles);
931 return m_calculator->checkTriggerMatching(*this, matched, nullptr, leptons, runNumber)
934}
#define ATH_MSG_ERROR(x)
@ Error
Some error happened during the object correction.
std::unique_ptr< TrigGlobEffCorr::Calculator > m_calculator
std::vector< TrigGlobEffCorr::Lepton > LeptonList
bool retrieveRunNumber(unsigned &runNumber)
Internal methods (II) – core task.
bool updateLeptonList(LeptonList &leptons, const std::vector< const Particle * > &particles)

◆ checkTriggerMatching() [3/3]

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::checkTriggerMatching ( std::unordered_map< std::string, bool > & matched_per_trigger,
const std::vector< const xAOD::IParticle * > & particles )
overridevirtual

Implements ITrigGlobalEfficiencyCorrectionTool.

Definition at line 936 of file TrigGlobalEfficiencyCorrectionTool.cxx.

938 {
939 unsigned runNumber;
940 if (!retrieveRunNumber(runNumber)) {
942 "Unable to retrieve run number, aborting checkTriggerMatching()");
944 }
947 "A valid IMatchingTool instance should be provided via the property "
948 "'TriggerMatchingTool'");
950 }
951 LeptonList leptons;
952 updateLeptonList(leptons, particles);
953 bool flag;
954 return m_calculator->checkTriggerMatching(*this, flag, &matched_per_trigger, leptons, runNumber)
957}
bool flag
Definition master.py:29

◆ countTriggerLegs()

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::countTriggerLegs ( const std::string & trigger,
std::size_t & numberOfLegs )
overridevirtual

This utility function provides the number of legs for the specified trigger.

this abuses a little the role of the dictionary to act as a cache: for the key chosen as the trigger name hash XORed with the magic number, the mapped value is not the name of the trigger, but a meaningless string whose size equals the number of legs

Implements ITrigGlobalEfficiencyCorrectionTool.

Definition at line 972 of file TrigGlobalEfficiencyCorrectionTool.cxx.

973 {
974 numberOfLegs = 0;
979 constexpr std::size_t magic = 0xa3bad03e613527c9;
980 const std::size_t name = m_hasher(trigger), key = name ^ magic;
981 std::string& value = m_dictionary[key];
982 if (!value.length()) {
984 if (!data.importTriggers())
986 auto itr = data.getTriggerDefs().find(name);
987 if (itr == data.getTriggerDefs().end()) {
988 m_dictionary.erase(key);
989 ATH_MSG_ERROR("The trigger " << trigger << " is not recognized");
991 }
992 auto type = itr->second.type;
994 if (type & TriggerType::TT_SINGLELEPTON_FLAG)
995 value = "~";
996 else if (type & TriggerType::TT_DILEPTON_FLAG)
997 value = "~~";
998 else if (type & TriggerType::TT_TRILEPTON_FLAG)
999 value = "~~~";
1000 else {
1001 m_dictionary.erase(key);
1002 ATH_MSG_ERROR("Unrecognized trigger type, implementation must be fixed!");
1004 }
1005 }
1006 numberOfLegs = value.length();
1008}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11

◆ declareGaudiProperty()

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

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

Definition at line 156 of file AthCommonDataStore.h.

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

◆ declareProperty()

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

Definition at line 145 of file AthCommonDataStore.h.

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

◆ detStore()

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

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

Definition at line 95 of file AthCommonDataStore.h.

◆ enumerateTools() [1/2]

template<class CPTool>
bool TrigGlobalEfficiencyCorrectionTool::enumerateTools ( ImportData & data,
ToolHandleArray< CPTool > & suppliedTools,
std::map< ToolKey, std::size_t > & toolIndex,
flat_set< std::size_t > & collectedTags )

Find the legs associated to this tool ("ListOfLegsPerTool" property)

Find the tags associated to this tool ("ListOfTagsPerTool" property)

Store

Definition at line 240 of file TrigGlobalEfficiencyCorrectionTool.cxx.

243 {
244 bool success = true;
245 for (unsigned index = 0; index < suppliedTools.size(); ++index) {
246 auto& handle = suppliedTools[index];
247 const std::string& name = handle.name();
248 const std::string& altname = handle->name(); // athena: not always the same
249 flat_set<ToolKey> listOfLegs;
251 if (suppliedTools.size() != 1 || m_legsPerTool.size() != 0) {
252 auto itrLegs = m_legsPerTool.find(name);
253 if (itrLegs == m_legsPerTool.end())
254 itrLegs = m_legsPerTool.find(altname);
255 if (itrLegs != m_legsPerTool.end()) {
256 listOfLegs = parseListOfLegs(data, itrLegs->second, success);
257 if (!success) {
259 "The 'ListOfLegsPerTool' property has an invalid entry for the "
260 "tool'"
261 << name << "'");
262 continue;
263 }
264 } else if (std::is_same<CPTool,
265 IAsgElectronEfficiencyCorrectionTool>::value ||
266 std::is_same<CPTool,
267 IAsgPhotonEfficiencyCorrectionTool>::value) {
268 ATH_MSG_ERROR("Property 'ListOfLegsPerTool' empty for tool '" << name
269 << "'");
270 success = false;
271 continue;
272 } else {
273 listOfLegs.emplace();
274 }
275 } else
276 listOfLegs.emplace();
279 auto itrTags = m_tagsPerTool.find(name);
280 if (itrTags == m_tagsPerTool.end())
281 itrTags = m_tagsPerTool.find(altname);
282 if (itrTags != m_tagsPerTool.end()) {
283 success = success && parseTagString(itrTags->second, tags);
284 collectedTags.insert(tags.begin(), tags.end());
285 } else
286 tags.emplace(0);
287
289 unsigned short nUncheckedLegs = 0;
290 for (auto& key : listOfLegs) {
291 std::size_t leg = key.hash;
292 if (leg) {
293 auto flavour = data.associatedLeptonFlavour(leg, success);
294 if (!(flavour == xAOD::Type::Electron &&
295 std::is_same<CPTool,
296 IAsgElectronEfficiencyCorrectionTool>::value) &&
297 !(flavour == xAOD::Type::Photon &&
298 std::is_same<CPTool,
299 IAsgPhotonEfficiencyCorrectionTool>::value)) {
300 ATH_MSG_ERROR("Unexpected association of trigger leg '"
301 << m_dictionary[leg] << "' to tool '" << name << "'");
302 success = false;
303 }
304 }
305 for (std::size_t tag : tags) {
306 if (!toolIndex.emplace(ToolKey(leg, tag, key.boundaries), index)
307 .second) {
308 if (leg && tag)
309 ATH_MSG_ERROR("Multiple tools associated to the selection tag '"
310 << m_dictionary[tag] << "' for the trigger leg '"
311 << m_dictionary[leg] << "'");
312 else if (leg)
313 ATH_MSG_ERROR("Multiple tools associated to the trigger leg '"
314 << m_dictionary[leg] << "'");
315 else if (tag)
316 ATH_MSG_ERROR("Multiple tools associated to the selection tag '"
317 << m_dictionary[tag] << "'");
318 else
320 "Multiple tools not associated to any trigger leg / selection "
321 "tag");
322 success = false;
323 }
324 }
325 ++nUncheckedLegs;
326 }
327 if (!nUncheckedLegs) {
328 ATH_MSG_ERROR("Tool " << name
329 << " hasn't been associated to any trigger leg");
330 success = false;
331 }
332 }
333 return success;
334}
flat_set< ToolKey > parseListOfLegs(TrigGlobEffCorr::ImportData &data, const std::string &inputList, bool &success)
bool parseTagString(const std::string &tagstring, flat_set< std::size_t > &tags)
std::map< std::string, std::string > m_tagsPerTool
std::map< std::string, std::string > m_legsPerTool
std::vector< std::string > tags
Definition hcg.cxx:105
str index
Definition DeMoScan.py:362

◆ enumerateTools() [2/2]

template<class CPTool>
bool TrigGlobalEfficiencyCorrectionTool::enumerateTools ( TrigGlobEffCorr::ImportData & data,
ToolHandleArray< CPTool > & suppliedTools,
std::map< ToolKey, std::size_t > & toolIndex,
flat_set< std::size_t > & collectedTags )
private

◆ evtStore()

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

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

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

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

Add StoreName to extra input/output deps as needed.

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

◆ forwardLegs() [1/2]

auto TrigGlobalEfficiencyCorrectionTool::forwardLegs ( const flat_set< std::size_t > & legs)
inlinestaticconstexprprivate

Definition at line 1044 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1045 {
1046 return legs;
1047}

◆ forwardLegs() [2/2]

std::array< std::size_t, 2 > TrigGlobalEfficiencyCorrectionTool::forwardLegs ( std::size_t leg1,
std::size_t leg2 )
inlinestaticconstexprprivate

Definition at line 1050 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1051 {
1052 if (leg1 < leg2)
1053 return {leg1, leg2};
1054 else
1055 return {leg2, leg1};
1056}

◆ getCachedTriggerLegsRanking()

template<class... ListOfLegs>
unsigned long TrigGlobalEfficiencyCorrectionTool::getCachedTriggerLegsRanking ( const TrigGlobEffCorr::Lepton & lepton,
ListOfLegs... legs )
private

Definition at line 1059 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1060 {
1061 auto combinedHash = getCombinedHash(legs...);
1062 if (!combinedHash)
1063 return 0xFEDCBA9876543210; // only one (distinct) leg
1064 auto cachedRankings = m_cachedLegRankings.equal_range(combinedHash);
1065 auto rankingItr = cachedRankings.first;
1066 float pt = lepton.pt();
1067 while (rankingItr != cachedRankings.second &&
1068 (pt < rankingItr->second.minPt || pt >= rankingItr->second.maxPt))
1069 ++rankingItr;
1070 if (rankingItr == cachedRankings.second) {
1072 if (r)
1073 m_cachedLegRankings.emplace(combinedHash, r);
1074 return r.ranking;
1075 }
1076 return rankingItr->second.ranking;
1077}
float pt() const
Definition Lepton.h:28
std::multimap< std::size_t, CachedRanking > m_cachedLegRankings
std::size_t getCombinedHash(const flat_set< std::size_t > &legs)
static constexpr const flat_set< std::size_t > & forwardLegs(const flat_set< std::size_t > &legs)
CachedRanking rankTriggerLegs(float pt, const Container &legs)
int r
Definition globals.cxx:22

◆ getCombinedHash() [1/2]

std::size_t TrigGlobalEfficiencyCorrectionTool::getCombinedHash ( const flat_set< std::size_t > & legs)
private

Definition at line 1028 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1029 {
1030 if (legs.size() < 2)
1031 return 0;
1032 std::size_t combinedHash = 0;
1033 for (auto& leg : legs)
1034 combinedHash ^= leg;
1035 return combinedHash;
1036}

◆ getCombinedHash() [2/2]

std::size_t TrigGlobalEfficiencyCorrectionTool::getCombinedHash ( std::size_t leg1,
std::size_t leg2 )
private

returns 0 if leg1 == leg2, which is the correct behaviour

Definition at line 1038 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1039 {
1040 return leg1 ^
1041 leg2;
1042}

◆ getEfficiency() [1/3]

template<typename... Args>
auto ITrigGlobalEfficiencyCorrectionTool::getEfficiency ( Args &... args) -> std::enable_if_t<validArgs<Args...>(2), CP::CorrectionCode>
inherited

Definition at line 102 of file ITrigGlobalEfficiencyCorrectionTool.h.

104{
105 std::vector<const xAOD::IParticle*> particles;
106 double* eff[] = { nullptr, handleArg(args, particles)... };
107 return getEfficiency(particles, *eff[sizeof...(Args)-1], *eff[sizeof...(Args)]);
108}
virtual CP::CorrectionCode getEfficiency(const std::vector< const xAOD::IParticle * > &particles, double &efficiencyData, double &efficiencyMc)=0

◆ getEfficiency() [2/3]

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::getEfficiency ( const std::vector< const xAOD::IParticle * > & particles,
double & efficiencyData,
double & efficiencyMc )
overridevirtual

Implements ITrigGlobalEfficiencyCorrectionTool.

Definition at line 836 of file TrigGlobalEfficiencyCorrectionTool.cxx.

838 {
839 unsigned runNumber;
840 if (!retrieveRunNumber(runNumber))
842 return getEfficiency(runNumber, leptons, efficiencyData, efficiencyMc);
843}
virtual CP::CorrectionCode getEfficiency(const std::vector< const xAOD::IParticle * > &particles, double &efficiencyData, double &efficiencyMc) override

◆ getEfficiency() [3/3]

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::getEfficiency ( unsigned runNumber,
const std::vector< const xAOD::IParticle * > & particles,
double & efficiencyData,
double & efficiencyMc )
overridevirtual

ignores silently previous state + clears "checked" flag

Implements ITrigGlobalEfficiencyCorrectionTool.

Definition at line 870 of file TrigGlobalEfficiencyCorrectionTool.cxx.

872 {
875 efficiencyData = 0.;
876 efficiencyMc = 0.;
877
878 ATH_MSG_DEBUG("Computing global trigger efficiency for this event with "
879 << particles.size()
880 << " lepton(s) as input; run number = " << runNumber);
881
882#ifdef XAOD_STANDALONE
883 if (!m_initialized) {
884 ATH_MSG_WARNING("Tool hasn't been initialized, trying now");
885 if (initialize() != StatusCode::SUCCESS) {
886 ATH_MSG_ERROR("Giving up.");
887 m_cpCode.ignore();
889 }
890 }
891#endif
892
893 LeptonList leptons;
894 updateLeptonList(leptons, particles);
895
897 if (m_calculator->compute(*this, leptons, runNumber, efficiencies)) {
898 efficiencyData = efficiencies.data();
899 efficiencyMc = efficiencies.mc();
900 if (std::isnan(efficiencies.data()) || efficiencies.data() <= 0. ||
901 std::isnan(efficiencies.mc()) || efficiencies.mc() <= 0.) {
902 ATH_MSG_WARNING("Efficiencies do not seem valid");
903 m_cpCode.ignore();
905 }
906 } else {
909 }
910 }
911 return m_cpCode;
912}
#define ATH_MSG_WARNING(x)
TrigGlobEffCorr::Efficiencies Efficiencies
@ OutOfValidityRange
Input object is out of validity range.
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
list efficiencies
translate the station name indices into the string staiton name

◆ getEfficiencyScaleFactor() [1/3]

template<typename... Args>
auto ITrigGlobalEfficiencyCorrectionTool::getEfficiencyScaleFactor ( Args &... args) -> std::enable_if_t<validArgs<Args...>(1), CP::CorrectionCode>
inherited

Alternatively, the list of particles can be supplied via one or several vectors of xAOD::Electron*‍/Muon*‍/Photon* The generic signature is getEfficiencyScaleFactor((const) vector<(const)Type1*>&, ..., (const) vector<(const)TypeN*>&, double& efficiencyScaleFactor) e.g.

getEfficiencyScaleFactor(electrons, muons, sf); getEfficiencyScaleFactor(photons, sf); getEfficiencyScaleFactor(muons, electrons, photons, sf); don't forget the last argument(s)! (scale factor for getEfficiencyScaleFactor(), data and MC efficiencies for getEfficiency())

Definition at line 93 of file ITrigGlobalEfficiencyCorrectionTool.h.

95{
96 std::vector<const xAOD::IParticle*> particles;
97 double* sf[] = { nullptr, handleArg(args, particles)... };
98 return getEfficiencyScaleFactor(particles, *sf[sizeof...(Args)]);
99}
virtual CP::CorrectionCode getEfficiencyScaleFactor(const std::vector< const xAOD::IParticle * > &particles, double &efficiencyScaleFactor)=0

◆ getEfficiencyScaleFactor() [2/3]

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::getEfficiencyScaleFactor ( const std::vector< const xAOD::IParticle * > & particles,
double & efficiencyScaleFactor )
overridevirtual

Implements ITrigGlobalEfficiencyCorrectionTool.

Definition at line 827 of file TrigGlobalEfficiencyCorrectionTool.cxx.

829 {
830 unsigned runNumber;
831 if (!retrieveRunNumber(runNumber))
833 return getEfficiencyScaleFactor(runNumber, leptons, efficiencyScaleFactor);
834}
virtual CP::CorrectionCode getEfficiencyScaleFactor(const std::vector< const xAOD::IParticle * > &particles, double &efficiencyScaleFactor) override

◆ getEfficiencyScaleFactor() [3/3]

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::getEfficiencyScaleFactor ( unsigned runNumber,
const std::vector< const xAOD::IParticle * > & particles,
double & efficiencyScaleFactor )
overridevirtual

These should in principle not be used (except by unit tests), as the CP tools require the EventInfo decoration "RandomRunNumber" to be present.

ignores silently previous state + clears "checked" flag

Implements ITrigGlobalEfficiencyCorrectionTool.

Definition at line 845 of file TrigGlobalEfficiencyCorrectionTool.cxx.

847 {
850 efficiencyScaleFactor = 1.;
851
853 auto cc = getEfficiency(runNumber, particles, efficiencies.data(),
854 efficiencies.mc());
855 if (cc == CP::CorrectionCode::Ok) {
856 if (efficiencies.data() > 0. && efficiencies.mc() > 0.) {
857 efficiencyScaleFactor = efficiencies.data() / efficiencies.mc();
859 } else {
860 efficiencyScaleFactor = 1.;
862 "Efficiencies do not seem valid, forcing the scale factor to 1.");
864 }
865 }
866 efficiencyScaleFactor = 1.;
867 return cc;
868}

◆ GetEfficiencyTool() [1/2]

IAsgElectronEfficiencyCorrectionTool & TrigGlobalEfficiencyCorrectionTool::GetEfficiencyTool ( const xAOD::Electron * ,
std::size_t index )
inlineprivate

Definition at line 279 of file TrigGlobalEfficiencyCorrectionTool.h.

280 {
282 }

◆ GetEfficiencyTool() [2/2]

IAsgPhotonEfficiencyCorrectionTool & TrigGlobalEfficiencyCorrectionTool::GetEfficiencyTool ( const xAOD::Photon * ,
std::size_t index )
inlineprivate

Definition at line 283 of file TrigGlobalEfficiencyCorrectionTool.h.

284 {
286 }

◆ GetEfficiencyToolIndex() [1/2]

decltype(m_electronEffToolIndex) & TrigGlobalEfficiencyCorrectionTool::GetEfficiencyToolIndex ( const xAOD::Electron * )
inlineprivate

Definition at line 264 of file TrigGlobalEfficiencyCorrectionTool.h.

265 {
267 }
std::map< ToolKey, std::size_t > m_electronEffToolIndex

◆ GetEfficiencyToolIndex() [2/2]

decltype(m_photonEffToolIndex) & TrigGlobalEfficiencyCorrectionTool::GetEfficiencyToolIndex ( const xAOD::Photon * )
inlineprivate

Definition at line 268 of file TrigGlobalEfficiencyCorrectionTool.h.

268 {
270 }
std::map< ToolKey, std::size_t > m_photonEffToolIndex

◆ getEgammaTriggerLegEfficiencies() [1/2]

template<class ParticleType>
auto TrigGlobalEfficiencyCorrectionTool::getEgammaTriggerLegEfficiencies ( const ParticleType * p,
unsigned runNumber,
std::size_t leg,
std::size_t tag,
Efficiencies & efficiencies ) -> TLE_RESULT

Common implementation for electrons and photons

Definition at line 667 of file TrigGlobalEfficiencyCorrectionTool.cxx.

669 {
671 auto ptype = []() {
672 return std::is_same<ParticleType, xAOD::Electron>::value ? "electron"
673 : std::is_same<ParticleType, xAOD::Photon>::value ? "photon"
674 : "<unknown type>";
675 };
676 auto pp = static_cast<const xAOD::IParticle*>(p);
677 ATH_MSG_DEBUG("Retrieving efficiencies for "
678 << ptype() << ' ' << p << " (pt=" << pp->pt()
679 << ", eta=" << pp->eta() << ", tag='" << m_dictionary[tag]
680 << "') for trigger leg " << m_dictionary[leg]);
681 auto itrSf = GetScaleFactorToolIndex(p).find(ToolKey(leg, tag, runNumber));
682 auto itrEff = GetEfficiencyToolIndex(p).find(ToolKey(leg, tag, runNumber));
683 if (itrSf == GetScaleFactorToolIndex(p).end() ||
684 itrEff == GetEfficiencyToolIndex(p).end()) {
685 if (m_unsupportedLegs.count(ToolKey(leg, 0u, runNumber))) {
686 efficiencies.data() = 0.5;
687 efficiencies.mc() = 0.5;
688 return TLE_UNAVAILABLE;
689 }
690 if (!tag)
691 ATH_MSG_ERROR("Unable to find "
692 << ptype() << " tools needed for trigger leg "
693 << m_dictionary[leg] << " (run number = " << runNumber
694 << ")");
695 else
696 ATH_MSG_ERROR("Unable to find "
697 << ptype() << " tools needed for trigger leg "
698 << m_dictionary[leg] << " and selection tag "
699 << m_dictionary[tag] << " (run number = " << runNumber
700 << ")");
701 return TLE_ERROR;
702 }
703 double sf;
704 bool success =
705 checkAndRecord(GetScaleFactorTool(p, itrSf->second)
706 .getEfficiencyScaleFactor(*p, sf)) &&
707 checkAndRecord(GetEfficiencyTool(p, itrEff->second)
709 efficiencies.data() = sf * efficiencies.mc();
710 ATH_MSG_DEBUG("found for that " << ptype()
711 << " eff(data) = " << efficiencies.data()
712 << " and eff(MC) = " << efficiencies.mc());
713 return success ? TLE_OK : TLE_ERROR;
714}
virtual CP::CorrectionCode getEfficiencyScaleFactor(const xAOD::Electron &inputObject, double &efficiencyScaleFactor) const =0
decltype(m_electronEffToolIndex) & GetEfficiencyToolIndex(const xAOD::Electron *)
bool checkAndRecord(CP::CorrectionCode &&cc)
Internal methods (III) – misc. helpers.
IAsgElectronEfficiencyCorrectionTool & GetEfficiencyTool(const xAOD::Electron *, std::size_t index)
decltype(m_electronSfToolIndex) & GetScaleFactorToolIndex(const xAOD::Electron *)
IAsgElectronEfficiencyCorrectionTool & GetScaleFactorTool(const xAOD::Electron *, std::size_t index)

◆ getEgammaTriggerLegEfficiencies() [2/2]

template<class ParticleType>
TLE_RESULT TrigGlobalEfficiencyCorrectionTool::getEgammaTriggerLegEfficiencies ( const ParticleType * p,
unsigned runNumber,
std::size_t leg,
std::size_t tag,
TrigGlobEffCorr::Efficiencies & efficiencies )
private

◆ getKey()

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

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

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

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

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

Definition at line 119 of file AsgTool.cxx.

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

◆ getLoosestLeg()

std::size_t TrigGlobalEfficiencyCorrectionTool::getLoosestLeg ( const TrigGlobEffCorr::Lepton & lepton,
std::size_t leg1,
std::size_t leg2,
bool & success )
private

Definition at line 1147 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1148 {
1149 auto ranking = getCachedTriggerLegsRanking(lepton, leg1, leg2);
1150 if (CachedRanking::invalid(ranking)) {
1151 success = false;
1152 return -1;
1153 }
1154 return forwardLegs(leg1, leg2)[ranking & 0xF];
1155}
unsigned long getCachedTriggerLegsRanking(const TrigGlobEffCorr::Lepton &lepton, ListOfLegs... legs)

◆ getLoosestLegAboveThreshold()

std::size_t TrigGlobalEfficiencyCorrectionTool::getLoosestLegAboveThreshold ( const TrigGlobEffCorr::Lepton & lepton,
const flat_set< std::size_t > & legs,
bool & success )
private

Definition at line 1172 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1173 {
1174 flat_set<std::size_t> validLegs;
1175 for (auto leg : legs)
1176 if (aboveThreshold(lepton, leg))
1177 validLegs.insert(leg);
1178 if (validLegs.size() == 0)
1179 return 0;
1180 if (validLegs.size() == 1)
1181 return *validLegs.begin();
1182 auto ranking = getCachedTriggerLegsRanking(lepton, legs);
1183 if (CachedRanking::invalid(ranking)) {
1184 success = false;
1185 return 0;
1186 }
1187 return *legs.nth(ranking & 0xF);
1188}
bool aboveThreshold(const TrigGlobEffCorr::Lepton &p, std::size_t leg) const

◆ getName()

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

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

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

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

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

Definition at line 106 of file AsgTool.cxx.

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

◆ getProperty()

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

Get one of the tool's properties.

◆ getRelevantTriggers()

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::getRelevantTriggers ( std::vector< std::string > & triggers)
overridevirtual

This will fill the 'triggers' argument with the names of the triggers relevant for the current run number, among those specified in the tool configuration.

Implements ITrigGlobalEfficiencyCorrectionTool.

Definition at line 959 of file TrigGlobalEfficiencyCorrectionTool.cxx.

960 {
961 unsigned runNumber;
962 if (!retrieveRunNumber(runNumber)) {
964 "Unable to retrieve run number, aborting getRelevantTriggers()");
966 }
967 return m_calculator->getRelevantTriggersForUser(*this, triggers, runNumber)
970}

◆ GetScaleFactorTool() [1/2]

IAsgElectronEfficiencyCorrectionTool & TrigGlobalEfficiencyCorrectionTool::GetScaleFactorTool ( const xAOD::Electron * ,
std::size_t index )
inlineprivate

Definition at line 271 of file TrigGlobalEfficiencyCorrectionTool.h.

272 {
274 }

◆ GetScaleFactorTool() [2/2]

IAsgPhotonEfficiencyCorrectionTool & TrigGlobalEfficiencyCorrectionTool::GetScaleFactorTool ( const xAOD::Photon * ,
std::size_t index )
inlineprivate

Definition at line 275 of file TrigGlobalEfficiencyCorrectionTool.h.

276 {
278 }

◆ GetScaleFactorToolIndex() [1/2]

decltype(m_electronSfToolIndex) & TrigGlobalEfficiencyCorrectionTool::GetScaleFactorToolIndex ( const xAOD::Electron * )
inlineprivate

Definition at line 257 of file TrigGlobalEfficiencyCorrectionTool.h.

258 {
260 }
std::map< ToolKey, std::size_t > m_electronSfToolIndex

◆ GetScaleFactorToolIndex() [2/2]

decltype(m_photonSfToolIndex) & TrigGlobalEfficiencyCorrectionTool::GetScaleFactorToolIndex ( const xAOD::Photon * )
inlineprivate

Definition at line 261 of file TrigGlobalEfficiencyCorrectionTool.h.

261 {
262 return m_photonSfToolIndex;
263 }

◆ getSortedLegs()

std::vector< std::size_t > TrigGlobalEfficiencyCorrectionTool::getSortedLegs ( const TrigGlobEffCorr::Lepton & lepton,
const flat_set< std::size_t > & legs,
bool & success )
private

Definition at line 1190 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1191 {
1192 const int nLegs = legs.size();
1193 unsigned long ranking = getCachedTriggerLegsRanking(lepton, legs);
1194 if (CachedRanking::invalid(ranking)) {
1195 success = false;
1196 ranking = 0xFEDCBA9876543210;
1197 }
1198 std::vector<std::size_t> sorted_legs(nLegs);
1199 for (int i = 0; i < nLegs; ++i) {
1200 sorted_legs[i] = *legs.nth(ranking & 0xF);
1201 ranking >>= 4;
1202 }
1203 return sorted_legs;
1204}

◆ getTriggerLegEfficiencies() [1/3]

auto TrigGlobalEfficiencyCorrectionTool::getTriggerLegEfficiencies ( const xAOD::Electron * p,
unsigned runNumber,
std::size_t leg,
std::size_t tag,
TrigGlobEffCorr::Efficiencies & efficiencies )
private

Definition at line 716 of file TrigGlobalEfficiencyCorrectionTool.cxx.

718 {
719 return getEgammaTriggerLegEfficiencies(p, runNumber, leg, tag, efficiencies);
720}
TLE_RESULT getEgammaTriggerLegEfficiencies(const ParticleType *p, unsigned runNumber, std::size_t leg, std::size_t tag, TrigGlobEffCorr::Efficiencies &efficiencies)

◆ getTriggerLegEfficiencies() [2/3]

auto TrigGlobalEfficiencyCorrectionTool::getTriggerLegEfficiencies ( const xAOD::Muon * p,
unsigned runNumber,
std::size_t leg,
std::size_t tag,
TrigGlobEffCorr::Efficiencies & efficiencies )
private

Definition at line 728 of file TrigGlobalEfficiencyCorrectionTool.cxx.

730 {
731 ATH_MSG_DEBUG("Retrieving efficiencies for muon "
732 << p << " (pt=" << p->pt() << ", eta=" << p->eta() << ", tag='"
733 << m_dictionary[tag] << "') for trigger leg "
734 << m_dictionary[leg]);
735 if (m_unsupportedLegs.size() &&
736 m_unsupportedLegs.count(ToolKey(leg, 0u, runNumber))) {
737 efficiencies.data() = 0.5;
738 efficiencies.mc() = 0.5;
739 return TLE_UNAVAILABLE;
740 }
741 auto itr = m_muonToolIndex.find(ToolKey(0, tag, 0));
742 if (itr == m_muonToolIndex.end()) {
743 if (!tag)
744 ATH_MSG_ERROR("Unable to find muon tool");
745 else
746 ATH_MSG_ERROR("Unable to find muon tool needed for selection tag "
747 << m_dictionary[tag]);
749 return TLE_ERROR;
750 }
751 auto& tool = *m_suppliedMuonTools[itr->second];
752 auto& hltTrig = m_dictionary[leg ^ 0xB0DDD56fF8E3250D];
753 if (!hltTrig.size()) {
754 hltTrig = "HLT_" + m_dictionary[leg];
755 while (true) {
756 std::size_t i = hltTrig.find("_OR_m");
757 if (i == std::string::npos)
758 break;
759 hltTrig.insert(i + 4, "HLT_", 4);
760 }
761 }
762 bool success = checkAndRecord(tool.getTriggerEfficiency(*p, efficiencies.mc(),
763 hltTrig, kFALSE)) &&
764 checkAndRecord(tool.getTriggerEfficiency(
765 *p, efficiencies.data(), hltTrig, kTRUE));
766 ATH_MSG_DEBUG("found for that muon eff(data) = " << efficiencies.data()
767 << " and eff(MC) = "
768 << efficiencies.mc());
769 return success ? TLE_OK : TLE_ERROR;
770}

◆ getTriggerLegEfficiencies() [3/3]

auto TrigGlobalEfficiencyCorrectionTool::getTriggerLegEfficiencies ( const xAOD::Photon * p,
unsigned runNumber,
std::size_t leg,
std::size_t tag,
TrigGlobEffCorr::Efficiencies & efficiencies )
private

Definition at line 722 of file TrigGlobalEfficiencyCorrectionTool.cxx.

724 {
725 return getEgammaTriggerLegEfficiencies(p, runNumber, leg, tag, efficiencies);
726}

◆ getTwoLoosestLegs()

std::pair< std::size_t, std::size_t > TrigGlobalEfficiencyCorrectionTool::getTwoLoosestLegs ( const TrigGlobEffCorr::Lepton & lepton,
const flat_set< std::size_t > & legs,
bool & success )
private

Definition at line 1158 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1159 {
1160 auto ranking = getCachedTriggerLegsRanking(lepton, legs);
1161 if (CachedRanking::invalid(ranking)) {
1162 success = false;
1163 return {0, 0};
1164 }
1165 std::pair<std::size_t, std::size_t> looseLegs{0, 0};
1166 looseLegs.first = *legs.nth(ranking & 0xF);
1167 if (legs.size() >= 2)
1168 looseLegs.second = *legs.nth((ranking >> 4) & 0xF);
1169 return looseLegs;
1170}

◆ handleArg() [1/2]

template<typename P>
double * ITrigGlobalEfficiencyCorrectionTool::handleArg ( const std::vector< P > & arg,
std::vector< const xAOD::IParticle * > & particles )
inlineprotectedinherited

Definition at line 60 of file ITrigGlobalEfficiencyCorrectionTool.h.

61 {
62 for(auto ptr : arg) particles.push_back(static_cast<const xAOD::IParticle*>(ptr));
63 return nullptr;
64 }

◆ handleArg() [2/2]

double * ITrigGlobalEfficiencyCorrectionTool::handleArg ( double & arg,
std::vector< const xAOD::IParticle * > &  )
inlineprotectedinherited

◆ initialize()

StatusCode TrigGlobalEfficiencyCorrectionTool::initialize ( void )
overridevirtual

Dummy implementation of the initialisation function.

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

Copy the following variables from data as the latter is short-lived

Reimplemented from asg::AsgTool.

Definition at line 100 of file TrigGlobalEfficiencyCorrectionTool.cxx.

100 {
101 if (m_initialized) {
102 ATH_MSG_ERROR("Tool has already been initialized");
103 return StatusCode::FAILURE;
104 }
105 ATH_MSG_INFO("Initializing " << name() << "...");
106
107 m_dictionary.emplace(0, "");
108
110 return StatusCode::FAILURE;
111
112 ATH_MSG_DEBUG("Importing data from configuration files");
113 ImportData data(*this);
114 if (!data.importAll(m_overrideThresholds))
115 return StatusCode::FAILURE;
117 m_hierarchyMeta = data.getHierarchyMeta();
118 m_hierarchyData = data.getHierarchyData();
119 m_thresholds = data.getTriggerThresholds();
120
121 ATH_MSG_DEBUG("Retrieving tools");
122 if (m_suppliedElectronEfficiencyTools.retrieve() != StatusCode::SUCCESS ||
123 m_suppliedElectronScaleFactorTools.retrieve() != StatusCode::SUCCESS ||
124 m_suppliedMuonTools.retrieve() != StatusCode::SUCCESS ||
125 m_suppliedPhotonEfficiencyTools.retrieve() != StatusCode::SUCCESS ||
126 m_suppliedPhotonScaleFactorTools.retrieve() != StatusCode::SUCCESS) {
127 ATH_MSG_ERROR("Unable to retrieve CP tools");
128 return StatusCode::FAILURE;
129 }
130
131 ATH_MSG_DEBUG("Retrieving trigger matching tool (if provided)");
132 m_validTrigMatchTool = false;
133 if (m_trigMatchTool.name() != "") {
134 if (m_trigMatchTool.retrieve() != StatusCode::SUCCESS) {
135 ATH_MSG_ERROR("Unable to retrieve trigger matching tool");
136 return StatusCode::FAILURE;
137 }
138 ATH_MSG_DEBUG("Trigger matching support enabled");
140 }
141
142 ATH_MSG_DEBUG("Basic checks");
143 CheckConfig checks(*this);
144 if (!checks.basicConfigChecks())
145 return StatusCode::FAILURE;
146
147 ATH_MSG_DEBUG("Enumerating tools");
148 flat_set<std::size_t> collectedElectronTags, collectedMuonTags,
149 collectedPhotonTags;
151 m_electronEffToolIndex, collectedElectronTags) ||
153 m_electronSfToolIndex, collectedElectronTags) ||
155 collectedMuonTags) ||
157 m_photonEffToolIndex, collectedPhotonTags) ||
159 m_photonSfToolIndex, collectedPhotonTags)) {
160 return StatusCode::FAILURE;
161 }
162 // List legs (if any) for which a dummy scale factor should be returned.
164 if (itr != m_legsPerTool.end()) {
165 bool success = true;
166 for (ToolKey leg : parseListOfLegs(data, itr->second, success)) {
167 m_unsupportedLegs.insert(leg);
168 }
169 }
170
171 ATH_MSG_DEBUG("Loading user-defined trigger combination");
172 bool useDefaultElectronTools =
173 (m_suppliedElectronEfficiencyTools.size() == 1) &&
175 (m_legsPerTool.size() == 0);
176 bool useDefaultPhotonTools = (m_suppliedPhotonEfficiencyTools.size() == 1) &&
177 (m_suppliedPhotonScaleFactorTools.size() == 1) &&
178 (m_legsPerTool.size() == 0);
179 if (!loadTriggerCombination(data, useDefaultElectronTools,
180 useDefaultPhotonTools))
181 return StatusCode::FAILURE;
182
183 ATH_MSG_DEBUG("Loading lepton selection tags decorators");
184 if (!loadTagDecorators(collectedElectronTags, collectedMuonTags,
185 collectedPhotonTags))
186 return StatusCode::FAILURE;
187
188 ATH_MSG_DEBUG("Loading list of legs allowed for each tag");
190 return StatusCode::FAILURE;
191
192 ATH_MSG_DEBUG("Advanced checks");
193 if (!checks.advancedConfigChecks())
194 return StatusCode::FAILURE;
195
196 ATH_MSG_INFO("Initialization successful");
197 m_initialized = true;
198 return StatusCode::SUCCESS;
199}
#define ATH_MSG_INFO(x)
static std::string toolnameForDefaultScaleFactor()
To be used with the ListOfLegsPerTool property:
std::map< std::string, std::string > m_overrideThresholds
bool loadTagDecorators(const flat_set< std::size_t > &collectedElectronTags, const flat_set< std::size_t > &collectedMuonTags, const flat_set< std::size_t > &collectedPhotonTags)
bool enumerateTools(TrigGlobEffCorr::ImportData &data, ToolHandleArray< CPTool > &suppliedTools, std::map< ToolKey, std::size_t > &toolIndex, flat_set< std::size_t > &collectedTags)
bool loadTriggerCombination(TrigGlobEffCorr::ImportData &data, bool useDefaultElectronTools, bool useDefaultPhotonTools)

◆ inputHandles()

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

Return this algorithm's input handles.

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

◆ isAffectedBySystematic()

bool TrigGlobalEfficiencyCorrectionTool::isAffectedBySystematic ( const CP::SystematicVariation & systematic) const
overridevirtual

Declare the interface that this class provides.

returns: whether this tool is affected by the given systematics

Implements CP::ISystematicsTool.

Definition at line 1216 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1217 {
1218 auto sys = affectingSystematics();
1219 return !systematic.empty() && sys.find(systematic) != sys.end();
1220}
bool empty() const
returns: whether this is an empty systematic, i.e.
virtual CP::SystematicSet affectingSystematics() const override
the list of all systematics this tool can be affected by

◆ listNonOrderedCSValues()

auto TrigGlobalEfficiencyCorrectionTool::listNonOrderedCSValues ( const std::string & s,
bool & success )
private

Parses the input string (comma-separated list) and returns a set of hashes Watch out: since a flat_set is returned, the order of the entries in the input list is not preserved, as hinted by the name of the function.

Definition at line 638 of file TrigGlobalEfficiencyCorrectionTool.cxx.

639 {
640 std::stringstream ss(TrigGlobEffCorr::removeWhitespaces(s));
642 std::string token;
643 while (std::getline(ss, token, ',')) {
644 if (token.length()) {
645 std::size_t h = m_hasher(token);
646 if (hashes.insert(h).second) {
647 m_dictionary.emplace(h, std::move(token));
648 } else {
649 success = false;
651 "Found duplicate entry while parsing comma-separated list '"
652 << s << "'");
653 }
654 } else {
655 success = false;
657 "Found null-length entry while parsing comma-separated list '"
658 << s << "'");
659 }
660 }
661 if (!success)
662 hashes.clear();
663 return hashes;
664}
static Double_t ss
std::string removeWhitespaces(const std::string &s)
Definition ImportData.h:170

◆ loadHierarchies()

bool TrigGlobalEfficiencyCorrectionTool::loadHierarchies ( )
private

Internal methods (I) – initialization of the tool.

◆ loadListOfLegsPerTag()

bool TrigGlobalEfficiencyCorrectionTool::loadListOfLegsPerTag ( )
private

Create the hash list of legs allowed for each tag; check that a CP tool is available for each combination

Definition at line 562 of file TrigGlobalEfficiencyCorrectionTool.cxx.

562 {
563 bool success = true;
564
567 for (auto& kv : m_legsPerTag) {
568 std::size_t tag;
569 if (!kv.first.size() || kv.first == "*")
570 tag = 0;
571 else
572 tag = m_hasher(kv.first);
573 auto listOfLegs = listNonOrderedCSValues(kv.second, success);
574 if (!success) {
576 "The property 'ListOfLegsPerTag' has an invalid entry for the tag '"
577 << kv.first << "'");
578 break;
579 }
580 for (std::size_t leg : listOfLegs) {
581 auto type =
583 if (type == xAOD::Type::Electron &&
584 m_electronSfToolIndex.find(ToolKey(leg, tag)) ==
585 m_electronSfToolIndex.end()) {
586 ATH_MSG_ERROR("No electron tool has been provided for trigger leg '"
587 << m_dictionary[leg] << "' and selection tag " << kv.first
588 << " mentioned in the property 'ListOfLegsPerTag'");
589 success = false;
590 } else if (type == xAOD::Type::Muon &&
591 m_muonToolIndex.find(ToolKey(0, tag)) ==
592 m_muonToolIndex.end()) {
593 ATH_MSG_ERROR("No muon tool has been provided for selection tag "
594 << kv.first
595 << " mentioned in the property 'ListOfLegsPerTag'");
596 success = false;
597 } else if (type == xAOD::Type::Photon &&
598 m_photonSfToolIndex.find(ToolKey(leg, tag)) ==
599 m_photonSfToolIndex.end()) {
600 ATH_MSG_ERROR("No photon tool has been provided for trigger leg '"
601 << m_dictionary[leg] << "' and selection tag " << kv.first
602 << " mentioned in the property 'ListOfLegsPerTag'");
603 success = false;
604 }
605 if (m_validLegTagPairs.insert(leg ^ tag).second) {
606 if (type == xAOD::Type::Electron)
608 if (type == xAOD::Type::Muon)
609 m_checkMuonLegTag = true;
610 if (type == xAOD::Type::Photon)
611 m_checkPhotonLegTag = true;
612 } else {
613 ATH_MSG_ERROR("The combination of trigger leg '"
614 << m_dictionary[leg] << "' and selection tag " << kv.first
615 << " is mentioned more than once in the property "
616 "'ListOfLegsPerTag'");
617 success = false;
618 }
619 }
620 }
621 if (!success)
622 return false;
623
624 return success;
625}
xAOD::Type::ObjectType associatedLeptonFlavour(std::size_t leg, bool &success)
flat_set< std::size_t > listNonOrderedCSValues(const std::string &s, bool &success)
Parses the input string (comma-separated list) and returns a set of hashes Watch out: since a flat_se...
std::map< std::string, std::string > m_legsPerTag
deprecated

◆ loadTagDecorators()

bool TrigGlobalEfficiencyCorrectionTool::loadTagDecorators ( const flat_set< std::size_t > & collectedElectronTags,
const flat_set< std::size_t > & collectedMuonTags,
const flat_set< std::size_t > & collectedPhotonTags )
private

Initialize decorators Note: can't use listNonOrderedCSValues() as the order in which decorations are listed must be preserved

tag = decorator name (considered tagged if decorated value != 0)

tag = decorator name (without '?') + decorated value

find a tag of the form <name><integer suffix>

Check there's a suitable decorator for all tags associated to CP tools via ListOfTagsPerTool

ok, there's a direct match

Definition at line 451 of file TrigGlobalEfficiencyCorrectionTool.cxx.

454 {
455 bool success = true;
456
457 flat_set<std::size_t> collectedTags(collectedElectronTags);
458 collectedTags.insert(collectedMuonTags.begin(), collectedMuonTags.end());
459 collectedTags.insert(collectedPhotonTags.begin(), collectedPhotonTags.end());
460 flat_set<std::size_t> allTags = collectedTags;
461
465 std::stringstream ss(
467 std::string decoration;
468 flat_set<std::size_t> allDecorations;
469 while (std::getline(ss, decoration, ',')) {
470 if (!decoration.length() || decoration == "?") {
472 "Found an empty string in the 'LeptonTagDecorations' property");
473 success = false;
474 break;
475 }
476
477 bool found = false, suffixed = false;
478 std::size_t h;
479 if (decoration.back() != '?') {
481 h = m_hasher(decoration);
482 found = (allTags.find(h) != allTags.end());
483 } else {
485 decoration.pop_back();
486 suffixed = true;
487 for (std::size_t tag :
488 allTags)
489 {
490 auto& s = m_dictionary[tag];
491 if (s.find(decoration) != 0)
492 continue;
493 if (std::all_of(s.begin() + decoration.length(), s.end(),
494 [](char c) { return std::isdigit(c); })) {
495 found = true;
496 break;
497 }
498 }
499 h = m_hasher(decoration);
500 }
501 if (!allDecorations.insert(h).second) {
503 "The selection tag '"
504 << decoration
505 << "' is listed twice in the property 'LeptonTagDecorations'");
506 success = false;
507 continue;
508 }
509 if (!found) {
511 "the selection tag '"
512 << decoration
513 << "' is only referred to in the property 'LeptonTagDecorations'");
514 success = false;
515 continue;
516 }
517 m_leptonTagDecorators.emplace_back(decoration, h, suffixed);
518 m_dictionary.emplace(h, decoration);
519 }
521 if (!success)
522 return false;
523
526 for (std::size_t tag : collectedTags) {
527 if (!tag)
528 continue;
529 auto itr =
530 std::find_if(m_leptonTagDecorators.begin(), m_leptonTagDecorators.end(),
531 [tag](const TagDecorator& ltd) {
532 return (!ltd.suffixed) && (ltd.hash == tag);
533 });
534 if (itr != m_leptonTagDecorators.end())
535 continue;
536 bool found = false;
537 auto& s = m_dictionary[tag];
538 for (auto& ltd : m_leptonTagDecorators) {
539 auto& name = m_dictionary[ltd.hash];
540 if (s.find(name) != 0)
541 continue;
542 if (std::all_of(s.begin() + name.length(), s.end(),
543 [](char c) { return std::isdigit(c); })) {
544 found = true;
545 break;
546 }
547 }
548 if (!found) {
549 ATH_MSG_ERROR("the selection tag '"
550 << m_dictionary[tag]
551 << "' hasn't been found in in 'LeptonTagDecorations'");
552 success = false;
553 continue;
554 }
555 }
556 if (!success)
557 return false;
558
559 return success;
560}
void reverse(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of reverse for DataVector/List.

◆ loadTriggerCombination()

bool TrigGlobalEfficiencyCorrectionTool::loadTriggerCombination ( TrigGlobEffCorr::ImportData & data,
bool useDefaultElectronTools,
bool useDefaultPhotonTools )
private

tools have not been associated with legs so far so the key hash is only the tag

Definition at line 384 of file TrigGlobalEfficiencyCorrectionTool.cxx.

386 {
387 bool success = true, mustBeEmpty = m_triggerCb.size();
388 for (auto& kv : m_triggerCbPerYear) {
389 if (!kv.second.size())
390 continue;
391 if (mustBeEmpty) {
393 "You're not allowed to use simultaneously the 'TriggerCombination' "
394 "and 'TriggerCombination"
395 << kv.first << "' properties.");
396 return false;
397 }
398 m_triggerCb.insert(kv);
399 }
400
401 m_calculator = std::make_unique<Calculator>(*this, m_triggerCb.size());
402 std::set<std::size_t> allUniqueElectronLegs, allUniquePhotonLegs;
403 for (auto& kv : m_triggerCb) {
404 std::pair<unsigned, unsigned> boundaries;
405 if (!data.getPeriodBoundaries(kv.first, boundaries)) {
406 success = false;
407 continue;
408 }
409 std::size_t uniqueElectronLeg = !useDefaultElectronTools,
410 uniquePhotonLeg = !useDefaultPhotonTools;
411 if (!m_calculator->addPeriod(data, boundaries, kv.second, m_numberOfToys,
412 uniqueElectronLeg, uniquePhotonLeg)) {
413 success = false;
414 continue;
415 }
416 if (uniqueElectronLeg && useDefaultElectronTools)
417 allUniqueElectronLegs.insert(uniqueElectronLeg);
418 if (uniquePhotonLeg && useDefaultPhotonTools)
419 allUniquePhotonLegs.insert(uniquePhotonLeg);
420 }
421 if (!success)
422 return false;
423
424 auto remapTools = [](auto& toolIndex, auto& allUniqueLegs) {
425 typename std::remove_reference<decltype(toolIndex)>::type remappedToolIndex;
426 for (std::size_t leg : allUniqueLegs) {
427 if (!leg)
428 continue;
429 for (auto& kv : toolIndex) {
432 const ToolKey& key = kv.first;
433 remappedToolIndex.emplace(ToolKey(leg, key.hash, key.boundaries),
434 kv.second);
435 }
436 }
437 toolIndex.swap(remappedToolIndex);
438 };
439
440 if (useDefaultElectronTools && allUniqueElectronLegs.size()) {
441 remapTools(m_electronSfToolIndex, allUniqueElectronLegs);
442 remapTools(m_electronEffToolIndex, allUniqueElectronLegs);
443 }
444 if (useDefaultPhotonTools && allUniquePhotonLegs.size()) {
445 remapTools(m_photonSfToolIndex, allUniquePhotonLegs);
446 remapTools(m_photonEffToolIndex, allUniquePhotonLegs);
447 }
448 return success;
449}
std::map< std::string, std::string > m_triggerCb
std::map< std::string, std::string > m_triggerCbPerYear

◆ msg()

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg_level_name()

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

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

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

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

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

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

Definition at line 101 of file AsgTool.cxx.

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

◆ msgLvl()

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

Definition at line 30 of file AthCommonMsg.h.

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

◆ outputHandles()

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

Return this algorithm's output handles.

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

◆ parseListOfLegs()

auto TrigGlobalEfficiencyCorrectionTool::parseListOfLegs ( TrigGlobEffCorr::ImportData & data,
const std::string & inputList,
bool & success )
private

Definition at line 336 of file TrigGlobalEfficiencyCorrectionTool.cxx.

338 {
339 if (!inputList.length())
340 return {};
341 std::regex rx(
342 "\\s*([[:alnum:]_]+)\\s*(?:\\[\\s*([^,\\[\\]]+)\\s*\\]\\s*)?(?:,|$)");
344 std::smatch sm;
345 auto itr = inputList.cbegin();
346 do {
347 if (sm.ready())
348 itr += sm.length();
349 if (!std::regex_search(itr, inputList.cend(), sm, rx) ||
350 sm.prefix().length()) {
351 ATH_MSG_ERROR("Invalid format for the property \"ListOfLegsPerTool\"");
352 success = false;
353 break;
354 }
355 std::size_t leg = m_hasher(sm[1].str());
356 if (m_thresholds.find(leg) == m_thresholds.end()) {
357 ATH_MSG_ERROR("Unknown trigger leg '"
358 << sm[1].str() << "' found in 'ListOfLegsPerTool'");
359 success = false;
360 continue;
361 }
362 ToolKey key(leg, 0);
363 if (sm.length(2)) {
364 if (!data.getPeriodBoundaries(sm[2].str(), key.boundaries)) {
365 ATH_MSG_ERROR("Invalid period \""
366 << sm[2].str()
367 << "\"found in the property \"ListOfLegsPerTool\"");
368 success = false;
369 continue;
370 }
371 }
372 if (!keys.emplace(key).second) {
373 ATH_MSG_ERROR("Trigger leg '"
374 << sm[1].str()
375 << "' mentioned several times with overlapping time "
376 "periods in the property 'ListOfLegsPerTool'");
377 success = false;
378 continue;
379 }
380 } while (sm.suffix().length());
381 return keys;
382}

◆ parseTagString()

bool TrigGlobalEfficiencyCorrectionTool::parseTagString ( const std::string & tagstring,
flat_set< std::size_t > & tags )
private

Definition at line 225 of file TrigGlobalEfficiencyCorrectionTool.cxx.

226 {
227 bool success = true;
228 const std::size_t star = m_hasher("*");
229 for (std::size_t tag : listNonOrderedCSValues(tagstring, success)) {
230 allTags.insert((tag != star) ? tag : 0);
231 }
232 if (!success) {
233 ATH_MSG_ERROR("List of tags \"" << tagstring
234 << "\" is not provided in a valid format");
235 }
236 return success;
237}

◆ print()

◆ processDeprecatedProperties()

bool TrigGlobalEfficiencyCorrectionTool::processDeprecatedProperties ( )
private

Definition at line 201 of file TrigGlobalEfficiencyCorrectionTool.cxx.

201 {
202 if (m_electronLegsPerTag.size()) {
204 "The property 'ElectronLegsPerTag' is deprecated, please use "
205 "'ListOfLegsPerTag' instead");
206 for (auto& kv : m_electronLegsPerTag) {
207 auto insert = m_legsPerTag.insert(kv);
208 if (!insert.second)
209 insert.first->second += "," + kv.second;
210 }
211 }
212 if (m_muonLegsPerTag.size()) {
214 "The property 'MuonLegsPerTag' is deprecated, please use "
215 "'ListOfLegsPerTag' instead");
216 for (auto& kv : m_muonLegsPerTag) {
217 auto insert = m_legsPerTag.insert(kv);
218 if (!insert.second)
219 insert.first->second += "," + kv.second;
220 }
221 }
222 return true;
223}
std::map< std::string, std::string > m_muonLegsPerTag
deprecated
std::map< std::string, std::string > m_electronLegsPerTag

◆ rankTriggerLegs() [1/2]

template<class Container>
CachedRanking TrigGlobalEfficiencyCorrectionTool::rankTriggerLegs ( float pt,
const Container & legs )
private

◆ rankTriggerLegs() [2/2]

template<class Container>
auto TrigGlobalEfficiencyCorrectionTool::rankTriggerLegs ( float pt,
const Container & legs ) -> CachedRanking

need not only to sort, but also to verify consistency for all pairs of legs (in case of configuration issue) for that, use a O(n^2) algorithm and count for each leg the number of legs tighter than itself

future: might search recursively whether some order can be found via transitivity through an intermediate leg

Definition at line 1080 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1082 {
1083 const std::size_t nLegs = legs.size();
1085 r.ranking = std::numeric_limits<decltype(r.ranking)>::max();
1086 r.minPt = 0.f;
1087 r.maxPt = std::numeric_limits<float>::max();
1088 if (nLegs >= 2 * sizeof(r.ranking)) {
1090 "Implementation currently doesn't support ranking of more than "
1091 << 2 * sizeof(r.ranking) << " trigger legs");
1092 return r;
1093 }
1094 std::vector<uint8_t> counts(nLegs);
1095
1099 auto legI = legs.begin();
1100 for (unsigned i = 0; i < nLegs; ++i) {
1101 auto legJ = legI;
1102 for (unsigned j = i + 1; j < nLegs; ++j) {
1103 ++legJ;
1104 bool found = false;
1105 for (auto& meta : m_hierarchyMeta) {
1106 if (pt < meta.minPt || pt >= meta.maxPt)
1107 continue;
1108 auto data = m_hierarchyData.begin() + meta.offset;
1109 auto end = data + meta.nLegs;
1110 auto a = std::find(data, end, *legI);
1111 if (a == end)
1112 continue;
1113 auto b = std::find(data, end, *legJ);
1114 if (b == end)
1115 continue;
1116 r.minPt = std::max(r.minPt, meta.minPt);
1117 r.maxPt = std::min(r.maxPt, meta.maxPt);
1118 ++(counts[(a > b) ? i : j]);
1119 found = true;
1120 break;
1121 }
1122 if (!found) {
1125 ATH_MSG_ERROR("Unable to rank trigger legs "
1126 << m_dictionary[*legI] << " and " << m_dictionary[*legJ]);
1127 return r;
1128 }
1129 }
1130 ++legI;
1131 }
1132 decltype(r.ranking) ranking = 0;
1133 for (unsigned i = 0; i < nLegs; ++i) {
1134 unsigned char index =
1135 std::find(counts.begin(), counts.end(), i) - counts.begin();
1136 if (index >= nLegs) {
1137 ATH_MSG_ERROR("Inconsistency found while trying to rank "
1138 << nLegs << " trigger legs");
1139 return r;
1140 }
1141 ranking = (ranking << 4 | index);
1142 }
1143 r.ranking = ranking;
1144 return r;
1145}
static Double_t a
#define max(a, b)
Definition cfImp.cxx:41

◆ recommendedSystematics()

CP::SystematicSet TrigGlobalEfficiencyCorrectionTool::recommendedSystematics ( ) const
overridevirtual

the list of all systematics this tool recommends to use

Implements CP::IReentrantSystematicsTool.

Definition at line 1227 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1228 {
1229 return {};
1230}

◆ renounce()

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

Definition at line 380 of file AthCommonDataStore.h.

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

◆ renounceArray()

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

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ retrieveEventNumber()

bool TrigGlobalEfficiencyCorrectionTool::retrieveEventNumber ( unsigned long & eventNumber)
private

Definition at line 791 of file TrigGlobalEfficiencyCorrectionTool.cxx.

792 {
793 auto eventInfo = evtStore()->retrieve<const xAOD::EventInfo>("EventInfo");
794 if (!eventInfo) {
795 ATH_MSG_WARNING("Can't retrieve event number from evtStore()");
796 eventNumber = 0;
797 return false;
798 }
799 eventNumber = eventInfo->eventNumber();
800 return true;
801}
EventInfo_v1 EventInfo
Definition of the latest event info version.

◆ retrieveRunNumber()

bool TrigGlobalEfficiencyCorrectionTool::retrieveRunNumber ( unsigned & runNumber)
private

Internal methods (II) – core task.

Definition at line 772 of file TrigGlobalEfficiencyCorrectionTool.cxx.

773 {
774 runNumber = 0;
775 auto eventInfo = evtStore()->retrieve<const xAOD::EventInfo>("EventInfo");
776 if (!eventInfo) {
777 ATH_MSG_ERROR("Can't retrieve 'EventInfo' from evtStore()");
778 return false;
779 }
780 if (eventInfo->eventType(xAOD::EventInfo::IS_SIMULATION)) {
781 if (!m_runNumberDecorator.isAvailable(*eventInfo)) {
782 ATH_MSG_ERROR("Can't retrieve 'RandomRunNumber' from EventInfo");
783 return false;
784 }
785 runNumber = m_runNumberDecorator(*eventInfo);
786 } else
787 runNumber = eventInfo->runNumber();
788 return true;
789}
SG::AuxElement::ConstAccessor< unsigned int > m_runNumberDecorator
@ IS_SIMULATION
true: simulation, false: data

◆ suggestEgammaMapKeys()

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::suggestEgammaMapKeys ( const std::map< std::string, std::string > & triggerCombination,
const std::string & version,
std::map< std::string, std::string > & legsPerKey,
xAOD::Type::ObjectType type )
static

Definition at line 1206 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1209 {
1211 bool success =
1212 data.suggestEgammaMapKeys(triggerCombination, version, legsPerKey, type);
1214}

◆ suggestElectronMapKeys()

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::suggestElectronMapKeys ( const std::map< std::string, std::string > & triggerCombination,
const std::string & version,
std::map< std::string, std::string > & legsPerKey )
inlinestatic

Definition at line 78 of file TrigGlobalEfficiencyCorrectionTool.h.

81 {
82 return suggestEgammaMapKeys(triggerCombination, version, legsPerKey,
84 }
static CP::CorrectionCode suggestEgammaMapKeys(const std::map< std::string, std::string > &triggerCombination, const std::string &version, std::map< std::string, std::string > &legsPerKey, xAOD::Type::ObjectType type)

◆ suggestPhotonMapKeys()

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::suggestPhotonMapKeys ( const std::map< std::string, std::string > & triggerCombination,
const std::string & version,
std::map< std::string, std::string > & legsPerKey )
inlinestatic

Definition at line 85 of file TrigGlobalEfficiencyCorrectionTool.h.

88 {
89 return suggestEgammaMapKeys(triggerCombination, version, legsPerKey,
91 }

◆ sysInitialize()

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

Perform system initialization for an algorithm.

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

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

◆ sysStart()

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

Handle START transition.

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

◆ toolnameForDefaultScaleFactor()

std::string ITrigGlobalEfficiencyCorrectionTool::toolnameForDefaultScaleFactor ( )
inlinestaticinherited

To be used with the ListOfLegsPerTool property:

Definition at line 57 of file ITrigGlobalEfficiencyCorrectionTool.h.

57{ return "RETURN_DEFAULT_SCALE_FACTOR"; }

◆ updateLeptonList()

template<class Particle>
bool TrigGlobalEfficiencyCorrectionTool::updateLeptonList ( LeptonList & leptons,
const std::vector< const Particle * > & particles )
private

tag = <name>+

Definition at line 804 of file TrigGlobalEfficiencyCorrectionTool.cxx.

805 {
806 for (auto lep : particles) {
807 std::size_t tag = 0;
808 for (auto& ltd : m_leptonTagDecorators) {
809 if (ltd.decorator.isAvailable(*lep)) {
810 char v = ltd.decorator(*lep);
811 if (v) {
812 if (ltd.suffixed)
813 {
814 std::string s = m_dictionary.at(ltd.hash) + std::to_string(v);
815 tag = m_hasher(s);
816 m_dictionary.emplace(tag, s);
817 } else
818 tag = ltd.hash;
819 }
820 }
821 }
822 leptons.emplace_back(lep, tag);
823 }
824 return true;
825}

◆ updateMuonTriggerNames()

void TrigGlobalEfficiencyCorrectionTool::updateMuonTriggerNames ( std::size_t leg,
const std::string & name )
private

◆ updateVHKA()

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

Definition at line 308 of file AthCommonDataStore.h.

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

◆ validArgs() [1/2]

template<typename Arg>
bool ITrigGlobalEfficiencyCorrectionTool::validArgs ( unsigned nTrailingDoubles)
staticconstexprinherited

Definition at line 68 of file ITrigGlobalEfficiencyCorrectionTool.h.

69{
70 if(std::is_same<double, Arg>::value) return (nTrailingDoubles==1);
71 using P = std::remove_cv_t<Arg>;
72 return std::is_same<P, std::vector<xAOD::Electron*>>::value
73 || std::is_same<P, std::vector<const xAOD::Electron*>>::value
74 || std::is_same<P, std::vector<xAOD::Muon*>>::value
75 || std::is_same<P, std::vector<const xAOD::Muon*>>::value
76 || std::is_same<P, std::vector<xAOD::Photon*>>::value
77 || std::is_same<P, std::vector<const xAOD::Photon*>>::value;
78}
static Double_t P(Double_t *tt, Double_t *par)

◆ validArgs() [2/2]

template<typename Arg1, typename Arg2, typename... OtherArgs>
bool ITrigGlobalEfficiencyCorrectionTool::validArgs ( unsigned nTrailingDoubles)
staticconstexprinherited

Definition at line 81 of file ITrigGlobalEfficiencyCorrectionTool.h.

82{
83 bool xs [] = { std::is_same<OtherArgs, double>::value..., true };
84 for(bool x : xs) if(!x) return validArgs<Arg1>(0) && validArgs<Arg2, OtherArgs...>(nTrailingDoubles);
85 unsigned nTD = sizeof...(OtherArgs);
86 if(nTD == nTrailingDoubles) return validArgs<Arg1>(0) && validArgs<Arg2>(0);
87 if(nTD == nTrailingDoubles-1) return validArgs<Arg1>(0) && std::is_same<Arg2, double>::value;
88 if(nTD == nTrailingDoubles-2) return std::is_same<Arg1, double>::value && std::is_same<Arg2, double>::value;
89 return false;
90}
#define x
static constexpr bool validArgs(unsigned nTrailingDoubles)

◆ TrigGlobEffCorr::Calculator

friend class TrigGlobEffCorr::Calculator
friend

Definition at line 301 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ TrigGlobEffCorr::CheckConfig

friend class TrigGlobEffCorr::CheckConfig
friend

Definition at line 300 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ TrigGlobEffCorr::ImportData

friend class TrigGlobEffCorr::ImportData
friend

Definition at line 299 of file TrigGlobalEfficiencyCorrectionTool.h.

Member Data Documentation

◆ m_cachedLegRankings

std::multimap<std::size_t, CachedRanking> TrigGlobalEfficiencyCorrectionTool::m_cachedLegRankings
private

Definition at line 170 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_calculator

std::unique_ptr<TrigGlobEffCorr::Calculator> TrigGlobalEfficiencyCorrectionTool::m_calculator
private

Definition at line 193 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_checkElectronLegTag

bool TrigGlobalEfficiencyCorrectionTool::m_checkElectronLegTag
private

Definition at line 177 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_checkMuonLegTag

bool TrigGlobalEfficiencyCorrectionTool::m_checkMuonLegTag
private

Definition at line 178 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_checkPhotonLegTag

bool TrigGlobalEfficiencyCorrectionTool::m_checkPhotonLegTag
private

Definition at line 179 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_cpCode

CP::CorrectionCode TrigGlobalEfficiencyCorrectionTool::m_cpCode = CP::CorrectionCode::Ok
private

Definition at line 187 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_detStore

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

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_dictionary

std::map<std::size_t, std::string> TrigGlobalEfficiencyCorrectionTool::m_dictionary
private

Definition at line 180 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_electronEffToolIndex

std::map<ToolKey, std::size_t> TrigGlobalEfficiencyCorrectionTool::m_electronEffToolIndex
private

Definition at line 172 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_electronLegsPerTag

std::map<std::string, std::string> TrigGlobalEfficiencyCorrectionTool::m_electronLegsPerTag
private

Definition at line 160 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_electronSfToolIndex

std::map<ToolKey, std::size_t> TrigGlobalEfficiencyCorrectionTool::m_electronSfToolIndex
private

Definition at line 171 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_evtStore

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

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_hasher

std::hash<std::string> TrigGlobalEfficiencyCorrectionTool::m_hasher
private

Definition at line 168 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_hierarchyData

std::vector<std::size_t> TrigGlobalEfficiencyCorrectionTool::m_hierarchyData
private

Definition at line 184 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_hierarchyMeta

std::vector<Hierarchy> TrigGlobalEfficiencyCorrectionTool::m_hierarchyMeta
private

Definition at line 183 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_initialized

bool TrigGlobalEfficiencyCorrectionTool::m_initialized = false
private

Definition at line 186 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_legsPerTag

std::map<std::string, std::string> TrigGlobalEfficiencyCorrectionTool::m_legsPerTag
private

deprecated

Definition at line 162 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_legsPerTool

std::map<std::string, std::string> TrigGlobalEfficiencyCorrectionTool::m_legsPerTool
private

Definition at line 155 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_leptonTagDecorations

std::string TrigGlobalEfficiencyCorrectionTool::m_leptonTagDecorations
private

Definition at line 158 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_leptonTagDecorators

std::vector<TagDecorator> TrigGlobalEfficiencyCorrectionTool::m_leptonTagDecorators
private

Definition at line 191 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_muonLegsPerTag

std::map<std::string, std::string> TrigGlobalEfficiencyCorrectionTool::m_muonLegsPerTag
private

deprecated

Definition at line 161 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_muonToolIndex

std::map<ToolKey, std::size_t> TrigGlobalEfficiencyCorrectionTool::m_muonToolIndex
private

Definition at line 175 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_numberOfToys

unsigned long TrigGlobalEfficiencyCorrectionTool::m_numberOfToys
private

Definition at line 164 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_overrideThresholds

std::map<std::string, std::string> TrigGlobalEfficiencyCorrectionTool::m_overrideThresholds
private

Definition at line 163 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_photonEffToolIndex

std::map<ToolKey, std::size_t> TrigGlobalEfficiencyCorrectionTool::m_photonEffToolIndex
private

Definition at line 174 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_photonSfToolIndex

std::map<ToolKey, std::size_t> TrigGlobalEfficiencyCorrectionTool::m_photonSfToolIndex
private

Definition at line 173 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_runNumberDecorator

SG::AuxElement::ConstAccessor<unsigned int> TrigGlobalEfficiencyCorrectionTool::m_runNumberDecorator
private

Definition at line 192 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_seed

unsigned long TrigGlobalEfficiencyCorrectionTool::m_seed
private

Definition at line 188 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_suppliedElectronEfficiencyTools

ToolHandleArray<IAsgElectronEfficiencyCorrectionTool> TrigGlobalEfficiencyCorrectionTool::m_suppliedElectronEfficiencyTools
private

Properties:

Definition at line 147 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_suppliedElectronScaleFactorTools

ToolHandleArray<IAsgElectronEfficiencyCorrectionTool> TrigGlobalEfficiencyCorrectionTool::m_suppliedElectronScaleFactorTools
private

Definition at line 149 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_suppliedMuonTools

ToolHandleArray<CP::IMuonTriggerScaleFactors> TrigGlobalEfficiencyCorrectionTool::m_suppliedMuonTools
private

Definition at line 154 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_suppliedPhotonEfficiencyTools

ToolHandleArray<IAsgPhotonEfficiencyCorrectionTool> TrigGlobalEfficiencyCorrectionTool::m_suppliedPhotonEfficiencyTools
private

Definition at line 151 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_suppliedPhotonScaleFactorTools

ToolHandleArray<IAsgPhotonEfficiencyCorrectionTool> TrigGlobalEfficiencyCorrectionTool::m_suppliedPhotonScaleFactorTools
private

Definition at line 153 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_tagsPerTool

std::map<std::string, std::string> TrigGlobalEfficiencyCorrectionTool::m_tagsPerTool
private

Definition at line 159 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_thresholds

std::map<std::size_t, float> TrigGlobalEfficiencyCorrectionTool::m_thresholds
private

Definition at line 169 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_triggerCb

std::map<std::string, std::string> TrigGlobalEfficiencyCorrectionTool::m_triggerCb
private

Definition at line 156 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_triggerCbPerYear

std::map<std::string, std::string> TrigGlobalEfficiencyCorrectionTool::m_triggerCbPerYear
private

Definition at line 157 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_trigMatchTool

ToolHandle<Trig::IMatchingTool> TrigGlobalEfficiencyCorrectionTool::m_trigMatchTool
private

Definition at line 166 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_unsupportedLegs

std::set<ToolKey> TrigGlobalEfficiencyCorrectionTool::m_unsupportedLegs
private

Definition at line 181 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_useInternalSeed

bool TrigGlobalEfficiencyCorrectionTool::m_useInternalSeed
private

Definition at line 165 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_validLegTagPairs

std::set<std::size_t> TrigGlobalEfficiencyCorrectionTool::m_validLegTagPairs
private

Definition at line 176 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_validTrigMatchTool

bool TrigGlobalEfficiencyCorrectionTool::m_validTrigMatchTool
private

Definition at line 189 of file TrigGlobalEfficiencyCorrectionTool.h.

◆ m_varHandleArraysDeclared

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

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.


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