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

#include <TrigGlobalEfficiencyCorrectionTool.h>

Inheritance diagram for TrigGlobalEfficiencyCorrectionTool:

Classes

struct  Hierarchy
struct  TagDecorator
struct  CachedRanking
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)
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 = CxxUtils::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 = CxxUtils::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 107 of file TrigGlobalEfficiencyCorrectionTool.cxx.

107 {
108 m_cpCode.ignore();
109}

Member Function Documentation

◆ aboveThreshold()

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

Definition at line 1021 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1022 {
1023 bool decision = (lepton.pt() >= m_thresholds.at(leg));
1024 if (m_validLegTagPairs.size()) {
1025 if ((lepton.type() == xAOD::Type::Electron && m_checkElectronLegTag) ||
1026 (lepton.type() == xAOD::Type::Muon && m_checkMuonLegTag) ||
1027 (lepton.type() == xAOD::Type::Photon && m_checkPhotonLegTag)) {
1028 decision = decision && (m_validLegTagPairs.find(leg ^ lepton.tag()) !=
1029 m_validLegTagPairs.end());
1030 }
1031 }
1032 ATH_MSG_DEBUG("Lepton " << lepton.particle() << " (pt=" << lepton.pt()
1033 << ") is " << (decision ? "" : "not ")
1034 << "considered suitable for firing trigger leg "
1035 << m_dictionary.at(leg));
1036 return decision;
1037}
#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 1233 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1234 {
1235 return CP::SystematicSet();
1236}

◆ 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 1243 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1244 {
1245 for (auto&& t : m_suppliedElectronEfficiencyTools)
1246 ANA_CHECK(t->applySystematicVariation(systematic));
1247 for (auto&& t : m_suppliedElectronScaleFactorTools)
1248 ANA_CHECK(t->applySystematicVariation(systematic));
1249 for (auto&& t : m_suppliedPhotonEfficiencyTools)
1250 ANA_CHECK(t->applySystematicVariation(systematic));
1251 for (auto&& t : m_suppliedPhotonScaleFactorTools)
1252 ANA_CHECK(t->applySystematicVariation(systematic));
1253 for (auto&& t : m_suppliedMuonTools)
1254 ANA_CHECK(t->applySystematicVariation(systematic));
1255
1256 return StatusCode::SUCCESS;
1257}
#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 638 of file TrigGlobalEfficiencyCorrectionTool.cxx.

639 {
640 cc.setChecked();
641 if (cc > m_cpCode)
642 m_cpCode = cc;
643 return cc == CP::CorrectionCode::Ok;
644}
@ 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 925 of file TrigGlobalEfficiencyCorrectionTool.cxx.

927 {
928 unsigned runNumber;
929 if (!retrieveRunNumber(runNumber)) {
931 "Unable to retrieve run number, aborting checkTriggerMatching()");
933 }
936 "A valid IMatchingTool instance should be provided via the property "
937 "'TriggerMatchingTool'");
939 }
940 LeptonList leptons;
941 updateLeptonList(leptons, particles);
942 return m_calculator->checkTriggerMatching(*this, matched, nullptr, leptons, runNumber)
945}
#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 947 of file TrigGlobalEfficiencyCorrectionTool.cxx.

949 {
950 unsigned runNumber;
951 if (!retrieveRunNumber(runNumber)) {
953 "Unable to retrieve run number, aborting checkTriggerMatching()");
955 }
958 "A valid IMatchingTool instance should be provided via the property "
959 "'TriggerMatchingTool'");
961 }
962 LeptonList leptons;
963 updateLeptonList(leptons, particles);
964 bool flag;
965 return m_calculator->checkTriggerMatching(*this, flag, &matched_per_trigger, leptons, runNumber)
968}
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 983 of file TrigGlobalEfficiencyCorrectionTool.cxx.

984 {
985 numberOfLegs = 0;
990 constexpr std::size_t magic = 0xa3bad03e613527c9;
991 const std::size_t name = m_hasher(trigger), key = name ^ magic;
992 std::string& value = m_dictionary[key];
993 if (!value.length()) {
995 if (!data.importTriggers())
997 auto itr = data.getTriggerDefs().find(name);
998 if (itr == data.getTriggerDefs().end()) {
999 m_dictionary.erase(key);
1000 ATH_MSG_ERROR("The trigger " << trigger << " is not recognized");
1002 }
1003 auto type = itr->second.type;
1005 if (type & TriggerType::TT_SINGLELEPTON_FLAG)
1006 value = "~";
1007 else if (type & TriggerType::TT_DILEPTON_FLAG)
1008 value = "~~";
1009 else if (type & TriggerType::TT_TRILEPTON_FLAG)
1010 value = "~~~";
1011 else {
1012 m_dictionary.erase(key);
1013 ATH_MSG_ERROR("Unrecognized trigger type, implementation must be fixed!");
1015 }
1016 }
1017 numberOfLegs = value.length();
1019}

◆ 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 251 of file TrigGlobalEfficiencyCorrectionTool.cxx.

254 {
255 bool success = true;
256 for (unsigned index = 0; index < suppliedTools.size(); ++index) {
257 auto& handle = suppliedTools[index];
258 const std::string& name = handle.name();
259 const std::string& altname = handle->name(); // athena: not always the same
260 flat_set<ToolKey> listOfLegs;
262 if (suppliedTools.size() != 1 || m_legsPerTool.size() != 0) {
263 auto itrLegs = m_legsPerTool.find(name);
264 if (itrLegs == m_legsPerTool.end())
265 itrLegs = m_legsPerTool.find(altname);
266 if (itrLegs != m_legsPerTool.end()) {
267 listOfLegs = parseListOfLegs(data, itrLegs->second, success);
268 if (!success) {
270 "The 'ListOfLegsPerTool' property has an invalid entry for the "
271 "tool'"
272 << name << "'");
273 continue;
274 }
275 } else if (std::is_same<CPTool,
276 IAsgElectronEfficiencyCorrectionTool>::value ||
277 std::is_same<CPTool,
278 IAsgPhotonEfficiencyCorrectionTool>::value) {
279 ATH_MSG_ERROR("Property 'ListOfLegsPerTool' empty for tool '" << name
280 << "'");
281 success = false;
282 continue;
283 } else {
284 listOfLegs.emplace();
285 }
286 } else
287 listOfLegs.emplace();
290 auto itrTags = m_tagsPerTool.find(name);
291 if (itrTags == m_tagsPerTool.end())
292 itrTags = m_tagsPerTool.find(altname);
293 if (itrTags != m_tagsPerTool.end()) {
294 success = success && parseTagString(itrTags->second, tags);
295 collectedTags.insert(tags.begin(), tags.end());
296 } else
297 tags.emplace(0);
298
300 unsigned short nUncheckedLegs = 0;
301 for (auto& key : listOfLegs) {
302 std::size_t leg = key.hash;
303 if (leg) {
304 auto flavour = data.associatedLeptonFlavour(leg, success);
305 if (!(flavour == xAOD::Type::Electron &&
306 std::is_same<CPTool,
307 IAsgElectronEfficiencyCorrectionTool>::value) &&
308 !(flavour == xAOD::Type::Photon &&
309 std::is_same<CPTool,
310 IAsgPhotonEfficiencyCorrectionTool>::value)) {
311 ATH_MSG_ERROR("Unexpected association of trigger leg '"
312 << m_dictionary[leg] << "' to tool '" << name << "'");
313 success = false;
314 }
315 }
316 for (std::size_t tag : tags) {
317 if (!toolIndex.emplace(ToolKey(leg, tag, key.boundaries), index)
318 .second) {
319 if (leg && tag)
320 ATH_MSG_ERROR("Multiple tools associated to the selection tag '"
321 << m_dictionary[tag] << "' for the trigger leg '"
322 << m_dictionary[leg] << "'");
323 else if (leg)
324 ATH_MSG_ERROR("Multiple tools associated to the trigger leg '"
325 << m_dictionary[leg] << "'");
326 else if (tag)
327 ATH_MSG_ERROR("Multiple tools associated to the selection tag '"
328 << m_dictionary[tag] << "'");
329 else
331 "Multiple tools not associated to any trigger leg / selection "
332 "tag");
333 success = false;
334 }
335 }
336 ++nUncheckedLegs;
337 }
338 if (!nUncheckedLegs) {
339 ATH_MSG_ERROR("Tool " << name
340 << " hasn't been associated to any trigger leg");
341 success = false;
342 }
343 }
344 return success;
345}
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:107
virtual void handle(const Incident &inc)
Handle end of run incidents to save the metadata at that point.
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 1055 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1056 {
1057 return legs;
1058}

◆ forwardLegs() [2/2]

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

Definition at line 1061 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1062 {
1063 if (leg1 < leg2)
1064 return {leg1, leg2};
1065 else
1066 return {leg2, leg1};
1067}

◆ getCachedTriggerLegsRanking()

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

Definition at line 1070 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1071 {
1072 auto combinedHash = getCombinedHash(legs...);
1073 if (!combinedHash)
1074 return 0xFEDCBA9876543210; // only one (distinct) leg
1075 auto cachedRankings = m_cachedLegRankings.equal_range(combinedHash);
1076 auto rankingItr = cachedRankings.first;
1077 float pt = lepton.pt();
1078 while (rankingItr != cachedRankings.second &&
1079 (pt < rankingItr->second.minPt || pt >= rankingItr->second.maxPt))
1080 ++rankingItr;
1081 if (rankingItr == cachedRankings.second) {
1083 if (r)
1084 m_cachedLegRankings.emplace(combinedHash, r);
1085 return r.ranking;
1086 }
1087 return rankingItr->second.ranking;
1088}
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)
CachedRanking rankTriggerLegs(float pt, const Container &legs)
static constexpr const flat_set< std::size_t > & forwardLegs(const flat_set< std::size_t > &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 1039 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1040 {
1041 if (legs.size() < 2)
1042 return 0;
1043 std::size_t combinedHash = 0;
1044 for (auto& leg : legs)
1045 combinedHash ^= leg;
1046 return combinedHash;
1047}

◆ 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 1049 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1050 {
1051 return leg1 ^
1052 leg2;
1053}

◆ 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 847 of file TrigGlobalEfficiencyCorrectionTool.cxx.

849 {
850 unsigned runNumber;
851 if (!retrieveRunNumber(runNumber))
853 return getEfficiency(runNumber, leptons, efficiencyData, efficiencyMc);
854}
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 881 of file TrigGlobalEfficiencyCorrectionTool.cxx.

883 {
886 efficiencyData = 0.;
887 efficiencyMc = 0.;
888
889 ATH_MSG_DEBUG("Computing global trigger efficiency for this event with "
890 << particles.size()
891 << " lepton(s) as input; run number = " << runNumber);
892
893#ifdef XAOD_STANDALONE
894 if (!m_initialized) {
895 ATH_MSG_WARNING("Tool hasn't been initialized, trying now");
896 if (initialize() != StatusCode::SUCCESS) {
897 ATH_MSG_ERROR("Giving up.");
898 m_cpCode.ignore();
900 }
901 }
902#endif
903
904 LeptonList leptons;
905 updateLeptonList(leptons, particles);
906
908 if (m_calculator->compute(*this, leptons, runNumber, efficiencies)) {
909 efficiencyData = efficiencies.data();
910 efficiencyMc = efficiencies.mc();
911 if (std::isnan(efficiencies.data()) || efficiencies.data() <= 0. ||
912 std::isnan(efficiencies.mc()) || efficiencies.mc() <= 0.) {
913 ATH_MSG_WARNING("Efficiencies do not seem valid");
914 m_cpCode.ignore();
916 }
917 } else {
920 }
921 }
922 return m_cpCode;
923}
#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 838 of file TrigGlobalEfficiencyCorrectionTool.cxx.

840 {
841 unsigned runNumber;
842 if (!retrieveRunNumber(runNumber))
844 return getEfficiencyScaleFactor(runNumber, leptons, efficiencyScaleFactor);
845}
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 856 of file TrigGlobalEfficiencyCorrectionTool.cxx.

858 {
861 efficiencyScaleFactor = 1.;
862
864 auto cc = getEfficiency(runNumber, particles, efficiencies.data(),
865 efficiencies.mc());
866 if (cc == CP::CorrectionCode::Ok) {
867 if (efficiencies.data() > 0. && efficiencies.mc() > 0.) {
868 efficiencyScaleFactor = efficiencies.data() / efficiencies.mc();
870 } else {
871 efficiencyScaleFactor = 1.;
873 "Efficiencies do not seem valid, forcing the scale factor to 1.");
875 }
876 }
877 efficiencyScaleFactor = 1.;
878 return cc;
879}

◆ 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()

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

Common implementation for electrons and photons

Definition at line 678 of file TrigGlobalEfficiencyCorrectionTool.cxx.

680 {
682 auto ptype = []() {
683 return std::is_same<ParticleType, xAOD::Electron>::value ? "electron"
684 : std::is_same<ParticleType, xAOD::Photon>::value ? "photon"
685 : "<unknown type>";
686 };
687 auto pp = static_cast<const xAOD::IParticle*>(p);
688 ATH_MSG_DEBUG("Retrieving efficiencies for "
689 << ptype() << ' ' << p << " (pt=" << pp->pt()
690 << ", eta=" << pp->eta() << ", tag='" << m_dictionary[tag]
691 << "') for trigger leg " << m_dictionary[leg]);
692 auto itrSf = GetScaleFactorToolIndex(p).find(ToolKey(leg, tag, runNumber));
693 auto itrEff = GetEfficiencyToolIndex(p).find(ToolKey(leg, tag, runNumber));
694 if (itrSf == GetScaleFactorToolIndex(p).end() ||
695 itrEff == GetEfficiencyToolIndex(p).end()) {
696 if (m_unsupportedLegs.count(ToolKey(leg, 0u, runNumber))) {
697 efficiencies.data() = 0.5;
698 efficiencies.mc() = 0.5;
699 return TLE_UNAVAILABLE;
700 }
701 if (!tag)
702 ATH_MSG_ERROR("Unable to find "
703 << ptype() << " tools needed for trigger leg "
704 << m_dictionary[leg] << " (run number = " << runNumber
705 << ")");
706 else
707 ATH_MSG_ERROR("Unable to find "
708 << ptype() << " tools needed for trigger leg "
709 << m_dictionary[leg] << " and selection tag "
710 << m_dictionary[tag] << " (run number = " << runNumber
711 << ")");
712 return TLE_ERROR;
713 }
714 double sf;
715 bool success =
716 checkAndRecord(GetScaleFactorTool(p, itrSf->second)
717 .getEfficiencyScaleFactor(*p, sf)) &&
718 checkAndRecord(GetEfficiencyTool(p, itrEff->second)
720 efficiencies.data() = sf * efficiencies.mc();
721 ATH_MSG_DEBUG("found for that " << ptype()
722 << " eff(data) = " << efficiencies.data()
723 << " and eff(MC) = " << efficiencies.mc());
724 return success ? TLE_OK : TLE_ERROR;
725}
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)

◆ 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::Event 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::Event, 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 1158 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1159 {
1160 auto ranking = getCachedTriggerLegsRanking(lepton, leg1, leg2);
1161 if (CachedRanking::invalid(ranking)) {
1162 success = false;
1163 return -1;
1164 }
1165 return forwardLegs(leg1, leg2)[ranking & 0xF];
1166}
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 1183 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1184 {
1185 flat_set<std::size_t> validLegs;
1186 for (auto leg : legs)
1187 if (aboveThreshold(lepton, leg))
1188 validLegs.insert(leg);
1189 if (validLegs.size() == 0)
1190 return 0;
1191 if (validLegs.size() == 1)
1192 return *validLegs.begin();
1193 auto ranking = getCachedTriggerLegsRanking(lepton, legs);
1194 if (CachedRanking::invalid(ranking)) {
1195 success = false;
1196 return 0;
1197 }
1198 return nth (legs, ranking & 0xF);
1199}
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::Event 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::Event, 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 970 of file TrigGlobalEfficiencyCorrectionTool.cxx.

971 {
972 unsigned runNumber;
973 if (!retrieveRunNumber(runNumber)) {
975 "Unable to retrieve run number, aborting getRelevantTriggers()");
977 }
978 return m_calculator->getRelevantTriggersForUser(*this, triggers, runNumber)
981}

◆ 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 1201 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1202 {
1203 const int nLegs = legs.size();
1204 unsigned long ranking = getCachedTriggerLegsRanking(lepton, legs);
1205 if (CachedRanking::invalid(ranking)) {
1206 success = false;
1207 ranking = 0xFEDCBA9876543210;
1208 }
1209 std::vector<std::size_t> sorted_legs(nLegs);
1210 for (int i = 0; i < nLegs; ++i) {
1211 sorted_legs[i] = nth (legs, ranking & 0xF);
1212 ranking >>= 4;
1213 }
1214 return sorted_legs;
1215}

◆ 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 727 of file TrigGlobalEfficiencyCorrectionTool.cxx.

729 {
730 return getEgammaTriggerLegEfficiencies(p, runNumber, leg, tag, efficiencies);
731}
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 739 of file TrigGlobalEfficiencyCorrectionTool.cxx.

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

◆ 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 733 of file TrigGlobalEfficiencyCorrectionTool.cxx.

735 {
736 return getEgammaTriggerLegEfficiencies(p, runNumber, leg, tag, efficiencies);
737}

◆ 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 1169 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1170 {
1171 auto ranking = getCachedTriggerLegsRanking(lepton, legs);
1172 if (CachedRanking::invalid(ranking)) {
1173 success = false;
1174 return {0, 0};
1175 }
1176 std::pair<std::size_t, std::size_t> looseLegs{0, 0};
1177 looseLegs.first = nth (legs, ranking & 0xF);
1178 if (legs.size() >= 2)
1179 looseLegs.second = nth (legs, (ranking >> 4) & 0xF);
1180 return looseLegs;
1181}

◆ 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 111 of file TrigGlobalEfficiencyCorrectionTool.cxx.

111 {
112 if (m_initialized) {
113 ATH_MSG_ERROR("Tool has already been initialized");
114 return StatusCode::FAILURE;
115 }
116 ATH_MSG_INFO("Initializing " << name() << "...");
117
118 m_dictionary.emplace(0, "");
119
121 return StatusCode::FAILURE;
122
123 ATH_MSG_DEBUG("Importing data from configuration files");
124 ImportData data(*this);
125 if (!data.importAll(m_overrideThresholds))
126 return StatusCode::FAILURE;
128 m_hierarchyMeta = data.getHierarchyMeta();
129 m_hierarchyData = data.getHierarchyData();
130 m_thresholds = data.getTriggerThresholds();
131
132 ATH_MSG_DEBUG("Retrieving tools");
133 if (m_suppliedElectronEfficiencyTools.retrieve() != StatusCode::SUCCESS ||
134 m_suppliedElectronScaleFactorTools.retrieve() != StatusCode::SUCCESS ||
135 m_suppliedMuonTools.retrieve() != StatusCode::SUCCESS ||
136 m_suppliedPhotonEfficiencyTools.retrieve() != StatusCode::SUCCESS ||
137 m_suppliedPhotonScaleFactorTools.retrieve() != StatusCode::SUCCESS) {
138 ATH_MSG_ERROR("Unable to retrieve CP tools");
139 return StatusCode::FAILURE;
140 }
141
142 ATH_MSG_DEBUG("Retrieving trigger matching tool (if provided)");
143 m_validTrigMatchTool = false;
144 if (m_trigMatchTool.name() != "") {
145 if (m_trigMatchTool.retrieve() != StatusCode::SUCCESS) {
146 ATH_MSG_ERROR("Unable to retrieve trigger matching tool");
147 return StatusCode::FAILURE;
148 }
149 ATH_MSG_DEBUG("Trigger matching support enabled");
151 }
152
153 ATH_MSG_DEBUG("Basic checks");
154 CheckConfig checks(*this);
155 if (!checks.basicConfigChecks())
156 return StatusCode::FAILURE;
157
158 ATH_MSG_DEBUG("Enumerating tools");
159 flat_set<std::size_t> collectedElectronTags, collectedMuonTags,
160 collectedPhotonTags;
162 m_electronEffToolIndex, collectedElectronTags) ||
164 m_electronSfToolIndex, collectedElectronTags) ||
166 collectedMuonTags) ||
168 m_photonEffToolIndex, collectedPhotonTags) ||
170 m_photonSfToolIndex, collectedPhotonTags)) {
171 return StatusCode::FAILURE;
172 }
173 // List legs (if any) for which a dummy scale factor should be returned.
175 if (itr != m_legsPerTool.end()) {
176 bool success = true;
177 for (ToolKey leg : parseListOfLegs(data, itr->second, success)) {
178 m_unsupportedLegs.insert(leg);
179 }
180 }
181
182 ATH_MSG_DEBUG("Loading user-defined trigger combination");
183 bool useDefaultElectronTools =
184 (m_suppliedElectronEfficiencyTools.size() == 1) &&
186 (m_legsPerTool.size() == 0);
187 bool useDefaultPhotonTools = (m_suppliedPhotonEfficiencyTools.size() == 1) &&
188 (m_suppliedPhotonScaleFactorTools.size() == 1) &&
189 (m_legsPerTool.size() == 0);
190 if (!loadTriggerCombination(data, useDefaultElectronTools,
191 useDefaultPhotonTools))
192 return StatusCode::FAILURE;
193
194 ATH_MSG_DEBUG("Loading lepton selection tags decorators");
195 if (!loadTagDecorators(collectedElectronTags, collectedMuonTags,
196 collectedPhotonTags))
197 return StatusCode::FAILURE;
198
199 ATH_MSG_DEBUG("Loading list of legs allowed for each tag");
201 return StatusCode::FAILURE;
202
203 ATH_MSG_DEBUG("Advanced checks");
204 if (!checks.advancedConfigChecks())
205 return StatusCode::FAILURE;
206
207 ATH_MSG_INFO("Initialization successful");
208 m_initialized = true;
209 return StatusCode::SUCCESS;
210}
#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 1227 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1228 {
1229 auto sys = affectingSystematics();
1230 return !systematic.empty() && sys.find(systematic) != sys.end();
1231}
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 649 of file TrigGlobalEfficiencyCorrectionTool.cxx.

650 {
651 std::stringstream ss(TrigGlobEffCorr::removeWhitespaces(s));
653 std::string token;
654 while (std::getline(ss, token, ',')) {
655 if (token.length()) {
656 std::size_t h = m_hasher(token);
657 if (hashes.insert(h).second) {
658 m_dictionary.emplace(h, std::move(token));
659 } else {
660 success = false;
662 "Found duplicate entry while parsing comma-separated list '"
663 << s << "'");
664 }
665 } else {
666 success = false;
668 "Found null-length entry while parsing comma-separated list '"
669 << s << "'");
670 }
671 }
672 if (!success)
673 hashes.clear();
674 return hashes;
675}
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 573 of file TrigGlobalEfficiencyCorrectionTool.cxx.

573 {
574 bool success = true;
575
578 for (auto& kv : m_legsPerTag) {
579 std::size_t tag;
580 if (!kv.first.size() || kv.first == "*")
581 tag = 0;
582 else
583 tag = m_hasher(kv.first);
584 auto listOfLegs = listNonOrderedCSValues(kv.second, success);
585 if (!success) {
587 "The property 'ListOfLegsPerTag' has an invalid entry for the tag '"
588 << kv.first << "'");
589 break;
590 }
591 for (std::size_t leg : listOfLegs) {
592 auto type =
594 if (type == xAOD::Type::Electron &&
595 m_electronSfToolIndex.find(ToolKey(leg, tag)) ==
596 m_electronSfToolIndex.end()) {
597 ATH_MSG_ERROR("No electron tool has been provided for trigger leg '"
598 << m_dictionary[leg] << "' and selection tag " << kv.first
599 << " mentioned in the property 'ListOfLegsPerTag'");
600 success = false;
601 } else if (type == xAOD::Type::Muon &&
602 m_muonToolIndex.find(ToolKey(0, tag)) ==
603 m_muonToolIndex.end()) {
604 ATH_MSG_ERROR("No muon tool has been provided for selection tag "
605 << kv.first
606 << " mentioned in the property 'ListOfLegsPerTag'");
607 success = false;
608 } else if (type == xAOD::Type::Photon &&
609 m_photonSfToolIndex.find(ToolKey(leg, tag)) ==
610 m_photonSfToolIndex.end()) {
611 ATH_MSG_ERROR("No photon tool has been provided for trigger leg '"
612 << m_dictionary[leg] << "' and selection tag " << kv.first
613 << " mentioned in the property 'ListOfLegsPerTag'");
614 success = false;
615 }
616 if (m_validLegTagPairs.insert(leg ^ tag).second) {
617 if (type == xAOD::Type::Electron)
619 if (type == xAOD::Type::Muon)
620 m_checkMuonLegTag = true;
621 if (type == xAOD::Type::Photon)
622 m_checkPhotonLegTag = true;
623 } else {
624 ATH_MSG_ERROR("The combination of trigger leg '"
625 << m_dictionary[leg] << "' and selection tag " << kv.first
626 << " is mentioned more than once in the property "
627 "'ListOfLegsPerTag'");
628 success = false;
629 }
630 }
631 }
632 if (!success)
633 return false;
634
635 return success;
636}
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 462 of file TrigGlobalEfficiencyCorrectionTool.cxx.

465 {
466 bool success = true;
467
468 flat_set<std::size_t> collectedTags(collectedElectronTags);
469 collectedTags.insert(collectedMuonTags.begin(), collectedMuonTags.end());
470 collectedTags.insert(collectedPhotonTags.begin(), collectedPhotonTags.end());
471 flat_set<std::size_t> allTags = collectedTags;
472
476 std::stringstream ss(
478 std::string decoration;
479 flat_set<std::size_t> allDecorations;
480 while (std::getline(ss, decoration, ',')) {
481 if (!decoration.length() || decoration == "?") {
483 "Found an empty string in the 'LeptonTagDecorations' property");
484 success = false;
485 break;
486 }
487
488 bool found = false, suffixed = false;
489 std::size_t h;
490 if (decoration.back() != '?') {
492 h = m_hasher(decoration);
493 found = (allTags.find(h) != allTags.end());
494 } else {
496 decoration.pop_back();
497 suffixed = true;
498 for (std::size_t tag :
499 allTags)
500 {
501 auto& s = m_dictionary[tag];
502 if (s.find(decoration) != 0)
503 continue;
504 if (std::all_of(s.begin() + decoration.length(), s.end(),
505 [](char c) { return std::isdigit(c); })) {
506 found = true;
507 break;
508 }
509 }
510 h = m_hasher(decoration);
511 }
512 if (!allDecorations.insert(h).second) {
514 "The selection tag '"
515 << decoration
516 << "' is listed twice in the property 'LeptonTagDecorations'");
517 success = false;
518 continue;
519 }
520 if (!found) {
522 "the selection tag '"
523 << decoration
524 << "' is only referred to in the property 'LeptonTagDecorations'");
525 success = false;
526 continue;
527 }
528 m_leptonTagDecorators.emplace_back(decoration, h, suffixed);
529 m_dictionary.emplace(h, decoration);
530 }
532 if (!success)
533 return false;
534
537 for (std::size_t tag : collectedTags) {
538 if (!tag)
539 continue;
540 auto itr =
541 std::find_if(m_leptonTagDecorators.begin(), m_leptonTagDecorators.end(),
542 [tag](const TagDecorator& ltd) {
543 return (!ltd.suffixed) && (ltd.hash == tag);
544 });
545 if (itr != m_leptonTagDecorators.end())
546 continue;
547 bool found = false;
548 auto& s = m_dictionary[tag];
549 for (auto& ltd : m_leptonTagDecorators) {
550 auto& name = m_dictionary[ltd.hash];
551 if (s.find(name) != 0)
552 continue;
553 if (std::all_of(s.begin() + name.length(), s.end(),
554 [](char c) { return std::isdigit(c); })) {
555 found = true;
556 break;
557 }
558 }
559 if (!found) {
560 ATH_MSG_ERROR("the selection tag '"
561 << m_dictionary[tag]
562 << "' hasn't been found in in 'LeptonTagDecorations'");
563 success = false;
564 continue;
565 }
566 }
567 if (!success)
568 return false;
569
570 return success;
571}
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 395 of file TrigGlobalEfficiencyCorrectionTool.cxx.

397 {
398 bool success = true, mustBeEmpty = m_triggerCb.size();
399 for (auto& kv : m_triggerCbPerYear) {
400 if (!kv.second.size())
401 continue;
402 if (mustBeEmpty) {
404 "You're not allowed to use simultaneously the 'TriggerCombination' "
405 "and 'TriggerCombination"
406 << kv.first << "' properties.");
407 return false;
408 }
409 m_triggerCb.insert(kv);
410 }
411
412 m_calculator = std::make_unique<Calculator>(*this, m_triggerCb.size());
413 std::set<std::size_t> allUniqueElectronLegs, allUniquePhotonLegs;
414 for (auto& kv : m_triggerCb) {
415 std::pair<unsigned, unsigned> boundaries;
416 if (!data.getPeriodBoundaries(kv.first, boundaries)) {
417 success = false;
418 continue;
419 }
420 std::size_t uniqueElectronLeg = !useDefaultElectronTools,
421 uniquePhotonLeg = !useDefaultPhotonTools;
422 if (!m_calculator->addPeriod(data, boundaries, kv.second, m_numberOfToys,
423 uniqueElectronLeg, uniquePhotonLeg)) {
424 success = false;
425 continue;
426 }
427 if (uniqueElectronLeg && useDefaultElectronTools)
428 allUniqueElectronLegs.insert(uniqueElectronLeg);
429 if (uniquePhotonLeg && useDefaultPhotonTools)
430 allUniquePhotonLegs.insert(uniquePhotonLeg);
431 }
432 if (!success)
433 return false;
434
435 auto remapTools = [](auto& toolIndex, auto& allUniqueLegs) {
436 typename std::remove_reference<decltype(toolIndex)>::type remappedToolIndex;
437 for (std::size_t leg : allUniqueLegs) {
438 if (!leg)
439 continue;
440 for (auto& kv : toolIndex) {
443 const ToolKey& key = kv.first;
444 remappedToolIndex.emplace(ToolKey(leg, key.hash, key.boundaries),
445 kv.second);
446 }
447 }
448 toolIndex.swap(remappedToolIndex);
449 };
450
451 if (useDefaultElectronTools && allUniqueElectronLegs.size()) {
452 remapTools(m_electronSfToolIndex, allUniqueElectronLegs);
453 remapTools(m_electronEffToolIndex, allUniqueElectronLegs);
454 }
455 if (useDefaultPhotonTools && allUniquePhotonLegs.size()) {
456 remapTools(m_photonSfToolIndex, allUniquePhotonLegs);
457 remapTools(m_photonEffToolIndex, allUniquePhotonLegs);
458 }
459 return success;
460}
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 347 of file TrigGlobalEfficiencyCorrectionTool.cxx.

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

◆ parseTagString()

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

Definition at line 236 of file TrigGlobalEfficiencyCorrectionTool.cxx.

237 {
238 bool success = true;
239 const std::size_t star = m_hasher("*");
240 for (std::size_t tag : listNonOrderedCSValues(tagstring, success)) {
241 allTags.insert((tag != star) ? tag : 0);
242 }
243 if (!success) {
244 ATH_MSG_ERROR("List of tags \"" << tagstring
245 << "\" is not provided in a valid format");
246 }
247 return success;
248}

◆ print()

void asg::AsgTool::print ( ) const
virtualinherited

◆ processDeprecatedProperties()

bool TrigGlobalEfficiencyCorrectionTool::processDeprecatedProperties ( )
private

Definition at line 212 of file TrigGlobalEfficiencyCorrectionTool.cxx.

212 {
213 if (m_electronLegsPerTag.size()) {
215 "The property 'ElectronLegsPerTag' is deprecated, please use "
216 "'ListOfLegsPerTag' instead");
217 for (auto& kv : m_electronLegsPerTag) {
218 auto insert = m_legsPerTag.insert(kv);
219 if (!insert.second)
220 insert.first->second += "," + kv.second;
221 }
222 }
223 if (m_muonLegsPerTag.size()) {
225 "The property 'MuonLegsPerTag' is deprecated, please use "
226 "'ListOfLegsPerTag' instead");
227 for (auto& kv : m_muonLegsPerTag) {
228 auto insert = m_legsPerTag.insert(kv);
229 if (!insert.second)
230 insert.first->second += "," + kv.second;
231 }
232 }
233 return true;
234}
std::map< std::string, std::string > m_muonLegsPerTag
deprecated
std::map< std::string, std::string > m_electronLegsPerTag
ConcurrentBitset & insert(bit_t bit, bit_t new_nbits=0)
Set a bit to 1.

◆ rankTriggerLegs()

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

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 1091 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1093 {
1094 const std::size_t nLegs = legs.size();
1096 r.ranking = std::numeric_limits<decltype(r.ranking)>::max();
1097 r.minPt = 0.f;
1098 r.maxPt = std::numeric_limits<float>::max();
1099 if (nLegs >= 2 * sizeof(r.ranking)) {
1101 "Implementation currently doesn't support ranking of more than "
1102 << 2 * sizeof(r.ranking) << " trigger legs");
1103 return r;
1104 }
1105 std::vector<uint8_t> counts(nLegs);
1106
1110 auto legI = legs.begin();
1111 for (unsigned i = 0; i < nLegs; ++i) {
1112 auto legJ = legI;
1113 for (unsigned j = i + 1; j < nLegs; ++j) {
1114 ++legJ;
1115 bool found = false;
1116 for (auto& meta : m_hierarchyMeta) {
1117 if (pt < meta.minPt || pt >= meta.maxPt)
1118 continue;
1119 auto data = m_hierarchyData.begin() + meta.offset;
1120 auto end = data + meta.nLegs;
1121 auto a = std::find(data, end, *legI);
1122 if (a == end)
1123 continue;
1124 auto b = std::find(data, end, *legJ);
1125 if (b == end)
1126 continue;
1127 r.minPt = std::max(r.minPt, meta.minPt);
1128 r.maxPt = std::min(r.maxPt, meta.maxPt);
1129 ++(counts[(a > b) ? i : j]);
1130 found = true;
1131 break;
1132 }
1133 if (!found) {
1136 ATH_MSG_ERROR("Unable to rank trigger legs "
1137 << m_dictionary[*legI] << " and " << m_dictionary[*legJ]);
1138 return r;
1139 }
1140 }
1141 ++legI;
1142 }
1143 decltype(r.ranking) ranking = 0;
1144 for (unsigned i = 0; i < nLegs; ++i) {
1145 unsigned char index =
1146 std::find(counts.begin(), counts.end(), i) - counts.begin();
1147 if (index >= nLegs) {
1148 ATH_MSG_ERROR("Inconsistency found while trying to rank "
1149 << nLegs << " trigger legs");
1150 return r;
1151 }
1152 ranking = (ranking << 4 | index);
1153 }
1154 r.ranking = ranking;
1155 return r;
1156}
static Double_t a
#define max(a, b)
Definition cfImp.cxx:41
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)

◆ recommendedSystematics()

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

the list of all systematics this tool recommends to use

Implements CP::IReentrantSystematicsTool.

Definition at line 1238 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1239 {
1240 return {};
1241}

◆ 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 802 of file TrigGlobalEfficiencyCorrectionTool.cxx.

803 {
804 auto eventInfo = evtStore()->retrieve<const xAOD::EventInfo>("EventInfo");
805 if (!eventInfo) {
806 ATH_MSG_WARNING("Can't retrieve event number from evtStore()");
807 eventNumber = 0;
808 return false;
809 }
810 eventNumber = eventInfo->eventNumber();
811 return true;
812}
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 783 of file TrigGlobalEfficiencyCorrectionTool.cxx.

784 {
785 runNumber = 0;
786 auto eventInfo = evtStore()->retrieve<const xAOD::EventInfo>("EventInfo");
787 if (!eventInfo) {
788 ATH_MSG_ERROR("Can't retrieve 'EventInfo' from evtStore()");
789 return false;
790 }
791 if (eventInfo->eventType(xAOD::EventInfo::IS_SIMULATION)) {
792 if (!m_runNumberDecorator.isAvailable(*eventInfo)) {
793 ATH_MSG_ERROR("Can't retrieve 'RandomRunNumber' from EventInfo");
794 return false;
795 }
796 runNumber = m_runNumberDecorator(*eventInfo);
797 } else
798 runNumber = eventInfo->runNumber();
799 return true;
800}
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 1217 of file TrigGlobalEfficiencyCorrectionTool.cxx.

1220 {
1222 bool success =
1223 data.suggestEgammaMapKeys(triggerCombination, version, legsPerKey, type);
1225}

◆ 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 >, and AthCheckedComponent<::AthAlgTool >.

◆ 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 815 of file TrigGlobalEfficiencyCorrectionTool.cxx.

816 {
817 for (auto lep : particles) {
818 std::size_t tag = 0;
819 for (auto& ltd : m_leptonTagDecorators) {
820 if (ltd.decorator.isAvailable(*lep)) {
821 char v = ltd.decorator(*lep);
822 if (v) {
823 if (ltd.suffixed)
824 {
825 std::string s = m_dictionary.at(ltd.hash) + std::to_string(v);
826 tag = m_hasher(s);
827 m_dictionary.emplace(tag, s);
828 } else
829 tag = ltd.hash;
830 }
831 }
832 }
833 leptons.emplace_back(lep, tag);
834 }
835 return true;
836}

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

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

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