ATLAS Offline Software
Loading...
Searching...
No Matches
ST::SUSYObjDef_xAOD Class Reference

#include <SUSYObjDef_xAOD.h>

Inheritance diagram for ST::SUSYObjDef_xAOD:

Public Types

enum  DataSource { Undefined = -1 , Data , FullSim , AtlfastII }
Definition of the StoreGate-like object's definition
typedef ServiceHandle< StoreGateSvcMetaStore_t
 Type of the metadata store object in Athena.
typedef const ServiceHandle< StoreGateSvc > & MetaStorePtr_t
 Type of the metadata store pointer in standalone mode.

Public Member Functions

 SUSYObjDef_xAOD (const std::string &name)
 ~SUSYObjDef_xAOD ()
StatusCode initialize () override final
 Dummy implementation of the initialisation function.
bool isData () const override final
bool isAtlfast () const override final
StatusCode setBoolProperty (const std::string &name, const bool &property) override final
void setDataSource (int source)
StatusCode FillJet (xAOD::Jet &input, const bool doCalib=true, bool isFat=false, bool doLargeRdecorations=false) override final
StatusCode FillTrackJet (xAOD::Jet &input) override final
StatusCode FillTau (xAOD::TauJet &input) override final
StatusCode FillMuon (xAOD::Muon &input, const float ptcut, const float etacut) override final
StatusCode FillElectron (xAOD::Electron &input, const float etcut, const float etacut) override final
StatusCode FillPhoton (xAOD::Photon &input, const float ptcut, const float etacut) override final
const xAOD::VertexGetPrimVtx () const override final
StatusCode GetJets (xAOD::JetContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &jetkey="", const xAOD::JetContainer *containerToBeCopied=nullptr) override final
StatusCode GetTrackJets (xAOD::JetContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &jetkey="", const xAOD::JetContainer *containerToBeCopied=nullptr) override final
StatusCode GetJetsSyst (const xAOD::JetContainer &calibjets, xAOD::JetContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &jetkey="") override final
StatusCode GetFatJets (xAOD::JetContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=false, const std::string &jetkey="", const bool doLargeRdecorations=false, const xAOD::JetContainer *containerToBeCopied=nullptr) override final
StatusCode GetTaus (xAOD::TauJetContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &taukey="TauJets", const xAOD::TauJetContainer *containerToBeCopied=nullptr) override final
StatusCode GetMuons (xAOD::MuonContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &muonkey="Muons", const std::string &lrtmuonkey="MuonsLRT", const xAOD::MuonContainer *containerToBeCopied=nullptr) override final
StatusCode GetElectrons (xAOD::ElectronContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &elekey="Electrons", const std::string &lrtelekey="LRTElectrons", const xAOD::ElectronContainer *containerToBeCopied=nullptr) override final
StatusCode GetPhotons (xAOD::PhotonContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &photonkey="Photons", const xAOD::PhotonContainer *containerToBeCopied=nullptr) override final
StatusCode GetMET (xAOD::MissingETContainer &met, const xAOD::JetContainer *jet, const xAOD::ElectronContainer *elec=nullptr, const xAOD::MuonContainer *muon=nullptr, const xAOD::PhotonContainer *gamma=nullptr, const xAOD::TauJetContainer *taujet=nullptr, bool doTST=true, bool doJVTCut=true, const xAOD::IParticleContainer *invis=nullptr) override final
StatusCode GetTrackMET (xAOD::MissingETContainer &met, const xAOD::JetContainer *jet, const xAOD::ElectronContainer *elec=nullptr, const xAOD::MuonContainer *muon=nullptr) override final
StatusCode GetMETSig (xAOD::MissingETContainer &met, double &metSignificance, bool doTST=true, bool doJVTCut=true) override final
StatusCode MergeMuons (const xAOD::MuonContainer &muons, const std::vector< bool > &writeMuon, xAOD::MuonContainer *outputCol) const override final
StatusCode prepareLRTMuons (const xAOD::MuonContainer *inMuons, xAOD::MuonContainer *copy) const override final
StatusCode MergeElectrons (const xAOD::ElectronContainer &electrons, xAOD::ElectronContainer *outputCol, const std::set< const xAOD::Electron * > &ElectronsToRemove) const override final
StatusCode prepareLRTElectrons (const xAOD::ElectronContainer *inMuons, xAOD::ElectronContainer *copy) const override final
StatusCode SetBtagWeightDecorations (const xAOD::Jet &input, const asg::AnaToolHandle< IBTaggingSelectionTool > &btagSelTool, const std::string &btagTagger) const override final
bool IsSignalJet (const xAOD::Jet &input, const float ptcut, const float etacut) const override final
bool IsBadJet (const xAOD::Jet &input) const override final
bool IsBJetLoose (const xAOD::Jet &input) const override final
bool JetPassJVT (xAOD::Jet &input) override final
bool IsSignalMuon (const xAOD::Muon &input, const float ptcut, const float d0sigcut, const float z0cut, const float etacut=DUMMYDEF) const override final
bool IsSignalElectron (const xAOD::Electron &input, const float etcut, const float d0sigcut, const float z0cut, const float etacut=DUMMYDEF) const override final
bool IsCosmicMuon (const xAOD::Muon &input, const float z0cut, const float d0cut) const override final
bool IsHighPtMuon (const xAOD::Muon &input) const override final
bool IsSignalTau (const xAOD::TauJet &input, const float ptcut, const float etacut) const override final
bool IsBadMuon (const xAOD::Muon &input, const float qopcut) const override final
bool IsSignalPhoton (const xAOD::Photon &input, const float ptcut, const float etacut=DUMMYDEF) const override final
bool IsBJet (const xAOD::Jet &input) const override final
bool IsTrackBJet (const xAOD::Jet &input) const override final
bool IsTruthBJet (const xAOD::Jet &input) const override final
int IsBJetContinuous (const xAOD::Jet &input) const override final
int IsTrackBJetContinuous (const xAOD::Jet &input) const override final
float BtagSF (const xAOD::JetContainer *jets) override final
float BtagSFsys (const xAOD::JetContainer *jets, const CP::SystematicSet &systConfig) override final
float BtagSF_trkJet (const xAOD::JetContainer *trkjets) override final
float BtagSFsys_trkJet (const xAOD::JetContainer *trkjets, const CP::SystematicSet &systConfig) override final
double JVT_SF (const xAOD::JetContainer *jets) override final
double JVT_SFsys (const xAOD::JetContainer *jets, const CP::SystematicSet &systConfig) override final
double FJVT_SF (const xAOD::JetContainer *jets) override final
double FJVT_SFsys (const xAOD::JetContainer *jets, const CP::SystematicSet &systConfig) override final
float GetSignalMuonSF (const xAOD::Muon &mu, const bool recoSF=true, const bool isoSF=true, const bool doBadMuonHP=true, const bool warnOVR=true) override final
double GetMuonTriggerEfficiency (const xAOD::Muon &mu, const std::string &trigExpr, const bool isdata=false) override final
double GetTotalMuonTriggerSF (const xAOD::MuonContainer &sfmuons, const std::string &trigExpr) override final
double GetTotalMuonSF (const xAOD::MuonContainer &muons, const bool recoSF=true, const bool isoSF=true, const std::string &trigExpr="HLT_mu20_iloose_L1MU15_OR_HLT_mu50", const bool bmhptSF=true) override final
double GetTotalMuonSFsys (const xAOD::MuonContainer &muons, const CP::SystematicSet &systConfig, const bool recoSF=true, const bool isoSF=true, const std::string &trigExpr="HLT_mu20_iloose_L1MU15_OR_HLT_mu50", const bool bmhptSF=true) override final
float GetSignalElecSF (const xAOD::Electron &el, const bool recoSF=true, const bool idSF=true, const bool triggerSF=true, const bool isoSF=true, const std::string &trigExpr="singleLepton", const bool ecidsSF=false, const bool cidSF=false) override final
double GetEleTriggerEfficiency (const xAOD::Electron &el, const std::string &trigExpr="SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0") const override final
double GetTriggerGlobalEfficiency (const xAOD::ElectronContainer &electrons, const xAOD::MuonContainer &muons, const std::string &trigExpr="diLepton") override final
double GetTriggerGlobalEfficiency (const xAOD::PhotonContainer &photons, const std::string &trigExpr="diPhoton") override final
double GetEleTriggerEfficiencySF (const xAOD::Electron &el, const std::string &trigExpr="SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0") const override final
double GetTriggerGlobalEfficiencySF (const xAOD::ElectronContainer &electrons, const xAOD::MuonContainer &muons, const std::string &trigExpr="diLepton") override final
double GetTriggerGlobalEfficiencySF (const xAOD::PhotonContainer &photons, const std::string &trigExpr="diPhoton") override final
double GetTriggerGlobalEfficiencySFsys (const xAOD::ElectronContainer &electrons, const xAOD::MuonContainer &muons, const CP::SystematicSet &systConfig, const std::string &trigExpr="diLepton") override final
double GetTriggerGlobalEfficiencySFsys (const xAOD::PhotonContainer &photons, const CP::SystematicSet &systConfig, const std::string &trigExpr="diPhoton") override final
float GetTotalElectronSF (const xAOD::ElectronContainer &electrons, const bool recoSF=true, const bool idSF=true, const bool triggerSF=true, const bool isoSF=true, const std::string &trigExpr="singleLepton", const bool ecidsSF=false, const bool cidSF=false) override final
float GetTotalElectronSFsys (const xAOD::ElectronContainer &electrons, const CP::SystematicSet &systConfig, const bool recoSF=true, const bool idSF=true, const bool triggerSF=true, const bool isoSF=true, const std::string &trigExpr="singleLepton", const bool ecidsSF=false, const bool cidSF=false) override final
double GetSignalTauSF (const xAOD::TauJet &tau, const bool idSF=true, const bool triggerSF=true, const std::string &trigExpr="tau25_medium1_tracktwo") override final
double GetSignalTauSFsys (const xAOD::TauJet &tau, const CP::SystematicSet &systConfig, const bool idSF=true, const bool triggerSF=true, const std::string &trigExpr="tau25_medium1_tracktwo") override final
double GetTauTriggerEfficiencySF (const xAOD::TauJet &tau, const std::string &trigExpr="tau25_medium1_tracktwo") override final
double GetTotalTauSF (const xAOD::TauJetContainer &taus, const bool idSF=true, const bool triggerSF=true, const std::string &trigExpr="tau25_medium1_tracktwo") override final
double GetTotalTauSFsys (const xAOD::TauJetContainer &taus, const CP::SystematicSet &systConfig, const bool idSF=true, const bool triggerSF=true, const std::string &trigExpr="tau25_medium1_tracktwo") override final
double GetSignalPhotonSF (const xAOD::Photon &ph, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) const override final
double GetSignalPhotonSFsys (const xAOD::Photon &ph, const CP::SystematicSet &systConfig, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) override final
double GetTotalPhotonSF (const xAOD::PhotonContainer &photons, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) const override final
double GetTotalPhotonSFsys (const xAOD::PhotonContainer &photons, const CP::SystematicSet &systConfig, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) override final
double GetTotalJetSF (const xAOD::JetContainer *jets, const bool btagSF=true, const bool jvtSF=true, const bool fjvtSF=false) override final
double GetTotalJetSFsys (const xAOD::JetContainer *jets, const CP::SystematicSet &systConfig, const bool btagSF=true, const bool jvtSF=true, const bool fjvtSF=false) override final
bool IsMETTrigPassed (unsigned int runnumber=0, bool j400_OR=false) const override final
bool IsMETTrigPassed (const std::string &triggerName, bool j400_OR=false, const std::string &L1_name="L1_XE50") const override final
bool IsTrigPassed (const std::string &, unsigned int condition=TrigDefs::Physics) const override final
bool IsTrigMatched (const xAOD::IParticle *part, const std::string &tr_item) override final
bool IsTrigMatched (const xAOD::IParticle *part1, const xAOD::IParticle *part2, const std::string &tr_item) override final
bool IsTrigMatched (const std::vector< const xAOD::IParticle * > &v, const std::string &tr_item) override final
bool IsTrigMatched (const std::initializer_list< const xAOD::IParticle * > &v, const std::string &tr_item) override final
void TrigMatch (const xAOD::IParticle *p, std::initializer_list< std::string >::iterator, std::initializer_list< std::string >::iterator) override final
void TrigMatch (const xAOD::IParticle *p, const std::vector< std::string > &items) override final
void TrigMatch (const xAOD::IParticle *p, const std::initializer_list< std::string > &items) override final
void TrigMatch (const xAOD::IParticleContainer *v, const std::vector< std::string > &items) override final
void TrigMatch (const xAOD::IParticleContainer *v, const std::initializer_list< std::string > &items) override final
void TrigMatch (const std::initializer_list< const xAOD::IParticle * > &v, const std::vector< std::string > &items) override final
void TrigMatch (const std::initializer_list< const xAOD::IParticle * > &v, const std::initializer_list< std::string > &items) override final
void TrigMatch (const xAOD::IParticle *p, const std::string &item) override final
void TrigMatch (const xAOD::IParticleContainer *v, const std::string &item) override final
void TrigMatch (const std::initializer_list< const xAOD::IParticle * > &v, const std::string &item) override final
float GetTrigPrescale (const std::string &) const override final
const Trig::ChainGroupGetTrigChainGroup (const std::string &) const override final
std::vector< std::string > GetTriggerOR (const std::string &trigExpr) const
void GetTriggerTokens (std::string, std::vector< std::string > &, std::vector< std::string > &, std::vector< std::string > &, std::vector< std::string > &, std::vector< std::string > &, std::vector< std::string > &, std::vector< std::string > &) const
Trig::FeatureContainer GetTriggerFeatures (const std::string &chainName="EF_.*", unsigned int condition=TrigDefs::Physics) const
const xAOD::EventInfoGetEventInfo () const override final
float GetPileupWeight () override final
float GetPileupWeightPrescaledTrigger (const std::string &trigger_expr) override final
ULong64_t GetPileupWeightHash () override final
float GetDataWeight (const std::string &) override final
float GetCorrectedAverageInteractionsPerCrossing (bool includeDataSF=false) override final
float GetCorrectedActualInteractionsPerCrossing (bool includeDataSF=false) override final
double GetSumOfWeights (int channel) override final
unsigned int GetRandomRunNumber (bool muDependentRRN=true) override final
StatusCode ApplyPRWTool (bool muDependentRRN=true) override final
unsigned int GetRunNumber () const override final
const xAOD::TrackParticleContainerGetInDetLargeD0Tracks (const EventContext &ctx) const override final
const xAOD::TrackParticleContainerGetInDetLargeD0GSFTracks (const EventContext &ctx) const override final
StatusCode ApplyLRTUncertainty () override final
int treatAsYear (const int runNumber=-1) const override final
StatusCode OverlapRemoval (const xAOD::ElectronContainer *electrons, const xAOD::MuonContainer *muons, const xAOD::JetContainer *jets, const xAOD::PhotonContainer *gamma=nullptr, const xAOD::TauJetContainer *taujet=nullptr, const xAOD::JetContainer *fatjets=nullptr) override final
StatusCode NearbyLeptonCorrections (xAOD::ElectronContainer *electrons=nullptr, xAOD::MuonContainer *muons=nullptr) const override final
StatusCode resetSystematics () override final
const CP::SystematicSetcurrentSystematic () const
StatusCode applySystematicVariation (const CP::SystematicSet &systConfig) override final
bool isPrompt (const xAOD::IParticle *part) const override final
StatusCode FindSusyHP (int &pdgid1, int &pdgid2) const
StatusCode FindSusyHP (const xAOD::TruthParticleContainer *truthP, int &pdgid1, int &pdgid2, bool isTruth3=false) const override final
StatusCode FindSusyHP (const xAOD::TruthEvent *truthE, int &pdgid1, int &pdgid2) const override final
std::string TrigSingleLep () const override final
bool isNominal (const CP::SystematicSet &syst) const
bool isWeight (const CP::SystematicSet &systSet) const
bool isVariation (const CP::SystematicSet &syst) const
bool currentSystematicIsNominal () const
bool currentSystematicIsVariation () const
bool currentSystematicIsWeight () const
ST::SystInfo getSystInfo (const CP::SystematicVariation &sys) const override final
std::vector< ST::SystInfogetSystInfoList () const override final
float getSherpaVjetsNjetsWeight () const override final
float getSherpaVjetsNjetsWeight (const std::string &jetContainer) const override final
int getMCShowerType (const std::string &sample_name="", const std::string &tagger="") const override final
template<typename T>
const T * getProperty (const std::string &name)
virtual StatusCode sysInitialize ()
 Function initialising the tool in the correct way in Athena.
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 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
Functions providing access to the input/output metadata
MetaStorePtr_t inputMetaStore () const
 Accessor for the input metadata store.
MetaStorePtr_t outputMetaStore () const
 Accessor for the output metadata store.
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 bool FindSusyHardProc (const xAOD::TruthParticleContainer *truthP, int &pdgid1, int &pdgid2, bool isTruth3=false)
static bool FindSusyHardProc (const xAOD::TruthEvent *truthE, int &pdgid1, int &pdgid2)

Public Attributes

const xAOD::MuonContainerprompt_muons = nullptr
const xAOD::MuonContainerlrt_muons = nullptr
const xAOD::ElectronContainerprompt_electrons = nullptr
const xAOD::ElectronContainerlrt_electrons = nullptr

Protected Member Functions

StatusCode autoconfigurePileupRWTool (const std::string &PRWfilesDir="dev/PileupReweighting/share/", const std::string &PRWfileName="", bool usePathResolver=true, bool RPVLLmode=false, bool Combinedmode=false, const std::string &HFFilter="")
StatusCode readConfig () override final
StatusCode validConfig (bool strict=false) const
const std::vector< std::string > split (const std::string &s, const std::string &delim) const
std::string getDefaultJetUncConfig ()
void getTauConfig (const std::string &tauConfigPath, std::vector< float > &pT_window, std::vector< float > &eta_window, bool &eleOLR, bool &muVeto, bool &muOLR) const
void configFromFile (bool &property, const std::string &propname, TEnv &rEnv, bool defaultValue)
void configFromFile (double &property, const std::string &propname, TEnv &rEnv, double defaultValue)
void configFromFile (int &property, const std::string &propname, TEnv &rEnv, int defaultValue)
void configFromFile (std::string &property, const std::string &propname, TEnv &rEnv, const std::string &defaultValue, bool allowEmpty=false)
bool check_isOption (const std::string &wp, const std::vector< std::string > &list) const
bool check_isTighter (const std::string &wp1, const std::string &wp, const std::vector< std::string > &list) const
std::string EG_WP (const std::string &wp) const
std::vector< std::string > getElSFkeys (const std::string &mapFile) const
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.
Callback functions helping in metadata reading/writing
void setUseIncidents (const bool flag)
virtual void handle (const Incident &inc)
 Function receiving incidents from IncidentSvc/TEvent.
virtual StatusCode beginInputFile ()
 Function called when a new input file is opened.
virtual StatusCode endInputFile ()
 Function called when the currently open input file got completely processed.
virtual StatusCode beginEvent ()
 Function called when a new events is loaded.
virtual StatusCode metaDataStop ()
 Function called when the tool should write out its metadata.

Protected Attributes

int m_dataSource
int m_jetInputType
std::string m_configFile
bool m_force_noElId
bool m_force_noMuId
bool m_doTTVAsf
bool m_doModifiedEleId
bool m_upstreamTriggerMatching
std::string m_trigMatchingPrefix
 Use composite trigger matching tool if matching was done upstream.
std::string m_jetUncertaintiesConfig
 Prefix for trigger matchiing container name.
std::string m_jetUncertaintiesAnalysisFile
std::string m_jetUncertaintiesCalibArea
std::string m_jetUncertaintiesMCType
std::string m_fatJetUncertaintiesMCType
bool m_jetUncertaintiesPDsmearing
bool m_useBtagging
bool m_useBtagging_trkJet
bool m_debug
bool m_strictConfigCheck
std::string m_badJetCut
std::string m_fatJetUncConfig
bool m_fatJetUncertaintiesPDsmearing
std::string m_fatJetUncVars
TEnv m_WconfigReader
TEnv m_ZconfigReader
TEnv m_TopconfigReader
std::string m_WDecorName
std::string m_ZDecorName
std::string m_TopDecorName
std::string m_WtagConfig
std::string m_ZtagConfig
std::string m_ToptagConfig
std::string m_WZTaggerCalibArea
std::string m_TopTaggerCalibArea
std::string m_WTagUncConfig
std::string m_ZTagUncConfig
std::string m_TopTagUncConfig
std::string m_JetTruthLabelName
bool m_tool_init
bool m_subtool_init
std::string m_eleTerm
std::string m_gammaTerm
std::string m_tauTerm
std::string m_jetTerm
std::string m_muonTerm
std::string m_inputMETSuffix
std::string m_inputMETMap
std::string m_inputMETCore
std::string m_inputMETRef
std::string m_outMETTerm
bool m_metRemoveOverlappingCaloTaggedMuons
bool m_metDoSetMuonJetEMScale
bool m_metDoRemoveMuonJets
bool m_metUseGhostMuons
bool m_metDoMuonEloss
bool m_metGreedyPhotons
bool m_metVeryGreedyPhotons
std::string m_metsysConfigPrefix
bool m_trkMETsyst
bool m_caloMETsyst
bool m_trkJetsyst
int m_softTermParam
bool m_treatPUJets
bool m_doPhiReso
bool m_autoconfigPRW
std::string m_autoconfigPRWPath
std::string m_autoconfigPRWFile
bool m_autoconfigPRWCombinedmode
bool m_autoconfigPRWRPVmode
std::string m_autoconfigPRWRtags
std::string m_mcCampaign
int m_mcChannel
bool m_useCommonPRWFiles
std::string m_commonPRWFileMC20a
std::string m_commonPRWFileMC20d
std::string m_commonPRWFileMC20e
std::string m_commonPRWFileMC21a
std::string m_commonPRWFileMC23a
std::string m_commonPRWFileMC23c
std::string m_commonPRWFileMC23d
std::string m_commonPRWFileMC23e
std::vector< std::string > m_prwConfFiles
std::vector< std::string > m_prwLcalcFiles
std::string m_prwActualMu2017File
std::string m_prwActualMu2018File
std::string m_prwActualMu2022File
std::string m_prwActualMu2023File
std::string m_prwActualMu2024File
double m_prwDataSF
double m_prwDataSF_UP
double m_prwDataSF_DW
bool m_runDepPrescaleWeightPRW
std::vector< std::string > m_el_id_support
std::vector< std::string > m_ph_id_support
int m_mu_id_support
std::vector< std::string > m_tau_id_support
std::vector< std::string > m_el_iso_support
std::vector< std::string > m_mu_iso_support
std::map< std::string, std::string > m_el_iso_fallback
std::map< std::string, std::string > m_mu_iso_fallback
std::string m_electronTriggerSFStringSingle
std::map< std::string, std::string > m_tau_trig_support
std::string m_eleId
std::string m_eleIdBaseline
std::string m_eleConfig
std::string m_eleConfigBaseline
std::string m_eleBaselineIso_WP
bool m_eleIdExpert
int m_muId
int m_muIdBaseline
std::string m_photonId
std::string m_photonIdBaseline
std::string m_tauId
std::string m_tauIdBaseline
std::string m_eleIso_WP
std::string m_eleIsoHighPt_WP
double m_eleIsoHighPtThresh
std::string m_eleChID_WP
bool m_eleLRT
int m_eleLRT_strat
bool m_eleChIso
bool m_eleChID_signal
bool m_runECIS
std::string m_photonBaselineIso_WP
std::string m_photonIso_WP
std::string m_photonTriggerName
std::string m_muBaselineIso_WP
std::string m_muIso_WP
std::string m_muIsoHighPt_WP
double m_muIsoHighPtThresh
bool m_muHighPtExtraSmear
bool m_muEffCorrForce1D
std::string m_muTriggerSFCalibRelease
std::string m_muTriggerSFCalibFilename
std::string m_BtagWP
std::string m_BtagTagger
double m_BtagMinPt
std::string m_BtagKeyOverride
std::string m_BtagSystStrategy
std::string m_EigenvectorReductionB
std::string m_EigenvectorReductionC
std::string m_EigenvectorReductionLight
std::string m_BtagWP_trkJet
std::string m_BtagTagger_trkJet
double m_BtagMinPt_trkJet
double m_eleBaselinePt
double m_eleBaselineEta
bool m_eleBaselineCrackVeto
double m_elePt
double m_eleEta
bool m_eleCrackVeto
double m_eled0sig
double m_elez0
double m_elebaselined0sig
double m_elebaselinez0
std::string m_eleEffMapFilePath
std::string m_eleEffMapFilePathRun2
bool m_eleAllowRun3TrigSFFallback
bool m_eleForceFullSimCalib
double m_muBaselinePt
double m_muBaselineEta
double m_muPt
double m_muEta
double m_mud0sig
double m_muz0
double m_mubaselined0sig
double m_mubaselinez0
bool m_murequirepassedHighPtCuts
double m_muCosmicz0
double m_muCosmicd0
double m_badmuQoverP
int m_muCalibrationMode
bool m_muLRT
double m_photonBaselinePt
double m_photonBaselineEta
double m_photonEta
double m_photonPt
bool m_photonBaselineCrackVeto
bool m_photonCrackVeto
bool m_photonAllowLate
double m_tauPrePtCut
double m_tauPt
double m_tauEta
std::string m_tauConfigPath
std::string m_tauConfigPathBaseline
bool m_tauDoTTM
std::string m_tauSmearingToolRecommendationTag
std::string m_tauEffToolRecommendationTag
std::string m_tauSmearingToolGenerator
bool m_ApplyMVATESQualityCheck
TEnv m_tauConfigReader
double m_jetPt
double m_jetEta
double m_jetJvt
std::string m_JvtWP
double m_JvtPtMax
std::string m_JvtConfigRun2
std::string m_JvtConfigRun3
double m_trkJetPt
double m_trkJetEta
bool m_doFwdJVT
std::string m_fJvtWP
double m_fJvtPtMax
double m_fJvtEtaMin
std::string m_fJvtConfigRun2
std::string m_fJvtConfigRun3
bool m_JMScalib
bool m_orDoTau
 Overlap removal options.
bool m_orDoPhoton
bool m_orDoEleJet
bool m_orDoElEl
bool m_orDoElMu
bool m_orDoMuonJet
bool m_orDoBjet
bool m_orDoElBjet
bool m_orDoMuBjet
bool m_orDoTauBjet
bool m_orDoBoostedElectron
double m_orBoostedElectronC1
double m_orBoostedElectronC2
double m_orBoostedElectronMaxConeSize
bool m_orDoBoostedMuon
double m_orBoostedMuonC1
double m_orBoostedMuonC2
double m_orBoostedMuonMaxConeSize
bool m_orApplyRelPt
double m_orMuJetPtRatio
double m_orMuJetTrkPtRatio
double m_orMuJetInnerDR
bool m_orDoMuonJetGhostAssociation
bool m_orRemoveCaloMuons
std::string m_orBtagWP
std::string m_orInputLabel
bool m_orPhotonFavoured
double m_orBJetPtUpperThres
bool m_orLinkOverlapObjects
bool m_orDoFatjets
double m_EleFatJetDR
double m_JetFatJetDR
bool m_doIsoSignal
bool m_doElIsoSignal
bool m_doPhIsoSignal
bool m_doMuIsoSignal
bool m_useSigLepForIsoCloseByOR
std::string m_IsoCloseByORpassLabel
bool m_useTRUTH3
std::map< std::string, boolm_slices
bool m_isRun3
bool m_isPHYSLITE
std::string m_metJetSelection
int m_showerType
std::string m_defaultJets
std::string m_defaultTrackJets
std::string m_fatJets
std::string m_defaultTruthJets
CP::SystematicSet m_defaultSyst = CP::SystematicSet()
CP::SystematicSet m_currentSyst
std::vector< CP::SystematicSetm_fatjetFFSmearingSyst
std::string m_EG_corrModel
std::string m_EG_corrFNList
bool m_applyJVTCut
std::string m_bTaggingCalibrationFilePath
std::map< std::string, std::string > m_legsPerTool
std::map< std::string, std::string > m_legsPerTool_ph
asg::AnaToolHandle< IJetCalibrationToolm_jetCalibTool
asg::AnaToolHandle< IJetCalibrationToolm_jetFatCalibTool
asg::AnaToolHandle< ICPJetUncertaintiesToolm_jetUncertaintiesTool
asg::AnaToolHandle< ICPJetUncertaintiesToolm_jetUncertaintiesPDSmearTool
asg::AnaToolHandle< ICPJetUncertaintiesToolm_fatjetUncertaintiesTool
asg::AnaToolHandle< ICPJetUncertaintiesToolm_fatjetUncertaintiesPDSmearTool
asg::AnaToolHandle< ICPJetCorrectionToolm_fatjetFFSmearingTool
asg::AnaToolHandle< IJetSelectorm_jetCleaningTool
asg::AnaToolHandle< JetPileupLabelingToolm_jetPileupLabelingTool
asg::AnaToolHandle< JetVertexTaggerToolm_jetJvtMomentTool
asg::AnaToolHandle< JetPileupTag::JetVertexNNTaggerm_jetNNJvtMomentTool
asg::AnaToolHandle< IAsgSelectionToolm_jetNNJvtSelectionTool
asg::AnaToolHandle< CP::IJvtEfficiencyToolm_jetNNJvtEfficiencyTool
asg::AnaToolHandle< IAsgSelectionToolm_jetfJvtSelectionTool
asg::AnaToolHandle< CP::IJvtEfficiencyToolm_jetfJvtEfficiencyTool
asg::AnaToolHandle< SmoothedWZTaggerm_WTaggerTool
asg::AnaToolHandle< SmoothedWZTaggerm_ZTaggerTool
asg::AnaToolHandle< JSSWTopTaggerDNNm_TopTaggerTool
asg::AnaToolHandle< JetTruthLabelingToolm_jetTruthLabelingTool
asg::AnaToolHandle< ICPJetUncertaintiesToolm_WTagjetUncertaintiesTool
asg::AnaToolHandle< ICPJetUncertaintiesToolm_ZTagjetUncertaintiesTool
asg::AnaToolHandle< ICPJetUncertaintiesToolm_TopTagjetUncertaintiesTool
SG::ReadDecorHandleKey< xAOD::JetContainerm_label_truthKey
std::string m_jesConfig
std::string m_jesConfigJMS
std::string m_jesConfigJMSData
std::string m_jesConfigAFII
std::string m_jesConfigFat
std::string m_jesConfigFatData
std::string m_jesCalibSeq
std::string m_jesCalibSeqJMS
std::string m_jesCalibSeqFat
std::string m_jesCalibArea
asg::AnaToolHandle< CP::IMuonSelectionToolm_muonSelectionTool
asg::AnaToolHandle< CP::IMuonSelectionToolm_muonSelectionHighPtTool
asg::AnaToolHandle< CP::IMuonSelectionToolm_muonSelectionToolBaseline
asg::AnaToolHandle< CP::IMuonCalibrationAndSmearingToolm_muonCalibTool
asg::AnaToolHandle< CP::IMuonEfficiencyScaleFactorsm_muonEfficiencySFTool
asg::AnaToolHandle< CP::IMuonEfficiencyScaleFactorsm_muonEfficiencyBMHighPtSFTool
asg::AnaToolHandle< CP::IMuonEfficiencyScaleFactorsm_muonTTVAEfficiencySFTool
asg::AnaToolHandle< CP::IMuonEfficiencyScaleFactorsm_muonIsolationSFTool
asg::AnaToolHandle< CP::IMuonEfficiencyScaleFactorsm_muonHighPtIsolationSFTool
asg::AnaToolHandle< CP::IMuonTriggerScaleFactorsm_muonTriggerSFTool
ToolHandleArray< CP::IMuonTriggerScaleFactorsm_muonTrigSFTools
asg::AnaToolHandle< CP::IMuonLRTOverlapRemovalToolm_muonLRTORTool
SG::WriteHandleKey< xAOD::MuonContainerm_outMuonLocation {this, "OutputMuonLocation", "StdWithLRTMuons", "name of the muon container to write"}
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionToolm_elecEfficiencySFTool_reco
 Combined muon collection.
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionToolm_elecEfficiencySFTool_id
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionToolm_elecEfficiencySFTool_trig_singleLep
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionToolm_elecEfficiencySFTool_trigEff_singleLep
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionToolm_elecEfficiencySFTool_iso
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionToolm_elecEfficiencySFTool_isoHighPt
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionToolm_elecEfficiencySFTool_chf
std::vector< asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionTool > > m_elecEfficiencySFTool_trig_mixLep
std::vector< asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionTool > > m_elecEfficiencySFTool_trigEff_mixLep
ToolHandleArray< IAsgElectronEfficiencyCorrectionToolm_elecTrigSFTools
ToolHandleArray< IAsgElectronEfficiencyCorrectionToolm_elecTrigEffTools
asg::AnaToolHandle< CP::IElectronLRTOverlapRemovalToolm_elecLRTORTool
SG::WriteHandleKey< xAOD::ElectronContainerm_outElectronLocation {this, "OutputElectronLocation", "StdWithLRTElectrons", "name of the muon container to write"}
asg::AnaToolHandle< CP::IEgammaCalibrationAndSmearingToolm_egammaCalibTool
 Combined electron collection.
asg::AnaToolHandle< IAsgElectronLikelihoodToolm_elecSelLikelihood
asg::AnaToolHandle< IAsgElectronLikelihoodToolm_elecSelLikelihoodBaseline
asg::AnaToolHandle< IAsgPhotonIsEMSelectorm_photonSelIsEM
asg::AnaToolHandle< IAsgPhotonIsEMSelectorm_photonSelIsEMBaseline
asg::AnaToolHandle< IAsgDeadHVCellRemovalToolm_deadHVTool
asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionToolm_photonEfficiencySFTool
asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionToolm_photonIsolationSFTool
asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionToolm_photonTriggerSFTool
std::vector< asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionTool > > m_photonEfficiencySFTool_trigSF_AsymDiphoton
std::vector< asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionTool > > m_photonEfficiencySFTool_trigEff_AsymDiphoton
ToolHandleArray< IAsgPhotonEfficiencyCorrectionToolm_photonTrigSFTools
ToolHandleArray< IAsgPhotonEfficiencyCorrectionToolm_photonTrigEffTools
asg::AnaToolHandle< IEGammaAmbiguityToolm_egammaAmbiguityTool
asg::AnaToolHandle< IAsgElectronLikelihoodToolm_elecChargeIDSelectorTool
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionToolm_elecChargeEffCorrTool
asg::AnaToolHandle< TauAnalysisTools::ITauSelectionToolm_tauSelTool
asg::AnaToolHandle< TauAnalysisTools::ITauSelectionToolm_tauSelToolBaseline
asg::AnaToolHandle< TauAnalysisTools::ITauSmearingToolm_tauSmearingTool
asg::AnaToolHandle< TauAnalysisTools::ITauTruthMatchingToolm_tauTruthMatch
asg::AnaToolHandle< TauAnalysisTools::ITauEfficiencyCorrectionsToolm_tauEffTool
std::vector< asg::AnaToolHandle< TauAnalysisTools::ITauEfficiencyCorrectionsTool > > m_tauTrigEffTool
asg::AnaToolHandle< IBTaggingEfficiencyToolm_btagEffTool
asg::AnaToolHandle< IBTaggingSelectionToolm_btagSelTool
asg::AnaToolHandle< IBTaggingSelectionToolm_btagSelTool_OR
asg::AnaToolHandle< IBTaggingEfficiencyToolm_btagEffTool_trkJet
asg::AnaToolHandle< IBTaggingSelectionToolm_btagSelTool_trkJet
asg::AnaToolHandle< IMETMakerm_metMaker
asg::AnaToolHandle< IMETSystematicsToolm_metSystTool
asg::AnaToolHandle< IMETSignificancem_metSignif
std::string m_trig2015combination_singleLep
std::string m_trig2016combination_singleLep
std::string m_trig2017combination_singleLep
std::string m_trig2018combination_singleLep
std::string m_trig2022combination_singleLep
std::string m_trig2023combination_singleLep
std::string m_trig2024combination_singleLep
int m_trigNToys_diLep
std::string m_trig2015combination_diLep
std::string m_trig2016combination_diLep
std::string m_trig2017combination_diLep
std::string m_trig2018combination_diLep
std::string m_trig2022combination_diLep
asg::AnaToolHandle< ITrigGlobalEfficiencyCorrectionToolm_trigGlobalEffCorrTool_diLep
int m_trigNToys_multiLep
std::string m_trig2015combination_multiLep
std::string m_trig2016combination_multiLep
std::string m_trig2017combination_multiLep
std::string m_trig2018combination_multiLep
std::string m_trig2022combination_multiLep
asg::AnaToolHandle< ITrigGlobalEfficiencyCorrectionToolm_trigGlobalEffCorrTool_multiLep
int m_trigNToys_diPhoton
std::string m_trig2015combination_diPhoton
std::string m_trig2016combination_diPhoton
std::string m_trig2017combination_diPhoton
std::string m_trig2018combination_diPhoton
std::string m_trig2022combination_diPhoton
asg::AnaToolHandle< ITrigGlobalEfficiencyCorrectionToolm_trigGlobalEffCorrTool_diPhoton
asg::AnaToolHandle< TrigConf::ITrigConfigToolm_trigConfTool
asg::AnaToolHandle< Trig::TrigDecisionToolm_trigDecTool
asg::AnaToolHandle< Trig::IMatchingToolm_trigMatchingTool
asg::AnaToolHandle< Trig::IMatchScoringToolm_trigMatchScoringTool
asg::AnaToolHandle< Trig::IMatchScoringToolm_trigDRScoringTool
asg::AnaToolHandle< CP::IIsolationCorrectionToolm_isoCorrTool
asg::AnaToolHandle< CP::IIsolationSelectionToolm_isoTool
asg::AnaToolHandle< CP::IIsolationSelectionToolm_isoBaselineTool
asg::AnaToolHandle< CP::IIsolationSelectionToolm_isoHighPtTool
asg::AnaToolHandle< CP::IIsolationCloseByCorrectionToolm_isoCloseByTool
asg::AnaToolHandle< CP::IPileupReweightingToolm_prwTool
asg::AnaToolHandle< InDet::IInclusiveTrackFilterToolm_LRTuncTool
asg::AnaToolHandle< ORUtils::IOverlapToolm_tauJetORtool
ORUtils::ToolBox m_orToolbox
asg::AnaToolHandle< IWeightToolm_pmgSHnjetWeighter
asg::AnaToolHandle< IWeightToolm_pmgSHnjetWeighterWZ
std::string m_eleIdBaselineDFName
std::string m_eleIdDFName
std::string m_photonIdBaselineDFName
std::string m_photonIdDFName
std::string m_jetCleanDFName
SG::ConstAccessor< charm_acc_eleIdBaseline
SG::ConstAccessor< charm_acc_eleId
SG::ConstAccessor< charm_acc_photonIdBaseline
SG::ConstAccessor< charm_acc_photonId
SG::ConstAccessor< charm_acc_jetClean

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

StatusCode SUSYToolsInit ()
bool emulateHLT (const std::string &triggerName) const
bool isTrigInTDT (std::scoped_lock< std::mutex > &lock, const std::string &triggerName) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

std::map< std::string, std::string > m_conf_to_prop
std::set< std::string > m_bool_prop_set
std::map< std::string, std::function< bool()> > m_metTriggerFuncs ATLAS_THREAD_SAFE
std::map< std::string, bool > m_checkedTriggers ATLAS_THREAD_SAFE
std::mutex m_triggerCacheMutex
std::vector< std::string > m_v_trigs15_cache_singleEle
std::vector< std::string > m_v_trigs16_cache_singleEle
std::vector< std::string > m_v_trigs17_cache_singleEle
std::vector< std::string > m_v_trigs18_cache_singleEle
std::vector< std::string > m_v_trigs22_cache_singleEle
std::vector< std::string > m_v_trigs23_cache_singleEle
std::vector< std::string > m_v_trigs24_cache_singleEle
std::vector< std::string > m_v_trigs15_cache_singleLep
std::vector< std::string > m_v_trigs16_cache_singleLep
std::vector< std::string > m_v_trigs17_cache_singleLep
std::vector< std::string > m_v_trigs18_cache_singleLep
std::vector< std::string > m_v_trigs22_cache_singleLep
std::vector< std::string > m_v_trigs23_cache_singleLep
std::vector< std::string > m_v_trigs24_cache_singleLep
std::vector< std::string > m_v_trigs15_cache_diLep
std::vector< std::string > m_v_trigs16_cache_diLep
std::vector< std::string > m_v_trigs17_cache_diLep
std::vector< std::string > m_v_trigs18_cache_diLep
std::vector< std::string > m_v_trigs22_cache_diLep
std::vector< std::string > m_v_trigs15_cache_multiLep
std::vector< std::string > m_v_trigs16_cache_multiLep
std::vector< std::string > m_v_trigs17_cache_multiLep
std::vector< std::string > m_v_trigs18_cache_multiLep
std::vector< std::string > m_v_trigs22_cache_multiLep
SG::ReadHandleKey< xAOD::TrackParticleContainerm_LRTCollectionName {this, "LRTCollectionName", "InDetLargeD0TrackParticles", "LRT collection name"}
SG::ReadHandleKey< xAOD::TrackParticleContainerm_GSFLRTCollectionName {this, "GSFLRTCollectionName", "LRTGSFTrackParticles", "GSF LRT collection name"}
MetaStore_t m_inputMetaStore
 Object accessing the input metadata store.
MetaStore_t m_outputMetaStore
 Object accessing the output metadata store.
bool m_beginInputFileCalled
 Flag helping to discover when the tool misses the opening of the first input file.
bool m_useIncidents
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 141 of file SUSYObjDef_xAOD.h.

Member Typedef Documentation

◆ MetaStore_t

Type of the metadata store object in Athena.

Definition at line 66 of file AsgMetadataTool.h.

◆ MetaStorePtr_t

Type of the metadata store pointer in standalone mode.

Definition at line 68 of file AsgMetadataTool.h.

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ DataSource

Enumerator
Undefined 
Data 
FullSim 
AtlfastII 

Definition at line 476 of file ISUSYObjDef_xAODTool.h.

Constructor & Destructor Documentation

◆ SUSYObjDef_xAOD()

ST::SUSYObjDef_xAOD::SUSYObjDef_xAOD ( const std::string & name)

Override for the b-tagging jet collection

Definition at line 100 of file SUSYObjDef_xAOD.cxx.

101 : asg::AsgMetadataTool( name ),
104 m_force_noElId(false),
105 m_force_noMuId(false),
106 m_doTTVAsf(true),
109 m_useBtagging(false),
111 m_debug(false),
112 m_strictConfigCheck(false),
113 m_badJetCut(""),
115 m_fatJetUncVars(""),
116 m_WDecorName(""),
117 m_ZDecorName(""),
118 m_TopDecorName(""),
119 m_WtagConfig(""),
120 m_ZtagConfig(""),
121 m_ToptagConfig(""),
124 m_WTagUncConfig(""),
125 m_ZTagUncConfig(""),
128 m_tool_init(false),
129 m_subtool_init(false),
130 // set dummies for configuration
131 m_eleTerm(""),
132 m_gammaTerm(""),
133 m_tauTerm(""),
134 m_jetTerm(""),
135 m_muonTerm(""),
137 m_outMETTerm(""),
141 m_metUseGhostMuons(false),
142 m_metDoMuonEloss(false),
143 m_metGreedyPhotons(false),
146 m_trkMETsyst(true),
147 m_caloMETsyst(false),
148 m_softTermParam(-99),
149 m_treatPUJets(true),
150 m_doPhiReso(true),
151 m_autoconfigPRW(false),
157 m_mcCampaign(""),
158 m_mcChannel(-99),
159 m_useCommonPRWFiles(false),
168 m_prwDataSF(-99.),
169 m_prwDataSF_UP(-99.),
170 m_prwDataSF_DW(-99.),
173 m_eleId(""),
174 m_eleIdBaseline(""),
175 m_eleConfig(""),
178 m_eleIdExpert(false),
179 m_muId(static_cast<int>(xAOD::Muon::Quality(xAOD::Muon::VeryLoose))),
180 m_muIdBaseline(static_cast<int>(xAOD::Muon::Quality(xAOD::Muon::VeryLoose))),
181 m_photonId(""),
183 m_tauId(""),
184 m_tauIdBaseline(""),
185 m_eleIso_WP(""),
188 m_eleChID_WP(""),
189 m_eleLRT_strat(-99),
190 m_eleChIso(true),
191 m_eleChID_signal(false),
192 m_runECIS(false),
194 m_photonIso_WP(""),
197 m_muIso_WP(""),
201 m_muEffCorrForce1D(false),
202 m_BtagWP(""),
203 m_BtagTagger(""),
204 m_BtagMinPt(-99.),
210 m_BtagWP_trkJet(""),
212 m_BtagMinPt_trkJet(-99.),
213 //configurable cuts here
214 m_eleBaselinePt(-99.),
215 m_eleBaselineEta(-99.),
217 m_elePt(-99.),
218 m_eleEta(-99.),
219 m_eleCrackVeto(false),
220 m_eled0sig(-99.),
221 m_elez0(-99.),
222 m_elebaselined0sig(-99.),
223 m_elebaselinez0(-99),
226 //
227 m_muBaselinePt(-99.),
228 m_muBaselineEta(-99.),
229 m_muPt(-99.),
230 m_muEta(-99.),
231 m_mud0sig(-99.),
232 m_muz0(-99.),
233 m_mubaselined0sig(-99.),
234 m_mubaselinez0(-99.),
236 m_muCosmicz0(-99.),
237 m_muCosmicd0(-99.),
238 m_badmuQoverP(-99.),
240 //
241 m_photonBaselinePt(-99.),
243 m_photonEta(-99.),
244 m_photonPt(-99.),
246 m_photonCrackVeto(true),
247 m_photonAllowLate(false),
248 //
249 m_tauPrePtCut(-99.),
250 m_tauPt(-99.),
251 m_tauEta(-99.),
252 m_tauConfigPath(""),
254 m_tauDoTTM(false),
259 //
260 m_jetPt(-99.),
261 m_jetEta(-99.),
262 m_jetJvt(-99.),
263 m_JvtWP(""),
264 m_JvtPtMax(-99.),
265 m_JvtConfigRun2(""),
266 m_JvtConfigRun3(""),
267 m_trkJetPt(-99.),
268 m_trkJetEta(-99.),
269 m_doFwdJVT(false),
270 m_fJvtWP(""),
271 m_fJvtPtMax(-99.),
272 m_fJvtEtaMin(-99.),
275 m_JMScalib(false),
276 //
277 m_orDoTau(false),
278 m_orDoPhoton(false),
279 m_orDoEleJet(true),
280 m_orDoElEl(false),
281 m_orDoElMu(false),
282 m_orDoMuonJet(true),
283 m_orDoBjet(false),
284 m_orDoElBjet(true),
285 m_orDoMuBjet(true),
286 m_orDoTauBjet(true),
288 m_orBoostedElectronC1(-999.), // set to positive value to activate
289 m_orBoostedElectronC2(-999.), // set to positive value to activate
290 m_orBoostedElectronMaxConeSize(-999.), // set to positive value to activate
291 m_orDoBoostedMuon(true),
292 m_orBoostedMuonC1(-999.), // set to positive value to activate
293 m_orBoostedMuonC2(-999.), // set to positive value to activate
294 m_orBoostedMuonMaxConeSize(-999.), // set to positive value to activate
295 m_orApplyRelPt(false),
296 m_orMuJetPtRatio(-999.),
297 m_orMuJetTrkPtRatio(-999.),
298 m_orMuJetInnerDR(-999),
301 m_orBtagWP(""),
302 m_orInputLabel(""),
303 m_orPhotonFavoured(false),
306 m_orDoFatjets(false),
307 m_EleFatJetDR(-999.),
308 m_JetFatJetDR(-999.),
309 m_doIsoSignal(true),
310 m_doElIsoSignal(true),
311 m_doPhIsoSignal(true),
312 m_doMuIsoSignal(true),
313
316
317 m_useTRUTH3(true),
318
319 m_slices(std::map<std::string,bool>()),
320 m_isRun3(false),
321 m_isPHYSLITE(false),
322
324 m_fatJets(""),
325 //
328 m_EG_corrModel(""),
329 m_EG_corrFNList(""),
330 m_applyJVTCut(true),
331 //
332 // set toolhandles empty by default
333 m_jetCalibTool(""),
348 //
349 m_WTaggerTool(""),
350 m_ZTaggerTool(""),
351 m_TopTaggerTool(""),
356 //
360 m_muonCalibTool(""),
367 //
374 //
378 m_photonSelIsEM(""),
386 //
387 m_tauSelTool(""),
390 m_tauTruthMatch(""),
391 m_tauEffTool(""),
392 //
393 m_btagEffTool(""),
394 m_btagSelTool(""),
398 //
399 m_metMaker(""),
400 m_metSystTool(""),
401 m_metSignif(""),
402 //
431 m_trigConfTool(""),
432 m_trigDecTool(""),
436 //
437 m_isoCorrTool(""),
438 m_isoTool(""),
439 //disable m_isoToolLowPtPLV(""),
441 m_isoHighPtTool(""),
442 //
443 m_prwTool(""),
444 //
445 m_LRTuncTool(""),
446 //
447 m_orToolbox("ORToolbox",this),
448 //
451 //
452 m_acc_eleIdBaseline("DFCommonElectronsLHLooseBL"),
453 m_acc_eleId("DFCommonElectronsLHTight"),
454 m_acc_photonIdBaseline("DFCommonPhotonsIsEMTight"),
455 m_acc_photonId("DFCommonPhotonsIsEMTight"),
456 //
457 m_acc_jetClean("DFCommonJets_jetClean_LooseBad")
458{
459 //General settings
460 declareProperty( "DataSource", m_dataSource = Undefined );
461 declareProperty( "DebugMode", m_debug );
462 declareProperty( "ConfigFile", m_configFile = "SUSYTools/SUSYTools_Default.conf" );
463 //Overlap Removal
464 declareProperty( "DoTauOR", m_orDoTau );
465 declareProperty( "DoPhotonOR", m_orDoPhoton );
466 declareProperty( "DoEleJetOR", m_orDoEleJet );
467 declareProperty( "DoElElOR", m_orDoElEl );
468 declareProperty( "DoElMuOR", m_orDoElMu );
469 declareProperty( "DoMuonJetOR", m_orDoMuonJet );
470 declareProperty( "DoBjetOR", m_orDoBjet );
471 declareProperty( "DoElBjetOR", m_orDoElBjet );
472 declareProperty( "DoMuBjetOR", m_orDoMuBjet );
473 declareProperty( "DoTauBjetOR", m_orDoTauBjet );
474 declareProperty( "UseBtagging", m_useBtagging );
475 declareProperty( "UseBtaggingTrkJet", m_useBtagging_trkJet );
476 declareProperty( "DoBoostedElectronOR", m_orDoBoostedElectron );
477 declareProperty( "BoostedElectronORC1", m_orBoostedElectronC1 );
478 declareProperty( "BoostedElectronORC2", m_orBoostedElectronC2 );
479 declareProperty( "BoostedElectronORMaxConeSize", m_orBoostedElectronMaxConeSize );
480 declareProperty( "DoBoostedMuonOR", m_orDoBoostedMuon );
481 declareProperty( "BoostedMuonORC1", m_orBoostedMuonC1 );
482 declareProperty( "BoostedMuonORC2", m_orBoostedMuonC2 );
483 declareProperty( "BoostedMuonORMaxConeSize", m_orBoostedMuonMaxConeSize );
484 declareProperty( "ORDoMuonJetGhostAssociation", m_orDoMuonJetGhostAssociation );
485 declareProperty( "ORRemoveCaloMuons", m_orRemoveCaloMuons );
486 declareProperty( "ORMuJetApplyRelPt", m_orApplyRelPt);
487 declareProperty( "ORMuJetPtRatio", m_orMuJetPtRatio);
488 declareProperty( "ORMuJetInnerDR", m_orMuJetInnerDR );
489 declareProperty( "ORJetTrkPtRatio", m_orMuJetTrkPtRatio);
490 declareProperty( "ORInputLabel", m_orInputLabel);
491 declareProperty( "ORPhotonFavoured", m_orPhotonFavoured);
492 declareProperty( "ORBJetPtUpperThres", m_orBJetPtUpperThres);
493 declareProperty( "ORLinkOverlapObjects", m_orLinkOverlapObjects);
494
495 declareProperty( "DoFatJetOR", m_orDoFatjets);
496 declareProperty( "OREleFatJetDR", m_EleFatJetDR);
497 declareProperty( "ORJetFatJetDR", m_JetFatJetDR);
498 declareProperty( "TriggerUpstreamMatching", m_upstreamTriggerMatching, "Use alternative trigger matching tool based on upstream (in-derivation) matching");
499 declareProperty( "TriggerMatchingPrefix", m_trigMatchingPrefix, "Prefix for trigger matching containers (Analysis for PHSYLITE derivations");
500
501 //--- Object definitions
502 //MET
503 declareProperty( "METEleTerm", m_eleTerm );
504 declareProperty( "METGammaTerm", m_gammaTerm );
505 declareProperty( "METTauTerm", m_tauTerm );
506 declareProperty( "METJetTerm", m_jetTerm );
507 declareProperty( "METMuonTerm", m_muonTerm );
508 declareProperty( "METInputSuffix", m_inputMETSuffix );
509 declareProperty( "METOutputTerm", m_outMETTerm );
510 declareProperty( "METDoTrkSyst", m_trkMETsyst );
511 declareProperty( "METDoCaloSyst", m_caloMETsyst );
512 declareProperty( "METDoTrkJetSyst", m_trkJetsyst );
513 declareProperty( "METJetSelection", m_metJetSelection );
514 declareProperty( "METSysConfigPrefix", m_metsysConfigPrefix );
515
516 declareProperty( "METRemoveORCaloTaggedMuons", m_metRemoveOverlappingCaloTaggedMuons);
517 declareProperty( "METDoSetMuonJetEMScale", m_metDoSetMuonJetEMScale);
518 declareProperty( "METDoRemoveMuonJets", m_metDoRemoveMuonJets );
519 declareProperty( "METUseGhostMuons", m_metUseGhostMuons );
520 declareProperty( "METDoMuonEloss", m_metDoMuonEloss );
521 declareProperty( "METDoGreedyPhotons", m_metGreedyPhotons );
522 declareProperty( "METDoVeryGreedyPhotons", m_metVeryGreedyPhotons );
523
524
525 declareProperty( "SoftTermParam", m_softTermParam);
526 declareProperty( "TreatPUJets", m_treatPUJets);
527 declareProperty( "DoPhiReso", m_doPhiReso);
528
529 //JETS
530 declareProperty( "JetInputType", m_jetInputType );
531
532 declareProperty( "FwdJetDoJVT", m_doFwdJVT );
533
534 declareProperty( "JetJMSCalib", m_JMScalib );
535 declareProperty( "JetLargeRcollection", m_fatJets );
536
537 //BTAGGING
538 declareProperty( "BtagTagger", m_BtagTagger);
539 declareProperty( "BtagWPOR", m_orBtagWP); //the one used in the Overlap Removal
540 declareProperty( "BtagWP", m_BtagWP); //the one used in FillJet() afterwards
541 declareProperty( "BtagMinPt", m_BtagMinPt); // minimum jetPt cut (MR31061) >=20 GeV EM jets & >=10 GeV TrackJets (not calibrated below)
542 declareProperty( "BtagKeyOverride", m_BtagKeyOverride);
544 declareProperty( "BtagTaggerTrkJet", m_BtagTagger_trkJet);
545 declareProperty( "BtagMinPtTrkJet", m_BtagMinPt_trkJet); // minimum jetPt cut (MR31061) >=20 GeV EM jets & >=10 GeV TrackJets (not calibrated below)
546 declareProperty( "BtagWPTrkJet", m_BtagWP_trkJet); //the one used in FillTrackJet() afterwards
547 //ELECTRONS
548 declareProperty( "EleBaselinePt", m_eleBaselinePt);
549 declareProperty( "ElePt", m_elePt);
550 declareProperty( "EleBaselineEta", m_eleBaselineEta);
551 declareProperty( "EleEta", m_eleEta);
552 declareProperty( "EleBaselineId", m_eleIdBaseline);
553 declareProperty( "EleBaselineConfig", m_eleConfigBaseline);
554 declareProperty( "EleBaselineCrackVeto", m_eleBaselineCrackVeto);
555 declareProperty( "EleId", m_eleId);
556 declareProperty( "EleConfig", m_eleConfig);
557 declareProperty( "EleIso", m_eleIso_WP);
558 declareProperty( "EleIsoHighPt", m_eleIsoHighPt_WP);
559 declareProperty( "EleIsoHighPtThresh", m_eleIsoHighPtThresh);
560 declareProperty( "EleCFT", m_eleChID_WP);
561 declareProperty( "EleCFTIso", m_eleChIso);
562 declareProperty( "EleCFTSignal", m_eleChID_signal);
563 declareProperty( "EleD0sig", m_eled0sig);
564 declareProperty( "EleZ0", m_elez0);
565 declareProperty( "EleBaselineD0sig", m_elebaselined0sig);
566 declareProperty( "EleBaselineZ0", m_elebaselinez0);
567 declareProperty( "EleCrackVeto", m_eleCrackVeto);
568 declareProperty( "EleForceNoId", m_force_noElId );
569 declareProperty( "EleEffMapFilePath", m_eleEffMapFilePath);
570 declareProperty( "EleAllowRun3TrigSFFallback", m_eleAllowRun3TrigSFFallback);
571 declareProperty( "EleForceFullSimCalib", m_eleForceFullSimCalib);
572
573 //MUONS
574 declareProperty( "MuonBaselinePt", m_muBaselinePt);
575 declareProperty( "MuonPt", m_muPt);
576 declareProperty( "MuonBaselineEta", m_muBaselineEta);
577 declareProperty( "MuonEta", m_muEta);
578 declareProperty( "MuonBaselineId", m_muIdBaseline);
579 declareProperty( "MuonId", m_muId);
580 declareProperty( "MuonIso", m_muIso_WP);
581 declareProperty( "MuonIsoHighPt", m_muIsoHighPt_WP);
582 declareProperty( "MuonIsoHighPtThresh", m_muIsoHighPtThresh);
583 declareProperty( "MuonHighPtExtraSmear", m_muHighPtExtraSmear);
584 declareProperty( "MuonEffCorrForce1D", m_muEffCorrForce1D);
585 declareProperty( "MuonD0sig", m_mud0sig);
586 declareProperty( "MuonZ0", m_muz0);
587 declareProperty( "MuonBaselineD0sig", m_mubaselined0sig);
588 declareProperty( "MuonBaselineZ0", m_mubaselinez0);
589 declareProperty( "MuonRequireHighPtCuts", m_murequirepassedHighPtCuts);
590 declareProperty( "MuonForceNoId", m_force_noMuId );
591 declareProperty( "MuonTTVASF", m_doTTVAsf );
592 declareProperty( "MuonCalibrationMode", m_muCalibrationMode);
593 //MUONS TRIGGER SCALE FACTOR
594 declareProperty( "MuonTriggerSFCalibRelease", m_muTriggerSFCalibRelease );
595 declareProperty( "MuonTriggerSFCalibFilename", m_muTriggerSFCalibFilename );
596 //PHOTONS
597 declareProperty( "PhotonBaselinePt", m_photonBaselinePt);
598 declareProperty( "PhotonPt", m_photonPt);
599 declareProperty( "PhotonBaselineEta", m_photonBaselineEta);
600 declareProperty( "PhotonEta", m_photonEta);
601 declareProperty( "PhotonBaselineId", m_photonIdBaseline);
602 declareProperty( "PhotonId", m_photonId);
603 declareProperty( "PhotonIso", m_photonIso_WP);
604 declareProperty( "PhotonTriggerName", m_photonTriggerName);
605 declareProperty( "PhotonBaselineCrackVeto", m_photonBaselineCrackVeto);
606 declareProperty( "PhotonCrackVeto", m_photonCrackVeto);
607 declareProperty( "PhotonAllowLate", m_photonAllowLate);
608
609 //TAUS
610 declareProperty( "TauBaselineId", m_tauIdBaseline);
611 declareProperty( "TauId", m_tauId);
612 declareProperty( "TauIdConfigPathBaseline", m_tauConfigPathBaseline);
613 declareProperty( "TauIdConfigPath", m_tauConfigPath);
614 declareProperty( "TauDoTruthMatching", m_tauDoTTM);
615 declareProperty( "TauSmearingToolRecommendationTag", m_tauSmearingToolRecommendationTag);
616 declareProperty( "TauSmearingToolGenerator", m_tauSmearingToolGenerator);
617 declareProperty( "TauEffToolRecommendationTag", m_tauEffToolRecommendationTag);
618 declareProperty( "TauMVATESQualityCheck", m_ApplyMVATESQualityCheck);
619
620 //Leptons
621 declareProperty( "SigLepRequireIso", m_doIsoSignal ); //leave here for back-compatibility
622 declareProperty( "SigElRequireIso", m_doElIsoSignal );
623 declareProperty( "SigMuRequireIso", m_doMuIsoSignal );
624 declareProperty( "SigPhRequireIso", m_doPhIsoSignal );
625
626 //Isolation correction for leptons and photons
627 declareProperty( "UseSigLepForIsoCloseByOR", m_useSigLepForIsoCloseByOR );
628 declareProperty( "IsoCloseByORpassLabel", m_IsoCloseByORpassLabel );
629
630 //Truth
631 declareProperty( "UseTRUTH3", m_useTRUTH3 ); // true if using TRUTH3 type containers
632
633 //--- Tools configuration
634 //PRW
635 declareProperty( "AutoconfigurePRWTool", m_autoconfigPRW );
636 declareProperty( "AutoconfigurePRWToolPath", m_autoconfigPRWPath ); // e.g. dev/PileupReweighting/share/
637 declareProperty( "AutoconfigurePRWToolFile", m_autoconfigPRWFile ); // e.g. DSID407xxx/pileup_mc16a_dsid407352_FS.root
638 declareProperty( "AutoconfigurePRWToolCombinedmode", m_autoconfigPRWCombinedmode );
639 declareProperty( "AutoconfigurePRWToolRPVmode", m_autoconfigPRWRPVmode );
640 declareProperty( "AutoconfigurePRWToolRtags", m_autoconfigPRWRtags );
641 declareProperty( "mcCampaign", m_mcCampaign );
642 declareProperty( "mcChannel", m_mcChannel );
643 declareProperty( "PRWConfigFiles", m_prwConfFiles );
644 declareProperty( "PRWLumiCalcFiles", m_prwLcalcFiles );
645 declareProperty( "PRWActualMu2017File", m_prwActualMu2017File );
646 declareProperty( "PRWActualMu2018File", m_prwActualMu2018File );
647 declareProperty( "PRWActualMu2022File", m_prwActualMu2022File );
648 declareProperty( "PRWActualMu2023File", m_prwActualMu2023File );
649 declareProperty( "PRWActualMu2024File", m_prwActualMu2024File );
650 declareProperty( "PRWDataScaleFactor", m_prwDataSF);
651 declareProperty( "PRWDataScaleFactorUP", m_prwDataSF_UP);
652 declareProperty( "PRWDataScaleFactorDOWN", m_prwDataSF_DW);
653 declareProperty( "PRWUseRunDependentPrescaleWeight", m_runDepPrescaleWeightPRW);
654 declareProperty( "PRWUseCommonMCFiles", m_useCommonPRWFiles);
655 declareProperty( "PRWCommonFileMC20a", m_commonPRWFileMC20a);
656 declareProperty( "PRWCommonFileMC20d", m_commonPRWFileMC20d);
657 declareProperty( "PRWCommonFileMC20e", m_commonPRWFileMC20e);
658 declareProperty( "PRWCommonFileMC21a", m_commonPRWFileMC21a);
659 declareProperty( "PRWCommonFileMC23a", m_commonPRWFileMC23a);
660 declareProperty( "PRWCommonFileMC23c", m_commonPRWFileMC23c);
661 declareProperty( "PRWCommonFileMC23d", m_commonPRWFileMC23d);
662 declareProperty( "PRWCommonFileMC23e", m_commonPRWFileMC23e);
663 //LargeR uncertainties config, as from https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/JetUncertainties2016PrerecLargeR#Understanding_which_configuratio
664 declareProperty( "JetLargeRuncConfig", m_fatJetUncConfig );
665 declareProperty( "JetLargeRuncVars", m_fatJetUncVars );
666 declareProperty( "JetWtaggerConfig", m_WtagConfig );
667 declareProperty( "JetZtaggerConfig", m_ZtagConfig );
668 declareProperty( "JetWZTaggerCalibArea", m_WZTaggerCalibArea );
669 declareProperty( "JetToptaggerConfig", m_ToptagConfig );
670 declareProperty( "JetTruthLabelName", m_JetTruthLabelName );
671 declareProperty( "JetTopTaggerCalibArea", m_TopTaggerCalibArea );
672 declareProperty( "JetWTaguncConfig", m_WTagUncConfig );
673 declareProperty( "JetZTaguncConfig", m_ZTagUncConfig );
674 declareProperty( "JetTopTaguncConfig", m_TopTagUncConfig );
675 //Btagging MCtoMC SFs
676 declareProperty( "ShowerType", m_showerType = 0 );
677 //Egamma NP correlation model
678 declareProperty( "EleEffNPcorrModel", m_EG_corrModel );
679 //Egamma correction file list override
680 declareProperty( "EleEffCorrFNList", m_EG_corrFNList );
681 declareProperty( "IsRun3", m_isRun3 );
682 declareProperty( "IsPHYSLITE", m_isPHYSLITE );
683
684 //For electron trigger SF tools
685 declareProperty( "ElectronTriggerSFStringSingle", m_electronTriggerSFStringSingle);
686
687 //--- Tool pointers /MT : we may want to improve the descriptions :)
688 m_jetCalibTool.declarePropertyFor( this, "JetCalibTool", "The JetCalibTool" );
689 m_jetFatCalibTool.declarePropertyFor( this, "FatJetCalibTool", "The JetCalibTool for large-R jets" );
690 m_jetUncertaintiesTool.declarePropertyFor( this, "JetUncertaintiesTool", "The JetUncertaintiesTool" );
691 m_jetUncertaintiesPDSmearTool.declarePropertyFor( this, "JetPDSmearUncertaintiesTool", "The JetPDSmearUncertaintiesTool" );
692 m_fatjetUncertaintiesTool.declarePropertyFor( this, "FatJetUncertaintiesTool", "The JetUncertaintiesTool for large-R jets" );
693 m_fatjetUncertaintiesPDSmearTool.declarePropertyFor( this, "FatJetPDSmearUncertaintiesTool", "The FatJetPDSmearUncertaintiesTool" );
694 m_fatjetFFSmearingTool.declarePropertyFor( this, "FatJetFFSmearingTool", "The FFSmearingTool for large-R jets" );
695 m_WTagjetUncertaintiesTool.declarePropertyFor( this, "WJetUncertaintiesTool", "The JetUncertaintiesTool for large-R W-tagged jets" );
696 m_ZTagjetUncertaintiesTool.declarePropertyFor( this, "ZJetUncertaintiesTool", "The JetUncertaintiesTool for large-R Z-tagged jets" );
697 m_TopTagjetUncertaintiesTool.declarePropertyFor( this, "TopJetUncertaintiesTool", "The JetUncertaintiesTool for large-R Top-tagged jets" );
698 m_jetCleaningTool.declarePropertyFor( this, "JetCleaningTool", "The JetCleaningTool" );
699 m_jetPileupLabelingTool.declarePropertyFor( this, "JetPileupLabelingTool", "The JetPileupLabelingTool" );
700 m_jetJvtMomentTool.declarePropertyFor( this, "JetJvtMomentTool", "The JetJvtMomentTool" );
701 m_jetNNJvtMomentTool.declarePropertyFor( this, "JetNNJvtMomentTool", "The JetNNJvtMomentTool" );
702 m_jetNNJvtSelectionTool.declarePropertyFor( this, "JetNNJvtSelectionTool", "The JetNNJvtSelectionTool" );
703 m_jetNNJvtEfficiencyTool.declarePropertyFor( this, "JetNNJvtEfficiencyTool", "The JetNNJvtEfficiencyTool" );
704 m_jetfJvtSelectionTool.declarePropertyFor( this, "JetfJvtSelectionTool", "The JetfJvtSelectionTool" );
705 m_jetfJvtEfficiencyTool.declarePropertyFor( this, "JetfJvtEfficiencyTool", "The JetfJvtEfficiencyTool" );
706 //
707 m_WTaggerTool.declarePropertyFor( this, "WTaggerTool", "The SmoothedWZTaggerTool" );
708 m_ZTaggerTool.declarePropertyFor( this, "ZTaggerTool", "The SmoothedWZTaggerTool" );
709 m_TopTaggerTool.declarePropertyFor( this, "TopTaggerTool", "The DNNTopTaggerTool" );
710 m_jetTruthLabelingTool.declarePropertyFor( this, "JetTruthLabelingTool", "The JetTruthLabelingTool" );
711 //
712 m_muonSelectionTool.declarePropertyFor( this, "MuonSelectionTool", "The MuonSelectionTool for signal muons" );
713 m_muonSelectionHighPtTool.declarePropertyFor( this, "MuonSelectionHighPtTool", "The MuonSelectionTool for signal muons (HighPt WP)" );
714 m_muonSelectionToolBaseline.declarePropertyFor( this, "MuonSelectionToolBaseline", "The MuonSelectionTool for baseline muons" );
715 m_muonCalibTool.declarePropertyFor( this, "MuonCalibTool", "The MuonCalibTool" );
716 m_muonEfficiencySFTool.declarePropertyFor( this, "MuonEfficiencyScaleFactorsTool", "The MuonEfficiencySFTool" );
717 m_muonEfficiencyBMHighPtSFTool.declarePropertyFor( this, "MuonBadMuonHighPtScaleFactorsTool", "The MuonBadMuonHighPtSFTool" );
718 m_muonTTVAEfficiencySFTool.declarePropertyFor( this, "MuonTTVAEfficiencyScaleFactorsTool", "The MuonTTVAEfficiencySFTool" );
719 m_muonIsolationSFTool.declarePropertyFor( this, "MuonIsolationScaleFactorsTool", "The MuonIsolationSFTool" );
720 m_muonHighPtIsolationSFTool.declarePropertyFor( this, "MuonHighPtIsolationScaleFactorsTool", "The MuonIsolationSFTool" );
721 m_muonTriggerSFTool.declarePropertyFor( this, "MuonTriggerScaleFactorsTool", "The MuonTriggerSFTool" );
722 m_muonLRTORTool.declarePropertyFor( this, "MuonLRTOverlapRemovalTool", "Prompt/LRT muon OR Tool" );
723 //
724 m_elecEfficiencySFTool_reco.declarePropertyFor( this, "ElectronEfficiencyCorrectionTool_reco", "The ElectronEfficiencyCorrectionTool for reconstruction SFs" );
725 m_elecEfficiencySFTool_trig_singleLep.declarePropertyFor( this, "ElectronEfficiencyCorrectionTool_trig_singleLep", "The ElectronEfficiencyCorrectionTool for single-e triggers" );
726 m_elecEfficiencySFTool_id.declarePropertyFor( this, "ElectronEfficiencyCorrectionTool_id", "The ElectronEfficiencyCorrectionTool for ID SFs" );
727 m_elecEfficiencySFTool_iso.declarePropertyFor( this, "ElectronEfficiencyCorrectionTool_iso" , "The ElectronEfficiencyCorrectionTool for iso SFs" );
728 m_elecEfficiencySFTool_isoHighPt.declarePropertyFor( this, "ElectronEfficiencyCorrectionTool_isoHigPt" , "The ElectronEfficiencyCorrectionTool for iso high-pt SFs" );
729 m_elecSelLikelihood.declarePropertyFor( this, "ElectronLikelihoodTool" , "The ElectronSelLikelihoodTool for signal electrons" );
730 m_elecSelLikelihoodBaseline.declarePropertyFor( this, "ElectronLikelihoodToolBaseline" , "The ElectronSelLikelihoodTool for baseline electrons" );
731 m_egammaAmbiguityTool.declarePropertyFor( this, "EgammaAmbiguityTool", "The EgammaAmbiguityTool" );
732 m_elecChargeIDSelectorTool.declarePropertyFor( this, "ElectronChargeIDSelectorTool", "The ElectronChargeIDSelectorTool" );
733 m_elecChargeEffCorrTool.declarePropertyFor( this, "ElectronChargeEffCorrectionTool", "The ElectronChargeEffCorrectionTool" );
734 m_elecLRTORTool.declarePropertyFor( this, "ElectronLRTOverlapRemovalTool", "Prompt/LRT electron OR Tool" );
735 //
736 m_photonSelIsEM.declarePropertyFor( this, "PhotonIsEMSelector" , "The PhotonIsEMSelectorTool for signal photons" );
737 m_photonSelIsEMBaseline.declarePropertyFor( this, "PhotonIsEMSelectorBaseline" , "The PhotonIsEMSelectorTool for baseline photons" );
738 m_photonEfficiencySFTool.declarePropertyFor( this, "PhotonEfficiencyCorrectionTool", "The PhotonEfficiencyCorrectionTool for reco SFs" );
739 m_photonIsolationSFTool.declarePropertyFor( this, "PhotonIsolationCorrectionTool", "The PhotonEfficiencyCorrectionTool for iso SFs" );
740 m_photonTriggerSFTool.declarePropertyFor( this, "PhotonTriggerEfficiencyCorrectionTool", "The PhotonEfficiencyCorrectionTool for trigger SFs" );
741 //
742 m_egammaCalibTool.declarePropertyFor( this, "EgammaCalibrationAndSmearingTool", "The EgammaCalibrationAndSmearingTool");
743 //
744 m_tauSelTool.declarePropertyFor( this, "TauSelectionTool", "The TauSelectionTool for signal taus" );
745 m_tauSelToolBaseline.declarePropertyFor( this, "TauSelectionToolBaseline", "The TauSelectionTool for baseline taus" );
746 m_tauSmearingTool.declarePropertyFor( this, "TauSmearingTool", "The TauSmearingTool" );
747 m_tauTruthMatch.declarePropertyFor( this, "TauTruthMatch", "The TTMT" );
748 m_tauEffTool.declarePropertyFor( this, "TauEfficiencyCorrectionsTool", "The TauEfficiencyCorrectionsTool" );
749 //
750 m_btagEffTool.declarePropertyFor( this, "BTaggingEfficiencyTool", "The BTaggingEfficiencyTool" );
751 m_btagSelTool.declarePropertyFor( this, "BTaggingSelectionTool", "The main BTaggingSelectionTool" );
752 m_btagSelTool_OR.declarePropertyFor( this, "BTaggingSelectionTool_OR", "The BTaggingSelectionTool used to select b-jets for overlap removal" );
753 m_btagEffTool_trkJet.declarePropertyFor( this, "BTaggingEfficiencyTool_trkJet", "The BTaggingEfficiencyTool for track jets" );
754 m_btagSelTool_trkJet.declarePropertyFor( this, "BTaggingSelectionTool_trkJet", "The main BTaggingSelectionTool for track jets" );
755 //
756 m_metMaker.declarePropertyFor( this, "METMaker", "The METMaker instance");
757 m_metSystTool.declarePropertyFor( this, "METSystTool", "The METSystematicsTool");
758 m_metSignif.declarePropertyFor( this, "METSignificance", "The METSignifiance instance");
759 //
760 m_trigGlobalEffCorrTool_diLep.declarePropertyFor( this, "TrigGlobalEfficiencyCorrection_diLep", "The TrigGlobalEfficiencyCorrection tool for dilepton" );
761 m_trigGlobalEffCorrTool_multiLep.declarePropertyFor( this, "TrigGlobalEfficiencyCorrection_multiLep", "The TrigGlobalEfficiencyCorrection tool for trilepton" );
762 m_trigGlobalEffCorrTool_diPhoton.declarePropertyFor( this, "TrigGlobalEfficiencyCorrection_diPhoton", "The TrigGlobalEfficiencyCorrection tool for asymmetric diphoton" );
763 m_trigConfTool.declarePropertyFor( this, "TrigConfigTool", "The TrigConfigTool" );
764 m_trigDecTool.declarePropertyFor( this, "TrigDecisionTool", "The TrigDecisionTool" );
765 m_trigMatchingTool.declarePropertyFor( this, "TrigMatchTool", "The TrigMatchingTool" );
766 m_trigMatchScoringTool.declarePropertyFor( this, "TrigMatchScoringTool", "The TrigMatchScoringTool" );
767 m_trigDRScoringTool.declarePropertyFor( this, "TrigDRScoringTool", "The TrigDRScoringTool" );
768 //
769 m_isoCorrTool.declarePropertyFor( this, "IsolationCorrectionTool", "The IsolationCorrectionTool" );
770 m_isoTool.declarePropertyFor( this, "IsolationSelectionTool", "The IsolationSelectionTool");
771 //disable m_isoToolLowPtPLV.declarePropertyFor( this, "IsolationLowPtPLVTool", "The IsolationLowPtPLVTool");
772 m_isoBaselineTool.declarePropertyFor( this, "IsolationSelectionTool_Baseline", "The IsolationSelectionTool for baseline objects");
773 m_isoHighPtTool.declarePropertyFor( this, "IsolationSelectionTool_HighPt", "The IsolationSelectionTool for High Pt");
774 m_isoCloseByTool.declarePropertyFor( this, "IsolationCloseByCorrectionTool", "The IsolationCloseByCorrectionTool");
775 //
776 m_prwTool.declarePropertyFor( this, "PileupReweightingTool", "The PRW tool" );
777 //
778 m_LRTuncTool.declarePropertyFor( this, "InclusiveTrackFilterTool", "The LRT uncertainty tool");
779 //
780 m_pmgSHnjetWeighter.declarePropertyFor( this, "PMGSHVjetReweightTool", "The PMGSHVjetReweightTool (AntiKt4TruthJets)" );
781 m_pmgSHnjetWeighterWZ.declarePropertyFor( this, "PMGSHVjetReweightWZTool", "The PMGSHVjetReweightTool (AntiKt4TruthWZJets)" );
782 //
783 m_tauJetORtool.declarePropertyFor( this, "TauJetOverlapTool", "The TauJetOverlapTool");
784 //disable m_orToolbox.declarePropertyFor( this, "OverlapRemovalTool", "The overlap removal tool");
785
786 //load supported WPs (by tightness order)
787 m_el_id_support.push_back("VeryLooseNoPix"); // WPs for LRT Electron
788 m_el_id_support.push_back("VeryLooseLLH");
789 m_el_id_support.push_back("LooseNoPix"); // WPs for LRT Electron
790 m_el_id_support.push_back("LooseLLH");
791 m_el_id_support.push_back("LooseAndBLayerLLH");
792 m_el_id_support.push_back("LooseDNNnoCF");
793 m_el_id_support.push_back("LooseDNN");
794 m_el_id_support.push_back("MediumNoPix"); // WPs for LRT Electron
795 m_el_id_support.push_back("MediumLLH");
796 m_el_id_support.push_back("MediumDNNnoCF");
797 m_el_id_support.push_back("MediumDNN");
798 m_el_id_support.push_back("TightNoPix"); // WPs for LRT Electron
799 m_el_id_support.push_back("TightLLH");
800 m_el_id_support.push_back("TightDNNnoCF");
801 m_el_id_support.push_back("TightDNN");
802
803 m_ph_id_support.push_back("Loose");
804 m_ph_id_support.push_back("Medium");
805 m_ph_id_support.push_back("Tight");
806 m_ph_id_support.push_back("TightPtIncl"); // Should not be mixed with Tight
807
808 m_mu_id_support = 4; //maximum value supported
809
810 // Tau ID WPs
811 m_tau_id_support.push_back("rnn001");
812 m_tau_id_support.push_back("VeryLoose");
813 m_tau_id_support.push_back("Loose");
814 m_tau_id_support.push_back("Medium");
815 m_tau_id_support.push_back("Tight");
816
817 // Iso WPs
818 // -- see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/RecommendedIsolationWPs#Current_official_working_points
819 // -- the el iso points are those which have (or will have) SFs available
821 "FCLoose", "FCTight", // current WPs
822 "FCHighPtCaloOnly", // current HighPtCaloOnly WPs
823 "Gradient", //
824 "HighPtCaloOnly", //
825 "TightTrackOnly_VarRad","TightTrackOnly_FixedRad",//
826 "Tight_VarRad","Loose_VarRad", //
827 "PLVLoose", "PLVTight", // PLV recommended WPs, fallback support below b/o SFs and & egamma map file
828 "PLImprovedTight", "PLImprovedVeryTight" // New PLIV WPs, fallback support below b/o SFs & egamma map file
829 };
830 // -- the muon iso points are those which have SFs available
831 // -- more details https://indico.cern.ch/event/878781/contributions/3721998/attachments/1976194/3289315/20200127_IFFshort_2.pdf
833 "PflowLoose_FixedRad", "PflowLoose_VarRad", "PflowTight_FixedRad", "PflowTight_VarRad", // PFlow (new naming) recommended WPs
834 "TightTrackOnly_FixedRad", "TightTrackOnly_VarRad", "HighPtTrackOnly", // TrackOnly (new naming) recommended WPs
835 "PLVLoose", "PLVTight", // PLV recommended WPs
836 "Loose_VarRad", "Loose_FixedRad", "Tight_VarRad", "Tight_FixedRad", // Other WPs (new naming)
837 "PLImprovedTight", "PLImprovedVeryTight" // New PLIV WPs, fallback support below b/o SFs
838 };
839
840 // Construct electron fallback WPs for SFs
841 for (const auto& x : m_el_iso_support) { m_el_iso_fallback[x] = x; } // all current WPs
842 m_el_iso_fallback["PLVTight"] = "FCTight"; // plus actual fallback
843 m_el_iso_fallback["PLVLoose"] = "FCLoose";
844 m_el_iso_fallback["PLImprovedTight"] = "FCTight";
845 m_el_iso_fallback["PLImprovedVeryTight"] = "FCTight";
846 m_el_iso_fallback["HighPtCaloOnly"] = "FCHighPtCaloOnly";
847 m_el_iso_fallback["TightTrackOnly_VarRad"] = "FCTight";
848 m_el_iso_fallback["TightTrackOnly_FixedRad"] = "FCTight";
849 m_el_iso_fallback["Tight_VarRad"] = "FCTight";
850 m_el_iso_fallback["Loose_VarRad"] = "FCLoose";
851
852 // Construct muon fallback WPs for SFs
854 m_mu_iso_fallback["PLImprovedTight"] = "PLVTight";
855 m_mu_iso_fallback["PLImprovedVeryTight"] = "PLVTight";
856}
#define x
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
asg::AnaToolHandle< TauAnalysisTools::ITauSelectionTool > m_tauSelToolBaseline
std::vector< std::string > m_ph_id_support
bool m_metRemoveOverlappingCaloTaggedMuons
std::string m_BtagWP_trkJet
std::string m_tauConfigPath
asg::AnaToolHandle< IWeightTool > m_pmgSHnjetWeighter
std::string m_JetTruthLabelName
asg::AnaToolHandle< ICPJetUncertaintiesTool > m_WTagjetUncertaintiesTool
asg::AnaToolHandle< CP::IElectronLRTOverlapRemovalTool > m_elecLRTORTool
std::vector< std::string > m_mu_iso_support
std::vector< std::string > m_el_id_support
asg::AnaToolHandle< Trig::TrigDecisionTool > m_trigDecTool
asg::AnaToolHandle< CP::IMuonSelectionTool > m_muonSelectionTool
std::string m_trig2017combination_singleLep
asg::AnaToolHandle< IWeightTool > m_pmgSHnjetWeighterWZ
std::string m_prwActualMu2018File
asg::AnaToolHandle< ICPJetUncertaintiesTool > m_ZTagjetUncertaintiesTool
std::string m_autoconfigPRWPath
std::string m_trig2017combination_diPhoton
std::string m_trig2018combination_singleLep
std::string m_trig2016combination_multiLep
std::string m_photonIdBaseline
asg::AnaToolHandle< IJetCalibrationTool > m_jetFatCalibTool
std::string m_trig2016combination_diPhoton
asg::AnaToolHandle< ITrigGlobalEfficiencyCorrectionTool > m_trigGlobalEffCorrTool_multiLep
asg::AnaToolHandle< CP::IIsolationSelectionTool > m_isoBaselineTool
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionTool > m_elecEfficiencySFTool_isoHighPt
asg::AnaToolHandle< CP::IMuonEfficiencyScaleFactors > m_muonEfficiencySFTool
std::string m_prwActualMu2022File
asg::AnaToolHandle< CP::IPileupReweightingTool > m_prwTool
std::string m_EG_corrFNList
asg::AnaToolHandle< TauAnalysisTools::ITauSelectionTool > m_tauSelTool
asg::AnaToolHandle< ICPJetUncertaintiesTool > m_jetUncertaintiesPDSmearTool
std::string m_autoconfigPRWRtags
std::string m_trig2024combination_singleLep
asg::AnaToolHandle< IAsgElectronLikelihoodTool > m_elecSelLikelihood
double m_orBoostedElectronMaxConeSize
std::vector< std::string > m_prwLcalcFiles
std::string m_metsysConfigPrefix
asg::AnaToolHandle< TauAnalysisTools::ITauEfficiencyCorrectionsTool > m_tauEffTool
std::string m_trig2016combination_singleLep
std::string m_trigMatchingPrefix
Use composite trigger matching tool if matching was done upstream.
asg::AnaToolHandle< CP::IIsolationSelectionTool > m_isoHighPtTool
std::string m_commonPRWFileMC20d
std::map< std::string, bool > m_slices
asg::AnaToolHandle< ITrigGlobalEfficiencyCorrectionTool > m_trigGlobalEffCorrTool_diPhoton
asg::AnaToolHandle< IAsgElectronLikelihoodTool > m_elecSelLikelihoodBaseline
std::string m_commonPRWFileMC23c
asg::AnaToolHandle< IAsgPhotonIsEMSelector > m_photonSelIsEM
SG::ConstAccessor< char > m_acc_photonId
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionTool > m_elecEfficiencySFTool_id
asg::AnaToolHandle< CP::IMuonEfficiencyScaleFactors > m_muonTTVAEfficiencySFTool
std::string m_ZTagUncConfig
asg::AnaToolHandle< ICPJetCorrectionTool > m_fatjetFFSmearingTool
std::string m_eleEffMapFilePath
std::string m_WZTaggerCalibArea
std::string m_trig2015combination_singleLep
std::string m_EigenvectorReductionB
asg::AnaToolHandle< IMETSignificance > m_metSignif
asg::AnaToolHandle< CP::IIsolationSelectionTool > m_isoTool
asg::AnaToolHandle< CP::IJvtEfficiencyTool > m_jetfJvtEfficiencyTool
SG::ConstAccessor< char > m_acc_eleId
std::string m_prwActualMu2024File
std::string m_metJetSelection
std::vector< std::string > m_el_iso_support
std::string m_trig2017combination_multiLep
asg::AnaToolHandle< Trig::IMatchingTool > m_trigMatchingTool
std::string m_photonBaselineIso_WP
asg::AnaToolHandle< IAsgElectronLikelihoodTool > m_elecChargeIDSelectorTool
std::string m_BtagSystStrategy
std::string m_commonPRWFileMC20e
asg::AnaToolHandle< JetPileupLabelingTool > m_jetPileupLabelingTool
std::string m_trig2023combination_singleLep
asg::AnaToolHandle< CP::IMuonLRTOverlapRemovalTool > m_muonLRTORTool
SG::ConstAccessor< char > m_acc_photonIdBaseline
asg::AnaToolHandle< JSSWTopTaggerDNN > m_TopTaggerTool
asg::AnaToolHandle< CP::IMuonTriggerScaleFactors > m_muonTriggerSFTool
std::vector< std::string > m_tau_id_support
std::string m_tauEffToolRecommendationTag
std::string m_muBaselineIso_WP
std::string m_TopTaggerCalibArea
std::string m_trig2015combination_diLep
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionTool > m_elecEfficiencySFTool_trigEff_singleLep
std::string m_photonTriggerName
asg::AnaToolHandle< IAsgSelectionTool > m_jetNNJvtSelectionTool
asg::AnaToolHandle< SmoothedWZTagger > m_ZTaggerTool
asg::AnaToolHandle< JetPileupTag::JetVertexNNTagger > m_jetNNJvtMomentTool
std::string m_fJvtConfigRun3
std::string m_eleIdBaseline
std::map< std::string, std::string > m_el_iso_fallback
CP::SystematicSet m_currentSyst
asg::AnaToolHandle< CP::IMuonEfficiencyScaleFactors > m_muonEfficiencyBMHighPtSFTool
asg::AnaToolHandle< ORUtils::IOverlapTool > m_tauJetORtool
std::string m_commonPRWFileMC23d
std::string m_muIsoHighPt_WP
std::string m_commonPRWFileMC23e
asg::AnaToolHandle< CP::IMuonCalibrationAndSmearingTool > m_muonCalibTool
std::string m_fJvtConfigRun2
asg::AnaToolHandle< JetVertexTaggerTool > m_jetJvtMomentTool
asg::AnaToolHandle< ICPJetUncertaintiesTool > m_jetUncertaintiesTool
std::string m_tauSmearingToolRecommendationTag
asg::AnaToolHandle< IEGammaAmbiguityTool > m_egammaAmbiguityTool
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionTool > m_elecChargeEffCorrTool
asg::AnaToolHandle< TrigConf::ITrigConfigTool > m_trigConfTool
std::string m_WTagUncConfig
asg::AnaToolHandle< CP::IIsolationCloseByCorrectionTool > m_isoCloseByTool
std::string m_tauIdBaseline
std::string m_eleIsoHighPt_WP
asg::AnaToolHandle< IMETMaker > m_metMaker
asg::AnaToolHandle< Trig::IMatchScoringTool > m_trigDRScoringTool
asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionTool > m_photonIsolationSFTool
bool m_orDoTau
Overlap removal options.
std::string m_trig2016combination_diLep
std::string m_JvtConfigRun2
asg::AnaToolHandle< ICPJetUncertaintiesTool > m_fatjetUncertaintiesTool
asg::AnaToolHandle< CP::IIsolationCorrectionTool > m_isoCorrTool
std::string m_eleConfigBaseline
std::string m_trig2022combination_singleLep
asg::AnaToolHandle< IMETSystematicsTool > m_metSystTool
asg::AnaToolHandle< CP::IMuonSelectionTool > m_muonSelectionHighPtTool
std::string m_EigenvectorReductionLight
asg::AnaToolHandle< IAsgSelectionTool > m_jetfJvtSelectionTool
std::string m_trig2018combination_diPhoton
asg::AnaToolHandle< IJetSelector > m_jetCleaningTool
asg::AnaToolHandle< IBTaggingSelectionTool > m_btagSelTool_trkJet
asg::AnaToolHandle< InDet::IInclusiveTrackFilterTool > m_LRTuncTool
asg::AnaToolHandle< CP::IJvtEfficiencyTool > m_jetNNJvtEfficiencyTool
std::string m_commonPRWFileMC20a
std::string m_trig2022combination_diLep
asg::AnaToolHandle< CP::IMuonEfficiencyScaleFactors > m_muonHighPtIsolationSFTool
std::string m_tauSmearingToolGenerator
asg::AnaToolHandle< TauAnalysisTools::ITauSmearingTool > m_tauSmearingTool
SG::ConstAccessor< char > m_acc_eleIdBaseline
std::string m_trig2018combination_diLep
std::string m_trig2017combination_diLep
asg::AnaToolHandle< ITrigGlobalEfficiencyCorrectionTool > m_trigGlobalEffCorrTool_diLep
asg::AnaToolHandle< IBTaggingEfficiencyTool > m_btagEffTool_trkJet
std::string m_prwActualMu2017File
std::vector< std::string > m_prwConfFiles
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionTool > m_elecEfficiencySFTool_reco
Combined muon collection.
asg::AnaToolHandle< ICPJetUncertaintiesTool > m_TopTagjetUncertaintiesTool
std::vector< CP::SystematicSet > m_fatjetFFSmearingSyst
asg::AnaToolHandle< IBTaggingEfficiencyTool > m_btagEffTool
asg::AnaToolHandle< TauAnalysisTools::ITauTruthMatchingTool > m_tauTruthMatch
asg::AnaToolHandle< IBTaggingSelectionTool > m_btagSelTool_OR
std::string m_commonPRWFileMC21a
std::string m_muTriggerSFCalibRelease
std::string m_tauConfigPathBaseline
std::map< std::string, std::string > m_mu_iso_fallback
std::string m_BtagKeyOverride
asg::AnaToolHandle< IAsgPhotonIsEMSelector > m_photonSelIsEMBaseline
std::string m_inputMETSuffix
asg::AnaToolHandle< IBTaggingSelectionTool > m_btagSelTool
SG::ConstAccessor< char > m_acc_jetClean
asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionTool > m_photonTriggerSFTool
std::string m_EigenvectorReductionC
std::string m_fatJetUncConfig
ORUtils::ToolBox m_orToolbox
std::string m_TopTagUncConfig
asg::AnaToolHandle< Trig::IMatchScoringTool > m_trigMatchScoringTool
asg::AnaToolHandle< CP::IMuonSelectionTool > m_muonSelectionToolBaseline
std::string m_trig2022combination_multiLep
std::string m_muTriggerSFCalibFilename
asg::AnaToolHandle< CP::IEgammaCalibrationAndSmearingTool > m_egammaCalibTool
Combined electron collection.
std::string m_IsoCloseByORpassLabel
std::string m_trig2015combination_multiLep
std::string m_trig2022combination_diPhoton
std::string m_prwActualMu2023File
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionTool > m_elecEfficiencySFTool_trig_singleLep
asg::AnaToolHandle< JetTruthLabelingTool > m_jetTruthLabelingTool
asg::AnaToolHandle< ICPJetUncertaintiesTool > m_fatjetUncertaintiesPDSmearTool
std::string m_autoconfigPRWFile
std::string m_bTaggingCalibrationFilePath
asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionTool > m_elecEfficiencySFTool_iso
asg::AnaToolHandle< SmoothedWZTagger > m_WTaggerTool
std::string m_commonPRWFileMC23a
asg::AnaToolHandle< IJetCalibrationTool > m_jetCalibTool
std::string m_eleBaselineIso_WP
std::string m_fatJetUncVars
std::string m_electronTriggerSFStringSingle
std::string m_trig2015combination_diPhoton
asg::AnaToolHandle< CP::IMuonEfficiencyScaleFactors > m_muonIsolationSFTool
std::string m_BtagTagger_trkJet
std::string m_trig2018combination_multiLep
asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionTool > m_photonEfficiencySFTool
std::string m_JvtConfigRun3

◆ ~SUSYObjDef_xAOD()

ST::SUSYObjDef_xAOD::~SUSYObjDef_xAOD ( )

Definition at line 3135 of file SUSYObjDef_xAOD.cxx.

3135 {
3136
3137#ifdef XAOD_STANDALONE
3138 // remove all tools from the asg::ToolStore (and delete them)
3139 // so that they don't get re-used if we set up another SUSYTools
3140 // instance, e.g. when processing two datasets in one EventLoop
3141 // job
3142 if (!m_trigDecTool.empty()){
3143 if (asg::ToolStore::contains<Trig::TrigDecisionTool>("ToolSvc.TrigDecisionTool") ){
3144 // Ignore both of these so that we are safe if others have cleaned up
3145 m_trigDecTool->finalize().ignore();
3146 asg::ToolStore::remove("ToolSvc.TrigDecisionTool").ignore();
3147 }
3148 }
3149#endif
3150}
static bool contains(const std::string &name)
Check whether a tool with a given type and name is known in the store.
Definition ToolStore.h:51
static StatusCode remove(const IAsgTool *tool)
Remove the specified tool from the store.
Definition ToolStore.cxx:77

Member Function Documentation

◆ ApplyLRTUncertainty()

StatusCode ST::SUSYObjDef_xAOD::ApplyLRTUncertainty ( )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3102 of file SUSYObjDef_xAOD.cxx.

3102 {
3103
3104 // Don't apply variations for data
3105 if (isData()) return StatusCode::SUCCESS;
3106
3107 const EventContext& ctx = Gaudi::Hive::currentContext();
3108
3109 // Loop over tracks and call LRT uncertainty tool
3110 ATH_MSG_DEBUG ( "Applying LRT filter tool decorations for uncertainty");
3112 for(const auto trk: inTracks) dec_lrtFilter(*trk) = m_LRTuncTool->accept(trk);
3113
3114 // Loop over GSF LRT tracks and call uncertainty tool
3116 for(const auto trk: inGSFTracks) dec_lrtFilter(*trk) = m_LRTuncTool->accept(trk);
3117
3118 return StatusCode::SUCCESS;
3119}
#define ATH_MSG_DEBUG(x)
bool isData() const override final
const xAOD::TrackParticleContainer & GetInDetLargeD0GSFTracks(const EventContext &ctx) const override final
const xAOD::TrackParticleContainer & GetInDetLargeD0Tracks(const EventContext &ctx) const override final
static const SG::Decorator< char > dec_lrtFilter("passLRTFilter")
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".

◆ ApplyPRWTool()

StatusCode ST::SUSYObjDef_xAOD::ApplyPRWTool ( bool muDependentRRN = true)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3057 of file SUSYObjDef_xAOD.cxx.

3057 {
3058
3059 const xAOD::EventInfo* evtInfo = GetEventInfo();
3060 if(!randomrunnumber.isAvailable(*evtInfo))
3061 ATH_CHECK( m_prwTool->apply( *evtInfo, muDependentRRN ) );
3062 return StatusCode::SUCCESS;
3063}
#define ATH_CHECK
Evaluate an expression and check for errors.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
const xAOD::EventInfo * GetEventInfo() const override final
static const SG::ConstAccessor< unsigned int > randomrunnumber("RandomRunNumber")
EventInfo_v1 EventInfo
Definition of the latest event info version.

◆ applySystematicVariation()

StatusCode ST::SUSYObjDef_xAOD::applySystematicVariation ( const CP::SystematicSet & systConfig)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2148 of file SUSYObjDef_xAOD.cxx.

2149{
2150 if (!m_tool_init) {
2151 ATH_MSG_ERROR("SUSYTools was not initialized!!");
2152 return StatusCode::FAILURE;
2153 }
2154
2155 ATH_MSG_DEBUG(" in SUSYObjDef_xAOD::applySystematicVariation \"" << systConfig.name() << "\" size " << systConfig.size());
2156
2157 m_currentSyst = systConfig;
2158
2159 // NB: SystematicSet typically has only one component (see SUSYToolsTester macro)
2160 if (!m_jetUncertaintiesTool.empty() && systConfig.name().find("PseudoData") == std::string::npos) {
2161 StatusCode ret = m_jetUncertaintiesTool->applySystematicVariation(systConfig);
2162 if ( ret != StatusCode::SUCCESS) {
2163 ATH_MSG_VERBOSE("Cannot configure JetUncertaintiesTool for systematic var. " << systConfig.name() );
2164 } else {
2165 ATH_MSG_VERBOSE("Configured JetUncertaintiesTool for systematic var. " << systConfig.name() );
2166 }
2167 }
2168 if (!m_jetUncertaintiesPDSmearTool.empty() && systConfig.name().find("PseudoData") != std::string::npos) {
2169 StatusCode ret = m_jetUncertaintiesPDSmearTool->applySystematicVariation(systConfig);
2170 if ( ret != StatusCode::SUCCESS) {
2171 ATH_MSG_VERBOSE("Cannot configure JetUncertaintiesPDSmearTool for systematic var. " << systConfig.name() );
2172 } else {
2173 ATH_MSG_VERBOSE("Configured JetUncertaintiesPDSmearTool for systematic var. " << systConfig.name() );
2174 }
2175 }
2176 if (!m_WTagjetUncertaintiesTool.empty() && !m_WTagUncConfig.empty()) {
2177 StatusCode ret = m_WTagjetUncertaintiesTool->applySystematicVariation(systConfig);
2178 if ( ret != StatusCode::SUCCESS) {
2179 ATH_MSG_VERBOSE("Cannot configure (Fat)JetUncertaintiesTool (WTag) for systematic var. " << systConfig.name() );
2180 } else {
2181 ATH_MSG_VERBOSE("Configured (Fat)JetUncertaintiesTool (WTag) for systematic var. " << systConfig.name() );
2182 }
2183 }
2184 if (!m_ZTagjetUncertaintiesTool.empty() && !m_ZTagUncConfig.empty()) {
2185 StatusCode ret = m_ZTagjetUncertaintiesTool->applySystematicVariation(systConfig);
2186 if ( ret != StatusCode::SUCCESS) {
2187 ATH_MSG_VERBOSE("Cannot configure (Fat)JetUncertaintiesTool (ZTag) for systematic var. " << systConfig.name() );
2188 } else {
2189 ATH_MSG_VERBOSE("Configured (Fat)JetUncertaintiesTool (ZTag) for systematic var. " << systConfig.name() );
2190 }
2191 }
2192
2193 if (!m_TopTagjetUncertaintiesTool.empty() && !m_TopTagUncConfig.empty()) {
2194 StatusCode ret = m_TopTagjetUncertaintiesTool->applySystematicVariation(systConfig);
2195 if ( ret != StatusCode::SUCCESS) {
2196 ATH_MSG_VERBOSE("Cannot configure (Fat)JetUncertaintiesTool (TopTag) for systematic var. " << systConfig.name() );
2197 } else {
2198 ATH_MSG_VERBOSE("Configured (Fat)JetUncertaintiesTool (TopTag) for systematic var. " << systConfig.name() );
2199 }
2200 }
2201 if (!m_fatjetUncertaintiesTool.empty() && systConfig.name().find("PseudoData") == std::string::npos) {
2202 StatusCode ret = m_fatjetUncertaintiesTool->applySystematicVariation(systConfig);
2203 if ( ret != StatusCode::SUCCESS) {
2204 ATH_MSG_VERBOSE("Cannot configure (Fat)JetUncertaintiesTool (main) for systematic var. " << systConfig.name() );
2205 } else {
2206 ATH_MSG_VERBOSE("Configured (Fat)JetUncertaintiesTool (main) for systematic var. " << systConfig.name() );
2207 }
2208 }
2209 if (!m_fatjetUncertaintiesPDSmearTool.empty() && systConfig.name().find("PseudoData") != std::string::npos) {
2210 StatusCode ret = m_fatjetUncertaintiesPDSmearTool->applySystematicVariation(systConfig);
2211 if ( ret != StatusCode::SUCCESS) {
2212 ATH_MSG_VERBOSE("Cannot configure FatJetUncertaintiesPDSmearTool for systematic var. " << systConfig.name() );
2213 } else {
2214 ATH_MSG_VERBOSE("Configured FatJetUncertaintiesPDSmearTool for systematic var. " << systConfig.name() );
2215 }
2216 }
2217 if (!m_fatjetFFSmearingTool.empty() && std::find(m_fatjetFFSmearingSyst.begin(), m_fatjetFFSmearingSyst.end(), systConfig) != m_fatjetFFSmearingSyst.end()) {
2218 StatusCode ret = m_fatjetFFSmearingTool->applySystematicVariation(systConfig);
2219 if ( ret != StatusCode::SUCCESS) {
2220 ATH_MSG_VERBOSE("Cannot configure (Fat)JetFFSmearingTool (main) for systematic var. " << systConfig.name() );
2221 } else {
2222 ATH_MSG_VERBOSE("Configured (Fat)JetFFSmearingTool (main) for systematic var. " << systConfig.name() );
2223 }
2224 }
2225 if (!m_jetNNJvtEfficiencyTool.empty()) {
2226 StatusCode ret = m_jetNNJvtEfficiencyTool->applySystematicVariation(systConfig);
2227 if ( ret != StatusCode::SUCCESS) {
2228 ATH_MSG_VERBOSE("Cannot configure NNJvtEfficiency for systematic var. " << systConfig.name() );
2229 } else {
2230 ATH_MSG_VERBOSE("Configured NNJvtEfficiency for systematic var. " << systConfig.name() );
2231 }
2232 }
2233 if (!m_jetfJvtEfficiencyTool.empty()) {
2234 StatusCode ret = m_jetfJvtEfficiencyTool->applySystematicVariation(systConfig);
2235 if ( ret != StatusCode::SUCCESS) {
2236 ATH_MSG_VERBOSE("Cannot configure fJvtEfficiency for systematic var. " << systConfig.name() );
2237 } else {
2238 ATH_MSG_VERBOSE("Configured fJvtEfficiency for systematic var. " << systConfig.name() );
2239 }
2240 }
2241 if (!m_muonCalibTool.empty()) {
2242 StatusCode ret = m_muonCalibTool->applySystematicVariation(systConfig);
2243 if (ret != StatusCode::SUCCESS) {
2244 ATH_MSG_ERROR("Cannot configure MuonCalibTool for systematic var. " << systConfig.name() );
2245 return ret;
2246 } else {
2247 ATH_MSG_VERBOSE("MuonCalibTool configured for systematic var. " << systConfig.name() );
2248 }
2249 }
2250 if (!m_muonEfficiencySFTool.empty()) {
2251 StatusCode ret = m_muonEfficiencySFTool->applySystematicVariation(systConfig);
2252 if ( ret != StatusCode::SUCCESS) {
2253 ATH_MSG_ERROR("Cannot configure MuonEfficiencyScaleFactors for systematic var. " << systConfig.name() );
2254 return ret;
2255 } else {
2256 ATH_MSG_VERBOSE("MuonEfficiencyScaleFactors configured for systematic var. " << systConfig.name() );
2257 }
2258 }
2259 if (!m_muonEfficiencyBMHighPtSFTool.empty()) {
2260 StatusCode ret = m_muonEfficiencyBMHighPtSFTool->applySystematicVariation(systConfig);
2261 if ( ret != StatusCode::SUCCESS) {
2262 ATH_MSG_ERROR("Cannot configure MuonBadMuonHighPtScaleFactors for systematic var. " << systConfig.name() );
2263 return ret;
2264 } else {
2265 ATH_MSG_VERBOSE("MuonBadMuonHighPtScaleFactors configured for systematic var. " << systConfig.name() );
2266 }
2267 }
2268 if (!m_muonTTVAEfficiencySFTool.empty()) {
2269 StatusCode ret = m_muonTTVAEfficiencySFTool->applySystematicVariation(systConfig);
2270 if ( ret != StatusCode::SUCCESS) {
2271 ATH_MSG_ERROR("Cannot configure MuonTTVAEfficiencyScaleFactors for systematic var. " << systConfig.name() );
2272 return ret;
2273 } else {
2274 ATH_MSG_VERBOSE("MuonTTVAEfficiencyScaleFactors configured for systematic var. " << systConfig.name() );
2275 }
2276 }
2277 if (!m_muonIsolationSFTool.empty()) {
2278 StatusCode ret = m_muonIsolationSFTool->applySystematicVariation(systConfig);
2279 if ( ret != StatusCode::SUCCESS) {
2280 ATH_MSG_ERROR("Cannot configure MuonIsolationScaleFactors for systematic var. " << systConfig.name() );
2281 return ret;
2282 } else {
2283 ATH_MSG_VERBOSE("MuonIsolationScaleFactors configured for systematic var. " << systConfig.name() );
2284 }
2285 }
2286 if (!m_muonTriggerSFTool.empty()) {
2287 StatusCode ret = m_muonTriggerSFTool->applySystematicVariation(systConfig);
2288 if ( ret != StatusCode::SUCCESS) {
2289 ATH_MSG_ERROR("Cannot configure MuonTriggerScaleFactors for systematic var. " << systConfig.name() );
2290 return ret;
2291 } else {
2292 ATH_MSG_VERBOSE("MuonTriggerScaleFactors configured for systematic var. " << systConfig.name() );
2293 }
2294 }
2295 if (!m_elecEfficiencySFTool_reco.empty()) {
2296 StatusCode ret = m_elecEfficiencySFTool_reco->applySystematicVariation(systConfig);
2297 if (ret != StatusCode::SUCCESS) {
2298 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (reco) for systematic var. " << systConfig.name() );
2299 return ret;
2300 } else {
2301 ATH_MSG_VERBOSE("AsgElectronEfficiencyCorrectionTool (reco) configured for systematic var. " << systConfig.name() );
2302 }
2303 }
2304 if (!m_elecEfficiencySFTool_id.empty()) {
2305 StatusCode ret = m_elecEfficiencySFTool_id->applySystematicVariation(systConfig);
2306 if (ret != StatusCode::SUCCESS) {
2307 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (id) for systematic var. " << systConfig.name() );
2308 return ret;
2309 } else {
2310 ATH_MSG_VERBOSE("AsgElectronEfficiencyCorrectionTool (id) configured for systematic var. " << systConfig.name() );
2311 }
2312 }
2314 StatusCode ret = m_elecEfficiencySFTool_trig_singleLep->applySystematicVariation(systConfig);
2315 if (ret != StatusCode::SUCCESS) {
2316 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (trigger) for systematic var. " << systConfig.name() );
2317 return ret;
2318 } else {
2319 ATH_MSG_VERBOSE("AsgElectronEfficiencyCorrectionTool (trigger) configured for systematic var. " << systConfig.name() );
2320 }
2321 }
2323 StatusCode ret = m_elecEfficiencySFTool_trigEff_singleLep->applySystematicVariation(systConfig);
2324 if (ret != StatusCode::SUCCESS) {
2325 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (trigger SFTool) for systematic var. " << systConfig.name() );
2326 return ret;
2327 } else {
2328 ATH_MSG_VERBOSE("AsgElectronEfficiencyCorrectionTool (trigger SFTool) configured for systematic var. " << systConfig.name() );
2329 }
2330 }
2331 if (!m_trigGlobalEffCorrTool_diLep.empty()) {
2332 StatusCode ret = m_trigGlobalEffCorrTool_diLep->applySystematicVariation(systConfig);
2333 for(auto &sfop : m_elecTrigEffTools){
2334 StatusCode ret1 = sfop->applySystematicVariation(systConfig);
2335 if (ret1 != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure m_elecTrigEffTools (dilepton trigger) for systematic var. " << systConfig.name() ); return ret1; }
2336 }
2337 for(auto &sfop : m_elecTrigSFTools){
2338 StatusCode ret1 = sfop->applySystematicVariation(systConfig);
2339 if (ret1 != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure m_elecTrigSFTools (dilepton trigger) for systematic var. " << systConfig.name() ); return ret1; }
2340 }
2341 for(auto &sfop : m_muonTrigSFTools){
2342 StatusCode ret1 = sfop->applySystematicVariation(systConfig);
2343 if (ret1 != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure m_muonTrigSFTools (dilepton trigger) for systematic var. " << systConfig.name() ); return ret1; }
2344 }
2345 if (ret != StatusCode::SUCCESS) {
2346 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (dilepton trigger) for systematic var. " << systConfig.name() );
2347 return ret;
2348 } else {
2349 ATH_MSG_VERBOSE("TrigGlobalEfficiencyCorrectionTool (dilepton trigger) configured for systematic var. " << systConfig.name() );
2350 }
2351 }
2352 if (!m_trigGlobalEffCorrTool_multiLep.empty()) {
2353 StatusCode ret = m_trigGlobalEffCorrTool_multiLep->applySystematicVariation(systConfig);
2354 for(auto &sfop : m_elecTrigEffTools){
2355 StatusCode ret1 = sfop->applySystematicVariation(systConfig);
2356 if (ret1 != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure m_elecTrigEffTools (multilep trigger) for systematic var. " << systConfig.name() ); return ret1; }
2357 }
2358 for(auto &sfop : m_elecTrigSFTools){
2359 StatusCode ret1 = sfop->applySystematicVariation(systConfig);
2360 if (ret1 != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure m_elecTrigSFTools (multilep trigger) for systematic var. " << systConfig.name() ); return ret1; }
2361 }
2362 for(auto &sfop : m_muonTrigSFTools){
2363 StatusCode ret1 = sfop->applySystematicVariation(systConfig);
2364 if (ret1 != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure m_muonTrigSFTools (multilep trigger) for systematic var. " << systConfig.name() ); return ret1; }
2365 }
2366 if (ret != StatusCode::SUCCESS) {
2367 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (multi-lepton trigger) for systematic var. " << systConfig.name() );
2368 return ret;
2369 } else {
2370 ATH_MSG_VERBOSE("TrigGlobalEfficiencyCorrectionTool (multi-lepton trigger) configured for systematic var. " << systConfig.name() );
2371 }
2372 }
2373 if (!m_elecEfficiencySFTool_iso.empty()) {
2374 StatusCode ret = m_elecEfficiencySFTool_iso->applySystematicVariation(systConfig);
2375 if (ret != StatusCode::SUCCESS) {
2376 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (iso) for systematic var. " << systConfig.name() );
2377 return ret;
2378 } else {
2379 ATH_MSG_VERBOSE("AsgElectronEfficiencyCorrectionTool (iso) configured for systematic var. " << systConfig.name() );
2380 }
2381 }
2382 if (!m_elecEfficiencySFTool_isoHighPt.empty()) {
2383 StatusCode ret = m_elecEfficiencySFTool_isoHighPt->applySystematicVariation(systConfig);
2384 if (ret != StatusCode::SUCCESS) {
2385 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (iso high-pt) for systematic var. " << systConfig.name() );
2386 return ret;
2387 } else {
2388 ATH_MSG_VERBOSE("AsgElectronEfficiencyCorrectionTool (iso high-pt) configured for systematic var. " << systConfig.name() );
2389 }
2390 }
2391 if (!m_elecChargeEffCorrTool.empty()) {
2392 StatusCode ret = m_elecChargeEffCorrTool->applySystematicVariation(systConfig);
2393 if (ret != StatusCode::SUCCESS) {
2394 ATH_MSG_ERROR("Cannot configure ElectronChargeEffCorrectionTool for systematic var. " << systConfig.name() );
2395 return ret;
2396 } else {
2397 ATH_MSG_VERBOSE("ElectronChargeEffCorrectionTool configured for systematic var. " << systConfig.name() );
2398 }
2399 }
2400 if (!isData() && !m_photonEfficiencySFTool.empty()) {
2401 StatusCode ret = m_photonEfficiencySFTool->applySystematicVariation(systConfig);
2402 if (ret != StatusCode::SUCCESS) {
2403 ATH_MSG_ERROR("Cannot configure AsgPhotonEfficiencyCorrectionTool (reco) for systematic var. " << systConfig.name() );
2404 return ret;
2405 } else {
2406 ATH_MSG_VERBOSE("AsgPhotonEfficiencyCorrectionTool (reco) configured for systematic var. " << systConfig.name() );
2407 }
2408 }
2409 if (!isData() && !m_photonIsolationSFTool.empty()) {
2410 StatusCode ret = m_photonIsolationSFTool->applySystematicVariation(systConfig);
2411 if (ret != StatusCode::SUCCESS) {
2412 ATH_MSG_ERROR("Cannot configure AsgPhotonEfficiencyCorrectionTool (iso) for systematic var. " << systConfig.name() );
2413 return ret;
2414 } else {
2415 ATH_MSG_VERBOSE("AsgPhotonEfficiencyCorrectionTool configured (iso) for systematic var. " << systConfig.name() );
2416 }
2417 }
2418 if (!isData() && !m_photonTriggerSFTool.empty()) {
2419 StatusCode ret = m_photonTriggerSFTool->applySystematicVariation(systConfig);
2420 if (ret != StatusCode::SUCCESS) {
2421 ATH_MSG_ERROR("Cannot configure AsgPhotonEfficiencyCorrectionTool (trigger) for systematic var. " << systConfig.name() );
2422 return ret;
2423 } else {
2424 ATH_MSG_VERBOSE("AsgPhotonEfficiencyCorrectionTool configured (trigger) for systematic var. " << systConfig.name() );
2425 }
2426 }
2427 if (!m_trigGlobalEffCorrTool_diPhoton.empty()) {
2428 StatusCode ret = m_trigGlobalEffCorrTool_diPhoton->applySystematicVariation(systConfig);
2429 for(auto &sfop : m_photonTrigEffTools){
2430 StatusCode ret1 = sfop->applySystematicVariation(systConfig);
2431 if (ret1 != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure m_photonTrigEffTools (diphoton trigger) for systematic var. " << systConfig.name() ); return ret1; }
2432 }
2433 for(auto &sfop : m_photonTrigSFTools){
2434 StatusCode ret1 = sfop->applySystematicVariation(systConfig);
2435 if (ret1 != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure m_photonTrigSFTools (diphoton trigger) for systematic var. " << systConfig.name() ); return ret1; }
2436 }
2437 if (ret != StatusCode::SUCCESS) {
2438 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (diphoton trigger) for systematic var. " << systConfig.name() );
2439 return ret;
2440 } else {
2441 ATH_MSG_VERBOSE("TrigGlobalEfficiencyCorrectionTool (diphoton trigger) configured for systematic var. " << systConfig.name() );
2442 }
2443 }
2444 if (!m_egammaCalibTool.empty()) {
2445 StatusCode ret = m_egammaCalibTool->applySystematicVariation(systConfig);
2446 if (ret != StatusCode::SUCCESS) {
2447 ATH_MSG_ERROR("Cannot configure EgammaCalibrationAndSmearingTool for systematic var. " << systConfig.name() );
2448 return ret;
2449 } else {
2450 ATH_MSG_VERBOSE("EgammaCalibrationAndSmearingTool configured for systematic var. " << systConfig.name() );
2451 }
2452 }
2453 if (!m_isoCorrTool.empty()) {
2454 StatusCode ret = m_isoCorrTool->applySystematicVariation(systConfig);
2455 if (ret != StatusCode::SUCCESS) {
2456 ATH_MSG_ERROR("Cannot configure IsolationCorrectionTool for systematic var. " << systConfig.name() );
2457 return ret;
2458 } else {
2459 ATH_MSG_VERBOSE("IsolationCorrectionTool configured for systematic var. " << systConfig.name() );
2460 }
2461 }
2462 if (!m_btagEffTool.empty()) {
2463 //if ( systConfig.size() > 0 && m_btagEffTool->isAffectedBySystematic(*systConfig.begin()) ) {
2464 StatusCode ret = m_btagEffTool->applySystematicVariation(systConfig);
2465 if ( ret != StatusCode::SUCCESS) {
2466 ATH_MSG_ERROR("Cannot configure xAODBTaggingEfficiency for systematic var. " << systConfig.name() );
2467 return ret;
2468 } else {
2469 ATH_MSG_VERBOSE("Configured xAODBTaggingEfficiency for systematic var. " << systConfig.name() );
2470 }
2471 //}
2472 }
2473 if (!m_btagEffTool_trkJet.empty()) {
2474 StatusCode ret = m_btagEffTool_trkJet->applySystematicVariation(systConfig);
2475 if ( ret != StatusCode::SUCCESS) {
2476 ATH_MSG_ERROR("Cannot configure xAODBTaggingEfficiency (track jets) for systematic var. " << systConfig.name() );
2477 return ret;
2478 } else {
2479 ATH_MSG_VERBOSE("Configured xAODBTaggingEfficiency (track jets) for systematic var. " << systConfig.name() );
2480 }
2481 }
2482 if (!m_tauSmearingTool.empty()) {
2483 StatusCode ret = m_tauSmearingTool->applySystematicVariation(systConfig);
2484 if ( ret != StatusCode::SUCCESS) {
2485 ATH_MSG_ERROR("Cannot configure TauSmearingTool for systematic var. " << systConfig.name() );
2486 return ret;
2487 } else {
2488 ATH_MSG_VERBOSE("Configured TauSmearingTool for systematic var. " << systConfig.name() );
2489 }
2490 }
2491 if (!m_tauEffTool.empty()) {
2492 StatusCode ret = m_tauEffTool->applySystematicVariation(systConfig);
2493 if ( ret != StatusCode::SUCCESS) {
2494 ATH_MSG_ERROR("Cannot configure TauEfficiencyCorrectionsTool for systematic var. " << systConfig.name() );
2495 return ret;
2496 } else {
2497 ATH_MSG_VERBOSE("Configured TauEfficiencyCorrectionsTool for systematic var. " << systConfig.name() );
2498 }
2499 }
2500 for(auto &tool : m_tauTrigEffTool) {
2501 StatusCode ret = tool->applySystematicVariation(systConfig);
2502 if (ret != StatusCode::SUCCESS) {
2503 ATH_MSG_ERROR("Cannot configure " << tool->name() << " for systematic var. " << systConfig.name() );
2504 return ret;
2505 } else {
2506 ATH_MSG_VERBOSE("Configured " << tool->name() << " for systematic var. " << systConfig.name() );
2507 }
2508 }
2509 if (!m_metSystTool.empty()) {
2510 StatusCode ret = m_metSystTool->applySystematicVariation(systConfig);
2511 if ( ret != StatusCode::SUCCESS) {
2512 ATH_MSG_ERROR("Cannot configure METSystematicsTool for systematic var. " << systConfig.name() );
2513 return ret;
2514 } else {
2515 ATH_MSG_VERBOSE("Configured METSystematicsTool for systematic var. " << systConfig.name() );
2516 }
2517 }
2518 if (!m_prwTool.empty()) {
2519 StatusCode ret = m_prwTool->applySystematicVariation(systConfig);
2520 if ( ret != StatusCode::SUCCESS) {
2521 ATH_MSG_ERROR("Cannot configure PileupReweightingTool for systematic var. " << systConfig.name() );
2522 return ret;
2523 } else {
2524 ATH_MSG_VERBOSE("Configured PileupReweightingTool for systematic var. " << systConfig.name() );
2525 }
2526 }
2527
2528 if (!m_LRTuncTool.empty()) {
2529 StatusCode ret = m_LRTuncTool->applySystematicVariation(systConfig);
2530 if ( ret != StatusCode::SUCCESS) {
2531 ATH_MSG_ERROR("Cannot configure InDetTrackFilterTool for systematic var. " << systConfig.name() );
2532 return ret;
2533 } else {
2534 ATH_MSG_VERBOSE("Configured InDetTrackFilterTool for systematic var. " << systConfig.name() );
2535 }
2536 }
2537
2538 return StatusCode::SUCCESS;
2539}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
std::string name() const
returns: the systematics joined into a single string.
size_t size() const
returns: size of the set
ToolHandleArray< CP::IMuonTriggerScaleFactors > m_muonTrigSFTools
ToolHandleArray< IAsgElectronEfficiencyCorrectionTool > m_elecTrigEffTools
ToolHandleArray< IAsgElectronEfficiencyCorrectionTool > m_elecTrigSFTools
ToolHandleArray< IAsgPhotonEfficiencyCorrectionTool > m_photonTrigSFTools
std::vector< asg::AnaToolHandle< TauAnalysisTools::ITauEfficiencyCorrectionsTool > > m_tauTrigEffTool
ToolHandleArray< IAsgPhotonEfficiencyCorrectionTool > m_photonTrigEffTools
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ autoconfigurePileupRWTool()

StatusCode ST::SUSYObjDef_xAOD::autoconfigurePileupRWTool ( const std::string & PRWfilesDir = "dev/PileupReweighting/share/",
const std::string & PRWfileName = "",
bool usePathResolver = true,
bool RPVLLmode = false,
bool Combinedmode = false,
const std::string & HFFilter = "" )
protected

Definition at line 1013 of file SUSYObjDef_xAOD.cxx.

1013 {
1014
1015 // this will contain the path of the PRW file on /cvmfs which needs to be reverse engineered from the DSID and MC campaign
1016 // the path(s) will be added to m_prwConfFiles which is later used in the configuration of the CP PRW tool
1017 std::string prwConfigFile("");
1018
1019 if ( !isData() && m_autoconfigPRW ) {
1020
1021 prwConfigFile = PRWfilesDir;
1022
1023 float dsid = -999;
1024 std::string amiTag("");
1025 std::string mcCampaignMD("");
1026 std::string simFlavour("");
1027 std::string simType("");
1028 const xAOD::FileMetaData* fmd = nullptr;
1029
1030 // configure PRW rtag options from m_autoconfigPRWRtags string
1031 // e.g. "mc20a:r13167_r14859,mc20d:r13144_r14860,mc20e:r13145_r14861,mc21a:r13752_r13829,mc23a:r14622_r14932_r15540,mc23c:r14799_r14908,mc23d:r15224_r15530,mc23e:r16083"
1032 std::map<std::string,std::vector<std::string>> PRWRtags = {};
1033 std::string allcampaigns = "mc20a.mc20d.mc20e.mc21a.mc23a.mc23c.mc23d.mc23e";
1034 bool standard_like = true;
1035 for ( const auto& campaign_rtags : split( m_autoconfigPRWRtags, "," ) ) { // split string by ","
1036 std::string icampaign = campaign_rtags.substr(0, campaign_rtags.find(":")); // first field = campaign, split by ":"
1037 std::vector<std::string> irtags = split( campaign_rtags.substr(campaign_rtags.find(":")+1), "_" ); // remaining fields = rtags, split by "_"
1038 PRWRtags[icampaign] = irtags;
1039 ATH_MSG_DEBUG( "PRW autoconfigure considering rtags " << campaign_rtags.substr(campaign_rtags.find("_")+1) << " for campaign " << icampaign );
1040 }
1041 for ( const auto& x : PRWRtags ) {
1042 if ( allcampaigns.find(x.first)==string::npos ) {
1043 ATH_MSG_ERROR("m_autoconfigPRWRtags contains invalid campaign: " << x.first << " (" << m_autoconfigPRWRtags << ")");
1044 ATH_MSG_ERROR("use any of " << allcampaigns);
1045 return StatusCode::FAILURE;
1046 }
1047 }
1048
1049 // let's use MetaData to extract sample information
1050 if ( inputMetaStore()->contains<xAOD::FileMetaData>("FileMetaData") && inputMetaStore()->retrieve(fmd,"FileMetaData").isSuccess() ) {
1052 fmd->value(xAOD::FileMetaData::amiTag, amiTag);
1053 fmd->value(xAOD::FileMetaData::simFlavour, simFlavour);
1054
1055 if(simFlavour.starts_with("ATLFASTII")) simType = "AFII";
1056 else if(simFlavour.starts_with("ATLFAST3")) simType = "AF3";
1057 else simType = "FS";
1058
1059 bool found = false;
1060 while ( mcCampaignMD.empty() ) {
1061 for ( const auto& campaign_rtags : PRWRtags ) { // consider all campaigns
1062 for ( const auto& rtag: campaign_rtags.second ) { // consider all rtags
1063 if (found) continue;
1064 if (amiTag.find(rtag)!=string::npos) { // find matching tag
1065 mcCampaignMD = campaign_rtags.first.substr(0,5); // save campaign
1066 standard_like = (campaign_rtags.first.find("ns")?true:false); // track non-standard r-tags
1067 found = true; // break if found
1068 }
1069 }
1070 }
1071 // in case not found
1072 if (!found) {
1073 ATH_MSG_ERROR( "autoconfigurePileupRWTool(): unrecognized xAOD::FileMetaData::amiTag, \'" << amiTag << "'. Please check your input sample.");
1074 return StatusCode::FAILURE;
1075 }
1076 //
1077 ATH_MSG_INFO( "Setting up autoconfigurePileupRWTool for mc campaign " << mcCampaignMD << " (from amiTag " << amiTag << ") (standard-like = " << (standard_like?"true":"false") << ")." );
1078 if ( (!standard_like) && (!RPVLLmode) )
1079 ATH_MSG_WARNING("Non-standard r-tag found (" << amiTag.data() << "), but RPVLLmode not set. Perhaps you want to set \"PRW.autoconfigPRWRPVmode: 1\" in the config?");
1080 }
1081 } else {
1082#ifndef XAOD_STANDALONE
1083 ATH_MSG_ERROR( "autoconfigurePileupRWTool(): access to FileMetaData failed, can't get mc channel number.");
1084 return StatusCode::FAILURE;
1085#else
1086
1087 if ( m_mcCampaign == "mc20a" || m_mcCampaign == "mc20d" || m_mcCampaign == "mc20e" || m_mcCampaign == "mc21a" || m_mcCampaign == "mc23a" || m_mcCampaign == "mc23c" || m_mcCampaign == "mc23d" || m_mcCampaign == "mc23e") {
1088 // First see if the user set the mcCampaign/run number by property (hopefully temporary workaround)
1089 if ( m_mcChannel > 0) {
1090 ATH_MSG_WARNING( "autoconfigurePileupRWTool(): access to FileMetaData failed -> getting the mc channel number (DSID) and campaign from configuration." );
1091 std::string NoMetadataButPropertyOK("");
1092 NoMetadataButPropertyOK += "autoconfigurePileupRWTool(): 'mcCampaign' is used and passed to SUSYTools as '";
1093 NoMetadataButPropertyOK += m_mcCampaign;
1094 NoMetadataButPropertyOK += "'. 'mcChannel' is used and passed to SUSYTools as '";
1095 NoMetadataButPropertyOK += std::to_string(m_mcChannel);
1096 NoMetadataButPropertyOK += "'. Autocongiguring PRW accordingly.";
1097 ATH_MSG_WARNING( NoMetadataButPropertyOK );
1098 mcCampaignMD = m_mcCampaign;
1099 dsid = m_mcChannel;
1100 } else {
1101 // OK, this is a fall-back option without using MetaData but one has to manually set 'mcCampaign' property
1102 ATH_MSG_WARNING( "autoconfigurePileupRWTool(): access to FileMetaData failed -> getting the mc channel number (DSID) from the event store." );
1103 const xAOD::EventInfo* evtInfo = GetEventInfo();
1104 dsid = evtInfo->mcChannelNumber();
1105
1106 std::string NoMetadataButPropertyOK("");
1107 NoMetadataButPropertyOK += "autoconfigurePileupRWTool(): 'mcCampaign' is used and passed to SUSYTools as '";
1108 NoMetadataButPropertyOK += m_mcCampaign;
1109 NoMetadataButPropertyOK += "'. Autoconfiguring PRW accordingly.";
1110 ATH_MSG_WARNING( NoMetadataButPropertyOK );
1111 mcCampaignMD = m_mcCampaign;
1112 }
1113 } else {
1114 ATH_MSG_ERROR( "autoconfigurePileupRWTool(): `mcCampaign' is not set properly.");
1115 return StatusCode::FAILURE;
1116 }
1117#endif
1118 }
1119
1120 // If requested set the PRW file to common PRW file of the processed MC campaign
1121 if (m_useCommonPRWFiles) {
1122 ATH_MSG_INFO( "autoconfigurePileupRWTool(): retrieving the common PRW file for MC campaign: " << mcCampaignMD );
1123 if (mcCampaignMD == "mc20a") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC20a);}
1124 else if (mcCampaignMD == "mc20d") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC20d);}
1125 else if (mcCampaignMD == "mc20e") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC20e);}
1126 else if (mcCampaignMD == "mc21a") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC21a);}
1127 else if (mcCampaignMD == "mc23a") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC23a);}
1128 else if (mcCampaignMD == "mc23c") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC23c);}
1129 else if (mcCampaignMD == "mc23d") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC23d);}
1130 else if (mcCampaignMD == "mc23e") {prwConfigFile = PathResolverFindCalibFile(m_commonPRWFileMC23e);}
1131 else {
1132 ATH_MSG_ERROR( "autoconfigurePileupRWTool(): no common PRW file known for MC campaign: " << mcCampaignMD);
1133 return StatusCode::FAILURE;
1134 }
1135 }
1136 // Otherwise try finding the dedicated PRW file on /cvmfs
1137 else {
1138 // Retrieve the input file
1139 int DSID_INT = static_cast<int>(dsid);
1140 prwConfigFile += "DSID" + std::to_string(DSID_INT/1000) + "xxx/pileup_" + mcCampaignMD + "_dsid" + std::to_string(DSID_INT) + "_" + simType + ".root";
1141
1142 if (RPVLLmode) prwConfigFile = TString(prwConfigFile).ReplaceAll(".root","_rpvll.root").Data();
1143
1144 // PRW file specified by user
1145 // e.g. DSID700xxx/pileup_mc20a_dsid700015_FS.root
1146 if (!PRWfileName.empty()) {
1147 prwConfigFile = PRWfilesDir + PRWfileName;
1148 ATH_MSG_INFO( "autoconfigurePileupRWTool(): PRW file was specifed by user: " << prwConfigFile.data() );
1149 }
1150 }
1151
1152 m_prwConfFiles.clear();
1153
1154 // Combined mode can be only used when running with full data with the same MC samples
1155 if (Combinedmode) {
1156 if (mcCampaignMD.find("mc20") == std::string::npos) {
1157 ATH_MSG_ERROR( "autoconfigurePileupRWTool(): combined mode currently onlys supported for mc20! Impossible to autoconfigure PRW. Aborting." );
1158 return StatusCode::FAILURE;
1159 }
1160 // When using the common PRW files we can directly add them
1161 if (m_useCommonPRWFiles) {
1165 }
1166 // Otherwise we have to replace the mc campaign in the name accordingly
1167 else {
1168 m_prwConfFiles.emplace_back( TString(prwConfigFile).ReplaceAll(mcCampaignMD, "mc20a").Data() );
1169 m_prwConfFiles.emplace_back( TString(prwConfigFile).ReplaceAll(mcCampaignMD, "mc20d").Data() );
1170 m_prwConfFiles.emplace_back( TString(prwConfigFile).ReplaceAll(mcCampaignMD, "mc20e").Data() );
1171 }
1174 } else {
1175 m_prwConfFiles.push_back( prwConfigFile );
1176 if ( mcCampaignMD == "mc20d") {
1178 } else if (mcCampaignMD == "mc20e") {
1180 } else if (mcCampaignMD == "mc21a" || mcCampaignMD == "mc23a") {
1182 } else if (mcCampaignMD == "mc23c" || mcCampaignMD == "mc23d") {
1184 } else if (mcCampaignMD == "mc23e") {
1186 }
1187
1188 }
1189 prwConfigFile = usePathResolver ? PathResolverFindCalibFile(prwConfigFile) : prwConfigFile;
1190
1191 // Test if file exists (i.e. was requested already to /cvmfs if the DSID-specific PRW files are used) and is usable
1192 TFile testF(prwConfigFile.data(),"read");
1193 if (testF.IsZombie()) {
1194 ATH_MSG_ERROR( "autoconfigurePileupRWTool(): file not found -> " << prwConfigFile.data() << " ! Impossible to autoconfigure PRW. Aborting." );
1195 if ( (!standard_like) && (!RPVLLmode) )
1196 ATH_MSG_WARNING("Running with non-standard r-tag (" << amiTag.data() << "), but RPVLLmode not set. Perhaps you want to set \"PRW.autoconfigPRWRPVmode: 1\" in the config?");
1197 return StatusCode::FAILURE;
1198 }
1199
1200 ATH_MSG_INFO( "autoconfigurePileupRWTool(): configuring PRW tool using " << prwConfigFile.data() );
1201 }
1202 // Return gracefully
1203 return StatusCode::SUCCESS;
1204}
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
const std::vector< std::string > split(const std::string &s, const std::string &delim) const
MetaStorePtr_t inputMetaStore() const
Accessor for the input metadata store.
uint32_t mcChannelNumber() const
The MC generator's channel number.
@ mcProcID
Same as mc_channel_number [float].
@ amiTag
AMI tag used to process the file the last time [string].
@ simFlavour
Fast or Full sim [string].
bool value(MetaDataType type, std::string &val) const
Get a pre-defined string value out of the object.
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
retrieve(aClass, aKey=None)
Definition PyKernel.py:110
FileMetaData_v1 FileMetaData
Declare the latest version of the class.

◆ beginEvent()

StatusCode asg::AsgMetadataTool::beginEvent ( )
protectedvirtualinherited

◆ beginInputFile()

StatusCode asg::AsgMetadataTool::beginInputFile ( )
protectedvirtualinherited

Function called when a new input file is opened.

Dummy implementation that can be overridden by the derived tool.

Reimplemented in AsgElectronEfficiencyCorrectionTool, BookkeeperDumperTool, BookkeeperTool, PMGTools::PMGTruthWeightTool, TauAnalysisTools::TauEfficiencyCorrectionsTool, TauAnalysisTools::TauSmearingTool, Trig::TrigDecisionTool, Trig::xAODBunchCrossingTool, TrigConf::xAODConfigTool, xAODMaker::TriggerMenuMetaDataTool, and xAODMaker::TruthMetaDataTool.

Definition at line 185 of file AsgMetadataTool.cxx.

185 {
186
187 // Return gracefully:
188 return StatusCode::SUCCESS;
189 }

◆ BtagSF()

float ST::SUSYObjDef_xAOD::BtagSF ( const xAOD::JetContainer * jets)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 826 of file Jets.cxx.

826 {
827
828 float totalSF = 1.;
829 for ( const xAOD::Jet* jet : *jets ) {
830
831 float sf = 1.;
832
833 if ( std::abs(jet->eta()) > 2.5 ) {
834 ATH_MSG_VERBOSE( "Trying to retrieve b-tagging SF for jet with |eta|>2.5 (jet eta=" << jet->eta() << "), jet will be skipped");
835 } else if ( jet->pt() < 20e3 ){
836 ATH_MSG_VERBOSE( "Trying to retrieve b-tagging SF for jet with invalid pt (jet pt=" << jet->pt() << "), jet will be skipped");
837 } else {
838
839 CP::CorrectionCode result;
840 int truthlabel(-1);
841 if (!jet->getAttribute("HadronConeExclTruthLabelID", truthlabel)) {
842 ATH_MSG_ERROR("Failed to get jet truth label!");
843 }
844 ATH_MSG_VERBOSE("This jet is " << (acc_bjet(*jet) ? "" : "not ") << "b-tagged.");
845 ATH_MSG_VERBOSE("This jet's truth label is " << truthlabel);
846
847 if ( acc_bjet(*jet) or m_BtagWP == "Continuous") {
848 result = m_btagEffTool->getScaleFactor(*jet, sf);
849
850 switch (result) {
852 ATH_MSG_ERROR( "Failed to retrieve SF for b-tagged jets in SUSYTools_xAOD::BtagSF" );
853 break;
855 ATH_MSG_VERBOSE( "No valid SF for b-tagged jets in SUSYTools_xAOD::BtagSF" );
856 break;
857 default:
858 ATH_MSG_VERBOSE( "Retrieve SF for b-tagged jets in SUSYTools_xAOD::BtagSF with value " << sf );
859 }
860 } else {
861
862 result = m_btagEffTool->getInefficiencyScaleFactor(*jet, sf);
863
864 switch (result) {
866 ATH_MSG_ERROR( "Failed to retrieve SF for non-b-tagged jets in SUSYTools_xAOD::BtagSF" );
867 break;
869 ATH_MSG_VERBOSE( "No valid inefficiency SF for non-b-tagged jets in SUSYTools_xAOD::BtagSF" );
870 break;
871 default:
872 ATH_MSG_VERBOSE( "Retrieve SF for non-b-tagged jets in SUSYTools_xAOD::BtagSF with value " << sf );
873 }
874 }
875 }
876
877 dec_effscalefact(*jet) = sf;
878
879 if( acc_signal(*jet) && acc_passOR(*jet) ) totalSF *= sf; //consider goodjets only
880
881 }
882
883 return totalSF;
884 }
@ Error
Some error happened during the object correction.
@ OutOfValidityRange
Input object is out of validity range.
static const SG::Decorator< double > dec_effscalefact("effscalefact")
static const SG::ConstAccessor< char > acc_signal("signal")
static const SG::ConstAccessor< char > acc_bjet("bjet")
static const SG::ConstAccessor< char > acc_passOR("passOR")
Jet_v1 Jet
Definition of the current "jet version".

◆ BtagSF_trkJet()

float ST::SUSYObjDef_xAOD::BtagSF_trkJet ( const xAOD::JetContainer * trkjets)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 907 of file Jets.cxx.

907 {
908
909 float totalSF = 1.;
910 for ( const xAOD::Jet* trkjet : *trkjets ) {
911
912 float sf = 1.;
913
914 if ( std::abs(trkjet->eta()) > 2.5 ) {
915 ATH_MSG_VERBOSE( "Trying to retrieve b-tagging SF for trkjet with |eta|>2.5 (trkjet eta=" << trkjet->eta() << "), trkjet will be skipped");
916 } else if ( trkjet->pt() < 10e3 ){
917 ATH_MSG_VERBOSE( "Trying to retrieve b-tagging SF for trkjet with invalid pt (trkjet pt=" << trkjet->pt() << "), jet will be skipped");
918 } else {
919
920 CP::CorrectionCode result;
921 int truthlabel(-1);
922 if (!trkjet->getAttribute("HadronConeExclTruthLabelID", truthlabel)) {
923 ATH_MSG_ERROR("Failed to get jet truth label!");
924 }
925 ATH_MSG_VERBOSE("This jet is " << (acc_bjet(*trkjet) ? "" : "not ") << "b-tagged.");
926 ATH_MSG_VERBOSE("This jet's truth label is " << truthlabel);
927
928 if ( acc_bjet(*trkjet) ) {
929 result = m_btagEffTool_trkJet->getScaleFactor(*trkjet, sf);
930
931 switch (result) {
933 ATH_MSG_ERROR( "Failed to retrieve SF for b-tagged trk jets in SUSYTools_xAOD::BtagSF_trkJet" );
934 break;
936 ATH_MSG_VERBOSE( "No valid SF for b-tagged trk jets in SUSYTools_xAOD::BtagSF_trkJet" );
937 break;
938 default:
939 ATH_MSG_VERBOSE( "Retrieve SF for b-tagged trk jets in SUSYTools_xAOD::BtagSF_trkJet with value " << sf );
940 }
941 } else {
942
943 result = m_btagEffTool_trkJet->getInefficiencyScaleFactor(*trkjet, sf);
944
945 switch (result) {
947 ATH_MSG_ERROR( "Failed to retrieve SF for non-b-tagged trk jets in SUSYTools_xAOD::BtagSF_trkJet" );
948 break;
950 ATH_MSG_VERBOSE( "No valid inefficiency SF for non-b-tagged trk jets in SUSYTools_xAOD::BtagSF_trkJet" );
951 break;
952 default:
953 ATH_MSG_VERBOSE( "Retrieve SF for non-b-tagged trk jets in SUSYTools_xAOD::BtagSF_trkJet with value " << sf );
954 }
955 }
956 }
957
958 dec_effscalefact(*trkjet) = sf;
959
960 if( acc_signal(*trkjet) ) totalSF *= sf;
961
962 }
963
964 return totalSF;
965 }

◆ BtagSFsys()

float ST::SUSYObjDef_xAOD::BtagSFsys ( const xAOD::JetContainer * jets,
const CP::SystematicSet & systConfig )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 887 of file Jets.cxx.

888 {
889 float totalSF = 1.;
890
891 //Set the new systematic variation
892 StatusCode ret = m_btagEffTool->applySystematicVariation(systConfig);
893 if ( ret != StatusCode::SUCCESS) {
894 ATH_MSG_ERROR("Cannot configure BTaggingEfficiencyTool for systematic var. " << systConfig.name() );
895 }
896
897 totalSF = BtagSF( jets );
898
899 ret = m_btagEffTool->applySystematicVariation(m_currentSyst);
900 if ( ret != StatusCode::SUCCESS) {
901 ATH_MSG_ERROR("Cannot configure BTaggingEfficiencyTool for systematic var. " << systConfig.name() );
902 }
903
904 return totalSF;
905 }
float BtagSF(const xAOD::JetContainer *jets) override final
Definition Jets.cxx:826

◆ BtagSFsys_trkJet()

float ST::SUSYObjDef_xAOD::BtagSFsys_trkJet ( const xAOD::JetContainer * trkjets,
const CP::SystematicSet & systConfig )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 968 of file Jets.cxx.

969 {
970 float totalSF = 1.;
971
972 //Set the new systematic variation
973 StatusCode ret = m_btagEffTool_trkJet->applySystematicVariation(systConfig);
974 if ( ret != StatusCode::SUCCESS) {
975 ATH_MSG_ERROR("Cannot configure BTaggingEfficiencyTool (track jets) for systematic var. " << systConfig.name() );
976 }
977
978 totalSF = BtagSF_trkJet( trkjets );
979
980 ret = m_btagEffTool_trkJet->applySystematicVariation(m_currentSyst);
981 if ( ret != StatusCode::SUCCESS) {
982 ATH_MSG_ERROR("Cannot configure BTaggingEfficiencyTool (track jets) for systematic var. " << systConfig.name() );
983 }
984
985 return totalSF;
986 }
float BtagSF_trkJet(const xAOD::JetContainer *trkjets) override final
Definition Jets.cxx:907

◆ check_isOption()

bool ST::SUSYObjDef_xAOD::check_isOption ( const std::string & wp,
const std::vector< std::string > & list ) const
protected

Definition at line 1214 of file SUSYObjDef_xAOD.cxx.

1214 {
1215 //check if the selected WP is supported
1216 return (std::find(list.begin(), list.end(),wp) != list.end());
1217}
list(name, path='/')
Definition histSizes.py:38

◆ check_isTighter()

bool ST::SUSYObjDef_xAOD::check_isTighter ( const std::string & wp1,
const std::string & wp,
const std::vector< std::string > & list ) const
protected

Definition at line 1219 of file SUSYObjDef_xAOD.cxx.

1219 {
1220 //check if WP1 is tighter than WP2
1221 //it is assumed that both WPs are supported
1222 return (std::find(list.begin(),list.end(),wp1) > std::find(list.begin(), list.end(),wp2));
1223}

◆ configFromFile() [1/4]

void ST::SUSYObjDef_xAOD::configFromFile ( bool & property,
const std::string & propname,
TEnv & rEnv,
bool defaultValue )
protected

Definition at line 1257 of file SUSYObjDef_xAOD.cxx.

1259{
1260 if(m_bool_prop_set.find(m_conf_to_prop[propname])!=m_bool_prop_set.end()){
1261 ATH_MSG_INFO( "configFromFile(): property \"" << propname << "\" already set with value " << property << ". Ignoring change request." );
1262 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject(propname.c_str() ) );
1263 return;
1264 }
1265 property = rEnv.GetValue(propname.c_str(), static_cast<int>(defaultValue));
1266 ATH_MSG_INFO( "configFromFile(): Loaded property \"" << propname << "\" with value " << property );
1267 // Remove the item from the table
1268 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject(propname.c_str() ) );
1269}
std::map< std::string, std::string > m_conf_to_prop
std::set< std::string > m_bool_prop_set

◆ configFromFile() [2/4]

void ST::SUSYObjDef_xAOD::configFromFile ( double & property,
const std::string & propname,
TEnv & rEnv,
double defaultValue )
protected

Definition at line 1272 of file SUSYObjDef_xAOD.cxx.

1274{
1275 // ignore if already configured
1276 if (property > -90.) {
1277 ATH_MSG_INFO( "configFromFile(): property \"" << propname << "\" already set with value " << property << ". Ignoring change request." );
1278 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject(propname.c_str() ) );
1279 return;
1280 }
1281 property = rEnv.GetValue(propname.c_str(), defaultValue);
1282 ATH_MSG_INFO( "configFromFile(): Loaded property \"" << propname << "\" with value " << property );
1283 // Remove the item from the table
1284 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject(propname.c_str() ) );
1285}

◆ configFromFile() [3/4]

void ST::SUSYObjDef_xAOD::configFromFile ( int & property,
const std::string & propname,
TEnv & rEnv,
int defaultValue )
protected

Definition at line 1288 of file SUSYObjDef_xAOD.cxx.

1290{
1291 // ignore if already configured
1292 if (property > -90){
1293 ATH_MSG_INFO( "configFromFile(): property \"" << propname << "\" already set with value " << property << ". Ignoring change request." );
1294 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject(propname.c_str() ) );
1295 return;
1296 }
1297 property = rEnv.GetValue(propname.c_str(), defaultValue);
1298 ATH_MSG_INFO( "configFromFile(): Loaded property \"" << propname << "\" with value " << property );
1299 // Remove the item from the table
1300 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject(propname.c_str() ) );
1301}

◆ configFromFile() [4/4]

void ST::SUSYObjDef_xAOD::configFromFile ( std::string & property,
const std::string & propname,
TEnv & rEnv,
const std::string & defaultValue,
bool allowEmpty = false )
protected

Definition at line 1304 of file SUSYObjDef_xAOD.cxx.

1306{
1307 // ignore if already configured
1308 if (!property.empty()){
1309 ATH_MSG_INFO( "configFromFile(): property \"" << propname << "\" already set with value " << property << ". Ignoring change request." );
1310 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject(propname.c_str() ) );
1311 return;
1312 }
1313 property = rEnv.GetValue(propname.c_str(), defaultValue.c_str());
1314 if (property.empty() && !allowEmpty) {
1315 ATH_MSG_FATAL("Read empty string property from text file (property name: " << propname << ")");
1316 }
1317
1318 // post-processing to get rid of leading/trailing spaces and comments
1319 std::string tmp_prop = property.substr(0, property.find('#', 0));
1320 property = TString(tmp_prop).ReplaceAll(" ","").Data();
1321
1322 // Interpret None as an empty string
1323 if (property=="None" || property=="NONE" || property=="none") {
1324 ATH_MSG_VERBOSE( "Property \"" << propname << "\" being set to empty string due to specification of \"" << property << "\"" );
1325 property = "";
1326 }
1327
1328 ATH_MSG_INFO( "configFromFile(): Loaded property \"" << propname << "\" with value " << property );
1329 // Remove the item from the table
1330 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject(propname.c_str() ) );
1331}
#define ATH_MSG_FATAL(x)

◆ currentSystematic()

const CP::SystematicSet & ST::SUSYObjDef_xAOD::currentSystematic ( ) const

Definition at line 2106 of file SUSYObjDef_xAOD.cxx.

2106 {
2107 return m_currentSyst;
2108}

◆ currentSystematicIsNominal()

bool ST::SUSYObjDef_xAOD::currentSystematicIsNominal ( ) const

Definition at line 2134 of file SUSYObjDef_xAOD.cxx.

2134 {
2135 return isNominal(m_currentSyst);
2136}
bool isNominal(const CP::SystematicSet &syst) const

◆ currentSystematicIsVariation()

bool ST::SUSYObjDef_xAOD::currentSystematicIsVariation ( ) const

Definition at line 2138 of file SUSYObjDef_xAOD.cxx.

2138 {
2139 return isVariation(m_currentSyst);
2140}
bool isVariation(const CP::SystematicSet &syst) const

◆ currentSystematicIsWeight()

bool ST::SUSYObjDef_xAOD::currentSystematicIsWeight ( ) const

Definition at line 2142 of file SUSYObjDef_xAOD.cxx.

2142 {
2143 return isWeight(m_currentSyst);
2144}
bool isWeight(const CP::SystematicSet &systSet) const

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

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

◆ EG_WP()

std::string ST::SUSYObjDef_xAOD::EG_WP ( const std::string & wp) const
protected

Definition at line 1226 of file SUSYObjDef_xAOD.cxx.

1226 {
1227 //translate our electron wps to EGamma internal jargon
1228 //@ElectronPhotonSelectorTools/EGSelectorConfigurationMapping.h
1229 TString copy = TString(wp).Copy().ReplaceAll("AndBLayer","BL").ReplaceAll("LLH","LHElectron");
1230 // the DNN WPs are labeled in the map as e.g. TightDNNnoCFElectron or TightDNNElectron
1231 if (wp.find("DNNnoCF") != std::string::npos)
1232 copy.ReplaceAll("DNNnoCF", "DNNnoCFElectron");
1233 else if (wp.find("DNN") != std::string::npos)
1234 copy.ReplaceAll("DNN", "DNNElectron");
1235 return copy.Data();
1236}
bool copy
Definition calibdata.py:26

◆ emulateHLT()

bool ST::SUSYObjDef_xAOD::emulateHLT ( const std::string & triggerName) const
private

Definition at line 97 of file Trigger.cxx.

97 {
98 std::scoped_lock lock (m_triggerCacheMutex);
99 // First, check if we've already tried using this trigger
100 auto funcItr = m_metTriggerFuncs.find(triggerName);
101 if (funcItr != m_metTriggerFuncs.end() )
102 return funcItr->second();
103
104 // Next, check that it really is a HLT MET trigger
105 if (triggerName.substr(0,6) != "HLT_xe") {
106 ATH_MSG_ERROR( "Requested trigger " << triggerName << " isn't a MET trigger! (HLT MET items should begin with 'HLT_xe'). Will return false." );
107 return false;
108 }
109
110 // Next, parse the name to work out which containers are needed to emulate the decision
111 std::vector<std::pair<int, std::string> > hypos; // algorithms and thresholds needed
112 std::string temp(triggerName);
113 // Note, we need to split on '_AND_' used for the combined mht+cell trigger
114 do {
115 auto pos = temp.find("_AND_");
116 std::string itemName = temp.substr(0, pos);
117 ATH_MSG_DEBUG( "Split trigger item " << itemName );
118 if (pos == std::string::npos)
119 temp = "";
120 else
121 temp = temp.substr(pos + 5);
122
123 std::regex expr("HLT_xe([[:digit:]]+)_?(mht|pufit|pueta|tc_lcw|)_?(?:L1XE([[:digit:]]+)|)");
124 std::smatch sm;
125 if (!std::regex_match(itemName, sm, expr) ) {
126 ATH_MSG_WARNING( "Regex reading for item " << itemName << " (" << triggerName << ") failed! Will be ignored!" );
127 continue;
128 }
129 if (sm.size() < 4) { // first object is the whole match, then there are three capture groups
130 ATH_MSG_WARNING( "Regex failed to capture the right groups for item " << itemName << " (" << triggerName << ") failed! Will be ignored!" );
131 for (unsigned int ii = 0; ii < sm.size(); ++ii) {
132 ATH_MSG_WARNING( sm[ii] );
133 }
134 continue;
135 }
136 int threshold = std::stoi(sm[1] );
137 std::string algKey = sm[2];
138 std::string metContBaseName = "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET";
139 if (algKey.empty()) hypos.push_back(std::make_pair(threshold, metContBaseName) );
140 else if (algKey == "mht") hypos.push_back(std::make_pair(threshold, metContBaseName+"_mht") );
141 else if (algKey == "pufit") hypos.push_back(std::make_pair(threshold, metContBaseName+"_topocl_PUC") );
142 else if (algKey == "pueta") hypos.push_back(std::make_pair(threshold, metContBaseName+"_topocl_PS") );
143 else if (algKey == "tc_lcw") hypos.push_back(std::make_pair(threshold, metContBaseName+"topocl") );
144
145 ATH_MSG_DEBUG( "Container: " << hypos.back().second << ", Threshold: " << hypos.back().first );
146
147 if (sm[3] != "" && sm[3] != "50") {
148 ATH_MSG_WARNING( "The trigger requires a different L1 item to L1_XE50! This currently isn't allowed for in the code so the emulation will be slightly wrong" );
149 // Note, now the L1 part is done in the previous section. However I'm keeping this warning here.
150 }
151 }
152 while (!temp.empty());
153
154 // Check if we have the containers and construct the lambda
155 // Already done the L1 decision - only care about HLT
156 std::function<bool()> lambda;
157 bool hasRequired = true;
158 if (hypos.empty()) lambda = [] () {return false;};
159 else {
160 for (const auto& pair : hypos) {
162 auto lambda_hypo = [this, pair] () {
163 const xAOD::TrigMissingETContainer* cont(nullptr);
164 if (evtStore()->retrieve(cont, pair.second) ) {
165 if (cont->empty()) return false;
166 float ex = cont->front()->ex() * 0.001;
167 float ey = cont->front()->ey() * 0.001;
168 float met = std::sqrt(ex*ex + ey*ey);
169 return met > pair.first;
170 }
171 else {
172 return false;
173 }
174 };
175 // an empty std::function evaluates to false
176 if (lambda) {
177 lambda = [lambda, lambda_hypo] () {
178 return lambda() && lambda_hypo();
179 };
180 }
181 else {
182 lambda = lambda_hypo;
183 }
184 }
185 else {
186 hasRequired = false;
187 ATH_MSG_WARNING( "Container: " << pair.second << " missing!" );
188 }
189 }
190 }
191 if (hasRequired) {
192 m_metTriggerFuncs[triggerName] = lambda;
193 return m_metTriggerFuncs.at(triggerName)();
194 }
195 // We can't get the exact trigger decision :( . Look for an alternative
196 std::vector<std::string> replacementTriggers({"HLT_xe110_mht_L1XE50", "HLT_xe100_mht_L1XE50", "HLT_xe90_mht_L1XE50", "HLT_xe70_mht"});
197 for (const std::string& trigName : replacementTriggers) {
198 if (isTrigInTDT(lock, trigName) ) {
199 ATH_MSG_WARNING( "Trigger " << triggerName << " not available and direct emulation impossible! Will use " << trigName << " instead!");
200 m_metTriggerFuncs[triggerName] = [this, trigName] () {
201 return m_trigDecTool->isPassed(trigName);
202 };
203 return m_metTriggerFuncs.at(triggerName)();
204 }
205 }
206 ATH_MSG_ERROR( "Cannot find the trigger in the menu, direct emulation is impossible and no replacement triggers are available! Will return false" );
207 m_metTriggerFuncs.at(triggerName) = [] () {return false;};
208 return m_metTriggerFuncs.at(triggerName)();
209}
ServiceHandle< StoreGateSvc > & evtStore()
std::mutex m_triggerCacheMutex
bool isTrigInTDT(std::scoped_lock< std::mutex > &lock, const std::string &triggerName) const
Definition Trigger.cxx:83
TrigMissingETContainer_v1 TrigMissingETContainer
DataVector of TrigMissingET - the current version.
setBGCode setTAP setLVL2ErrorBits bool

◆ endInputFile()

StatusCode asg::AsgMetadataTool::endInputFile ( )
protectedvirtualinherited

Function called when the currently open input file got completely processed.

Dummy implementation that can be overridden by the derived tool.

Reimplemented in BookkeeperDumperTool, BookkeeperTool, xAODMaker::TriggerMenuMetaDataTool, and xAODMaker::TruthMetaDataTool.

Definition at line 193 of file AsgMetadataTool.cxx.

193 {
194
195 // Return gracefully:
196 return StatusCode::SUCCESS;
197 }

◆ 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

◆ FillElectron()

StatusCode ST::SUSYObjDef_xAOD::FillElectron ( xAOD::Electron & input,
const float etcut,
const float etacut )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 223 of file Electrons.cxx.

223 {
224
225 ATH_MSG_VERBOSE( "Starting FillElectron on el with pre-calibration pt=" << input.pt() );
226
227 // According to https://twiki.cern.ch/twiki/bin/view/AtlasProtected/EGammaIdentificationRun2#Electron_identification:
228 // "Please apply the identification to uncalibrated electron object. ID scale factors are to be applied to calibrated objects."
229 dec_baseline(input) = false;
230 dec_selected(input) = 0;
231 dec_signal(input) = false;
232 dec_isol(input) = false;
233 dec_isolHighPt(input) = false;
234 dec_passSignalID(input) = false;
235 dec_passChID(input) = false;
236 dec_ecisBDT(input) = -999.;
237
238 const xAOD::EventInfo* evtInfo = nullptr;
239 ATH_CHECK( evtStore()->retrieve( evtInfo, "EventInfo" ) );
240 const xAOD::Vertex* pv = this->GetPrimVtx();
241 const xAOD::TrackParticle* track = input.trackParticle();
242 if (!track) {
243 ATH_MSG_DEBUG("No primary track particle for this electron. Skipping.");
244 return StatusCode::SUCCESS;
245 }
246 double primvertex_z = pv ? pv->z() : 0;
247 double el_z0 = track->z0() + track->vz() - primvertex_z;
248 dec_z0sinTheta(input) = el_z0 * TMath::Sin(input.p4().Theta());
249 //protect against exception thrown for null or negative d0sig
250 try{
252 }
253 catch(...){
254 float d0sigError = -99.;
255 ATH_MSG_WARNING("FillElectron : Exception catched from d0significance() calculation. Setting dummy decoration d0sig=" << d0sigError );
256 dec_d0sig(input) = d0sigError;
257 }
258
259 // don't bother calibrating or computing WP
260 if ( input.pt() < 4e3 ) return StatusCode::SUCCESS;
261 if ( !input.caloCluster() ) { ATH_MSG_WARNING( "FillElectron: no caloCluster found: " << input.caloCluster() ); return StatusCode::SUCCESS; }
262
263 //Check DeadHVCellRemoval
264 bool pass_deadHVTool = m_deadHVTool->accept(&input);
265
266 if (m_debug) {
267 unsigned char el_nPixHits(0), el_nSCTHits(0);
268 input.trackParticle()->summaryValue(el_nPixHits, xAOD::numberOfPixelHits);
269 input.trackParticle()->summaryValue(el_nSCTHits, xAOD::numberOfSCTHits);
270
271 ATH_MSG_INFO( "ELECTRON eta: " << input.eta());
272 ATH_MSG_INFO( "ELECTRON phi: " << input.phi());
273 ATH_MSG_INFO( "ELECTRON cl eta: " << input.caloCluster()->eta());
274 ATH_MSG_INFO( "ELECTRON cl phi: " << input.caloCluster()->phi());
275 ATH_MSG_INFO( "ELECTRON cl e: " << input.caloCluster()->e());
276 ATH_MSG_INFO( "ELECTRON trk eta: " << input.trackParticle()->eta());
277 ATH_MSG_INFO( "ELECTRON trk phi: " << input.trackParticle()->phi());
278 ATH_MSG_INFO( "ELECTRON author: " << input.author());
279 ATH_MSG_INFO( "ELECTRON OQ: " << acc_OQ(input));
280 ATH_MSG_INFO( "ELECTRON nPixHits: " << static_cast<int>(el_nPixHits));
281 ATH_MSG_INFO( "ELECTRON nSCTHits: " << static_cast<int>(el_nSCTHits));
282 ATH_MSG_INFO( "ELECTRON deadHVTools: " << static_cast<bool>(pass_deadHVTool));
283 }
284
285 if (!pass_deadHVTool) return StatusCode::SUCCESS;
286 if (!input.isGoodOQ(xAOD::EgammaParameters::BADCLUSELECTRON)) return StatusCode::SUCCESS;
287
288 if ( m_elecSelLikelihoodBaseline.empty()) {
289 ATH_MSG_ERROR("No baseline electron selector defined!");
290 return StatusCode::FAILURE;
291 }
292
293 bool passBaseID = false;
294 if (m_eleIdExpert) {
295 passBaseID = bool(m_elecSelLikelihoodBaseline->accept(&input));
296 } else {
297 if (m_acc_eleIdBaseline.isAvailable(input)) {
298 passBaseID = m_acc_eleIdBaseline(input);
299 } else {
300 ATH_MSG_VERBOSE ("DFCommonElectronsLHxxx variables are not found. Calculating the ID from LH tool..");
301 passBaseID = bool(m_elecSelLikelihoodBaseline->accept(&input));
302 }
303 }
304
305 if ( !passBaseID && !m_force_noElId ) return StatusCode::SUCCESS;
306
307 //baseline ID decoration for TauEl OR
308 //dec_passBaseID(input) = true;
309
310 // calibrate the electron 4-vector here only if within eta window
311 if (std::abs(input.caloCluster()->etaBE(2)) >= etacut) return StatusCode::SUCCESS;
312
314 if ( std::abs( input.caloCluster()->etaBE(2) ) >1.37 && std::abs( input.caloCluster()->etaBE(2) ) <1.52) {
315 return StatusCode::SUCCESS;
316 }
317 }
318
319 // corrections described in https://twiki.cern.ch/twiki/bin/view/AtlasProtected/EGammaCalibrationRun2
320 if ( m_egammaCalibTool->applyCorrection(input) != CP::CorrectionCode::Ok)
321 ATH_MSG_ERROR( "FillElectron: EgammaCalibTool applyCorrection failed ");
322
323 if (m_isoCorrTool->applyCorrection(input) != CP::CorrectionCode::Ok)
324 ATH_MSG_ERROR("FillElectron: IsolationCorrectionTool applyCorrection failed");
325
326 ATH_MSG_VERBOSE( "FillElectron: post-calibration pt=" << input.pt() );
327
328 if (input.pt() < etcut) return StatusCode::SUCCESS;
329
330 if (m_elebaselinez0>0. && std::abs(acc_z0sinTheta(input))>m_elebaselinez0) return StatusCode::SUCCESS;
331 if (m_elebaselined0sig>0. && std::abs(acc_d0sig(input))>m_elebaselined0sig) return StatusCode::SUCCESS;
332
333 //--- Do baseline isolation check
334 if ( !( m_eleBaselineIso_WP.empty() ) && !( m_isoBaselineTool->accept(input) ) ) return StatusCode::SUCCESS;
335
336 dec_baseline(input) = true;
337 dec_selected(input) = 2;
338 //disable if (!m_eleIso_WP.empty() && m_eleIso_WP.find("PLV")!=std::string::npos) ATH_CHECK( ->augmentPLV(input) );
339 if (!m_eleIso_WP.empty()) dec_isol(input) = bool(m_isoTool->accept(input));
340 if (!m_eleIsoHighPt_WP.empty()) dec_isolHighPt(input) = bool(m_isoHighPtTool->accept(input));
341
342 //ChargeIDSelector
343 if( m_runECIS ){
344 if (acc_passECIDS.isAvailable(input)) {
345 dec_passChID(input) = acc_passECIDS(input); // Loose 97% WP!
346 } else {
347 dec_passChID(input) = bool(m_elecChargeIDSelectorTool->accept(&input));
348 //disable double bdt = m_elecChargeIDSelectorTool->calculate(&input).getResult("bdt");
349 //disable dec_ecisBDT(input) = bdt;
350 }
351 }
352 else{
353 dec_passChID(input) = true;
354 }
355
356 ATH_MSG_VERBOSE( "FillElectron: passed baseline selection" );
357
358 return StatusCode::SUCCESS;
359}
@ Ok
The correction was done successfully.
asg::AnaToolHandle< IAsgDeadHVCellRemovalTool > m_deadHVTool
const xAOD::Vertex * GetPrimVtx() const override final
float beamPosSigmaY() const
The width of the beam spot in the Y direction.
float beamPosSigmaXY() const
The beam spot shape's X-Y correlation.
float beamPosSigmaX() const
The width of the beam spot in the X direction.
static const SG::ConstAccessor< float > acc_d0sig("d0sig")
static const SG::Decorator< char > dec_baseline("baseline")
static const SG::Decorator< char > dec_isolHighPt("isolHighPt")
static const SG::ConstAccessor< float > acc_z0sinTheta("z0sinTheta")
static const SG::Decorator< float > dec_d0sig("d0sig")
static const SG::ConstAccessor< char > acc_passECIDS("DFCommonElectronsECIDS")
static const SG::Decorator< double > dec_ecisBDT("ecisBDT")
static const SG::ConstAccessor< unsigned int > acc_OQ("OQ")
static const SG::Decorator< char > dec_passSignalID("passSignalID")
static const SG::Decorator< char > dec_passChID("passChID")
static const SG::Decorator< char > dec_isol("isol")
static const SG::Decorator< char > dec_signal("signal")
static const SG::Decorator< char > dec_selected("selected")
static const SG::Decorator< float > dec_z0sinTheta("z0sinTheta")
const uint32_t BADCLUSELECTRON
Definition EgammaDefs.h:116
double d0significance(const xAOD::TrackParticle *tp, double d0_uncert_beam_spot_2)
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].

◆ FillJet()

StatusCode ST::SUSYObjDef_xAOD::FillJet ( xAOD::Jet & input,
const bool doCalib = true,
bool isFat = false,
bool doLargeRdecorations = false )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 383 of file Jets.cxx.

383 {
384
385 ATH_MSG_VERBOSE( "Starting FillJet on jet with pt=" << input.pt() );
386 ATH_MSG_VERBOSE( "jet (pt,eta,phi) before calibration " << input.pt() << " " << input.eta() << " " << input.phi() );
387
388 static const SG::ConstAccessor<bool> acc_wValidKinRange(m_WDecorName+"_ValidKinRange");
389 static const SG::ConstAccessor<bool> acc_zValidKinRange(m_ZDecorName+"_ValidKinRange");
390 static const SG::ConstAccessor<bool> acc_topValidKinRange(m_TopDecorName+"_ValidKinRange");
391 static const SG::ConstAccessor<bool> acc_wtagged(m_WDecorName+"_Tagged");
392 static const SG::ConstAccessor<bool> acc_ztagged(m_ZDecorName+"_Tagged");
393 static const SG::ConstAccessor<bool> acc_toptagged(m_TopDecorName+"_Tagged");
394
395 if (doCalib) {
396 if(!isFat){
397 //disable - obsoleted ATH_CHECK( m_jetCalibTool->applyCalibration(input) );
398 }
399 else {
400 //disable - obsoleted ATH_CHECK( m_jetFatCalibTool->applyCalibration(input) );
401 dec_baseline(input) = ( input.pt() > m_jetPt ) || ( input.pt() > 20e3 ); // Allows for setting m_jetPt < 20e3
402 dec_bad(input) = false;
403 dec_signal(input) = false;
404 dec_bjet_loose(input) = false;
405 dec_effscalefact(input) = 1.;
406 dec_passOR(input) = true;
407 dec_bjet_jetunc(input) = false;
408 dec_btag_weight(input) = -999.;
409
410 dec_wtagged(input) = -1;
411 dec_ztagged(input) = -1;
412 dec_toptagged(input) = -1;
413 if (doLargeRdecorations) {
414
415 // Retrieve large-R tagging results for W/Z/top
416 if (!m_WtagConfig.empty()) {
417 ATH_CHECK(m_WTaggerTool->tag(input));
418 // Only tag jets if they are inside the kinematic range
419 if ( !acc_wValidKinRange(input) ) {
420 ATH_MSG_VERBOSE("Large-R W candidate jet outside of recommended tagging range. Will set score to 0.");
421 dec_wtagged(input) = 0;
422 }
423 else dec_wtagged(input) = acc_wtagged(input);
424 }
425 if (!m_ZtagConfig.empty()) {
426 ATH_CHECK(m_ZTaggerTool->tag(input));
427 // Only tag jets if they are inside the kinematic range
428 if ( !acc_zValidKinRange(input) ) {
429 ATH_MSG_VERBOSE("Large-R Z candidate jet outside of recommended tagging range. Will set score to 0.");
430 dec_ztagged(input) = 0;
431 }
432 else dec_ztagged(input) = acc_ztagged(input);
433 }
434 if (!m_ToptagConfig.empty()) {
435 ATH_CHECK(m_TopTaggerTool->tag(input));
436 // Only tag jets if they are inside the kinematic range
437 if ( !acc_topValidKinRange(input) ) {
438 ATH_MSG_VERBOSE("Large-R Top candidate jet outside of recommended tagging range. Will set score to 0.");
439 dec_toptagged(input) = 0;
440 }
441 else dec_toptagged(input) = acc_toptagged(input);
442 }
443
444 }
445
446 // If a user hasn't specified an uncertainty config, then this tool will be empty
447 // for large R jets
448 if (!m_WTagjetUncertaintiesTool.empty() && !m_WTagUncConfig.empty() && !m_WtagConfig.empty() && doLargeRdecorations) {
449 CP::CorrectionCode result = m_WTagjetUncertaintiesTool->applyCorrection(input);
450 switch (result) {
452 ATH_MSG_ERROR( "Failed to apply largeR W-tag jet scale uncertainties.");
453 return StatusCode::FAILURE;
454 //break;
456 ATH_MSG_VERBOSE( "No valid pt/eta/m range for largeR W-tag jet scale uncertainties. ");
457 break;
458 default:
459 break;
460 }
461 } else {
462 ATH_MSG_DEBUG( "No valid large-R W-tagged fat jet uncertainty, but FillJet called with a fat jet. Skipping uncertainties." );
463 }
464
465 if (!m_ZTagjetUncertaintiesTool.empty() && !m_ZTagUncConfig.empty() && !m_ZtagConfig.empty() && doLargeRdecorations) {
466 CP::CorrectionCode result = m_ZTagjetUncertaintiesTool->applyCorrection(input);
467 switch (result) {
469 ATH_MSG_ERROR( "Failed to apply largeR Z-tag jet scale uncertainties.");
470 return StatusCode::FAILURE;
471 //break;
473 ATH_MSG_VERBOSE( "No valid pt/eta/m range for largeR Z-tag jet scale uncertainties. ");
474 break;
475 default:
476 break;
477 }
478 } else {
479 ATH_MSG_DEBUG( "No valid large-R Z-tagged fat jet uncertainty, but FillJet called with a fat jet. Skipping uncertainties." );
480 }
481
482 if (!m_TopTagjetUncertaintiesTool.empty() && !m_TopTagUncConfig.empty() && !m_ToptagConfig.empty() && doLargeRdecorations) {
483 CP::CorrectionCode result = m_TopTagjetUncertaintiesTool->applyCorrection(input);
484 switch (result) {
486 ATH_MSG_ERROR( "Failed to apply largeR Top-tag jet scale uncertainties.");
487 return StatusCode::FAILURE;
488 //break;
490 ATH_MSG_VERBOSE( "No valid pt/eta/m range for largeR Top-tag jet scale uncertainties. ");
491 break;
492 default:
493 break;
494 }
495 } else {
496 ATH_MSG_DEBUG( "No valid large-R Top-tagged fat jet uncertainty, but FillJet called with a fat jet. Skipping uncertainties." );
497 }
498
499 if (!m_fatjetUncertaintiesTool.empty() && m_currentSyst.name().find("PseudoData") == std::string::npos) {
500 CP::CorrectionCode result = m_fatjetUncertaintiesTool->applyCorrection(input);
501 switch (result) {
503 ATH_MSG_ERROR( "Failed to apply largeR jet scale uncertainties.");
504 return StatusCode::FAILURE;
505 //break;
507 ATH_MSG_VERBOSE( "No valid pt/eta/m range for largeR jet scale uncertainties. ");
508 break;
509 default:
510 break;
511 }
512 } else {
513 ATH_MSG_DEBUG( "No valid fat jet uncertainty, but FillJet called with a fat jet. Skipping uncertainties." );
514 }
515
516 // Use the PDSmeared uncertainties tool on the systematic with PseudoData in the name
517 if (!m_fatjetUncertaintiesPDSmearTool.empty() && m_fatJetUncertaintiesPDsmearing && m_currentSyst.name().find("PseudoData")) {
518 CP::CorrectionCode result = m_fatjetUncertaintiesPDSmearTool->applyCorrection(input);
519 switch (result) {
521 ATH_MSG_ERROR( "Failed to apply largeR jet scale PD uncertainties.");
522 return StatusCode::FAILURE;
523 //break;
525 ATH_MSG_VERBOSE( "No valid pt/eta/m range for largeR jet scale uncertainties. ");
526 break;
527 default:
528 break;
529 }
530 } else {
531 ATH_MSG_DEBUG( "No valid fat jet uncertainty, but FillJet called with a fat jet. Skipping uncertainties." );
532 }
533
535 CP::CorrectionCode result = m_fatjetFFSmearingTool->applyCorrection(input);
536 switch (result) {
538 ATH_MSG_ERROR( "Failed to apply largeR jet scale uncertainties.");
539 return StatusCode::FAILURE;
540 //break;
542 ATH_MSG_VERBOSE( "No valid pt/eta/m range for largeR jet scale uncertainties. ");
543 break;
544 default:
545 break;
546 }
547 } else {
548 ATH_MSG_DEBUG( "No valid fat jet uncertainty, but FillJet called with a fat jet. Skipping uncertainties." );
549 }
550
551 ATH_MSG_VERBOSE( "Large-R jet (pt,eta,phi) after calibration " << input.pt() << " " << input.eta() << " " << input.phi() );
552
553 return StatusCode::SUCCESS;
554 }
555 ATH_MSG_VERBOSE( "jet (pt,eta,phi) after calibration " << input.pt() << " " << input.eta() << " " << input.phi() );
556
557 }
558
559 dec_passOR(input) = true;
560 dec_bjet_jetunc(input) = false;
561
562 if (m_useBtagging) {
563 if (m_BtagWP != "Continuous") this->IsBJet(input);
564 else this->IsBJetContinuous(input);
565 }
566
567 if ( (input.pt() > m_jetPt) || (input.pt() > 15e3) ) {
568 if(!isFat && m_currentSyst.name().find("PseudoData") == std::string::npos) {
569 // Use the normal jet uncertainties tool for this systematic and do not use the PDSmeared initialised tool
570 CP::CorrectionCode result = m_jetUncertaintiesTool->applyCorrection(input);
571 switch (result) {
573 ATH_MSG_ERROR( "Failed to apply JES correction" );
574 break;
576 ATH_MSG_WARNING( "JES correction OutOfValidity range."); // Jet (pt,eta,phi) = (" << input.pt() << ", " << input.eta() << ", " << input.phi() << ")");
577 break;
578 default:
579 break;
580 }
581 }
582 }
583
585 if ( (input.pt() > m_jetPt) || (input.pt() > 15e3) ) {
586 if(!isFat && m_currentSyst.name().find("PseudoData")){
587 // Use the PDSmeared uncertainties tool on the systematic with PseudoData in the name
588 CP::CorrectionCode result = m_jetUncertaintiesPDSmearTool->applyCorrection(input);
589 switch (result) {
591 ATH_MSG_ERROR( "Failed to apply JES correction" );
592 break;
594 ATH_MSG_WARNING( "JES correction OutOfValidity range."); // Jet (pt,eta,phi) = (" << input.pt() << ", " << input.eta() << ", " << input.phi() << ")");
595 break;
596 default:
597 break;
598 }
599 }
600 }
601 }
602
603
604 ATH_MSG_VERBOSE( "jet (pt,eta,phi) after JES correction " << input.pt() << " " << input.eta() << " " << input.phi() );
605
606 dec_passJvt(input) = !m_applyJVTCut || m_jetNNJvtSelectionTool->accept(&input);
607 dec_passFJvt(input) = !m_doFwdJVT || m_jetfJvtSelectionTool->accept(&input);
608 dec_baseline(input) = ( input.pt() > m_jetPt ) || ( input.pt() > 20e3 ); // Allows for setting m_jetPt < 20e3
609 dec_bad(input) = false;
610 dec_signal_less_JVT(input) = false;
611 dec_signal(input) = false;
612 dec_bjet_loose(input) = false;
613 dec_effscalefact(input) = 1.;
614
615 //new state for OR . 0=non-baseline objects, 1=for baseline jets not passing JVT, 2=for any other baseline object
616 if (acc_baseline(input) ){
617 if( acc_passJvt(input) ) dec_selected(input) = 2;
618 else dec_selected(input) = 1;
619 }
620 else{
621 dec_selected(input) = 0;
622 }
623
624 if (m_useBtagging && !m_orBtagWP.empty()) {
625 dec_bjet_loose(input) = this->IsBJetLoose(input);
626 }
627
628 if (m_debug) {
629 ATH_MSG_INFO( "JET pt: " << input.pt() );
630 ATH_MSG_INFO( "JET eta: " << input.eta() );
631 ATH_MSG_INFO( "JET phi: " << input.phi() );
632 ATH_MSG_INFO( "JET E: " << input.e() );
633 ATH_MSG_INFO( "JET Ceta: " << input.jetP4(xAOD::JetConstitScaleMomentum).eta() );
634 ATH_MSG_INFO( "JET Cphi: " << input.jetP4(xAOD::JetConstitScaleMomentum).phi() );
635 ATH_MSG_INFO( "JET CE: " << input.jetP4(xAOD::JetConstitScaleMomentum).e() );
636 ATH_MSG_INFO( "JET Cm: " << input.jetP4(xAOD::JetConstitScaleMomentum).M() ); // fix-me M
637
638 }
639
640 return StatusCode::SUCCESS;
641 }
bool IsBJetLoose(const xAOD::Jet &input) const override final
Definition Jets.cxx:680
int IsBJetContinuous(const xAOD::Jet &input) const override final
Definition Jets.cxx:793
bool IsBJet(const xAOD::Jet &input) const override final
Definition Jets.cxx:771
static const SG::Decorator< char > dec_passOR("passOR")
static const SG::Decorator< char > dec_bjet_jetunc("bjet_jetunc")
static const SG::ConstAccessor< int > acc_ztagged("ztagged")
static const SG::Decorator< char > dec_bad("bad")
static const SG::Decorator< int > dec_toptagged("toptagged")
static const SG::Decorator< char > dec_signal_less_JVT("signal_less_JVT")
Decorator for signal jets without a JVT requirement.
static const SG::ConstAccessor< char > acc_passJvt("passJvt")
static const SG::Decorator< char > dec_passFJvt("passFJvt")
static const SG::ConstAccessor< char > acc_baseline("baseline")
static const SG::Decorator< int > dec_wtagged("wtagged")
static const SG::Decorator< char > dec_passJvt("passJvt")
static const SG::Decorator< int > dec_ztagged("ztagged")
static const SG::ConstAccessor< int > acc_wtagged("wtagged")
static const SG::Decorator< double > dec_btag_weight("btag_weight")
static const SG::ConstAccessor< int > acc_toptagged("toptagged")
static const SG::Decorator< char > dec_bjet_loose("bjet_loose")
@ JetConstitScaleMomentum
Definition JetTypes.h:29

◆ FillMuon()

StatusCode ST::SUSYObjDef_xAOD::FillMuon ( xAOD::Muon & input,
const float ptcut,
const float etacut )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 208 of file Muons.cxx.

208 {
209
210 ATH_MSG_VERBOSE( "Starting FillMuon on mu with pt=" << input.pt() );
211
212 dec_baseline(input) = false;
213 dec_selected(input) = 0;
214 dec_signal(input) = false;
215 dec_isol(input) = false;
216 dec_isolHighPt(input) = false;
217 dec_passedHighPtCuts(input) = false;
218 dec_passSignalID(input) = false;
219
220 if (m_muEffCorrForce1D) {
221 dec_DFCommonJetDr(input) = -2.0;
222 } else if (!acc_DFCommonJetDr.isAvailable(input)) {
223 dec_dRJet(input) = -2.0;
224 }
225
226 // don't bother calibrating or computing WP
227 if ( input.pt() < 3e3 ) return StatusCode::SUCCESS;
228
229 ATH_MSG_VERBOSE( "MUON pt before calibration " << input.pt() );
230
231 ATH_MSG_VERBOSE( "MUON eta = " << input.eta() );
232 ATH_MSG_VERBOSE( "MUON type = " << input.muonType() );
233 ATH_MSG_VERBOSE( "MUON author = " << input.author() );
234
235 if (m_muonCalibTool->applyCorrection( input ) == CP::CorrectionCode::OutOfValidityRange){
236 ATH_MSG_VERBOSE("FillMuon: applyCorrection out of validity range");
237 }
238
239 ATH_MSG_VERBOSE( "MUON pt after calibration " << input.pt() );
240
241 const xAOD::EventInfo* evtInfo = nullptr;
242 ATH_CHECK( evtStore()->retrieve( evtInfo, "EventInfo" ) );
243 const xAOD::Vertex* pv = this->GetPrimVtx();
244 double primvertex_z = pv ? pv->z() : 0;
245 //const xAOD::TrackParticle* track = input.primaryTrackParticle();
247 if (input.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
248 track = input.trackParticle(xAOD::Muon::CombinedTrackParticle);
249 if (!track) return StatusCode::SUCCESS; // don't treat SAF muons without CB track further
250 }
251 else {
252 track = input.primaryTrackParticle();
253 }
254
255 //impact parameters (after applyCorrection() so to have the primaryTrack links restored in old buggy samples)
256 if (track){
257 dec_z0sinTheta(input) = (track->z0() + track->vz() - primvertex_z) * TMath::Sin(input.p4().Theta());
258 } else {
259 ATH_MSG_WARNING("FillMuon: Muon of pT and eta " << input.pt() << " MeV " << input.eta() << " has no associated track");
260 }
261 //protect against exception thrown for null or negative d0sig
262 try {
263 if (track)
265 else
266 dec_d0sig(input) = -99.;
267 }
268 catch (...) {
269 float d0sigError = -99.;
270 ATH_MSG_WARNING("FillMuon : Exception caught from d0significance() calculation. Setting dummy decoration d0sig=" << d0sigError );
271 dec_d0sig(input) = d0sigError;
272 }
273
274 if (m_debug) {
275 // Summary variables in
276 // /cvmfs/atlas.cern.ch/repo/sw/ASG/AnalysisBase/2.0.3/xAODTracking/Root/TrackSummaryAccessors_v1.cxx
277
278 unsigned char nBLHits(0), nPixHits(0), nPixelDeadSensors(0), nPixHoles(0),
279 nSCTHits(0), nSCTDeadSensors(0), nSCTHoles(0), nTRTHits(0), nTRTOutliers(0);
280
281 if (track){
282 track->summaryValue( nBLHits, xAOD::numberOfBLayerHits);
283 track->summaryValue( nPixHits, xAOD::numberOfPixelHits);
284 track->summaryValue( nPixelDeadSensors, xAOD::numberOfPixelDeadSensors);
285 track->summaryValue( nPixHoles, xAOD::numberOfPixelHoles);
286
287 track->summaryValue( nSCTHits, xAOD::numberOfSCTHits);
288 track->summaryValue( nSCTDeadSensors, xAOD::numberOfSCTDeadSensors);
289 track->summaryValue( nSCTHoles, xAOD::numberOfSCTHoles);
290
291 track->summaryValue( nTRTHits, xAOD::numberOfTRTHits);
292 track->summaryValue( nTRTOutliers, xAOD::numberOfTRTOutliers);
293 }
294
295 ATH_MSG_INFO( "MUON pt: " << input.pt() );
296 ATH_MSG_INFO( "MUON eta: " << input.eta() );
297 ATH_MSG_INFO( "MUON phi: " << input.phi() );
298 ATH_MSG_INFO( "MUON comb: " << (input.muonType() == xAOD::Muon::Combined));
299 ATH_MSG_INFO( "MUON sTag: " << (input.muonType() == xAOD::Muon::SegmentTagged));
300 ATH_MSG_INFO( "MUON loose:" << (input.quality() == xAOD::Muon::Loose));
301 ATH_MSG_INFO( "MUON bHit: " << static_cast<int>( nBLHits ));
302 ATH_MSG_INFO( "MUON pHit: " << static_cast<int>( nPixHits ));
303 ATH_MSG_INFO( "MUON pDead:" << static_cast<int>( nPixelDeadSensors ));
304 ATH_MSG_INFO( "MUON pHole:" << static_cast<int>( nPixHoles ));
305 ATH_MSG_INFO( "MUON sHit: " << static_cast<int>( nSCTHits));
306 ATH_MSG_INFO( "MUON sDead:" << static_cast<int>( nSCTDeadSensors ));
307 ATH_MSG_INFO( "MUON sHole:" << static_cast<int>( nSCTHoles ));
308 ATH_MSG_INFO( "MUON tHit: " << static_cast<int>( nTRTHits ));
309 ATH_MSG_INFO( "MUON tOut: " << static_cast<int>( nTRTOutliers ));
310
311 const xAOD::TrackParticle* idtrack =
312 input.trackParticle( xAOD::Muon::InnerDetectorTrackParticle );
313
314 if ( !idtrack) {
315 ATH_MSG_VERBOSE( "No ID track!! " );
316 } else {
317 ATH_MSG_VERBOSE( "ID track pt: " << idtrack->pt());
318 }
319 }
320
321 if ( !m_force_noMuId && !m_muonSelectionToolBaseline->accept(input)) return StatusCode::SUCCESS;
322
323 if (input.pt() <= ptcut || std::abs(input.eta()) >= etacut) return StatusCode::SUCCESS;
324
325 if (m_mubaselinez0>0. && std::abs(acc_z0sinTheta(input))>m_mubaselinez0) return StatusCode::SUCCESS;
326 if (m_mubaselined0sig>0. && std::abs(acc_d0sig(input))>m_mubaselined0sig) return StatusCode::SUCCESS;
327
328 //--- Do baseline isolation check
329 if ( !( m_muBaselineIso_WP.empty() ) && !( m_isoBaselineTool->accept(input) ) ) return StatusCode::SUCCESS;
330
331 dec_baseline(input) = true;
332 dec_selected(input) = 2;
333
334 //disable if (!m_muIso_WP.empty() && m_muIso_WP.find("PLV")!=std::string::npos) ATH_CHECK( m_isoToolLowPtPLV->augmentPLV(input) );
335 if (!m_muIso_WP.empty()) dec_isol(input) = bool(m_isoTool->accept(input));
336 if (!m_muIsoHighPt_WP.empty()) dec_isolHighPt(input) = bool(m_isoHighPtTool->accept(input));
337 dec_passSignalID(input) = bool(m_muonSelectionTool->accept(input));
338
339 ATH_MSG_VERBOSE("FillMuon: passed baseline selection");
340 return StatusCode::SUCCESS;
341}
virtual double pt() const override final
The transverse momentum ( ) of the particle.
float nPixelDeadSensors(const U &p)
float nSCTHoles(const U &p)
float nSCTHits(const U &p)
float nSCTDeadSensors(const U &p)
float nTRTHits(const U &p)
static const SG::Decorator< float > dec_DFCommonJetDr("DFCommonJetDr")
static const SG::Decorator< float > dec_dRJet("dRJet")
static const SG::Decorator< char > dec_passedHighPtCuts("passedHighPtCuts")
static const SG::ConstAccessor< float > acc_DFCommonJetDr("DFCommonJetDr")
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfBLayerHits
these are the hits in the first pixel layer, i.e.
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
@ numberOfSCTHoles
number of SCT holes [unit8_t].

◆ FillPhoton()

StatusCode ST::SUSYObjDef_xAOD::FillPhoton ( xAOD::Photon & input,
const float ptcut,
const float etacut )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 78 of file Photons.cxx.

78 {
79
80 ATH_MSG_VERBOSE( "Starting FillPhoton on ph with pre-calibration pt=" << input.pt() );
81
82 if ( !input.caloCluster() ) {
83 ATH_MSG_WARNING( "FillPhoton: no caloCluster found: " << input.caloCluster() );
84 return StatusCode::SUCCESS;
85 }
86
87 //Check DeadHVCellRemoval
88 bool pass_deadHVTool = m_deadHVTool->accept(&input);
89
90 if (m_debug) {
91 ATH_MSG_INFO( "PHOTON eta: " << input.eta() );
92 ATH_MSG_INFO( "PHOTON phi: " << input.phi() );
93 ATH_MSG_INFO( "PHOTON cl eta: " << input.caloCluster()->eta() );
94 ATH_MSG_INFO( "PHOTON cl phi: " << input.caloCluster()->phi() );
95 ATH_MSG_INFO( "PHOTON cl e: " << input.caloCluster()->e() );
96 ATH_MSG_INFO( "PHOTON OQ: " << input.OQ() );
97 ATH_MSG_INFO( "PHOTON author: " << input.author() );
98 ATH_MSG_INFO( "PHOTON deadHVTools: " << pass_deadHVTool );
99 }
100
101 dec_baseline(input) = false;
102 dec_selected(input) = 0;
103 dec_isol(input) = false;
104 dec_isEM(input) = 0;
105
106 if (!pass_deadHVTool) return StatusCode::SUCCESS;
107
108 // Author cuts needed according to https://twiki.cern.ch/twiki/bin/view/AtlasProtected/EGammaIdentificationRun2#Photon_authors
110 return StatusCode::SUCCESS;
111
112 // calibrate the photon 4-vector here only if within eta window
113 if (std::abs(input.caloCluster()->etaBE(2)) >= etacut) return StatusCode::SUCCESS;
114
116 if ( std::abs( input.caloCluster()->etaBE(2) ) >1.37 && std::abs( input.caloCluster()->etaBE(2) ) <1.52) {
117 return StatusCode::SUCCESS;
118 }
119 }
120
121 if (m_egammaCalibTool->applyCorrection(input) != CP::CorrectionCode::Ok)
122 ATH_MSG_ERROR("FillPhoton: EgammaCalibTool applyCorrection failed");
123
124 if (m_isoCorrTool->applyCorrection(input) != CP::CorrectionCode::Ok)
125 ATH_MSG_ERROR("FillPhoton: IsolationCorrectionTool applyCorrection failed");
126
127 ATH_MSG_VERBOSE( "FillPhoton: post-calibration pt=" << input.pt() );
128
129 if (input.pt() < ptcut) return StatusCode::SUCCESS;
130
131 //Object quality cut as described at https://twiki.cern.ch/twiki/bin/view/AtlasProtected/EGammaIdentificationRun2#Object_quality_cut
133 return StatusCode::SUCCESS;
134
135 //Photon quality as in https://twiki.cern.ch/twiki/bin/view/AtlasProtected/EGammaIdentificationRun2#Photon_cleaning
136 bool passPhCleaning = false;
138 if ( (!m_photonAllowLate && acc_passPhCleaning(input)) || (m_photonAllowLate && acc_passPhCleaningNoTime(input)) ) passPhCleaning = true;
139 } else {
140 ATH_MSG_VERBOSE ("DFCommonPhotonsCleaning is not found in DAOD..");
142 ( m_photonAllowLate && PhotonHelpers::passOQqualityDelayed(input)) ) passPhCleaning = true;
143 }
144 if (!passPhCleaning) return StatusCode::SUCCESS;
145
146
147 bool passBaseID = false;
148 if (m_acc_photonIdBaseline.isAvailable(input)) {
149 passBaseID = bool(m_acc_photonIdBaseline(input));
150 } else {
151 passBaseID = bool(m_photonSelIsEMBaseline->accept(&input));
152 }
153 if (!passBaseID) return StatusCode::SUCCESS;
154
155 //--- Do baseline isolation check
156 if ( !( m_photonBaselineIso_WP.empty() ) && !( m_isoBaselineTool->accept(input) ) ) return StatusCode::SUCCESS;
157
158 dec_baseline(input) = true;
159 dec_selected(input) = 2;
160 if (!m_photonIso_WP.empty()) dec_isol(input) = bool(m_isoTool->accept(input));
161
162 ATH_MSG_VERBOSE("FillPhoton: passed baseline selection.");
163 return StatusCode::SUCCESS;
164}
bool passOQqualityDelayed(const xAOD::Photon &ph)
Helpers to ease the implementation of the pass Quality requirements.
bool passOQquality(const xAOD::Photon &ph)
Helper to ease the implemmantation of the pass Quality requirements.
static const SG::ConstAccessor< char > acc_passPhCleaning("DFCommonPhotonsCleaning")
static const SG::Decorator< unsigned > dec_isEM("isEM")
static const SG::ConstAccessor< char > acc_passPhCleaningNoTime("DFCommonPhotonsCleaningNoTime")
const uint16_t AuthorPhoton
Object Reconstructed by standard cluster-based algorithm.
Definition EgammaDefs.h:28
const uint32_t BADCLUSPHOTON
Definition EgammaDefs.h:124
const uint16_t AuthorAmbiguous
Object Reconstructed by standard cluster-based algorithm.
Definition EgammaDefs.h:32

◆ FillTau()

StatusCode ST::SUSYObjDef_xAOD::FillTau ( xAOD::TauJet & input)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 77 of file Taus.cxx.

77 {
78
79 ATH_MSG_VERBOSE( "Starting FillTau on tau with pT = " << input.pt()/1000 << " GeV" );
80 ATH_MSG_VERBOSE( "TAU pT before smearing " << input.pt()/1000 << " GeV");
81
82 // do truth matching first (required unless already done in AOD->DAOD and truth matching info kept in DAOD)
83 if (m_tauDoTTM && !isData()) m_tauTruthMatch->getTruth(input);
84 ATH_MSG_VERBOSE("Tau truth matching done");
85
86 // apply the calibration to data as well (not needed in R22, unless MVA TES gets updated)
87 if (std::abs(input.eta()) <= 2.5 && input.nTracks() > 0) {
88 if (m_tauSmearingTool->applyCorrection(input) != CP::CorrectionCode::Ok) {
89 ATH_MSG_ERROR(" Tau smearing failed " );
90 } else { ATH_MSG_VERBOSE("Tau smearing done"); }
91 }
92
93 ATH_MSG_VERBOSE( "TAU pt after smearing " << input.pt()/1000. );
94
95 // if tauPrePtCut set, apply min pT cut here before calling tau selection tool
96 // (avoid exceptions when running on derivations with removed tracks for low-pT taus, e.g. HIGG4D2)
97 if (input.pt() > m_tauPrePtCut) {
98 dec_baseline(input) = bool(m_tauSelToolBaseline->accept( input ));
99 }
100 else {
101 dec_baseline(input) = false;
102 }
103 if (acc_baseline(input)) dec_selected(input) = 2;
104 else dec_selected(input) = 0;
105
106 if (acc_baseline(input)) ATH_MSG_VERBOSE("FillTau: passed baseline selection");
107 else ATH_MSG_VERBOSE("FillTau: failed baseline selection");
108 return StatusCode::SUCCESS;
109}

◆ FillTrackJet()

StatusCode ST::SUSYObjDef_xAOD::FillTrackJet ( xAOD::Jet & input)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 643 of file Jets.cxx.

643 {
644
645 ATH_MSG_VERBOSE( "Starting FillTrackJet on jet with pt=" << input.pt() );
646
647 dec_btag_weight(input) = -999.;
648 dec_effscalefact(input) = 1.;
649
650 if (m_defaultTrackJets == "AntiKtVR30Rmax4Rmin02TrackJets") {
651 // VR recommendation
652 // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/BTagCalib2017#Recommendations_for_variable_rad
653 dec_baseline(input) = input.pt() >= 5e3 && input.numConstituents() >= 2;
654 if (m_trkJetPt < 10e3)
655 ATH_MSG_WARNING ("The pt threshold of VR jets you set is: " << m_trkJetPt/1000. << " GeV. But VR jets with pt < 10GeV are uncalibrated.");
656 dec_signal(input) = acc_baseline(input) && input.pt() >= m_trkJetPt && std::abs(input.eta()) <= m_trkJetEta;
657 dec_VRradius(input) = std::max(0.02,std::min(0.4,30000./input.pt()));
658 dec_passDRcut(input) = acc_signal(input);
659 } else {
660 dec_baseline(input) = input.pt() >= m_trkJetPt && std::abs(input.eta()) <= m_trkJetEta;
661 dec_signal(input) = acc_baseline(input);
662 }
663
665 if (m_BtagWP_trkJet != "Continuous") this->IsTrackBJet(input);
666 else this->IsTrackBJetContinuous(input);
667 }
668
669 if (m_debug) {
670 ATH_MSG_INFO( "TRK JET pt: " << input.pt() );
671 ATH_MSG_INFO( "TRK JET eta: " << input.eta() );
672 ATH_MSG_INFO( "TRK JET phi: " << input.phi() );
673 ATH_MSG_INFO( "TRK JET E: " << input.e() );
674 }
675
676 return StatusCode::SUCCESS;
677 }
std::string m_defaultTrackJets
bool IsTrackBJet(const xAOD::Jet &input) const override final
Definition Jets.cxx:782
int IsTrackBJetContinuous(const xAOD::Jet &input) const override final
Definition Jets.cxx:815
static const SG::Decorator< float > dec_VRradius("VRradius")
static const SG::Decorator< char > dec_passDRcut("passDRcut")

◆ FindSusyHardProc() [1/2]

bool ST::SUSYObjDef_xAOD::FindSusyHardProc ( const xAOD::TruthEvent * truthE,
int & pdgid1,
int & pdgid2 )
static

Definition at line 227 of file Truth.cxx.

227 {
228
229 pdgid1 = 0;
230 pdgid2 = 0;
231
232 //go for TRUTH1-like ...
233 const xAOD::TruthParticle* firstsp(nullptr);
234 const xAOD::TruthParticle* secondsp(nullptr);
235
236 for (unsigned int p=0; p < truthE->nTruthParticles(); ++p){
237
238 const xAOD::TruthParticle* tp = truthE->truthParticle(p);
239
240 //check ifSUSY particle
241 if (MC::isSquark(tp) || MC::isSlepton(tp) || MC::isGaugino(tp)) {
242
243 if (tp->nParents() != 0) {
244 if ( !MC::isSUSY(tp->parent(0))) {
245 if (!firstsp) {
246 firstsp = tp;
247 } else if (!secondsp) {
248 secondsp = tp;
249 } else {
250 if (firstsp->nChildren() != 0 && HepMC::is_same_particle(tp,firstsp->child(0))) {
251 firstsp = tp;
252 }
253 else if (secondsp->nChildren() != 0 && HepMC::is_same_particle(tp,secondsp->child(0))) {
254 secondsp = tp;
255 }
256 else if (firstsp->nChildren() != 0 && HepMC::is_same_particle(firstsp->child(0),secondsp)) {
257 firstsp = secondsp;
258 secondsp = tp;
259 }
260 else if (secondsp->nChildren() != 0 && HepMC::is_same_particle(secondsp->child(0),firstsp)) {
261 secondsp = firstsp;
262 firstsp = tp;
263 }
264 }
265 }
266 }
267 }
268 }
269
270 // quit if no sparticles found
271 if (!firstsp && !secondsp) return true; // should find none or two
272
273 if (firstsp->nChildren() == 1) {
274 for (unsigned int p=0; p < truthE->nTruthParticles(); ++p){
275 const xAOD::TruthParticle* tp = truthE->truthParticle(p);
276 if (HepMC::is_same_particle(tp,firstsp->child(0)) && tp->pdgId() != firstsp->pdgId()) {
277 firstsp = tp;
278 break;
279 }
280 }
281 }
282
283 if (secondsp->nChildren() == 1) {
284 for (unsigned int p=0; p < truthE->nTruthParticles(); ++p){
285 const xAOD::TruthParticle* tp = truthE->truthParticle(p);
286 if (HepMC::is_same_particle(tp,secondsp->child(0)) && tp->pdgId() != secondsp->pdgId()) {
287 secondsp = tp;
288 break;
289 }
290 }
291 }
292
293 if (MC::isSUSY(firstsp)) pdgid1 = firstsp->pdgId();
294 if (MC::isSUSY(secondsp)) pdgid2 = secondsp->pdgId();
295
296 // Return gracefully:
297 return true;
298}
const TruthParticle * truthParticle(size_t index) const
Get a pointer to one of the truth particles.
size_t nTruthParticles() const
Get the number of truth particles.
bool is_same_particle(const T1 &p1, const T2 &p2)
Method to establish if two particles in the GenEvent actually represent the same particle.
bool isSlepton(const T &p)
bool isSquark(const T &p)
PDG rule 11d Fundamental supersymmetric particles are identified by adding a nonzero n to the particl...
bool isSUSY(const T &p)
bool isGaugino(const T &p)
TruthParticle_v1 TruthParticle
Typedef to implementation.

◆ FindSusyHardProc() [2/2]

bool ST::SUSYObjDef_xAOD::FindSusyHardProc ( const xAOD::TruthParticleContainer * truthP,
int & pdgid1,
int & pdgid2,
bool isTruth3 = false )
static

Definition at line 126 of file Truth.cxx.

126 {
127
128 pdgid1 = 0;
129 pdgid2 = 0;
130
131 //check for TRUTH3 structure first
132 if(isTruth3){
133 if(!truthP || truthP->size()<2){
134 return false;
135 }
136
137 //get ID of first two BSM particles
138 pdgid1 = (*truthP)[0]->pdgId();
139 pdgid2 = (*truthP)[1]->pdgId();
140 return true;
141 }
142
143 //go for TRUTH1-like if not...
144 const xAOD::TruthParticle* firstsp(nullptr);
145 const xAOD::TruthParticle* secondsp(nullptr);
146
147 if (!truthP || truthP->empty()) {
148 return false;
149 }
150 for (const xAOD::TruthParticle* tp : *truthP) {
151 if (MC::isSquark(tp) || MC::isSlepton(tp) || MC::isGaugino(tp)) {
152
153 if (tp->nParents() != 0) {
154
155 if ( !MC::isSUSY(tp->parent(0))) {
156 if (!firstsp) {
157 firstsp = tp;
158 } else if (!secondsp) {
159 secondsp = tp;
160 } else {
161 if (firstsp->nChildren() != 0 && HepMC::is_same_particle(tp,firstsp->child(0))) {
162 firstsp = tp;
163 }
164 else if (secondsp->nChildren() != 0 && HepMC::is_same_particle(tp,secondsp->child(0))) {
165 secondsp = tp;
166 }
167 else if (firstsp->nChildren() != 0 && HepMC::is_same_particle(firstsp->child(0),secondsp)) {
168 firstsp = secondsp;
169 secondsp = tp;
170 }
171 else if (secondsp->nChildren() != 0 && HepMC::is_same_particle(secondsp->child(0),firstsp)) {
172 secondsp = firstsp;
173 firstsp = tp;
174 }
175 }
176 }
177 }
178 }
179 }
180
181 // quit if no sparticles found
182 if (!firstsp && !secondsp) return true; // should find none or two
183
184 if (firstsp->nChildren() == 1) {
185 for (const xAOD::TruthParticle* tp : *truthP) {
186 if (HepMC::is_same_particle(tp,firstsp->child(0)) && tp->pdgId() != firstsp->pdgId()) {
187 firstsp = tp;
188 break;
189 }
190 }
191 }
192
193 if (secondsp->nChildren() == 1) {
194 for (const xAOD::TruthParticle* tp : *truthP) {
195 if (HepMC::is_same_particle(tp,secondsp->child(0)) && tp->pdgId() != secondsp->pdgId()) {
196 secondsp = tp;
197 break;
198 }
199 }
200 }
201
202 if (MC::isSUSY(firstsp)) pdgid1 = firstsp->pdgId();
203 if (MC::isSUSY(secondsp)) pdgid2 = secondsp->pdgId();
204
205 // Return gracefully:
206 return true;
207}
size_type size() const noexcept
Returns the number of elements in the collection.
bool empty() const noexcept
Returns true if the collection is empty.

◆ FindSusyHP() [1/3]

StatusCode ST::SUSYObjDef_xAOD::FindSusyHP ( const xAOD::TruthEvent * truthE,
int & pdgid1,
int & pdgid2 ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 210 of file Truth.cxx.

210 {
211
212 if (!truthE) {
213 ATH_MSG_ERROR("Null TruthEvent pointer!!");
214 return StatusCode::FAILURE;
215 }
216 if ( !SUSYObjDef_xAOD::FindSusyHardProc(truthE, pdgid1, pdgid2) ) {
217 ATH_MSG_ERROR("Problem finding SUSY hard process");
218 return StatusCode::FAILURE;
219 }
220 if (pdgid1 == 0 || pdgid2 == 0) {
221 ATH_MSG_DEBUG("No sparticles found!");
222 }
223 return StatusCode::SUCCESS;
224}
static bool FindSusyHardProc(const xAOD::TruthParticleContainer *truthP, int &pdgid1, int &pdgid2, bool isTruth3=false)
Definition Truth.cxx:126

◆ FindSusyHP() [2/3]

StatusCode ST::SUSYObjDef_xAOD::FindSusyHP ( const xAOD::TruthParticleContainer * truthP,
int & pdgid1,
int & pdgid2,
bool isTruth3 = false ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 106 of file Truth.cxx.

106 {
107 if (!truthP) {
108 ATH_MSG_ERROR("Null TruthParticleContainer pointer!!");
109 return StatusCode::FAILURE;
110 }
111 if (truthP->empty()) {
112 ATH_MSG_ERROR("Empty TruthParticleContainer!!");
113 return StatusCode::FAILURE;
114 }
115 if ( !SUSYObjDef_xAOD::FindSusyHardProc(truthP, pdgid1, pdgid2, isTruth3) ) {
116 ATH_MSG_ERROR("Problem finding SUSY hard process");
117 return StatusCode::FAILURE;
118 }
119 if (pdgid1 == 0 || pdgid2 == 0) {
120 ATH_MSG_DEBUG("No sparticles found!");
121 }
122 return StatusCode::SUCCESS;
123}

◆ FindSusyHP() [3/3]

StatusCode ST::SUSYObjDef_xAOD::FindSusyHP ( int & pdgid1,
int & pdgid2 ) const

Definition at line 76 of file Truth.cxx.

76 {
77
78 const xAOD::TruthParticleContainer* truthP = nullptr;
79 bool isTruth3 = false;
80 std::string key_T1 = "TruthParticles";
81 std::string key_T3 = "TruthBSM";
82
83 ATH_MSG_DEBUG("Contains " << key_T1 << ": " << ((evtStore()->contains<xAOD::TruthParticleContainer>( key_T1 ))?1:0));
84 ATH_MSG_DEBUG("Contains " << key_T3 << ": " << ((evtStore()->contains<xAOD::TruthParticleContainer>( key_T3 ))?1:0));
85
87 ATH_CHECK( evtStore()->retrieve(truthP, key_T1) );
88 ATH_MSG_DEBUG("Retrieved " << key_T1 << " : size = " << truthP->size());
89 if (truthP->empty()) { ATH_MSG_WARNING(key_T1 << " is empty. Skipping FindSusyHP."); return StatusCode::SUCCESS; }
90 }
92 isTruth3=true;
93 ATH_CHECK( evtStore()->retrieve(truthP, key_T3) );
94 ATH_MSG_DEBUG("Retrieved " << key_T3 << " : size = " << truthP->size());
95 if (truthP->empty()) { ATH_MSG_WARNING(key_T3 << " is empty. Skipping FindSusyHP."); return StatusCode::SUCCESS; }
96 }
97 else {
98 ATH_MSG_WARNING("Neither " << key_T1 << " nor " << key_T3 << " are avaible. Skipping FindSusyHP.");
99 return StatusCode::SUCCESS;
100 }
101
102 return SUSYObjDef_xAOD::FindSusyHP(truthP, pdgid1, pdgid2, isTruth3);
103}
StatusCode FindSusyHP(int &pdgid1, int &pdgid2) const
Definition Truth.cxx:76
TruthParticleContainer_v1 TruthParticleContainer
Declare the latest version of the truth particle container.

◆ FJVT_SF()

double ST::SUSYObjDef_xAOD::FJVT_SF ( const xAOD::JetContainer * jets)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 1060 of file Jets.cxx.

1060 {
1061
1062 float totalSF = 1.;
1063 if (!m_doFwdJVT) return totalSF;
1064
1065 ConstDataVector<xAOD::JetContainer> fjvtjets(SG::VIEW_ELEMENTS);
1066 for (const xAOD::Jet* jet : *jets) {
1067 // Only jets that were good for every cut except JVT
1068 if (acc_signal_less_JVT(*jet) && acc_passOR(*jet)) {
1069 fjvtjets.push_back(jet);
1070 }
1071 }
1072
1073 for (const xAOD::Jet* jet : fjvtjets) {
1074 float current_sf = 0;
1075
1076 // the SF are only applied for HS jets and implicitely requires the presense of the isHS decoration
1077 CP::CorrectionCode result;
1078 if (acc_passFJvt(*jet)) {
1079 result = m_jetfJvtEfficiencyTool->getEfficiencyScaleFactor(*jet,current_sf);
1080 }
1081 else {
1082 result = m_jetfJvtEfficiencyTool->getInefficiencyScaleFactor(*jet,current_sf);
1083 }
1084
1085 switch (result) {
1087 // this is probably not right, should report an error here
1088 ATH_MSG_ERROR("Inexplicably failed fJVT calibration" );
1089 break;
1091 // no fJvt SF for jet, that is ok e.g. for jets with |eta| < 2.5
1092 ATH_MSG_VERBOSE( "Skip SF application in SUSYTools_xAOD::FJVT_SF as jet outside validate range" );
1093 break;
1094 default:
1095 ATH_MSG_VERBOSE( "Retrieve SF for jet in SUSYTools_xAOD::FJVT_SF with value " << current_sf );
1096 totalSF *= current_sf;
1097 }
1098
1099 }
1100
1101 ATH_MSG_VERBOSE( "Retrieve total SF for jet container in SUSYTools_xAOD::FJVT_SF with value " << totalSF );
1102
1103 return totalSF;
1104 }
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
static const SG::ConstAccessor< char > acc_passFJvt("passFJvt")
static const SG::ConstAccessor< char > acc_signal_less_JVT("signal_less_JVT")
Accessor for signal jets without a JVT requirement.

◆ FJVT_SFsys()

double ST::SUSYObjDef_xAOD::FJVT_SFsys ( const xAOD::JetContainer * jets,
const CP::SystematicSet & systConfig )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 1106 of file Jets.cxx.

1106 {
1107
1108 float totalSF = 1.;
1109 if (!m_doFwdJVT) return totalSF;
1110
1111 //Set the new systematic variation
1112 StatusCode ret = m_jetfJvtEfficiencyTool->applySystematicVariation(systConfig);
1113 if ( ret != StatusCode::SUCCESS) {
1114 ATH_MSG_ERROR("Cannot configure fJvtEfficiencyTool for systematic var. " << systConfig.name() );
1115 }
1116
1117 // Delegate
1118 totalSF = SUSYObjDef_xAOD::FJVT_SF( jets );
1119
1120 if (m_doFwdJVT) {
1121 ret = m_jetfJvtEfficiencyTool->applySystematicVariation(m_currentSyst);
1122 if ( ret != StatusCode::SUCCESS) {
1123 ATH_MSG_ERROR("Cannot configure fJvtEfficiencyTool for systematic var. " << systConfig.name() );
1124 }
1125 }
1126
1127 return totalSF;
1128 }
double FJVT_SF(const xAOD::JetContainer *jets) override final
Definition Jets.cxx:1060

◆ GetCorrectedActualInteractionsPerCrossing()

float ST::SUSYObjDef_xAOD::GetCorrectedActualInteractionsPerCrossing ( bool includeDataSF = false)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3034 of file SUSYObjDef_xAOD.cxx.

3034 {
3035 const xAOD::EventInfo* evtInfo = GetEventInfo();
3036 return m_prwTool->getCorrectedActualInteractionsPerCrossing( *evtInfo, includeDataSF );
3037}

◆ GetCorrectedAverageInteractionsPerCrossing()

float ST::SUSYObjDef_xAOD::GetCorrectedAverageInteractionsPerCrossing ( bool includeDataSF = false)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3029 of file SUSYObjDef_xAOD.cxx.

3029 {
3030 const xAOD::EventInfo* evtInfo = GetEventInfo();
3031 return m_prwTool->getCorrectedAverageInteractionsPerCrossing( *evtInfo, includeDataSF );
3032}

◆ GetDataWeight()

float ST::SUSYObjDef_xAOD::GetDataWeight ( const std::string & trig)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3024 of file SUSYObjDef_xAOD.cxx.

3024 {
3025 const xAOD::EventInfo* evtInfo = GetEventInfo();
3026 return m_prwTool->getDataWeight( *evtInfo, trig );
3027}

◆ getDefaultJetUncConfig()

std::string ST::SUSYObjDef_xAOD::getDefaultJetUncConfig ( )
protected

Definition at line 1834 of file SUSYObjDef_xAOD.cxx.

1834 {
1835 if (m_isRun3)
1836 return isAtlfast() ? "rel22/Spring2025_PreRec/R4_CategoryReduction_FullJER_MC23.config" : "rel22/Spring2025_PreRec/R4_CategoryReduction_FullJER_MC23.config";
1837 else
1838 return isAtlfast() ? "rel22/Spring2025_PreRec/R4_CategoryReduction_FullJER_MC20_MC21.config" : "rel22/Spring2025_PreRec/R4_CategoryReduction_FullJER_MC20_MC21.config";
1839}
bool isAtlfast() const override final

◆ GetElectrons()

StatusCode ST::SUSYObjDef_xAOD::GetElectrons ( xAOD::ElectronContainer *& copy,
xAOD::ShallowAuxContainer *& copyaux,
const bool recordSG = true,
const std::string & elekey = "Electrons",
const std::string & lrtelekey = "LRTElectrons",
const xAOD::ElectronContainer * containerToBeCopied = nullptr )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 118 of file Electrons.cxx.

119{
120 if (!m_tool_init) {
121 ATH_MSG_ERROR("SUSYTools was not initialized!!");
122 return StatusCode::FAILURE;
123 }
124
125 // Initializing prompt/LRT OR procedure
126 auto outputCol = std::make_unique<xAOD::ElectronContainer>();
127 std::unique_ptr<xAOD::ElectronAuxContainer> outputAuxCol;
128 outputAuxCol = std::make_unique<xAOD::ElectronAuxContainer>();
129 outputCol->setStore(outputAuxCol.get());
130 ATH_CHECK( m_outElectronLocation.initialize() );
131
132 if (bool(m_eleLRT) && !lrtelekey.empty() && evtStore()->contains<xAOD::ElectronContainer>(lrtelekey)){
133 ATH_MSG_DEBUG("Applying prompt/LRT electron OR procedure");
134
135 // First identify if merged container has already been made (for instances where GetElectrons() is called more than once)
136 if (evtStore()->contains<xAOD::ElectronContainer>("StdWithLRTElectrons")) {
137 ATH_MSG_DEBUG("Merged prompt/LRT container already created in TStore");
138 } else {
139 ATH_MSG_DEBUG("Creating merged prompt/LRT container in TStore");
140
141 // Retrieve prompt and LRT electrons from TStore
143 ATH_CHECK( evtStore()->retrieve(lrt_electrons, lrtelekey) );
144
145 // Remove LRT electrons as flagged by filter for uncertainty
146 auto filtered_electrons = std::make_unique<xAOD::ElectronContainer>();
147 std::unique_ptr<xAOD::ElectronAuxContainer> filtered_electrons_aux = std::make_unique<xAOD::ElectronAuxContainer>();
148 filtered_electrons->setStore(filtered_electrons_aux.get());
149 ATH_CHECK(prepareLRTElectrons(lrt_electrons, filtered_electrons.get()));
150
151 // Check overlap between prompt and LRT collections
152 std::set<const xAOD::Electron *> ElectronsToRemove;
153 m_elecLRTORTool->checkOverlap(*prompt_electrons, *filtered_electrons, ElectronsToRemove);
154
155 // Decorate electrons with prompt/LRT
156 for (const xAOD::Electron* el : *prompt_electrons) dec_isLRT(*el) = 0;
157 for (const xAOD::Electron* el : *filtered_electrons) dec_isLRT(*el) = 1;
158
159 // Create merged StdWithLRTElectrons container
160 outputCol->reserve(prompt_electrons->size() + filtered_electrons->size());
161 ATH_CHECK(MergeElectrons(*prompt_electrons, outputCol.get(), ElectronsToRemove ));
162 ATH_CHECK(MergeElectrons(*filtered_electrons, outputCol.get(), ElectronsToRemove ));
163
164 // Save merged StdWithLRTElectrons container to TStore
165 ATH_CHECK(evtStore()->record(std::move(outputCol), m_outElectronLocation.key()));
166 ATH_CHECK(evtStore()->record(std::move(outputAuxCol), m_outElectronLocation.key() + "Aux.") );
167 }
168 } else if (!lrtelekey.empty()) {
169 if(evtStore()->contains<xAOD::ElectronContainer>(lrtelekey) == false && bool(m_eleLRT) == true) ATH_MSG_WARNING("prompt/LRT OR procedure attempted but " << lrtelekey << " not in ROOT file, check config!");
170 ATH_MSG_DEBUG("Not applying prompt/LRT electron OR procedure");
171 }
172
173 if (m_isPHYSLITE && elekey.find("AnalysisElectrons")==std::string::npos){
174 ATH_MSG_ERROR("You are running on PHYSLITE derivation. Please change the Electrons container to 'AnalysisElectrons'");
175 return StatusCode::FAILURE;
176 }
177
178 const xAOD::ElectronContainer* electrons = nullptr;
179 if (bool(m_eleLRT) && evtStore()->contains<xAOD::ElectronContainer>(lrtelekey)){
180 ATH_MSG_DEBUG("Using container: " << m_outElectronLocation.key());
181 ATH_CHECK( evtStore()->retrieve(electrons, m_outElectronLocation.key()));
182 }
183 else {
184 if (copy==nullptr) { // empty container provided
185 ATH_MSG_DEBUG("Empty container provided");
186 if (containerToBeCopied != nullptr) {
187 ATH_MSG_DEBUG("Containter to be copied not nullptr");
188 electrons = containerToBeCopied;
189 }
190 else {
191 ATH_MSG_DEBUG("Getting Electrons collection");
192 ATH_CHECK( evtStore()->retrieve(electrons, elekey) );
193 }
194 }
195 }
196
197 if (copy==nullptr) { // empty container provided
198 std::pair<xAOD::ElectronContainer*, xAOD::ShallowAuxContainer*> shallowcopy = xAOD::shallowCopyContainer(*electrons);
199 copy = shallowcopy.first;
200 copyaux = shallowcopy.second;
201 bool setLinks = xAOD::setOriginalObjectLink(*electrons, *copy);
202 if (!setLinks) {
203 ATH_MSG_WARNING("Failed to set original object links on " << elekey);
204 }
205 } else { // use the user-supplied collection instead
206 ATH_MSG_DEBUG("Not retrieving electron collection, using existing one provided by user");
207 electrons=copy; // this does nothing
208 }
209
210 for (const auto electron : *copy) {
213 }
214
215 if (recordSG) {
216 ATH_CHECK( evtStore()->record(copy, "STCalib" + elekey + m_currentSyst.name()) );
217 ATH_CHECK( evtStore()->record(copyaux, "STCalib" + elekey + m_currentSyst.name() + "Aux.") );
218 }
219 return StatusCode::SUCCESS;
220}
StatusCode FillElectron(xAOD::Electron &input, const float etcut, const float etacut) override final
StatusCode prepareLRTElectrons(const xAOD::ElectronContainer *inMuons, xAOD::ElectronContainer *copy) const override final
Definition Electrons.cxx:90
StatusCode MergeElectrons(const xAOD::ElectronContainer &electrons, xAOD::ElectronContainer *outputCol, const std::set< const xAOD::Electron * > &ElectronsToRemove) const override final
Definition Electrons.cxx:61
const xAOD::ElectronContainer * lrt_electrons
SG::WriteHandleKey< xAOD::ElectronContainer > m_outElectronLocation
const xAOD::ElectronContainer * prompt_electrons
bool IsSignalElectron(const xAOD::Electron &input, const float etcut, const float d0sigcut, const float z0cut, const float etacut=DUMMYDEF) const override final
static const SG::Decorator< char > dec_isLRT("isLRT")
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
std::pair< std::unique_ptr< T >, std::unique_ptr< ShallowAuxContainer > > shallowCopyContainer(const T &cont, const EventContext &ctx)
Function making a shallow copy of a constant container.
bool setOriginalObjectLink(const IParticle &original, IParticle &copy)
This function should be used by CP tools when they make a deep copy of an object in their correctedCo...
Electron_v1 Electron
Definition of the current "egamma version".

◆ GetEleTriggerEfficiency()

double ST::SUSYObjDef_xAOD::GetEleTriggerEfficiency ( const xAOD::Electron & el,
const std::string & trigExpr = "SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0" ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 592 of file Electrons.cxx.

592 {
593
594 std::string single_str = "SINGLE_E";
595 std::string single_Run3 = "202";
596 std::string dilep_str = "DI_E";
597 std::string multi_str = "MULTI_L";
598
599 double trig_eff(1.);
600
601 CP::CorrectionCode result;
602 if ( trigExpr.find(single_str) != std::string::npos || trigExpr.find(single_Run3) != std::string::npos)
603 result = m_elecEfficiencySFTool_trigEff_singleLep->getEfficiencyScaleFactor(el, trig_eff);
604 else if ( trigExpr.find(dilep_str) != std::string::npos )
605 ATH_MSG_ERROR( "Use GetTriggerGlobalEfficiency for logical OR of lepton triggers");
606 else if ( trigExpr.find(multi_str) != std::string::npos )
607 ATH_MSG_ERROR( "Use GetTriggerGlobalEfficiency for logical OR of lepton triggers");
608 else
609 ATH_MSG_ERROR( "The trigger expression (" << trigExpr << ") is not supported by the electron trigger efficiency!");
610
611 switch (result) {
613 ATH_MSG_ERROR( "Failed to retrieve signal electron trigger efficiency");
614 return 1.;
616 ATH_MSG_VERBOSE( "OutOfValidityRange found for signal electron trigger efficiency");
617 return 1.;
618 default:
619 break;
620 }
621
622 return trig_eff;
623}

◆ GetEleTriggerEfficiencySF()

double ST::SUSYObjDef_xAOD::GetEleTriggerEfficiencySF ( const xAOD::Electron & el,
const std::string & trigExpr = "SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0" ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 558 of file Electrons.cxx.

558 {
559
560 double trig_sf(1.);
561
562 std::string single_str = "SINGLE_E";
563 std::string single_Run3 = "202";
564 std::string dilep_str = "DI_E";
565 std::string multi_str = "MULTI_L";
566
567 CP::CorrectionCode result;
568 if ( trigExpr.find(single_str) != std::string::npos || trigExpr.find(single_Run3) != std::string::npos)
569 result = m_elecEfficiencySFTool_trig_singleLep->getEfficiencyScaleFactor(el, trig_sf);
570 else if ( trigExpr.find(dilep_str) != std::string::npos )
571 ATH_MSG_ERROR( "Use GetTriggerGlobalEfficiency for logical OR of lepton triggers");
572 else if ( trigExpr.find(multi_str) != std::string::npos )
573 ATH_MSG_ERROR( "Use GetTriggerGlobalEfficiency for logical OR of lepton triggers");
574 else
575 ATH_MSG_ERROR( "The trigger expression (" << trigExpr << ") is not supported by the electron trigger SF!");
576
577 switch (result) {
579 ATH_MSG_ERROR( "Failed to retrieve signal electron trigger SF");
580 return 1.;
582 ATH_MSG_VERBOSE( "OutOfValidityRange found for signal electron trigger SF");
583 return 1.;
584 default:
585 break;
586 }
587
588 return trig_sf;
589}

◆ getElSFkeys()

std::vector< std::string > ST::SUSYObjDef_xAOD::getElSFkeys ( const std::string & mapFile) const
protected

Definition at line 1238 of file SUSYObjDef_xAOD.cxx.

1238 {
1239
1240 if( mapFile.empty() )
1241 return {};
1242
1243 std::vector<std::string> theKeys;
1244
1245 std::string filename = PathResolverFindCalibFile(mapFile);
1246 std::ifstream input( filename );
1247 for( std::string line; getline( input, line ); ){
1248 std::vector<std::string> tokens = split((const std::string)line,"=");
1249 if(tokens.size()){
1250 theKeys.push_back(tokens.at(0));
1251 }
1252 }
1253
1254 return theKeys;
1255}

◆ GetEventInfo()

const xAOD::EventInfo * ST::SUSYObjDef_xAOD::GetEventInfo ( ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2986 of file SUSYObjDef_xAOD.cxx.

2986 {
2987 const xAOD::EventInfo* evtInfo = nullptr;
2988 if ( evtStore()->retrieve( evtInfo, "EventInfo" ).isFailure() ) {
2989 throw std::runtime_error("Unable to fetch EventInfo.");
2990 }
2991 return evtInfo;
2992}

◆ GetFatJets()

StatusCode ST::SUSYObjDef_xAOD::GetFatJets ( xAOD::JetContainer *& copy,
xAOD::ShallowAuxContainer *& copyaux,
const bool recordSG = false,
const std::string & jetkey = "",
const bool doLargeRdecorations = false,
const xAOD::JetContainer * containerToBeCopied = nullptr )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 242 of file Jets.cxx.

243 {
244 if (!m_tool_init) {
245 ATH_MSG_ERROR("SUSYTools was not initialized!!");
246 return StatusCode::FAILURE;
247 }
248
249 if (m_fatJets.empty()) {
250 ATH_MSG_ERROR("JetFatCalibTool was not initialized for largeR jet!!");
251 return StatusCode::FAILURE;
252 }
253
254 std::string jetkey_tmp = jetkey;
255 if (jetkey.empty()) {
256 jetkey_tmp = m_fatJets;
257 }
258
259 const xAOD::JetContainer* jets = nullptr;
260 if (copy==nullptr) { // empty container provided
261 if (containerToBeCopied != nullptr) {
262 jets = containerToBeCopied;
263 }
264 else {
265 ATH_MSG_DEBUG("Retrieve jet collection: " << jetkey_tmp);
266 ATH_CHECK( evtStore()->retrieve(jets, jetkey_tmp) );
267 }
268
269 std::pair<xAOD::JetContainer*, xAOD::ShallowAuxContainer*> shallowcopy = xAOD::shallowCopyContainer(*jets);
270 copy = shallowcopy.first;
271 copyaux = shallowcopy.second;
272 bool setLinks = xAOD::setOriginalObjectLink(*jets, *copy);
273 if (!setLinks) {
274 ATH_MSG_WARNING("Failed to set original object links on " << jetkey_tmp);
275 }
276 } else { // use the user-supplied collection instead
277 ATH_MSG_DEBUG("Not retrieving jet collection, using existing one provided by user");
278 jets=copy;
279 }
280
281 if(jets->size()==0) {
282 ATH_MSG_DEBUG("Large R jet collection is empty");
283 return StatusCode::SUCCESS;
284 }
285
286 // Calibrate the jets - only insitu for data for now
287 if (isData()) ATH_CHECK(m_jetFatCalibTool->applyCalibration(*copy));
288
289
290 if (!isData() && !m_JetTruthLabelName.empty()){
291 ATH_MSG_DEBUG("Checking if decorator for JetTruthLabelingTool is available:");
292 std::string fatjetcoll = m_fatJets;
293 m_label_truthKey = fatjetcoll+"."+m_JetTruthLabelName;
294 SG::ReadDecorHandle<xAOD::JetContainer, int> labelHandle_truthKey(m_label_truthKey);
295 ATH_MSG_DEBUG("Reading JetTruthLabelingTool truthKey:" << m_label_truthKey << " isAvailable " << labelHandle_truthKey.isAvailable());
296 // Truth Labeling (MC only)
297 if (!labelHandle_truthKey.isAvailable() && !m_isPHYSLITE) ATH_CHECK(m_jetTruthLabelingTool->decorate(*copy));
298 }
299
300
301 for (const auto jet : *copy) {
302
303 ATH_CHECK( this->FillJet(*jet, true, true, doLargeRdecorations) );
304 //
305 // For OR, selected if it passed cuts
306 if ( acc_baseline(*jet) ){
307 dec_selected(*jet) = 1;
308 }
309 else{
310 dec_selected(*jet) = 0;
311 }
312 }
313 if (recordSG) {
314 ATH_CHECK( evtStore()->record(copy, "STCalib" + jetkey_tmp + m_currentSyst.name()) );
315 ATH_CHECK( evtStore()->record(copyaux, "STCalib" + jetkey_tmp + m_currentSyst.name() + "Aux.") );
316 }
317 return StatusCode::SUCCESS;
318 }
SG::ReadDecorHandleKey< xAOD::JetContainer > m_label_truthKey
StatusCode FillJet(xAOD::Jet &input, const bool doCalib=true, bool isFat=false, bool doLargeRdecorations=false) override final
Definition Jets.cxx:383
JetContainer_v1 JetContainer
Definition of the current "jet container version".

◆ GetInDetLargeD0GSFTracks()

const xAOD::TrackParticleContainer & ST::SUSYObjDef_xAOD::GetInDetLargeD0GSFTracks ( const EventContext & ctx) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3093 of file SUSYObjDef_xAOD.cxx.

3093 {
3094 SG::ReadHandle<xAOD::TrackParticleContainer> tracks(m_GSFLRTCollectionName, ctx);
3095
3096 if ( !tracks.isValid() ) {
3097 throw std::runtime_error("Unable to fetch LargeD0 GSF tracks.");
3098 }
3099 return *tracks;
3100}
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_GSFLRTCollectionName

◆ GetInDetLargeD0Tracks()

const xAOD::TrackParticleContainer & ST::SUSYObjDef_xAOD::GetInDetLargeD0Tracks ( const EventContext & ctx) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3081 of file SUSYObjDef_xAOD.cxx.

3081 {
3082 SG::ReadHandle<xAOD::TrackParticleContainer> tracks(m_LRTCollectionName, ctx);
3083
3084 if ( !tracks.isValid() ) {
3085 throw std::runtime_error("Unable to fetch LargeD0 tracks.");
3086 }
3087
3088 //const xAOD::TrackParticleContainer out = *tracks;
3089
3090 return *tracks;
3091}
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_LRTCollectionName

◆ GetJets()

StatusCode ST::SUSYObjDef_xAOD::GetJets ( xAOD::JetContainer *& copy,
xAOD::ShallowAuxContainer *& copyaux,
const bool recordSG = true,
const std::string & jetkey = "",
const xAOD::JetContainer * containerToBeCopied = nullptr )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 73 of file Jets.cxx.

74 {
75 if (!m_tool_init) {
76 ATH_MSG_ERROR("SUSYTools was not initialized!!");
77 return StatusCode::FAILURE;
78 }
79
80 if (m_isPHYSLITE && jetkey.find("AnalysisJets") == std::string::npos){
81 ATH_MSG_ERROR("You are running on PHYSLITE derivation. Please change the Jets container to 'AnalysisJets'");
82 return StatusCode::FAILURE;
83 }
84
85 ATH_MSG_DEBUG("Default jetkey: " << m_defaultJets);
86 ATH_MSG_DEBUG("Function argument jetkey: " << jetkey);
87
88 // load default regular & btag jet keys
89 std::string jetkey_tmp = m_defaultJets; // use default for regular jetkey_tmp
90
91 // override default if user is passing a jetkey
92 if (!jetkey.empty()) {
93 jetkey_tmp = jetkey;
94 }
95
96 // final settings
97 ATH_MSG_DEBUG("Key for retrieving jet collection: jetkey = " << jetkey_tmp);
98
99 const xAOD::JetContainer* jets = nullptr;
100 if (copy==nullptr) { // empty container provided
101 if (containerToBeCopied != nullptr) {
102 jets = containerToBeCopied;
103 }
104 else {
105 ATH_MSG_DEBUG("Retrieve jet collection: " << jetkey_tmp);
106 ATH_CHECK( evtStore()->retrieve(jets, jetkey_tmp) );
107 }
108 std::pair<xAOD::JetContainer*, xAOD::ShallowAuxContainer*> shallowcopy = xAOD::shallowCopyContainer(*jets);
109 copy = shallowcopy.first;
110 copyaux = shallowcopy.second;
111 bool setLinks = xAOD::setOriginalObjectLink(*jets, *copy);
112 if (!setLinks) {
113 ATH_MSG_WARNING("Failed to set original object links on " << jetkey_tmp);
114 }
115 } else { // use the user-supplied collection instead
116 ATH_MSG_DEBUG("Not retrieving jet collecton, using existing one provided by user");
117 jets = copy;
118 }
119
120 // Calibrate the jets
121 ATH_CHECK(m_jetCalibTool->applyCalibration(*copy));
122
123 // Add isHS labels to jets (required for JvtEfficiencyTools)
124 if (!isData()) {
125 ATH_CHECK(m_jetPileupLabelingTool->decorate(*copy));
126 }
127
128 // Calculate Jvt scores (required by METSignificance)
129 for (const auto jet : *copy) {
130 dec_jvt(*jet) = m_jetJvtMomentTool->updateJvt(*jet);
131 }
132
133 // Re-calculate NNJvt scores
134 if (m_applyJVTCut) ATH_CHECK(m_jetNNJvtMomentTool->decorate(*copy));
135
136 // Update the jets
137 for (const auto jet : *copy) {
138 ATH_CHECK( this->FillJet(*jet) );
139 }
140
141 for (const auto jet : *copy) {
142 // Update the JVT decorations if needed
143 if( m_doFwdJVT){
144 dec_passJvt(*jet) = acc_passFJvt(*jet) && acc_passJvt(*jet);
145 dec_fjvt(*jet) = acc_fjvt(*jet);
146
147 //new state for OR . 0=non-baseline objects, 1=for baseline jets not passing JVT, 2=for any other baseline object
148 if ( acc_baseline(*jet) ){
149 if( acc_passJvt(*jet) ) dec_selected(*jet) = 2;
150 else dec_selected(*jet) = 1;
151 }
152 else{
153 dec_selected(*jet) = 0;
154 }
155 }
156 this->IsBadJet(*jet);
157 this->IsSignalJet(*jet, m_jetPt, m_jetEta);
158 if (!isData())this->IsTruthBJet(*jet);
159 }
160 if (recordSG) {
161 std::string auxname = copyaux->name();
162 if (auxname.compare("UNKNOWN")==0) copyaux->setName(std::string("STCalib" + jetkey_tmp + m_currentSyst.name() + "AuxCopy").c_str());
163 ATH_CHECK( evtStore()->record(copy, "STCalib" + jetkey_tmp + m_currentSyst.name()) );
164 ATH_CHECK( evtStore()->record(copyaux, "STCalib" + jetkey_tmp + m_currentSyst.name() + "Aux.") );
165 }
166 return StatusCode::SUCCESS;
167 }
bool IsBadJet(const xAOD::Jet &input) const override final
Definition Jets.cxx:745
bool IsTruthBJet(const xAOD::Jet &input) const override final
Definition Truth.cxx:301
bool IsSignalJet(const xAOD::Jet &input, const float ptcut, const float etacut) const override final
Definition Jets.cxx:693
void setName(const char *name)
Set the name of the container instance.
const char * name() const
Get the name of the container instance.
static const SG::Decorator< float > dec_fjvt("fJvt")
static const SG::ConstAccessor< float > acc_fjvt("DFCommonJets_fJvt")
static const SG::Decorator< float > dec_jvt("Jvt")

◆ GetJetsSyst()

StatusCode ST::SUSYObjDef_xAOD::GetJetsSyst ( const xAOD::JetContainer & calibjets,
xAOD::JetContainer *& copy,
xAOD::ShallowAuxContainer *& copyaux,
const bool recordSG = true,
const std::string & jetkey = "" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 321 of file Jets.cxx.

322 {
323 if (!m_tool_init) {
324 ATH_MSG_ERROR("SUSYTools was not initialized!!");
325 return StatusCode::FAILURE;
326 }
327
328 std::string jetkey_tmp = jetkey;
329 if (jetkey.empty()) {
330 jetkey_tmp = m_defaultJets;
331 }
332
333 std::pair<xAOD::JetContainer*, xAOD::ShallowAuxContainer*> shallowcopy = xAOD::shallowCopyContainer(calibjets);
334 copy = shallowcopy.first;
335 copyaux = shallowcopy.second;
336
337 bool setLinks = xAOD::setOriginalObjectLink(calibjets, *copy);
338 if (!setLinks) {
339 ATH_MSG_WARNING("Failed to set original object links on " << jetkey_tmp);
340 }
341
342 // ghost associate the muons to the jets (needed by MET muon-jet OR later)
343 ATH_MSG_VERBOSE("Run muon-to-jet ghost association");
344 const xAOD::MuonContainer* muons = nullptr;
345 // Do a little guessing
346 if (jetkey!="AnalysisJets"){
347 ATH_CHECK( evtStore()->retrieve(muons, "Muons") );
348 } else {
349 ATH_CHECK( evtStore()->retrieve(muons, "AnalysisMuons") );
350 }
351 met::addGhostMuonsToJets(*muons, *copy);
352
353 // Update the jets
354 for (const auto jet : *copy) {
355 ATH_CHECK( this->FillJet(*jet, false) );
356 }
357
358 for (const auto jet : *copy) {
359 // Update the JVT decorations if needed
360 if( m_doFwdJVT){
361 dec_passJvt(*jet) = acc_passFJvt(*jet) && acc_passJvt(*jet);
362
363 //new state for OR . 0=non-baseline objects, 1=for baseline jets not passing JVT, 2=for any other baseline object
364 if ( acc_baseline(*jet) ){
365 if( acc_passJvt(*jet) ) dec_selected(*jet) = 2;
366 else dec_selected(*jet) = 1;
367 }
368 else{
369 dec_selected(*jet) = 0;
370 }
371 }
372 this->IsBadJet(*jet);
373 this->IsSignalJet(*jet, m_jetPt, m_jetEta);
374 if (!isData())this->IsTruthBJet(*jet);
375 }
376 if (recordSG) {
377 ATH_CHECK( evtStore()->record(copy, "STCalib" + jetkey_tmp + m_currentSyst.name()) );
378 ATH_CHECK( evtStore()->record(copyaux, "STCalib" + jetkey_tmp + m_currentSyst.name() + "Aux.") );
379 }
380 return StatusCode::SUCCESS;
381 }
void addGhostMuonsToJets(const xAOD::MuonContainer &muons, xAOD::JetContainer &jets)
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".

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

◆ getMCShowerType()

int ST::SUSYObjDef_xAOD::getMCShowerType ( const std::string & sample_name = "",
const std::string & tagger = "" ) const
inlinefinaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 428 of file SUSYObjDef_xAOD.h.

428{ return ST::getMCShowerType(sample_name, tagger); }
static int getMCShowerType(const std::string &sample_name, const std::string &tagger="")

◆ GetMET()

StatusCode ST::SUSYObjDef_xAOD::GetMET ( xAOD::MissingETContainer & met,
const xAOD::JetContainer * jet,
const xAOD::ElectronContainer * elec = nullptr,
const xAOD::MuonContainer * muon = nullptr,
const xAOD::PhotonContainer * gamma = nullptr,
const xAOD::TauJetContainer * taujet = nullptr,
bool doTST = true,
bool doJVTCut = true,
const xAOD::IParticleContainer * invis = nullptr )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 23 of file MET.cxx.

30 {
31 if (!m_tool_init) {
32 ATH_MSG_ERROR("SUSYTools was not initialized!!");
33 return StatusCode::FAILURE;
34 }
35
36 const xAOD::MissingETContainer* metcore(nullptr);
37 if ( evtStore()->retrieve( metcore, m_inputMETCore ).isFailure() ) {
38 ATH_MSG_WARNING( "Unable to retrieve MET core container: " << m_inputMETCore );
39 return StatusCode::FAILURE;
40 }
41 const xAOD::MissingETAssociationMap* metMap(nullptr);
42 if ( evtStore()->retrieve(metMap, m_inputMETMap).isFailure() ) {
43 ATH_MSG_WARNING("Unable to retrieve MissingETAssociationMap: " << m_inputMETMap);
44 return StatusCode::FAILURE;
45 }
46 // Helper keeps track of object selection flags for this map
47 xAOD::MissingETAssociationHelper metHelper(&(*metMap));
48
49 std::string softTerm = "SoftClus";
50 if (doTST) {
51 softTerm = "PVSoftTrk";
52 } else if (doJVTCut) {
53 ATH_MSG_WARNING( "Requested CST MET and a JVT cut. This is not a recommended configuration - please consider switching to TST." );
54 }
55
56 metHelper.resetObjSelectionFlags();
57
58 // allow creation of proxy MET by flagging objects for "neutrino/ification" as already selected
59 if (invis) {
60 ATH_CHECK( m_metMaker->markInvisible(invis, metHelper, &met) );
61 }
62
63 if (elec) {
64 ATH_MSG_VERBOSE("Build electron MET");
65 ConstDataVector<xAOD::ElectronContainer> metelectron(SG::VIEW_ELEMENTS);
66 for (const xAOD::Electron* el : *elec) {
67 // pass baseline selection
68 if (acc_baseline(*el)) {
69 bool veto(false);
70 if (invis) {
71 for (const xAOD::IParticle* ipart : *invis) {
72 if (ipart == el) {veto = true; break;}
73 }
74 }
75 if (!veto) metelectron.push_back(el);
76 }
77 }
78 ATH_CHECK( m_metMaker->rebuildMET(m_eleTerm, xAOD::Type::Electron, &met, metelectron.asDataVector(), metHelper) );
79 }
80
81 if (gamma) {
82 ATH_MSG_VERBOSE("Build photon MET");
83 ConstDataVector<xAOD::PhotonContainer> metgamma(SG::VIEW_ELEMENTS);
84 for (const xAOD::Photon* ph : *gamma) {
85 // pass baseline selection
86 if (acc_baseline(*ph)) {
87 bool veto(false);
88 if (invis) {
89 for (const xAOD::IParticle* ipart : *invis) {
90 if (ipart == ph) {veto = true; break;}
91 }
92 }
93 if (!veto) metgamma.push_back(ph);
94 }
95 }
96 ATH_CHECK( m_metMaker->rebuildMET(m_gammaTerm, xAOD::Type::Photon, &met, metgamma.asDataVector(), metHelper) );
97 }
98
99 if (taujet) {
100 ATH_MSG_VERBOSE("Build tau MET");
101 ConstDataVector<xAOD::TauJetContainer> mettau(SG::VIEW_ELEMENTS);
102 for (const xAOD::TauJet* tau : *taujet) {
103 // pass baseline selection
104 if (acc_baseline(*tau)) {
105 bool veto(false);
106 if (invis) {
107 for (const xAOD::IParticle* ipart : *invis) {
108 if (ipart == tau) {veto = true; break;}
109 }
110 }
111 if (!veto) mettau.push_back(tau);
112 }
113 }
114 ATH_CHECK( m_metMaker->rebuildMET(m_tauTerm, xAOD::Type::Tau, &met, mettau.asDataVector(), metHelper) );
115 }
116
117 if (muon) {
118 ATH_MSG_VERBOSE("Build muon MET");
119 ConstDataVector<xAOD::MuonContainer> metmuon(SG::VIEW_ELEMENTS);
120 for (const xAOD::Muon* mu : *muon) {
121 bool veto(false);
122 // pass baseline selection
123 if (acc_baseline(*mu)) {
124 if (invis) {
125 for (const xAOD::IParticle* ipart : *invis) {
126 if (ipart == mu) {veto = true; break;}
127 }
128 }
129 if (!veto) metmuon.push_back(mu);
130 }
131 }
132 ATH_CHECK( m_metMaker->rebuildMET(m_muonTerm, xAOD::Type::Muon, &met, metmuon.asDataVector(), metHelper) );
133 }
134
135 if (!jet) {
136 ATH_MSG_WARNING("Invalid jet container specified for MET rebuilding!");
137 return StatusCode::SUCCESS;
138 }
139
140 ATH_MSG_VERBOSE("Build jet/soft MET");
141 ATH_CHECK( m_metMaker->rebuildJetMET(m_jetTerm, softTerm, &met, jet, metcore, metHelper, doJVTCut) );
142
143 if (!isData()) {
144 m_metSystTool->setRandomSeed(static_cast<int>(1e6*met[softTerm]->phi()));
145 ATH_MSG_VERBOSE("Original soft term " << met[softTerm]->name() << " (met: " << met[softTerm]->met() << ")" );
146 if ( m_metSystTool->applyCorrection(*met[softTerm], metHelper) != CP::CorrectionCode::Ok ) {
147 ATH_MSG_WARNING("GetMET: Failed to apply MET soft term systematics.");
148 }
149 ATH_MSG_VERBOSE("New soft term value: " << met[softTerm]->met() );
150 }
151
152 ATH_MSG_VERBOSE("Build MET sum");
153 ATH_CHECK( met::buildMETSum(m_outMETTerm, &met, met[softTerm]->source()) );
154 ATH_MSG_VERBOSE( "Rebuilt MET: Missing Et (x,y): (" << met[m_outMETTerm]->mpx() << "," << met[m_outMETTerm]->mpy() << ")");
155 ATH_MSG_VERBOSE( "Done rebuilding MET." );
156
157 return StatusCode::SUCCESS;
158}
std::vector< std::string > veto
these patterns are anded
Definition listroot.cxx:191
StatusCode buildMETSum(const std::string &totalName, xAOD::MissingETContainer *metCont)
@ 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
@ Tau
The object is a tau (jet)
Definition ObjectType.h:49
TauJet_v3 TauJet
Definition of the current "tau version".
Muon_v1 Muon
Reference the current persistent version:
Photon_v1 Photon
Definition of the current "egamma version".
MissingETAssociationMap_v1 MissingETAssociationMap
Version control by type defintion.

◆ GetMETSig()

StatusCode ST::SUSYObjDef_xAOD::GetMETSig ( xAOD::MissingETContainer & met,
double & metSignificance,
bool doTST = true,
bool doJVTCut = true )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 240 of file MET.cxx.

242 {
243
244 std::string softTerm = "SoftClus";
245 if (doTST) {
246 softTerm = "PVSoftTrk";
247 } else if (doJVTCut) {
248 ATH_MSG_WARNING( "Requested CST MET and a JVT cut. This is not a recommended configuration - please consider switching to TST." );
249 }
250
251 const xAOD::EventInfo* evtInfo = nullptr;
252 ATH_CHECK( evtStore()->retrieve( evtInfo, "EventInfo" ) );
253 ATH_CHECK( m_metSignif->varianceMET( &met, evtInfo->averageInteractionsPerCrossing(), m_jetTerm, softTerm, m_outMETTerm) );
254 metSignificance = m_metSignif->GetSignificance();
255 ATH_MSG_VERBOSE( "Obtained MET Significance: " << metSignificance );
256
257 return StatusCode::SUCCESS;
258}
float averageInteractionsPerCrossing() const
Average interactions per crossing for all BCIDs - for out-of-time pile-up.

◆ GetMuons()

StatusCode ST::SUSYObjDef_xAOD::GetMuons ( xAOD::MuonContainer *& copy,
xAOD::ShallowAuxContainer *& copyaux,
const bool recordSG = true,
const std::string & muonkey = "Muons",
const std::string & lrtmuonkey = "MuonsLRT",
const xAOD::MuonContainer * containerToBeCopied = nullptr )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 101 of file Muons.cxx.

102{
103 if (!m_tool_init) {
104 ATH_MSG_ERROR("SUSYTools was not initialized!!");
105 return StatusCode::FAILURE;
106 }
107
108 // Initializing prompt/LRT OR procedure
109 auto outputCol = std::make_unique<xAOD::MuonContainer>();
110 std::unique_ptr<xAOD::MuonAuxContainer> outputAuxCol;
111 outputAuxCol = std::make_unique<xAOD::MuonAuxContainer>();
112 outputCol->setStore(outputAuxCol.get());
113 ATH_CHECK( m_outMuonLocation.initialize() );
114
115 if (bool(m_muLRT) && !lrtmuonkey.empty() && evtStore()->contains<xAOD::MuonContainer>(lrtmuonkey)){
116 ATH_MSG_DEBUG("Applying prompt/LRT muon OR procedure");
117
118 // First identify if merged container has already been made (for instances where GetMuons() is called more than once)
119 if (evtStore()->contains<xAOD::MuonContainer>("StdWithLRTMuons")) {
120 ATH_MSG_DEBUG("Merged prompt/LRT container already created in TStore");
121 } else {
122 ATH_MSG_DEBUG("Creating merged prompt/LRT container in TStore");
123
124 // Retrieve prompt and LRT muons from TStore
125 ATH_CHECK( evtStore()->retrieve(prompt_muons, muonkey) );
126 ATH_CHECK( evtStore()->retrieve(lrt_muons, lrtmuonkey) );
127
128 // Remove LRT muons as flagged by filter for uncertainty
129 auto filtered_muons = std::make_unique<xAOD::MuonContainer>();
130 std::unique_ptr<xAOD::MuonAuxContainer> filtered_muons_aux = std::make_unique<xAOD::MuonAuxContainer>();
131 filtered_muons->setStore(filtered_muons_aux.get());
132 ATH_CHECK(prepareLRTMuons(lrt_muons, filtered_muons.get()));
133
134 // Check overlap between prompt and LRT collections
135 std::vector<bool> writePromptMuon;
136 std::vector<bool> writeLRTMuon;
137 m_muonLRTORTool->checkOverlap(*prompt_muons, *filtered_muons, writePromptMuon, writeLRTMuon);
138
139 // Decorate muons with prompt/LRT
140 for (const xAOD::Muon* mu : *prompt_muons) dec_isLRT(*mu) = 0;
141 for (const xAOD::Muon* mu : *filtered_muons) dec_isLRT(*mu) = 1;
142
143 // Create merged StdWithLRTMuons container
144 outputCol->reserve(prompt_muons->size() + filtered_muons->size());
145 ATH_CHECK(MergeMuons(*prompt_muons, writePromptMuon, outputCol.get()) );
146 ATH_CHECK(MergeMuons(*filtered_muons, writeLRTMuon, outputCol.get()) );
147
148 // Save merged StdWithLRTMuons container to TStore
149 ATH_CHECK(evtStore()->record(std::move(outputCol), m_outMuonLocation.key()));
150 ATH_CHECK(evtStore()->record(std::move(outputAuxCol), m_outMuonLocation.key() + "Aux.") );
151
152 }
153 } else if (!lrtmuonkey.empty()) {
154 if (evtStore()->contains<xAOD::MuonContainer>(lrtmuonkey) == false && bool(m_muLRT) == true) ATH_MSG_WARNING("prompt/LRT OR procedure attempted but " << lrtmuonkey << " not in ROOT file, check config!");
155 ATH_MSG_DEBUG("Not applying prompt/LRT muon OR procedure");
156 }
157
158 if (m_isPHYSLITE && muonkey.find("AnalysisMuons")==std::string::npos){
159 ATH_MSG_ERROR("You are running on PHYSLITE derivation. Please change the Muons container to 'AnalysisMuons'");
160 return StatusCode::FAILURE;
161 }
162
163 const xAOD::MuonContainer* muons = nullptr;
164 if (bool(m_muLRT) && evtStore()->contains<xAOD::MuonContainer>(lrtmuonkey)){
165 ATH_MSG_DEBUG("Using container: " << m_outMuonLocation.key());
166 ATH_CHECK( evtStore()->retrieve(muons, m_outMuonLocation.key()));
167 }
168 else {
169 if (copy==nullptr) { // empty container provided
170 ATH_MSG_DEBUG("Empty container provided");
171 if (containerToBeCopied != nullptr) {
172 ATH_MSG_DEBUG("Containter to be copied not nullptr");
173 muons = containerToBeCopied;
174 }
175 else {
176 ATH_MSG_DEBUG("Getting Muons collection");
177 ATH_CHECK( evtStore()->retrieve(muons, muonkey) );
178 }
179 }
180 }
181
182 if (copy==nullptr) { // empty container provided
183 std::pair<xAOD::MuonContainer*, xAOD::ShallowAuxContainer*> shallowcopy = xAOD::shallowCopyContainer(*muons);
184 copy = shallowcopy.first;
185 copyaux = shallowcopy.second;
186 bool setLinks = xAOD::setOriginalObjectLink(*muons, *copy);
187 if (!setLinks) {
188 ATH_MSG_WARNING("Failed to set original object links on " << muonkey);
189 }
190 } else { // use the user-supplied collection instead
191 ATH_MSG_DEBUG("Not retrieving muon collection, using existing one provided by user");
192 muons=copy; // this does nothing
193 }
194
195 for (const auto muon : *copy) {
200 }
201 if (recordSG) {
202 ATH_CHECK( evtStore()->record(copy, "STCalib" + muonkey + m_currentSyst.name()) );
203 ATH_CHECK( evtStore()->record(copyaux, "STCalib" + muonkey + m_currentSyst.name() + "Aux.") );
204 }
205 return StatusCode::SUCCESS;
206}
bool IsBadMuon(const xAOD::Muon &input, const float qopcut) const override final
Definition Muons.cxx:405
SG::WriteHandleKey< xAOD::MuonContainer > m_outMuonLocation
StatusCode MergeMuons(const xAOD::MuonContainer &muons, const std::vector< bool > &writeMuon, xAOD::MuonContainer *outputCol) const override final
Definition Muons.cxx:56
StatusCode prepareLRTMuons(const xAOD::MuonContainer *inMuons, xAOD::MuonContainer *copy) const override final
Definition Muons.cxx:74
const xAOD::MuonContainer * lrt_muons
bool IsSignalMuon(const xAOD::Muon &input, const float ptcut, const float d0sigcut, const float z0cut, const float etacut=DUMMYDEF) const override final
Definition Muons.cxx:344
bool IsCosmicMuon(const xAOD::Muon &input, const float z0cut, const float d0cut) const override final
Definition Muons.cxx:444
StatusCode FillMuon(xAOD::Muon &input, const float ptcut, const float etacut) override final
Definition Muons.cxx:208
const xAOD::MuonContainer * prompt_muons

◆ GetMuonTriggerEfficiency()

double ST::SUSYObjDef_xAOD::GetMuonTriggerEfficiency ( const xAOD::Muon & mu,
const std::string & trigExpr,
const bool isdata = false )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 533 of file Muons.cxx.

533 {
534
535 double eff(1.);
536
537 if (m_muonTriggerSFTool->getTriggerEfficiency(mu, eff, trigExpr, isdata) != CP::CorrectionCode::Ok) {
538 ATH_MSG_WARNING("Problem retrieving signal muon trigger efficiency for " << trigExpr );
539 }
540 else{
541 ATH_MSG_DEBUG("Got efficiency " << eff << " for " << trigExpr );
542 }
543 return eff;
544}

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

◆ GetPhotons()

StatusCode ST::SUSYObjDef_xAOD::GetPhotons ( xAOD::PhotonContainer *& copy,
xAOD::ShallowAuxContainer *& copyaux,
const bool recordSG = true,
const std::string & photonkey = "Photons",
const xAOD::PhotonContainer * containerToBeCopied = nullptr )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 33 of file Photons.cxx.

34{
35 if (!m_tool_init) {
36 ATH_MSG_ERROR("SUSYTools was not initialized!!");
37 return StatusCode::FAILURE;
38 }
39
40 if (m_isPHYSLITE && photonkey.find("AnalysisPhotons")==std::string::npos){
41 ATH_MSG_ERROR("You are running on PHYSLITE derivation. Please change the Photons container to 'AnalysisPhotons'");
42 return StatusCode::FAILURE;
43 }
44
45 const xAOD::PhotonContainer* photons = nullptr;
46 if (copy==nullptr) { // empty container provided
47 if (containerToBeCopied != nullptr) {
48 photons = containerToBeCopied;
49 }
50 else {
51 ATH_CHECK( evtStore()->retrieve(photons, photonkey) );
52 }
53 std::pair<xAOD::PhotonContainer*, xAOD::ShallowAuxContainer*> shallowcopy = xAOD::shallowCopyContainer(*photons);
54 copy = shallowcopy.first;
55 copyaux = shallowcopy.second;
56 bool setLinks = xAOD::setOriginalObjectLink(*photons, *copy);
57 if (!setLinks) {
58 ATH_MSG_WARNING("Failed to set original object links on " << photonkey);
59 }
60 } else { // use the user-supplied collection instead
61 ATH_MSG_DEBUG("Not retrieving photon collecton, using existing one provided by user");
62 photons=copy;
63 }
64
65 for (const auto photon : *copy) {
68 }
69
70 if (recordSG) {
71 ATH_CHECK( evtStore()->record(copy, "STCalib" + photonkey + m_currentSyst.name()) );
72 ATH_CHECK( evtStore()->record(copyaux, "STCalib" + photonkey + m_currentSyst.name() + "Aux.") );
73 }
74 return StatusCode::SUCCESS;
75}
StatusCode FillPhoton(xAOD::Photon &input, const float ptcut, const float etacut) override final
Definition Photons.cxx:78
bool IsSignalPhoton(const xAOD::Photon &input, const float ptcut, const float etacut=DUMMYDEF) const override final
Definition Photons.cxx:167
PhotonContainer_v1 PhotonContainer
Definition of the current "photon container version".

◆ GetPileupWeight()

float ST::SUSYObjDef_xAOD::GetPileupWeight ( )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2994 of file SUSYObjDef_xAOD.cxx.

2994 {
2995
2996 const xAOD::EventInfo* evtInfo = GetEventInfo();
2997 float pu_weight = m_prwTool->getCombinedWeight(*evtInfo);
2998
2999 if(!isfinite(pu_weight)) pu_weight = 1.;
3000
3001 return pu_weight;
3002}

◆ GetPileupWeightHash()

ULong64_t ST::SUSYObjDef_xAOD::GetPileupWeightHash ( )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3019 of file SUSYObjDef_xAOD.cxx.

3019 {
3020 const xAOD::EventInfo* evtInfo = GetEventInfo();
3021 return m_prwTool->getPRWHash( *evtInfo );
3022}

◆ GetPileupWeightPrescaledTrigger()

float ST::SUSYObjDef_xAOD::GetPileupWeightPrescaledTrigger ( const std::string & trigger_expr)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3004 of file SUSYObjDef_xAOD.cxx.

3004 {
3005 /* This requires the setup of the PRW tool using your own prescaled lumicalc
3006 files with syntax "HLT_PrescaledTriggerA.lumicalc.root:HLT_PrescaledTriggerA".
3007 For further informations, please refer to:
3008 https://twiki.cern.ch/twiki/bin/view/AtlasProtected/ExtendedPileupReweighting#Prescaling%20MC
3009 */
3010
3011 const xAOD::EventInfo* evtInfo = GetEventInfo();
3012 float pu_weight = m_prwTool->getCombinedWeight(*evtInfo,trigger_expr);
3013
3014 if(!isfinite(pu_weight)) pu_weight = 1.;
3015
3016 return pu_weight;
3017}

◆ GetPrimVtx()

const xAOD::Vertex * ST::SUSYObjDef_xAOD::GetPrimVtx ( ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2925 of file SUSYObjDef_xAOD.cxx.

2925 {
2926 const xAOD::VertexContainer* vertices = nullptr;
2927 if ( evtStore()->retrieve( vertices, "PrimaryVertices" ).isSuccess() ) {
2928 for ( const auto vx : *vertices ) {
2929 if (vx->vertexType() == xAOD::VxType::PriVtx) {
2930 ATH_MSG_DEBUG("PrimaryVertex found with z=" << vx->z());
2931 return vx;
2932 }
2933 }
2934 } else {
2935 ATH_MSG_WARNING("Failed to retrieve VertexContainer \"PrimaryVertices\", returning nullptr");
2936 }
2937 return nullptr;
2938}
@ PriVtx
Primary vertex.
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".

◆ getProperty() [1/2]

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

Get one of the tool's properties.

◆ getProperty() [2/2]

template<typename T>
const T * ST::ISUSYObjDef_xAODTool::getProperty ( const std::string & name)
inlineinherited

Definition at line 239 of file ISUSYObjDef_xAODTool.h.

239 {
240 return dynamic_cast<asg::AsgTool&>(*this).getProperty<T>(name);
241 }
unsigned long long T

◆ GetRandomRunNumber()

unsigned int ST::SUSYObjDef_xAOD::GetRandomRunNumber ( bool muDependentRRN = true)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3043 of file SUSYObjDef_xAOD.cxx.

3043 {
3044
3045 const xAOD::EventInfo* evtInfo = GetEventInfo();
3046 if (randomrunnumber.isAvailable(*(evtInfo)) && muDependentRRN) {
3047 return randomrunnumber(*(evtInfo));
3048 }
3049 else if (!muDependentRRN) {
3050 return m_prwTool->getRandomRunNumber( *evtInfo, muDependentRRN );
3051 }
3052 ATH_MSG_ERROR ( "Failed to find RandomRunNumber decoration! You need to call ApplyPRWTool() beforehand!" );
3053 return 0;
3054}

◆ GetRunNumber()

unsigned int ST::SUSYObjDef_xAOD::GetRunNumber ( ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3065 of file SUSYObjDef_xAOD.cxx.

3065 {
3066
3067 const xAOD::EventInfo* evtInfo = GetEventInfo();
3068
3069 // For data, we can just directly use the run number
3070 if (isData()) { return evtInfo->runNumber(); }
3071
3072 // else it's MC as we need the RRN assigned by the PRW tool
3073 if (!randomrunnumber.isAvailable(*(evtInfo))) {
3074 ATH_MSG_ERROR ( "Failed to find RandomRunNumber decoration! You need to call ApplyPRWTool() beforehand!" );
3075 }
3076 return randomrunnumber(*(evtInfo));
3077
3078}
uint32_t runNumber() const
The current event's run number.

◆ getSherpaVjetsNjetsWeight() [1/2]

float ST::SUSYObjDef_xAOD::getSherpaVjetsNjetsWeight ( ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2894 of file SUSYObjDef_xAOD.cxx.

2894 {
2895
2896 //Retrieve the truth jets
2897 if( evtStore()->contains<xAOD::JetContainer>("AntiKt4TruthWZJets") ){
2898 return getSherpaVjetsNjetsWeight("AntiKt4TruthWZJets");
2899 }
2900 else if( evtStore()->contains<xAOD::JetContainer>("AntiKt4TruthJets")){
2901 return getSherpaVjetsNjetsWeight("AntiKt4TruthJets" );
2902 }
2903 else{
2904 ATH_MSG_WARNING("No TruthJetContainer found! Dummy null weight retrieved.");
2905 }
2906 return 0.;
2907}
float getSherpaVjetsNjetsWeight() const override final

◆ getSherpaVjetsNjetsWeight() [2/2]

float ST::SUSYObjDef_xAOD::getSherpaVjetsNjetsWeight ( const std::string & jetContainer) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2909 of file SUSYObjDef_xAOD.cxx.

2909 {
2910
2911 if(jetContainer=="AntiKt4TruthWZJets"){
2912 return m_pmgSHnjetWeighterWZ->getWeight();
2913 }
2914 else if (jetContainer=="AntiKt4TruthJets"){
2915 return m_pmgSHnjetWeighter->getWeight();
2916 }
2917 else{
2918 ATH_MSG_WARNING(jetContainer << " is no supported by PMGSherpa22VJetsWeightTool! Please check...");
2919 }
2920 return 1.;
2921
2922}

◆ GetSignalElecSF()

float ST::SUSYObjDef_xAOD::GetSignalElecSF ( const xAOD::Electron & el,
const bool recoSF = true,
const bool idSF = true,
const bool triggerSF = true,
const bool isoSF = true,
const std::string & trigExpr = "singleLepton",
const bool ecidsSF = false,
const bool cidSF = false )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 420 of file Electrons.cxx.

427 {
428
429 if ((m_eleId == "VeryLooseLLH" || m_eleId == "LooseLLH" || m_eleId == "Loose" || m_eleId == "Medium" || m_eleId == "Tight") && (idSF || triggerSF || isoSF)) {
430 ATH_MSG_ERROR("No signal electron ID or trigger scale factors provided for the selected working point!");
431 ATH_MSG_ERROR("I will now die messily.");
432 }
433
434 //shortcut keys for trigger SF config
435 std::string singleLepStr = "singleLepton";
436 std::string diLepStr = "diLepton";
437 std::string multiLepStr = "multiLepton";
438
439 float sf(1.);
440
441 if (recoSF) {
442 double reco_sf(1.);
443
444 CP::CorrectionCode result = m_elecEfficiencySFTool_reco->getEfficiencyScaleFactor(el, reco_sf);
445 switch (result) {
447 sf *= reco_sf;
448 break;
450 ATH_MSG_ERROR( "Failed to retrieve signal electron reco SF");
451 break;
453 ATH_MSG_VERBOSE( "OutOfValidityRange found for signal electron reco SF");
454 break;
455 default:
456 ATH_MSG_WARNING( "Don't know what to do for signal electron reco SF");
457 }
458 }
459
460 if (idSF) {
461 double id_sf(1.);
462
463 CP::CorrectionCode result = m_elecEfficiencySFTool_id->getEfficiencyScaleFactor(el, id_sf);
464 switch (result) {
466 sf *= id_sf;
467 break;
469 ATH_MSG_ERROR( "Failed to retrieve signal electron id SF");
470 break;
472 ATH_MSG_VERBOSE( "OutOfValidityRange found for signal electron id SF");
473 break;
474 default:
475 ATH_MSG_WARNING( "Don't know what to do for signal electron id SF");
476 }
477 }
478
479 if (triggerSF) {
480
481 std::vector<std::string> trigMChains={};
482 std::string theExpr ("");
483 if(trigExpr==singleLepStr) {
484 if (this->treatAsYear()==2015) trigMChains = m_v_trigs15_cache_singleEle;
485 else if (this->treatAsYear()==2016) trigMChains = m_v_trigs16_cache_singleEle;
486 else if (this->treatAsYear()==2017) trigMChains = m_v_trigs17_cache_singleEle;
487 else if (this->treatAsYear()==2018) trigMChains = m_v_trigs18_cache_singleEle;
488 else if (this->treatAsYear()==2022) trigMChains = m_v_trigs22_cache_singleEle;
489 else if (this->treatAsYear()==2023) trigMChains = m_v_trigs23_cache_singleEle;
490 else trigMChains = m_v_trigs24_cache_singleEle;
492 }
493 else{
494 ATH_MSG_WARNING( "Only single lepton trigger SFs are supported in GetSignalElecSF(). Use GetTriggerGlobalEfficiencySF() for dilepton or multilepton triggers!");
495 }
496
497 //check matching
498 this->TrigMatch({&el}, trigMChains);
499
500 if(!acc_trigmatched(el)){
501 ATH_MSG_DEBUG( "Electron was not matched to trigger " << theExpr << " - scale factor does not apply (year " << this->treatAsYear() << ") Returning 1." );
502 }
503 else{ //is trig-matched electron, go for it!
504 if (trigExpr==multiLepStr || trigExpr==diLepStr) {
505 ATH_MSG_WARNING( "The dilepton or multilepton trigger SFs are not supported in GetSignalElecSF(). Use GetTriggerGlobalEfficiencySF()!");
506 }
507 else {
508 double trig_sf = GetEleTriggerEfficiencySF( el , theExpr );
509 sf *= trig_sf;
510 }
511 }
512 }
513
514 if (isoSF) {
515 double iso_sf(1.);
516 CP::CorrectionCode result;
517 if (acc_isolHighPt(el) && el.pt()>m_eleIsoHighPtThresh)
518 result = m_elecEfficiencySFTool_isoHighPt->getEfficiencyScaleFactor(el, iso_sf);
519 else
520 result = m_elecEfficiencySFTool_iso->getEfficiencyScaleFactor(el, iso_sf);
521
522 switch (result) {
524 sf *= iso_sf;
525 break;
527 ATH_MSG_ERROR( "Failed to retrieve signal electron iso SF");
528 break;
530 ATH_MSG_VERBOSE( "OutOfValidityRange found for signal electron iso SF");
531 break;
532 default:
533 ATH_MSG_WARNING( "Don't know what to do for signal electron iso SF");
534 }
535 }
536
537 // Charge flip SF: combined ECIDs & charge ID
538 if ( ecidsSF || cidSF ) {
539 double chf_sf(1.);
540 // 1. ECIDs SF
541 if ( ecidsSF ) {
542 sf *= chf_sf;
543 ATH_MSG_WARNING( "ECID SF ARE NOT YET SUPPORTED IN R22" );
544 }
545 // 2. CID SF
546 if ( cidSF ) {
547 sf *= chf_sf;
548 dec_sfChIDEff(el) = chf_sf;
549 ATH_MSG_WARNING( "CID SF ARE NOT YET SUPPORTED IN R22" );
550 }
551 }
552
553 dec_effscalefact(el) = sf;
554 return sf;
555}
std::vector< std::string > m_v_trigs24_cache_singleEle
std::vector< std::string > m_v_trigs15_cache_singleEle
double GetEleTriggerEfficiencySF(const xAOD::Electron &el, const std::string &trigExpr="SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0") const override final
std::vector< std::string > m_v_trigs23_cache_singleEle
std::vector< std::string > m_v_trigs18_cache_singleEle
int treatAsYear(const int runNumber=-1) const override final
std::vector< std::string > m_v_trigs22_cache_singleEle
std::vector< std::string > m_v_trigs17_cache_singleEle
std::vector< std::string > m_v_trigs16_cache_singleEle
void TrigMatch(const xAOD::IParticle *p, std::initializer_list< std::string >::iterator, std::initializer_list< std::string >::iterator) override final
Definition Trigger.cxx:238
static const SG::ConstAccessor< char > acc_isolHighPt("isolHighPt")
static const SG::Decorator< float > dec_sfChIDEff("chargeIDEffiSF")
static const SG::ConstAccessor< char > acc_trigmatched("trigmatched")

◆ GetSignalMuonSF()

float ST::SUSYObjDef_xAOD::GetSignalMuonSF ( const xAOD::Muon & mu,
const bool recoSF = true,
const bool isoSF = true,
const bool doBadMuonHP = true,
const bool warnOVR = true )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 480 of file Muons.cxx.

481{
482 float sf(1.);
483
484 if (recoSF) {
485 float sf_reco(1.);
486 if (m_muonEfficiencySFTool->getEfficiencyScaleFactor( mu, sf_reco ) == CP::CorrectionCode::OutOfValidityRange) {
487 if(warnOVR) ATH_MSG_WARNING(" GetSignalMuonSF: Reco getEfficiencyScaleFactor out of validity range");
488 }
489 ATH_MSG_VERBOSE( "MuonReco ScaleFactor " << sf_reco );
490 sf *= sf_reco;
491
492 float sf_ttva(1.);
493 if(m_doTTVAsf){
494 if (m_muonTTVAEfficiencySFTool->getEfficiencyScaleFactor( mu, sf_ttva ) == CP::CorrectionCode::OutOfValidityRange) {
495 if(warnOVR) ATH_MSG_WARNING(" GetSignalMuonSF: TTVA getEfficiencyScaleFactor out of validity range");
496 }
497 ATH_MSG_VERBOSE( "MuonTTVA ScaleFactor " << sf_ttva );
498 sf *= sf_ttva;
499 }
500
501 float sf_badHighPt(1.);
502 if(m_muId == 4 && doBadMuonHP){
503 if (m_muonEfficiencyBMHighPtSFTool->getEfficiencyScaleFactor( mu, sf_badHighPt ) == CP::CorrectionCode::OutOfValidityRange) {
504 if(warnOVR) ATH_MSG_WARNING(" GetSignalMuonSF: BadMuonHighPt getEfficiencyScaleFactor out of validity range");
505 }
506 ATH_MSG_VERBOSE( "MuonBadMuonHighPt ScaleFactor " << sf_badHighPt );
507 sf *= sf_badHighPt;
508 }
509 }
510
511
512 if (isoSF) {
513 float sf_iso(1.);
514 if (acc_isolHighPt(mu) && mu.pt()>m_muIsoHighPtThresh) {
515 if (m_muonHighPtIsolationSFTool->getEfficiencyScaleFactor( mu, sf_iso ) == CP::CorrectionCode::OutOfValidityRange) {
516 if(warnOVR) ATH_MSG_WARNING(" GetSignalMuonSF: high-pt Iso getEfficiencyScaleFactor out of validity range");
517 }
518 } else if (acc_isol(mu) && mu.pt()<m_muIsoHighPtThresh) {
519 if (m_muonIsolationSFTool->getEfficiencyScaleFactor( mu, sf_iso ) == CP::CorrectionCode::OutOfValidityRange) {
520 if(warnOVR) ATH_MSG_WARNING(" GetSignalMuonSF: Iso getEfficiencyScaleFactor out of validity range");
521 }
522 }
523 ATH_MSG_VERBOSE( "MuonIso ScaleFactor " << sf_iso );
524 sf *= sf_iso;
525 }
526
527
528 dec_effscalefact(mu) = sf;
529 return sf;
530}
static const SG::ConstAccessor< char > acc_isol("isol")

◆ GetSignalPhotonSF()

double ST::SUSYObjDef_xAOD::GetSignalPhotonSF ( const xAOD::Photon & ph,
const bool effSF = true,
const bool isoSF = true,
const bool triggerSF = false ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 206 of file Photons.cxx.

207{
208 double sf(1.);
209
210 if (effSF) {
211
212 double sf_eff = 1.;
213
214 CP::CorrectionCode res = m_photonEfficiencySFTool->getEfficiencyScaleFactor( ph, sf_eff );
215 if (res == CP::CorrectionCode::OutOfValidityRange) ATH_MSG_WARNING(" GetSignalPhotonSF: EfficiencyScaleFactor out of validity range");
216
217 sf *= sf_eff;
218 }
219
220 if (isoSF) {
221
222 double sf_iso = 1.;
223
224 CP::CorrectionCode res = m_photonIsolationSFTool->getEfficiencyScaleFactor( ph, sf_iso );
225 if (res == CP::CorrectionCode::OutOfValidityRange) ATH_MSG_WARNING(" GetSignalPhotonSF: IsolationScaleFactor out of validity range");
226
227 sf *= sf_iso;
228 }
229
230 if (triggerSF) {
231
232 double sf_trigger = 1.;
233
234 CP::CorrectionCode res = m_photonTriggerSFTool->getEfficiencyScaleFactor( ph, sf_trigger );
235 if (res == CP::CorrectionCode::OutOfValidityRange) ATH_MSG_WARNING(" GetSignalPhotonSF: TriggerScaleFactor out of validity range");
236
237 sf *= sf_trigger;
238 }
239
240 ATH_MSG_VERBOSE( "ScaleFactor " << sf );
241
242 dec_effscalefact(ph) = sf;
243 return sf;
244}
std::pair< std::vector< unsigned int >, bool > res

◆ GetSignalPhotonSFsys()

double ST::SUSYObjDef_xAOD::GetSignalPhotonSFsys ( const xAOD::Photon & ph,
const CP::SystematicSet & systConfig,
const bool effSF = true,
const bool isoSF = true,
const bool triggerSF = false )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 247 of file Photons.cxx.

248{
249 double sf(1.);
250
251 //Set the new systematic variation
252 StatusCode ret = m_photonEfficiencySFTool->applySystematicVariation(systConfig);
253 if (ret != StatusCode::SUCCESS) {
254 ATH_MSG_ERROR("Cannot configure AsgPhotonEfficiencyCorrectionTool (reco) for systematic var. " << systConfig.name() );
255 }
256
257 ret = m_photonIsolationSFTool->applySystematicVariation(systConfig);
258 if (ret != StatusCode::SUCCESS) {
259 ATH_MSG_ERROR("Cannot configure AsgPhotonEfficiencyCorrectionTool (iso) for systematic var. " << systConfig.name() );
260 }
261
262 ret = m_photonTriggerSFTool->applySystematicVariation(systConfig);
263 if (ret != StatusCode::SUCCESS) {
264 ATH_MSG_ERROR("Cannot configure AsgPhotonEfficiencyCorrectionTool (trigger) for systematic var. " << systConfig.name() );
265 }
266
267 if (effSF) {
268
269 double sf_eff = 1.;
270
271 CP::CorrectionCode res = m_photonEfficiencySFTool->getEfficiencyScaleFactor( ph, sf_eff );
272 if (res == CP::CorrectionCode::OutOfValidityRange) ATH_MSG_WARNING(" GetSignalPhotonSF: getEfficiencyScaleFactor out of validity range");
273
274 sf *= sf_eff;
275 }
276
277 if (isoSF) {
278
279 double sf_iso = 1.;
280
281 CP::CorrectionCode res = m_photonIsolationSFTool->getEfficiencyScaleFactor( ph, sf_iso );
282 if (res == CP::CorrectionCode::OutOfValidityRange) ATH_MSG_WARNING(" GetSignalPhotonSF: getEfficiencyScaleFactor out of validity range");
283
284 sf *= sf_iso;
285 }
286
287 if (triggerSF) {
288
289 double sf_trigger = 1.;
290
291 CP::CorrectionCode res = m_photonTriggerSFTool->getEfficiencyScaleFactor( ph, sf_trigger );
292 if (res == CP::CorrectionCode::OutOfValidityRange) ATH_MSG_WARNING(" GetSignalPhotonSF: getEfficiencyScaleFactor out of validity range");
293
294 sf *= sf_trigger;
295 }
296
297 //Roll back to current sys
298 ret = m_photonEfficiencySFTool->applySystematicVariation(m_currentSyst);
299 if (ret != StatusCode::SUCCESS) {
300 ATH_MSG_ERROR("Cannot configure AsgPhotonEfficiencyCorrectionTool back to default.");
301 }
302
303 ret = m_photonIsolationSFTool->applySystematicVariation(m_currentSyst);
304 if (ret != StatusCode::SUCCESS) {
305 ATH_MSG_ERROR("Cannot configure AsgPhotonEfficiencyCorrectionTool (iso) for systematic var. " << systConfig.name() );
306 }
307
308 ret = m_photonTriggerSFTool->applySystematicVariation(m_currentSyst);
309 if (ret != StatusCode::SUCCESS) {
310 ATH_MSG_ERROR("Cannot configure AsgPhotonEfficiencyCorrectionTool (trigger) for systematic var. " << systConfig.name() );
311 }
312
313 ATH_MSG_VERBOSE( "ScaleFactor " << sf );
314
315 dec_effscalefact(ph) = sf;
316 return sf;
317}

◆ GetSignalTauSF()

double ST::SUSYObjDef_xAOD::GetSignalTauSF ( const xAOD::TauJet & tau,
const bool idSF = true,
const bool triggerSF = true,
const std::string & trigExpr = "tau25_medium1_tracktwo" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 130 of file Taus.cxx.

134{
135 double sf(1.);
136
137 if (acc_signal(tau)) {
138 if (idSF) {
139 if (m_tauEffTool->getEfficiencyScaleFactor(tau, sf) != CP::CorrectionCode::Ok) {
140 ATH_MSG_WARNING("Failed to retrieve tau efficiency scale factor.");
141 }
142 ATH_MSG_VERBOSE(" Retrieved tau SF " << sf);
143 }
144
145 if (triggerSF) {
146 double trig_sf = GetTauTriggerEfficiencySF(tau, trigExpr);
147
148 if (trig_sf > -90) {
149 sf *= trig_sf;
150 ATH_MSG_VERBOSE(" Retrieved tau trig SF " << trig_sf);
151 }
152 }
153 }
154
155 dec_effscalefact(tau) = sf;
156 return sf;
157}
double GetTauTriggerEfficiencySF(const xAOD::TauJet &tau, const std::string &trigExpr="tau25_medium1_tracktwo") override final
Definition Taus.cxx:194

◆ GetSignalTauSFsys()

double ST::SUSYObjDef_xAOD::GetSignalTauSFsys ( const xAOD::TauJet & tau,
const CP::SystematicSet & systConfig,
const bool idSF = true,
const bool triggerSF = true,
const std::string & trigExpr = "tau25_medium1_tracktwo" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 160 of file Taus.cxx.

165{
166 double sf(1.);
167
168 //Set the new systematic variation
169 StatusCode ret = m_tauEffTool->applySystematicVariation(systConfig);
170 if (ret != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure TauEfficiencyCorrectionsTool for systematic var. " << systConfig.name() ); }
171
172 for (auto& tool : m_tauTrigEffTool) {
173 ret = tool->applySystematicVariation(systConfig);
174 if (ret != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure " << tool->name() << " for systematic var. " << systConfig.name()); }
175 }
176
177 sf *= GetSignalTauSF(tau, idSF, triggerSF, trigExpr);
178
179 //Roll back to default
180 ret = m_tauEffTool->applySystematicVariation(m_currentSyst);
181 if (ret != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure TauEfficiencyCorrectionsTool back to default"); }
182
183 for (auto& tool : m_tauTrigEffTool) {
184 ret = tool->applySystematicVariation(m_currentSyst);
185 if (ret != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure " << tool->name() << " back to default"); }
186 }
187
188 dec_effscalefact(tau) = sf;
189
190 return sf;
191}
double GetSignalTauSF(const xAOD::TauJet &tau, const bool idSF=true, const bool triggerSF=true, const std::string &trigExpr="tau25_medium1_tracktwo") override final
Definition Taus.cxx:130

◆ GetSumOfWeights()

double ST::SUSYObjDef_xAOD::GetSumOfWeights ( int channel)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3039 of file SUSYObjDef_xAOD.cxx.

3039 {
3040 return m_prwTool->GetSumOfEventWeights(channel);
3041}

◆ getSystInfo()

ST::SystInfo ST::SUSYObjDef_xAOD::getSystInfo ( const CP::SystematicVariation & sys) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2576 of file SUSYObjDef_xAOD.cxx.

2576 {
2577
2578 SystInfo sysInfo;
2579 sysInfo.affectsKinematics = false;
2580 sysInfo.affectsWeights = false;
2581 sysInfo.affectedWeights.clear();
2582 sysInfo.systset.insert(sys);
2583
2584 if (!m_jetNNJvtEfficiencyTool.empty()) {
2585 if ( m_jetNNJvtEfficiencyTool->isAffectedBySystematic( sys ) ) {
2586 sysInfo.affectsWeights = true;
2587 sysInfo.affectsType = SystObjType::Jet;
2588 sysInfo.affectedWeights.insert(ST::Weights::Jet::JVT);
2589 }
2590 }
2591
2592 if (!m_jetfJvtEfficiencyTool.empty()) {
2593 if ( m_jetfJvtEfficiencyTool->isAffectedBySystematic( sys ) ) {
2594 sysInfo.affectsWeights = true;
2595 sysInfo.affectsType = SystObjType::Jet;
2596 sysInfo.affectedWeights.insert(ST::Weights::Jet::FJVT);
2597 }
2598 }
2599
2600 if (!m_jetUncertaintiesTool.empty()) {
2601 if ( m_jetUncertaintiesTool->isAffectedBySystematic( sys ) ) {
2602 sysInfo.affectsKinematics = true;
2603 sysInfo.affectsType = SystObjType::Jet;
2604 }
2605 }
2606 if (!m_jetUncertaintiesPDSmearTool.empty()) {
2607 if ( m_jetUncertaintiesPDSmearTool->isAffectedBySystematic( sys ) ) {
2608 sysInfo.affectsKinematics = true;
2609 sysInfo.affectsType = SystObjType::Jet;
2610 }
2611 }
2612
2613 if (!m_fatjetUncertaintiesTool.empty()) {
2614 if ( m_fatjetUncertaintiesTool->isAffectedBySystematic( sys ) ) {
2615 sysInfo.affectsKinematics = true;
2616 sysInfo.affectsType = SystObjType::Jet;
2617 }
2618 }
2619 if (!m_fatjetUncertaintiesPDSmearTool.empty()) {
2620 if ( m_fatjetUncertaintiesPDSmearTool->isAffectedBySystematic( sys ) ) {
2621 sysInfo.affectsKinematics = true;
2622 sysInfo.affectsType = SystObjType::Jet;
2623 }
2624 }
2625
2626 if (!m_fatjetFFSmearingTool.empty()) {
2627 CP::SystematicSet dummy;
2628 dummy.insert(sys);
2629 if ( std::find(m_fatjetFFSmearingSyst.begin(), m_fatjetFFSmearingSyst.end(), dummy) != m_fatjetFFSmearingSyst.end() ) {
2630 sysInfo.affectsKinematics = true;
2631 sysInfo.affectsType = SystObjType::Jet;
2632 }
2633 }
2634
2635 if (!m_WTagjetUncertaintiesTool.empty()) {
2636 if ( m_WTagjetUncertaintiesTool->isAffectedBySystematic( CP::SystematicVariation(sys.basename(), CP::SystematicVariation::CONTINUOUS) ) ) {
2637 sysInfo.affectsKinematics = true;
2638 sysInfo.affectsType = SystObjType::Jet;
2639 }
2640 }
2641 if (!m_ZTagjetUncertaintiesTool.empty()) {
2642 if ( m_ZTagjetUncertaintiesTool->isAffectedBySystematic( CP::SystematicVariation(sys.basename(), CP::SystematicVariation::CONTINUOUS) ) ) {
2643 sysInfo.affectsKinematics = true;
2644 sysInfo.affectsType = SystObjType::Jet;
2645 }
2646 }
2647 if (!m_TopTagjetUncertaintiesTool.empty()) {
2648 if ( m_TopTagjetUncertaintiesTool->isAffectedBySystematic( CP::SystematicVariation(sys.basename(), CP::SystematicVariation::CONTINUOUS) ) ) {
2649 sysInfo.affectsKinematics = true;
2650 sysInfo.affectsType = SystObjType::Jet;
2651 }
2652 }
2653
2654 if (!m_muonCalibTool.empty()) {
2655 if ( m_muonCalibTool->isAffectedBySystematic(sys) ) {
2656 sysInfo.affectsKinematics = true;
2657 sysInfo.affectsType = SystObjType::Muon;
2658 }
2659 }
2661 if ( m_elecEfficiencySFTool_trig_singleLep->isAffectedBySystematic(sys) ) {
2662 sysInfo.affectsWeights = true;
2663 sysInfo.affectsType = SystObjType::Electron;
2664 sysInfo.affectedWeights.insert(ST::Weights::Electron::Trigger);
2665 }
2666 }
2668 if ( m_elecEfficiencySFTool_trigEff_singleLep->isAffectedBySystematic(sys) ) {
2669 sysInfo.affectsWeights = true;
2670 sysInfo.affectsType = SystObjType::Electron;
2671 sysInfo.affectedWeights.insert(ST::Weights::Electron::Trigger);
2672 }
2673 }
2674 if (!m_muonEfficiencySFTool.empty()) {
2675 if ( m_muonEfficiencySFTool->isAffectedBySystematic(sys) ) {
2676 sysInfo.affectsWeights = true;
2677 sysInfo.affectsType = SystObjType::Muon;
2678 sysInfo.affectedWeights.insert(ST::Weights::Muon::Reconstruction);
2679 }
2680 }
2681 if (!m_muonEfficiencyBMHighPtSFTool.empty()) {
2682 if ( m_muonEfficiencyBMHighPtSFTool->isAffectedBySystematic(sys) ) {
2683 sysInfo.affectsWeights = true;
2684 sysInfo.affectsType = SystObjType::Muon;
2685 sysInfo.affectedWeights.insert(ST::Weights::Muon::Reconstruction);
2686 }
2687 }
2688 if (!m_muonTTVAEfficiencySFTool.empty()) {
2689 if ( m_muonTTVAEfficiencySFTool->isAffectedBySystematic(sys) ) {
2690 sysInfo.affectsWeights = true;
2691 sysInfo.affectsType = SystObjType::Muon;
2692 sysInfo.affectedWeights.insert(ST::Weights::Muon::Reconstruction);
2693 }
2694 }
2695 if (!m_muonIsolationSFTool.empty()) {
2696 if ( m_muonIsolationSFTool->isAffectedBySystematic(sys) ) {
2697 sysInfo.affectsWeights = true;
2698 sysInfo.affectsType = SystObjType::Muon;
2699 sysInfo.affectedWeights.insert(ST::Weights::Muon::Isolation);
2700 }
2701 }
2702 if (!m_muonTriggerSFTool.empty()) {
2703 if ( m_muonTriggerSFTool->isAffectedBySystematic(sys) ) {
2704 sysInfo.affectsWeights = true;
2705 sysInfo.affectsType = SystObjType::Muon;
2706 sysInfo.affectedWeights.insert(ST::Weights::Muon::Trigger);
2707 }
2708 }
2709 if (!m_elecEfficiencySFTool_reco.empty()) {
2710 if ( m_elecEfficiencySFTool_reco->isAffectedBySystematic(sys) ) {
2711 sysInfo.affectsWeights = true;
2712 sysInfo.affectsType = SystObjType::Electron;
2713 sysInfo.affectedWeights.insert(ST::Weights::Electron::Reconstruction);
2714 }
2715 }
2716 if (!m_elecEfficiencySFTool_id.empty()) {
2717 if ( m_elecEfficiencySFTool_id->isAffectedBySystematic(sys) ) {
2718 sysInfo.affectsWeights = true;
2719 sysInfo.affectsType = SystObjType::Electron;
2720 sysInfo.affectedWeights.insert(ST::Weights::Electron::ID);
2721 }
2722 }
2723 if (!m_trigGlobalEffCorrTool_diLep.empty()) {
2724 if ( m_trigGlobalEffCorrTool_diLep->isAffectedBySystematic(sys) ) {
2725 sysInfo.affectsWeights = true;
2726 sysInfo.affectsType = SystObjType::Electron;
2727 sysInfo.affectedWeights.insert(ST::Weights::Electron::Trigger);
2728 }
2729 }
2730 if (!m_trigGlobalEffCorrTool_multiLep.empty()) {
2731 if ( m_trigGlobalEffCorrTool_multiLep->isAffectedBySystematic(sys) ) {
2732 sysInfo.affectsWeights = true;
2733 sysInfo.affectsType = SystObjType::Electron;
2734 sysInfo.affectedWeights.insert(ST::Weights::Electron::Trigger);
2735 }
2736 }
2737 if (!m_elecEfficiencySFTool_iso.empty() ) {
2738 if ( m_elecEfficiencySFTool_iso->isAffectedBySystematic(sys) ) {
2739 sysInfo.affectsWeights = true;
2740 sysInfo.affectsType = SystObjType::Electron;
2741 sysInfo.affectedWeights.insert(ST::Weights::Electron::Isolation);
2742 }
2743 }
2744 if (!m_elecEfficiencySFTool_isoHighPt.empty() ) {
2745 if ( m_elecEfficiencySFTool_isoHighPt->isAffectedBySystematic(sys) ) {
2746 sysInfo.affectsWeights = true;
2747 sysInfo.affectsType = SystObjType::Electron;
2748 sysInfo.affectedWeights.insert(ST::Weights::Electron::Isolation);
2749 }
2750 }
2751 if (!m_egammaCalibTool.empty()) {
2752 if ( m_egammaCalibTool->isAffectedBySystematic(sys) ) {
2753 sysInfo.affectsKinematics = true;
2754 if (sys.basename().compare(0, 3, "EG_") == 0) {
2755 sysInfo.affectsType = SystObjType::Egamma;
2756 } else if (sys.basename().compare(0, 3, "PH_") == 0) {
2757 sysInfo.affectsType = SystObjType::Photon;
2758 } else if (sys.basename().compare(0, 3, "EL_") == 0) {
2759 sysInfo.affectsType = SystObjType::Electron;
2760 }
2761 }
2762 }
2763 if (!isData() && !m_isoCorrTool.empty()) {
2764 if (m_isoCorrTool->isAffectedBySystematic(sys)){
2765 sysInfo.affectsWeights = false;
2766 sysInfo.affectsKinematics = true;
2767 sysInfo.affectsType = SystObjType::Photon;
2768 }
2769 }
2770 if (!isData() && !m_photonEfficiencySFTool.empty()) {
2771 if (m_photonEfficiencySFTool->isAffectedBySystematic(CP::SystematicVariation(sys.basename(), CP::SystematicVariation::CONTINUOUS)) ) {
2772 sysInfo.affectsWeights = true;
2773 sysInfo.affectsType = SystObjType::Photon;
2774 sysInfo.affectedWeights.insert(ST::Weights::Photon::Reconstruction);
2775 }
2776 }
2777 if (!isData() && !m_photonIsolationSFTool.empty()) {
2778 if (m_photonIsolationSFTool->isAffectedBySystematic(sys)) {
2779 sysInfo.affectsWeights = true;
2780 sysInfo.affectsType = SystObjType::Photon;
2781 sysInfo.affectedWeights.insert(ST::Weights::Photon::Isolation);
2782 }
2783 }
2784 if (!isData() && !m_photonTriggerSFTool.empty()) {
2785 if (m_photonTriggerSFTool->isAffectedBySystematic(sys)) {
2786 sysInfo.affectsWeights = true;
2787 sysInfo.affectsType = SystObjType::Photon;
2788 sysInfo.affectedWeights.insert(ST::Weights::Photon::Trigger);
2789 }
2790 }
2791 if (!m_trigGlobalEffCorrTool_diPhoton.empty()) {
2792 if ( m_trigGlobalEffCorrTool_diPhoton->isAffectedBySystematic(sys) ) {
2793 sysInfo.affectsWeights = true;
2794 sysInfo.affectsType = SystObjType::Photon;
2795 sysInfo.affectedWeights.insert(ST::Weights::Photon::Trigger);
2796 }
2797 }
2798 if ( !m_btagEffTool.empty() ) {
2799 if ( m_btagEffTool->isAffectedBySystematic(sys) ) {
2800 sysInfo.affectsWeights = true;
2801 sysInfo.affectsType = SystObjType::BTag;
2802 sysInfo.affectedWeights.insert(ST::Weights::Jet::Btag);
2803 }
2804 }
2805 if ( !m_btagEffTool_trkJet.empty() ) {
2806 if ( m_btagEffTool_trkJet->isAffectedBySystematic(sys) ) {
2807 sysInfo.affectsWeights = true;
2808 sysInfo.affectsType = SystObjType::BTag;
2809 sysInfo.affectedWeights.insert(ST::Weights::Jet::Btag_Track);
2810 }
2811 }
2812 if (!m_tauSmearingTool.empty()) {
2813 if ( m_tauSmearingTool->isAffectedBySystematic(sys) ) {
2814 sysInfo.affectsKinematics = true;
2815 sysInfo.affectsType = SystObjType::Tau;
2816 }
2817 }
2818 if (!m_tauEffTool.empty()) {
2819 if ( m_tauEffTool->isAffectedBySystematic(sys) ) {
2820 sysInfo.affectsWeights = true;
2821 sysInfo.affectsType = SystObjType::Tau;
2822 sysInfo.affectedWeights.insert(ST::Weights::Tau::Reconstruction);
2823 }
2824 }
2825 for(const auto &tool : m_tauTrigEffTool) {
2826 if(tool->isAffectedBySystematic(sys)) {
2827 sysInfo.affectsWeights = true;
2828 sysInfo.affectsType = SystObjType::Tau;
2829 sysInfo.affectedWeights.insert(ST::Weights::Tau::Trigger);
2830 break;
2831 }
2832 }
2833 if (!m_metSystTool.empty()) {
2834 if ( m_metSystTool->isAffectedBySystematic(sys) ) {
2835 sysInfo.affectsKinematics = true;
2836 switch (met::getSystType(sys)) {
2837 case met::SOFTCALO:
2838 sysInfo.affectsType = SystObjType::MET_CST;
2839 break;
2840 case met::SOFTTRK:
2841 sysInfo.affectsType = SystObjType::MET_TST;
2842 break;
2843 case met::JETTRK:
2844 sysInfo.affectsType = SystObjType::MET_Track;
2845 break;
2846 default:
2847 ATH_MSG_ERROR("Unsupported systematic!");
2848 }
2849 }
2850 }
2851 if (!m_prwTool.empty()) {
2852 if ( m_prwTool->isAffectedBySystematic(sys) ) {
2853 sysInfo.affectsWeights = true;
2854 sysInfo.affectsType = SystObjType::EventWeight;
2855 }
2856 }
2857
2858 if (!m_LRTuncTool.empty()){
2859 if ( m_LRTuncTool->isAffectedBySystematic(sys) ) {
2860 sysInfo.affectsKinematics = true;
2861 sysInfo.affectsType = SystObjType::LRT_Object;
2862 }
2863 }
2864
2865 std::string affectedType;
2866 switch (sysInfo.affectsType) {
2867 case Unknown : affectedType = "UNKNOWN"; break;
2868 case Jet : affectedType = "JET"; break;
2869 case Egamma : affectedType = "EGAMMA"; break;
2870 case Electron : affectedType = "ELECTRON"; break;
2871 case Photon : affectedType = "PHOTON"; break;
2872 case Muon : affectedType = "MUON"; break;
2873 case Tau : affectedType = "TAU"; break;
2874 case BTag : affectedType = "BTAG"; break;
2875 case MET_TST : affectedType = "MET_TST"; break;
2876 case MET_CST : affectedType = "MET_CST"; break;
2877 case MET_Track : affectedType = "MET_Track"; break;
2878 case EventWeight : affectedType = "EVENT WEIGHT"; break;
2879 case LRT_Object : affectedType = "LRT_OBJECT"; break;
2880 }
2881
2882 ATH_MSG_VERBOSE("Variation " << sys.name() << " affects "
2883 << ( sysInfo.affectsWeights ? "weights " : "" )
2884 << ( sysInfo.affectsKinematics ? "kinematics " : "" )
2885 << "for " << affectedType );
2886
2887 return sysInfo;
2888
2889}
static const unsigned int Reconstruction
static const unsigned int Trigger
SystType getSystType(const CP::SystematicVariation &systematic)
@ Unknown
Track fitter not defined.
Egamma_v1 Egamma
Definition of the current "egamma version".
Definition Egamma.h:17

◆ getSystInfoList()

std::vector< ST::SystInfo > ST::SUSYObjDef_xAOD::getSystInfoList ( ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2541 of file SUSYObjDef_xAOD.cxx.

2541 {
2542 if (!m_tool_init) {
2543 ATH_MSG_ERROR("SUSYTools was not initialized!!");
2544 return vector<ST::SystInfo>();
2545 }
2546
2547 ATH_MSG_INFO("Extracting systematics info list");
2548
2549 // Now we can look at systematics:
2550 const CP::SystematicRegistry& registry = CP::SystematicRegistry::getInstance();
2551 const CP::SystematicSet& recommendedSystematics = registry.recommendedSystematics();
2552
2553 vector<SystInfo> sysInfoList;
2554 sysInfoList.reserve(recommendedSystematics.size() * 2); // allow for continuous systematics
2555
2556 // this is the nominal set
2557 SystInfo infodef;
2558 infodef.affectsKinematics = false;
2559 infodef.affectsWeights = false;
2560 infodef.affectsType = Unknown;
2561 infodef.affectedWeights.clear();
2562 sysInfoList.push_back(infodef);
2563
2564
2565 // add all recommended systematics
2566 for (const auto& systSet : CP::make_systematics_vector(recommendedSystematics)) {
2567 for (const auto& sys : systSet) {
2568 sysInfoList.push_back(getSystInfo(sys));
2569 }
2570 }
2571
2572 ATH_MSG_INFO("Returning list of " << sysInfoList.size() << " systematic variations");
2573 return sysInfoList;
2574}
const SystematicSet & recommendedSystematics() const
returns: the recommended set of systematics
static SystematicRegistry & getInstance()
Get the singleton instance of the registry for the curren thread.
ST::SystInfo getSystInfo(const CP::SystematicVariation &sys) const override final
std::vector< CP::SystematicSet > make_systematics_vector(const SystematicSet &systematics)
utility functions for working with systematics

◆ getTauConfig()

void ST::SUSYObjDef_xAOD::getTauConfig ( const std::string & tauConfigPath,
std::vector< float > & pT_window,
std::vector< float > & eta_window,
bool & eleOLR,
bool & muVeto,
bool & muOLR ) const
protected

Definition at line 1841 of file SUSYObjDef_xAOD.cxx.

1841 {
1842
1843 if(tauConfigPath.empty()) return;
1844
1845 TEnv rEnv;
1846 auto filename = PathResolverFindCalibFile(tauConfigPath);
1847 rEnv.ReadFile(filename.c_str(), kEnvAll);
1848
1849 std::vector<std::string> cuts;
1850 if (rEnv.Defined("SelectionCuts")) {
1851 cuts = split(rEnv.GetValue("SelectionCuts", " "), " ");
1852 } else {
1853 auto *l = rEnv.GetTable();
1854 for( Int_t i = 0; i < l->GetEntries(); ++i ) {
1855 cuts.push_back( l->At(i)->GetName() );
1856 }
1857 }
1858
1859 //default OR settings
1860 eleOLR=false;
1861 muOLR=false;
1862 muVeto=false;
1863
1864 static const std::string trueBool = "TRUE";
1865
1866 // Now find the pT and eta window
1867 std::vector<std::string> v_pT_window;
1868 std::vector<std::string> v_eta_window;
1869 pT_window.clear();
1870 eta_window.clear();
1871 float pT_min = -99.0;
1872 float pT_max = -99.0;
1873 float eta_min = -99.0;
1874 float eta_max = -99.0;
1875 for (const auto& cut : cuts) {
1876 if(cut == "PtRegion") {
1877 v_pT_window = split(rEnv.GetValue("PtRegion", ""), ";");
1878 std::transform(std::begin(v_pT_window),
1879 std::end(v_pT_window),
1880 std::back_inserter(pT_window),
1881 [](const std::string& s) { return std::stof(s); }
1882 );
1883 } else if (cut == "PtMin") {
1884 pT_min = rEnv.GetValue("PtMin", NAN);
1885 } else if (cut == "PtMax") {
1886 pT_max = rEnv.GetValue("PtMax", NAN);
1887 } else if (cut == "AbsEtaRegion") {
1888 v_eta_window = split(rEnv.GetValue("AbsEtaRegion", ""), ";");
1889 std::transform(std::begin(v_eta_window),
1890 std::end(v_eta_window),
1891 std::back_inserter(eta_window),
1892 [](const std::string& s) { return std::stof(s); }
1893 );
1894 } else if (cut == "AbsEtaMin") {
1895 eta_min = rEnv.GetValue("AbsEtaMin", NAN);
1896 } else if (cut == "AbsEtaMax") {
1897 eta_max = rEnv.GetValue("AbsEtaMax", NAN);
1898 }
1899
1900 //OR settings
1901 else if (cut == "EleOLR"){
1902 eleOLR = (rEnv.GetValue("EleOLR", "FALSE") == trueBool);
1903 }
1904 else if (cut == "MuonVeto"){
1905 muVeto = (rEnv.GetValue("MuonVeto", "FALSE") == trueBool);
1906 }
1907 else if (cut == "MuonOLR"){
1908 muOLR = (rEnv.GetValue("MuonOLR", "FALSE") == trueBool);
1909 }
1910 }
1911
1912 if(pT_window.empty()) {
1913 if(pT_min == pT_min) {
1914 // fails on NaN
1915 pT_window.push_back(pT_min);
1916 } else {
1917 pT_window.push_back(-std::numeric_limits<float>::infinity());
1918 }
1919
1920 if(pT_max == pT_max) {
1921 // fails on NaN
1922 pT_window.push_back(pT_max);
1923 } else {
1924 pT_window.push_back(std::numeric_limits<float>::infinity());
1925 }
1926 }
1927
1928 if(eta_window.empty()) {
1929 if(eta_min == eta_min) {
1930 // fails on NaN
1931 eta_window.push_back(eta_min);
1932 } else {
1933 eta_window.push_back(-std::numeric_limits<float>::infinity());
1934 }
1935
1936 if(eta_max == eta_max) {
1937 // fails on NaN
1938 eta_window.push_back(eta_max);
1939 } else {
1940 eta_window.push_back(std::numeric_limits<float>::infinity());
1941 }
1942 }
1943}
l
Printing final latex table to .tex output file.

◆ GetTaus()

StatusCode ST::SUSYObjDef_xAOD::GetTaus ( xAOD::TauJetContainer *& copy,
xAOD::ShallowAuxContainer *& copyaux,
const bool recordSG = true,
const std::string & taukey = "TauJets",
const xAOD::TauJetContainer * containerToBeCopied = nullptr )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 31 of file Taus.cxx.

33{
34 if (!m_tool_init) {
35 ATH_MSG_ERROR("SUSYTools was not initialized!!");
36 return StatusCode::FAILURE;
37 }
38
39 if (m_isPHYSLITE && taukey.find("AnalysisTauJets")==std::string::npos){
40 ATH_MSG_ERROR("You are running on PHYSLITE derivation. Please change the Taus container to 'AnalysisTauJets'");
41 return StatusCode::FAILURE;
42 }
43
44 const xAOD::TauJetContainer* taus = nullptr;
45 if (copy==nullptr) { // empty container provided
46 if (containerToBeCopied != nullptr) {
47 taus = containerToBeCopied;
48 }
49 else {
50 ATH_CHECK( evtStore()->retrieve(taus, taukey) );
51 }
52 std::pair<xAOD::TauJetContainer*, xAOD::ShallowAuxContainer*> shallowcopy = xAOD::shallowCopyContainer(*taus);
53 copy = shallowcopy.first;
54 copyaux = shallowcopy.second;
55 bool setLinks = xAOD::setOriginalObjectLink(*taus, *copy);
56 if (!setLinks) {
57 ATH_MSG_WARNING("Failed to set original object links on " << taukey);
58 }
59 } else { // use the user-supplied collection instead
60 ATH_MSG_DEBUG("Not retrieving tau collecton, using existing one provided by user");
61 taus=copy;
62 }
63
64 for (const auto tau : *copy) {
65 ATH_CHECK( this->FillTau(*tau) );
66 this->IsSignalTau(*tau, m_tauPt, m_tauEta);
67 }
68 if (recordSG) {
69 ATH_CHECK( evtStore()->record(copy, "STCalib" + taukey + m_currentSyst.name()) );
70 ATH_CHECK( evtStore()->record(copyaux, "STCalib" + taukey + m_currentSyst.name() + "Aux.") );
71 }
72 return StatusCode::SUCCESS;
73}
static Double_t taus
StatusCode FillTau(xAOD::TauJet &input) override final
Definition Taus.cxx:77
bool IsSignalTau(const xAOD::TauJet &input, const float ptcut, const float etacut) const override final
Definition Taus.cxx:112
TauJetContainer_v3 TauJetContainer
Definition of the current "taujet container version".

◆ GetTauTriggerEfficiencySF()

double ST::SUSYObjDef_xAOD::GetTauTriggerEfficiencySF ( const xAOD::TauJet & tau,
const std::string & trigExpr = "tau25_medium1_tracktwo" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 194 of file Taus.cxx.

194 {
195
196 double eff(1.);
197
198 auto map_it = m_tau_trig_support.find(trigExpr);
199 if (map_it == m_tau_trig_support.end()) {
200 ATH_MSG_WARNING("The trigger item requested (" << trigExpr << ") is not supported! Please check. Setting SF to 1.");
201 return eff;
202 }
203
204 // trigger matching (dR=0.2)
205 std::vector<std::string> chains;
206 for (auto part : std::views::split(map_it->second, ',')) chains.emplace_back(&*part.begin(), std::ranges::distance(part));
207 bool match = false;
208 for (const std::string& chain : chains)
209 if (m_trigMatchingTool->match({&tau}, chain, 0.2)) {
210 match = true;
211 break;
212 }
213 if (!match) {
214 ATH_MSG_VERBOSE("Tau did not match trigger " << trigExpr);
215 return eff;
216 }
217
218 int trigIdx = std::distance(std::begin(m_tau_trig_support), map_it);
219 if (m_tauTrigEffTool.at(trigIdx)->getEfficiencyScaleFactor(tau, eff) != CP::CorrectionCode::Ok) {
220 ATH_MSG_ERROR("Some problem found to retrieve SF for trigger item requested (" << trigExpr << ")");
221 eff = -99;
222 }
223
224 return eff;
225}
std::map< std::string, std::string > m_tau_trig_support
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Definition hcg.cxx:357

◆ GetTotalElectronSF()

float ST::SUSYObjDef_xAOD::GetTotalElectronSF ( const xAOD::ElectronContainer & electrons,
const bool recoSF = true,
const bool idSF = true,
const bool triggerSF = true,
const bool isoSF = true,
const std::string & trigExpr = "singleLepton",
const bool ecidsSF = false,
const bool cidSF = false )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 627 of file Electrons.cxx.

627 {
628 float sf(1.);
629
630 for (const xAOD::Electron* electron : electrons) {
631 if (!acc_passOR(*electron)) continue;
632 if (acc_signal(*electron)) { sf *= this->GetSignalElecSF(*electron, recoSF, idSF, triggerSF, isoSF, trigExpr, ecidsSF, cidSF); }
633 else { this->GetSignalElecSF(*electron, recoSF, idSF, triggerSF, isoSF, trigExpr, ecidsSF, cidSF); }
634 }
635
636 return sf;
637}
float GetSignalElecSF(const xAOD::Electron &el, const bool recoSF=true, const bool idSF=true, const bool triggerSF=true, const bool isoSF=true, const std::string &trigExpr="singleLepton", const bool ecidsSF=false, const bool cidSF=false) override final

◆ GetTotalElectronSFsys()

float ST::SUSYObjDef_xAOD::GetTotalElectronSFsys ( const xAOD::ElectronContainer & electrons,
const CP::SystematicSet & systConfig,
const bool recoSF = true,
const bool idSF = true,
const bool triggerSF = true,
const bool isoSF = true,
const std::string & trigExpr = "singleLepton",
const bool ecidsSF = false,
const bool cidSF = false )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 640 of file Electrons.cxx.

640 {
641 float sf(1.);
642
643 //Set the new systematic variation
644 StatusCode ret(StatusCode::SUCCESS);
645 if(!m_elecEfficiencySFTool_reco.empty()){
646 ret = m_elecEfficiencySFTool_reco->applySystematicVariation(systConfig);
647 if (ret != StatusCode::SUCCESS) {
648 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (reco) for systematic var. " << systConfig.name() );
649 }
650 }
651
652 if(!m_elecEfficiencySFTool_id.empty()){
653 ret = m_elecEfficiencySFTool_id->applySystematicVariation(systConfig);
654 if (ret != StatusCode::SUCCESS) {
655 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (id) for systematic var. " << systConfig.name() );
656 }
657 }
658
660 ret = m_elecEfficiencySFTool_trig_singleLep->applySystematicVariation(systConfig);
661 if (ret != StatusCode::SUCCESS) {
662 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (trigger) for systematic var. " << systConfig.name() );
663 }
664 }
665
666 if(!m_elecEfficiencySFTool_iso.empty()){
667 ret = m_elecEfficiencySFTool_iso->applySystematicVariation(systConfig);
668 if (ret != StatusCode::SUCCESS) {
669 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (iso) for systematic var. " << systConfig.name() );
670 }
671 }
672
674 ret = m_elecEfficiencySFTool_isoHighPt->applySystematicVariation(systConfig);
675 if (ret != StatusCode::SUCCESS) {
676 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (iso high-pt) for systematic var. " << systConfig.name() );
677 }
678 }
679
680 if(!m_elecChargeEffCorrTool.empty()){
681 ret = m_elecChargeEffCorrTool->applySystematicVariation(systConfig);
682 if (ret != StatusCode::SUCCESS) {
683 ATH_MSG_ERROR("Cannot configure ElectronChargeEfficiencyCorrectionTool for systematic var. " << systConfig.name() );
684 }
685 }
686
687
688 //Get the total SF for new config
689 sf = GetTotalElectronSF(electrons, recoSF, idSF, triggerSF, isoSF, trigExpr, ecidsSF, cidSF);
690
691 //Roll back to default
692 if(!m_elecEfficiencySFTool_reco.empty()){
693 ret = m_elecEfficiencySFTool_reco->applySystematicVariation(m_currentSyst);
694 if (ret != StatusCode::SUCCESS) {
695 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (reco) back to default.");
696 }
697 }
698
699 if(!m_elecEfficiencySFTool_id.empty()){
700 ret = m_elecEfficiencySFTool_id->applySystematicVariation(m_currentSyst);
701 if (ret != StatusCode::SUCCESS) {
702 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (id) back to default.");
703 }
704 }
705
707 ret = m_elecEfficiencySFTool_trig_singleLep->applySystematicVariation(m_currentSyst);
708 if (ret != StatusCode::SUCCESS) {
709 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (trigger) back to default.");
710 }
711 }
712
713 if(!m_elecEfficiencySFTool_iso.empty()){
714 ret = m_elecEfficiencySFTool_iso->applySystematicVariation(m_currentSyst);
715 if (ret != StatusCode::SUCCESS) {
716 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (iso) back to default.");
717 }
718 }
719
721 ret = m_elecEfficiencySFTool_isoHighPt->applySystematicVariation(m_currentSyst);
722 if (ret != StatusCode::SUCCESS) {
723 ATH_MSG_ERROR("Cannot configure AsgElectronEfficiencyCorrectionTool (iso high-pt) back to default.");
724 }
725 }
726
727 if(!m_elecChargeEffCorrTool.empty()){
728 ret = m_elecChargeEffCorrTool->applySystematicVariation(m_currentSyst);
729 if (ret != StatusCode::SUCCESS) {
730 ATH_MSG_ERROR("Cannot configure ElectronChargeEfficiencyCorrectionTool back to default.");
731 }
732 }
733
734 return sf;
735}
float GetTotalElectronSF(const xAOD::ElectronContainer &electrons, const bool recoSF=true, const bool idSF=true, const bool triggerSF=true, const bool isoSF=true, const std::string &trigExpr="singleLepton", const bool ecidsSF=false, const bool cidSF=false) override final

◆ GetTotalJetSF()

double ST::SUSYObjDef_xAOD::GetTotalJetSF ( const xAOD::JetContainer * jets,
const bool btagSF = true,
const bool jvtSF = true,
const bool fjvtSF = false )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 1130 of file Jets.cxx.

1130 {
1131
1132 double totalSF = 1.;
1133 if (btagSF) totalSF *= BtagSF(jets);
1134
1135 if (jvtSF && m_applyJVTCut) totalSF *= JVT_SF(jets);
1136
1137 if (fjvtSF) totalSF *= FJVT_SF(jets);
1138
1139 return totalSF;
1140 }
double JVT_SF(const xAOD::JetContainer *jets) override final
Definition Jets.cxx:988

◆ GetTotalJetSFsys()

double ST::SUSYObjDef_xAOD::GetTotalJetSFsys ( const xAOD::JetContainer * jets,
const CP::SystematicSet & systConfig,
const bool btagSF = true,
const bool jvtSF = true,
const bool fjvtSF = false )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 1143 of file Jets.cxx.

1143 {
1144
1145 double totalSF = 1.;
1146 if (btagSF) totalSF *= BtagSFsys(jets, systConfig);
1147
1148 if (jvtSF && m_applyJVTCut) totalSF *= JVT_SFsys(jets, systConfig);
1149
1150 if (fjvtSF) totalSF *= FJVT_SFsys(jets, systConfig);
1151
1152 return totalSF;
1153 }
double JVT_SFsys(const xAOD::JetContainer *jets, const CP::SystematicSet &systConfig) override final
Definition Jets.cxx:1035
double FJVT_SFsys(const xAOD::JetContainer *jets, const CP::SystematicSet &systConfig) override final
Definition Jets.cxx:1106
float BtagSFsys(const xAOD::JetContainer *jets, const CP::SystematicSet &systConfig) override final
Definition Jets.cxx:887

◆ GetTotalMuonSF()

double ST::SUSYObjDef_xAOD::GetTotalMuonSF ( const xAOD::MuonContainer & muons,
const bool recoSF = true,
const bool isoSF = true,
const std::string & trigExpr = "HLT_mu20_iloose_L1MU15_OR_HLT_mu50",
const bool bmhptSF = true )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 602 of file Muons.cxx.

602 {
603 double sf(1.);
604
605 ConstDataVector<xAOD::MuonContainer> sfmuons(SG::VIEW_ELEMENTS);
606 for (const xAOD::Muon* muon : muons) {
607 if( !acc_passOR(*muon) ) continue;
608 if (acc_signal(*muon)) {
609 sfmuons.push_back(muon);
610 if (recoSF || isoSF) { sf *= this->GetSignalMuonSF(*muon, recoSF, isoSF, bmhptSF); }
611 } else { // decorate baseline muons as well
612 if (recoSF || isoSF) { this->GetSignalMuonSF(*muon, recoSF, isoSF, bmhptSF, false); } //avoid OVR warnings in this case
613 }
614 }
615
616 sf *= GetTotalMuonTriggerSF(*sfmuons.asDataVector(), trigExpr);
617
618 return sf;
619}
double GetTotalMuonTriggerSF(const xAOD::MuonContainer &sfmuons, const std::string &trigExpr) override final
Definition Muons.cxx:547
float GetSignalMuonSF(const xAOD::Muon &mu, const bool recoSF=true, const bool isoSF=true, const bool doBadMuonHP=true, const bool warnOVR=true) override final
Definition Muons.cxx:480

◆ GetTotalMuonSFsys()

double ST::SUSYObjDef_xAOD::GetTotalMuonSFsys ( const xAOD::MuonContainer & muons,
const CP::SystematicSet & systConfig,
const bool recoSF = true,
const bool isoSF = true,
const std::string & trigExpr = "HLT_mu20_iloose_L1MU15_OR_HLT_mu50",
const bool bmhptSF = true )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 622 of file Muons.cxx.

622 {
623 double sf(1.);
624 //Set the new systematic variation
625 StatusCode ret = m_muonEfficiencySFTool->applySystematicVariation(systConfig);
626 if ( ret != StatusCode::SUCCESS) {
627 ATH_MSG_ERROR("Cannot configure MuonEfficiencyScaleFactors for systematic var. " << systConfig.name() );
628 }
629
630 ret = m_muonEfficiencyBMHighPtSFTool->applySystematicVariation(systConfig);
631 if ( ret != StatusCode::SUCCESS) {
632 ATH_MSG_ERROR("Cannot configure MuonBadMuonHighPtScaleFactors for systematic var. " << systConfig.name() );
633 }
634
635 ret = m_muonTTVAEfficiencySFTool->applySystematicVariation(systConfig);
636 if ( ret != StatusCode::SUCCESS) {
637 ATH_MSG_ERROR("Cannot configure MuonTTVAEfficiencyScaleFactors for systematic var. " << systConfig.name() );
638 }
639
640 ret = m_muonIsolationSFTool->applySystematicVariation(systConfig);
641 if ( ret != StatusCode::SUCCESS) {
642 ATH_MSG_ERROR("Cannot configure MuonIsolationScaleFactors for systematic var. " << systConfig.name() );
643 }
644
645 ret = m_muonHighPtIsolationSFTool->applySystematicVariation(systConfig);
646 if ( ret != StatusCode::SUCCESS) {
647 ATH_MSG_ERROR("Cannot configure MuonHighPtIsolationScaleFactors for systematic var. " << systConfig.name() );
648 }
649
650 ret = m_muonTriggerSFTool->applySystematicVariation(systConfig);
651 if ( ret != StatusCode::SUCCESS) {
652 ATH_MSG_ERROR("Cannot configure MuonTriggerScaleFactors for systematic var. " << systConfig.name() );
653 }
654
655 ret = m_trigGlobalEffCorrTool_diLep->applySystematicVariation(systConfig);
656 if (ret != StatusCode::SUCCESS) {
657 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (trigger) for systematic var. " << systConfig.name() );
658 }
659
660 ret = m_trigGlobalEffCorrTool_multiLep->applySystematicVariation(systConfig);
661 if (ret != StatusCode::SUCCESS) {
662 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (trigger) for systematic var. " << systConfig.name() );
663 }
664
665 sf = GetTotalMuonSF(muons, recoSF, isoSF, trigExpr, bmhptSF);
666
667 //Roll back to default
668 ret = m_muonEfficiencySFTool->applySystematicVariation(m_currentSyst);
669 if ( ret != StatusCode::SUCCESS) {
670 ATH_MSG_ERROR("Cannot configure MuonEfficiencyScaleFactors back to default.");
671 }
672
673 ret = m_muonEfficiencyBMHighPtSFTool->applySystematicVariation(m_currentSyst);
674 if ( ret != StatusCode::SUCCESS) {
675 ATH_MSG_ERROR("Cannot configure MuonBadMuonHighPtScaleFactors back to default.");
676 }
677
678 ret = m_muonTTVAEfficiencySFTool->applySystematicVariation(m_currentSyst);
679 if ( ret != StatusCode::SUCCESS) {
680 ATH_MSG_ERROR("Cannot configure MuonTTVAEfficiencyScaleFactors back to default.");
681 }
682
683 ret = m_muonIsolationSFTool->applySystematicVariation(m_currentSyst);
684 if ( ret != StatusCode::SUCCESS) {
685 ATH_MSG_ERROR("Cannot configure MuonIsolationScaleFactors back to default.");
686 }
687
688 ret = m_muonHighPtIsolationSFTool->applySystematicVariation(m_currentSyst);
689 if ( ret != StatusCode::SUCCESS) {
690 ATH_MSG_ERROR("Cannot configure MuonIsolationScaleFactors back to default.");
691 }
692
693 ret = m_muonTriggerSFTool->applySystematicVariation(m_currentSyst);
694 if ( ret != StatusCode::SUCCESS) {
695 ATH_MSG_ERROR("Cannot configure MuonTriggerScaleFactors back to default.");
696 }
697
698 ret = m_trigGlobalEffCorrTool_diLep->applySystematicVariation(m_currentSyst);
699 if (ret != StatusCode::SUCCESS) {
700 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (trigger) back to default.");
701 }
702
703 ret = m_trigGlobalEffCorrTool_multiLep->applySystematicVariation(m_currentSyst);
704 if (ret != StatusCode::SUCCESS) {
705 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (trigger) back to default.");
706 }
707
708 return sf;
709}
double GetTotalMuonSF(const xAOD::MuonContainer &muons, const bool recoSF=true, const bool isoSF=true, const std::string &trigExpr="HLT_mu20_iloose_L1MU15_OR_HLT_mu50", const bool bmhptSF=true) override final
Definition Muons.cxx:602

◆ GetTotalMuonTriggerSF()

double ST::SUSYObjDef_xAOD::GetTotalMuonTriggerSF ( const xAOD::MuonContainer & sfmuons,
const std::string & trigExpr )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 547 of file Muons.cxx.

547 {
548
549 if (trigExpr.empty() || sfmuons.empty()) return 1.;
550
551
552 double trig_sf = 1.;
553
554 int mulegs = 0;
555 const char *tmp = trigExpr.c_str();
556 while( (tmp = strstr(tmp, "mu")) ){
557 mulegs++;
558 tmp++;
559 }
560
561 bool isdimuon = (trigExpr.find("2mu") != std::string::npos);
562 bool isOR = (trigExpr.find("OR") != std::string::npos);
563
564 if((!isdimuon && mulegs<2) || (isdimuon && sfmuons.size()==2) || (mulegs>=2 && isOR)){ //Case 1: the tool takes easy care of the single, standard-dimuon and OR-of-single chains
565 if (m_muonTriggerSFTool->getTriggerScaleFactor( sfmuons, trig_sf, trigExpr ) == CP::CorrectionCode::Ok) {
566 ATH_MSG_DEBUG( "MuonTrig ScaleFactor " << trig_sf );
567 }
568 else{
569 ATH_MSG_DEBUG( "MuonTrig FAILED SOMEHOW");
570 }
571 }
572 else if(mulegs!=2 && isOR){ //Case 2: not supported. Not efficiency defined for (at least) one leg. Sorry...
573 ATH_MSG_WARNING( "SF for " << trigExpr << " are only supported for two muon events!");
574 }
575 else{ //Case 3: let's go the hard way...
576 //Following https://twiki.cern.ch/twiki/bin/view/Atlas/TrigMuonEfficiency
577 std::string newtrigExpr = TString(trigExpr).Copy().ReplaceAll("HLT_2","").Data();
578
579 //redefine dimuon triggers here (2mu14 --> mu14_mu14)
580 if (isdimuon) { newtrigExpr += "_"+newtrigExpr; }
581 newtrigExpr = std::regex_replace(newtrigExpr, std::regex("HLT_"), "");
582
583 for (auto part : std::views::split(newtrigExpr, '_')) {
584 std::string mutrig(&*part.begin(), std::ranges::distance(part));
585 double dataFactor = 1.;
586 double mcFactor = 1.;
587
588 for (const xAOD::Muon* mu : sfmuons) {
589 // No need for additional trigger matching
590 dataFactor *= (1 - GetMuonTriggerEfficiency(*mu, "HLT_"+mutrig, true));
591 mcFactor *= (1 - GetMuonTriggerEfficiency(*mu, "HLT_"+mutrig, false));
592 }
593 if( (1-mcFactor) > 0. )
594 trig_sf *= (1-dataFactor)/(1-mcFactor);
595 }
596 }
597
598 return trig_sf;
599}
double GetMuonTriggerEfficiency(const xAOD::Muon &mu, const std::string &trigExpr, const bool isdata=false) override final
Definition Muons.cxx:533

◆ GetTotalPhotonSF()

double ST::SUSYObjDef_xAOD::GetTotalPhotonSF ( const xAOD::PhotonContainer & photons,
const bool effSF = true,
const bool isoSF = true,
const bool triggerSF = false ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 320 of file Photons.cxx.

321{
322 double sf(1.);
323
324 for (const xAOD::Photon* photon : photons) {
325 if (acc_signal(*photon) && acc_passOR(*photon)) { sf *= this->GetSignalPhotonSF(*photon, effSF, isoSF, triggerSF); }
326 }
327
328 return sf;
329}
double GetSignalPhotonSF(const xAOD::Photon &ph, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) const override final
Definition Photons.cxx:206

◆ GetTotalPhotonSFsys()

double ST::SUSYObjDef_xAOD::GetTotalPhotonSFsys ( const xAOD::PhotonContainer & photons,
const CP::SystematicSet & systConfig,
const bool effSF = true,
const bool isoSF = true,
const bool triggerSF = false )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 332 of file Photons.cxx.

333{
334 double sf(1.);
335
336 for (const xAOD::Photon* photon : photons) {
337 if (acc_signal(*photon) && acc_passOR(*photon)) { sf *= this->GetSignalPhotonSFsys(*photon, systConfig, effSF, isoSF, triggerSF); }
338 }
339
340 return sf;
341}
double GetSignalPhotonSFsys(const xAOD::Photon &ph, const CP::SystematicSet &systConfig, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) override final
Definition Photons.cxx:247

◆ GetTotalTauSF()

double ST::SUSYObjDef_xAOD::GetTotalTauSF ( const xAOD::TauJetContainer & taus,
const bool idSF = true,
const bool triggerSF = true,
const std::string & trigExpr = "tau25_medium1_tracktwo" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 228 of file Taus.cxx.

228 {
229
230 double sf(1.);
231
232 for (const xAOD::TauJet* tau : taus) {
233 // check existence of OR information
234 if (!acc_passOR.isAvailable(*tau)) {
235 ATH_MSG_WARNING("Tau does not have Overlap Removal decision set. You should only call GetTotalTauSF with taus that have been passed through OR. SF will NOT be applied!");
236 break;
237 }
238
239 // Call this for all taus, which will add the decoration
240 double tmpSF = GetSignalTauSF(*tau, idSF, triggerSF, trigExpr);
241 if (acc_signal(*tau) && acc_passOR(*tau)) {
242 sf *= tmpSF;
243 }
244 }
245
246 return sf;
247}

◆ GetTotalTauSFsys()

double ST::SUSYObjDef_xAOD::GetTotalTauSFsys ( const xAOD::TauJetContainer & taus,
const CP::SystematicSet & systConfig,
const bool idSF = true,
const bool triggerSF = true,
const std::string & trigExpr = "tau25_medium1_tracktwo" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 250 of file Taus.cxx.

250 {
251 double sf(1.);
252
253 //Set the new systematic variation
254 StatusCode ret = m_tauEffTool->applySystematicVariation(systConfig);
255 if (ret != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure TauEfficiencyCorrectionsTool for systematic var. " << systConfig.name() ); }
256
257 for (auto& tool : m_tauTrigEffTool) {
258 ret = tool->applySystematicVariation(systConfig);
259 if (ret != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure " << tool->name() << " for systematic var. " << systConfig.name()); }
260 }
261
262 sf = GetTotalTauSF(taus, idSF, triggerSF, trigExpr);
263
264 //Roll back to default
265 ret = m_tauEffTool->applySystematicVariation(m_currentSyst);
266 if (ret != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure TauEfficiencyCorrectionsTool back to default"); }
267
268 for (auto& tool : m_tauTrigEffTool) {
269 ret = tool->applySystematicVariation(m_currentSyst);
270 if (ret != StatusCode::SUCCESS) { ATH_MSG_ERROR("Cannot configure " << tool->name() << " back to default"); }
271 }
272
273 return sf;
274}
double GetTotalTauSF(const xAOD::TauJetContainer &taus, const bool idSF=true, const bool triggerSF=true, const std::string &trigExpr="tau25_medium1_tracktwo") override final
Definition Taus.cxx:228

◆ GetTrackJets()

StatusCode ST::SUSYObjDef_xAOD::GetTrackJets ( xAOD::JetContainer *& copy,
xAOD::ShallowAuxContainer *& copyaux,
const bool recordSG = true,
const std::string & jetkey = "",
const xAOD::JetContainer * containerToBeCopied = nullptr )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 169 of file Jets.cxx.

170 {
171 if (!m_tool_init) {
172 ATH_MSG_ERROR("SUSYTools was not initialized!!");
173 return StatusCode::FAILURE;
174 }
175
176 ATH_MSG_DEBUG("Default jetkey (trkjet): " << m_defaultTrackJets);
177 ATH_MSG_DEBUG("Function argument jetkey (trkjet): " << jetkey);
178
179 // load default regular & btag jet keys
180 std::string jetkey_tmp = m_defaultTrackJets;
181
182 // override default if user is passing a jetkey
183 if (!jetkey.empty()) {
184 jetkey_tmp = jetkey;
185 }
186
187 // final settings
188 ATH_MSG_DEBUG("Key for retrieving trkjet collection (as well as bjet info): jetkey = " << jetkey_tmp);
189
190 const xAOD::JetContainer* jets = nullptr;
191 if (copy==nullptr) { // empty container provided
192 if (containerToBeCopied != nullptr) {
193 jets = containerToBeCopied;
194 }
195 else {
196 ATH_MSG_DEBUG("Retrieve jet collection: " << jetkey_tmp);
197 ATH_CHECK( evtStore()->retrieve(jets, jetkey_tmp) );
198 }
199 std::pair<xAOD::JetContainer*, xAOD::ShallowAuxContainer*> shallowcopy = xAOD::shallowCopyContainer(*jets);
200 copy = shallowcopy.first;
201 copyaux = shallowcopy.second;
202 bool setLinks = xAOD::setOriginalObjectLink(*jets, *copy);
203 if (!setLinks) {
204 ATH_MSG_WARNING("Failed to set original object links on " << jetkey_tmp);
205 }
206 } else { // use the user-supplied collection instead
207 ATH_MSG_DEBUG("Not retrieving jet collection, using existing one provided by user");
208 jets = copy;
209 }
210
211 //disable - notfortrackjets? // Calibrate the jets
212 //disable - notfortrackjets? ATH_CHECK(m_jetCalibTool->applyCalibration(*copy));
213
214 // Update the jets
215 for (const auto jet : *copy) {
216 ATH_CHECK( this->FillTrackJet(*jet) );
217 }
218
219 if (copy->size() > 1 && m_defaultTrackJets == "AntiKtVR30Rmax4Rmin02TrackJets") {
220 // Use iterators to avoid pairing the jets twice
221 for (xAOD::JetContainer::const_iterator j1 = copy->begin()+1; j1!= copy->end();++j1) {
222 const xAOD::Jet* jet1 = (*j1);
223 if (!acc_signal(*jet1)) continue;
224 for (xAOD::JetContainer::const_iterator j2 = copy->begin(); j2 != j1; ++j2) {
225 const xAOD::Jet* jet2 = (*j2);
226 if (!acc_baseline(*jet2)) continue;
227 //Reference to the use method in P4Helper: deltaR2( const xAOD::IParticle& p4, const xAOD::IParticle& , bool useRapidity=true )
228 float dr_jets = xAOD::P4Helpers::deltaR(jet1,jet2, false);
229 const xAOD::Jet* to_check = acc_VRradius(*jet1) < acc_VRradius(*jet2) ? jet1 : jet2;
230 if( dr_jets < acc_VRradius(*to_check)) dec_passDRcut(*to_check) = false;
231 //break the loop at this point???
232 }
233 }
234 }
235 if (recordSG) {
236 ATH_CHECK( evtStore()->record(copy, "STCalib" + jetkey_tmp + m_currentSyst.name()) );
237 ATH_CHECK( evtStore()->record(copyaux, "STCalib" + jetkey_tmp + m_currentSyst.name() + "Aux.") );
238 }
239 return StatusCode::SUCCESS;
240 }
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
StatusCode FillTrackJet(xAOD::Jet &input) override final
Definition Jets.cxx:643
static const SG::ConstAccessor< float > acc_VRradius("VRradius")
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi

◆ GetTrackMET()

StatusCode ST::SUSYObjDef_xAOD::GetTrackMET ( xAOD::MissingETContainer & met,
const xAOD::JetContainer * jet,
const xAOD::ElectronContainer * elec = nullptr,
const xAOD::MuonContainer * muon = nullptr )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 161 of file MET.cxx.

164 {
165 if (!m_tool_init) {
166 ATH_MSG_ERROR("SUSYTools was not initialized!!");
167 return StatusCode::FAILURE;
168 }
169
170 const xAOD::MissingETContainer* metcore(nullptr);
171 if ( evtStore()->retrieve( metcore, m_inputMETCore ).isFailure() ) {
172 ATH_MSG_WARNING( "Unable to retrieve MET core container: " << m_inputMETCore );
173 return StatusCode::FAILURE;
174 }
175 const xAOD::MissingETAssociationMap* metMap(nullptr);
176 if ( evtStore()->retrieve(metMap, m_inputMETMap).isFailure() ) {
177 ATH_MSG_WARNING("Unable to retrieve MissingETAssociationMap: " << m_inputMETMap);
178 return StatusCode::FAILURE;
179 }
180 // Helper keeps track of object selection flags for this map
181 xAOD::MissingETAssociationHelper metHelper(&(*metMap));
182
183 metHelper.resetObjSelectionFlags();
184
185 if (elec) {
186 ATH_MSG_VERBOSE("Build electron MET");
187 ConstDataVector<xAOD::ElectronContainer> metelectron(SG::VIEW_ELEMENTS);
188 for (const xAOD::Electron* el : *elec) {
189 // pass baseline selection
190 if (acc_baseline(*el)) metelectron.push_back(el);
191 }
192 ATH_CHECK( m_metMaker->rebuildMET(m_eleTerm, xAOD::Type::Electron, &met, metelectron.asDataVector(), metHelper) );
193 }
194
195 if (muon) {
196 ATH_MSG_VERBOSE("Build muon MET");
197 ConstDataVector<xAOD::MuonContainer> metmuon(SG::VIEW_ELEMENTS);
198 for (const xAOD::Muon* mu : *muon) {
199 // pass baseline selection
200 if (acc_baseline(*mu)) metmuon.push_back(mu);
201 }
202 ATH_CHECK( m_metMaker->rebuildMET(m_muonTerm, xAOD::Type::Muon, &met, metmuon.asDataVector(), metHelper) );
203 }
204
205 if (!jet) {
206 ATH_MSG_WARNING("Invalid jet container specified for MET rebuilding!");
207 return StatusCode::SUCCESS;
208 }
209 ATH_MSG_VERBOSE("Build jet/soft MET_Track");
210
211 std::string softTerm = "PVSoftTrk";
212 ATH_CHECK( m_metMaker->rebuildTrackMET(m_jetTerm, softTerm, &met, jet, metcore, metHelper, true) );
213
214 if (!isData()) {
215 m_metSystTool->setRandomSeed(static_cast<int>(1e6*met[softTerm]->phi()));
216
217 if (m_trkMETsyst) {
218 ATH_MSG_VERBOSE("Apply trkMET systematics");
219 if ( m_metSystTool->applyCorrection(*met[softTerm],metHelper) != CP::CorrectionCode::Ok )
220 ATH_MSG_WARNING("GetMET: Failed to apply MET track (PVSoftTrk) systematics.");
221 }
222
223 if (m_trkJetsyst) {
224 ATH_MSG_VERBOSE("Apply Ref Jet trkMET systematics");
225 if ( m_metSystTool->applyCorrection(*met[m_jetTerm],metHelper) != CP::CorrectionCode::Ok )
226 ATH_MSG_WARNING("GetMET: Failed to apply MET track (RefJet) systematics.");
227 }
228
229 }
230
231 ATH_MSG_VERBOSE("Build MET sum");
232 ATH_CHECK( met::buildMETSum("Track", &met, met[softTerm]->source()) );
233 ATH_MSG_VERBOSE( "Done rebuilding MET." );
234
235 ATH_MSG_VERBOSE( "Track MET: Missing Et (x,y): (" << met["Track"]->mpx() << "," << met["Track"]->mpy() << ")");
236
237 return StatusCode::SUCCESS;
238}

◆ GetTrigChainGroup()

const Trig::ChainGroup * ST::SUSYObjDef_xAOD::GetTrigChainGroup ( const std::string & tr_item) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 315 of file Trigger.cxx.

315 {
316 return m_trigDecTool->getChainGroup(tr_item);
317}

◆ GetTriggerFeatures()

Trig::FeatureContainer ST::SUSYObjDef_xAOD::GetTriggerFeatures ( const std::string & chainName = "EF_.*",
unsigned int condition = TrigDefs::Physics ) const

Definition at line 426 of file Trigger.cxx.

427 {
428 return m_trigDecTool->features(chainName,condition);
429 }

◆ GetTriggerGlobalEfficiency() [1/2]

double ST::SUSYObjDef_xAOD::GetTriggerGlobalEfficiency ( const xAOD::ElectronContainer & electrons,
const xAOD::MuonContainer & muons,
const std::string & trigExpr = "diLepton" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 586 of file Trigger.cxx.

586 {
587
588 double trig_eff(1.);
589 double trig_eff_data(1.);
590
591 if (trigExpr!="multiLepton" && trigExpr!="diLepton") {
592 ATH_MSG_ERROR( "Failed to retrieve multi-lepton trigger efficiency");
593 return trig_eff;
594 }
595
596 std::vector<const xAOD::Electron*> elec_trig;
597 for (const xAOD::Electron* electron : electrons) {
598 if (!acc_passOR(*electron)) continue;
599 if (!acc_signal(*electron)) continue;
600 elec_trig.push_back(electron);
601 }
602
603 std::vector<const xAOD::Muon*> muon_trig;
604 for (const xAOD::Muon* muon : muons) {
605 if (!acc_passOR(*muon)) continue;
606 if (!acc_signal(*muon)) continue;
607 muon_trig.push_back(muon);
608 }
609
610 bool matched = false;
611 if ((elec_trig.size()+muon_trig.size())>1 && trigExpr=="diLepton") {
612 if ( m_trigGlobalEffCorrTool_diLep->checkTriggerMatching( matched, elec_trig, muon_trig) != CP::CorrectionCode::Ok ) {
613 ATH_MSG_ERROR ("trigGlobEffCorrTool::Trigger matching could not be checked, interrupting execution.");
614 }
615 } else if ((elec_trig.size()+muon_trig.size())>2 && trigExpr=="multiLepton") {
616 if ( m_trigGlobalEffCorrTool_multiLep->checkTriggerMatching( matched, elec_trig, muon_trig) != CP::CorrectionCode::Ok ) {
617 ATH_MSG_ERROR ("trigGlobEffCorrTool::Trigger matching could not be checked, interrupting execution.");
618 }
619 }
620
621 CP::CorrectionCode result;
622 if ((elec_trig.size()+muon_trig.size())>1 && trigExpr=="diLepton" && matched) {
623 result = m_trigGlobalEffCorrTool_diLep->getEfficiency( elec_trig, muon_trig, trig_eff_data, trig_eff);
624 }
625 else if ((elec_trig.size()+muon_trig.size())>2 && trigExpr=="multiLepton" && matched) {
626 result = m_trigGlobalEffCorrTool_multiLep->getEfficiency( elec_trig, muon_trig, trig_eff_data, trig_eff);
627 }
628
629 switch (result) {
631 ATH_MSG_ERROR( "Failed to retrieve multi-lepton trigger efficiency");
632 return 1.;
634 ATH_MSG_VERBOSE( "OutOfValidityRange found for multi-lepton trigger efficiency");
635 return 1.;
636 default:
637 break;
638 }
639
640 if (isData()) return trig_eff_data;
641 else return trig_eff;
642}

◆ GetTriggerGlobalEfficiency() [2/2]

double ST::SUSYObjDef_xAOD::GetTriggerGlobalEfficiency ( const xAOD::PhotonContainer & photons,
const std::string & trigExpr = "diPhoton" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 647 of file Trigger.cxx.

647 {
648
649 double trig_eff(1.);
650 double trig_eff_data(1.);
651
652 if (trigExpr!="diPhoton") {
653 ATH_MSG_ERROR( "Failed to retrieve diphoton trigger efficiency");
654 return trig_eff;
655 }
656
657 std::vector<const xAOD::Photon*> ph_trig;
658 for (const xAOD::Photon* photon : photons) {
659 if (!acc_passOR(*photon)) continue;
660 if (!acc_signal(*photon)) continue;
661 ph_trig.push_back(photon);
662 }
663
664 CP::CorrectionCode result;
665 if (ph_trig.size()>1) {
666 result = m_trigGlobalEffCorrTool_diPhoton->getEfficiency(ph_trig, trig_eff_data, trig_eff);
667 }
668
669 switch (result) {
671 ATH_MSG_ERROR( "Failed to retrieve diphoton trigger efficiency");
672 return 1.;
674 ATH_MSG_VERBOSE( "OutOfValidityRange found for diphoton trigger efficiency");
675 return 1.;
676 default:
677 break;
678 }
679
680 if (isData()) return trig_eff_data;
681 else return trig_eff;
682}

◆ GetTriggerGlobalEfficiencySF() [1/2]

double ST::SUSYObjDef_xAOD::GetTriggerGlobalEfficiencySF ( const xAOD::ElectronContainer & electrons,
const xAOD::MuonContainer & muons,
const std::string & trigExpr = "diLepton" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 431 of file Trigger.cxx.

431 {
432
433 double trig_sf(1.);
434
435 if (trigExpr!="multiLepton" && trigExpr!="diLepton") {
436 ATH_MSG_ERROR( "Failed to retrieve multi-lepton trigger SF");
437 return trig_sf;
438 }
439
440 std::vector<const xAOD::Electron*> elec_trig;
441 for (const xAOD::Electron* electron : electrons) {
442 if (!acc_passOR(*electron)) continue;
443 if (!acc_signal(*electron)) continue;
444 elec_trig.push_back(electron);
445 }
446
447 std::vector<const xAOD::Muon*> muon_trig;
448 for (const xAOD::Muon* muon : muons) {
449 if (!acc_passOR(*muon)) continue;
450 if (!acc_signal(*muon)) continue;
451 muon_trig.push_back(muon);
452 }
453
454 bool matched = false;
455 if ((elec_trig.size()+muon_trig.size())>1 && trigExpr=="diLepton") {
456 if ( m_trigGlobalEffCorrTool_diLep->checkTriggerMatching( matched, elec_trig, muon_trig) != CP::CorrectionCode::Ok ) {
457 ATH_MSG_ERROR ("trigGlobEffCorrTool::Trigger matching could not be checked, interrupting execution.");
458 }
459 } else if ((elec_trig.size()+muon_trig.size())>2 && trigExpr=="multiLepton") {
460 if ( m_trigGlobalEffCorrTool_multiLep->checkTriggerMatching( matched, elec_trig, muon_trig) != CP::CorrectionCode::Ok ) {
461 ATH_MSG_ERROR ("trigGlobEffCorrTool::Trigger matching could not be checked, interrupting execution.");
462 }
463 }
464
465 CP::CorrectionCode result;
466 if ((elec_trig.size()+muon_trig.size())>1 && trigExpr=="diLepton" && matched) {
467 result = m_trigGlobalEffCorrTool_diLep->getEfficiencyScaleFactor( elec_trig, muon_trig, trig_sf);
468 }
469 else if ((elec_trig.size()+muon_trig.size())>2 && trigExpr=="multiLepton" && matched) {
470 result = m_trigGlobalEffCorrTool_multiLep->getEfficiencyScaleFactor( elec_trig, muon_trig, trig_sf);
471 }
472
473 switch (result) {
475 ATH_MSG_ERROR( "Failed to retrieve multi-lepton trigger SF");
476 return 1.;
478 ATH_MSG_VERBOSE( "OutOfValidityRange found for multi-lepton trigger SF");
479 return 1.;
480 default:
481 break;
482 }
483
484 return trig_sf;
485}

◆ GetTriggerGlobalEfficiencySF() [2/2]

double ST::SUSYObjDef_xAOD::GetTriggerGlobalEfficiencySF ( const xAOD::PhotonContainer & photons,
const std::string & trigExpr = "diPhoton" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 529 of file Trigger.cxx.

529 {
530
531 double trig_sf(1.);
532
533 if (trigExpr!="diPhoton") {
534 ATH_MSG_ERROR( "Failed to retrieve diphoton trigger SF");
535 return trig_sf;
536 }
537
538 std::vector<const xAOD::Photon*> ph_trig;
539 for (const xAOD::Photon* photon : photons) {
540 if (!acc_passOR(*photon)) continue;
541 if (!acc_signal(*photon)) continue;
542 ph_trig.push_back(photon);
543 }
544
545 CP::CorrectionCode result;
546 if (ph_trig.size()>1) {
547 result = m_trigGlobalEffCorrTool_diPhoton->getEfficiencyScaleFactor(ph_trig, trig_sf);
548 }
549
550 switch (result) {
552 ATH_MSG_ERROR( "Failed to retrieve diphoton trigger SF");
553 return 1.;
555 ATH_MSG_VERBOSE( "OutOfValidityRange found for diphoton trigger SF");
556 return 1.;
557 default:
558 break;
559 }
560
561 return trig_sf;
562}

◆ GetTriggerGlobalEfficiencySFsys() [1/2]

double ST::SUSYObjDef_xAOD::GetTriggerGlobalEfficiencySFsys ( const xAOD::ElectronContainer & electrons,
const xAOD::MuonContainer & muons,
const CP::SystematicSet & systConfig,
const std::string & trigExpr = "diLepton" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 487 of file Trigger.cxx.

487 {
488
489 double sf(1.);
490
491 //Set the new systematic variation
492 if (trigExpr == "diLepton") {
493 StatusCode ret = m_trigGlobalEffCorrTool_diLep->applySystematicVariation(systConfig);
494 if (ret != StatusCode::SUCCESS) {
495 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (dilepton trigger) for systematic var. " << systConfig.name() );
496 }
497 }
498
499 if (trigExpr == "multiLepton") {
500 StatusCode ret = m_trigGlobalEffCorrTool_multiLep->applySystematicVariation(systConfig);
501 if (ret != StatusCode::SUCCESS) {
502 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (multi-lepton trigger) for systematic var. " << systConfig.name() );
503 }
504 }
505
506 //Get the SF for new config
507 sf = GetTriggerGlobalEfficiencySF (electrons, muons, trigExpr);
508
509 //Roll back to default
510 if (trigExpr == "diLepton") {
511 StatusCode ret = m_trigGlobalEffCorrTool_diLep->applySystematicVariation(m_currentSyst);
512 if (ret != StatusCode::SUCCESS) {
513 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (dilepton trigger) back to default.");
514 }
515 }
516 if (trigExpr == "multiLepton") {
517 StatusCode ret = m_trigGlobalEffCorrTool_multiLep->applySystematicVariation(m_currentSyst);
518 if (ret != StatusCode::SUCCESS) {
519 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (multi-lepton trigger) back to default.");
520 }
521 }
522
523 return sf;
524}
double GetTriggerGlobalEfficiencySF(const xAOD::ElectronContainer &electrons, const xAOD::MuonContainer &muons, const std::string &trigExpr="diLepton") override final
Definition Trigger.cxx:431

◆ GetTriggerGlobalEfficiencySFsys() [2/2]

double ST::SUSYObjDef_xAOD::GetTriggerGlobalEfficiencySFsys ( const xAOD::PhotonContainer & photons,
const CP::SystematicSet & systConfig,
const std::string & trigExpr = "diPhoton" )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 564 of file Trigger.cxx.

564 {
565
566 double sf(1.);
567
568 //Set the new systematic variation
569 StatusCode ret = m_trigGlobalEffCorrTool_diPhoton->applySystematicVariation(systConfig);
570 if (ret != StatusCode::SUCCESS) {
571 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (diphoton trigger) for systematic var. " << systConfig.name() );
572 }
573
574 //Get the SF for new config
575 sf = GetTriggerGlobalEfficiencySF (photons, trigExpr);
576
577 //Roll back to default
578 ret = m_trigGlobalEffCorrTool_diPhoton->applySystematicVariation(m_currentSyst);
579 if (ret != StatusCode::SUCCESS) {
580 ATH_MSG_ERROR("Cannot configure TrigGlobalEfficiencyCorrectionTool (diphoton trigger) back to default.");
581 }
582
583 return sf;
584}

◆ GetTriggerOR()

std::vector< std::string > ST::SUSYObjDef_xAOD::GetTriggerOR ( const std::string & trigExpr) const

Definition at line 320 of file Trigger.cxx.

320 {
321
322 static const std::string delOR = "_OR_";
323 std::vector<std::string> trigchains = {};
324 std::string newtrigExpr = TString(trigExpr).Copy().ReplaceAll("||",delOR).Data();
325 newtrigExpr = TString(trigExpr).Copy().ReplaceAll(" ","").Data();
326
327 size_t pos = 0;
328 while ((pos = newtrigExpr.find(delOR)) != std::string::npos) {
329 trigchains.push_back( "HLT_"+newtrigExpr.substr(0, pos) );
330 newtrigExpr.erase(0, pos + delOR.length());
331 }
332 if(pos==std::string::npos)
333 trigchains.push_back("HLT_"+newtrigExpr);
334
335 return trigchains;
336 }

◆ GetTriggerTokens()

void ST::SUSYObjDef_xAOD::GetTriggerTokens ( std::string trigExpr,
std::vector< std::string > & v_trigs15_cache,
std::vector< std::string > & v_trigs16_cache,
std::vector< std::string > & v_trigs17_cache,
std::vector< std::string > & v_trigs18_cache,
std::vector< std::string > & v_trigs22_cache,
std::vector< std::string > & v_trigs23_cache,
std::vector< std::string > & v_trigs24_cache ) const

Definition at line 338 of file Trigger.cxx.

338 {
339
340 // e.g. SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0
341
342 static const std::string del15 = "_2015_";
343 static const std::string del16 = "_2016_";
344 static const std::string del17 = "_2017_";
345
346 size_t pos = 0;
347 std::string token15, token16, token17, token18, token22, token23, token24;
348
349 //get trigger tokens for 2015, 2016, 2017, 2018 and 2022, 2023, 2024
350 if ( (pos = trigExpr.find(del15)) != std::string::npos) {
351 trigExpr.erase(0, pos + del15.length());
352
353 pos = 0;
354 while ((pos = trigExpr.find(del16)) != std::string::npos) {
355 token15 = trigExpr.substr(0, pos);
356 token16 = trigExpr.erase(0, pos + del16.length() + del17.length() - 1);
357 // 2016-2018 use exact the same trigger string
358 token17 = token16;
359 token18 = token16;
360 }
361 }
362
363 // Find year positions (or npos if not present)
364 size_t p22 = trigExpr.find("2022");
365 size_t p23 = trigExpr.find("2023");
366 size_t p24 = trigExpr.find("2024");
367
368 auto next_pos = [&](size_t self) {
369 size_t next = std::string::npos;
370
371 if (self == p22) {
372 if (p23 > self && p23 < next) next = p23;
373 if (p24 > self && p24 < next) next = p24;
374 }
375 else if (self == p23) {
376 if (p22 > self && p22 < next) next = p22;
377 if (p24 > self && p24 < next) next = p24;
378 }
379 else if (self == p24) {
380 if (p22 > self && p22 < next) next = p22;
381 if (p23 > self && p23 < next) next = p23;
382 }
383
384 return next;
385 };
386
387 // Extract 2022,2023,2024 block
388 if (p22 != std::string::npos) {size_t end = next_pos(p22); token22 = trigExpr.substr(p22, end - p22);}
389 if (p23 != std::string::npos) {size_t end = next_pos(p23); token23 = trigExpr.substr(p23, end - p23);}
390 if (p24 != std::string::npos) {size_t end = next_pos(p24); token24 = trigExpr.substr(p24, end - p24);}
391
392 // Remove trailing underscores from tokens if present
393 std::string* toks[] = { &token22, &token23, &token24 };
394 for (auto t : toks) {
395 while (!t->empty() && t->back() == '_') t->pop_back();
396 }
397
398 //Redefine in case of custom user input
399 if(!m_isRun3){
400 if(token15.empty()) token15 = trigExpr;
401 if(token16.empty()) token16 = trigExpr;
402 if(token17.empty()) token17 = trigExpr;
403 if(token18.empty()) token18 = trigExpr;
404 }
405 else{
406 if(token22.empty()) token22 = trigExpr;
407 if(token23.empty()) token23 = trigExpr;
408 if(token24.empty()) token24 = trigExpr;
409 }
410
411 //get trigger chains for matching in 2015 and 2018
412 if(!m_isRun3){
413 v_trigs15_cache = GetTriggerOR(token15);
414 v_trigs16_cache = GetTriggerOR(token16);
415 v_trigs17_cache = GetTriggerOR(token17);
416 v_trigs18_cache = GetTriggerOR(token18);
417 }
418 //get trigger chains for matching in 2022
419 else{
420 v_trigs22_cache = GetTriggerOR(token22);
421 v_trigs23_cache = GetTriggerOR(token23);
422 v_trigs24_cache = GetTriggerOR(token24);
423 }
424 }
std::vector< std::string > GetTriggerOR(const std::string &trigExpr) const
Definition Trigger.cxx:320

◆ GetTrigPrescale()

float ST::SUSYObjDef_xAOD::GetTrigPrescale ( const std::string & tr_item) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 310 of file Trigger.cxx.

310 {
311 return m_trigDecTool->getPrescale(tr_item);
312}

◆ handle()

void asg::AsgMetadataTool::handle ( const Incident & inc)
protectedvirtualinherited

Function receiving incidents from IncidentSvc/TEvent.

Reimplemented in Trig::TrigDecisionTool.

Definition at line 135 of file AsgMetadataTool.cxx.

135 {
136
137 // Tell the user what's happening:
138 ATH_MSG_VERBOSE( "Callback received with incident: " << inc.type() );
139
140 // Call the appropriate member function:
141 if( inc.type() == IncidentType::BeginInputFile ) {
143 if( beginInputFile().isFailure() ) {
144 ATH_MSG_FATAL( "Failed to call beginInputFile()" );
145 throw std::runtime_error( "Couldn't call beginInputFile()" );
146 }
147 } else if( inc.type() == IncidentType::EndInputFile ) {
148 if( endInputFile().isFailure() ) {
149 ATH_MSG_FATAL( "Failed to call endInputFile()" );
150 throw std::runtime_error( "Couldn't call endInputFile()" );
151 }
152 } else if( inc.type() == IncidentType::BeginEvent ) {
153 // If the tool didn't catch the begin input file incident for the
154 // first input file of the job, then call the appropriate function
155 // now.
156 if( ! m_beginInputFileCalled ) {
158 if( beginInputFile().isFailure() ) {
159 ATH_MSG_FATAL( "Failed to call beginInputFile()" );
160 throw std::runtime_error( "Couldn't call beginInputFile()" );
161 }
162 }
163 if( beginEvent().isFailure() ) {
164 ATH_MSG_FATAL( "Failed to call beginEvent()" );
165 throw std::runtime_error( "Couldn't call beginEvent()" );
166 }
167
168 #ifdef XAOD_STANDALONE
169 } else if( inc.type() == IncidentType::MetaDataStop ) {
170 if( metaDataStop().isFailure() ) {
171 ATH_MSG_FATAL( "Failed to call metaDataStop()" );
172 throw std::runtime_error( "Couldn't call metaDataStop()" );
173 }
174
175 #endif // XAOD_STANDALONE
176 } else {
177 ATH_MSG_WARNING( "Unknown incident type received in AsgMetaDataTool: " << inc.type() );
178 }
179
180 return;
181 }
virtual StatusCode beginInputFile()
Function called when a new input file is opened.
virtual StatusCode beginEvent()
Function called when a new events is loaded.
bool m_beginInputFileCalled
Flag helping to discover when the tool misses the opening of the first input file.
virtual StatusCode endInputFile()
Function called when the currently open input file got completely processed.
virtual StatusCode metaDataStop()
Function called when the tool should write out its metadata.

◆ initialize()

StatusCode ST::SUSYObjDef_xAOD::initialize ( void )
finaloverridevirtual

Dummy implementation of the initialisation function.

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

Reimplemented from asg::AsgTool.

Definition at line 884 of file SUSYObjDef_xAOD.cxx.

884 {
885
886 if (m_tool_init) {
887 ATH_MSG_ERROR("Initialising for a second time -- something is wrong!");
888 return StatusCode::FAILURE;
889 }
890
891 // Greet the user:
892 ATH_MSG_INFO( "Initialising... " );
893
894 bool autoconf(false);
895#ifndef XAOD_STANDALONE // For now metadata is Athena-only
896 if ( m_dataSource < 0 ) {
897 autoconf = true;
898 ATH_MSG_INFO("Autoconfiguring: dataSource, mcCampaign, isPHYSLITE");
899 std::string projectName = "";
900 ATH_CHECK( AthAnalysisHelper::retrieveMetadata("/TagInfo", "project_name", projectName, inputMetaStore() ) );
901 if ( projectName == "IS_SIMULATION" ) {
902 std::string simFlavour = "";
903 ATH_CHECK( AthAnalysisHelper::retrieveMetadata("/Simulation/Parameters", "SimulationFlavour", simFlavour, inputMetaStore() ) );
904 TString s(simFlavour); s.ToUpper();
905 m_dataSource = s.Contains("ATLFAST") ? AtlfastII : FullSim;
906 } else if (projectName.compare(0, 4, "data") == 0 ) {
908 } else {
909 ATH_MSG_ERROR("Failed to autoconfigure -- project_name matches neither IS_SIMULATION nor data!");
910 return StatusCode::FAILURE;
911 }
912
913 }
914#endif
915
917
918 //Read configuration from file (stored as Property)
920
921 if (m_dataSource < 0) {
922 ATH_MSG_FATAL( "Data source incorrectly configured!!" );
923 ATH_MSG_FATAL("You must set the DataSource property to Data, FullSim or AtlfastII !!");
924 if (autoconf) ATH_MSG_FATAL("Autoconfiguration seems to have failed!");
925 // if(m_useLeptonTrigger<0) ATH_MSG_ERROR( "UseLeptonTrigger not set");
926 ATH_MSG_FATAL( "Exiting... " );
927 return StatusCode::FAILURE;
928 }
929 ATH_MSG_DEBUG( "Configured: IsData: " << isData() );
930 ATH_MSG_DEBUG( "Configured: IsAtlfast: " << isAtlfast() );
931
932 switch (m_jetInputType) {
936 break;
937 default:
939 return StatusCode::FAILURE;
940 }
941
942 if (m_inputMETSuffix.empty()){
944 }
946 ATH_MSG_INFO( "Configured for jet collection: " << m_defaultJets );
947
948 m_defaultTruthJets = "AntiKt4TruthJets";
949 const xAOD::FileMetaData* fmd = nullptr;
950 std::string dataType;
951 if ( inputMetaStore()->contains<xAOD::FileMetaData>("FileMetaData") && inputMetaStore()->retrieve(fmd,"FileMetaData").isSuccess() )
952 fmd->value(xAOD::FileMetaData::dataType, dataType);
953 if ( dataType.compare("StreamDAOD_PHYS")==0 || dataType.compare("StreamDAOD_PHYSLITE")==0 ) m_defaultTruthJets = "AntiKt4TruthDressedWZJets";
954 if ( dataType.compare("StreamDAOD_PHYSLITE")==0) m_isPHYSLITE = true;
955
956 ATH_MSG_INFO( "Configured for truth jet collection: " << m_defaultTruthJets );
957
958 m_inputMETCore = m_isPHYSLITE? "MET_Core_AnalysisMET":"MET_Core_" + m_inputMETSuffix;
959 m_inputMETMap = m_isPHYSLITE? "METAssoc_AnalysisMET":"METAssoc_" + m_inputMETSuffix;
960
961 ATH_MSG_DEBUG ( "Build MET Core: " << m_inputMETCore);
962 ATH_MSG_DEBUG ( "Build MET with map: " << m_inputMETMap);
963
964 m_jetCleanDFName = TString::Format("DFCommonJets_jetClean_%s", m_badJetCut.c_str());
966
967 // the decorations are named like DFCommonElectronsLHTight, DFCommonElectronsDNNTight or DFCommonElectronsDNNTightNoCF
968 m_eleIdBaselineDFName = m_eleIdBaseline.find("DNN") == std::string::npos ? "DFCommonElectronsLH" : "DFCommonElectronsDNN";
969 m_eleIdBaselineDFName += TString(m_eleIdBaseline).ReplaceAll("LooseAndBLayer","LooseBL").ReplaceAll("LLH","").ReplaceAll("DNNnoCF","").ReplaceAll("DNN","").Data();
970 if (m_eleIdBaseline.find("noCF") != std::string::npos)
971 m_eleIdBaselineDFName += "NoCF";
973
974 m_eleIdDFName = m_eleId.find("DNN") == std::string::npos ? "DFCommonElectronsLH" : "DFCommonElectronsDNN";
975 m_eleIdDFName += TString(m_eleId).ReplaceAll("LooseAndBLayer","LooseBL").ReplaceAll("LLH","").ReplaceAll("DNNnoCF","").ReplaceAll("DNN","").Data();
976 if (m_eleId.find("noCF") != std::string::npos)
977 m_eleIdDFName += "NoCF";
979
980 m_photonIdBaselineDFName = "DFCommonPhotonsIsEM";
983
984 m_photonIdDFName = "DFCommonPhotonsIsEM";
985 m_photonIdDFName += TString(m_photonId).Data();
987
988 // autoconfigure PRW tool if m_autoconfigPRW==true
989 if (m_autoconfigPRWPath == "dev/PileupReweighting/share/")
991 else
992 // need to set a full path if you don't use the one in CVMFS
994
995 // Read Handles
996 ATH_CHECK( m_LRTCollectionName.initialize() );
997 ATH_CHECK( m_GSFLRTCollectionName.initialize() );
998
999 // Write Handles
1000 ATH_CHECK( m_outElectronLocation.initialize() );
1001 ATH_CHECK( m_outMuonLocation.initialize() );
1002
1003 ATH_CHECK( this->SUSYToolsInit() );
1004
1005 ATH_MSG_VERBOSE("Done with tool retrieval");
1006
1007 m_tool_init = true;
1008
1009 // Return gracefully:
1010 return StatusCode::SUCCESS;
1011}
static std::string retrieveMetadata(const std::string &folder, const std::string &key, const ServiceHandle< StoreGateSvc > &inputMetaStore)
method that always returns as a string you can use from, e.g, pyROOT with evt = ROOT....
std::string m_defaultTruthJets
std::string m_jetCleanDFName
std::string m_photonIdBaselineDFName
StatusCode readConfig() override final
StatusCode SUSYToolsInit()
std::string m_eleIdBaselineDFName
StatusCode autoconfigurePileupRWTool(const std::string &PRWfilesDir="dev/PileupReweighting/share/", const std::string &PRWfileName="", bool usePathResolver=true, bool RPVLLmode=false, bool Combinedmode=false, const std::string &HFFilter="")
std::string m_photonIdDFName
@ dataType
Data type that's in the file [string].
const std::string & typeName(Type id)

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

◆ inputMetaStore()

AsgMetadataTool::MetaStorePtr_t asg::AsgMetadataTool::inputMetaStore ( ) const
inherited

Accessor for the input metadata store.

Definition at line 93 of file AsgMetadataTool.cxx.

93 {
94
95#ifdef XAOD_STANDALONE
96 return &m_inputMetaStore;
97#else // XAOD_STANDALONE
98 return m_inputMetaStore;
99#endif // XAOD_STANDALONE
100 }
MetaStore_t m_inputMetaStore
Object accessing the input metadata store.

◆ isAtlfast()

bool ST::SUSYObjDef_xAOD::isAtlfast ( ) const
inlinefinaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 158 of file SUSYObjDef_xAOD.h.

158{return m_dataSource == AtlfastII;}

◆ IsBadJet()

bool ST::SUSYObjDef_xAOD::IsBadJet ( const xAOD::Jet & input) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 745 of file Jets.cxx.

745 {
746
747 if ( !acc_passOR(input) ) return false;
748
749 float ptcut = 20e3;
750 if ( m_jetPt < ptcut ) ptcut = m_jetPt;
751
752 bool isPileup = !acc_passJvt(input);
753
754 if ( input.pt() <= ptcut || isPileup ) return false;
755
756 if (m_acc_jetClean.isAvailable(input)) {
757 dec_bad(input) = !m_acc_jetClean(input);
758 } else {
759 ATH_MSG_VERBOSE("DFCommon jet cleaning variable not available ... setting 'bad' decorator to 0.");
760 dec_bad(input) = 0;
761 // the jet cleaning decisions are only calculable at AOD now
762 // dec_bad(input) = m_jetCleaningTool.empty() ? false : !m_jetCleaningTool->keep(input);
763 }
764
765 ATH_MSG_VERBOSE( "JET isbad?: " << static_cast<int>(acc_bad(input)));
766
767 return acc_bad(input);
768 }
bool isPileup(int origin)
from pileup
static const SG::ConstAccessor< char > acc_bad("bad")

◆ IsBadMuon()

bool ST::SUSYObjDef_xAOD::IsBadMuon ( const xAOD::Muon & input,
const float qopcut ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 405 of file Muons.cxx.

406{
407 const static SG::Decorator<char> dec_bad("bad");
408 dec_bad(input) = false;
409
410 const static SG::Decorator<char> dec_bad_highPt("bad_highPt");
411 dec_bad_highPt(input) = false;
412
414 if (input.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
415 track = input.trackParticle(xAOD::Muon::CombinedTrackParticle);
416 if (!track) return false; // don't treat SAF muons without CB track further
417 }
418 else{
419 track = input.primaryTrackParticle();
420 if (!track){
421 ATH_MSG_WARNING("Non-SAF muon without a track; cannot test IsBadMuon criteria");
422 return false;
423 }
424 }
425
426 float Rerr = Amg::error(track->definingParametersCovMatrix(), 4) / std::abs(track->qOverP());
427 ATH_MSG_VERBOSE( "Track momentum error (%): " << Rerr * 100 );
428 bool isbad = Rerr > qopcut;
429 bool isbadHighPt = Rerr > qopcut;
430
431 //new recommendation from MCP
432 isbad |= m_muonSelectionTool->isBadMuon(input);
433
434 //new recommendation from MCP (at HighPT)
435 isbadHighPt |= m_muonSelectionHighPtTool->isBadMuon(input);
436
437 dec_bad(input) = isbad;
438 dec_bad_highPt(input) = isbadHighPt;
439
440 ATH_MSG_VERBOSE( "MUON isbad?: " << isbad );
441 return isbad;
442}
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...

◆ IsBJet()

bool ST::SUSYObjDef_xAOD::IsBJet ( const xAOD::Jet & input) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 771 of file Jets.cxx.

771 {
772
773 bool isbjet = bool(m_btagSelTool->accept(input));
774 dec_bjet(input) = isbjet;
775
776 if (SetBtagWeightDecorations(input, m_btagSelTool, m_BtagTagger).isFailure())
777 ANA_MSG_ERROR("Couldn't set b-tag decorations for jet, is-b = " << (isbjet?"true":"false") << ", pT = " << input.pt()/1000.);
778
779 return isbjet;
780 }
#define ANA_MSG_ERROR(xmsg)
Macro printing error messages.
StatusCode SetBtagWeightDecorations(const xAOD::Jet &input, const asg::AnaToolHandle< IBTaggingSelectionTool > &btagSelTool, const std::string &btagTagger) const override final
Definition Jets.cxx:1155
static const SG::Decorator< char > dec_bjet("bjet")

◆ IsBJetContinuous()

int ST::SUSYObjDef_xAOD::IsBJetContinuous ( const xAOD::Jet & input) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 793 of file Jets.cxx.

793 {
795 // Cheatsheet:
796 // returns 6 if between 65% and 0%
797 // returns 5 if between 70% and 65%
798 // returns 4 if between 77% and 70%
799 // returns 3 if between 85% and 77%
800 // returns 2 if between 90% and 85%
801 // returns 1 if between 100% and 90%
802 // returns 0 if smaller than -1e4-> should never happen
803 // return -1 if bigger than 1e4 or not in b-tagging acceptance
805
806 int isbjet = m_btagSelTool->getQuantile(input);
807 dec_bjet(input) = isbjet;
808
810 ANA_MSG_ERROR("Couldn't set continuous b-tag decorations for jet, is-b = " << isbjet << ", pT = " << input.pt()/1000.);
811
812 return isbjet;
813 }

◆ IsBJetLoose()

bool ST::SUSYObjDef_xAOD::IsBJetLoose ( const xAOD::Jet & input) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 680 of file Jets.cxx.

680 {
681 bool isbjet_loose = false;
683 isbjet_loose = bool(m_btagSelTool_OR->accept(input)); //note : b-tag applies only to jet with eta < 2.5
684 return isbjet_loose;
685 }

◆ IsCosmicMuon()

bool ST::SUSYObjDef_xAOD::IsCosmicMuon ( const xAOD::Muon & input,
const float z0cut,
const float d0cut ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 444 of file Muons.cxx.

445{
446 dec_cosmic(input) = false;
447
448 const xAOD::TrackParticle* track(nullptr);
449 if (input.muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) {
450 track = input.trackParticle(xAOD::Muon::CombinedTrackParticle);
451 if (!track){
452 ATH_MSG_VERBOSE("WARNING: SAF muon without CB track found. Not possible to check cosmic muon criteria");
453 return false; // don't treat SAF muons without CB track further
454 }
455 }
456 else {
457 track = input.primaryTrackParticle();
458 if (!track){
459 ATH_MSG_WARNING("Non-SAF muon without primary track particle found. Not possible to check cosmic muon criteria");
460 return false;
461 }
462 }
463
464 double mu_d0 = track->d0();
465 const xAOD::Vertex* pv = this->GetPrimVtx();
466 double primvertex_z = pv ? pv->z() : 0;
467 double mu_z0_exPV = track->z0() + track->vz() - primvertex_z;
468
469 bool isCosmicMuon = (std::abs(mu_z0_exPV) >= z0cut || std::abs(mu_d0) >= d0cut);
470
471 if (isCosmicMuon) {
472 ATH_MSG_VERBOSE("COSMIC PV Z = " << primvertex_z << ", track z0 = " << mu_z0_exPV << ", track d0 = " << mu_d0);
473 }
474
475 dec_cosmic(input) = isCosmicMuon;
476 return isCosmicMuon;
477}
static const SG::Decorator< char > dec_cosmic("cosmic")

◆ isData()

bool ST::SUSYObjDef_xAOD::isData ( ) const
inlinefinaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 157 of file SUSYObjDef_xAOD.h.

157{return m_dataSource == Data;}

◆ IsHighPtMuon()

bool ST::SUSYObjDef_xAOD::IsHighPtMuon ( const xAOD::Muon & input) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 386 of file Muons.cxx.

390{
391 if (input.pt() < 3e3){
392 ATH_MSG_DEBUG("No HighPt check supported for muons below 3GeV! False.");
393 dec_passedHighPtCuts(input) = false;
394 return false;
395 }
396
397 bool isHighPt=false;
398 isHighPt = bool(m_muonSelectionHighPtTool->accept(input));
399 dec_passedHighPtCuts(input) = isHighPt;
400
401 return isHighPt;
402}

◆ IsMETTrigPassed() [1/2]

bool ST::SUSYObjDef_xAOD::IsMETTrigPassed ( const std::string & triggerName,
bool j400_OR = false,
const std::string & L1_name = "L1_XE50" ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 63 of file Trigger.cxx.

63 {
64 // NB - this now applies to the entire function...
65
66 // First check if we're affected by the L1_XE50 bug
67 bool L1_pass = m_trigDecTool->isPassed(L1_name);
68 bool HLT_noalg_L1J400 = m_trigDecTool->isPassed("HLT_noalg_L1J400");
69 if (!L1_pass && j400_OR && HLT_noalg_L1J400) {
70 return emulateHLT(triggerName);
71 }
72 else if (L1_pass) {
73 // See if the TDT knows about this
74 {
75 std::scoped_lock lock (m_triggerCacheMutex);
76 if (isTrigInTDT(lock, triggerName) ) return m_trigDecTool->isPassed(triggerName);
77 }
78 return emulateHLT(triggerName);
79 }
80 return false;
81}
bool emulateHLT(const std::string &triggerName) const
Definition Trigger.cxx:97

◆ IsMETTrigPassed() [2/2]

bool ST::SUSYObjDef_xAOD::IsMETTrigPassed ( unsigned int runnumber = 0,
bool j400_OR = false ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 30 of file Trigger.cxx.

30 {
31
32 // Returns MET trigger decision for recommended lowest unprescaled evolution described in
33 // https://twiki.cern.ch/twiki/bin/viewauth/Atlas/LowestUnprescaled
34 // For period vs run number, see https://atlas-tagservices.cern.ch/tagservices/RunBrowser/runBrowserReport/rBR_Period_Report.php
35
36 // if no runNumber specified, just read it from the current event
37 unsigned int rn;
38 if(runnumber>0){
39 rn = runnumber;
40 }
41 else{
42 rn = GetRunNumber(); // it takes care of dealing with data and MC
43 }
44
45 int year = treatAsYear(rn);
46
47 if (year == 2015) return IsMETTrigPassed("HLT_xe70_mht",j400_OR); //2015
48 else if(year == 2016 && rn >= 296939 && rn <= 302872 ) return IsMETTrigPassed("HLT_xe90_mht_L1XE50",j400_OR); //2016 A-D3
49 else if(year == 2016 && rn >= 302919 && rn <= 303892 ) return IsMETTrigPassed("HLT_xe100_mht_L1XE50",j400_OR); //2016 D4-F1
50 else if(year == 2016 && rn >= 303943) return IsMETTrigPassed("HLT_xe110_mht_L1XE50",j400_OR); //2016 F2-(open)
51 else if(year == 2017 && rn >= 325713 && rn <= 331975 ) return IsMETTrigPassed("HLT_xe110_pufit_L1XE55", false,"L1_XE55"); // 2017 B1-D5
52 else if(year == 2017 && rn >= 332303 ) return IsMETTrigPassed("HLT_xe110_pufit_L1XE50", false); // 2017 D6-(open)
53 else if(year == 2018 && rn >= 348885 && rn <= 350013 ) return IsMETTrigPassed("HLT_xe110_pufit_xe70_L1XE50", false); // 2018 B-C5
54 else if(year == 2018 && rn >= 350067 ) return IsMETTrigPassed("HLT_xe110_pufit_xe65_L1XE50", false); // 2018 C5-(open)
55 else if(year == 2022) return IsMETTrigPassed("HLT_xe65_cell_xe90_pfopufit_L1XE50",false); // 2022
56 else if(year == 2023) return IsMETTrigPassed("HLT_xe65_cell_xe90_pfopufit_L1XE50",false); // 2023
57 else if(year == 2024) return IsMETTrigPassed("HLT_xe65_cell_xe105_nn_L1jXE100",false,"L1_jXE100"); // 2024
58
59 return false;
60}
bool IsMETTrigPassed(unsigned int runnumber=0, bool j400_OR=false) const override final
Definition Trigger.cxx:30
unsigned int GetRunNumber() const override final
static std::vector< uint32_t > runnumber
Definition iLumiCalc.h:37

◆ isNominal()

bool ST::SUSYObjDef_xAOD::isNominal ( const CP::SystematicSet & syst) const

Definition at line 2110 of file SUSYObjDef_xAOD.cxx.

2110 {
2111 return syst.name().empty();
2112}

◆ isPrompt()

bool ST::SUSYObjDef_xAOD::isPrompt ( const xAOD::IParticle * part) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 24 of file Truth.cxx.

24 {
25
26 const int type = acc_truthType(*part);
27 int origin = acc_truthOrigin(*part);
28 int originbkg = 0;
29 if(acc_bkgTruthOrigin.isAvailable(*part)){ //only in SUSY2,3,5 for the moment!
30 originbkg = acc_bkgTruthOrigin(*part);
31 }
32 else{
33 ATH_MSG_DEBUG("::isPrompt() : No bkgTruthOrigin decoration available. Returning false by default.");
34 return false;
35 }
36
37 //Electrons
38 if( part->type() == xAOD::Type::Electron ){
39 switch(type){
41 if(origin != MCTruthPartClassifier::PhotonConv) return false;
42 if(originbkg == MCTruthPartClassifier::FSRPhot || originbkg == MCTruthPartClassifier::BremPhot) return true;
43 origin = originbkg;
44 /* FALLTHRU */
46 return (origin == MCTruthPartClassifier::top
56 || origin == MCTruthPartClassifier::LQ
57 || origin == MCTruthPartClassifier::SUSY);
58 default:
59 return false;
60 }
61 // NB: will classify a few muon/quark brems as prompt electrons, but a small effect
62 }
63 if( part->type() == xAOD::Type::Muon ){
64 return (type == MCTruthPartClassifier::IsoMuon);
65 }
66 else{
67 ATH_MSG_DEBUG("::isPrompt() : Only Electrons supported at the moment!");
68 }
69
70 //Photons ... ?
71 //Taus ... ?
72 return false;
73}
static const SG::ConstAccessor< int > acc_truthType("truthType")
static const SG::ConstAccessor< int > acc_truthOrigin("truthOrigin")
static const SG::ConstAccessor< int > acc_bkgTruthOrigin("bkgTruthOrigin")

◆ IsSignalElectron()

bool ST::SUSYObjDef_xAOD::IsSignalElectron ( const xAOD::Electron & input,
const float etcut,
const float d0sigcut,
const float z0cut,
const float etacut = DUMMYDEF ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 362 of file Electrons.cxx.

363{
364 if (!acc_baseline(input)) return false;
365
366 dec_passSignalID(input) = false;
367
368 if (m_eleIdExpert) {
369 if ( !m_elecSelLikelihood.empty() && m_elecSelLikelihood->accept(&input) ) dec_passSignalID(input) = true;
370 }
371 else {
372 if (m_acc_eleId.isAvailable(input)) {
373 dec_passSignalID(input) = m_acc_eleId(input);
374 } else {
375 ATH_MSG_VERBOSE ("DFCommonElectronsLHxxx variables are not found. Calculating the ID from LH tool..");
376 if ( !m_elecSelLikelihood.empty() && m_elecSelLikelihood->accept(&input) ) dec_passSignalID(input) = true;
377 }
378 }
379
380 //overwrite ID selection if forced by user
381 if(m_force_noElId) dec_passSignalID(input) = true;
382
383 if (!acc_passSignalID(input)) return false;
384
385 if (input.p4().Perp2() <= etcut * etcut || input.p4().Perp2() == 0) return false; // eT cut (might be necessary for leading electron to pass trigger)
386 if ( etacut==DUMMYDEF ){
387 if(std::abs(input.caloCluster()->etaBE(2)) > m_eleEta ) return false;
388 }
389 else if ( std::abs(input.caloCluster()->etaBE(2)) > etacut ) return false;
390
391 if (m_eleCrackVeto){
392 if ( std::abs( input.caloCluster()->etaBE(2) ) >1.37 && std::abs( input.caloCluster()->etaBE(2) ) <1.52) {
393 return false;
394 }
395 }
396
397 if (acc_d0sig(input) != 0) {
398 if (d0sigcut > 0.0 && std::abs(acc_d0sig(input)) > d0sigcut) return false; // transverse IP cut
399 }
400
401 if (z0cut > 0.0 && std::abs(acc_z0sinTheta(input)) > z0cut) return false; // longitudinal IP cut
402
403
404 ATH_MSG_VERBOSE( "IsSignalElectron: " << m_eleId << " " << acc_passSignalID(input) << " d0sig " << acc_d0sig(input) << " z0 sin(theta) " << acc_z0sinTheta(input) );
405
406 if (m_doElIsoSignal) {
407 if ( !( (acc_isol(input) && input.pt()<m_eleIsoHighPtThresh) || (acc_isolHighPt(input) && input.pt()>m_eleIsoHighPtThresh)) ) return false;
408 ATH_MSG_VERBOSE( "IsSignalElectron: passed isolation" );
409 }
410
411 if(m_eleChID_signal && !acc_passChID(input)) return false; //add charge flip check to signal definition
412
413 dec_signal(input) = true;
414
415 ATH_MSG_VERBOSE( "IsSignalElectron: passed selection" );
416 return true;
417}
static const SG::ConstAccessor< char > acc_passSignalID("passSignalID")
static const double DUMMYDEF
static const SG::ConstAccessor< char > acc_passChID("passChID")

◆ IsSignalJet()

bool ST::SUSYObjDef_xAOD::IsSignalJet ( const xAOD::Jet & input,
const float ptcut,
const float etacut ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 693 of file Jets.cxx.

693 {
694 if ( !acc_baseline(input) || !acc_passOR(input) ) return false;
695
696 if ( input.pt() <= ptcut || std::abs(input.eta()) >= etacut) return false;
697
698 bool isgoodjet = !acc_bad(input) && acc_passJvt(input);
699
700 dec_signal(input) = isgoodjet;
701
702 // For JVT calculation
703 dec_signal_less_JVT(input) = !acc_bad(input);
704
705
706 if (m_debug) {
707 float emfrac, hecf, LArQuality, HECQuality, Timing, fracSamplingMax, NegativeE, AverageLArQF;
708 std::vector<float> sumpttrk_vec;
709
710 input.getAttribute(xAOD::JetAttribute::EMFrac, emfrac);
711 input.getAttribute(xAOD::JetAttribute::HECFrac, hecf);
712 input.getAttribute(xAOD::JetAttribute::LArQuality, LArQuality);
713 input.getAttribute(xAOD::JetAttribute::HECQuality, HECQuality);
714 input.getAttribute(xAOD::JetAttribute::Timing, Timing);
715 input.getAttribute(xAOD::JetAttribute::SumPtTrkPt500, sumpttrk_vec);
716 input.getAttribute(xAOD::JetAttribute::FracSamplingMax, fracSamplingMax);
717 input.getAttribute(xAOD::JetAttribute::NegativeE, NegativeE);
718 input.getAttribute(xAOD::JetAttribute::AverageLArQF, AverageLArQF);
719
720 float sumpttrk;
721 if (!sumpttrk_vec.empty() && this->GetPrimVtx()) {
722 sumpttrk = sumpttrk_vec[this->GetPrimVtx()->index()];
723 } else {
724 sumpttrk = 0.;
725 }
726
727 ATH_MSG_INFO( "JET pt: " << input.pt() );
728 ATH_MSG_INFO( "JET eta: " << input.eta() );
729 ATH_MSG_INFO( "JET emfrac: " << emfrac );
730 ATH_MSG_INFO( "JET hecfrac: " << hecf );
731 ATH_MSG_INFO( "JET LArQuality: " << LArQuality );
732 ATH_MSG_INFO( "JET HECQuality: " << HECQuality );
733 ATH_MSG_INFO( "JET Timing: " << Timing );
734 ATH_MSG_INFO( "JET sumpttrk: " << sumpttrk );
735 ATH_MSG_INFO( "JET fracSamplingMax: " << fracSamplingMax );
736 ATH_MSG_INFO( "JET AverageLArQF: " << AverageLArQF );
737 }
738
739 ATH_MSG_VERBOSE( "JET isbad?: " << static_cast<int>(acc_bad(input)));
740
741 return isgoodjet;
742 }
size_t index() const
Return the index of this element within its container.

◆ IsSignalMuon()

bool ST::SUSYObjDef_xAOD::IsSignalMuon ( const xAOD::Muon & input,
const float ptcut,
const float d0sigcut,
const float z0cut,
const float etacut = DUMMYDEF ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 344 of file Muons.cxx.

345{
346 if (!acc_baseline(input)) return false;
347 if (!acc_passSignalID(input)) return false;
348
349 if (input.pt() <= ptcut || input.pt() == 0) return false; // pT cut (might be necessary for leading muon to pass trigger)
350 if ( etacut==DUMMYDEF ){
351 if(std::abs(input.eta()) > m_muEta ) return false;
352 }
353 else if ( std::abs(input.eta()) > etacut ) return false;
354
355 if (z0cut > 0.0 && std::abs(acc_z0sinTheta(input)) > z0cut) return false; // longitudinal IP cut
356 if (acc_d0sig(input) != 0) {
357 if (d0sigcut > 0.0 && std::abs(acc_d0sig(input)) > d0sigcut) return false; // transverse IP cut
358 }
359
360 if (m_doMuIsoSignal) {
361 if ( !( (acc_isol(input) && input.pt()<m_muIsoHighPtThresh) || (acc_isolHighPt(input) && input.pt()>m_muIsoHighPtThresh)) ) return false;
362 ATH_MSG_VERBOSE( "IsSignalMuon: passed isolation");
363 }
364
365 //set HighPtMuon decoration
366 IsHighPtMuon(input);
367
368 dec_signal(input) = true;
369
370 if (m_muId == 4) { //i.e. HighPt muons
371 ATH_MSG_VERBOSE( "IsSignalMuon: mu pt " << input.pt()
372 << " signal? " << static_cast<int>(acc_signal(input))
373 << " isolation? " << static_cast<int>(acc_isol(input))
374 << " passedHighPtCuts? " << static_cast<int>(acc_passedHighPtCuts(input)));
375 } else {
376 ATH_MSG_VERBOSE( "IsSignalMuon: mu pt " << input.pt()
377 << " signal? " << static_cast<int>( acc_signal(input))
378 << " isolation? " << static_cast<int>( acc_isol(input)));
379 // Don't show HighPtFlag ... we didn't set it!
380 }
381
382 return acc_signal(input);
383}
bool IsHighPtMuon(const xAOD::Muon &input) const override final
Definition Muons.cxx:386
static const SG::ConstAccessor< char > acc_passedHighPtCuts("passedHighPtCuts")

◆ IsSignalPhoton()

bool ST::SUSYObjDef_xAOD::IsSignalPhoton ( const xAOD::Photon & input,
const float ptcut,
const float etacut = DUMMYDEF ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 167 of file Photons.cxx.

168{
169 dec_signal(input) = false;
170
171 if ( !acc_baseline(input) ) return false;
172
173 if ( !m_egammaAmbiguityTool->accept(input) ) return false;
174
175 if ( input.pt() < ptcut ) return false;
176 if ( etacut==DUMMYDEF ){
177 if(std::abs(input.caloCluster()->etaBE(2)) > m_photonEta ) return false;
178 }
179 else if ( std::abs(input.caloCluster()->etaBE(2)) > etacut ) return false;
180
182 if ( std::abs( input.caloCluster()->etaBE(2) ) >1.37 && std::abs( input.caloCluster()->etaBE(2) ) <1.52) {
183 return false;
184 }
185 }
186
187 if (acc_isol(input) || !m_doPhIsoSignal) {
188 ATH_MSG_VERBOSE( "IsSignalPhoton: passed isolation");
189 } else return false;
190
191 bool passID = false;
192 if (m_acc_photonId.isAvailable(input)) {
193 passID = m_acc_photonId(input);
194 } else {
195 ATH_MSG_VERBOSE ("DFCommonPhotonsIsEMxxx variables are not found. Calculating the ID from Photon ID tool..");
196 passID = bool(m_photonSelIsEM->accept(&input));
197 }
198 if ( !passID ) return false;
199
200 dec_signal(input) = true;
201
202 return true;
203}

◆ IsSignalTau()

bool ST::SUSYObjDef_xAOD::IsSignalTau ( const xAOD::TauJet & input,
const float ptcut,
const float etacut ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 112 of file Taus.cxx.

112 {
113
114 dec_signal(input) = false;
115
116 if ( !acc_baseline(input) ) return false;
117
118 if (input.pt() <= ptcut) return false;
119
120 if (std::abs(input.eta()) >= etacut) return false;
121
122 if (!m_tauSelTool->accept( input )) return false;
123
124 dec_signal(input) = true;
125
126 return true;
127}

◆ IsTrackBJet()

bool ST::SUSYObjDef_xAOD::IsTrackBJet ( const xAOD::Jet & input) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 782 of file Jets.cxx.

782 {
783
784 bool isbjet = bool(m_btagSelTool_trkJet->accept(input));
785 dec_bjet(input) = isbjet;
786
788 ANA_MSG_ERROR("Couldn't set b-tag decorations for trackjet, is-b = " << (isbjet?"true":"false") << ", pT = " << input.pt()/1000.);
789
790 return isbjet;
791 }

◆ IsTrackBJetContinuous()

int ST::SUSYObjDef_xAOD::IsTrackBJetContinuous ( const xAOD::Jet & input) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 815 of file Jets.cxx.

815 {
816
817 int isbjet = m_btagSelTool_trkJet->getQuantile(input);
818 dec_bjet(input) = isbjet;
819
821 ANA_MSG_ERROR("Couldn't set continuous b-tag decorations for trackjet, is-b = " << isbjet << ", pT = " << input.pt()/1000.);
822
823 return isbjet;
824 }

◆ isTrigInTDT()

bool ST::SUSYObjDef_xAOD::isTrigInTDT ( std::scoped_lock< std::mutex > & lock,
const std::string & triggerName ) const
private

Definition at line 83 of file Trigger.cxx.

85{
86 auto mapItr = m_checkedTriggers.find(triggerName);
87 if ( mapItr == m_checkedTriggers.end() ) {
88 const auto *cg = m_trigDecTool->getChainGroup(triggerName);
89 return m_checkedTriggers[triggerName] = cg->getListOfTriggers().size() != 0;
90 }
91 else {
92 return mapItr->second;
93 }
94}

◆ IsTrigMatched() [1/4]

bool ST::SUSYObjDef_xAOD::IsTrigMatched ( const std::initializer_list< const xAOD::IParticle * > & v,
const std::string & tr_item )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 233 of file Trigger.cxx.

233 {
234 return m_trigMatchingTool->match(v, tr_item);
235}

◆ IsTrigMatched() [2/4]

bool ST::SUSYObjDef_xAOD::IsTrigMatched ( const std::vector< const xAOD::IParticle * > & v,
const std::string & tr_item )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 228 of file Trigger.cxx.

228 {
229 return m_trigMatchingTool->match(v, tr_item);
230}

◆ IsTrigMatched() [3/4]

bool ST::SUSYObjDef_xAOD::IsTrigMatched ( const xAOD::IParticle * part,
const std::string & tr_item )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 218 of file Trigger.cxx.

218 {
219 return this->IsTrigMatched({part}, tr_item);
220}
bool IsTrigMatched(const xAOD::IParticle *part, const std::string &tr_item) override final
Definition Trigger.cxx:218

◆ IsTrigMatched() [4/4]

bool ST::SUSYObjDef_xAOD::IsTrigMatched ( const xAOD::IParticle * part1,
const xAOD::IParticle * part2,
const std::string & tr_item )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 223 of file Trigger.cxx.

223 {
224 return this->IsTrigMatched({part1, part2}, tr_item);
225}

◆ IsTrigPassed()

bool ST::SUSYObjDef_xAOD::IsTrigPassed ( const std::string & tr_item,
unsigned int condition = TrigDefs::Physics ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 213 of file Trigger.cxx.

213 {
214 return m_trigDecTool->isPassed(tr_item, condition);
215}

◆ IsTruthBJet()

bool ST::SUSYObjDef_xAOD::IsTruthBJet ( const xAOD::Jet & input) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 301 of file Truth.cxx.

301 {
302 //Method to set correctly the IsBjet decoration needed by the JetUncertainties tool
303 bool isBjet = false;
304 if (acc_signal(input)) {
305
306 int truthlabel(-1);
307 if (!input.getAttribute("HadronConeExclTruthLabelID", truthlabel)) {
308 ATH_MSG_ERROR("Failed to get jet truth label!");
309 }
310
311 isBjet = std::abs(truthlabel) == 5;
312 }
313
314 const static SG::Decorator<char> dec_bjet_jetunc("bjet_jetunc"); //added for JetUncertainties usage
315 dec_bjet_jetunc(input) = isBjet;
316
317 return isBjet;
318}

◆ isVariation()

bool ST::SUSYObjDef_xAOD::isVariation ( const CP::SystematicSet & syst) const

Definition at line 2125 of file SUSYObjDef_xAOD.cxx.

2125 {
2126 // returns true if _any_ of the systematics affect kinematics. ignores effect on weights.
2127 for (const auto& sys : systSet) {
2128 auto info = getSystInfo(sys);
2129 if(info.affectsKinematics) { return true; }
2130 }
2131 return false;
2132}

◆ isWeight()

bool ST::SUSYObjDef_xAOD::isWeight ( const CP::SystematicSet & systSet) const

Definition at line 2114 of file SUSYObjDef_xAOD.cxx.

2114 {
2115 // returns true if all systematics do _not_ affect kinematics and _any_ of them affects the weight
2116 bool affectsWeights = false;
2117 for (const auto& sys : systSet) {
2118 auto info = getSystInfo(sys);
2119 if(info.affectsKinematics) { return false; }
2120 affectsWeights = affectsWeights or info.affectsWeights;
2121 }
2122 return affectsWeights;
2123}

◆ JetPassJVT()

bool ST::SUSYObjDef_xAOD::JetPassJVT ( xAOD::Jet & input)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 687 of file Jets.cxx.

687 {
688 char pass_jvt = !m_applyJVTCut || m_jetNNJvtSelectionTool->accept(&input);
689 dec_passJvt(input) = pass_jvt;
690 return pass_jvt;
691 }

◆ JVT_SF()

double ST::SUSYObjDef_xAOD::JVT_SF ( const xAOD::JetContainer * jets)
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 988 of file Jets.cxx.

988 {
989
990 float totalSF = 1.;
991 if (!m_applyJVTCut) return totalSF;
992
993 ConstDataVector<xAOD::JetContainer> jvtjets(SG::VIEW_ELEMENTS);
994 for (const xAOD::Jet* jet : *jets) {
995 // Only jets that were good for every cut except JVT
996 if (acc_signal_less_JVT(*jet) && acc_passOR(*jet)) {
997 jvtjets.push_back(jet);
998 }
999 }
1000
1001 for (const xAOD::Jet* jet : jvtjets) {
1002 float current_sf = 0;
1003
1004 // the SF are only applied for HS jets and implicitely requires the presence of the isHS decoration
1005 CP::CorrectionCode result;
1006 if (acc_passJvt(*jet)) {
1007 result = m_jetNNJvtEfficiencyTool->getEfficiencyScaleFactor(*jet,current_sf);
1008 }
1009 else {
1010 result = m_jetNNJvtEfficiencyTool->getInefficiencyScaleFactor(*jet,current_sf);
1011 }
1012
1013 switch (result) {
1015 // this is probably not right, should report an error here
1016 ATH_MSG_ERROR("Inexplicably failed JVT calibration" );
1017 break;
1019 // no NNJvt SF for jet, that is ok e.g. for jets with |eta| > 2.5
1020 ATH_MSG_VERBOSE( "Skip SF application in SUSYTools_xAOD::JVT_SF as jet outside validate range" );
1021 break;
1022 default:
1023 ATH_MSG_VERBOSE( "Retrieve SF for jet in SUSYTools_xAOD::JVT_SF with value " << current_sf );
1024 totalSF *= current_sf;
1025 }
1026
1027 }
1028
1029 ATH_MSG_VERBOSE( "Retrieve total SF for jet container in SUSYTools_xAOD::JVT_SF with value " << totalSF );
1030
1031 return totalSF;
1032 }

◆ JVT_SFsys()

double ST::SUSYObjDef_xAOD::JVT_SFsys ( const xAOD::JetContainer * jets,
const CP::SystematicSet & systConfig )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 1035 of file Jets.cxx.

1035 {
1036
1037 float totalSF = 1.;
1038 if (!m_applyJVTCut) return totalSF;
1039
1040 //Set the new systematic variation
1041 StatusCode ret = m_jetNNJvtEfficiencyTool->applySystematicVariation(systConfig);
1042 if ( ret != StatusCode::SUCCESS) {
1043 ATH_MSG_ERROR("Cannot configure NNjvtEfficiencyTool for systematic var. " << systConfig.name() );
1044 }
1045
1046 // Delegate
1047 totalSF = SUSYObjDef_xAOD::JVT_SF( jets );
1048
1049 // }
1050 if (m_applyJVTCut) {
1051 ret = m_jetNNJvtEfficiencyTool->applySystematicVariation(m_currentSyst);
1052 if ( ret != StatusCode::SUCCESS) {
1053 ATH_MSG_ERROR("Cannot configure NNjvtEfficiencyTool for systematic var. " << systConfig.name() );
1054 }
1055 }
1056
1057 return totalSF;
1058 }

◆ MergeElectrons()

StatusCode ST::SUSYObjDef_xAOD::MergeElectrons ( const xAOD::ElectronContainer & electrons,
xAOD::ElectronContainer * outputCol,
const std::set< const xAOD::Electron * > & ElectronsToRemove ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 61 of file Electrons.cxx.

61 {
62
63 if (electrons.empty()) return StatusCode::SUCCESS;
64 for (const xAOD::Electron* electron: electrons) {
65 if (ElectronsToRemove.find(electron) != ElectronsToRemove.end()){
66 ATH_MSG_DEBUG( "Removing electron from output collection (isLRT?) : ("<< static_cast<int>(acc_isLRT(*electron)) << ")" );
67 ATH_MSG_DEBUG( "ELECTRON cl eta: " << electron->caloCluster()->eta());
68 ATH_MSG_DEBUG( "ELECTRON cl phi: " << electron->caloCluster()->phi());
69 continue;
70 // add electron into output
71 } else {
72 ATH_MSG_DEBUG( "Adding electron to output collection (isLRT?) : (" << static_cast<int>(acc_isLRT(*electron)) << ")" );
73 ATH_MSG_DEBUG( "ELECTRON cl eta: " << electron->caloCluster()->eta());
74 ATH_MSG_DEBUG( "ELECTRON cl phi: " << electron->caloCluster()->phi());
75 auto newElectron = new xAOD::Electron(*electron);
76
77 if ( getOriginalObject(*electron) != nullptr ) {
79 } else {
80 setOriginalObjectLink(*electron, *newElectron);
81 }
82
83 outputCol->push_back(newElectron);
84 }
85 }
86 return StatusCode::SUCCESS;
87}
value_type push_back(value_type pElem)
Add an element to the end of the collection.
static const SG::ConstAccessor< char > acc_isLRT("isLRT")
const IParticle * getOriginalObject(const IParticle &copy)
This function can be used to conveniently get a pointer back to the original object from which a copy...

◆ MergeMuons()

StatusCode ST::SUSYObjDef_xAOD::MergeMuons ( const xAOD::MuonContainer & muons,
const std::vector< bool > & writeMuon,
xAOD::MuonContainer * outputCol ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 56 of file Muons.cxx.

56 {
57 if (muons.empty()) return StatusCode::SUCCESS;
58 for (const xAOD::Muon* muon: muons) {
59 // add muon into output
60 if (writeMuon.at(muon->index())){
61 auto newMuon = new xAOD::Muon(*muon);
62
63 if ( getOriginalObject(*muon) != nullptr ) {
65 } else {
66 setOriginalObjectLink(*muon, *newMuon);
67 }
68 outputCol->push_back(newMuon);
69 }
70 }
71 return StatusCode::SUCCESS;
72}

◆ metaDataStop()

StatusCode asg::AsgMetadataTool::metaDataStop ( )
protectedvirtualinherited

Function called when the tool should write out its metadata.

Dummy implementation that can be overridden by the derived tool.

Reimplemented in BookkeeperDumperTool, BookkeeperTool, xAODMaker::TriggerMenuMetaDataTool, and xAODMaker::TruthMetaDataTool.

Definition at line 209 of file AsgMetadataTool.cxx.

209 {
210
211 // Return gracefully:
212 return StatusCode::SUCCESS;
213 }

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

◆ NearbyLeptonCorrections()

StatusCode ST::SUSYObjDef_xAOD::NearbyLeptonCorrections ( xAOD::ElectronContainer * electrons = nullptr,
xAOD::MuonContainer * muons = nullptr ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2976 of file SUSYObjDef_xAOD.cxx.

2976 {
2977 // This getCloseByIsoCorrection is computationally less expensive and actually corrects the isoaltion
2978 // variables from the contribution of the close by leptons
2979 if (m_isoCloseByTool->getCloseByIsoCorrection(Gaudi::Hive::currentContext(), electrons,muons) != CP::CorrectionCode::Ok) {
2980 return StatusCode::FAILURE;
2981 }
2982 // All done, all good :-)
2983 return StatusCode::SUCCESS;
2984}

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

◆ outputMetaStore()

AsgMetadataTool::MetaStorePtr_t asg::AsgMetadataTool::outputMetaStore ( ) const
inherited

Accessor for the output metadata store.

Definition at line 102 of file AsgMetadataTool.cxx.

102 {
103
104#ifdef XAOD_STANDALONE
105 return &m_outputMetaStore;
106#else // XAOD_STANDALONE
107 return m_outputMetaStore;
108#endif // XAOD_STANDALONE
109 }
MetaStore_t m_outputMetaStore
Object accessing the output metadata store.

◆ OverlapRemoval()

StatusCode ST::SUSYObjDef_xAOD::OverlapRemoval ( const xAOD::ElectronContainer * electrons,
const xAOD::MuonContainer * muons,
const xAOD::JetContainer * jets,
const xAOD::PhotonContainer * gamma = nullptr,
const xAOD::TauJetContainer * taujet = nullptr,
const xAOD::JetContainer * fatjets = nullptr )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2941 of file SUSYObjDef_xAOD.cxx.

2944{
2945
2946 if (this->GetPrimVtx() == nullptr) {
2947 ATH_MSG_WARNING( "Will now call the OR tool on an event without a primary vertex, and it will likely crash. Please require a PV earlier in your analysis code!");
2948 }
2949
2950 ATH_CHECK( m_orToolbox.masterTool->removeOverlaps(electrons, muons, jets, taujet, gamma, fatjets) );
2951
2952 /*
2953 // Count number of objects after overlap removal
2954 int Nel = 0;
2955 for (const auto& el : *electrons) {
2956 if (dec_passOR( *el )) Nel++;
2957 }
2958
2959 int Nmu = 0;
2960 for (const auto& mu : *muons) {
2961 if (dec_passOR( *mu )) Nmu++;
2962 }
2963
2964 int Njet = 0;
2965 for (const auto& jet : *jets) {
2966 if (dec_passOR( *jet )) Njet++;
2967 }
2968
2969 ATH_MSG_VERBOSE( "After overlap removal: Nel=" << Nel << ", Nmu=" << Nmu << ", Njet=" << Njet );
2970 */
2971
2972 return StatusCode::SUCCESS;
2973}

◆ prepareLRTElectrons()

StatusCode ST::SUSYObjDef_xAOD::prepareLRTElectrons ( const xAOD::ElectronContainer * inMuons,
xAOD::ElectronContainer * copy ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 90 of file Electrons.cxx.

90 {
91 for (const xAOD::Electron *electron: *inElectrons){
92 const xAOD::TrackParticle* idtrack = electron->trackParticle();
93
94 // Save electron if the id track passes the LRT filter
95 if ( acc_lrtFilter.isAvailable(*idtrack) )
96 {
97 if ( static_cast<int>(acc_lrtFilter(*idtrack) ) ){
98 std::unique_ptr<xAOD::Electron> copyElectron = std::make_unique<xAOD::Electron>(*electron);
99
100 // transfer original electron link
101
102 setOriginalObjectLink(*electron, *copyElectron);
103 copy->push_back( std::move(copyElectron) );
104 }
105 }
106 else // Keep electron if flag is not available
107 {
108 std::unique_ptr<xAOD::Electron> copyElectron = std::make_unique<xAOD::Electron>(*electron);
109
110 setOriginalObjectLink(*electron, *copyElectron);
111 copy->push_back( std::move(copyElectron) );
112 }
113 }
114 return StatusCode::SUCCESS;
115}
static const SG::ConstAccessor< char > acc_lrtFilter("passLRTFilter")

◆ prepareLRTMuons()

StatusCode ST::SUSYObjDef_xAOD::prepareLRTMuons ( const xAOD::MuonContainer * inMuons,
xAOD::MuonContainer * copy ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 74 of file Muons.cxx.

74 {
75 for (const xAOD::Muon *muon: *inMuons){
76 const xAOD::TrackParticle* idtrack = muon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
77
78 // Save muon if the id track passes the LRT filter
79 if ( acc_lrtFilter.isAvailable(*idtrack) )
80 {
81 if ( static_cast<int>(acc_lrtFilter(*idtrack) ) ){
82 std::unique_ptr<xAOD::Muon> copyMuon = std::make_unique<xAOD::Muon>(*muon);
83
84 // transfer original muon link
85 setOriginalObjectLink(*muon, *copyMuon);
86 copy->push_back( std::move(copyMuon) );
87 }
88 }
89 else // Keep muon if flag is not available
90 {
91 std::unique_ptr<xAOD::Muon> copyMuon = std::make_unique<xAOD::Muon>(*muon);
92
93 setOriginalObjectLink(*muon, *copyMuon);
94 copy->push_back( std::move(copyMuon) );
95 }
96
97 }
98 return StatusCode::SUCCESS;
99}

◆ print()

◆ readConfig()

StatusCode ST::SUSYObjDef_xAOD::readConfig ( )
finaloverrideprotectedvirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 1334 of file SUSYObjDef_xAOD.cxx.

1335{
1336 ATH_MSG_INFO( "***** ***** ***** *****" );
1337 ATH_MSG_INFO( "Configuring from file " << m_configFile );
1338
1339 TEnv rEnv;
1340 int success = -1;
1341 success = rEnv.ReadFile(m_configFile.c_str(), kEnvAll);
1342 if (success != 0) return StatusCode::FAILURE;
1343
1344 ATH_MSG_INFO( "Config file opened" );
1345
1347 m_jetInputType = xAOD::JetInput::Type(rEnv.GetValue("Jet.InputType", 9));
1348 ATH_MSG_INFO( "readConfig(): Loaded property Jet.InputType with value " << static_cast<int>(m_jetInputType));
1349 }
1350 // Remove the item from the table
1351 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject("Jet.InputType") );
1352
1353 if (m_muId == static_cast<int>(xAOD::Muon::Quality(xAOD::Muon::VeryLoose))) {
1354 int muIdTmp = rEnv.GetValue("Muon.Id", 1);
1355 m_muId = (muIdTmp<4 ? static_cast<int>(xAOD::Muon::Quality(muIdTmp)) : muIdTmp);
1356 ATH_MSG_INFO( "readConfig(): Loaded property Muon.Id with value " << m_muId);
1357 // Remove the item from the table
1358 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject("Muon.Id") );
1359 }
1360 if (m_muIdBaseline == static_cast<int>(xAOD::Muon::Quality(xAOD::Muon::VeryLoose))) {
1361 int muIdTmp = rEnv.GetValue("MuonBaseline.Id", 1);
1362 m_muIdBaseline = (muIdTmp<4 ? static_cast<int>(xAOD::Muon::Quality(muIdTmp)) : muIdTmp);
1363 ATH_MSG_INFO( "readConfig(): Loaded property MuonBaseline.Id with value " << m_muIdBaseline);
1364 // Remove the item from the table
1365 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject("MuonBaseline.Id") );
1366 }
1367
1368 // Deprecation warning
1369 std::string prop = rEnv.GetValue("Jet.JVT_WP", "");
1370 if ( !prop.empty() ) {
1371 ATH_MSG_WARNING("readConfig(): Found deprecated property name Jet.JVT_WP. Please move to using Jet.JvtWP. Propagating for now.");
1372 rEnv.SetValue("Jet.JvtWP", prop.c_str());
1373 rEnv.GetTable()->Remove( rEnv.GetTable()->FindObject("Jet.JVT_WP") );
1374 }
1375
1376 //load config file to Properties map (only booleans for now)
1377 m_conf_to_prop["IsRun3"] = "IsRun3";
1378 m_conf_to_prop["StrictConfigCheck"] = "StrictConfigCheck";
1379 m_conf_to_prop["Btag.enable"] = "UseBtagging";
1380 m_conf_to_prop["BtagTrkJet.enable"] = "UseBtaggingTrkJet";
1381 m_conf_to_prop["Ele.CrackVeto"] = "EleCrackVeto";
1382 m_conf_to_prop["EleBaseline.CrackVeto"] = "EleBaselineCrackVeto";
1383 m_conf_to_prop["Ele.ForceNoId"] = "EleForceNoId";
1384 m_conf_to_prop["Ele.AllowRun3TrigSFFallback"] = "EleAllowRun3TrigSFFallback";
1385 m_conf_to_prop["Muon.ForceNoId"] = "MuonForceNoId";
1386 m_conf_to_prop["Muon.TTVASF"] = "MuonTTVASF";
1387 m_conf_to_prop["Muon.passedHighPt"] = "MuonRequireHighPtCuts";
1388 m_conf_to_prop["PhotonBaseline.CrackVeto"] = "PhotonBaselineCrackVeto";
1389 m_conf_to_prop["Photon.CrackVeto"] = "PhotonCrackVeto";
1390 m_conf_to_prop["Photon.AllowLate"] = "PhotonAllowLate";
1391
1392 m_conf_to_prop["FwdJet.doJVT"] = "FwdJetDoJVT";
1393
1394 m_conf_to_prop["OR.DoBoostedElectron"] = "DoBoostedElectronOR";
1395 m_conf_to_prop["OR.DoBoostedMuon"] = "DoBoostedMuonOR";
1396 m_conf_to_prop["OR.DoMuonJetGhostAssociation"] = "ORDoMuonJetGhostAssociation";
1397 m_conf_to_prop["OR.DoTau"] = "DoTauOR";
1398 m_conf_to_prop["OR.DoPhoton"] = "DoPhotonOR";
1399 m_conf_to_prop["OR.DoEleJet"] = "DoEleJetOR";
1400 m_conf_to_prop["OR.DoElEl"] = "DoElElOR";
1401 m_conf_to_prop["OR.DoElMu"] = "DoElMuOR";
1402 m_conf_to_prop["OR.DoMuonJet"] = "DoMuonJetOR";
1403 m_conf_to_prop["OR.Bjet"] = "DoBjetOR";
1404 m_conf_to_prop["OR.ElBjet"] = "DoElBjetOR";
1405 m_conf_to_prop["OR.MuBjet"] = "DoMuBjetOR";
1406 m_conf_to_prop["OR.TauBjet"] = "DoTauBjetOR";
1407 m_conf_to_prop["OR.DoFatJets"] = "DoFatJetOR";
1408 m_conf_to_prop["OR.RemoveCaloMuons"] = "ORRemoveCaloMuons";
1409 m_conf_to_prop["OR.MuJetApplyRelPt"] = "ORMuJetApplyRelPt";
1410 m_conf_to_prop["OR.InputLabel"] = "ORInputLabel";
1411 m_conf_to_prop["Trigger.UpstreamMatching"] = "TriggerUpstreamMatching";
1412
1413 m_conf_to_prop["SigLep.RequireIso"] = "SigLepRequireIso";
1414 m_conf_to_prop["SigEl.RequireIso"] = "SigElRequireIso";
1415 m_conf_to_prop["SigMu.RequireIso"] = "SigMuRequireIso";
1416 m_conf_to_prop["SigPh.RequireIso"] = "SigPhRequireIso";
1417 m_conf_to_prop["SigLepPh.IsoCloseByOR"] = "SigLepPhIsoCloseByOR";
1418 m_conf_to_prop["MET.RemoveOverlappingCaloTaggedMuons"] = "METRemoveORCaloTaggedMuons";
1419 m_conf_to_prop["MET.DoSetMuonJetEMScale"] = "METDoSetMuonJetEMScale";
1420 m_conf_to_prop["MET.DoRemoveMuonJets"] = "METDoRemoveMuonJets";
1421 m_conf_to_prop["MET.DoUseGhostMuons"] = "METUseGhostMuons";
1422 m_conf_to_prop["MET.DoMuonEloss"] = "METDoMuonEloss";
1423
1424 m_conf_to_prop["MET.DoTrkSyst"] = "METDoTrkSyst";
1425 m_conf_to_prop["MET.DoCaloSyst"] = "METDoCaloSyst";
1426
1427 m_conf_to_prop["Tau.DoTruthMatching"] = "TauDoTruthMatching";
1428 //
1429
1430 configFromFile(m_slices["ele"], "Slices.Ele", rEnv, true);
1431 configFromFile(m_slices["pho"], "Slices.Pho", rEnv, true);
1432 configFromFile(m_slices["mu"], "Slices.Mu", rEnv, true);
1433 configFromFile(m_slices["tau"], "Slices.Tau", rEnv, true);
1434 configFromFile(m_slices["jet"], "Slices.Jet", rEnv, true);
1435 configFromFile(m_slices["bjet"], "Slices.BJet", rEnv, true);
1436 configFromFile(m_slices["fjet"], "Slices.FJet", rEnv, true);
1437 configFromFile(m_slices["tjet"], "Slices.TJet", rEnv, true);
1438 configFromFile(m_slices["met"], "Slices.MET", rEnv, true);
1439 //
1440 configFromFile(m_isRun3, "IsRun3", rEnv, false);
1441 //
1442 configFromFile(m_eleBaselinePt, "EleBaseline.Pt", rEnv, 10000.);
1443 configFromFile(m_eleBaselineEta, "EleBaseline.Eta", rEnv, 2.47);
1444 configFromFile(m_eleIdBaseline, "EleBaseline.Id", rEnv, "LooseAndBLayerLLH");
1445 configFromFile(m_eleBaselineIso_WP, "EleBaseline.Iso", rEnv, "None");
1446 configFromFile(m_eleConfigBaseline, "EleBaseline.Config", rEnv, "None");
1447 configFromFile(m_eleBaselineCrackVeto, "EleBaseline.CrackVeto", rEnv, false);
1448 configFromFile(m_force_noElId, "Ele.ForceNoId", rEnv, false);
1449
1450 //
1451 configFromFile(m_elePt, "Ele.Et", rEnv, 25000.);
1452 configFromFile(m_eleEta, "Ele.Eta", rEnv, 2.47);
1453 configFromFile(m_eleCrackVeto, "Ele.CrackVeto", rEnv, false);
1454 configFromFile(m_eleIso_WP, "Ele.Iso", rEnv, "Loose_VarRad");
1455 configFromFile(m_eleIsoHighPt_WP, "Ele.IsoHighPt", rEnv, "HighPtCaloOnly");
1456 configFromFile(m_eleIsoHighPtThresh, "Ele.IsoHighPtThresh", rEnv, 200e3);
1457 configFromFile(m_eleChID_WP, "Ele.CFT", rEnv, "None"); // Loose is the only one supported for the moment, and not many clients yet.
1458 configFromFile(m_eleChIso, "Ele.CFTIso", rEnv, true); // use charge ID SFs without iso applied
1459 configFromFile(m_eleChID_signal, "Ele.CFTSignal", rEnv, !m_eleChID_WP.empty()); // Require ECID as part of the signal lepton definition
1460 configFromFile(m_eleId, "Ele.Id", rEnv, "TightLLH");
1461 configFromFile(m_eleLRT, "Ele.LRTOR", rEnv, false);
1462 configFromFile(m_eleLRT_strat, "Ele.LRTORStrat", rEnv, 0);
1463 configFromFile(m_eleConfig, "Ele.Config", rEnv, "None");
1464 configFromFile(m_eled0sig, "Ele.d0sig", rEnv, 5.);
1465 configFromFile(m_elez0, "Ele.z0", rEnv, 0.5);
1466 configFromFile(m_elebaselined0sig, "EleBaseline.d0sig", rEnv, -99.);
1467 configFromFile(m_elebaselinez0, "EleBaseline.z0", rEnv, 0.5);
1468 configFromFile(m_eleIdExpert, "Ele.IdExpert", rEnv, false);
1469 configFromFile(m_EG_corrModel, "Ele.EffNPcorrModel", rEnv, "TOTAL");
1470 configFromFile(m_EG_corrFNList, "Ele.EffCorrFNList", rEnv, "None");
1471 configFromFile(m_electronTriggerSFStringSingle, "Ele.TriggerSFStringSingle", rEnv, "SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0");
1472 configFromFile(m_eleEffMapFilePath, "Ele.EffMapFilePath", rEnv, "ElectronEfficiencyCorrection/2015_2025/rel22.2/2025_Run3_Consolidated_Recommendation_v4/map2.txt");
1473 configFromFile(m_eleAllowRun3TrigSFFallback, "Ele.AllowRun3TrigSFFallback", rEnv, false);
1474 configFromFile(m_eleForceFullSimCalib, "Ele.ForceFullSimCalib", rEnv, false);
1475
1476 configFromFile(m_trig2015combination_singleLep, "Trig.Singlelep2015", rEnv, "e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose || mu20_iloose_L1MU15_OR_mu40");
1477 configFromFile(m_trig2016combination_singleLep, "Trig.Singlelep2016", rEnv, "e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0 || mu26_ivarmedium_OR_mu50");
1478 configFromFile(m_trig2017combination_singleLep, "Trig.Singlelep2017", rEnv, "e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0 || mu26_ivarmedium_OR_mu50");
1479 configFromFile(m_trig2018combination_singleLep, "Trig.Singlelep2018", rEnv, "e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0 || mu26_ivarmedium_OR_mu50");
1480 configFromFile(m_trig2022combination_singleLep, "Trig.Singlelep2022", rEnv, "e26_lhtight_ivarloose_L1EM22VHI_OR_e60_lhmedium_L1EM22VHI_OR_e140_lhloose_L1EM22VHI || HLT_mu24_ivarmedium_L1MU14FCH_OR_HLT_mu50_L1MU14FCH");
1481 configFromFile(m_trig2023combination_singleLep, "Trig.Singlelep2023", rEnv, "e26_lhtight_ivarloose_L1eEM26M_OR_e60_lhmedium_L1eEM26M_OR_e140_lhloose_L1eEM26M || HLT_mu24_ivarmedium_L1MU14FCH_OR_HLT_mu50_L1MU14FCH");
1482 configFromFile(m_trig2024combination_singleLep, "Trig.Singlelep2024", rEnv, "e26_lhtight_ivarloose_L1eEM26M_OR_e60_lhmedium_L1eEM26M_OR_e140_lhloose_L1eEM26M || HLT_mu24_ivarmedium_L1MU14FCH_OR_HLT_mu50_L1MU14FCH");
1483 configFromFile(m_trigNToys_diLep, "Trig.DilepNToys", rEnv, 250); // 0 means calculate from formula instead - needs to be supported for the trigger combination
1484 configFromFile(m_trig2015combination_diLep, "Trig.Dilep2015", rEnv, "e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose || mu20_iloose_L1MU15_OR_mu40 || 2e12_lhloose_L12EM10VH || e17_lhloose_mu14 || e7_lhmedium_mu24 || mu18_mu8noL1 || 2mu10");
1485 configFromFile(m_trig2016combination_diLep, "Trig.Dilep2016", rEnv, "e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0 || mu26_ivarmedium_OR_mu50 || 2e17_lhvloose_nod0 || e17_lhloose_nod0_mu14 || e7_lhmedium_nod0_mu24 || e26_lhmedium_nod0_L1EM22VHI_mu8noL1 || mu22_mu8noL1 || 2mu14");
1486 configFromFile(m_trig2017combination_diLep, "Trig.Dilep2017", rEnv, "e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0 || mu26_ivarmedium_OR_mu50 || 2e24_lhvloose_nod0 || e17_lhloose_nod0_mu14 || e7_lhmedium_nod0_mu24 || e26_lhmedium_nod0_mu8noL1 || mu22_mu8noL1 || 2mu14");
1487 configFromFile(m_trig2018combination_diLep, "Trig.Dilep2018", rEnv, "e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0 || mu26_ivarmedium_OR_mu50 || 2e24_lhvloose_nod0 || e17_lhloose_nod0_mu14 || e7_lhmedium_nod0_mu24 || e26_lhmedium_nod0_mu8noL1 || mu22_mu8noL1 || 2mu14");
1488 // configFromFile(m_trig2022combination_diLep, "Trig.Dilep2022", rEnv, "");
1489 configFromFile(m_trigNToys_multiLep, "Trig.MultiNToys", rEnv, 250); // 0 means calculate from formula instead - needs to be supported for the trigger combination
1490 configFromFile(m_trig2015combination_multiLep, "Trig.Multi2015", rEnv, "e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose || mu20_iloose_L1MU15_OR_mu40 || 2e12_lhloose_L12EM10VH || e17_lhloose_2e9_lhloose || 2e12_lhloose_mu10 || e12_lhloose_2mu10 || e17_lhloose_mu14 || e7_lhmedium_mu24 || mu18_mu8noL1 || 2mu10 || 3mu6");
1491 configFromFile(m_trig2016combination_multiLep, "Trig.Multi2016", rEnv, "e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0 || mu26_ivarmedium_OR_mu50 || 2e17_lhvloose_nod0 || e17_lhloose_nod0_mu14 || e7_lhmedium_nod0_mu24 || e26_lhmedium_nod0_L1EM22VHI_mu8noL1 || e17_lhloose_nod0_2e9_lhloose_nod0 || e12_lhloose_nod0_2mu10 || 2e12_lhloose_nod0_mu10 || mu22_mu8noL1 || 2mu14 || 3mu6");
1492 configFromFile(m_trig2017combination_multiLep, "Trig.Multi2017", rEnv, "e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0 || mu26_ivarmedium_OR_mu50 || 2e24_lhvloose_nod0 || e17_lhloose_nod0_mu14 || e7_lhmedium_nod0_mu24 || e26_lhmedium_nod0_mu8noL1 || e24_lhvloose_nod0_2e12_lhvloose_nod0_L1EM20VH_3EM10VH || e12_lhloose_nod0_2mu10 || 2e12_lhloose_nod0_mu10 || mu22_mu8noL1 || 2mu14 || 3mu6");
1493 configFromFile(m_trig2018combination_multiLep, "Trig.Multi2018", rEnv, "e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0 || mu26_ivarmedium_OR_mu50 || 2e24_lhvloose_nod0 || e17_lhloose_nod0_mu14 || e7_lhmedium_nod0_mu24 || e26_lhmedium_nod0_mu8noL1 || e24_lhvloose_nod0_2e12_lhvloose_nod0_L1EM20VH_3EM10VH || e12_lhloose_nod0_2mu10 || 2e12_lhloose_nod0_mu10 || mu22_mu8noL1 || 2mu14 || 3mu6");
1494 // configFromFile(m_trig2022combination_multiLep, "Trig.Multi2022", rEnv, "");
1495 configFromFile(m_trigNToys_diPhoton, "Trig.DiphotonNToys", rEnv, 250); // 0 means calculate from formula instead - needs to be supported for the trigger combination
1496 configFromFile(m_trig2015combination_diPhoton, "Trig.Diphoton2015", rEnv, "g35_loose_g25_loose");
1497 configFromFile(m_trig2016combination_diPhoton, "Trig.Diphotonp2016", rEnv, "g35_loose_g25_loose");
1498 configFromFile(m_trig2017combination_diPhoton, "Trig.Diphotonp2017", rEnv, "g35_medium_g25_medium_L12EM20VH");
1499 configFromFile(m_trig2018combination_diPhoton, "Trig.Diphotonp2018", rEnv, "g35_medium_g25_medium_L12EM20VH");
1500 // configFromFile(m_trig2018combination_diPhoton, "Trig.Diphotonp2022", rEnv, "");
1501 //
1502 configFromFile(m_muBaselinePt, "MuonBaseline.Pt", rEnv, 10000.);
1503 configFromFile(m_muBaselineEta, "MuonBaseline.Eta", rEnv, 2.7);
1504 configFromFile(m_force_noMuId, "Muon.ForceNoId", rEnv, false);
1505 configFromFile(m_muBaselineIso_WP, "MuonBaseline.Iso", rEnv, "None");
1506 configFromFile(m_doTTVAsf, "Muon.TTVASF", rEnv, true);
1507 //
1508 configFromFile(m_muPt, "Muon.Pt", rEnv, 25000.);
1509 configFromFile(m_muEta, "Muon.Eta", rEnv, 2.7);
1510 configFromFile(m_muIso_WP, "Muon.Iso", rEnv, "Loose_VarRad");
1511 configFromFile(m_muIsoHighPt_WP, "Muon.IsoHighPt", rEnv, "Loose_VarRad");
1512 configFromFile(m_muIsoHighPtThresh, "Muon.IsoHighPtThresh", rEnv, 200e3);
1513 configFromFile(m_mud0sig, "Muon.d0sig", rEnv, 3.);
1514 configFromFile(m_muz0, "Muon.z0", rEnv, 0.5);
1515 configFromFile(m_mubaselined0sig, "MuonBaseline.d0sig", rEnv, -99.);
1516 configFromFile(m_mubaselinez0, "MuonBaseline.z0", rEnv, 0.5);
1517 configFromFile(m_murequirepassedHighPtCuts, "Muon.passedHighPt", rEnv, false);
1518 configFromFile(m_muHighPtExtraSmear, "Muon.HighPtExtraSmear", rEnv, false);
1519 configFromFile(m_muEffCorrForce1D, "Muon.EffCorrForce1D", rEnv, false);
1520 //
1521 configFromFile(m_muTriggerSFCalibRelease, "Muon.TriggerSFCalibRelease" ,rEnv, "None");
1522 configFromFile(m_muTriggerSFCalibFilename, "Muon.TriggerSFCalibFilename",rEnv, "None");
1523 //
1524 configFromFile(m_muCosmicz0, "MuonCosmic.z0", rEnv, 1.);
1525 configFromFile(m_muCosmicd0, "MuonCosmic.d0", rEnv, 0.2);
1526 //
1527 // LRT muons
1528 configFromFile(m_muLRT, "Muon.LRTOR", rEnv, false);
1529 //
1530 configFromFile(m_badmuQoverP, "BadMuon.qoverp", rEnv, 0.4);
1531 //
1532 configFromFile(m_muCalibrationMode, "Muon.CalibrationMode", rEnv, 0); // 0: correctData_CB
1533 //
1534 configFromFile(m_photonBaselinePt, "PhotonBaseline.Pt", rEnv, 25000.);
1535 configFromFile(m_photonBaselineEta, "PhotonBaseline.Eta", rEnv, 2.37);
1536 configFromFile(m_photonIdBaseline, "PhotonBaseline.Id", rEnv, "Tight");
1537 configFromFile(m_photonBaselineCrackVeto, "PhotonBaseline.CrackVeto", rEnv, true);
1538 configFromFile(m_photonBaselineIso_WP, "PhotonBaseline.Iso", rEnv, "None");
1539 //
1540 configFromFile(m_photonPt, "Photon.Pt", rEnv, 130000.);
1541 configFromFile(m_photonEta, "Photon.Eta", rEnv, 2.37);
1542 configFromFile(m_photonId, "Photon.Id", rEnv, "Tight");
1543 configFromFile(m_photonIso_WP, "Photon.Iso", rEnv, "FixedCutTight");
1544 configFromFile(m_photonTriggerName, "Photon.TriggerName", rEnv, "DI_PH_2015_2016_g20_tight_2016_g22_tight_2017_2018_g20_tight_icalovloose_L1EM15VHI"); // for symmetric diphoton triggers
1545 configFromFile(m_photonCrackVeto, "Photon.CrackVeto", rEnv, true);
1546 configFromFile(m_photonAllowLate, "Photon.AllowLate", rEnv, false);
1547 //
1548 configFromFile(m_tauPrePtCut, "Tau.PrePtCut", rEnv, 0.);
1549 configFromFile(m_tauPt, "Tau.Pt", rEnv, 20000.);
1550 configFromFile(m_tauEta, "Tau.Eta", rEnv, 2.5);
1551 configFromFile(m_tauId, "Tau.Id", rEnv, "Medium");
1552 configFromFile(m_tauConfigPath, "Tau.ConfigPath", rEnv, "default");
1553 configFromFile(m_tauIdBaseline, "TauBaseline.Id", rEnv, "Medium");
1554 configFromFile(m_tauConfigPathBaseline, "TauBaseline.ConfigPath", rEnv, "default");
1555 configFromFile(m_tauDoTTM, "Tau.DoTruthMatching", rEnv, false);
1556 //
1557 configFromFile(m_tauSmearingToolRecommendationTag,"Tau.SmearingToolRecommendationTag", rEnv, "2025-prerec");
1558 configFromFile(m_tauSmearingToolGenerator,"Tau.SmearingToolGenerator", rEnv, "PoPy");
1559 configFromFile(m_tauEffToolRecommendationTag,"Tau.EffToolRecommendationTag", rEnv, "2025-prerec");
1560 configFromFile(m_ApplyMVATESQualityCheck, "Tau.MVATESQualityCheck", rEnv, true);
1561 //
1562 configFromFile(m_jetPt, "Jet.Pt", rEnv, 20000.);
1563 configFromFile(m_jetEta, "Jet.Eta", rEnv, 2.8);
1564 configFromFile(m_JvtWP, "Jet.JvtWP", rEnv, "FixedEffPt"); // https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PileupJetRecommendations
1565 configFromFile(m_JvtPtMax, "Jet.JvtPtMax", rEnv, 60.0e3);
1566 configFromFile(m_JvtConfigRun2, "Jet.JvtConfigRun2", rEnv, "JetJvtEfficiency/May2024/NNJvtSFFile_Run2_EMPFlow.root", true); // empty string means dummy SF
1567 configFromFile(m_JvtConfigRun3, "Jet.JvtConfigRun3", rEnv, "JetJvtEfficiency/May2024/NNJvtSFFile_Run3_EMPFlow.root", true); // empty string means dummy SF
1568 configFromFile(m_jetUncertaintiesConfig, "Jet.UncertConfig", rEnv, getDefaultJetUncConfig() ); // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/JetUncertaintiesRel22/
1569 configFromFile(m_jetUncertaintiesAnalysisFile, "Jet.AnalysisFile", rEnv, "default"); // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/JetUncertaintiesRel21Summer2018SmallR
1570 configFromFile(m_jetUncertaintiesCalibArea, "Jet.UncertCalibArea", rEnv, "default"); // Defaults to default area set by tool
1571 configFromFile(m_jetUncertaintiesMCType, "Jet.UncertMCType", rEnv, "", true); // empty string means the MCType is guessed
1572 configFromFile(m_jetUncertaintiesPDsmearing, "Jet.UncertPDsmearing", rEnv, true); // for non "SimpleJER" config, run the PDSmear systematics. This are labelled with an __2 if they are being used, but otherwise will have the same tree name as the JET_JER systematic trees.
1573 configFromFile(m_fatJets, "Jet.LargeRcollection", rEnv, "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"); // set to "None" to turn off large jets
1574 configFromFile(m_fatJetUncConfig, "Jet.LargeRuncConfig", rEnv, "rel22/Spring2025_PreRec/R10_CategoryJES_FullJER_FullJMS.config");
1575 configFromFile(m_fatJetUncertaintiesPDsmearing, "Jet.LargeRUncertPDsmearing", rEnv, true); // for non "SimpleJER" config, run the PDSmear systematics. This are labelled with an __2 if they are being used, but otherwise will have the same tree name as the JET_JER systematic trees.
1576 configFromFile(m_fatJetUncVars, "Jet.LargeRuncVars", rEnv, "default"); // do all if not specified
1577 configFromFile(m_WtagConfig, "Jet.WtaggerConfig", rEnv, "SmoothedContainedWTagger_AntiKt10UFOCSSKSoftDrop_FixedSignalEfficiency80_20220221.dat");
1578 configFromFile(m_ZtagConfig, "Jet.ZtaggerConfig", rEnv, "SmoothedContainedZTagger_AntiKt10UFOCSSKSoftDrop_FixedSignalEfficiency80_20220221.dat");
1579 configFromFile(m_WZTaggerCalibArea, "Jet.WZTaggerCalibArea", rEnv, "Winter2024_R22_PreRecs/SmoothedWZTaggers/");
1580 configFromFile(m_ToptagConfig, "Jet.ToptaggerConfig", rEnv, "DNNTagger_AntiKt10UFOSD_TopInclusive80_Oct30.dat");
1581 configFromFile(m_JetTruthLabelName, "Jet.JetTruthLabelName", rEnv, "R10TruthLabel_R21Precision_2022v1");
1582 configFromFile(m_TopTaggerCalibArea, "Jet.TopTaggerCalibArea", rEnv, "Winter2024_R22_PreRecs/JSSWTopTaggerDNN/");
1583 configFromFile(m_jesConfig, "Jet.JESConfig", rEnv, m_isRun3 ? "AntiKt4EMPFlow_MC23a_PreRecR22_Phase2_CalibConfig_ResPU_EtaJES_GSC_241208_InSitu.config" : "PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config"); //https://twiki.cern.ch/twiki/bin/view/AtlasProtected/ApplyJetCalibrationR22
1584 configFromFile(m_jesConfigAFII, "Jet.JESConfigAFII", rEnv, m_isRun3 ? "AntiKt4EMPFlow_MC23a_PreRecR22_Phase2_CalibConfig_ResPU_EtaJES_GSC_241208_InSitu.config" : "PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config");
1585 configFromFile(m_jesConfigJMS, "Jet.JESConfigJMS", rEnv, "JES_JMS_MC16Recommendation_Consolidated_MC_only_EMTopo_July2019_Rel21.config");
1586 configFromFile(m_jesConfigJMSData, "Jet.JESConfigJMSData", rEnv, "JES_JMS_MC16Recommendation_Consolidated_data_only_EMTopo_Sep2019_Rel21.config");
1587 configFromFile(m_jesConfigFat, "Jet.JESConfigFat", rEnv, "JES_MC20PreRecommendation_R10_UFO_CSSK_SoftDrop_JMS_R21Insitu_26Nov2024.config");
1588 configFromFile(m_jesConfigFatData, "Jet.JESConfigFatData", rEnv, "JES_MC20PreRecommendation_R10_UFO_CSSK_SoftDrop_JMS_R21Insitu_26Nov2024.config");
1589 configFromFile(m_jesCalibSeq, "Jet.CalibSeq", rEnv, "JetArea_Residual_EtaJES_GSC_Insitu");
1590 configFromFile(m_jesCalibSeqJMS, "Jet.CalibSeqJMS", rEnv, "JetArea_Residual_EtaJES_GSC");
1591 configFromFile(m_jesCalibSeqFat, "Jet.CalibSeqFat", rEnv, "EtaJES_JMS");
1592 configFromFile(m_jesCalibArea, "Jet.CalibArea", rEnv, m_isRun3 ? "00-04-83" : "00-04-82");
1593 //
1594 configFromFile(m_defaultTrackJets, "TrackJet.Coll", rEnv, "AntiKtVR30Rmax4Rmin02TrackJets");
1595 configFromFile(m_trkJetPt, "TrackJet.Pt", rEnv, 20000.);
1596 configFromFile(m_trkJetEta, "TrackJet.Eta", rEnv, 2.8);
1597 //
1598 configFromFile(m_badJetCut, "BadJet.Cut", rEnv, "LooseBad");
1599 //
1600 configFromFile(m_doFwdJVT, "FwdJet.doJVT", rEnv, false); // https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PileupJetRecommendations
1601 configFromFile(m_fJvtWP, "FwdJet.JvtWP", rEnv, "Loose");
1602 configFromFile(m_fJvtPtMax, "FwdJet.JvtPtMax", rEnv, 60e3);
1603 configFromFile(m_fJvtEtaMin, "FwdJet.JvtEtaMin", rEnv, 2.5);
1604 configFromFile(m_fJvtConfigRun2, "FwdJet.JvtConfigRun2", rEnv, "JetJvtEfficiency/May2024/fJvtSFFile_Run2_EMPFlow.root", true); // empty string means dummy SF
1605 configFromFile(m_fJvtConfigRun3, "FwdJet.JvtConfigRun3", rEnv, "JetJvtEfficiency/May2024/fJvtSFFile_Run2_EMPFlow.root", true); // empty string means dummy SF
1606 configFromFile(m_JMScalib, "Jet.JMSCalib", rEnv, false);
1607 //
1608 configFromFile(m_useBtagging, "Btag.enable", rEnv, true);
1609 configFromFile(m_BtagTagger, "Btag.Tagger", rEnv, "GN2v01");
1610 configFromFile(m_BtagWP, "Btag.WP", rEnv, "Continuous");
1611 configFromFile(m_BtagMinPt, "Btag.MinPt", rEnv, -1.); // Not calibrated below 20
1612
1613 configFromFile(m_bTaggingCalibrationFilePath, "Btag.CalibPath", rEnv, m_isRun3 ? "xAODBTaggingEfficiency/13p6TeV/MC23_2025-06-17_GN2v01_v4.root": "xAODBTaggingEfficiency/13TeV/MC20_2025-06-17_GN2v01_v4.root");
1614 configFromFile(m_BtagSystStrategy, "Btag.SystStrategy", rEnv, "SFEigen");
1615 configFromFile(m_EigenvectorReductionB, "Btag.EigenvectorReductionB", rEnv, "Loose");
1616 configFromFile(m_EigenvectorReductionC, "Btag.EigenvectorReductionC", rEnv, "Loose");
1617 configFromFile(m_EigenvectorReductionLight, "Btag.EigenvectorReductionLight", rEnv, "Loose");
1618
1619 configFromFile(m_useBtagging_trkJet, "BtagTrkJet.enable", rEnv, true);
1620 configFromFile(m_BtagTagger_trkJet, "BtagTrkJet.Tagger", rEnv, "DL1r");
1621 configFromFile(m_BtagWP_trkJet, "BtagTrkJet.WP", rEnv, "FixedCutBEff_77");
1622 configFromFile(m_BtagMinPt_trkJet, "BtagTrkJet.MinPt", rEnv, -1.); // Not calibrated below 10
1623 configFromFile(m_BtagKeyOverride, "Btag.KeyOverride", rEnv, "", true);
1624 //
1625 configFromFile(m_orDoBoostedElectron, "OR.DoBoostedElectron", rEnv, true);
1626 configFromFile(m_orBoostedElectronC1, "OR.BoostedElectronC1", rEnv, -999.); // set to positive number to override default
1627 configFromFile(m_orBoostedElectronC2, "OR.BoostedElectronC2", rEnv, -999.); // set to positive number to override default - specify in MeV (i.e. "10*GeV" will nor work in the config file)
1628 configFromFile(m_orBoostedElectronMaxConeSize, "OR.BoostedElectronMaxConeSize", rEnv, -999.); // set to positive number to override default
1629 configFromFile(m_orDoBoostedMuon, "OR.DoBoostedMuon", rEnv, true);
1630 configFromFile(m_orBoostedMuonC1, "OR.BoostedMuonC1", rEnv, -999.); // set to positive number to override default
1631 configFromFile(m_orBoostedMuonC2, "OR.BoostedMuonC2", rEnv, -999.); // set to positive number to override default - specify in MeV (i.e. "10*GeV" will nor work in the config file)
1632 configFromFile(m_orBoostedMuonMaxConeSize, "OR.BoostedMuonMaxConeSize", rEnv, -999.); // set to positive number to override default
1633 configFromFile(m_orDoMuonJetGhostAssociation, "OR.DoMuonJetGhostAssociation", rEnv, true);
1634 configFromFile(m_orDoTau, "OR.DoTau", rEnv, false);
1635 configFromFile(m_orDoPhoton, "OR.DoPhoton", rEnv, false);
1636 configFromFile(m_orDoEleJet, "OR.EleJet", rEnv, true);
1637 configFromFile(m_orDoElEl, "OR.ElEl", rEnv, false);
1638 configFromFile(m_orDoElMu, "OR.ElMu", rEnv, false);
1639 configFromFile(m_orDoMuonJet, "OR.MuonJet", rEnv, true);
1640 configFromFile(m_orDoBjet, "OR.Bjet", rEnv, false);
1641 configFromFile(m_orDoElBjet, "OR.ElBjet", rEnv, false);
1642 configFromFile(m_orDoMuBjet, "OR.MuBjet", rEnv, false);
1643 configFromFile(m_orDoTauBjet, "OR.TauBjet", rEnv, false);
1644 configFromFile(m_orApplyRelPt, "OR.MuJetApplyRelPt", rEnv, false);
1645 configFromFile(m_orMuJetPtRatio, "OR.MuJetPtRatio", rEnv, -999.);
1646 configFromFile(m_orMuJetTrkPtRatio, "OR.MuJetTrkPtRatio", rEnv, -999.);
1647 configFromFile(m_orRemoveCaloMuons, "OR.RemoveCaloMuons", rEnv, true);
1648 configFromFile(m_orMuJetInnerDR, "OR.MuJetInnerDR", rEnv, -999.);
1649 configFromFile(m_orBtagWP, "OR.BtagWP", rEnv, "FixedCutBEff_85");
1650 configFromFile(m_orInputLabel, "OR.InputLabel", rEnv, "selected"); //"baseline"
1651 configFromFile(m_orPhotonFavoured, "OR.PhotonFavoured", rEnv, false);
1652 configFromFile(m_orBJetPtUpperThres, "OR.BJetPtUpperThres", rEnv, -1.); // upper pt threshold of b-jet in OR in unit of MeV, -1 means no pt threshold
1653 configFromFile(m_orLinkOverlapObjects, "OR.LinkOverlapObjects", rEnv, false);
1654 //
1655 configFromFile(m_orDoFatjets, "OR.DoFatJets", rEnv, false);
1656 configFromFile(m_EleFatJetDR, "OR.EleFatJetDR", rEnv, -999.);
1657 configFromFile(m_JetFatJetDR, "OR.JetFatJetDR", rEnv, -999.);
1658 //
1659 configFromFile(m_useTRUTH3, "Truth.UseTRUTH3", rEnv, true);
1661 configFromFile(m_upstreamTriggerMatching, "Trigger.UpstreamMatching", rEnv, false);
1662 configFromFile(m_trigMatchingPrefix, "Trigger.MatchingPrefix", rEnv, "", true);
1663 //
1664 configFromFile(m_doIsoSignal, "SigLep.RequireIso", rEnv, true);
1665 configFromFile(m_doElIsoSignal, "SigEl.RequireIso", rEnv, m_doIsoSignal);
1666 configFromFile(m_doMuIsoSignal, "SigMu.RequireIso", rEnv, m_doIsoSignal);
1667 configFromFile(m_doPhIsoSignal, "SigPh.RequireIso", rEnv, m_doIsoSignal);
1668 configFromFile(m_useSigLepForIsoCloseByOR, "SigLepPh.UseSigLepForIsoCloseByOR", rEnv, false);
1669 configFromFile(m_IsoCloseByORpassLabel, "SigLepPh.IsoCloseByORpassLabel", rEnv, "None");
1670
1671 //
1672 configFromFile(m_eleTerm, "MET.EleTerm", rEnv, "RefEle");
1673 configFromFile(m_gammaTerm, "MET.GammaTerm", rEnv, "RefGamma");
1674 configFromFile(m_tauTerm, "MET.TauTerm", rEnv, "RefTau");
1675 configFromFile(m_jetTerm, "MET.JetTerm", rEnv, "RefJet");
1676 configFromFile(m_muonTerm, "MET.MuonTerm", rEnv, "Muons");
1677 configFromFile(m_inputMETSuffix, "MET.InputSuffix", rEnv, "", true); // May be empty
1678 configFromFile(m_outMETTerm, "MET.OutputTerm", rEnv, "Final");
1679 configFromFile(m_metRemoveOverlappingCaloTaggedMuons, "MET.RemoveOverlappingCaloTaggedMuons", rEnv, true);
1680 configFromFile(m_metDoSetMuonJetEMScale, "Met.DoSetMuonJetEMScale", rEnv, true);
1681 configFromFile(m_metDoRemoveMuonJets, "MET.DoRemoveMuonJets", rEnv, true);
1682 configFromFile(m_metUseGhostMuons, "MET.UseGhostMuons", rEnv, false);
1683 configFromFile(m_metDoMuonEloss, "MET.DoMuonEloss", rEnv, false);
1684 configFromFile(m_metGreedyPhotons, "MET.DoGreedyPhotons", rEnv, false);
1685 configFromFile(m_metVeryGreedyPhotons, "MET.DoVeryGreedyPhotons", rEnv, false);
1686
1687 configFromFile(m_trkMETsyst, "MET.DoTrkSyst", rEnv, true);
1688 configFromFile(m_caloMETsyst, "MET.DoCaloSyst", rEnv, false);
1689 configFromFile(m_trkJetsyst, "MET.DoTrkJetSyst", rEnv, false);
1690 configFromFile(m_metsysConfigPrefix, "METSys.ConfigPrefix", rEnv, "METUtilities/R22_PreRecs");
1691 configFromFile(m_metJetSelection, "MET.JetSelection", rEnv, "Tight"); // Loose, Tight (default), Tighter, Tenacious
1692 configFromFile(m_softTermParam, "METSig.SoftTermParam", rEnv, met::Random);
1693 configFromFile(m_treatPUJets, "METSig.TreatPUJets", rEnv, true);
1694 configFromFile(m_doPhiReso, "METSig.DoPhiReso", rEnv, false);
1695 //
1696 configFromFile(m_prwActualMu2017File, "PRW.ActualMu2017File", rEnv, "GoodRunsLists/data17_13TeV/20180619/physics_25ns_Triggerno17e33prim.actualMu.OflLumi-13TeV-010.root");
1697 configFromFile(m_prwActualMu2018File, "PRW.ActualMu2018File", rEnv, "GoodRunsLists/data18_13TeV/20190318/physics_25ns_Triggerno17e33prim.actualMu.OflLumi-13TeV-010.root");
1698 configFromFile(m_prwActualMu2022File, "PRW.ActualMu2022File", rEnv, "GoodRunsLists/data22_13p6TeV/20250321/purw.actualMu.root");
1699 configFromFile(m_prwActualMu2023File, "PRW.ActualMu2023File", rEnv, "GoodRunsLists/data23_13p6TeV/20250321/purw.actualMu.root");
1700 configFromFile(m_prwActualMu2024File, "PRW.ActualMu2024File", rEnv, "GoodRunsLists/data24_13p6TeV/20241118/purw.actualMu.root");
1701 configFromFile(m_prwDataSF, "PRW.DataSF", rEnv, 1./1.03); // default for mc16, see: https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/ExtendedPileupReweighting#Tool_Properties
1702 configFromFile(m_prwDataSF_UP, "PRW.DataSF_UP", rEnv, 1./0.99); // mc16 uncertainty? defaulting to the value in PRWtool
1703 configFromFile(m_prwDataSF_DW, "PRW.DataSF_DW", rEnv, 1./1.07); // mc16 uncertainty? defaulting to the value in PRWtool
1704 configFromFile(m_runDepPrescaleWeightPRW, "PRW.UseRunDependentPrescaleWeight", rEnv, false); // If set to true, the prescale weight is the luminosity-average prescale over the lumiblocks in the unprescaled lumicalc file in the PRW tool.
1705 configFromFile(m_autoconfigPRWPath, "PRW.autoconfigPRWPath", rEnv, "dev/PileupReweighting/share/");
1706 configFromFile(m_autoconfigPRWFile, "PRW.autoconfigPRWFile", rEnv, "None");
1707 configFromFile(m_autoconfigPRWCombinedmode, "PRW.autoconfigPRWCombinedmode", rEnv, false);
1708 configFromFile(m_autoconfigPRWRPVmode, "PRW.autoconfigPRWRPVmode", rEnv, false);
1709 configFromFile(m_autoconfigPRWRtags, "PRW.autoconfigPRWRtags", rEnv, "mc20a:r13167_r14859,mc20d:r13144_r14860,mc20e:r13145_r14861,mc21a:r13752_r13829,mc23a:r14622_r14932_r15540,mc23c:r14799_r14908,mc23d:r15224_r15530,mc23e:r16083"); // Tag details here: https://twiki.cern.ch/twiki/bin/view/AtlasProtected/AtlasProductionGroup
1710 configFromFile(m_commonPRWFileMC20a, "PRW.commonPRWFileMC20a", rEnv, "PileupReweighting/mc20_common/mc20a.284500.physlite.prw.v1.root");
1711 configFromFile(m_commonPRWFileMC20d, "PRW.commonPRWFileMC20d", rEnv, "PileupReweighting/mc20_common/mc20d.300000.physlite.prw.v1.root");
1712 configFromFile(m_commonPRWFileMC20e, "PRW.commonPRWFileMC20e", rEnv, "PileupReweighting/mc20_common/mc20e.310000.physlite.prw.v1.root");
1713 configFromFile(m_commonPRWFileMC21a, "PRW.commonPRWFileMC21a", rEnv, "PileupReweighting/mc21_common/mc21a.410000.physlite.prw.v1.root");
1714 configFromFile(m_commonPRWFileMC23a, "PRW.commonPRWFileMC23a", rEnv, "PileupReweighting/mc23_common/mc23a.410000.physlite.prw.v2.root");
1715 configFromFile(m_commonPRWFileMC23c, "PRW.commonPRWFileMC23c", rEnv, "PileupReweighting/mc23_common/mc23c.450000.physlite.prw.v1.root");
1716 configFromFile(m_commonPRWFileMC23d, "PRW.commonPRWFileMC23d", rEnv, "PileupReweighting/mc23_common/mc23d.450000.physlite.prw.v1.root");
1717 configFromFile(m_commonPRWFileMC23e, "PRW.commonPRWFileMC23e", rEnv, "PileupReweighting/mc23_common/mc23e.470000.physlite.prw.v1.root");
1718 //
1719 configFromFile(m_strictConfigCheck, "StrictConfigCheck", rEnv, false);
1720
1721 // By now rEnv should be empty!
1722 if (rEnv.GetTable() && rEnv.GetTable()->GetSize()>0){
1723 ATH_MSG_ERROR("Found " << rEnv.GetTable()->GetSize() << " unparsed environment options:");
1724 rEnv.Print();
1725 ATH_MSG_ERROR("Please fix your configuration!");
1726 return StatusCode::FAILURE;
1727 }
1728
1729 // Set up the correct configuration files for the large-R jet tagging corresponding to the input tagger config
1730 if (!m_WtagConfig.empty()) {
1731 if (m_WtagConfig.find("Efficiency50") != std::string::npos){
1732 m_WTagUncConfig = "R10_SF_LCTopo_WTag_SigEff50.config";
1733 }
1734 else if (m_WtagConfig.find("Efficiency80") != std::string::npos){
1735 m_WTagUncConfig = "R10_SF_LCTopo_WTag_SigEff80.config";
1736 }
1737 else {
1738 ATH_MSG_ERROR("You have specified a large-R W-tag config without a matching uncertainties file. Please fix this. Currently the 50% and 80% WPs are supported");
1739 }
1740 }
1741 if (!m_ZtagConfig.empty()) {
1742 if (m_ZtagConfig.find("Efficiency50") != std::string::npos){
1743 m_ZTagUncConfig = "R10_SF_LCTopo_ZTag_SigEff50.config";
1744 }
1745 else if (m_ZtagConfig.find("Efficiency80") != std::string::npos){
1746 m_ZTagUncConfig = "R10_SF_LCTopo_ZTag_SigEff80.config";
1747 }
1748 else {
1749 ATH_MSG_ERROR("You have specified a large-R Z-tag config without a matching uncertainties file. Please fix this. Currently the 50% and 80% WPs are supported");
1750 }
1751 }
1752 std::string TopTagEff = "";
1753 std::string TopTagType = "";
1754 if (!m_ToptagConfig.empty()) {
1755 if (m_ToptagConfig.find("50") != std::string::npos){
1756 TopTagEff = "50";
1757 }
1758 else if (m_ToptagConfig.find("80") != std::string::npos){
1759 TopTagEff = "80";
1760 }
1761 else {
1762 ATH_MSG_ERROR("You have specified a large-R Top-tag config without a matching uncertainties file. Please fix this. Currently the 50% and 80% WPs are supported");
1763 }
1764 //
1765 if (m_ToptagConfig.find("Inclusive") != std::string::npos){
1766 TopTagType = "Inclusive";
1767 }
1768 else if (m_ToptagConfig.find("Contained") != std::string::npos){
1769 TopTagType = "Contained";
1770 }
1771 else {
1772 ATH_MSG_ERROR("You have specified a large-R Top-tag config without a matching uncertainties file. Please fix this. Currently the contained and inclusive WPs are supported");
1773 }
1774 m_TopTagUncConfig = "R10_SF_LCTopo_TopTag"+TopTagType+"_SigEff"+TopTagEff+".config";
1775 }
1776
1777 //** validate configuration
1779
1780 //** cache trigger chains for electron matching
1782
1783 //** cache trigger chains for matching (both electrons and muons)
1785
1793
1799
1805
1806 return StatusCode::SUCCESS;
1807}
std::vector< std::string > m_v_trigs23_cache_singleLep
std::vector< std::string > m_v_trigs18_cache_multiLep
void GetTriggerTokens(std::string, std::vector< std::string > &, std::vector< std::string > &, std::vector< std::string > &, std::vector< std::string > &, std::vector< std::string > &, std::vector< std::string > &, std::vector< std::string > &) const
Definition Trigger.cxx:338
std::vector< std::string > m_v_trigs22_cache_diLep
std::string m_jetUncertaintiesConfig
Prefix for trigger matchiing container name.
std::string m_jetUncertaintiesCalibArea
std::vector< std::string > m_v_trigs17_cache_multiLep
std::vector< std::string > m_v_trigs22_cache_singleLep
std::vector< std::string > m_v_trigs15_cache_multiLep
std::vector< std::string > m_v_trigs17_cache_diLep
std::vector< std::string > m_v_trigs18_cache_singleLep
std::string m_jesConfigJMSData
std::vector< std::string > m_v_trigs15_cache_diLep
std::vector< std::string > m_v_trigs22_cache_multiLep
StatusCode validConfig(bool strict=false) const
std::string m_jesCalibSeqJMS
std::vector< std::string > m_v_trigs24_cache_singleLep
std::vector< std::string > m_v_trigs18_cache_diLep
std::vector< std::string > m_v_trigs16_cache_multiLep
std::string m_jesConfigAFII
std::vector< std::string > m_v_trigs16_cache_singleLep
std::vector< std::string > m_v_trigs16_cache_diLep
std::string m_jetUncertaintiesAnalysisFile
std::string m_jetUncertaintiesMCType
void configFromFile(bool &property, const std::string &propname, TEnv &rEnv, bool defaultValue)
std::vector< std::string > m_v_trigs15_cache_singleLep
std::string getDefaultJetUncConfig()
std::vector< std::string > m_v_trigs17_cache_singleLep
std::string m_jesConfigFatData
std::string m_jesCalibSeqFat

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

◆ resetSystematics()

StatusCode ST::SUSYObjDef_xAOD::resetSystematics ( )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2102 of file SUSYObjDef_xAOD.cxx.

2102 {
2104}
StatusCode applySystematicVariation(const CP::SystematicSet &systConfig) override final
CP::SystematicSet m_defaultSyst

◆ setBoolProperty()

StatusCode ST::SUSYObjDef_xAOD::setBoolProperty ( const std::string & name,
const bool & property )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 878 of file SUSYObjDef_xAOD.cxx.

878 {
879 m_bool_prop_set.insert(name);
880 return this->setProperty(name, property);
881}
void setProperty(columnar::PythonToolHandle &self, const std::string &key, nb::object value)

◆ SetBtagWeightDecorations()

StatusCode ST::SUSYObjDef_xAOD::SetBtagWeightDecorations ( const xAOD::Jet & input,
const asg::AnaToolHandle< IBTaggingSelectionTool > & btagSelTool,
const std::string & btagTagger ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 1155 of file Jets.cxx.

1155 {
1156 double weight = 0.;
1157 if ( btagSelTool->getTaggerWeight(input, weight, false/*useVetoWP=false*/) != CP::CorrectionCode::Ok ) {
1158 ATH_MSG_ERROR( btagSelTool->name() << ": could not retrieve b-tag weight (" << btagTagger << ")." );
1159 return StatusCode::FAILURE;
1160 }
1161 dec_btag_weight(input) = weight;
1162 ATH_MSG_DEBUG( btagSelTool->name() << " b-tag weight: " << weight );
1163
1164 double btag_pb(-10), btag_pc(-10), btag_pu(-10), btag_ptau(-10);
1165 // following name change is needed given different name is used for GN2v00 in derivation and in CDI
1166 std::string actualTagger = btagTagger;
1167 if (btagTagger == "GN2v00LegacyWP" || btagTagger == "GN2v00NewAliasWP"){
1168 actualTagger = "GN2v00";
1169 }
1170 xAOD::BTaggingUtilities::getBTagging(input)->pb(actualTagger, btag_pb);
1171 xAOD::BTaggingUtilities::getBTagging(input)->pc(actualTagger, btag_pc);
1172 xAOD::BTaggingUtilities::getBTagging(input)->pu(actualTagger, btag_pu);
1173 xAOD::BTaggingUtilities::getBTagging(input)->pu(actualTagger, btag_ptau);
1174 dec_btag_pb(input) = btag_pb;
1175 dec_btag_pc(input) = btag_pc;
1176 dec_btag_pu(input) = btag_pu;
1177 dec_btag_ptau(input) = btag_ptau;
1178 ATH_MSG_DEBUG( btagSelTool->name() << " b-tag " << btagTagger << "-type pb: " << btag_pb );
1179 ATH_MSG_DEBUG( btagSelTool->name() << " b-tag " << btagTagger << "-type pc: " << btag_pc );
1180 ATH_MSG_DEBUG( btagSelTool->name() << " b-tag " << btagTagger << "-type pu: " << btag_pu );
1181 ATH_MSG_DEBUG( btagSelTool->name() << " b-tag " << btagTagger << "-type ptau: " << btag_ptau );
1182 // backwards compatibility
1183 if ( btagSelTool->name().find("DL1")!=std::string::npos ) {
1184 dec_btag_dl1pb(input) = btag_pb;
1185 dec_btag_dl1pc(input) = btag_pc;
1186 dec_btag_dl1pu(input) = btag_pu;
1187 }
1188 else {
1189 dec_btag_dl1pb(input) = -10;
1190 dec_btag_dl1pc(input) = -10;
1191 dec_btag_dl1pu(input) = -10;
1192 }
1193 return StatusCode::SUCCESS;
1194 }
virtual CP::CorrectionCode getTaggerWeight(const xAOD::Jet &jet, double &tagweight) const =0
bool pc(const std::string &taggername, double &value) const
bool pu(const std::string &taggername, double &value) const
bool pb(const std::string &taggername, double &value) const
static const SG::Decorator< float > dec_btag_dl1pu("btag_dl1pu")
static const SG::Decorator< float > dec_btag_dl1pc("btag_dl1pc")
static const SG::Decorator< float > dec_btag_pu("btag_pu")
static const SG::Decorator< float > dec_btag_pc("btag_pc")
static const SG::Decorator< float > dec_btag_pb("btag_pb")
static const SG::Decorator< float > dec_btag_dl1pb("btag_dl1pb")
static const SG::Decorator< float > dec_btag_ptau("btag_ptau")
const BTagging * getBTagging(const SG::AuxElement &part)
Access the default xAOD::BTagging object associated to an object.

◆ setDataSource()

void ST::SUSYObjDef_xAOD::setDataSource ( int source)

Definition at line 1206 of file SUSYObjDef_xAOD.cxx.

1206 {
1207 if (source == 0) m_dataSource = Data;
1208 else if (source == 1) m_dataSource = FullSim;
1209 else if (source == 2) m_dataSource = AtlfastII;
1210 else ATH_MSG_ERROR("Trying to set data source to unknown type (" << source << ")");
1211}

◆ setUseIncidents()

void asg::AsgMetadataTool::setUseIncidents ( const bool flag)
inlineprotectedinherited

Definition at line 132 of file AsgMetadataTool.h.

133 {
135 }
bool flag
Definition master.py:29

◆ split()

const std::vector< std::string > ST::SUSYObjDef_xAOD::split ( const std::string & s,
const std::string & delim ) const
protected

Definition at line 1810 of file SUSYObjDef_xAOD.cxx.

1810 {
1811 assert(delim.length() == 1);
1812 std::vector<std::string> retval;
1813 retval.reserve(std::count(s.begin(), s.end(), delim[0]) + 1);
1814 // if only 1
1815 if (s.find(delim)==std::string::npos) {
1816 retval.emplace_back(s);
1817 return retval;
1818 }
1819 // if need to split
1820 size_t last = 0;
1821 size_t next = 0;
1822 bool gothere=false;
1823 while ((next = s.find(delim, last)) != std::string::npos) {
1824 retval.emplace_back(s.substr(last, next - last));
1825 last = next + delim.length();
1826 gothere=true;
1827 }
1828 if(gothere)
1829 retval.emplace_back(s.substr(last));
1830
1831 return retval;
1832}

◆ SUSYToolsInit()

StatusCode SUSYObjDef_xAOD::SUSYToolsInit ( )
private

Definition at line 113 of file SUSYToolsInit.cxx.

114{
115 if (m_dataSource < 0) {
116 ATH_MSG_FATAL("Data source incorrectly configured!!");
117 ATH_MSG_FATAL("You must set the DataSource property to Data, FullSim or AtlfastII !!");
118 ATH_MSG_FATAL("Expect segfaults if you're not checking status codes, which you should be !!");
119 return StatusCode::FAILURE;
120 }
121
122 if (m_subtool_init) {
123 ATH_MSG_INFO("SUSYTools subtools already created. Ignoring this call.");
124 ATH_MSG_INFO("Note: No longer necessary to explicitly call SUSYToolsInit. Will avoid creating tools again.");
125 return StatusCode::SUCCESS;
126 }
127
128 // /////////////////////////////////////////////////////////////////////////////////////////
129 // Initialise PileupReweighting Tool
130
131 if (!m_prwTool.isUserConfigured()) {
132 ATH_MSG_DEBUG("Will now init the PRW tool");
133 std::vector<std::string> file_conf;
134 for (UInt_t i = 0; i < m_prwConfFiles.size(); i++) {
135 ATH_MSG_INFO("Adding PRW file: " << m_prwConfFiles.at(i));
136 file_conf.push_back(m_prwConfFiles.at(i));
137 }
138
139 std::vector<std::string> file_ilumi;
140 for (UInt_t i = 0; i < m_prwLcalcFiles.size(); i++) {
141 ATH_MSG_INFO("Adding ilumicalc file: " << m_prwLcalcFiles.at(i));
142 file_ilumi.push_back(m_prwLcalcFiles.at(i));
143 }
144
145 m_prwTool.setTypeAndName("CP::PileupReweightingTool/PrwTool");
146 ATH_CHECK( m_prwTool.setProperty("ConfigFiles", file_conf) );
147 ATH_CHECK( m_prwTool.setProperty("LumiCalcFiles", file_ilumi) );
148 ATH_CHECK( m_prwTool.setProperty("DataScaleFactor", m_prwDataSF) ); // 1./1.03 -> default for mc16, see: https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/ExtendedPileupReweighting#Tool_Properties
149 ATH_CHECK( m_prwTool.setProperty("DataScaleFactorUP", m_prwDataSF_UP) ); // 1. -> old value (mc15), as the one for mc16 is still missing
150 ATH_CHECK( m_prwTool.setProperty("DataScaleFactorDOWN", m_prwDataSF_DW) ); // 1./1.18 -> old value (mc15), as the one for mc16 is still missing
151 ATH_CHECK( m_prwTool.setProperty("TrigDecisionTool", m_trigDecTool.getHandle()) );
152 ATH_CHECK( m_prwTool.setProperty("UseRunDependentPrescaleWeight", m_runDepPrescaleWeightPRW) );
153 ATH_CHECK( m_prwTool.setProperty("OutputLevel", MSG::WARNING) );
154 ATH_CHECK( m_prwTool.retrieve() );
155 } else {
156 ATH_MSG_INFO("Using user-configured PRW tool");
157 ATH_CHECK( m_prwTool.retrieve() );
158 }
159
161 // Initialize LRT systematics tool
162 if (!m_LRTuncTool.isUserConfigured() && !isData())
163 {
164 ATH_MSG_INFO("Initializing LRT uncertainty tool");
165 m_LRTuncTool.setTypeAndName("InDet::InclusiveTrackFilterTool/LRTUncTool");
166 ATH_CHECK( m_LRTuncTool.setProperty("Seed", 1) );
167 if (m_isRun3) {
168 if (m_mcCampaign == "mc23d" || m_mcCampaign == "mc23e")
169 ATH_MSG_WARNING("Please note that current ID recommendations only cover mc23a and not (yet) mc23d/e!");
170 ATH_CHECK( m_LRTuncTool.setProperty("calibFileLRTEff", "InDetTrackSystematicsTools/CalibData_25.2_2025-v00/LargeD0TrackingRecommendations_mc23a.root") );
171 }
172 else
173 ATH_CHECK( m_LRTuncTool.setProperty("calibFileLRTEff", "InDetTrackSystematicsTools/CalibData_24.0_2023-v00/LargeD0TrackingRecommendations_20230824.root") );
174 ATH_CHECK(m_LRTuncTool.retrieve());
175 } else {
176 ATH_MSG_INFO("Using user-configured LRT uncertainty tool");
177 ATH_CHECK(m_LRTuncTool.retrieve());
178 }
179
180 std::string toolName; // to be used for tool init below, keeping explicit string constants a minimum /CO
181
182 std::string jetname,jetcoll,fatjetcoll;
183 if (m_slices["jet"]) {
185 // Initialise jet calibration tool
186
187 // pick the right config file for the JES tool : https://twiki.cern.ch/twiki/bin/view/AtlasProtected/ApplyJetCalibrationR22
189 jetcoll = jetname + "Jets";
190
191 if (!m_jetCalibTool.isUserConfigured()) {
192 toolName = "JetCalibTool_" + jetname;
193 m_jetCalibTool.setTypeAndName("JetCalibrationTool/"+toolName);
194 std::string JES_config_file, calibseq;
195
197 ATH_MSG_ERROR("Unknown (unsupported) jet collection is used, (m_jetInputType = " << m_jetInputType << ")");
198 return StatusCode::FAILURE;
199 }
200
201 std::string JESconfig = isAtlfast() ? m_jesConfigAFII : m_jesConfig;
202 if(isAtlfast() && m_isRun3) {
203 ATH_MSG_WARNING("Jet JES/JER recommendations currently not available for fast sim in Run 3, falling back to full sim version");
204 JESconfig = m_jesConfig;
205 }
206
207 calibseq = m_jesCalibSeq;
208 JES_config_file = JESconfig;
209
210 // remove Insitu if it's in the string if not data
211 if (!isData()) {
212 std::string insitu("_Insitu");
213 auto found = calibseq.find(insitu);
214 if(found != std::string::npos){
215 calibseq.erase(found, insitu.length());
216 }
217 }
218
219 // JMS calibration (if requested)
220 if (m_JMScalib){
221 ATH_MSG_ERROR("JMS calibration is not supported yet for R22. Please modify your settings.");
222 return StatusCode::FAILURE;
223 }
224
225 // now instantiate the tool
226 ATH_CHECK( m_jetCalibTool.setProperty("JetCollection", jetname) );
227 ATH_CHECK( m_jetCalibTool.setProperty("ConfigFile", JES_config_file) );
228 ATH_CHECK( m_jetCalibTool.setProperty("CalibSequence", calibseq) );
229 ATH_CHECK( m_jetCalibTool.setProperty("CalibArea", m_jesCalibArea) );
230 ATH_CHECK( m_jetCalibTool.setProperty("IsData", isData()) );
231 ATH_CHECK( m_jetCalibTool.setProperty("OutputLevel", this->msg().level()) );
232 ATH_CHECK( m_jetCalibTool.retrieve() );
233 } else ATH_CHECK(m_jetCalibTool.retrieve());
234 }
235
236 if (m_slices["fjet"]) {
237 //same for fat groomed jets
238 fatjetcoll = m_fatJets;
239
240 if(fatjetcoll == "AnalysisLargeRJets") {
241 ATH_MSG_DEBUG("Fall back to calibration for AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets, original name for AnalysisLargeRJets");
242 fatjetcoll = "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets";
243 }
244 if (fatjetcoll.size()>3)fatjetcoll.erase(fatjetcoll.size()-4,4);
245 if (!m_jetFatCalibTool.isUserConfigured() && !m_fatJets.empty()) {
246 toolName = "JetFatCalibTool_" + m_fatJets;
247 m_jetFatCalibTool.setTypeAndName("JetCalibrationTool/"+toolName);
248
249 std::string jesConfigFat = m_jesConfigFat;
250 std::string jesCalibSeqFat = m_jesCalibSeqFat;
251 // add Insitu if data
252 if(isData()) jesCalibSeqFat += "_Insitu";
253
254 // now instantiate the tool
255 ATH_CHECK( m_jetFatCalibTool.setProperty("JetCollection", fatjetcoll) );
256 ATH_CHECK( m_jetFatCalibTool.setProperty("ConfigFile", jesConfigFat) );
257 ATH_CHECK( m_jetFatCalibTool.setProperty("CalibSequence", jesCalibSeqFat) );
258 // always set to false : https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/ApplyJetCalibrationR21
259 ATH_CHECK( m_jetFatCalibTool.setProperty("IsData", isData()) );
260 ATH_CHECK( m_jetFatCalibTool.setProperty("OutputLevel", this->msg().level()) );
261 ATH_CHECK( m_jetFatCalibTool.retrieve() );
262 } else if (m_jetFatCalibTool.isUserConfigured()) ATH_CHECK(m_jetFatCalibTool.retrieve());
263 }
264
265 if (m_slices["fjet"]) {
267 // Initialise Boson taggers: https://twiki.cern.ch/twiki/bin/view/AtlasProtected/BoostedJetTaggingRecommendationFullRun2#Higgs_taggers
268 if (!m_WTaggerTool.isUserConfigured() && !m_WtagConfig.empty()) {
269 m_WTaggerTool.setTypeAndName("SmoothedWZTagger/WTagger");
270 ATH_CHECK( m_WTaggerTool.setProperty("ContainerName", m_fatJets) );
271 ATH_CHECK( m_WTaggerTool.setProperty("ConfigFile", m_WtagConfig) );
272 ATH_CHECK( m_WTaggerTool.setProperty("CalibArea", m_WZTaggerCalibArea) );
273 ATH_CHECK( m_WTaggerTool.setProperty("IsMC",!isData()));
274 ATH_CHECK( m_WTaggerTool.setProperty("TruthBosonContainerName", "TruthBoson") ); // Set this if you are using a TRUTH3 style truth boson container;
275 ATH_CHECK( m_WTaggerTool.setProperty("TruthTopQuarkContainerName", "TruthTop") ); // Set this if you are using a TRUTH3 style truth boson container;
276#ifndef XAOD_STANDALONE
277 ATH_CHECK( m_WTaggerTool.setProperty("SuppressOutputDependence", true) );
278#endif
279 ATH_CHECK( m_WTaggerTool.setProperty("OutputLevel", this->msg().level()) );
280 ATH_CHECK( m_WTaggerTool.retrieve() );
281
282 // Retrieving DecorationName (needed to access tagging results downstream):
283 std::string WConfigPath = PathResolverFindCalibFile("BoostedJetTaggers/"+m_WZTaggerCalibArea+"/"+m_WtagConfig);
284 if ( m_WconfigReader.ReadFile( WConfigPath.c_str(), EEnvLevel(0) ) ) {
285 ATH_MSG_ERROR( "Error while reading large-R config file : " << WConfigPath );
286 return StatusCode::FAILURE;
287 }
288 else ATH_MSG_DEBUG( "Successfully read large-R config file : " << WConfigPath );
289
290 m_WDecorName = m_WconfigReader.GetValue("DecorationName" ,"");
291 ANA_MSG_DEBUG( "Found DecorationName in large-R config file : " << m_WDecorName );
292
293 } else if (m_WTaggerTool.isUserConfigured()) ATH_CHECK(m_WTaggerTool.retrieve());
294
295 if (!m_ZTaggerTool.isUserConfigured() && !m_ZtagConfig.empty()) {
296 m_ZTaggerTool.setTypeAndName("SmoothedWZTagger/ZTagger");
297 ATH_CHECK( m_ZTaggerTool.setProperty("ContainerName", m_fatJets) );
298 ATH_CHECK( m_ZTaggerTool.setProperty("ConfigFile", m_ZtagConfig) );
299 ATH_CHECK( m_ZTaggerTool.setProperty("CalibArea", m_WZTaggerCalibArea) );
300 ATH_CHECK( m_ZTaggerTool.setProperty("IsMC",!isData()));
301 ATH_CHECK( m_ZTaggerTool.setProperty("TruthBosonContainerName", "TruthBoson") ); // Set this if you are using a TRUTH3 style truth boson container;
302 ATH_CHECK( m_ZTaggerTool.setProperty("TruthTopQuarkContainerName", "TruthTop") ); // Set this if you are using a TRUTH3 style truth boson container;
303#ifndef XAOD_STANDALONE
304 ATH_CHECK( m_ZTaggerTool.setProperty("SuppressOutputDependence", true) );
305#endif
306 ATH_CHECK( m_ZTaggerTool.setProperty("OutputLevel", this->msg().level()) );
307 ATH_CHECK( m_ZTaggerTool.retrieve() );
308
309 // Retrieving DecorationName (needed to access tagging results downstream):
310 std::string ZConfigPath = PathResolverFindCalibFile("BoostedJetTaggers/"+m_WZTaggerCalibArea+"/"+m_ZtagConfig);
311 if ( m_ZconfigReader.ReadFile( ZConfigPath.c_str(), EEnvLevel(0) ) ) {
312 ATH_MSG_ERROR( "Error while reading large-R config file : " << ZConfigPath );
313 return StatusCode::FAILURE;
314 }
315 else ATH_MSG_DEBUG( "Successfully read large-R config file : " << ZConfigPath );
316
317 m_ZDecorName = m_ZconfigReader.GetValue("DecorationName" ,"");
318 ANA_MSG_DEBUG( "Found DecorationName in large-R config file : " << m_ZDecorName );
319
320 } else if (m_ZTaggerTool.isUserConfigured()) ATH_CHECK(m_ZTaggerTool.retrieve());
321
322 if (!m_TopTaggerTool.isUserConfigured() && !m_ToptagConfig.empty()) {
323 m_TopTaggerTool.setTypeAndName("JSSWTopTaggerDNN/TopTagger");
324 ATH_CHECK( m_TopTaggerTool.setProperty("ContainerName", m_fatJets) );
325 ATH_CHECK( m_TopTaggerTool.setProperty("ConfigFile", m_ToptagConfig) );
326 ATH_CHECK( m_TopTaggerTool.setProperty("CalibArea", m_TopTaggerCalibArea) );
327 ATH_CHECK( m_TopTaggerTool.setProperty("IsMC",!isData()));
328 ATH_CHECK( m_TopTaggerTool.setProperty("TruthBosonContainerName", "TruthBoson") ); // Set this if you are using a TRUTH3 style truth boson container;
329 ATH_CHECK( m_TopTaggerTool.setProperty("TruthTopQuarkContainerName", "TruthTop") ); // Set this if you are using a TRUTH3 style truth boson container;
330#ifndef XAOD_STANDALONE
331 ATH_CHECK( m_TopTaggerTool.setProperty("SuppressOutputDependence", true) );
332#endif
333 ATH_CHECK( m_TopTaggerTool.setProperty("OutputLevel", this->msg().level()) );
334 ATH_CHECK( m_TopTaggerTool.retrieve() );
335
336 // Retrieving DecorationName (needed to access tagging results downstream):
337 std::string TopConfigPath = PathResolverFindCalibFile("BoostedJetTaggers/"+m_TopTaggerCalibArea+"/"+m_ToptagConfig);
338 if ( m_TopconfigReader.ReadFile( TopConfigPath.c_str(), EEnvLevel(0) ) ) {
339 ATH_MSG_ERROR( "Error while reading large-R config file : " << TopConfigPath );
340 return StatusCode::FAILURE;
341 }
342 else ATH_MSG_DEBUG( "Successfully read large-R config file : " << TopConfigPath );
343
344 m_TopDecorName = m_TopconfigReader.GetValue("DecorationName" ,"");
345 ANA_MSG_DEBUG( "Found DecorationName in large-R config file : " << m_TopDecorName );
346
347 } else if (m_TopTaggerTool.isUserConfigured()) ATH_CHECK(m_TopTaggerTool.retrieve());
348
350 // Initialise JetTruthLabelingTool: https://twiki.cern.ch/twiki/bin/view/AtlasProtected/JetUncertaintiesRel21Summer2019LargeR#AnalysisBase_21_2_114_and_newer
351 if(!isData()) {
352 m_label_truthKey = fatjetcoll+"."+m_JetTruthLabelName;
353 ATH_CHECK(m_label_truthKey.initialize());
354
355 if (!m_jetTruthLabelingTool.isUserConfigured()) {
356 m_jetTruthLabelingTool.setTypeAndName("JetTruthLabelingTool/ST_JetTruthLabelingTool");
357 ATH_CHECK( m_jetTruthLabelingTool.setProperty("RecoJetContainer", m_fatJets) );
358 ATH_CHECK( m_jetTruthLabelingTool.setProperty("TruthLabelName", m_JetTruthLabelName) );
359 ATH_CHECK( m_jetTruthLabelingTool.setProperty("UseTRUTH3", m_useTRUTH3) ); // Set this to false only if you have the FULL !TruthParticles container in your input file
360 ATH_CHECK( m_jetTruthLabelingTool.setProperty("TruthParticleContainerName", "TruthParticles") );
361 ATH_CHECK( m_jetTruthLabelingTool.setProperty("TruthBosonContainerName", "TruthBoson") ); // Set this if you are using a TRUTH3 style truth boson container
362 ATH_CHECK( m_jetTruthLabelingTool.setProperty("TruthTopQuarkContainerName", "TruthTop") ); // Set this if you are using a TRUTH3 style truth top quark container
363 ATH_CHECK( m_jetTruthLabelingTool.setProperty("OutputLevel", this->msg().level()) );
364 ATH_CHECK( m_jetTruthLabelingTool.retrieve() );
365 } else if (m_jetTruthLabelingTool.isUserConfigured()) ATH_CHECK(m_jetTruthLabelingTool.retrieve());
366 }
367 }
368
369 if (m_slices["jet"] || m_slices["fjet"]) {
370
371
373 // Initialise jet uncertainty tool
374 // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/JetUncertaintiesRel22
375 ATH_MSG_INFO("Set up Jet Uncertainty tool...");
376
377 // if not set, derive the MCType from the simulation type and MC campaign
378 if (m_jetUncertaintiesMCType.empty()) m_jetUncertaintiesMCType = m_isRun3 ? (isAtlfast() ? "MC23AF3" : "MC23") : (isAtlfast() ? "AF3" : "MC20");
379
380 // large-R jets use MC20AF3 instead of AF3
382 if (m_fatJetUncertaintiesMCType == "AF3") {
383 m_fatJetUncertaintiesMCType = "MC20AF3";
384 }
385
386 if (!m_jetUncertaintiesTool.isUserConfigured()) {
387 std::string jetdef("AntiKt4" + xAOD::JetInput::typeName(xAOD::JetInput::Type(m_jetInputType)));
388
389 if(jetdef !="AntiKt4EMPFlow"){
390 ATH_MSG_WARNING("Jet Uncertaintes recommendations only exist for PFlow jets, falling back to AntiKt4EMPFlow");
391 jetdef = "AntiKt4EMPFlow";
392 }
393 toolName = "JetUncertaintiesTool_" + jetdef;
394
395 m_jetUncertaintiesTool.setTypeAndName("JetUncertaintiesTool/"+toolName);
396
397 ATH_CHECK( m_jetUncertaintiesTool.setProperty("JetDefinition", jetdef) );
399 ATH_CHECK( m_jetUncertaintiesTool.setProperty("IsData", false) ); // Never use the PDSmearing for the nominal tool.
400 ATH_CHECK( m_jetUncertaintiesTool.setProperty("ConfigFile", m_jetUncertaintiesConfig) );
403 ATH_CHECK( m_jetUncertaintiesTool.setProperty("OutputLevel", this->msg().level()) );
404 ATH_CHECK( m_jetUncertaintiesTool.retrieve() );
405 } else ATH_CHECK( m_jetUncertaintiesTool.retrieve() );
406
407 ATH_MSG_INFO("Set up Jet PD Smear Uncertainty tool...");
408
409 if (!m_jetUncertaintiesPDSmearTool.isUserConfigured() && m_jetUncertaintiesPDsmearing == true) {
410 std::string jetdef("AntiKt4" + xAOD::JetInput::typeName(xAOD::JetInput::Type(m_jetInputType)));
411
412 if(jetdef !="AntiKt4EMPFlow"){
413 ATH_MSG_WARNING("Jet Uncertaintes recommendations only exist for PFlow jets, falling back to AntiKt4EMPFlow");
414 jetdef = "AntiKt4EMPFlow";
415 }
416 toolName = "JetUncertaintiesPDSmearTool_" + jetdef;
417
418 m_jetUncertaintiesPDSmearTool.setTypeAndName("JetUncertaintiesTool/"+toolName);
419
420 // If, for some reason, you're trying to use the PDSmear, with the reduced set return an error (you shouldn't do this, you're just going to duplicate the SimpleJER results.
421 bool JERUncPDsmearing = isData() ? isData() : m_jetUncertaintiesPDsmearing;
422 if (m_jetUncertaintiesConfig.find("SimpleJER") != std::string::npos && JERUncPDsmearing){
423 ATH_MSG_ERROR("You are trying to use the SimpleJER set, with PDsmearing. There is no functionality for this. Please fix your config file. Either run with PDSmear set to false, or run with the AllJER or FullJER sets.");
424 return StatusCode::FAILURE;
425 }
426 ATH_CHECK( m_jetUncertaintiesPDSmearTool.setProperty("JetDefinition", jetdef) );
428 ATH_CHECK( m_jetUncertaintiesPDSmearTool.setProperty("IsData", true) ); // Set to True by default for PDSmear-named tool.
429 ATH_CHECK( m_jetUncertaintiesPDSmearTool.setProperty("PseudoDataJERsmearingMode", true) );
432 ATH_CHECK( m_jetUncertaintiesPDSmearTool.setProperty("OutputLevel", this->msg().level()) );
434 } else{
435 ATH_MSG_DEBUG("Do not retrieve the jet PD Smearing tool if it is not configured");
436 //ATH_CHECK( m_jetUncertaintiesPDSmearTool.retrieve() );
437 }
438 }
439
440 if (m_slices["fjet"]) {
441
442 // JetUncertaintiesTool handles JES, JER and JMS uncertainties for large-R jets
443 if (!m_fatjetUncertaintiesTool.isUserConfigured() && !m_fatJets.empty() && !m_fatJetUncConfig.empty()) {
444
445 ATH_MSG_INFO("Set up Large-R Jet Uncertainty tool...");
446
447 // Print warning about missing large-R jets uncertainties for FastSim in mc23
448 if (m_isRun3 && isAtlfast())
449 ATH_MSG_WARNING("Uncertainties for large-R jets in mc23 and fast simulation not yet available; be aware uncertainties might be not complete!");
450
451 toolName = "JetUncertaintiesTool_" + m_fatJets;
452 m_fatjetUncertaintiesTool.setTypeAndName("JetUncertaintiesTool/"+toolName);
453
454 ATH_CHECK( m_fatjetUncertaintiesTool.setProperty("JetDefinition", fatjetcoll) );
456 ATH_CHECK( m_fatjetUncertaintiesTool.setProperty("IsData", isData()) );
457 ATH_CHECK( m_fatjetUncertaintiesTool.setProperty("ConfigFile", m_fatJetUncConfig) );
459
460 //Restrict variables to be shifted if (required)
461 if( m_fatJetUncVars != "default" ){
462 std::vector<std::string> shift_vars = {};
463
464 std::string temp(m_fatJetUncVars);
465 do {
466 auto pos = temp.find(',');
467 shift_vars.push_back(temp.substr(0, pos));
468 if (pos == std::string::npos)
469 temp = "";
470 else
471 temp = temp.substr(pos + 1);
472
473 }
474 while (!temp.empty() );
475
476 ATH_CHECK( m_fatjetUncertaintiesTool.setProperty("VariablesToShift", shift_vars) );
477 }
478
479 ATH_CHECK( m_fatjetUncertaintiesTool.setProperty("OutputLevel", this->msg().level()) );
481 } else if (m_fatjetUncertaintiesTool.isUserConfigured()) ATH_CHECK(m_fatjetUncertaintiesTool.retrieve());
482
483
484 if (!m_fatjetUncertaintiesPDSmearTool.isUserConfigured() && !m_fatJets.empty() && !m_fatJetUncConfig.empty() && m_fatJetUncertaintiesPDsmearing == true) {
485
486 ATH_MSG_INFO("Set up Jet PD Smear Uncertainty tool...");
487
488 toolName = "JetUncertaintiesPDSmearTool_" + m_fatJets;
489 m_fatjetUncertaintiesPDSmearTool.setTypeAndName("JetUncertaintiesTool/"+toolName);
490
491 // If, for some reason, you're trying to use the PDSmear, with the reduced set return an error (you shouldn't do this, you're just going to duplicate the SimpleJER results.
492 bool JERUncPDsmearing = isData() ? isData() : m_fatJetUncertaintiesPDsmearing;
493 if (m_fatJetUncConfig.find("SimpleJER") != std::string::npos && JERUncPDsmearing){
494 ATH_MSG_ERROR("You are trying to use the SimpleJER set, with PDsmearing. There is no functionality for this. Please fix your config file. Either run with PDSmear set to false, or run with the AllJER or FullJER sets.");
495 return StatusCode::FAILURE;
496 }
497 ATH_CHECK( m_fatjetUncertaintiesPDSmearTool.setProperty("JetDefinition", fatjetcoll) );
499 ATH_CHECK( m_fatjetUncertaintiesPDSmearTool.setProperty("IsData", true) ); // Set to True by default for PDSmear-named tool.
500 ATH_CHECK( m_fatjetUncertaintiesPDSmearTool.setProperty("PseudoDataJERsmearingMode", true) );
503 ATH_CHECK( m_fatjetUncertaintiesPDSmearTool.setProperty("OutputLevel", this->msg().level()) );
505 } else{
506 ATH_MSG_DEBUG("Do not retrieve the jet PD Smearing tool if it is not configured");
507 }
508
509
510 // FFSmearingTool handles JMR uncertainties for large-R jets
511 if (!m_fatjetFFSmearingTool.isUserConfigured() && !m_fatJets.empty() && !m_fatJetUncConfig.empty()) {
512
513 ATH_MSG_INFO("Set up Large-R FFJetSmearingTool ...");
514
515 toolName = "FFJetSmearingTool_" + m_fatJets;
516 m_fatjetFFSmearingTool.setTypeAndName("CP::FFJetSmearingTool/"+toolName);
517
518 ATH_CHECK( m_fatjetFFSmearingTool.setProperty("MassDef", "UFO") );
520 ATH_CHECK( m_fatjetFFSmearingTool.setProperty("ConfigFile", "rel22/Spring2025_PreRec/R10_FullJMR.config") );
521 ATH_CHECK( m_fatjetFFSmearingTool.setProperty("OutputLevel", this->msg().level()) );
522 ATH_CHECK( m_fatjetFFSmearingTool.retrieve() );
523 } else if (m_fatjetFFSmearingTool.isUserConfigured()) ATH_CHECK(m_fatjetFFSmearingTool.retrieve());
524
525 // Need to keep track of systematics of FFJetSmearingTool
526 if (!m_fatJets.empty()) {
527 // m_fatjetFFSmearingSyst = CP::make_systematics_vector(m_fatjetFFSmearingTool->recommendedSystematics());
528 ATH_MSG_INFO("The following uncertainties have been defined for the m_fatjetFFSmearingTool");
529 for (auto & sysSet : m_fatjetFFSmearingTool->recommendedSystematics()){
530 m_fatjetFFSmearingSyst.push_back(CP::SystematicSet({sysSet}));
531 ATH_MSG_INFO(" - " << sysSet.name());
532 }
533 }
534
535 ATH_MSG_INFO(" Won't initialise Wtagger uncertainty tool for fat jets until we get rec for UFO");
536 // Won't initialise Wtagger uncertainty tool for fat jets until we get rec for UFO
537 /*
538 if (!m_WTagjetUncertaintiesTool.isUserConfigured() && !m_fatJets.empty() && !m_WtagConfig.empty() && !m_WTagUncConfig.empty()) {
539
540 toolName = "WTagJetUncertaintiesTool_" + m_fatJets;
541 m_WTagjetUncertaintiesTool.setTypeAndName("JetUncertaintiesTool/"+toolName);
542 ATH_CHECK( m_WTagjetUncertaintiesTool.setProperty("JetDefinition", fatjetcoll) );
543 ATH_CHECK( m_WTagjetUncertaintiesTool.setProperty("MCType", "MC16") );
544 ATH_CHECK( m_WTagjetUncertaintiesTool.setProperty("IsData", isData()) );
545 ATH_CHECK( m_WTagjetUncertaintiesTool.setProperty("ConfigFile", "rel21/Fall2020/"+m_WTagUncConfig) );
546 ATH_CHECK( m_WTagjetUncertaintiesTool.setProperty("OutputLevel", this->msg().level()) );
547 ATH_CHECK( m_WTagjetUncertaintiesTool.retrieve() );
548 } else if (m_WTagjetUncertaintiesTool.isUserConfigured()) ATH_CHECK(m_WTagjetUncertaintiesTool.retrieve());
549 */
550 ATH_MSG_INFO(" Won't initialise Ztagger uncertainty tool for fat jets until we get rec for UFO");
551 // Won't initialise Ztagger uncertainty tool for fat jets until we get rec for UFO
552 /*
553 if (!m_ZTagjetUncertaintiesTool.isUserConfigured() && !m_fatJets.empty() && !m_ZtagConfig.empty() && !m_ZTagUncConfig.empty()) {
554
555 toolName = "ZTagJetUncertaintiesTool_" + m_fatJets;
556 m_ZTagjetUncertaintiesTool.setTypeAndName("JetUncertaintiesTool/"+toolName);
557 ATH_CHECK( m_ZTagjetUncertaintiesTool.setProperty("JetDefinition", fatjetcoll) );
558 ATH_CHECK( m_ZTagjetUncertaintiesTool.setProperty("ConfigFile", "rel21/Fall2020/"+m_ZTagUncConfig) );
559 ATH_CHECK( m_ZTagjetUncertaintiesTool.setProperty("MCType", "MC16") );
560 ATH_CHECK( m_ZTagjetUncertaintiesTool.setProperty("IsData", isData()) );
561 ATH_CHECK( m_ZTagjetUncertaintiesTool.setProperty("OutputLevel", this->msg().level()) );
562 ATH_CHECK( m_ZTagjetUncertaintiesTool.retrieve() );
563 } else if (m_ZTagjetUncertaintiesTool.isUserConfigured()) ATH_CHECK(m_ZTagjetUncertaintiesTool.retrieve());
564 */
565 ATH_MSG_INFO(" Won't initialise top-tagger uncertainty tool for fat jets until we get rec for UFO");
566 // Won't initialise top-tagger uncertainty tool for fat jets until we get rec for UFO
567 /*
568 if (!m_TopTagjetUncertaintiesTool.isUserConfigured() && !m_fatJets.empty() && !m_ToptagConfig.empty() && !m_TopTagUncConfig.empty()) {
569
570 toolName = "TopTagJetUncertaintiesTool_" + m_fatJets;
571 m_TopTagjetUncertaintiesTool.setTypeAndName("JetUncertaintiesTool/"+toolName);
572 ATH_CHECK( m_TopTagjetUncertaintiesTool.setProperty("JetDefinition", fatjetcoll) );
573 ATH_CHECK( m_TopTagjetUncertaintiesTool.setProperty("MCType", "MC16") );
574 ATH_CHECK( m_TopTagjetUncertaintiesTool.setProperty("IsData", isData()) );
575 ATH_CHECK( m_TopTagjetUncertaintiesTool.setProperty("ConfigFile", "rel21/Fall2020/"+m_TopTagUncConfig) );
576 ATH_CHECK( m_TopTagjetUncertaintiesTool.setProperty("OutputLevel", this->msg().level()) );
577 ATH_CHECK( m_TopTagjetUncertaintiesTool.retrieve() );
578 } else if (m_TopTagjetUncertaintiesTool.isUserConfigured()) ATH_CHECK(m_TopTagjetUncertaintiesTool.retrieve());
579 */
580 }
581
582
583 // tagger SF and uncertainties
584 // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/BoostedJetTaggingRecommendationFullRun2
585 // To be implemented here
586
587 if (m_slices["jet"]) {
589 // Initialise jet cleaning tools
590
591 // see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/HowToCleanJetsR22
592 if (m_badJetCut!="" && !m_jetCleaningTool.isUserConfigured()) {
593 toolName = "JetCleaningTool";
594 m_jetCleaningTool.setTypeAndName("JetCleaningTool/"+toolName);
595 ATH_CHECK( m_jetCleaningTool.setProperty("CutLevel", m_badJetCut) );
596 ATH_CHECK( m_jetCleaningTool.setProperty("DoUgly", false) );
597 ATH_CHECK( m_jetCleaningTool.setProperty("OutputLevel", this->msg().level()) );
598 ATH_CHECK( m_jetCleaningTool.retrieve() );
599 } else if (m_jetCleaningTool.isUserConfigured()) ATH_CHECK( m_jetCleaningTool.retrieve() );
600
602 // Initialise jet pileup labeling tool (required for labels used by JvtEfficiencyTools)
603
604 if(!m_jetPileupLabelingTool.isUserConfigured() && !isData()) {
605 toolName = "PileupLabelingTool";
606 m_jetPileupLabelingTool.setTypeAndName("JetPileupLabelingTool/"+toolName);
607 ATH_CHECK( m_jetPileupLabelingTool.setProperty("RecoJetContainer", m_defaultJets) );
608 ATH_CHECK( m_jetPileupLabelingTool.setProperty("TruthJetContainer", m_defaultTruthJets) );
609 #ifndef XAOD_STANDALONE
610 ATH_CHECK( m_jetPileupLabelingTool.setProperty("SuppressInputDependence", true) );
611 ATH_CHECK( m_jetPileupLabelingTool.setProperty("SuppressOutputDependence", true) );
612 #endif
613 ATH_CHECK( m_jetPileupLabelingTool.setProperty("OutputLevel", this->msg().level()) );
614 ATH_CHECK( m_jetPileupLabelingTool.retrieve() );
615 } else if (m_jetPileupLabelingTool.isUserConfigured()) ATH_CHECK( m_jetPileupLabelingTool.retrieve() );
616
618 // Initialise jet Jvt moment tool
619
620 if (!m_jetJvtMomentTool.isUserConfigured()) {
621 toolName = "JvtMomentTool";
622 m_jetJvtMomentTool.setTypeAndName("JetVertexTaggerTool/"+toolName);
623 ATH_CHECK( m_jetJvtMomentTool.setProperty("JetContainer", m_defaultJets) );
624 #ifndef XAOD_STANDALONE
625 ATH_CHECK( m_jetJvtMomentTool.setProperty("SuppressInputDependence", true) );
626 ATH_CHECK( m_jetJvtMomentTool.setProperty("SuppressOutputDependence", true) );
627 #endif
628 ATH_CHECK( m_jetJvtMomentTool.setProperty("OutputLevel", this->msg().level()) );
629 ATH_CHECK( m_jetJvtMomentTool.retrieve() );
630 } else if (m_jetJvtMomentTool.isUserConfigured()) ATH_CHECK( m_jetJvtMomentTool.retrieve() );
631
633 // Initialise jet NNJvt moment tool
634
635 m_applyJVTCut = !m_JvtWP.empty();
636 if (!m_jetNNJvtMomentTool.isUserConfigured() && m_applyJVTCut) {
637 toolName = "NNJvtMomentTool";
638 m_jetNNJvtMomentTool.setTypeAndName("JetPileupTag::JetVertexNNTagger/"+toolName);
639 ATH_CHECK( m_jetNNJvtMomentTool.setProperty("JetContainer", m_defaultJets) );
640 #ifndef XAOD_STANDALONE
641 ATH_CHECK( m_jetNNJvtMomentTool.setProperty("SuppressInputDependence", true) );
642 ATH_CHECK( m_jetNNJvtMomentTool.setProperty("SuppressOutputDependence", true) );
643 #endif
644 ATH_CHECK( m_jetNNJvtMomentTool.setProperty("OutputLevel", this->msg().level()) );
645 ATH_CHECK( m_jetNNJvtMomentTool.retrieve() );
646 } else if (m_jetNNJvtMomentTool.isUserConfigured()) ATH_CHECK( m_jetNNJvtMomentTool.retrieve() );
647
649 // Initialise jet NNJvt selection tool
650
651 if (!m_jetNNJvtSelectionTool.isUserConfigured() && m_applyJVTCut) {
652 toolName = "NNJvtSelectionTool";
653 m_jetNNJvtSelectionTool.setTypeAndName("CP::NNJvtSelectionTool/"+toolName);
654 ATH_CHECK( m_jetNNJvtSelectionTool.setProperty("JetContainer", m_defaultJets) );
655 ATH_CHECK( m_jetNNJvtSelectionTool.setProperty("WorkingPoint", m_JvtWP) );
656 ATH_CHECK( m_jetNNJvtSelectionTool.setProperty("MaxPtForJvt", m_JvtPtMax) );
657 ATH_CHECK( m_jetNNJvtSelectionTool.setProperty("JvtMomentName", "NNJvt") );
658 ATH_CHECK( m_jetNNJvtSelectionTool.setProperty("OutputLevel", this->msg().level()) );
660 } else if (m_jetNNJvtSelectionTool.isUserConfigured()) ATH_CHECK( m_jetNNJvtSelectionTool.retrieve() );
661
663 // Initialise jet NNJvt efficiency tool (scale factors)
664
665 if (!m_jetNNJvtEfficiencyTool.isUserConfigured() && m_applyJVTCut) {
666 toolName = "NNJvtEfficiencyTool";
667 m_jetNNJvtEfficiencyTool.setTypeAndName("CP::NNJvtEfficiencyTool/"+toolName);
668 ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("JetContainer", m_defaultJets) );
669 ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("WorkingPoint", m_JvtWP) );
670 ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("MaxPtForJvt", m_JvtPtMax) );
672 ATH_CHECK( m_jetNNJvtEfficiencyTool.setProperty("OutputLevel", this->msg().level()) );
674 } else if (m_jetNNJvtEfficiencyTool.isUserConfigured()) ATH_CHECK( m_jetNNJvtEfficiencyTool.retrieve() );
675
677 // Initialise jet fJvt selection tool
678
679 if (!m_jetfJvtSelectionTool.isUserConfigured() && m_doFwdJVT) {
680 toolName = "fJvtSelectionTool";
681 m_jetfJvtSelectionTool.setTypeAndName("CP::FJvtSelectionTool/"+toolName);
682 ATH_CHECK( m_jetfJvtSelectionTool.setProperty("JetContainer", m_defaultJets) );
683 ATH_CHECK( m_jetfJvtSelectionTool.setProperty("WorkingPoint", m_fJvtWP) );
684 ATH_CHECK( m_jetfJvtSelectionTool.setProperty("MaxPtForJvt", m_fJvtPtMax) );
685 ATH_CHECK( m_jetfJvtSelectionTool.setProperty("JvtMomentName", "DFCommonJets_fJvt") );
686 ATH_CHECK( m_jetfJvtSelectionTool.setProperty("OutputLevel", this->msg().level()) );
687 ATH_CHECK( m_jetfJvtSelectionTool.retrieve() );
688 } else if (m_jetfJvtSelectionTool.isUserConfigured()) ATH_CHECK( m_jetfJvtSelectionTool.retrieve() );
689
691 // Initialise jet fJvt efficiency tool for scale factors (scale factors)
692
693 if (!m_jetfJvtEfficiencyTool.isUserConfigured() && m_doFwdJVT) {
694 toolName = "fJvtEfficiencyTool";
695 m_jetfJvtEfficiencyTool.setTypeAndName("CP::FJvtEfficiencyTool/"+toolName);
696 ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("JetContainer", m_defaultJets) );
697 ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("WorkingPoint", m_fJvtWP) );
698 ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("MaxPtForJvt", m_fJvtPtMax) );
700 ATH_CHECK( m_jetfJvtEfficiencyTool.setProperty("OutputLevel", this->msg().level()) );
702 } else ATH_CHECK( m_jetfJvtEfficiencyTool.retrieve() );
703 }
704
705
706 if (m_slices["mu"]) {
708 // Check muon baseline ID
709
710 std::string muQualBaseline = "";
711 switch (m_muIdBaseline) {
712 case xAOD::Muon::VeryLoose: muQualBaseline = "VeryLoose";
713 ATH_MSG_WARNING("No muon scale factors are available for VeryLoose working point.");
714 break;
715 case xAOD::Muon::Loose: muQualBaseline = "Loose"; break;
716 case xAOD::Muon::Medium: muQualBaseline = "Medium"; break;
717 case xAOD::Muon::Tight: muQualBaseline = "Tight"; break;
718 case 4: muQualBaseline = "HighPt"; break;
719 case 5: muQualBaseline = "LowPt"; break;
720 case 6: muQualBaseline = "LowPtMVA"; break;
721 case 7: muQualBaseline = "HighPt3Layers"; break;
722 default:
723 ATH_MSG_ERROR("Invalid muon working point provided: " << m_muIdBaseline << ". Cannot initialise!");
724 return StatusCode::FAILURE;
725 break;
726 }
727
729 // Initialise muon calibration tool
730 // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/MuonMomentumCorrectionsSubgroup#CP_MuonCalibrationAndSmearingToo
731 // Please not that for AthAnalysis we need to configure the MuonCalibTool within METSignificance manually and just can't pass the handle
732 // Hence, any changes here should also be propagated to the METSignificance setup further below
733
734 if (!m_muonCalibTool.isUserConfigured()) {
735 m_muonCalibTool.setTypeAndName("CP::MuonCalibTool/ST_MuonCalibrationTool");
736 if (m_isRun3) ATH_CHECK( m_muonCalibTool.setProperty("IsRun3Geo", true ));
737 ATH_CHECK( m_muonCalibTool.setProperty("calibMode", m_muCalibrationMode) );
738 ATH_CHECK( m_muonCalibTool.setProperty("OutputLevel", this->msg().level()) );
739 ATH_CHECK( m_muonCalibTool.setProperty("release", "Recs2025_03_26_Run2Run3" ));
740 int IdBaselineInt = m_muIdBaseline;
741 if (IdBaselineInt == 4) {
742 ATH_CHECK( m_muonCalibTool.setProperty("do2StationsHighPt", true) );
743 }
744 ATH_CHECK( m_muonCalibTool.setProperty("doExtraSmearing", m_muHighPtExtraSmear) );
745 ATH_CHECK( m_muonCalibTool.retrieve() );
746 } else ATH_CHECK( m_muonCalibTool.retrieve() );
747
749 // Initialise muon selection tool
750
751 if (!m_muonSelectionToolBaseline.isUserConfigured()) {
752 toolName = "MuonSelectionTool_Baseline_" + muQualBaseline;
753 m_muonSelectionToolBaseline.setTypeAndName("CP::MuonSelectionTool/"+toolName);
754 if (m_isRun3) ATH_CHECK( m_muonSelectionToolBaseline.setProperty("IsRun3Geo", true ));
755
756 if (m_muBaselineEta<m_muEta){ // Test for inconsistent configuration
757 ATH_MSG_ERROR( "Requested a baseline eta cut for muons (" << m_muBaselineEta <<
758 ") that is tighter than the signal cut (" << m_muEta << "). Please check your config." );
759 return StatusCode::FAILURE;
760 }
761 int IdBaselineInt = m_muIdBaseline;
762 ATH_CHECK( m_muonSelectionToolBaseline.setProperty( "MaxEta", m_muBaselineEta) );
763 if (IdBaselineInt == 6){
764 ATH_CHECK( m_muonSelectionToolBaseline.setProperty( "MuQuality", 5 ) );
765 ATH_CHECK( m_muonSelectionToolBaseline.setProperty( "UseMVALowPt", true));
766 } else if (IdBaselineInt == 7){
767 ATH_CHECK( m_muonSelectionToolBaseline.setProperty( "MuQuality", 4 ) );
768 ATH_CHECK( m_muonSelectionToolBaseline.setProperty( "Use2stationMuonsHighPt", false));
769 } else ATH_CHECK(m_muonSelectionToolBaseline.setProperty( "MuQuality", m_muIdBaseline ));
770 ATH_CHECK( m_muonSelectionToolBaseline.setProperty("OutputLevel", this->msg().level()) );
772 } else ATH_CHECK( m_muonSelectionToolBaseline.retrieve() );
773
774
775 std::string muQual = "";
776 switch (m_muId) {
777 case xAOD::Muon::VeryLoose: muQual = "VeryLoose";
778 ATH_MSG_WARNING("No muon scale factors are available for VeryLoose working point.");
779 break;
780 case xAOD::Muon::Loose: muQual = "Loose"; break;
781 case xAOD::Muon::Medium: muQual = "Medium"; break;
782 case xAOD::Muon::Tight: muQual = "Tight"; break;
783 case 4: muQual = "HighPt"; break;
784 case 5: muQual = "LowPt"; break;
785 case 6: muQual = "LowPtMVA"; break;
786 case 7: muQual = "HighPt3Layers"; break;
787 default:
788 ATH_MSG_ERROR("Invalid muon working point provided: " << m_muId << ". Cannot initialise!");
789 return StatusCode::FAILURE;
790 break;
791 }
792
793 if (!m_muonSelectionTool.isUserConfigured()) {
794 toolName = "MuonSelectionTool_" + muQual;
795 m_muonSelectionTool.setTypeAndName("CP::MuonSelectionTool/"+toolName);
796 if (m_isRun3) ATH_CHECK( m_muonSelectionTool.setProperty("IsRun3Geo", true ));
797 ATH_CHECK( m_muonSelectionTool.setProperty( "MaxEta", m_muEta) );
798 int IdInt = m_muId;
799 if (IdInt == 6){
800 ATH_CHECK( m_muonSelectionTool.setProperty( "MuQuality", 5 ) );
801 ATH_CHECK( m_muonSelectionTool.setProperty( "UseMVALowPt", true));
802 } else if (IdInt == 7){
803 ATH_CHECK( m_muonSelectionTool.setProperty( "MuQuality", 4 ) );
804 ATH_CHECK( m_muonSelectionTool.setProperty( "Use2stationMuonsHighPt", false));
805 } else ATH_CHECK(m_muonSelectionTool.setProperty( "MuQuality", m_muId ));
806 ATH_CHECK( m_muonSelectionTool.setProperty("OutputLevel", this->msg().level()) );
807 ATH_CHECK( m_muonSelectionTool.retrieve() );
808 } else ATH_CHECK( m_muonSelectionTool.retrieve() );
809
810
811 if (!m_muonSelectionHighPtTool.isUserConfigured()) { //Fixed to HighPt WP
812 toolName = "MuonSelectionHighPtTool_" + muQual;
813 m_muonSelectionHighPtTool.setTypeAndName("CP::MuonSelectionTool/"+toolName);
814 if (m_isRun3) ATH_CHECK( m_muonSelectionHighPtTool.setProperty("IsRun3Geo", true ));
815 ATH_CHECK( m_muonSelectionHighPtTool.setProperty( "MaxEta", m_muEta) );
816 ATH_CHECK( m_muonSelectionHighPtTool.setProperty( "MuQuality", 4 ) );
817 ATH_CHECK( m_muonSelectionHighPtTool.setProperty("OutputLevel", this->msg().level()) );
819 } else ATH_CHECK( m_muonSelectionHighPtTool.retrieve() );
820
821
823 // Initialise prompt/LRT muon OR tool
824 if (!m_muonLRTORTool.isUserConfigured()) {
825 toolName = "MuonLRTOverlapRemovalTool";
826 m_muonLRTORTool.setTypeAndName("CP::MuonLRTOverlapRemovalTool/"+toolName);
828 if (m_isRun3) ATH_CHECK( m_muonLRTORTool.setProperty("UseRun3WP", true ));
829 ATH_CHECK( m_muonLRTORTool.setProperty("OutputLevel", this->msg().level()) );
830 ATH_CHECK( m_muonLRTORTool.retrieve() );
831 } else ATH_CHECK( m_muonLRTORTool.retrieve() );
832
834 // Initialise muon efficiency tools
835 if (!m_muonEfficiencySFTool.isUserConfigured() && m_muId != xAOD::Muon::VeryLoose && !isData()) {
836 toolName = "MuonEfficiencyScaleFactors_" + muQual;
837 m_muonEfficiencySFTool.setTypeAndName("CP::MuonEfficiencyScaleFactors/"+toolName);
838 ATH_CHECK( m_muonEfficiencySFTool.setProperty("WorkingPoint", muQual) );
839 ATH_CHECK( m_muonEfficiencySFTool.setProperty("CalibrationRelease", m_isRun3? "250418_Preliminary_r24run3":"230213_Preliminary_r22run2") );
840 ATH_CHECK( m_muonEfficiencySFTool.setProperty("OutputLevel", this->msg().level()) );
841 ATH_CHECK( m_muonEfficiencySFTool.retrieve() );
842 } else if (m_muonEfficiencySFTool.isUserConfigured()) ATH_CHECK( m_muonEfficiencySFTool.retrieve() );
843
844
845 if (!m_muonEfficiencyBMHighPtSFTool.isUserConfigured() && !isData()){
846 toolName = "MuonEfficiencyScaleFactorsBMHighPt_" + muQual;
847 m_muonEfficiencyBMHighPtSFTool.setTypeAndName("CP::MuonEfficiencyScaleFactors/"+toolName);
848 ATH_CHECK( m_muonEfficiencyBMHighPtSFTool.setProperty("WorkingPoint", "BadMuonVeto_HighPt") );
849 ATH_CHECK( m_muonEfficiencyBMHighPtSFTool.setProperty("CalibrationRelease", m_isRun3? "220817_Preliminary_r22run3":"230213_Preliminary_r22run2") ); //BadMuonVeto_HighPt currently not available for 240711_Preliminary_r24run3
850 ATH_CHECK( m_muonEfficiencyBMHighPtSFTool.setProperty("OutputLevel", this->msg().level()) );
852 } else if (m_muonEfficiencyBMHighPtSFTool.isUserConfigured()) ATH_CHECK( m_muonEfficiencyBMHighPtSFTool.retrieve() );
853
854
855 if (m_doTTVAsf && m_mud0sig<0 && m_muz0<0){
856 ATH_MSG_WARNING("Requested TTVA SFs without d0sig and z0 cuts. Disabling scale factors as they will not make sense.");
857 m_doTTVAsf=false;
858 }
859
860 if (m_doTTVAsf && !m_muonTTVAEfficiencySFTool.isUserConfigured() && !isData()) {
861 toolName = "MuonTTVAEfficiencyScaleFactors";
862 m_muonTTVAEfficiencySFTool.setTypeAndName("CP::MuonEfficiencyScaleFactors/"+toolName);
863 ATH_CHECK( m_muonTTVAEfficiencySFTool.setProperty("WorkingPoint", "TTVA") );
864 ATH_CHECK( m_muonTTVAEfficiencySFTool.setProperty("CalibrationRelease", m_isRun3? "250418_Preliminary_r24run3":"230213_Preliminary_r22run2") );
865 ATH_CHECK( m_muonTTVAEfficiencySFTool.setProperty("OutputLevel", this->msg().level()) );
867 } else if (m_muonTTVAEfficiencySFTool.isUserConfigured()) ATH_CHECK( m_muonTTVAEfficiencySFTool.retrieve() );
868
869
870
872 // Initialise muon isolation tool
873 if (!m_muonIsolationSFTool.isUserConfigured() && !m_muIso_WP.empty() && !isData()) {
874 toolName = "MuonIsolationScaleFactors_" + m_muIso_WP;
875
876 std::string tmp_muIso_WP = m_muIso_WP;
877 if ( !check_isOption(m_muIso_WP, m_mu_iso_support) ) { //check if supported
878 ATH_MSG_WARNING("Your selected muon Iso WP ("
879 << m_muIso_WP
880 << ") does not have SFs defined. Will try to find an appropriate fall-back.");
881 if (m_mu_iso_fallback.count(m_muIso_WP) > 0){
882 tmp_muIso_WP = m_mu_iso_fallback[m_muIso_WP];
883 ATH_MSG_WARNING("Your selected muon Iso WP ("
884 << m_muIso_WP
885 << " is not supported, and does not have SFs available. Falling back to "
886 << tmp_muIso_WP
887 << " for SF determination.");
888 } else {
889 ATH_MSG_ERROR("*** The muon isolation WP you selected (" << m_muIso_WP << ") is not currentely supported, and no known fall-back option for SFs exists. Sorry! ***");
890 return StatusCode::FAILURE;
891 }
892 }
893
894 m_muonIsolationSFTool.setTypeAndName("CP::MuonEfficiencyScaleFactors/"+toolName);
895 ATH_CHECK( m_muonIsolationSFTool.setProperty("WorkingPoint", tmp_muIso_WP + "Iso") );
896 ATH_CHECK( m_muonIsolationSFTool.setProperty("CalibrationRelease", m_isRun3? "250418_Preliminary_r24run3":"230213_Preliminary_r22run2") );
897 ATH_CHECK( m_muonIsolationSFTool.setProperty("OutputLevel", this->msg().level()) );
898 ATH_CHECK( m_muonIsolationSFTool.retrieve() );
899
900 } else if (m_muonIsolationSFTool.isUserConfigured()) ATH_CHECK( m_muonIsolationSFTool.retrieve() );
901
902
903 if (!m_muonHighPtIsolationSFTool.isUserConfigured() && !m_muIsoHighPt_WP.empty() && !isData()) {
904 toolName = "MuonHighPtIsolationScaleFactors_" + m_muIsoHighPt_WP;
905
906 std::string tmp_muIsoHighPt_WP = m_muIsoHighPt_WP;
907 if ( !check_isOption(m_muIsoHighPt_WP, m_mu_iso_support) ) { //check if supported
908 ATH_MSG_WARNING("Your selected muon high-pt Iso WP ("
910 << ") does not have SFs defined. Will try to find an appropriate fall-back.");
911 if (m_mu_iso_fallback.count(m_muIsoHighPt_WP) > 0){
912 tmp_muIsoHighPt_WP = m_mu_iso_fallback[m_muIsoHighPt_WP];
913 ATH_MSG_WARNING("Your selected muon high-pt Iso WP ("
915 << " is not supported, and does not have SFs available. Falling back to "
916 << tmp_muIsoHighPt_WP
917 << " for SF determination.");
918 } else {
919 ATH_MSG_ERROR("*** The muon isolation WP you selected (" << m_muIsoHighPt_WP << ") is not currentely supported, and no known fall-back option for SFs exists. Sorry! ***");
920 return StatusCode::FAILURE;
921 }
922 }
923
924 m_muonHighPtIsolationSFTool.setTypeAndName("CP::MuonEfficiencyScaleFactors/"+toolName);
925 // Use for the low-pt WP a dedicated set of isolation scale-factors having an extra uncertainty in place
926 ATH_CHECK( m_muonHighPtIsolationSFTool.setProperty("WorkingPoint", tmp_muIsoHighPt_WP + "Iso") );
927 ATH_CHECK( m_muonHighPtIsolationSFTool.setProperty("CalibrationRelease", m_isRun3? "250418_Preliminary_r24run3":"230213_Preliminary_r22run2") );
928 ATH_CHECK( m_muonHighPtIsolationSFTool.setProperty("OutputLevel", this->msg().level()) );
930
931 } else if (m_muonHighPtIsolationSFTool.isUserConfigured()) ATH_CHECK( m_muonHighPtIsolationSFTool.retrieve() );
932
933
935 // Initialise muon trigger scale factor tools
936
937 if (!m_muonTriggerSFTool.isUserConfigured() && !isData()) {
938 toolName = "MuonTriggerScaleFactors_" + muQual;
939 m_muonTriggerSFTool.setTypeAndName("CP::MuonTriggerScaleFactors/"+toolName);
940 if ( muQual=="LowPt" ) {
941 ATH_MSG_WARNING("You're using the LowPt muon selection, which is not supported yet in terms of muon trigger scale facorts. TEMPORAIRLY configuring the muonTriggerSFTool for Medium muons. Beware!");
942 ATH_CHECK( m_muonTriggerSFTool.setProperty("MuonQuality", "Medium" ) );
943 }
944 else ATH_CHECK( m_muonTriggerSFTool.setProperty("MuonQuality", muQual) );
945 //ATH_CHECK( m_muonTriggerSFTool.setProperty("Isolation", m_muIso_WP)); This property has been depreacted long time ago
946 ATH_CHECK( m_muonTriggerSFTool.setProperty("AllowZeroSF", true) );
947 ATH_CHECK( m_muonTriggerSFTool.setProperty("OutputLevel", this->msg().level()) );
948 if(!m_muTriggerSFCalibRelease.empty() ) ATH_CHECK( m_muonTriggerSFTool.setProperty("CalibrationRelease",m_muTriggerSFCalibRelease) );
950 ATH_CHECK( m_muonTriggerSFTool.retrieve() );
951 m_muonTrigSFTools.push_back(m_muonTriggerSFTool.getHandle());
952 } else if (m_muonTriggerSFTool.isUserConfigured()) {
953 ATH_CHECK( m_muonTriggerSFTool.retrieve() );
954 m_muonTrigSFTools.push_back(m_muonTriggerSFTool.getHandle());
955 }
956 }
957
958 if (m_slices["ele"]) {
959 // /////////////////////////////////////////////////////////////////////////////////////////
960 // Initialise electron selector tools
961
962 // Signal Electrons
963 if (!m_elecSelLikelihood.isUserConfigured()) {
964 toolName = "EleSelLikelihood_" + m_eleId;
965
966 if (m_eleId.find("DNN") != std::string::npos) {
967 m_elecSelLikelihood.setTypeAndName("AsgElectronSelectorTool/"+toolName);
968 }
969 else {
970 m_elecSelLikelihood.setTypeAndName("AsgElectronLikelihoodTool/"+toolName);
971 }
972
973 if (! m_eleConfig.empty() ){
974 ATH_MSG_INFO("Overriding specified Ele.Id working point in favour of configuration file");
975 ATH_CHECK( m_elecSelLikelihood.setProperty("ConfigFile", m_eleConfig) );
976 } else if ( !check_isOption(m_eleId, m_el_id_support) ) { //check if supported
977 ATH_MSG_ERROR("Invalid electron ID selected: " << m_eleId);
978 return StatusCode::FAILURE;
979 }
980 else if (m_eleId == "VeryLooseLLH" || m_eleId == "LooseLLH") {
981 ATH_MSG_WARNING(" ****************************************************************************");
982 ATH_MSG_WARNING(" CAUTION: Setting " << m_eleId << " as signal electron ID");
983 ATH_MSG_WARNING(" These may be used for loose electron CRs but no scale factors are provided.");
984 ATH_MSG_WARNING(" ****************************************************************************");
985 ATH_CHECK( m_elecSelLikelihood.setProperty("WorkingPoint", EG_WP(m_eleId) ));
986 } else {
987 ATH_CHECK( m_elecSelLikelihood.setProperty("WorkingPoint", EG_WP(m_eleId) ));
988 }
989
990 ATH_CHECK( m_elecSelLikelihood.setProperty("OutputLevel", this->msg().level()) );
991 ATH_CHECK( m_elecSelLikelihood.retrieve() );
992 } else ATH_CHECK( m_elecSelLikelihood.retrieve() );
993
994 // Baseline Electrons
995 if (!m_elecSelLikelihoodBaseline.isUserConfigured()) {
996 toolName = "EleSelLikelihoodBaseline_" + m_eleIdBaseline;
997
998 if (m_eleIdBaseline.find("DNN") != std::string::npos) {
999 m_elecSelLikelihoodBaseline.setTypeAndName("AsgElectronSelectorTool/"+toolName);
1000 }
1001 else {
1002 m_elecSelLikelihoodBaseline.setTypeAndName("AsgElectronLikelihoodTool/"+toolName);
1003 }
1004
1005 if (! m_eleConfigBaseline.empty() ){
1006 ATH_MSG_INFO("Overriding specified EleBaseline.Id working point in favour of configuration file");
1007 ATH_CHECK( m_elecSelLikelihoodBaseline.setProperty("ConfigFile", m_eleConfigBaseline ));
1008 } else if ( !check_isOption(m_eleIdBaseline, m_el_id_support) ) { //check if supported
1009 ATH_MSG_ERROR("Invalid electron ID selected: " << m_eleIdBaseline);
1010 return StatusCode::FAILURE;
1011 } else {
1012 ATH_CHECK( m_elecSelLikelihoodBaseline.setProperty("WorkingPoint", EG_WP(m_eleIdBaseline)) );
1013 }
1014
1015 ATH_CHECK( m_elecSelLikelihoodBaseline.setProperty("OutputLevel", this->msg().level()) );
1017 } else ATH_CHECK( m_elecSelLikelihoodBaseline.retrieve() );
1018 }
1019
1021 // Initialise prompt/LRT electron OR tool
1022 if (!m_elecLRTORTool.isUserConfigured()) {
1023 toolName = "ElectronLRTOverlapRemovalTool";
1024 m_elecLRTORTool.setTypeAndName("CP::ElectronLRTOverlapRemovalTool/"+toolName);
1025 ATH_MSG_DEBUG("Setting ElectronLRTOverlapRemovalTool strategy to "<<m_eleLRT_strat);
1026 ATH_CHECK( m_elecLRTORTool.setProperty("overlapStrategy", m_eleLRT_strat) );
1027 ATH_CHECK( m_elecLRTORTool.retrieve() );
1028 } else ATH_CHECK( m_elecLRTORTool.retrieve() );
1029
1030 if (m_slices["pho"]) {
1031 // /////////////////////////////////////////////////////////////////////////////////////////
1032 // Initialise photon selector tools
1033
1034 if (!m_photonSelIsEM.isUserConfigured()) {
1035 toolName = "PhotonSelIsEM_" + m_photonId;
1036 m_photonSelIsEM.setTypeAndName("AsgPhotonIsEMSelector/"+toolName);
1037
1038 if (!check_isOption(m_photonId, m_ph_id_support)){ //check if supported
1039 ATH_MSG_ERROR("Invalid photon ID selected: " << m_photonId);
1040 return StatusCode::FAILURE;
1041 }
1042
1043 ATH_CHECK( m_photonSelIsEM.setProperty("WorkingPoint", m_photonId+"Photon") );
1044 ATH_CHECK( m_photonSelIsEM.setProperty("OutputLevel", this->msg().level()) );
1045 ATH_CHECK( m_photonSelIsEM.retrieve() );
1046 } else ATH_CHECK( m_photonSelIsEM.retrieve() );
1047
1048 if (!m_photonSelIsEMBaseline.isUserConfigured()) {
1049 toolName = "PhotonSelIsEMBaseline_" + m_photonIdBaseline;
1050 m_photonSelIsEMBaseline.setTypeAndName("AsgPhotonIsEMSelector/"+toolName);
1051
1052 if(!check_isOption(m_photonIdBaseline, m_ph_id_support)){ //check if supported
1053 ATH_MSG_ERROR("Invalid photon ID selected: " << m_photonIdBaseline);
1054 return StatusCode::FAILURE;
1055 }
1056
1057 ATH_CHECK( m_photonSelIsEMBaseline.setProperty("WorkingPoint", m_photonIdBaseline+"Photon") );
1058 ATH_CHECK( m_photonSelIsEMBaseline.setProperty("OutputLevel", this->msg().level()) );
1059 ATH_CHECK( m_photonSelIsEMBaseline.retrieve() );
1060 } else ATH_CHECK( m_photonSelIsEMBaseline.retrieve() );
1061 }
1062
1063 if (m_slices["ele"]||m_slices["pho"]) {
1065 // Initialise DeadHVCellRemovalTool
1066 // https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/EGammaIdentificationRun2#Removal_of_Electron_Photon_clust
1067
1068 ATH_MSG_DEBUG("Setup AsgDeadHVCellRemovalTool/deadHVTool");
1069 m_deadHVTool.setTypeAndName("AsgDeadHVCellRemovalTool/deadHVTool");
1070 ATH_CHECK(m_deadHVTool.retrieve());
1071 }
1072
1073 if (m_slices["ele"]) {
1075 // Initialise electron efficiency tool
1076
1078 if (!isData()) {
1079 if (isAtlfast()) data_type = PATCore::ParticleDataType::Fast;
1080 else data_type = PATCore::ParticleDataType::Full;
1081 ATH_MSG_DEBUG( "Setting data type to " << data_type);
1082 }
1083
1084 m_eleEffMapFilePathRun2 = "ElectronEfficiencyCorrection/2015_2018/rel21.2/Precision_Summer2020_v1/map4.txt";
1085
1086 if(!m_isRun3) {
1087 ATH_MSG_INFO( "Running on Run2 samples; Using egamma SF tools from R21 map ");
1089 }
1090
1091 toolName = "AsgElectronEfficiencyCorrectionTool_reco";
1093
1094 //-- get KEYS supported by egamma SF tools
1095 std::vector<std::string> eSF_keys = getElSFkeys( m_isRun3? m_eleEffMapFilePath : m_eleEffMapFilePathRun2);
1096
1097 if (m_eleId.find("NoPix") != std::string::npos || m_eleId == "VeryLooseLLH" || m_eleId == "LooseLLH" || m_eleId == "Medium") {
1098 ATH_MSG_WARNING("Not configuring electron ID and trigger scale factors for " << m_eleId);
1099 }
1100 else {
1101 // This needs to be formatted for the scale factors: no _Rel20, no LH label, etc.
1102 std::string eleId = TString(m_eleId).ReplaceAll("AndBLayer", "BLayer").ReplaceAll("LLH", "").Data();
1103
1104 if (m_eleId.find("DNN") != std::string::npos) {
1105 eleId = TString(eleId).ReplaceAll("DNNnoCF", "").ReplaceAll("DNN", "").ReplaceAll("Loose", "LooseBLayer").Data();
1106 ATH_MSG_WARNING("Electron DNN ID working point " << m_eleId << " doesn't have SFs yet, fall back to " << eleId);
1107 }
1108
1109 // electron id
1110 toolName = "AsgElectronEfficiencyCorrectionTool_id_" + m_eleId;
1112
1113 // override map file use if correction file list is set for WP
1114 std::map<std::string,std::string> corrFNList;
1115 if ( !m_EG_corrFNList.empty() ) {
1116 for ( const auto& WP_fname : split( m_EG_corrFNList, "," ) ) {
1117 std::string WP = WP_fname.substr(0,WP_fname.find(":"));
1118 std::string fname = WP_fname.substr(WP_fname.find(":")+1);
1119 corrFNList[WP] = fname;
1120 ATH_MSG_WARNING( "Correction file list defined for WP " << WP << ": " << fname << "." );
1121 ATH_MSG_WARNING( "Will use correction file rather than central map file." );
1122 }
1123 }
1124
1125 // electron iso
1126 std::string EleIso("");
1127 if (std::find(eSF_keys.begin(), eSF_keys.end(), eleId+"_"+m_eleIso_WP) != eSF_keys.end()){
1128 EleIso = m_eleIso_WP;
1129 } else if (std::find(eSF_keys.begin(), eSF_keys.end(), eleId+"_"+m_el_iso_fallback[m_eleIso_WP]) != eSF_keys.end()){
1130 //--- Check to see if the only issue is an unknown isolation working point
1132 ATH_MSG_WARNING("(AsgElectronEfficiencyCorrectionTool_iso_*) Your selected electron Iso WP ("
1133 << m_eleIso_WP
1134 << ") does not have iso SFs defined. Falling back to "
1136 << " for SF calculations");
1137 }
1138 else{
1139 ATH_MSG_ERROR("*** THE ELECTRON ISOLATION SF YOU SELECTED (" << m_eleIso_WP << ") GOT NO SUPPORT ***");
1140 return StatusCode::FAILURE;
1141 }
1142
1143 toolName = "AsgElectronEfficiencyCorrectionTool_iso_" + m_eleId + EleIso;
1144
1145 // if running with correction file list
1146 if ( (!m_EG_corrFNList.empty()) && corrFNList.find(EleIso)!=corrFNList.end() ) { // overriding central map file
1147 CONFIG_EG_EFF_TOOL( m_elecEfficiencySFTool_iso, toolName, corrFNList[EleIso] );
1148 }
1149 // can't do the iso tool via the macro, it needs two properties set
1150 else { // default: use map file
1151 if ( !m_elecEfficiencySFTool_iso.isUserConfigured() ) {
1152 if ( !check_isOption(EleIso, m_el_iso_support) ) { //check if supported
1153 ATH_MSG_WARNING( "(" << toolName << ") Your electron Iso WP: " << EleIso<< " is no longer supported. This will almost certainly cause a crash now.");
1154 }
1155
1156 m_elecEfficiencySFTool_iso.setTypeAndName("AsgElectronEfficiencyCorrectionTool/"+toolName);
1157
1158 if ( m_EG_corrFNList.empty() ) {
1160 } else {
1161 ATH_CHECK( m_elecEfficiencySFTool_iso.setProperty("CorrectionFileNameList", corrFNList) );
1162 }
1163 ATH_CHECK( m_elecEfficiencySFTool_iso.setProperty("IdKey", eleId) );
1164 ATH_CHECK( m_elecEfficiencySFTool_iso.setProperty("IsoKey", EleIso) );
1165 if (!isData() && ((EleIso.find("TightTrackOnly_VarRad")!=std::string::npos)||
1166 (EleIso.find("TightTrackOnly_FixedRad")!=std::string::npos)||
1167 (EleIso.find("Tight_VarRad")!=std::string::npos)||
1168 (EleIso.find("Loose_VarRad")!=std::string::npos))) {
1169 if (isAtlfast()) ATH_MSG_WARNING("(AsgElectronEfficiencyCorrectionTool/"+toolName+"). Your selected electron Iso WP (" + EleIso + ") don't have AFII SF. Falling back to FullSim");
1170 ATH_CHECK( m_elecEfficiencySFTool_iso.setProperty("ForceDataType", static_cast<int>(PATCore::ParticleDataType::Full)));
1171 }
1172 else if (!isData()){
1173 ATH_CHECK( m_elecEfficiencySFTool_iso.setProperty("ForceDataType", static_cast<int>(data_type)));
1174 }
1175 ATH_CHECK( m_elecEfficiencySFTool_iso.setProperty("CorrelationModel", m_EG_corrModel) );
1176 ATH_CHECK( m_elecEfficiencySFTool_iso.setProperty("OutputLevel", this->msg().level()) );
1177 ATH_CHECK( m_elecEfficiencySFTool_iso.initialize() );
1178 } else ATH_CHECK( m_elecEfficiencySFTool_iso.initialize() );
1179 }
1180
1181 // electron iso high-pt
1182 std::string EleIsohighPt("");
1183 if (std::find(eSF_keys.begin(), eSF_keys.end(), eleId+"_"+m_eleIsoHighPt_WP) != eSF_keys.end()){
1184 EleIsohighPt = m_eleIsoHighPt_WP;
1185 } else if (std::find(eSF_keys.begin(), eSF_keys.end(), eleId+"_"+m_el_iso_fallback[m_eleIsoHighPt_WP]) != eSF_keys.end()){
1186 //--- Check to see if the only issue is an unknown isolation working point
1187 EleIsohighPt = m_el_iso_fallback[m_eleIsoHighPt_WP];
1188 ATH_MSG_WARNING("(AsgElectronEfficiencyCorrectionTool_iso_*) Your selected high-pT electron Iso WP ("
1190 << ") does not have iso SFs defined. Falling back to "
1192 << " for SF calculations");
1193 }
1194 else{
1195 ATH_MSG_ERROR("*** THE HIGH PT ELECTRON ISOLATION SF YOU SELECTED (" << m_eleIsoHighPt_WP << ") GOT NO SUPPORT");
1196 return StatusCode::FAILURE;
1197 }
1198
1199 toolName = "AsgElectronEfficiencyCorrectionTool_isoHigPt_" + m_eleId + EleIsohighPt;
1200
1201 // if running with correction file list
1202 if ( (!m_EG_corrFNList.empty()) && corrFNList.find(EleIsohighPt)!=corrFNList.end() ) { // overriding central map file
1203 CONFIG_EG_EFF_TOOL( m_elecEfficiencySFTool_isoHighPt, toolName, corrFNList[EleIsohighPt] );
1204 }
1205 // can't do the iso tool via the macro, it needs two properties set
1206 else { // default: use map file
1207 if ( !m_elecEfficiencySFTool_isoHighPt.isUserConfigured() ) {
1208
1209 if ( !check_isOption(EleIsohighPt, m_el_iso_support) ) { //check if supported
1210 ATH_MSG_WARNING( "(" << toolName << ") Your electron high-pt Iso WP: " << EleIsohighPt << " is no longer supported. This will almost certainly cause a crash now.");
1211 }
1212
1213 m_elecEfficiencySFTool_isoHighPt.setTypeAndName("AsgElectronEfficiencyCorrectionTool/"+toolName);
1214
1216 ATH_CHECK( m_elecEfficiencySFTool_isoHighPt.setProperty("IdKey", eleId) );
1217 ATH_CHECK( m_elecEfficiencySFTool_isoHighPt.setProperty("IsoKey", EleIsohighPt) );
1218 if (!isData()) {
1219 ATH_CHECK (m_elecEfficiencySFTool_isoHighPt.setProperty("ForceDataType", (int) data_type) );
1220 }
1221 ATH_CHECK( m_elecEfficiencySFTool_isoHighPt.setProperty("CorrelationModel", m_EG_corrModel) );
1222 ATH_CHECK( m_elecEfficiencySFTool_isoHighPt.setProperty("OutputLevel", this->msg().level()) );
1224 } else ATH_CHECK( m_elecEfficiencySFTool_isoHighPt.initialize() );
1225 }
1226
1227 // electron triggers - first SFs (but we need to massage the id string since all combinations are not supported)
1228
1229 //single lepton
1230
1231 if(m_isRun3 && eleId.find("LooseBLayer") != std::string::npos) ATH_MSG_WARNING("Replacing 'LooseBLayer' with 'Loose' for Electron ID while configuring single-ele trigger SF using: " << m_eleEffMapFilePath);
1232 std::string triggerEleID = m_isRun3? TString(eleId).ReplaceAll("LooseBLayer", "Loose").Data() : eleId;
1233 std::string triggerEleIso= m_eleIso_WP;
1234
1235 // This is an hack to work with ElectronEfficiencyCorrection/2015_2025/rel22.2/2022_Summer_Prerecom_v1/map4.txt to allow
1236
1238 bool pass_isRun3TrigSFFallback = true;
1239 if (triggerEleID.find("Medium") != std::string::npos && triggerEleIso.find("Loose") != std::string::npos) {triggerEleID = "Loose";}
1240 else if (triggerEleID.find("Medium") != std::string::npos && triggerEleIso.find("Tight") != std::string::npos) {triggerEleID = "Tight"; triggerEleIso = "Tight_VarRad";}
1241 else if (triggerEleID.find("Medium") != std::string::npos && triggerEleIso.find("HighPtCaloOnly") != std::string::npos) {triggerEleID = "Tight"; triggerEleIso = "Tight_VarRad";}
1242 else if (triggerEleID.find("Tight") != std::string::npos && triggerEleIso.find("Loose") != std::string::npos) {triggerEleID = "Loose";}
1243 else if (triggerEleID.find("Tight") != std::string::npos && triggerEleIso.find("Tight") != std::string::npos) {triggerEleIso= "Tight_VarRad";}
1244 else if (triggerEleID.find("Tight") != std::string::npos && triggerEleIso.find("HighPtCaloOnly") != std::string::npos) {triggerEleID = "Tight"; triggerEleIso = "Tight_VarRad";}
1245 else if (triggerEleID.find("Loose") != std::string::npos && triggerEleIso.find("Tight") != std::string::npos) {triggerEleID = "Loose"; triggerEleIso = "Loose_VarRad";}
1246 else if (triggerEleID.find("Loose") != std::string::npos && triggerEleIso.find("HighPtCaloOnly") != std::string::npos) {triggerEleID = "Loose"; triggerEleIso = "Loose_VarRad";}
1247 else {pass_isRun3TrigSFFallback=false;}
1248 if(pass_isRun3TrigSFFallback){
1249 ATH_MSG_INFO(" ************** This is only for testing/studying purpose! ************** ");
1250 ATH_MSG_INFO(" ************** For official recommendation, please get in contact with the SUSY Bkg Forum ************** ");
1251 ATH_MSG_INFO("In the current map ("<<m_eleEffMapFilePath<<"), the only supported Electron ID working-points supported for Electron Trigger Scale Factor are 'Loose_Loose_VarRad' and 'Tight_Tight_VarRad' ");
1252 ATH_MSG_INFO("Only for single-lepton trigger scale factor, fall back to Electron ID: -> "<< triggerEleID << " with Isolation: " << triggerEleIso);
1253 }
1254 }
1255
1256 // The L1 seed changed from 2023 and beyond, so we need to adjust the trigger key accordingly, the SF are now derived by year so we need to change the year in the key as well.
1257
1258 if(m_isRun3){
1259 // Find year positions (or npos if not present)
1260 size_t p22 = m_electronTriggerSFStringSingle.find("2022");
1261 size_t p23 = m_electronTriggerSFStringSingle.find("2023");
1262 size_t p24 = m_electronTriggerSFStringSingle.find("2024");
1263
1264 auto next_pos = [&](size_t self) {
1265 size_t next = std::string::npos;
1266
1267 if (self == p22) {
1268 if (p23 > self && p23 < next) next = p23;
1269 if (p24 > self && p24 < next) next = p24;
1270 }
1271 else if (self == p23) {
1272 if (p22 > self && p22 < next) next = p22;
1273 if (p24 > self && p24 < next) next = p24;
1274 }
1275 else if (self == p24) {
1276 if (p22 > self && p22 < next) next = p22;
1277 if (p23 > self && p23 < next) next = p23;
1278 }
1279
1280 return next;
1281 };
1282 std::string SFStringSingle22="";
1283 std::string SFStringSingle23="";
1284 std::string SFStringSingle24="";
1285
1286 // Extract 2022,2023,2025 block
1287 if (p22 != std::string::npos) {size_t end = next_pos(p22); SFStringSingle22 = m_electronTriggerSFStringSingle.substr(p22, end - p22);}
1288 if (p23 != std::string::npos) {size_t end = next_pos(p23); SFStringSingle23 = m_electronTriggerSFStringSingle.substr(p23, end - p23);}
1289 if (p24 != std::string::npos) {size_t end = next_pos(p24); SFStringSingle24 = m_electronTriggerSFStringSingle.substr(p24, end - p24);}
1290
1291 // Remove trailing underscores from tokens if present
1292 std::string* toks[] = { &SFStringSingle22, &SFStringSingle23, &SFStringSingle24 };
1293 for (auto t : toks) {
1294 while (!t->empty() && t->back() == '_') t->pop_back();
1295 }
1296
1297 if(m_mcCampaign == "mc23a") m_electronTriggerSFStringSingle = SFStringSingle22;
1298 else if(m_mcCampaign == "mc23d") m_electronTriggerSFStringSingle = SFStringSingle23;
1299 else if(m_mcCampaign == "mc23e") m_electronTriggerSFStringSingle = SFStringSingle24;
1300 else {
1301 ATH_MSG_WARNING("Unknown or unsupported mcCampaign for Run 3: " << m_mcCampaign << ". Please contact the SUSY Bkg Forum for assistance.");
1302 ATH_MSG_WARNING("Falling back to 2024 trigger SFs for single-electron triggers.");
1303 m_electronTriggerSFStringSingle = SFStringSingle24;
1304 }
1305 }
1306
1307
1308 ATH_MSG_INFO("eSF_keys: " << m_electronTriggerSFStringSingle<< "_"<<triggerEleID<<"_"<<triggerEleIso);
1309
1310 if (std::find(eSF_keys.begin(), eSF_keys.end(), m_electronTriggerSFStringSingle+"_"+triggerEleID+"_"+triggerEleIso) != eSF_keys.end()){
1311 triggerEleIso = m_eleIso_WP;
1312 } else if (std::find(eSF_keys.begin(), eSF_keys.end(), m_electronTriggerSFStringSingle+"_"+triggerEleID+"_"+m_el_iso_fallback[triggerEleIso]) != eSF_keys.end()){
1313 //--- Check to see if the only issue is an unknown isolation working point
1314 triggerEleIso = m_el_iso_fallback[triggerEleIso];
1315 ATH_MSG_WARNING("(AsgElectronEfficiencyCorrectionTool_trig_singleLep_*) Your selected electron Iso WP ("
1316 << m_eleIso_WP
1317 << ") does not have trigger SFs defined. Falling back to "
1318 << triggerEleIso
1319 << " for SF calculations");
1320 }
1321 else{
1322 ATH_MSG_ERROR("*** THE SINGLE ELECTRON TRIGGER SF YOU SELECTED (" << m_electronTriggerSFStringSingle << ") GOT NO SUPPORT FOR YOUR ID+ISO WPs (" << m_eleId << "+" << m_eleIso_WP << ") ***");
1323 return StatusCode::FAILURE;
1324 }
1325
1326 toolName = "AsgElectronEfficiencyCorrectionTool_trig_singleLep_" + triggerEleID;
1327 if ( !m_elecEfficiencySFTool_trig_singleLep.isUserConfigured() ) {
1328 m_elecEfficiencySFTool_trig_singleLep.setTypeAndName("AsgElectronEfficiencyCorrectionTool/"+toolName);
1331 ATH_CHECK( m_elecEfficiencySFTool_trig_singleLep.setProperty("IdKey", triggerEleID) );
1332 ATH_CHECK( m_elecEfficiencySFTool_trig_singleLep.setProperty("IsoKey", triggerEleIso) );
1333 ATH_CHECK( m_elecEfficiencySFTool_trig_singleLep.setProperty("CorrelationModel", m_EG_corrModel) );
1334 if (!isData()) {
1335 ATH_CHECK( m_elecEfficiencySFTool_trig_singleLep.setProperty("ForceDataType", (int) (data_type==PATCore::ParticleDataType::Fast)? PATCore::ParticleDataType::Full : data_type) );
1336 }
1337 ATH_CHECK( m_elecEfficiencySFTool_trig_singleLep.setProperty("OutputLevel", this->msg().level()) );
1340
1341
1342 toolName = "AsgElectronEfficiencyCorrectionTool_trigEff_singleLep_" + triggerEleID;
1343 if ( !m_elecEfficiencySFTool_trigEff_singleLep.isUserConfigured() ) {
1344 m_elecEfficiencySFTool_trigEff_singleLep.setTypeAndName("AsgElectronEfficiencyCorrectionTool/"+toolName);
1347 ATH_CHECK( m_elecEfficiencySFTool_trigEff_singleLep.setProperty("IdKey", triggerEleID) );
1348 ATH_CHECK( m_elecEfficiencySFTool_trigEff_singleLep.setProperty("IsoKey", triggerEleIso) );
1349 ATH_CHECK( m_elecEfficiencySFTool_trigEff_singleLep.setProperty("CorrelationModel", m_EG_corrModel) );
1350 if (!isData()) {
1351 ATH_CHECK( m_elecEfficiencySFTool_trigEff_singleLep.setProperty("ForceDataType", (int) (data_type==PATCore::ParticleDataType::Fast)? PATCore::ParticleDataType::Full : data_type) );
1352 }
1353 ATH_CHECK( m_elecEfficiencySFTool_trigEff_singleLep.setProperty("OutputLevel", this->msg().level()) );
1356
1357 if (!m_isRun3){
1358 //mixed-leptons
1359 std::map<std::string,std::string> electronTriggerSFMapMixedLepton {
1360 // legs, Trigger keys,
1361 {"e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose,e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0", m_electronTriggerSFStringSingle},
1362 {"e24_lhvloose_nod0_L1EM20VH,e17_lhvloose_nod0,e12_lhloose_L1EM10VH","DI_E_2015_e12_lhloose_L1EM10VH_2016_e17_lhvloose_nod0_2017_2018_e24_lhvloose_nod0_L1EM20VH"},
1363 {"e26_lhmedium_nod0_L1EM22VHI,e26_lhmedium_nod0","MULTI_L_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_e26_lhmedium_nod0_L1EM22VHI_2017_2018_e26_lhmedium_nod0"},
1364 {"e17_lhloose,e17_lhloose_nod0","MULTI_L_2015_e17_lhloose_2016_2018_e17_lhloose_nod0"},
1365 {"e12_lhloose,e12_lhloose_nod0","MULTI_L_2015_e12_lhloose_2016_2018_e12_lhloose_nod0"},
1366 {"e7_lhmedium,e7_lhmedium_nod0","MULTI_L_2015_e7_lhmedium_2016_2018_e7_lhmedium_nod0"},
1367 {"e9_lhloose,e9_lhloose_nod0,e12_lhvloose_nod0_L1EM10VH","TRI_E_2015_e9_lhloose_2016_e9_lhloose_nod0_2017_2018_e12_lhvloose_nod0_L1EM10VH"}
1368
1369 };
1370
1371 // 2e17 trigger is used in 2017 or 2018?
1373 if (triglist_2017to2018.find("2e17_lhvloose_nod0_L12EM15VHI") != std::string::npos) {
1374 electronTriggerSFMapMixedLepton["e17_lhvloose_nod0_L1EM15VHI"] = "DI_E_2015_e12_lhloose_L1EM10VH_2016_e17_lhvloose_nod0_2017_2018_e17_lhvloose_nod0_L1EM15VHI";
1375 }
1376
1377 std::string triggerMixedEleIso("");
1378
1379 for(auto const& item : electronTriggerSFMapMixedLepton){
1380
1381 if (std::find(eSF_keys.begin(), eSF_keys.end(), item.second+"_"+eleId+"_"+m_eleIso_WP) != eSF_keys.end()){
1382 triggerMixedEleIso = m_eleIso_WP;
1383 } else if (std::find(eSF_keys.begin(), eSF_keys.end(), item.second+"_"+eleId+"_"+m_el_iso_fallback[m_eleIso_WP]) != eSF_keys.end()){
1384 //--- Check to see if the only issue is an unknown isolation working point
1385 triggerMixedEleIso = m_el_iso_fallback[m_eleIso_WP];
1386 ATH_MSG_WARNING("(AsgElectronEfficiencyCorrectionTool_trig_mixLep_*) Your selected electron Iso WP ("
1387 << m_eleIso_WP
1388 << ") does not have trigger SFs defined. Falling back to "
1389 << triggerMixedEleIso
1390 << " for SF calculations");
1391 } else {
1392 ATH_MSG_ERROR("*** THE MIXED ELECTRON TRIGGER SF YOU SELECTED (" << item.second << ") GOT NO SUPPORT FOR YOUR ID+ISO WPs (" << m_eleId << "+" << m_eleIso_WP << "). The fallback options failed as well sorry! ***");
1393 return StatusCode::FAILURE;
1394 }
1395
1396 ATH_MSG_VERBOSE ("Selected WP: " << item.second << "_" << eleId << "_" << triggerMixedEleIso);
1397
1398 toolName = "AsgElectronEfficiencyCorrectionTool_trig_mixLep_" + (item.first).substr(0,8) + m_eleId;
1399 auto t_sf = m_elecEfficiencySFTool_trig_mixLep.emplace(m_elecEfficiencySFTool_trig_mixLep.end(), "AsgElectronEfficiencyCorrectionTool/"+toolName);
1400 ATH_CHECK( t_sf->setProperty("MapFilePath", m_isRun3? m_eleEffMapFilePath : m_eleEffMapFilePathRun2) );
1401 ATH_CHECK( t_sf->setProperty("TriggerKey", item.second) );
1402 ATH_CHECK( t_sf->setProperty("IdKey", eleId) );
1403 ATH_CHECK( t_sf->setProperty("IsoKey", triggerMixedEleIso) );
1404 ATH_CHECK( t_sf->setProperty("CorrelationModel", m_EG_corrModel) );
1405 if (!isData()) {
1406 ATH_CHECK( t_sf->setProperty("ForceDataType", (int) (data_type==PATCore::ParticleDataType::Fast)? PATCore::ParticleDataType::Full : data_type) );
1407 }
1408 ATH_CHECK( t_sf->setProperty("OutputLevel", this->msg().level()) );
1409 ATH_CHECK( t_sf->initialize() );
1410 m_elecTrigSFTools.push_back(t_sf->getHandle());
1411 #ifndef XAOD_STANDALONE
1412 m_legsPerTool[toolName] = item.first;
1413 #else
1414 m_legsPerTool["ToolSvc."+toolName] = item.first;
1415 #endif
1416
1417 toolName = "AsgElectronEfficiencyCorrectionTool_trigEff_mixLep_" + (item.first).substr(0,8) + m_eleId;
1418 auto t_eff = m_elecEfficiencySFTool_trigEff_mixLep.emplace(m_elecEfficiencySFTool_trigEff_mixLep.end(), "AsgElectronEfficiencyCorrectionTool/"+toolName);
1419 ATH_CHECK( t_eff->setProperty("MapFilePath", m_isRun3? m_eleEffMapFilePath : m_eleEffMapFilePathRun2) );
1420 ATH_CHECK( t_eff->setProperty("TriggerKey", "Eff_"+item.second) );
1421 ATH_CHECK( t_eff->setProperty("IdKey", eleId) );
1422 ATH_CHECK( t_eff->setProperty("IsoKey", triggerMixedEleIso) );
1423 ATH_CHECK( t_eff->setProperty("CorrelationModel", m_EG_corrModel) );
1424 if (!isData()) {
1425 ATH_CHECK( t_eff->setProperty("ForceDataType", (int) (data_type==PATCore::ParticleDataType::Fast)? PATCore::ParticleDataType::Full : data_type) );
1426 }
1427 ATH_CHECK( t_eff->setProperty("OutputLevel", this->msg().level()) );
1428 ATH_CHECK( t_eff->initialize() );
1429 m_elecTrigEffTools.push_back(t_eff->getHandle());
1430 #ifndef XAOD_STANDALONE
1431 m_legsPerTool[toolName] = item.first;
1432 #else
1433 m_legsPerTool["ToolSvc."+toolName] = item.first;
1434 #endif
1435
1436 }
1437 }
1438 else ATH_MSG_WARNING("*** THE ELECTRON TRIGGER SF MIXED AND SF DILEP ARE CURRENTY NOT SUPPORTED IN RUN3 ***");
1439
1440 ATH_MSG_WARNING("*** THE ELECTRON CHARGE FLIP SF ARE CURRENTY NOT SUPPORTED ***");
1441 // all the iinitialisation of the related tools have been cleaned up
1442
1443 }
1444
1445 if (m_slices["pho"]) {
1446 // /////////////////////////////////////////////////////////////////////////////////////////
1447 // Initialise photon efficiency tool
1448
1449 if (!m_photonEfficiencySFTool.isUserConfigured() && !isData()) {
1450 m_photonEfficiencySFTool.setTypeAndName("AsgPhotonEfficiencyCorrectionTool/AsgPhotonEfficiencyCorrectionTool_" + m_photonId);
1451
1452 if (m_photonId != "Tight" ) {
1453 ATH_MSG_WARNING( "No Photon efficiency available for " << m_photonId << ", using Tight instead..." );
1454 }
1455
1456 ATH_CHECK( m_photonEfficiencySFTool.setProperty("MapFilePath", "PhotonEfficiencyCorrection/2015_2025/rel22.2/2024_FinalRun2_Recommendation_v1/map1.txt") );
1457 ATH_CHECK( m_photonEfficiencySFTool.setProperty("ForceDataType", isAtlfast()? (m_isRun3? 1: 3) : 1) ); // Set data type: 1 for FULLSIM, 3 for AtlFast. For Run3 pre-rec only FullSim SFs are available
1458 ATH_CHECK( m_photonEfficiencySFTool.setProperty("OutputLevel", this->msg().level()) );
1459 ATH_CHECK( m_photonEfficiencySFTool.retrieve() );
1460 } else if (m_photonEfficiencySFTool.isUserConfigured()) ATH_CHECK( m_photonEfficiencySFTool.retrieve() );
1461
1462 if (!m_photonIsolationSFTool.isUserConfigured() && !isData()) {
1463 m_photonIsolationSFTool.setTypeAndName("AsgPhotonEfficiencyCorrectionTool/AsgPhotonEfficiencyCorrectionTool_isol" + m_photonIso_WP);
1464
1465 if (m_photonIso_WP != "FixedCutTight" && m_photonIso_WP != "FixedCutLoose" && m_photonIso_WP != "TightCaloOnly") {
1466 ATH_MSG_WARNING( "No Photon efficiency available for " << m_photonIso_WP);
1467 }
1468
1469 ATH_CHECK( m_photonIsolationSFTool.setProperty("MapFilePath", "PhotonEfficiencyCorrection/2015_2025/rel22.2/2022_Summer_Prerecom_v1/map1.txt") );
1470 ATH_CHECK( m_photonIsolationSFTool.setProperty("IsoKey", m_photonIso_WP != "TightCaloOnly" ? m_photonIso_WP.substr(8) : m_photonIso_WP )); // Set isolation WP: Loose,Tight,TightCaloOnly
1471 ATH_CHECK( m_photonIsolationSFTool.setProperty("ForceDataType", 1) ); // Set data type: 1 for FULLSIM, 3 for AF2
1472 ATH_CHECK( m_photonIsolationSFTool.setProperty("OutputLevel", this->msg().level()) );
1473 ATH_CHECK( m_photonIsolationSFTool.retrieve() );
1474 } else if (m_photonEfficiencySFTool.isUserConfigured()) ATH_CHECK( m_photonIsolationSFTool.retrieve() );
1475
1476 // trigger scale factors
1477 if (!m_photonTriggerSFTool.isUserConfigured() && !isData()) {
1478 m_photonTriggerSFTool.setTypeAndName("AsgPhotonEfficiencyCorrectionTool/AsgPhotonEfficiencyCorrectionTool_trig" + m_photonTriggerName);
1479
1480 // Fallback to TightCaloOnly if Tight is selected
1481 std::string photonIso_forTrigSF = m_photonIso_WP;
1482 if (m_photonIso_WP == "FixedCutTight") {
1483 ATH_MSG_WARNING( "No Photon trigger SF available for " << m_photonIso_WP << ", using TightCaloOnly instead... Use at your own risk" );
1484 photonIso_forTrigSF = "TightCaloOnly";
1485 } else { // isolation WP supported: Loose or TightCaloOnly, removing "FixedCut" suffix..
1486 photonIso_forTrigSF = TString(m_photonIso_WP).ReplaceAll("FixedCut","").Data();
1487 }
1488
1489 // "symmetric" diphoton triggers (year dependent)
1490 ATH_CHECK( m_photonTriggerSFTool.setProperty("MapFilePath", "PhotonEfficiencyCorrection/2015_2018/rel21.2/Summer2020_Rec_v1/map3.txt") );
1491 ATH_CHECK( m_photonTriggerSFTool.setProperty("IsoKey", photonIso_forTrigSF )); // Set isolation WP: Loose,TightCaloOnly
1492 ATH_CHECK( m_photonTriggerSFTool.setProperty("TriggerKey", m_photonTriggerName ));
1493 ATH_CHECK( m_photonTriggerSFTool.setProperty("ForceDataType", 1) ); // Set data type: 1 for FULLSIM, 3 for AF2
1494 ATH_CHECK( m_photonTriggerSFTool.setProperty("OutputLevel", this->msg().level()) );
1495 ATH_CHECK( m_photonTriggerSFTool.retrieve() );
1496
1497 // "asymmetric" diphoton triggers
1498 std::map<std::string,std::string> diphotonTriggerSFMapAsymmetric {
1499 // legs, Trigger keys,
1500 {"g25_loose,g25_medium_L1EM20VH", "DI_PH_2015_g25_loose_2016_g25_loose_2017_g25_medium_L1EM20VH_2018_g25_medium_L1EM20VH"},
1501 {"g35_loose,g35_medium_L1EM20VH", "DI_PH_2015_g35_loose_2016_g35_loose_2017_g35_medium_L1EM20VH_2018_g35_medium_L1EM20VH"},
1502 };
1503
1504 for(auto const& item : diphotonTriggerSFMapAsymmetric){
1505
1506 toolName = "AsgPhotonEfficiencyCorrectionTool_trigSF_asymm_diphoton_" + (item.first).substr(0,9) + photonIso_forTrigSF;
1507 auto ph_trigSF = m_photonEfficiencySFTool_trigSF_AsymDiphoton.emplace(m_photonEfficiencySFTool_trigSF_AsymDiphoton.end(), "AsgPhotonEfficiencyCorrectionTool/"+toolName);
1508 ATH_CHECK( ph_trigSF->setProperty("MapFilePath", "PhotonEfficiencyCorrection/2015_2018/rel21.2/Summer2020_Rec_v1/map3.txt") );
1509 ATH_CHECK( ph_trigSF->setProperty("IsoKey", photonIso_forTrigSF) );
1510 ATH_CHECK( ph_trigSF->setProperty("TriggerKey", item.second) );
1511 ATH_CHECK( ph_trigSF->setProperty("ForceDataType", 1) ); // Set DataType: 1 for FullSim and 3 for AFII
1512 ATH_CHECK( ph_trigSF->setProperty("OutputLevel", this->msg().level()) );
1513 ATH_CHECK( ph_trigSF->initialize() );
1514 m_photonTrigSFTools.push_back(ph_trigSF->getHandle());
1515 #ifndef XAOD_STANDALONE
1516 m_legsPerTool_ph[toolName] = item.first;
1517 #else
1518 m_legsPerTool_ph["ToolSvc."+toolName] = item.first;
1519 #endif
1520
1521 toolName = "AsgPhotonEfficiencyCorrectionTool_trigEff_asymm_diphoton_" + (item.first).substr(0,9) + photonIso_forTrigSF;
1522 auto ph_trigEff = m_photonEfficiencySFTool_trigEff_AsymDiphoton.emplace(m_photonEfficiencySFTool_trigEff_AsymDiphoton.end(), "AsgPhotonEfficiencyCorrectionTool/"+toolName);
1523 ATH_CHECK( ph_trigEff->setProperty("MapFilePath", "PhotonEfficiencyCorrection/2015_2018/rel21.2/Summer2020_Rec_v1/map3.txt") );
1524 ATH_CHECK( ph_trigEff->setProperty("IsoKey", photonIso_forTrigSF) );
1525 ATH_CHECK( ph_trigEff->setProperty("TriggerKey", "Eff_"+item.second) );
1526 ATH_CHECK( ph_trigEff->setProperty("ForceDataType", 1) ); // Set DataType: 1 for FullSim and 3 for AFII
1527 ATH_CHECK( ph_trigEff->setProperty("OutputLevel", this->msg().level()) );
1528 ATH_CHECK( ph_trigEff->initialize() );
1529 m_photonTrigEffTools.push_back(ph_trigEff->getHandle());
1530 #ifndef XAOD_STANDALONE
1531 m_legsPerTool_ph[toolName] = item.first;
1532 #else
1533 m_legsPerTool_ph["ToolSvc."+toolName] = item.first;
1534 #endif
1535
1536 }
1537 }
1538 }
1539
1540 }
1541 if (m_slices["ele"] || m_slices["pho"]) {
1543 // Initialize the EgammaAmbiguityTool
1544
1545 if (!m_egammaAmbiguityTool.isUserConfigured()) {
1546 m_egammaAmbiguityTool.setTypeAndName("EGammaAmbiguityTool/EGammaAmbiguityTool");
1547 ATH_CHECK( m_egammaAmbiguityTool.setProperty("OutputLevel", this->msg().level()) );
1548 ATH_CHECK( m_egammaAmbiguityTool.retrieve() );
1549 } else ATH_CHECK( m_egammaAmbiguityTool.retrieve() );
1550 }
1551
1552
1553 if (m_slices["ele"]) {
1554 //disable ///////////////////////////////////////////////////////////////////////////////////////////
1555 //disable // Initialize the AsgElectronChargeIDSelector
1556
1557 //disable if (!m_elecChargeIDSelectorTool.isUserConfigured()) {
1558
1559 //disable // For the selector, can use the nice function
1560 //disable std::string eleId = EG_WP(m_eleId);
1561 //disable m_elecChargeIDSelectorTool.setTypeAndName("AsgElectronChargeIDSelectorTool/ElectronChargeIDSelectorTool_"+eleId);
1562 //disable //default cut value for https://twiki.cern.ch/twiki/bin/view/AtlasProtected/ElectronChargeFlipTaggerTool
1563 //disable float BDTcut = -0.337671; // Loose 97%
1564 //disable if (m_eleChID_WP != "Loose" && !m_eleChID_WP.empty()) {
1565 //disable ATH_MSG_ERROR("Only Loose WP is supported in R21. Invalid ChargeIDSelector WP selected : " << m_eleChID_WP);
1566 //disable return StatusCode::FAILURE;
1567 //disable }
1568
1569 //disable ATH_CHECK( m_elecChargeIDSelectorTool.setProperty("TrainingFile", "ElectronPhotonSelectorTools/ChargeID/ECIDS_20180731rel21Summer2018.root"));
1570 //disable ATH_CHECK( m_elecChargeIDSelectorTool.setProperty("CutOnBDT", BDTcut));
1571 //disable ATH_CHECK( m_elecChargeIDSelectorTool.setProperty("OutputLevel", this->msg().level()) );
1572 //disable ATH_CHECK( m_elecChargeIDSelectorTool.retrieve() );
1573 //disable } else ATH_CHECK( m_elecChargeIDSelectorTool.retrieve() );
1574
1575
1577 // Initialise egamma calibration tool
1578
1579 if (!m_egammaCalibTool.isUserConfigured()) {
1580 m_egammaCalibTool.setTypeAndName("CP::EgammaCalibrationAndSmearingTool/EgammaCalibrationAndSmearingTool");
1581 ATH_MSG_DEBUG( "Initialising EgcalibTool " );
1582 ATH_CHECK( m_egammaCalibTool.setProperty("ESModel", m_isRun3 ? "es2024_Run3_v0" : "es2023_R22_Run2_v1") );
1583 ATH_CHECK( m_egammaCalibTool.setProperty("decorrelationModel", "1NP_v1") );
1584 // allows to bypass (intended) abort from of egamma calibration tool when configured for fastSim
1586 ATH_MSG_WARNING( "Forcing EgcalibTool to use calibrations for full simulation" );
1587 ATH_CHECK( m_egammaCalibTool.setProperty("useFastSim", false) );
1588 }
1589 else {
1590 ATH_MSG_INFO("is Fast Sim:" << isAtlfast());
1591 ATH_CHECK( m_egammaCalibTool.setProperty("useFastSim", isAtlfast() ? 1 : 0) );
1592 }
1593 ATH_CHECK( m_egammaCalibTool.setProperty("OutputLevel", this->msg().level()) );
1594 ATH_CHECK( m_egammaCalibTool.retrieve() );
1595 } else ATH_CHECK( m_egammaCalibTool.retrieve() );
1596 }
1597
1598
1599 if (m_slices["tau"]) {
1601
1603 // Initialise path to tau config file and config reader
1604
1605 std::string inputfile = "";
1606 if (!m_tauConfigPath.empty() && (m_tauConfigPath!="default")) inputfile = m_tauConfigPath;
1607 else if (m_tauId == "rnn001") inputfile = "SUSYTools/tau_selection_rnn001.conf";
1608 else if (m_tauId == "VeryLoose") inputfile = "SUSYTools/tau_selection_veryloose.conf";
1609 else if (m_tauId == "Loose") inputfile = "SUSYTools/tau_selection_loose.conf";
1610 else if (m_tauId == "Medium") inputfile = "SUSYTools/tau_selection_medium.conf";
1611 else if (m_tauId == "Tight") inputfile = "SUSYTools/tau_selection_tight.conf";
1612 else {
1613 ATH_MSG_ERROR("Invalid tau ID selected: " << m_tauId);
1614 return StatusCode::FAILURE;
1615 }
1616
1617 // Read in the config file so we can retrieve the fields later when configuring the efficiency tools
1618 if ( m_tauConfigReader.ReadFile( PathResolverFindCalibFile(inputfile).c_str(), EEnvLevel(0) ) ) {
1619 ATH_MSG_ERROR( "Error while reading tau config file : " << inputfile );
1620 return StatusCode::FAILURE;
1621 }
1622 else ATH_MSG_DEBUG( "Successfully read tau config file : " << inputfile );
1623
1624
1626 // Initialise tau selection tools
1627
1628 if (!m_tauSelTool.isUserConfigured()) {
1629 toolName = "TauSelectionTool_" + m_tauId;
1630 m_tauSelTool.setTypeAndName("TauAnalysisTools::TauSelectionTool/"+toolName);
1631 ATH_CHECK( m_tauSelTool.setProperty("ConfigPath", inputfile) );
1632 ATH_CHECK( m_tauSelTool.setProperty("OutputLevel", this->msg().level()) );
1633 ATH_CHECK( m_tauSelTool.retrieve() );
1634 } else ATH_CHECK( m_tauSelTool.retrieve() );
1635
1636
1637 if (!m_tauSelToolBaseline.isUserConfigured()) {
1638 std::string inputfile = "";
1640 else if (m_tauIdBaseline == "rnn001") inputfile = "SUSYTools/tau_selection_rnn001.conf";
1641 else if (m_tauIdBaseline == "VeryLoose") inputfile = "SUSYTools/tau_selection_veryloose.conf";
1642 else if (m_tauIdBaseline == "Loose") inputfile = "SUSYTools/tau_selection_loose.conf";
1643 else if (m_tauIdBaseline == "Medium") inputfile = "SUSYTools/tau_selection_medium.conf";
1644 else if (m_tauIdBaseline == "Tight") inputfile = "SUSYTools/tau_selection_tight.conf";
1645 else {
1646 ATH_MSG_ERROR("Invalid baseline tau ID selected: " << m_tauIdBaseline);
1647 return StatusCode::FAILURE;
1648 }
1649 toolName = "TauSelectionToolBaseline_" + m_tauIdBaseline;
1650 m_tauSelToolBaseline.setTypeAndName("TauAnalysisTools::TauSelectionTool/"+toolName);
1651 ATH_CHECK( m_tauSelToolBaseline.setProperty("ConfigPath", inputfile) );
1652
1653 ATH_CHECK( m_tauSelToolBaseline.setProperty("OutputLevel", this->msg().level()) );
1654 ATH_CHECK( m_tauSelToolBaseline.retrieve() );
1655 } else ATH_CHECK( m_tauSelToolBaseline.retrieve() );
1656
1657
1659 // Initialise tau efficiency tool
1660
1661 if (!m_tauEffTool.isUserConfigured() && !isData()) {
1662 toolName = "TauEffTool_" + m_tauId;
1663 m_tauEffTool.setTypeAndName("TauAnalysisTools::TauEfficiencyCorrectionsTool/"+toolName);
1664
1665 std::vector<int> correction_types;
1666 // Read out the tau ID from the config file and map into the enum from tau CP
1667 std::string jetIDWP = m_tauConfigReader.GetValue("JetIDWP" ,"");
1668 ANA_MSG_DEBUG( "Found JetIDWP in tau config file : " << jetIDWP );
1669 int jet_id_lvl;
1670 if (jetIDWP == "JETIDNONE") jet_id_lvl = (int)TauAnalysisTools::JetID::JETIDNONE;
1671 else if (jetIDWP == "JETIDRNNVERYLOOSE") jet_id_lvl = (int)TauAnalysisTools::JetID::JETIDRNNVERYLOOSE;
1672 else if (jetIDWP == "JETIDRNNLOOSE") jet_id_lvl = (int)TauAnalysisTools::JetID::JETIDRNNLOOSE;
1673 else if (jetIDWP == "JETIDRNNMEDIUM") jet_id_lvl = (int)TauAnalysisTools::JetID::JETIDRNNMEDIUM;
1674 else if (jetIDWP == "JETIDRNNTIGHT") jet_id_lvl = (int)TauAnalysisTools::JetID::JETIDRNNTIGHT;
1675 else {
1676 ATH_MSG_ERROR("Invalid Tau ID in tau config file " << jetIDWP);
1677 return StatusCode::FAILURE;
1678 }
1679 // Add retrieval of reco and ID SFs
1680 correction_types.insert(correction_types.end(), {TauAnalysisTools::EfficiencyCorrectionType::SFRecoHadTau,
1681 TauAnalysisTools::EfficiencyCorrectionType::SFJetIDHadTau});
1682
1683 // Read out the (optional) Ele OR from the config file and map into the enum from tau CP
1684 std::string eleIDWP = m_tauConfigReader.GetValue("EleIDWP" ,"");
1685 ANA_MSG_DEBUG( "Found EleIDWP in tau config file : " << eleIDWP );
1686 int ele_id_lvl = -1;
1687 if (eleIDWP == "ELEIDRNNLOOSE") ele_id_lvl = (int)TauAnalysisTools::EleID::ELEIDRNNLOOSE;
1688 else if (eleIDWP == "ELEIDRNNMEDIUM") ele_id_lvl = (int)TauAnalysisTools::EleID::ELEIDRNNMEDIUM;
1689 else if (eleIDWP == "ELEIDRNNTIGHT") ele_id_lvl = (int)TauAnalysisTools::EleID::ELEIDRNNTIGHT;
1690 else {
1691 ATH_MSG_INFO("No or invalid Ele OR in tau config file " << eleIDWP << " will not apply SFs for electro veto" );
1692 }
1693 // Add retrieval of electron veto SFs if its applied
1694 if (ele_id_lvl != -1 )
1695 correction_types.insert(correction_types.end(), {TauAnalysisTools::EfficiencyCorrectionType::SFEleIDHadTau,
1696 TauAnalysisTools::EfficiencyCorrectionType::SFEleIDElectron});
1697
1698 ATH_CHECK( m_tauEffTool.setProperty("JetIDLevel", jet_id_lvl) );
1699 ATH_CHECK( m_tauEffTool.setProperty("EleIDLevel", ele_id_lvl) );
1700 ATH_CHECK( m_tauEffTool.setProperty("EfficiencyCorrectionTypes", correction_types) );
1701 ATH_CHECK( m_tauEffTool.setProperty("OutputLevel", this->msg().level()) );
1702 ATH_CHECK( m_tauEffTool.setProperty("useFastSim", isAtlfast()) );
1703 ATH_CHECK( m_tauEffTool.setProperty("RecommendationTag", m_tauEffToolRecommendationTag) );
1704 if (m_isRun3){ ATH_CHECK( m_tauEffTool.setProperty("Campaign", "mc23") );}
1705 else { ATH_CHECK( m_tauEffTool.setProperty("Campaign", "mc20") );}
1706 ATH_CHECK( m_tauEffTool.retrieve() );
1707 } else if (m_tauEffTool.isUserConfigured()) ATH_CHECK( m_tauEffTool.retrieve() );
1708
1709
1711 // Initialise tau trigger efficiency tool(s)
1712
1713 if (!isData()) {
1714 int iTauID = (int) TauAnalysisTools::JETIDNONE;
1715 if (m_tauId == "rnn001") iTauID = (int) TauAnalysisTools::JETIDNONE;
1716 else if (m_tauId == "VeryLoose") iTauID = (int) TauAnalysisTools::JETIDRNNVERYLOOSE;
1717 else if (m_tauId == "Loose") iTauID = (int) TauAnalysisTools::JETIDRNNLOOSE;
1718 else if (m_tauId == "Medium") iTauID = (int) TauAnalysisTools::JETIDRNNMEDIUM;
1719 else if (m_tauId == "Tight") iTauID = (int) TauAnalysisTools::JETIDRNNTIGHT;
1720 else {
1721 ATH_MSG_ERROR("Invalid tau ID selected: " << m_tauId);
1722 return StatusCode::FAILURE;
1723 }
1724
1725 // map format: SF file name, corresponding single-tau leg (comma-separated in case of OR)
1727 {"HLT_tau25_medium1_tracktwo", "HLT_tau25_medium1_tracktwo"},
1728 {"HLT_tau35_medium1_tracktwo", "HLT_tau35_medium1_tracktwo"},
1729 {"HLT_tau50L1TAU12_medium1_tracktwo", "HLT_tau50_medium1_tracktwo_L1TAU12"},
1730 {"HLT_tau60_medium1_tracktwo", "HLT_tau60_medium1_tracktwo"},
1731 {"HLT_tau80L1TAU60_medium1_tracktwo", "HLT_tau80_medium1_tracktwo_L1TAU60"},
1732 {"HLT_tau125_medium1_tracktwo", "HLT_tau125_medium1_tracktwo"},
1733 {"HLT_tau160_medium1_tracktwo", "HLT_tau160_medium1_tracktwo"},
1734 {"HLT_tau160L1TAU100_medium1_tracktwo", "HLT_tau160_medium1_tracktwo_L1TAU100"},
1735 // whole 2018 data taking period
1736 {"HLT_tau25_medium1_tracktwoEF", "HLT_tau25_medium1_tracktwoEF"},
1737 {"HLT_tau35_medium1_tracktwoEF", "HLT_tau35_medium1_tracktwoEF"},
1738 {"HLT_tau60_medium1_tracktwoEF", "HLT_tau60_medium1_tracktwoEF"},
1739 {"HLT_tau80L1TAU60_medium1_tracktwoEF", "HLT_tau80_medium1_tracktwoEF_L1TAU60"},
1740 {"HLT_tau160L1TAU100_medium1_tracktwoEF", "HLT_tau160_medium1_tracktwoEF_L1TAU100"},
1741 };
1742
1743 if (m_isRun3){
1745 // 2022, 2023
1746 {"HLT_tau25_mediumRNN_tracktwoMVA", "HLT_tau25_mediumRNN_tracktwoMVA"},
1747 {"HLT_tau35_mediumRNN_tracktwoMVA", "HLT_tau35_mediumRNN_tracktwoMVA"},
1748 // 2022, 2023 75-1800 bunches
1749 {"HLT_tau160_mediumRNN_tracktwoMVA", "HLT_tau160_mediumRNN_tracktwoMVA_L1TAU100"},
1750 // 2023 from 400 bunches
1751 {"HLT_tau160_mediumRNN_tracktwoMVA", "HLT_tau160_mediumRNN_tracktwoMVA_L1eTAU140"}
1752 };
1753 }
1754
1755 for(auto const& trigger : m_tau_trig_support) {
1756 toolName = "TauTrigEffTool_" + m_tauId + "_" + trigger.first;
1757 auto tau_trigSF = m_tauTrigEffTool.emplace(m_tauTrigEffTool.end(), "TauAnalysisTools::TauEfficiencyCorrectionsTool/"+toolName);
1758 ATH_CHECK( tau_trigSF->setProperty("EfficiencyCorrectionTypes", std::vector<int>({TauAnalysisTools::SFTriggerHadTau})) );
1759 ATH_CHECK( tau_trigSF->setProperty("TriggerName", trigger.first) );
1760 ATH_CHECK( tau_trigSF->setProperty("JetIDLevel", iTauID) );
1761 ATH_CHECK( tau_trigSF->setProperty("OutputLevel", this->msg().level()) );
1762 ATH_CHECK( tau_trigSF->setProperty("useFastSim", isAtlfast()) );
1763 ATH_CHECK( tau_trigSF->setProperty("RecommendationTag", m_tauEffToolRecommendationTag) );
1764 if (m_isRun3){ ATH_CHECK( tau_trigSF->setProperty("Campaign", m_mcCampaign) );}
1765 else { ATH_CHECK( tau_trigSF->setProperty("Campaign", "mc20") );}
1766 ATH_CHECK( tau_trigSF->initialize() );
1767 }
1768 }
1769
1770
1772 // Initialise tau smearing tool
1773
1774 if (!m_tauSmearingTool.isUserConfigured()) {
1775 m_tauSmearingTool.setTypeAndName("TauAnalysisTools::TauSmearingTool/TauSmearingTool");
1776 ATH_CHECK( m_tauSmearingTool.setProperty("RecommendationTag", m_tauSmearingToolRecommendationTag) );
1777 if (m_isRun3){ ATH_CHECK( m_tauSmearingTool.setProperty("Campaign", "mc23") );}
1778 else { ATH_CHECK( m_tauSmearingTool.setProperty("Campaign", "mc20") );}
1779 ATH_CHECK( m_tauSmearingTool.setProperty("Generator", m_tauSmearingToolGenerator) );
1780 ATH_CHECK( m_tauSmearingTool.setProperty("MVATESQualityCheck", m_ApplyMVATESQualityCheck) );
1781 ATH_CHECK( m_tauSmearingTool.setProperty("useFastSim", isAtlfast()) );
1782 ATH_CHECK( m_tauSmearingTool.setProperty("OutputLevel", this->msg().level()) );
1783 ATH_CHECK( m_tauSmearingTool.retrieve() );
1784 } else ATH_CHECK( m_tauSmearingTool.retrieve() );
1785
1786
1788 // Initialise tau truth matching tool
1789
1790 if (!m_tauTruthMatch.isUserConfigured() && m_tauDoTTM && !isData()) {
1791 m_tauTruthMatch.setTypeAndName("TauAnalysisTools::TauTruthMatchingTool/TauTruthMatch");
1792 ATH_CHECK( m_tauTruthMatch.setProperty("TruthJetContainerName", m_defaultTruthJets ) );
1793 ATH_CHECK( m_tauTruthMatch.setProperty("OutputLevel", this->msg().level()) );
1794 ATH_CHECK( m_tauTruthMatch.retrieve() );
1795 } else if (m_tauTruthMatch.isUserConfigured()) ATH_CHECK( m_tauTruthMatch.retrieve() );
1796
1797
1798 }
1799
1800
1801 if (m_slices["bjet"]) {
1803 // Initialise B-tagging tools
1804
1805 // btagSelectionTool
1806 std::string jetcollBTag = jetcoll;
1807 if (jetcoll == "AntiKt4LCTopoJets") {
1808 ATH_MSG_WARNING(" *** HACK *** Treating LCTopoJets jets as EMTopo -- use at your own risk!");
1809 jetcollBTag = "AntiKt4EMTopoJets";
1810 }
1811
1812 // print a warning if there is indication that the user supplied a CDI file not matching to the sample being processed
1813 // see --> https://twiki.cern.ch/twiki/bin/view/AtlasProtected/BTagRel22HighLevelSummary
1814 if( (m_bTaggingCalibrationFilePath.find(!m_isRun3 ? "MC20" : "MC23") == std::string::npos) && (m_bTaggingCalibrationFilePath.find(!m_isRun3 ? "MC20" : "MC21") == std::string::npos) ) {
1815 ATH_MSG_WARNING( "You are using a "<<(!m_isRun3 ? "Run3":"Run2")<<" CDI file while running on "<<(!m_isRun3 ? "Run2":"Run3")<<" sample; Please updates your CDI file to the correct version for "<<(!m_isRun3 ? "Run2":"Run3"));
1816 }
1817
1818 if (m_useBtagging && !m_btagSelTool.isUserConfigured() && !m_BtagWP.empty()) {
1819 if (jetcollBTag.find("AntiKt4EMTopoJets") == std::string::npos && jetcollBTag.find("AntiKt4EMPFlowJets")==std::string::npos) {
1820 ATH_MSG_WARNING("** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1821 return StatusCode::FAILURE;
1822 }
1823
1824 toolName = "BTagSel_" + jetcollBTag + m_BtagTagger + m_BtagWP;
1825
1826 m_btagSelTool.setTypeAndName("BTaggingSelectionTool/"+toolName);
1827 ATH_CHECK( m_btagSelTool.setProperty("TaggerName", m_BtagTagger ) );
1828 ATH_CHECK( m_btagSelTool.setProperty("OperatingPoint", m_BtagWP ) );
1829 ATH_CHECK( m_btagSelTool.setProperty("JetAuthor", jetcollBTag ) );
1830 ATH_CHECK( m_btagSelTool.setProperty("MinPt", m_BtagMinPt ) );
1831 ATH_CHECK( m_btagSelTool.setProperty("FlvTagCutDefinitionsFileName", m_bTaggingCalibrationFilePath) );
1832 // Read from BTagging object. This will be needed until the input file is produced from
1833 // a derivation release that includes !80336.
1834 ATH_CHECK( m_btagSelTool.setProperty("readFromBTaggingObject", true ) );
1835 ATH_CHECK( m_btagSelTool.setProperty("OutputLevel", this->msg().level()) );
1836 ATH_CHECK( m_btagSelTool.retrieve() );
1837 } else if (m_btagSelTool.isUserConfigured()) ATH_CHECK( m_btagSelTool.retrieve() );
1838
1839
1840 if (m_useBtagging && !m_btagSelTool_OR.isUserConfigured() && !m_orBtagWP.empty()) {
1841 if (jetcoll != "AntiKt4EMTopoJets" && jetcoll != "AntiKt4EMPFlowJets") {
1842 ATH_MSG_WARNING("** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1843 return StatusCode::FAILURE;
1844 }
1845
1846 toolName = "BTagSelOR_" + jetcollBTag + m_orBtagWP;
1847 m_btagSelTool_OR.setTypeAndName("BTaggingSelectionTool/"+toolName);
1848 ATH_CHECK( m_btagSelTool_OR.setProperty("TaggerName", m_BtagTagger ) );
1849 ATH_CHECK( m_btagSelTool_OR.setProperty("OperatingPoint", m_orBtagWP ) );
1850 ATH_CHECK( m_btagSelTool_OR.setProperty("JetAuthor", jetcollBTag ) );
1851 ATH_CHECK( m_btagSelTool_OR.setProperty("MinPt", m_BtagMinPt ) );
1852 ATH_CHECK( m_btagSelTool_OR.setProperty("FlvTagCutDefinitionsFileName", m_bTaggingCalibrationFilePath) );
1853 // Read from BTagging object. This will be needed until the input file is produced from
1854 // a derivation release that includes !80336.
1855 ATH_CHECK( m_btagSelTool_OR.setProperty("readFromBTaggingObject", true ) );
1856 ATH_CHECK( m_btagSelTool_OR.setProperty("OutputLevel", this->msg().level()) );
1857 ATH_CHECK( m_btagSelTool_OR.retrieve() );
1858 } else if (m_btagSelTool_OR.isUserConfigured()) ATH_CHECK( m_btagSelTool_OR.retrieve() );
1859
1860
1861 std::string trkjetcoll = m_defaultTrackJets;
1862 const std::string& BTagColl_TrkJet = trkjetcoll;
1863 if (m_slices["tjet"]) {
1864 if ( m_useBtagging_trkJet && m_defaultTrackJets.empty()) {
1865 m_useBtagging_trkJet = false;
1866 ATH_MSG_INFO("TrackJet collection set to None: disabling btagging for TrackJets.");
1867 }
1868
1869 if (m_useBtagging_trkJet && !m_btagSelTool_trkJet.isUserConfigured() && !m_BtagWP_trkJet.empty()) {
1870 if (trkjetcoll.find("AntiKt2PV0TrackJets")==std::string::npos && trkjetcoll.find("AntiKtVR30Rmax4Rmin02TrackJets")==std::string::npos) {
1871 ATH_MSG_WARNING("** Only AntiKt2PV0TrackJets and AntiKtVR30Rmax4Rmin02TrackJets are supported with FTAG scale factors!");
1872 return StatusCode::FAILURE;
1873 }
1874
1875 toolName = "BTagSel_" + trkjetcoll + m_BtagTagger_trkJet + m_BtagWP_trkJet;
1876
1877 m_btagSelTool_trkJet.setTypeAndName("BTaggingSelectionTool/"+toolName);
1878 ATH_CHECK( m_btagSelTool_trkJet.setProperty("TaggerName", m_BtagTagger_trkJet ) );
1879 ATH_CHECK( m_btagSelTool_trkJet.setProperty("OperatingPoint", m_BtagWP_trkJet ) );
1880 ATH_CHECK( m_btagSelTool_trkJet.setProperty("MinPt", m_BtagMinPt_trkJet ) );
1881 ATH_CHECK( m_btagSelTool_trkJet.setProperty("JetAuthor", BTagColl_TrkJet ) );
1882 ATH_CHECK( m_btagSelTool_trkJet.setProperty("MinPt", m_BtagMinPt_trkJet ) );
1883 ATH_CHECK( m_btagSelTool_trkJet.setProperty("FlvTagCutDefinitionsFileName", m_bTaggingCalibrationFilePath) );
1884 // Read from BTagging object. This will be needed until the input file is produced from
1885 // a derivation release that includes !80336.
1886 ATH_CHECK( m_btagSelTool_trkJet.setProperty("readFromBTaggingObject", true ) );
1887 ATH_CHECK( m_btagSelTool_trkJet.setProperty("OutputLevel", this->msg().level()) );
1888 ATH_CHECK( m_btagSelTool_trkJet.retrieve() );
1889 } else if (m_btagSelTool_trkJet.isUserConfigured()) ATH_CHECK( m_btagSelTool_trkJet.retrieve() );
1890 }
1891
1892 // Set MCshowerType for FTAG MC/MC SFs
1893 // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/BTagCalibrationRecommendationsRelease21#MC_MC_Scale_Factors_for_Analysis
1894 std::string MCshowerID;
1895 if(m_showerType==-1){
1896 ATH_MSG_ERROR( "Error! m_showerType=-1, which is an error case for FTAG MC/MC SFs." );
1897 return StatusCode::FAILURE;
1898 }
1899 if(m_BtagTagger=="DL1dv01"){
1900 if(!m_isRun3){
1901 MCshowerID= "default"; // Powheg+Pythia8 (410470) - PhPy8EG_A14
1902 if (m_showerType == 1) MCshowerID = "411233"; // PowhegHerwig7
1903 else if (m_showerType == 2) MCshowerID = "600666"; // PhH7EG_H7UE - 601414
1904 else if (m_showerType == 3) MCshowerID = "410250"; // Sherpa_221
1905 else if (m_showerType == 4) MCshowerID = "700122"; // Sh_2210
1906 else if (m_showerType == 5) MCshowerID = "700122"; // Sh_2211
1907 else if (m_showerType == 6) MCshowerID = "700660"; // Sh_2212 - 700660
1908 else if (m_showerType == 7) MCshowerID = "410464"; // aMcAtNloPy8
1909 else if (m_showerType == 8) MCshowerID = "412116"; // aMcAtNloHerwig7
1910 else if (m_showerType != 0){
1911 ATH_MSG_WARNING("Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1912 }
1913 }
1914 else{
1915 MCshowerID= "default"; // Powheg+Pythia8 (601229) - PhPy8EG_A14
1916 if (m_showerType == 2) MCshowerID = "601414"; // POWHEG+Herwig721 - PhH7EG_A14
1917 else if (m_showerType == 6) MCshowerID = "700660"; // Sherpa 2.2.12 - Sh_2212
1918 else if (m_showerType != 0){
1919 ATH_MSG_WARNING("Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1920 }
1921 }
1922 } else if (m_BtagTagger=="GN2v01"){
1923 if(!m_isRun3){
1924 MCshowerID= "default"; // PowhegPythia8EvtGen (410470)
1925 if (m_showerType == 2) MCshowerID = "411233"; // POWHEGHERWIG7 - 411233
1926 else if (m_showerType == 3) MCshowerID = "600666"; // PhH7EG_H7UE - 600666
1927 else if (m_showerType == 4) MCshowerID = "700660"; // Sh_2210 FTAGAnalysisConfig uses this, but docs say only 11-16 can be used
1928 else if (m_showerType == 5) MCshowerID = "700660"; // Sh_2211
1929 else if (m_showerType == 6) MCshowerID = "700660"; // Sh_2212
1930 else if (m_showerType == 7) MCshowerID = "700660"; // Sh_2214
1931 else if (m_showerType == 8) {
1932 ATH_MSG_WARNING("Unknown Sherpa version detected! Using FTAG MC-MC SFs for Sherpa 2.2.11-2.2.16. Please check if these are applicable for this sample!");
1933 MCshowerID = "700660"; // Unknown Sherpa Version. This is to handle Sh_blank (e.g. DSID 701050). The examples I've found are all 2.2.16, but that's not guaranteed.
1934 }
1935 else if (m_showerType != 0){
1936 ATH_MSG_WARNING("Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1937 }
1938 }
1939 else {
1940 MCshowerID= "default"; // PowhegPythia8EvtGen (601229)
1941 if (m_showerType == 3) MCshowerID = "601414"; // PhH7EG_H7UE - 601414
1942 else if (m_showerType == 5) MCshowerID = "700808"; // Sh_2211
1943 else if (m_showerType == 6) MCshowerID = "700808"; // Sh_2212
1944 else if (m_showerType == 7) MCshowerID = "700808"; // Sh_2214
1945 else if (m_showerType == 8) {
1946 ATH_MSG_WARNING("Unknown Sherpa version detected! Using FTAG MC-MC SFs for Sherpa 2.2.11-2.2.16. Please check if these are applicable for this sample!");
1947 MCshowerID = "700660"; // Unknown Sherpa Version
1948 }
1949 else if (m_showerType != 0){
1950 ATH_MSG_WARNING("Unknown ShowerID detected! Using default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1951 }
1952 }
1953 } else {
1954 ATH_MSG_WARNING("Unknown b-tagger detected! Only DL1dv01 and GN2v01 are supported. Falling back to default FTAG MC-MC SFs (Powheg+Pythia8). Please check if these are applicable for this sample!");
1955 MCshowerID= "default";
1956 }
1957
1958 // btagEfficiencyTool
1959 if (m_useBtagging && !m_btagEffTool.isUserConfigured() && !m_BtagWP.empty()) {
1960 if (jetcoll != "AntiKt4EMTopoJets" && jetcoll != "AntiKt4EMPFlowJets") {
1961 ATH_MSG_WARNING("** Only AntiKt4EMTopoJets and AntiKt4EMPFlowJets are supported with FTAG scale factors!");
1962 return StatusCode::FAILURE;
1963 }
1964
1965 toolName = "BTagSF_" + jetcollBTag + m_BtagTagger + m_BtagWP;
1966 m_btagEffTool.setTypeAndName("BTaggingEfficiencyTool/"+toolName);
1967 ATH_CHECK( m_btagEffTool.setProperty("TaggerName", m_BtagTagger ) );
1968 ATH_CHECK( m_btagEffTool.setProperty("ScaleFactorFileName", m_bTaggingCalibrationFilePath) );
1969 ATH_CHECK( m_btagEffTool.setProperty("OperatingPoint", m_BtagWP ) );
1970 ATH_CHECK( m_btagEffTool.setProperty("JetAuthor", jetcollBTag ) );
1971 // Read from BTagging object. This will be needed until the input file is produced from
1972 // a derivation release that includes !80336.
1973 ATH_CHECK( m_btagEffTool.setProperty("readFromBTaggingObject", true) );
1974 ATH_CHECK( m_btagEffTool.setProperty("MinPt", m_BtagMinPt ) );
1975 ATH_CHECK( m_btagEffTool.setProperty("SystematicsStrategy", m_BtagSystStrategy ) );
1976 ATH_CHECK( m_btagEffTool.setProperty("EfficiencyBCalibrations", MCshowerID ));
1977 ATH_CHECK( m_btagEffTool.setProperty("EfficiencyCCalibrations", MCshowerID ));
1978 ATH_CHECK( m_btagEffTool.setProperty("EfficiencyTCalibrations", MCshowerID ));
1979 ATH_CHECK( m_btagEffTool.setProperty("EfficiencyLightCalibrations", MCshowerID ));
1980 ATH_CHECK( m_btagEffTool.setProperty("EigenvectorReductionB", m_EigenvectorReductionB ));
1981 ATH_CHECK( m_btagEffTool.setProperty("EigenvectorReductionC", m_EigenvectorReductionC ));
1982 ATH_CHECK( m_btagEffTool.setProperty("EigenvectorReductionLight", m_EigenvectorReductionLight ));
1983 ATH_CHECK( m_btagEffTool.setProperty("OutputLevel", this->msg().level()) );
1984 ATH_CHECK( m_btagEffTool.retrieve() );
1985 } else ATH_CHECK( m_btagEffTool.retrieve() );
1986
1987
1988 if (m_slices["tjet"]) {
1989 if (m_useBtagging_trkJet && !m_btagEffTool_trkJet.isUserConfigured() && !m_BtagWP_trkJet.empty()) {
1990 if (trkjetcoll.find("AntiKt2PV0TrackJets")==std::string::npos && trkjetcoll.find("AntiKtVR30Rmax4Rmin02TrackJets")==std::string::npos) {
1991 ATH_MSG_WARNING("** Only AntiKt2PV0TrackJets and AntiKtVR30Rmax4Rmin02TrackJets are supported with FTAG scale factors!");
1992 return StatusCode::FAILURE;
1993 }
1994
1995 toolName = "BTagSF_" + trkjetcoll;
1996 m_btagEffTool_trkJet.setTypeAndName("BTaggingEfficiencyTool/"+toolName);
1997 ATH_CHECK( m_btagEffTool_trkJet.setProperty("TaggerName", m_BtagTagger_trkJet ) );
1998 ATH_CHECK( m_btagEffTool_trkJet.setProperty("ScaleFactorFileName", m_bTaggingCalibrationFilePath) );
1999 ATH_CHECK( m_btagEffTool_trkJet.setProperty("OperatingPoint", m_BtagWP_trkJet ) );
2000 ATH_CHECK( m_btagEffTool_trkJet.setProperty("JetAuthor", BTagColl_TrkJet ) );
2001 ATH_CHECK( m_btagEffTool_trkJet.setProperty("MinPt", m_BtagMinPt_trkJet ) );
2002 ATH_CHECK( m_btagEffTool_trkJet.setProperty("SystematicsStrategy", m_BtagSystStrategy ) );
2003 ATH_CHECK( m_btagEffTool_trkJet.setProperty("EfficiencyBCalibrations", MCshowerID ));
2004 ATH_CHECK( m_btagEffTool_trkJet.setProperty("EfficiencyCCalibrations", MCshowerID ));
2005 ATH_CHECK( m_btagEffTool_trkJet.setProperty("EfficiencyTCalibrations", MCshowerID ));
2006 ATH_CHECK( m_btagEffTool_trkJet.setProperty("EfficiencyLightCalibrations", MCshowerID ));
2007 ATH_CHECK( m_btagEffTool_trkJet.setProperty("EigenvectorReductionB", m_EigenvectorReductionB ));
2008 ATH_CHECK( m_btagEffTool_trkJet.setProperty("EigenvectorReductionC", m_EigenvectorReductionC ));
2009 ATH_CHECK( m_btagEffTool_trkJet.setProperty("EigenvectorReductionLight", m_EigenvectorReductionLight ));
2010 ATH_CHECK( m_btagEffTool_trkJet.setProperty("OutputLevel", this->msg().level()) );
2011 ATH_CHECK( m_btagEffTool_trkJet.retrieve() );
2012 } else if (m_btagEffTool_trkJet.isUserConfigured()) ATH_CHECK( m_btagEffTool_trkJet.retrieve() );
2013 }
2014 }
2015
2016
2017 if (m_slices["met"]) {
2019 // Initialise MET tools
2020
2021 if (!m_metMaker.isUserConfigured()) {
2022 toolName = m_doFwdJVT ? m_metJetSelection+"_fJVT" : m_metJetSelection+"_NOfJVT";
2023 m_metMaker.setTypeAndName("met::METMaker/METMaker_ST_"+toolName);
2024
2025 ATH_CHECK( m_metMaker.setProperty("JetContainer", jetcoll) );
2026 ATH_CHECK( m_metMaker.setProperty("ORCaloTaggedMuons", m_metRemoveOverlappingCaloTaggedMuons) );
2027 ATH_CHECK( m_metMaker.setProperty("DoSetMuonJetEMScale", m_metDoSetMuonJetEMScale) );
2028 ATH_CHECK( m_metMaker.setProperty("DoRemoveMuonJets", m_metDoRemoveMuonJets) );
2029 ATH_CHECK( m_metMaker.setProperty("UseGhostMuons", m_metUseGhostMuons) );
2030 ATH_CHECK( m_metMaker.setProperty("DoMuonEloss", m_metDoMuonEloss) );
2031 ATH_CHECK( m_metMaker.setProperty("GreedyPhotons", m_metGreedyPhotons) );
2032 ATH_CHECK( m_metMaker.setProperty("VeryGreedyPhotons", m_metVeryGreedyPhotons) );
2033
2034 // set the jet selection if default empty string is overridden through config file
2035 if (m_metJetSelection.size()) {
2036 ATH_CHECK( m_metMaker.setProperty("JetSelection", m_metJetSelection) );
2037 }
2039 ATH_CHECK( m_metMaker.setProperty("DoPFlow", true) );
2040 }
2041
2042 ATH_CHECK( m_metMaker.setProperty("OutputLevel", this->msg().level()) );
2043 ATH_CHECK( m_metMaker.retrieve() );
2044 } else ATH_CHECK( m_metMaker.retrieve() );
2045
2046
2047 if (!m_metSystTool.isUserConfigured()) {
2048 m_metSystTool.setTypeAndName("met::METSystematicsTool/METSystTool");
2049 ATH_CHECK( m_metSystTool.setProperty("ConfigPrefix", m_metsysConfigPrefix) );
2050
2052 ATH_MSG_ERROR( "Can only have CST *or* TST configured for MET maker. Please unset either METDoCaloSyst or METDoTrkSyst in your config file" );
2053 return StatusCode::FAILURE;
2054 }
2055
2056 if (m_trkMETsyst) {
2057 ATH_CHECK( m_metSystTool.setProperty("ConfigSoftCaloFile", "") );
2058 ATH_CHECK( m_metSystTool.setProperty("ConfigSoftTrkFile", "TrackSoftTerms-pflow_Dec24.config") );
2059 }
2060
2061 if (m_caloMETsyst) {
2062 ATH_MSG_WARNING( "CST is no longer recommended by Jet/MET group");
2063 ATH_CHECK( m_metSystTool.setProperty("ConfigSoftTrkFile", "") );
2064 }
2065
2066 if (m_trkJetsyst) {
2067 ATH_CHECK( m_metSystTool.setProperty("ConfigJetTrkFile", "JetTrackSyst.config") );
2068 }
2069
2070 ATH_CHECK( m_metSystTool.setProperty("OutputLevel", this->msg().level()) );
2071 ATH_CHECK( m_metSystTool.retrieve());
2072 } else ATH_CHECK( m_metSystTool.retrieve());
2073
2074
2075 if (!m_metSignif.isUserConfigured()) {
2076 // See https://twiki.cern.ch/twiki/bin/view/AtlasProtected/MetSignificance
2077 m_metSignif.setTypeAndName("met::METSignificance/metSignificance_"+jetname);
2078#ifndef XAOD_STANDALONE // Athena and AthAnalysis; need to take into account that MuonCalibTool is private tool
2079 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "SoftTermParam", m_softTermParam));
2080 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "TreatPUJets", m_treatPUJets));
2081 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "DoPhiReso", m_doPhiReso));
2082 if(jetname != "AntiKt4EMPFlow")
2083 ATH_MSG_WARNING("METSignificance recommendations only exist for AntiKt4EMPFlow jets, falling back to this.");
2084 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "JetCollection", "AntiKt4EMPFlow"));
2085 // This is the only recommended set of jet resolutions for use with R22+ MET Significance until "Consolidated" recommendations are available
2086 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "JetCalibConfig", "JES_data2017_2016_2015_Recommendation_PFlow_Aug2018_rel21.config") );
2087 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "JetCalibSequence", "JetArea_Residual_EtaJES_GSC_Smear") );
2088 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "JetCalibArea", "00-04-81") );
2089 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "EgammaESModel", m_isRun3 ? "es2024_Run3_v0" : "es2023_R22_Run2_v1") );
2090 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "EgammaDecorrelationModel", "1NP_v1") );
2091 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "EgammaUseFastsim", isAtlfast()) );
2092 // setup a dedicated new muon calib tool for passing down to METSignificance
2093 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "MuonCalibTool", "CP::MuonCalibTool/calibTool"));
2094 if (m_isRun3)
2095 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "calibTool.IsRun3Geo", true));
2096 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "calibTool.calibMode", m_muCalibrationMode));
2097 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "calibTool.OutputLevel",this->msg().level()));
2098 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "calibTool.release", "Recs2025_03_26_Run2Run3"));
2099 int IdBaselineInt = m_muIdBaseline;
2100 if (IdBaselineInt == 4)
2101 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "calibTool.do2StationsHighPt", true));
2102 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "calibTool.doExtraSmearing", m_muHighPtExtraSmear));
2103 ATH_CHECK( AAH::setProperty(m_metSignif.getHandle(), "OutputLevel", this->msg().level()));
2104#else // AnalysisBase; can just pass the jet/egamma/muon calib tools configured above
2105 ATH_CHECK( m_metSignif.setProperty("SoftTermParam", m_softTermParam) );
2106 ATH_CHECK( m_metSignif.setProperty("TreatPUJets", m_treatPUJets) );
2107 ATH_CHECK( m_metSignif.setProperty("DoPhiReso", m_doPhiReso) );
2108 if(jetname != "AntiKt4EMPFlow")
2109 ATH_MSG_WARNING("METSignificance recommendations only exist for AntiKt4EMPFlow jets, falling back to this.");
2110 ATH_CHECK( m_metSignif.setProperty( "JetCollection", "AntiKt4EMPFlow"));
2111 // This is the only recommended set of jet resolutions for use with R22+ MET Significance until "Consolidated" recommendations are available
2112 ATH_CHECK( m_metSignif.setProperty( "JetCalibConfig", "JES_data2017_2016_2015_Recommendation_PFlow_Aug2018_rel21.config") );
2113 ATH_CHECK( m_metSignif.setProperty( "JetCalibSequence", "JetArea_Residual_EtaJES_GSC_Smear") );
2114 ATH_CHECK( m_metSignif.setProperty( "JetCalibArea", "00-04-81") );
2115 ATH_CHECK( m_metSignif.setProperty("egammaCalibTool", m_egammaCalibTool.getHandle()) );
2116 // just pass the muon calib tool
2117 ATH_CHECK( m_metSignif.setProperty("MuonCalibTool",m_muonCalibTool.getHandle()));
2118 ATH_CHECK( m_metSignif.setProperty("OutputLevel", this->msg().level()) );
2119#endif
2120 ATH_CHECK( m_metSignif.retrieve() );
2121 } else ATH_CHECK( m_metSignif.retrieve() );
2122 }
2123
2124
2126// Initialise trigger tools
2127
2128 if (!m_trigDecTool.isUserConfigured()) {
2129
2130 // The decision tool
2131 m_trigDecTool.setTypeAndName("Trig::TrigDecisionTool/TrigDecisionTool");
2132 ATH_CHECK( m_trigDecTool.setProperty("TrigDecisionKey", "xTrigDecision") );
2133 if (m_isRun3) {
2134 ATH_CHECK( m_trigDecTool.setProperty("NavigationFormat", "TrigComposite") );
2135 ATH_CHECK( m_trigDecTool.setProperty("HLTSummary", "HLTNav_Summary_DAODSlimmed") );
2136 }
2137 ATH_CHECK( m_trigDecTool.setProperty("OutputLevel", this->msg().level()) );
2138
2139#ifndef XAOD_STANDALONE // Athena and AthAnalysis
2140 // Clear the default tool handle to cause a fallback on the config service
2141 ATH_CHECK( m_trigDecTool.setProperty("ConfigTool", ""));
2142#else // AnalysisBase
2143 m_trigConfTool.setTypeAndName("TrigConf::xAODConfigTool/xAODConfigTool");
2144 ATH_CHECK(m_trigConfTool.retrieve() );
2145 ATH_CHECK( m_trigDecTool.setProperty("ConfigTool", m_trigConfTool.getHandle()) );
2146#endif
2147
2148 ATH_CHECK( m_trigDecTool.retrieve() );
2149
2150 } else ATH_CHECK( m_trigDecTool.retrieve() );
2151
2152 if (m_isRun3) {
2153 if (!m_trigDRScoringTool.isUserConfigured()) {
2154 m_trigDRScoringTool.setTypeAndName("Trig::DRScoringTool/TrigDRScoringTool");
2155 ATH_CHECK( m_trigDRScoringTool.setProperty("OutputLevel", this->msg().level()) );
2156 ATH_CHECK( m_trigDRScoringTool.retrieve() );
2157 } else ATH_CHECK( m_trigDRScoringTool.retrieve() );
2158 }
2159
2160 if (!m_trigMatchingTool.isUserConfigured()) {
2162 m_trigMatchingTool.setTypeAndName("Trig::MatchFromCompositeTool/TrigMatchFromCompositeTool");
2163 ATH_CHECK( m_trigMatchingTool.setProperty("InputPrefix", m_trigMatchingPrefix) );
2164 ATH_CHECK( m_trigMatchingTool.setProperty("RemapBrokenLinks", true) );
2165 }
2166 else {
2167 if (m_isRun3){
2168 m_trigMatchingTool.setTypeAndName("Trig::R3MatchingTool/TrigR3MatchingTool");
2169 ATH_CHECK( m_trigMatchingTool.setProperty("ScoringTool", m_trigDRScoringTool.getHandle()) );
2170 ATH_CHECK( m_trigMatchingTool.setProperty("TrigDecisionTool", m_trigDecTool.getHandle()) );
2171 }
2172 else {
2173 m_trigMatchingTool.setTypeAndName("Trig::MatchingTool/TrigMatchingTool");
2174 ATH_CHECK( m_trigMatchingTool.setProperty("TrigDecisionTool", m_trigDecTool.getHandle()) );
2175 }
2176 }
2177 ATH_CHECK( m_trigMatchingTool.setProperty("OutputLevel", this->msg().level()) );
2178 ATH_CHECK( m_trigMatchingTool.retrieve() );
2179 } else ATH_CHECK( m_trigMatchingTool.retrieve() );
2180
2182// Initialise trigGlobalEfficiencyCorrection tool
2183
2184 if (!m_trigGlobalEffCorrTool_diLep.isUserConfigured() && !isData()) {
2185
2186 std::string no2e17("");
2187 if (m_trig2017combination_diLep.find("||2e17_lhvloose_nod0_L12EM15VHI") != std::string::npos) {
2188 auto pos_2e17 = m_trig2017combination_diLep.find("||2e17_lhvloose_nod0_L12EM15VHI");
2189 no2e17 = m_trig2017combination_diLep.substr(0, pos_2e17) + m_trig2017combination_diLep.substr(pos_2e17+31, m_trig2017combination_diLep.size());
2190 } else if (m_trig2017combination_diLep.find("2e17_lhvloose_nod0_L12EM15VHI||") != std::string::npos) {
2191 auto pos_2e17 = m_trig2017combination_diLep.find("2e17_lhvloose_nod0_L12EM15VHI||");
2192 no2e17 = m_trig2017combination_diLep.substr(0, pos_2e17) + m_trig2017combination_diLep.substr(pos_2e17+31, m_trig2017combination_diLep.size());
2193 } else {
2195 }
2196 ATH_MSG_DEBUG( "TrigGlobalEfficiencyCorrectionTool/TrigGlobal_diLep: no2e17 trigger string: " << no2e17 );
2197
2198 std::map<std::string,std::string> triggers_diLep;
2199 triggers_diLep["2015"] = m_trig2015combination_diLep;
2200 triggers_diLep["2016"] = m_trig2016combination_diLep;
2201 triggers_diLep["324320-326695"] = m_trig2017combination_diLep; // 2017 before accidental prescale of L12EM15VHI
2202 triggers_diLep["326834-328393"] = no2e17; // 2017 during accidental prescale
2203 triggers_diLep["329385-340453"] = m_trig2017combination_diLep; // 2017 after accidental prescale
2204 triggers_diLep["2018"] = m_trig2018combination_diLep;
2205
2206 m_trigGlobalEffCorrTool_diLep.setTypeAndName("TrigGlobalEfficiencyCorrectionTool/TrigGlobal_diLep");
2207 ATH_CHECK( m_trigGlobalEffCorrTool_diLep.setProperty("ElectronEfficiencyTools", m_elecTrigEffTools) );
2208 ATH_CHECK( m_trigGlobalEffCorrTool_diLep.setProperty("ElectronScaleFactorTools", m_elecTrigSFTools) );
2209 ATH_CHECK( m_trigGlobalEffCorrTool_diLep.setProperty("MuonTools", m_muonTrigSFTools) );
2210 ATH_CHECK( m_trigGlobalEffCorrTool_diLep.setProperty("TriggerCombination", triggers_diLep) );
2211 ATH_CHECK( m_trigGlobalEffCorrTool_diLep.setProperty("TriggerMatchingTool", m_trigMatchingTool.getHandle()) );
2212 ATH_CHECK( m_trigGlobalEffCorrTool_diLep.setProperty("ListOfLegsPerTool", m_legsPerTool) );
2213 ATH_CHECK( m_trigGlobalEffCorrTool_diLep.setProperty("NumberOfToys", m_trigNToys_diLep) );
2214 ATH_CHECK( m_trigGlobalEffCorrTool_diLep.setProperty("OutputLevel", this->msg().level()) );
2216 } else if (m_trigGlobalEffCorrTool_diLep.isUserConfigured()) ATH_CHECK( m_trigGlobalEffCorrTool_diLep.retrieve() );
2217
2218
2219 if (!m_trigGlobalEffCorrTool_multiLep.isUserConfigured() && !isData()) {
2220
2221 std::string no2e17("");
2222 if (m_trig2017combination_multiLep.find("||2e17_lhvloose_nod0_L12EM15VHI") != std::string::npos) {
2223 auto pos_2e17 = m_trig2017combination_multiLep.find("||2e17_lhvloose_nod0_L12EM15VHI");
2224 no2e17 = m_trig2017combination_multiLep.substr(0, pos_2e17) + m_trig2017combination_multiLep.substr(pos_2e17+31, m_trig2017combination_multiLep.size());
2225 } else if (m_trig2017combination_multiLep.find("2e17_lhvloose_nod0_L12EM15VHI||") != std::string::npos) {
2226 auto pos_2e17 = m_trig2017combination_multiLep.find("2e17_lhvloose_nod0_L12EM15VHI||");
2227 no2e17 = m_trig2017combination_multiLep.substr(0, pos_2e17) + m_trig2017combination_multiLep.substr(pos_2e17+31, m_trig2017combination_multiLep.size());
2228 } else {
2230 }
2231 ATH_MSG_DEBUG( "TrigGlobalEfficiencyCorrectionTool/TrigGlobal_multiLep: no2e17 trigger string: " << no2e17 );
2232
2233 std::map<std::string,std::string> triggers_multiLep;
2234 triggers_multiLep["2015"] = m_trig2015combination_multiLep;
2235 triggers_multiLep["2016"] = m_trig2016combination_multiLep;
2236 triggers_multiLep["324320-326695"] = m_trig2017combination_multiLep; // 2017 before accidental prescale of L12EM15VHI
2237 triggers_multiLep["326834-328393"] = no2e17; // 2017 during accidental prescale
2238 triggers_multiLep["329385-340453"] = m_trig2017combination_multiLep; // 2017 after accidental prescale
2239 triggers_multiLep["2018"] = m_trig2018combination_multiLep;
2240
2241 m_trigGlobalEffCorrTool_multiLep.setTypeAndName("TrigGlobalEfficiencyCorrectionTool/TrigGlobal_multiLep");
2242 ATH_CHECK( m_trigGlobalEffCorrTool_multiLep.setProperty("ElectronEfficiencyTools", m_elecTrigEffTools) );
2243 ATH_CHECK( m_trigGlobalEffCorrTool_multiLep.setProperty("ElectronScaleFactorTools", m_elecTrigSFTools) );
2245 ATH_CHECK( m_trigGlobalEffCorrTool_multiLep.setProperty("TriggerCombination", triggers_multiLep) );
2246 ATH_CHECK( m_trigGlobalEffCorrTool_multiLep.setProperty("TriggerMatchingTool", m_trigMatchingTool.getHandle()) );
2247 ATH_CHECK( m_trigGlobalEffCorrTool_multiLep.setProperty("ListOfLegsPerTool", m_legsPerTool) );
2248 ATH_CHECK( m_trigGlobalEffCorrTool_multiLep.setProperty("NumberOfToys", m_trigNToys_multiLep) );
2249 ATH_CHECK( m_trigGlobalEffCorrTool_multiLep.setProperty("OutputLevel", this->msg().level()) );
2251 } else if (m_trigGlobalEffCorrTool_multiLep.isUserConfigured()) ATH_CHECK( m_trigGlobalEffCorrTool_multiLep.retrieve() );
2252
2253
2254 if (!m_trigGlobalEffCorrTool_diPhoton.isUserConfigured() && !isData()) {
2255 m_trigGlobalEffCorrTool_diPhoton.setTypeAndName("TrigGlobalEfficiencyCorrectionTool/TrigGlobal_diPhoton");
2256 ATH_CHECK( m_trigGlobalEffCorrTool_diPhoton.setProperty("PhotonEfficiencyTools", m_photonTrigEffTools) );
2257 ATH_CHECK( m_trigGlobalEffCorrTool_diPhoton.setProperty("PhotonScaleFactorTools", m_photonTrigSFTools) );
2258 ATH_CHECK( m_trigGlobalEffCorrTool_diPhoton.setProperty("TriggerCombination2015", m_trig2015combination_diPhoton) );
2259 ATH_CHECK( m_trigGlobalEffCorrTool_diPhoton.setProperty("TriggerCombination2016", m_trig2016combination_diPhoton) );
2260 ATH_CHECK( m_trigGlobalEffCorrTool_diPhoton.setProperty("TriggerCombination2017", m_trig2017combination_diPhoton) );
2261 ATH_CHECK( m_trigGlobalEffCorrTool_diPhoton.setProperty("TriggerCombination2018", m_trig2018combination_diPhoton) );
2262 ATH_CHECK( m_trigGlobalEffCorrTool_diPhoton.setProperty("ListOfLegsPerTool", m_legsPerTool_ph) );
2263 ATH_CHECK( m_trigGlobalEffCorrTool_diPhoton.setProperty("NumberOfToys", m_trigNToys_diPhoton) );
2264 ATH_CHECK( m_trigGlobalEffCorrTool_diPhoton.setProperty("OutputLevel", this->msg().level()) );
2266 } else if (m_trigGlobalEffCorrTool_diPhoton.isUserConfigured()) ATH_CHECK( m_trigGlobalEffCorrTool_diPhoton.retrieve() );
2267
2268
2269 if (m_slices["ele"] || m_slices["pho"] || m_slices["mu"]) {
2270 // /////////////////////////////////////////////////////////////////////////////////////////
2271 // Initialise Isolation Correction Tool
2272
2273 if ( !m_isoCorrTool.isUserConfigured() ) {
2274 m_isoCorrTool.setTypeAndName("CP::IsolationCorrectionTool/IsoCorrTool");
2275 ATH_CHECK( m_isoCorrTool.setProperty( "ToolVer", "REL22") );
2276 ATH_CHECK( m_isoCorrTool.setProperty( "IsMC", !isData()) );
2277 ATH_CHECK( m_isoCorrTool.setProperty( "AFII_corr", isAtlfast()) );
2278 ATH_CHECK( m_isoCorrTool.setProperty( "Apply_SC_leakcorr", false) );
2279 ATH_CHECK( m_isoCorrTool.setProperty( "FixTimingIssueInCore", true) ); // Similar to https://gitlab.cern.ch/atlas/athena/-/merge_requests/83939
2280 ATH_CHECK( m_isoCorrTool.setProperty( "CorrFile", "IsolationCorrections/v6/isolation_ptcorrections_rel22_mc20.root") );
2281 ATH_CHECK( m_isoCorrTool.setProperty( "OutputLevel", this->msg().level()) );
2282 ATH_CHECK( m_isoCorrTool.retrieve() );
2283 } else ATH_CHECK( m_isoCorrTool.retrieve() );
2284
2285
2286 // /////////////////////////////////////////////////////////////////////////////////////////
2287 // Initialise Isolation Tool
2288 if (!m_isoTool.isUserConfigured()) {
2289 m_isoTool.setTypeAndName("CP::IsolationSelectionTool/IsoTool");
2290 ATH_CHECK( m_isoTool.setProperty("ElectronWP", m_eleIso_WP.empty() ? "Loose_VarRad" : m_eleIso_WP) );
2291 ATH_CHECK( m_isoTool.setProperty("MuonWP", m_muIso_WP.empty() ? "Loose_VarRad" : m_muIso_WP) );
2292 ATH_CHECK( m_isoTool.setProperty("PhotonWP", m_photonIso_WP.empty() ? "FixedCutTight" : m_photonIso_WP ) );
2293 ATH_CHECK( m_isoTool.setProperty("OutputLevel", this->msg().level()) );
2294 ATH_CHECK( m_isoTool.retrieve() );
2295 } else ATH_CHECK( m_isoTool.retrieve() );
2296
2297 //disable if (!m_isoToolLowPtPLV.isUserConfigured()) {
2298 //disable m_isoToolLowPtPLV.setTypeAndName("CP::IsolationLowPtPLVTool/IsoToolLowPtPLV");
2299 //disable ATH_CHECK( m_isoToolLowPtPLV.setProperty("OutputLevel", this->msg().level()) );
2300 //disable ATH_CHECK( m_isoToolLowPtPLV.retrieve() );
2301 //disable } else ATH_CHECK( m_isoToolLowPtPLV.retrieve() );
2302
2303
2304 if (!m_isoBaselineTool.isUserConfigured()) {
2305 m_isoBaselineTool.setTypeAndName("CP::IsolationSelectionTool/IsoBaselineTool");
2306 ATH_CHECK( m_isoBaselineTool.setProperty("ElectronWP", m_eleBaselineIso_WP.empty() ? "Loose_VarRad" : m_eleBaselineIso_WP ) );
2307 ATH_CHECK( m_isoBaselineTool.setProperty("MuonWP", m_muBaselineIso_WP.empty() ? "Loose_VarRad" : m_muBaselineIso_WP ) );
2308 ATH_CHECK( m_isoBaselineTool.setProperty("PhotonWP", m_photonBaselineIso_WP.empty() ? "FixedCutTight" : m_photonBaselineIso_WP ) );
2309 ATH_CHECK( m_isoBaselineTool.setProperty("OutputLevel", this->msg().level()) );
2310 ATH_CHECK( m_isoBaselineTool.retrieve() );
2311 } else ATH_CHECK( m_isoBaselineTool.retrieve() );
2312
2313
2314 if (!m_isoHighPtTool.isUserConfigured()) {
2315 m_isoHighPtTool.setTypeAndName("CP::IsolationSelectionTool/IsoHighPtTool");
2316 ATH_CHECK( m_isoHighPtTool.setProperty("ElectronWP", m_eleIsoHighPt_WP.empty() ? "Loose_VarRad" : m_eleIsoHighPt_WP) );
2317 ATH_CHECK( m_isoHighPtTool.setProperty("MuonWP", m_muIsoHighPt_WP.empty() ? "Loose_VarRad" : m_muIsoHighPt_WP ) );
2318 ATH_CHECK( m_isoHighPtTool.setProperty("PhotonWP", m_photonIso_WP.empty() ? "FixedCutTight" : m_photonIso_WP ) );
2319 ATH_CHECK( m_isoHighPtTool.setProperty("OutputLevel", this->msg().level()) );
2320 ATH_CHECK( m_isoHighPtTool.retrieve() );
2321 } else ATH_CHECK( m_isoHighPtTool.retrieve() );
2322
2323
2324 // /////////////////////////////////////////////////////////////////////////////////////////
2325 // Initialise IsolationCloseByCorrectionTool Tool
2326 if (!m_isoCloseByTool.isUserConfigured()) {
2327 m_isoCloseByTool.setTypeAndName("CP::IsolationCloseByCorrectionTool/IsoCloseByTool");
2328 // Actually we could debate about what is the proper tool to choose if the users have different baseline & signal islation WP's
2329 ATH_CHECK( m_isoCloseByTool.setProperty("IsolationSelectionTool", m_useSigLepForIsoCloseByOR ? m_isoTool : m_isoBaselineTool));
2330 ATH_CHECK( m_isoCloseByTool.setProperty("PassoverlapDecorator", m_IsoCloseByORpassLabel) );
2331 ATH_CHECK( m_isoCloseByTool.setProperty("SelectionDecorator", m_useSigLepForIsoCloseByOR ? "signal" : "baseline") );
2332 // Make this propery configurable as well?
2333 ATH_CHECK( m_isoCloseByTool.setProperty("BackupPrefix", "ORIG") );
2334 // The isolation selection decorator is updated as well by the tool
2335 ATH_CHECK( m_isoCloseByTool.setProperty("IsolationSelectionDecorator", "isol") );
2336
2337 ATH_CHECK( m_isoCloseByTool.setProperty("OutputLevel", this->msg().level()) );
2338#ifndef XAOD_ANALYSIS
2339 ATH_CHECK( m_isoCloseByTool.setProperty("ParticleCaloExtensionTool", "") );
2340#endif
2341 ATH_CHECK( m_isoCloseByTool.retrieve() );
2342 } else ATH_CHECK( m_isoCloseByTool.retrieve() );
2343 }
2344
2345
2346// /////////////////////////////////////////////////////////////////////////////////////////
2347// Initialise Overlap Removal Tool
2348 if ( m_orToolbox.masterTool.empty() ){
2349
2350 // set up the master tool
2351 std::string suffix = "";
2352 if (m_orDoTau) suffix += "Tau";
2353 if (m_orDoPhoton) suffix += "Gamma";
2354 if (m_orDoBjet) suffix += "Bjet";
2355 std::string toolName = "ORTool" + suffix;
2356 ATH_MSG_INFO("SUSYTools: Autoconfiguring " << toolName);
2357
2358 std::string bJetLabel = "";
2359 //overwrite lepton flags if the global is false (yes?)
2360 if (!m_orDoBjet || !m_useBtagging) {
2361 m_orDoElBjet = false;
2362 m_orDoMuBjet = false;
2363 m_orDoTauBjet = false;
2364 }
2366 bJetLabel = "bjet_loose";
2367 }
2368
2369 // Set the generic flags
2370 ORUtils::ORFlags orFlags(toolName, m_orInputLabel, "passOR");
2371 orFlags.bJetLabel = bJetLabel;
2372 orFlags.boostedLeptons = (m_orDoBoostedElectron || m_orDoBoostedMuon);
2373 orFlags.outputPassValue = true;
2374 orFlags.linkOverlapObjects = m_orLinkOverlapObjects;
2375 if (m_orDoElEl) {
2376 orFlags.doEleEleOR = true;
2377 } else orFlags.doEleEleOR = false;
2378 orFlags.doElectrons = true;
2379 orFlags.doMuons = true;
2380 orFlags.doJets = true;
2381 orFlags.doTaus = m_orDoTau;
2382 orFlags.doPhotons = m_orDoPhoton;
2383 orFlags.doFatJets = m_orDoFatjets;
2384
2385 //set up all recommended tools
2387
2388 // We don't currently have a good way to determine here which object
2389 // definitions are disabled, so we currently just configure all overlap
2390 // tools and disable the pointer safety checks
2391 ATH_CHECK( m_orToolbox.setGlobalProperty("OutputLevel", this->msg().level()) );
2392 ATH_CHECK( m_orToolbox.masterTool.setProperty("RequireExpectedPointers", false) );
2393
2394 // Override boosted OR sliding cone options
2395 ATH_CHECK( m_orToolbox.eleJetORT.setProperty("UseSlidingDR", m_orDoBoostedElectron) );
2396 ATH_CHECK( m_orToolbox.muJetORT.setProperty("UseSlidingDR", m_orDoBoostedMuon) );
2397
2398 //add custom tau-jet OR tool
2399 if(m_orDoTau){
2400 m_orToolbox.tauJetORT.setTypeAndName("ORUtils::TauJetOverlapTool/" + orFlags.masterName + ".TauJetORT");
2401 ATH_CHECK( m_orToolbox.tauJetORT.setProperty("BJetLabel", m_orDoTauBjet?bJetLabel:"") );
2402 }
2403
2404 // override sliding cone params if sliding dR is on and the user-provided parameter values are non-negative
2406 if (m_orBoostedElectronC1 > 0) ATH_CHECK( m_orToolbox.eleJetORT.setProperty("SlidingDRC1", m_orBoostedElectronC1) );
2407 if (m_orBoostedElectronC2 > 0) ATH_CHECK( m_orToolbox.eleJetORT.setProperty("SlidingDRC2", m_orBoostedElectronC2) );
2408 if (m_orBoostedElectronMaxConeSize > 0) ATH_CHECK( m_orToolbox.eleJetORT.setProperty("SlidingDRMaxCone", m_orBoostedElectronMaxConeSize) );
2409 }
2410 if (m_orDoBoostedMuon) {
2411 if (m_orBoostedMuonC1 > 0) ATH_CHECK( m_orToolbox.muJetORT.setProperty("SlidingDRC1", m_orBoostedMuonC1) );
2412 if (m_orBoostedMuonC2 > 0) ATH_CHECK( m_orToolbox.muJetORT.setProperty("SlidingDRC2", m_orBoostedMuonC2) );
2413 if (m_orBoostedMuonMaxConeSize > 0) ATH_CHECK( m_orToolbox.muJetORT.setProperty("SlidingDRMaxCone", m_orBoostedMuonMaxConeSize) );
2414 }
2415
2416 // and switch off lep-bjet check if not requested
2417 if (!m_orDoElBjet) {
2418 ATH_CHECK(m_orToolbox.eleJetORT.setProperty("BJetLabel", ""));
2419 }
2420 if (!m_orDoMuBjet) {
2421 ATH_CHECK(m_orToolbox.muJetORT.setProperty("BJetLabel", ""));
2422 }
2423
2424 // propagate the mu-jet ghost-association option which might be set by the user (default is true)
2425 ATH_CHECK(m_orToolbox.muJetORT.setProperty("UseGhostAssociation", m_orDoMuonJetGhostAssociation));
2426
2427 // propagate mu-jet OR settings if requested
2428 ATH_CHECK(m_orToolbox.muJetORT.setProperty("ApplyRelPt", m_orApplyRelPt) );
2429 if(m_orApplyRelPt){
2430 if (m_orMuJetPtRatio > 0) ATH_CHECK(m_orToolbox.muJetORT.setProperty("MuJetPtRatio", m_orMuJetPtRatio) );
2431 if (m_orMuJetTrkPtRatio > 0) ATH_CHECK(m_orToolbox.muJetORT.setProperty("MuJetTrkPtRatio", m_orMuJetTrkPtRatio) );
2432 }
2433 if (m_orMuJetInnerDR > 0) ATH_CHECK(m_orToolbox.muJetORT.setProperty("InnerDR", m_orMuJetInnerDR) );
2434
2435 // propagate the calo muon setting for EleMuORT
2436 ATH_CHECK(m_orToolbox.eleMuORT.setProperty("RemoveCaloMuons", m_orRemoveCaloMuons) );
2437
2438 // Use electron-muon DR matching to remove electrons within DR < 0.01 of Muons.
2439 if (m_orDoElMu){
2440 ATH_CHECK(m_orToolbox.eleMuORT.setProperty("UseDRMatching", m_orDoElMu) );
2441 }
2442
2443 // propagate the fatjets OR settings
2444 if(m_orDoFatjets){
2445 if(m_EleFatJetDR>0) ATH_CHECK(m_orToolbox.eleFatJetORT.setProperty("DR", m_EleFatJetDR));
2446 if(m_JetFatJetDR>0) ATH_CHECK(m_orToolbox.jetFatJetORT.setProperty("DR", m_JetFatJetDR));
2447 }
2448
2449 // Make sure that we deal with prorities correctly
2450 ATH_CHECK(m_orToolbox.eleJetORT.setProperty("EnableUserPriority", true));
2451 ATH_CHECK(m_orToolbox.muJetORT.setProperty("EnableUserPriority", true));
2452 if (m_orDoTau) ATH_CHECK(m_orToolbox.tauJetORT.setProperty("EnableUserPriority", true));
2453 if (m_orDoPhoton) ATH_CHECK(m_orToolbox.phoJetORT.setProperty("EnableUserPriority", true));
2454
2455 if ( m_orPhotonFavoured ) {
2456 ATH_CHECK(m_orToolbox.phoEleORT.setProperty("SwapContainerPrecedence", true));
2457 ATH_CHECK(m_orToolbox.phoMuORT.setProperty("SwapContainerPrecedence", true));
2458 }
2459
2460 if (!m_orDoEleJet){
2461 // Disable the electron removal part of e-j overlap removal
2462 ATH_CHECK( m_orToolbox.eleJetORT.setProperty("OuterDR",-1.) );
2463 ATH_CHECK( m_orToolbox.eleJetORT.setProperty("SlidingDRMaxCone",-1.) );
2464 }
2465 if (!m_orDoMuonJet){
2466 // Disable the muon removal part of m-j overlap removal
2467 ATH_CHECK( m_orToolbox.muJetORT.setProperty("OuterDR",-1.) );
2468 ATH_CHECK( m_orToolbox.muJetORT.setProperty("SlidingDRMaxCone",-1.) );
2469 }
2470
2471 ATH_CHECK( m_orToolbox.initialize() );
2472
2473 }
2474 // Done with the OR toolbox setup!
2475
2476// /////////////////////////////////////////////////////////////////////////////////////////
2477// Initialise PMG Tools
2478 if (!m_pmgSHnjetWeighter.isUserConfigured() && !isData()) {
2479 m_pmgSHnjetWeighter.setTypeAndName("PMGTools::PMGSherpa22VJetsWeightTool/PMGSHVjetReweighter");
2480 ATH_CHECK( m_pmgSHnjetWeighter.setProperty( "TruthJetContainer", "AntiKt4TruthJets"));
2481 ATH_CHECK( m_pmgSHnjetWeighter.setProperty("OutputLevel", this->msg().level()) );
2482 ATH_CHECK( m_pmgSHnjetWeighter.retrieve());
2483 } else if (m_pmgSHnjetWeighter.isUserConfigured()) ATH_CHECK( m_pmgSHnjetWeighter.retrieve());
2484
2485
2486 if (!m_pmgSHnjetWeighterWZ.isUserConfigured() && !isData()) {
2487 m_pmgSHnjetWeighterWZ.setTypeAndName("PMGTools::PMGSherpa22VJetsWeightTool/PMGSHVjetReweighterWZ");
2488 ATH_CHECK( m_pmgSHnjetWeighterWZ.setProperty( "TruthJetContainer", "AntiKt4TruthWZJets"));
2489 ATH_CHECK( m_pmgSHnjetWeighterWZ.setProperty("OutputLevel", this->msg().level()) );
2490 ATH_CHECK( m_pmgSHnjetWeighterWZ.retrieve() );
2491 } else if (m_pmgSHnjetWeighterWZ.isUserConfigured()) ATH_CHECK( m_pmgSHnjetWeighterWZ.retrieve() );
2492
2493
2494 // prevent these initialiation snippets from being run again
2495 m_subtool_init = true;
2496
2497 ATH_MSG_INFO("Done initialising SUSYTools");
2498
2499 return StatusCode::SUCCESS;
2500}
#define ANA_MSG_DEBUG(xmsg)
Macro printing debug messages.
if(febId1==febId2)
const std::string bJetLabel
#define CONFIG_EG_EFF_TOOL(TOOLHANDLE, TOOLNAME, CORRFILE)
#define CONFIG_EG_EFF_TOOL_KEY(TOOLHANDLE, TOOLNAME, KEYNAME, KEY, MAP)
static StatusCode setProperty(const GaudiHandleBase &toolHandle, const std::string &property, const int &value, bool override=true)
std::string m_fatJetUncertaintiesMCType
std::vector< asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionTool > > m_elecEfficiencySFTool_trig_mixLep
std::string m_eleEffMapFilePathRun2
std::vector< asg::AnaToolHandle< IAsgElectronEfficiencyCorrectionTool > > m_elecEfficiencySFTool_trigEff_mixLep
std::map< std::string, std::string > m_legsPerTool_ph
std::vector< asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionTool > > m_photonEfficiencySFTool_trigSF_AsymDiphoton
std::string EG_WP(const std::string &wp) const
bool check_isOption(const std::string &wp, const std::vector< std::string > &list) const
std::vector< std::string > getElSFkeys(const std::string &mapFile) const
std::map< std::string, std::string > m_legsPerTool
std::vector< asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionTool > > m_photonEfficiencySFTool_trigEff_AsymDiphoton
StatusCode recommendedTools(const ORFlags &flags, ToolBox &toolBox)
Pre-configured standard recommended OR tools.
setRawEt setRawPhi int

◆ sysInitialize()

StatusCode asg::AsgMetadataTool::sysInitialize ( )
virtualinherited

Function initialising the tool in the correct way in Athena.

This function is used to set up the callbacks from IncidentSvc in Athena at the right time during initialisation, without the user having to do anything special in his/her code.

Reimplemented from AthCommonDataStore< AthCommonMsg< AlgTool > >.

Definition at line 115 of file AsgMetadataTool.cxx.

115 {
116
117#ifndef XAOD_STANDALONE
118 if (m_useIncidents) {
119 // Connect to the IncidentSvc:
120 ServiceHandle< IIncidentSvc > incSvc( "IncidentSvc", name() );
121 ATH_CHECK( incSvc.retrieve() );
122
123 // Set up the right callbacks: don't rethrow exceptions, any failure and we should end
124 incSvc->addListener( this, IncidentType::BeginEvent, 0, false );
125 }
126 // Let the base class do its thing:
127 ATH_CHECK( AlgTool::sysInitialize() );
128
129#endif // not XAOD_STANDALONE
130
131 // Return gracefully:
132 return StatusCode::SUCCESS;
133 }

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

◆ treatAsYear()

int ST::SUSYObjDef_xAOD::treatAsYear ( const int runNumber = -1) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 3122 of file SUSYObjDef_xAOD.cxx.

3122 {
3123 // Use the run number we are passed if we are passed one, otherwise
3124 // use the run number from the GetRunNumber function
3125 int theRunNumber = runNumber>0?runNumber:GetRunNumber();
3126 if (theRunNumber<290000) return 2015;
3127 else if (theRunNumber<320000) return 2016;
3128 else if (theRunNumber<342000) return 2017;
3129 else if (theRunNumber<400000) return 2018;
3130 else if (theRunNumber<445000) return 2022;
3131 else if (theRunNumber<465000) return 2023;
3132 return 2024;
3133}

◆ TrigMatch() [1/10]

void ST::SUSYObjDef_xAOD::TrigMatch ( const std::initializer_list< const xAOD::IParticle * > & v,
const std::initializer_list< std::string > & items )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 267 of file Trigger.cxx.

267 {
268 for(const auto& p : v) {
269 this->TrigMatch(p, items);
270 }
271}

◆ TrigMatch() [2/10]

void ST::SUSYObjDef_xAOD::TrigMatch ( const std::initializer_list< const xAOD::IParticle * > & v,
const std::string & item )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 305 of file Trigger.cxx.

305 {
306 return this->TrigMatch(v, {item});
307}

◆ TrigMatch() [3/10]

void ST::SUSYObjDef_xAOD::TrigMatch ( const std::initializer_list< const xAOD::IParticle * > & v,
const std::vector< std::string > & items )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 274 of file Trigger.cxx.

274 {
275 for(const auto& p : v) {
276 this->TrigMatch(p, items);
277 }
278}

◆ TrigMatch() [4/10]

void ST::SUSYObjDef_xAOD::TrigMatch ( const xAOD::IParticle * p,
const std::initializer_list< std::string > & items )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 250 of file Trigger.cxx.

250 {
251 this->TrigMatch(p, items.begin(), items.end());
252}

◆ TrigMatch() [5/10]

void ST::SUSYObjDef_xAOD::TrigMatch ( const xAOD::IParticle * p,
const std::string & item )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 295 of file Trigger.cxx.

295 {
296 return this->TrigMatch(p, {item});
297}

◆ TrigMatch() [6/10]

void ST::SUSYObjDef_xAOD::TrigMatch ( const xAOD::IParticle * p,
const std::vector< std::string > & items )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 255 of file Trigger.cxx.

255 {
256 dec_trigmatched(*p) = 0;
257
258 for(const auto& item: items) {
259 auto result = static_cast<int>(this->IsTrigMatched(p, item));
260 dec_trigmatched(*p) += result;
261 const SG::Decorator<char> dec(item);
262 dec(*p) = result;
263 }
264}
static const SG::Decorator< char > dec_trigmatched("trigmatched")

◆ TrigMatch() [7/10]

void ST::SUSYObjDef_xAOD::TrigMatch ( const xAOD::IParticle * p,
std::initializer_list< std::string >::iterator i1,
std::initializer_list< std::string >::iterator i2 )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 238 of file Trigger.cxx.

238 {
239 dec_trigmatched(*p) = 0;
240
241 for(const auto *it = i1; it != i2; ++it) {
242 auto result = static_cast<int>(this->IsTrigMatched(p, *it));
243 dec_trigmatched(*p) += result;
244 const SG::Decorator<char> dec(*it);
245 dec(*p) = result;
246 }
247}

◆ TrigMatch() [8/10]

void ST::SUSYObjDef_xAOD::TrigMatch ( const xAOD::IParticleContainer * v,
const std::initializer_list< std::string > & items )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 288 of file Trigger.cxx.

288 {
289 for(const auto p : *v) {
290 this->TrigMatch(p, items);
291 }
292}

◆ TrigMatch() [9/10]

void ST::SUSYObjDef_xAOD::TrigMatch ( const xAOD::IParticleContainer * v,
const std::string & item )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 300 of file Trigger.cxx.

300 {
301 return this->TrigMatch(v, {item});
302}

◆ TrigMatch() [10/10]

void ST::SUSYObjDef_xAOD::TrigMatch ( const xAOD::IParticleContainer * v,
const std::vector< std::string > & items )
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 281 of file Trigger.cxx.

281 {
282 for(const auto p : *v) {
283 this->TrigMatch(p, items);
284 }
285}

◆ TrigSingleLep()

std::string ST::SUSYObjDef_xAOD::TrigSingleLep ( ) const
finaloverridevirtual

Implements ST::ISUSYObjDef_xAODTool.

Definition at line 2100 of file SUSYObjDef_xAOD.cxx.

◆ 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

◆ validConfig()

StatusCode ST::SUSYObjDef_xAOD::validConfig ( bool strict = false) const
protected

baseline vs signal pt check

WP check

check pt and eta range

Definition at line 1945 of file SUSYObjDef_xAOD.cxx.

1945 {
1946 // Validate configuration (i.e. that signal settings are tighter than baseline, etc)
1947 // :: Throw SC::FAILURE if strict mode is enabled, just a WARNING if not
1948
1949 // Electrons
1950 if( m_elePt < m_eleBaselinePt ){
1951 ATH_MSG_WARNING("Your electron pt configuration is inconsistent! Signal : " << m_elePt << " < Baseline : " << m_eleBaselinePt);
1952 if(strict) return StatusCode::FAILURE;
1953 }
1954 if( m_eleEta > m_eleBaselineEta ){
1955 ATH_MSG_WARNING("Your electron eta configuration is inconsistent! Signal : " << m_eleEta << " < Baseline : " << m_eleBaselineEta);
1956 if(strict) return StatusCode::FAILURE;
1957 }
1958
1960 ATH_MSG_WARNING("Your electron ID configuration is inconsistent! Signal : " << m_eleId << " looser than Baseline : " << m_eleIdBaseline);
1961 if(strict) return StatusCode::FAILURE;
1962 }
1964 ATH_MSG_WARNING("Your electron crack removal is inconsistent! Signal : " << m_eleCrackVeto << " while Baseline : " << m_eleBaselineCrackVeto);
1965 if(strict) return StatusCode::FAILURE;
1966 }
1967
1968 // Muons
1969 if( m_muPt < m_muBaselinePt ){
1970 ATH_MSG_WARNING("Your muon pt configuration is inconsistent! Signal : " << m_muPt << " < Baseline : " << m_muBaselinePt);
1971 if(strict) return StatusCode::FAILURE;
1972 }
1973 if( m_muEta > m_muBaselineEta ){
1974 ATH_MSG_WARNING("Your muon eta configuration is inconsistent! Signal : " << m_muEta << " < Baseline : " << m_muBaselineEta);
1975 if(strict) return StatusCode::FAILURE;
1976 }
1977 if( m_muId > m_muIdBaseline ){
1978 ATH_MSG_WARNING("Your muon ID configuration is inconsistent! Signal : " << m_muId << " < Baseline : " << m_muIdBaseline);
1979 if(strict) return StatusCode::FAILURE;
1980 }
1981
1982 // Photons
1984 ATH_MSG_WARNING("Your photon pt configuration is inconsistent! Signal : " << m_photonPt << " < Baseline : " << m_photonBaselinePt);
1985 if(strict) return StatusCode::FAILURE;
1986 }
1988 ATH_MSG_WARNING("Your photon eta configuration is inconsistent! Signal : " << m_photonEta << " < Baseline : " << m_photonBaselineEta);
1989 if(strict) return StatusCode::FAILURE;
1990 }
1991 if( m_photonId=="Loose" && m_photonIdBaseline=="Tight" ){
1992 ATH_MSG_WARNING("Your photon ID configuration is inconsistent! Signal : " << m_photonId << " < Baseline : " << m_photonIdBaseline);
1993 if(strict) return StatusCode::FAILURE;
1994 }
1996 ATH_MSG_WARNING("Your photon crack removal is inconsistent! Signal : " << m_photonCrackVeto << " while Baseline : " << m_photonBaselineCrackVeto);
1997 if(strict) return StatusCode::FAILURE;
1998 }
1999
2000 // Jets
2001 if ( m_jetPt < 20e3 ){
2002 ATH_MSG_WARNING("Your minimum signal jet pt is less than 20 GeV! Jet.Pt : " << m_jetPt << ". This is NOT supported by the jet group!");
2003 }
2004
2005 //Btagging //OR-wp looser than signal-wp?
2006 if( m_BtagWP.compare(0, m_BtagWP.size()-3, m_orBtagWP, 0, m_BtagWP.size()-3) == 0 ){ //same tagger WP (FixedCutBEff_XX or HybBEff_XX)
2007 if( atoi(m_BtagWP.substr(m_BtagWP.size()-2, m_BtagWP.size()).c_str()) > atoi(m_orBtagWP.substr(m_orBtagWP.size()-2, m_orBtagWP.size()).c_str()) ){
2008 ATH_MSG_WARNING("Your btagging configuration is inconsistent! Signal : " << m_BtagWP << " is looser than OR-Baseline : " << m_orBtagWP);
2009 }
2010 }
2011 if (m_BtagMinPt < 20e3 || m_BtagMinPt_trkJet < 10e3) {
2012 ATH_MSG_WARNING("You btagging MinPt settings are inconsistent! EM(Topo|PFlow)Jets: not calibrated below 20 GeV (Btag.MinPt: " << m_BtagMinPt/1000. << " GeV set), VRTrackJets: not calibrated below 10 GeV (BtagTrkJet.MinPt: " << m_BtagMinPt_trkJet/1000. << " GeV set).");
2013 }
2014
2015 //Taus
2017 if(m_tauPrePtCut > 0 and m_tauPrePtCut > m_tauPt) {
2018 ATH_MSG_WARNING("Your tau pt configuration is inconsistent! Signal pt cut : " << m_tauPt << " < Baseline (pre) pt cut : " << m_tauPrePtCut);
2019 if(strict) return StatusCode::FAILURE;
2020 }
2023 ATH_MSG_WARNING("Your tau ID configuration is inconsistent! Signal : " << m_tauId << " looser than Baseline : " << m_tauIdBaseline);
2024 if(strict) return StatusCode::FAILURE;
2025 }
2026
2028 std::vector<float> pT_window;
2029 std::vector<float> eta_window;
2030 bool elOLR=false;
2031 bool muVeto=false;
2032 bool muOLR=false;
2033
2034 if(!m_tauConfigPathBaseline.empty()) { //baseline taus
2035
2036 std::string theConfig = m_tauConfigPathBaseline;
2037 if( m_tauConfigPathBaseline=="default" ){
2038 if (m_tauId == "rnn001") theConfig = "SUSYTools/tau_selection_rnn001.conf";
2039 else if (m_tauId == "VeryLoose") theConfig = "SUSYTools/tau_selection_veryloose.conf";
2040 else if (m_tauId == "Loose") theConfig = "SUSYTools/tau_selection_loose.conf";
2041 else if (m_tauId == "Medium") theConfig = "SUSYTools/tau_selection_medium.conf";
2042 else if (m_tauId == "Tight") theConfig = "SUSYTools/tau_selection_tight.conf";
2043 }
2044
2045 //read config
2046 getTauConfig(theConfig, pT_window, eta_window, elOLR, muVeto, muOLR);
2047
2048 //pt-eta checks
2049 if( m_tauPrePtCut > 0 and (m_tauPrePtCut != 1000*pT_window[0] or (pT_window[1] > 0 and m_tauPrePtCut > 1000*pT_window[1]))) {
2050 ATH_MSG_WARNING("Your baseline tau pt configuration is inconsistent! pre pT cut : " << m_tauPrePtCut << " / TauSelectionTool window (in MeV) : [" << 1000*pT_window[0] << ", " << 1000*pT_window[1] << "]");
2051 if(strict) return StatusCode::FAILURE;
2052 }
2053
2054 if( m_tauPt > 0 and (m_tauPt != 1000*pT_window[0] or (pT_window[1] > 0 and m_tauPt > 1000*pT_window[1]))) {
2055 ATH_MSG_WARNING("Your baseline tau pt configuration is inconsistent! pT cut : " << m_tauPt << " / TauSelectionTool window (in Mev) : [" << 1000*pT_window[0] << ", " << 1000*pT_window[1] << "]");
2056 if(strict) return StatusCode::FAILURE;
2057 }
2058
2059 if( m_tauEta > 0 and m_tauEta != eta_window[eta_window.size()-1]) { // eta window can have 4 entries
2060 ATH_MSG_WARNING("Your baseline tau eta configuration is inconsistent! eta cut : " << m_tauEta << " != TauSelectionTool max eta : " << eta_window[eta_window.size()-1]);
2061 if(strict) return StatusCode::FAILURE;
2062 }
2063 }
2064
2065 if(!m_tauConfigPath.empty()) { //signal taus
2066
2067 std::string theConfig = m_tauConfigPath;
2068 if( m_tauConfigPath=="default" ){
2069 if (m_tauId == "rnn001") theConfig = "SUSYTools/tau_selection_rnn001.conf";
2070 else if (m_tauId == "VeryLoose") theConfig = "SUSYTools/tau_selection_veryloose.conf";
2071 else if (m_tauId == "Loose") theConfig = "SUSYTools/tau_selection_loose.conf";
2072 else if (m_tauId == "Medium") theConfig = "SUSYTools/tau_selection_medium.conf";
2073 else if (m_tauId == "Tight") theConfig = "SUSYTools/tau_selection_tight.conf";
2074 }
2075
2076 getTauConfig(theConfig, pT_window, eta_window, elOLR, muVeto, muOLR);
2077
2078 if( m_tauPrePtCut > 0 and (m_tauPrePtCut != 1000*pT_window[0] or (pT_window[1] > 0 and m_tauPrePtCut > 1000*pT_window[1]))) {
2079 ATH_MSG_WARNING("Your tau pt configuration is inconsistent! pre pT cut : " << m_tauPrePtCut << " / TauSelectionTool window (in MeV) : [" << 1000*pT_window[0] << ", " << 1000*pT_window[1] << "]");
2080 if(strict) return StatusCode::FAILURE;
2081 }
2082
2083 if( m_tauPt > 0 and (m_tauPt != 1000*pT_window[0] or (pT_window[1] > 0 and m_tauPt > 1000*pT_window[1]))) {
2084 ATH_MSG_WARNING("Your tau pt configuration is inconsistent! pT cut : " << m_tauPt << " / TauSelectionTool window (in Mev) : [" << 1000*pT_window[0] << ", " << 1000*pT_window[1] << "]");
2085 if(strict) return StatusCode::FAILURE;
2086 }
2087
2088 if( m_tauEta > 0 and m_tauEta != eta_window[eta_window.size()-1]) { // eta window can have 4 entries
2089 ATH_MSG_WARNING("Your tau eta configuration is inconsistent! eta cut : " << m_tauEta << " != TauSelectionTool max eta : " << eta_window[eta_window.size()-1]);
2090 if(strict) return StatusCode::FAILURE;
2091 }
2092 }
2093
2094
2095 return StatusCode::SUCCESS;
2096}
void getTauConfig(const std::string &tauConfigPath, std::vector< float > &pT_window, std::vector< float > &eta_window, bool &eleOLR, bool &muVeto, bool &muOLR) const
bool check_isTighter(const std::string &wp1, const std::string &wp, const std::vector< std::string > &list) const
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...

Member Data Documentation

◆ ATLAS_THREAD_SAFE [1/2]

std::map<std::string, std::function<bool()> > m_metTriggerFuncs ST::SUSYObjDef_xAOD::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 443 of file SUSYObjDef_xAOD.h.

◆ ATLAS_THREAD_SAFE [2/2]

std::map<std::string, bool> m_checkedTriggers ST::SUSYObjDef_xAOD::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 445 of file SUSYObjDef_xAOD.h.

◆ lrt_electrons

const xAOD::ElectronContainer* ST::SUSYObjDef_xAOD::lrt_electrons = nullptr

Definition at line 212 of file SUSYObjDef_xAOD.h.

◆ lrt_muons

const xAOD::MuonContainer* ST::SUSYObjDef_xAOD::lrt_muons = nullptr

Definition at line 206 of file SUSYObjDef_xAOD.h.

◆ m_acc_eleId

SG::ConstAccessor<char> ST::SUSYObjDef_xAOD::m_acc_eleId
protected

Definition at line 999 of file SUSYObjDef_xAOD.h.

◆ m_acc_eleIdBaseline

SG::ConstAccessor<char> ST::SUSYObjDef_xAOD::m_acc_eleIdBaseline
protected

Definition at line 998 of file SUSYObjDef_xAOD.h.

◆ m_acc_jetClean

SG::ConstAccessor<char> ST::SUSYObjDef_xAOD::m_acc_jetClean
protected

Definition at line 1002 of file SUSYObjDef_xAOD.h.

◆ m_acc_photonId

SG::ConstAccessor<char> ST::SUSYObjDef_xAOD::m_acc_photonId
protected

Definition at line 1001 of file SUSYObjDef_xAOD.h.

◆ m_acc_photonIdBaseline

SG::ConstAccessor<char> ST::SUSYObjDef_xAOD::m_acc_photonIdBaseline
protected

Definition at line 1000 of file SUSYObjDef_xAOD.h.

◆ m_applyJVTCut

bool ST::SUSYObjDef_xAOD::m_applyJVTCut
protected

Definition at line 825 of file SUSYObjDef_xAOD.h.

◆ m_ApplyMVATESQualityCheck

bool ST::SUSYObjDef_xAOD::m_ApplyMVATESQualityCheck
protected

Definition at line 738 of file SUSYObjDef_xAOD.h.

◆ m_autoconfigPRW

bool ST::SUSYObjDef_xAOD::m_autoconfigPRW
protected

Definition at line 596 of file SUSYObjDef_xAOD.h.

◆ m_autoconfigPRWCombinedmode

bool ST::SUSYObjDef_xAOD::m_autoconfigPRWCombinedmode
protected

Definition at line 599 of file SUSYObjDef_xAOD.h.

◆ m_autoconfigPRWFile

std::string ST::SUSYObjDef_xAOD::m_autoconfigPRWFile
protected

Definition at line 598 of file SUSYObjDef_xAOD.h.

◆ m_autoconfigPRWPath

std::string ST::SUSYObjDef_xAOD::m_autoconfigPRWPath
protected

Definition at line 597 of file SUSYObjDef_xAOD.h.

◆ m_autoconfigPRWRPVmode

bool ST::SUSYObjDef_xAOD::m_autoconfigPRWRPVmode
protected

Definition at line 600 of file SUSYObjDef_xAOD.h.

◆ m_autoconfigPRWRtags

std::string ST::SUSYObjDef_xAOD::m_autoconfigPRWRtags
protected

Definition at line 601 of file SUSYObjDef_xAOD.h.

◆ m_badJetCut

std::string ST::SUSYObjDef_xAOD::m_badJetCut
protected

Definition at line 544 of file SUSYObjDef_xAOD.h.

◆ m_badmuQoverP

double ST::SUSYObjDef_xAOD::m_badmuQoverP
protected

Definition at line 717 of file SUSYObjDef_xAOD.h.

◆ m_beginInputFileCalled

bool asg::AsgMetadataTool::m_beginInputFileCalled
privateinherited

Flag helping to discover when the tool misses the opening of the first input file.

Definition at line 126 of file AsgMetadataTool.h.

◆ m_bool_prop_set

std::set<std::string> ST::SUSYObjDef_xAOD::m_bool_prop_set
private

Definition at line 439 of file SUSYObjDef_xAOD.h.

◆ m_btagEffTool

asg::AnaToolHandle<IBTaggingEfficiencyTool> ST::SUSYObjDef_xAOD::m_btagEffTool
protected

Definition at line 927 of file SUSYObjDef_xAOD.h.

◆ m_btagEffTool_trkJet

asg::AnaToolHandle<IBTaggingEfficiencyTool> ST::SUSYObjDef_xAOD::m_btagEffTool_trkJet
protected

Definition at line 930 of file SUSYObjDef_xAOD.h.

◆ m_bTaggingCalibrationFilePath

std::string ST::SUSYObjDef_xAOD::m_bTaggingCalibrationFilePath
protected

Definition at line 827 of file SUSYObjDef_xAOD.h.

◆ m_BtagKeyOverride

std::string ST::SUSYObjDef_xAOD::m_BtagKeyOverride
protected

Definition at line 680 of file SUSYObjDef_xAOD.h.

◆ m_BtagMinPt

double ST::SUSYObjDef_xAOD::m_BtagMinPt
protected

Definition at line 679 of file SUSYObjDef_xAOD.h.

◆ m_BtagMinPt_trkJet

double ST::SUSYObjDef_xAOD::m_BtagMinPt_trkJet
protected

Definition at line 687 of file SUSYObjDef_xAOD.h.

◆ m_btagSelTool

asg::AnaToolHandle<IBTaggingSelectionTool> ST::SUSYObjDef_xAOD::m_btagSelTool
protected

Definition at line 928 of file SUSYObjDef_xAOD.h.

◆ m_btagSelTool_OR

asg::AnaToolHandle<IBTaggingSelectionTool> ST::SUSYObjDef_xAOD::m_btagSelTool_OR
protected

Definition at line 929 of file SUSYObjDef_xAOD.h.

◆ m_btagSelTool_trkJet

asg::AnaToolHandle<IBTaggingSelectionTool> ST::SUSYObjDef_xAOD::m_btagSelTool_trkJet
protected

Definition at line 931 of file SUSYObjDef_xAOD.h.

◆ m_BtagSystStrategy

std::string ST::SUSYObjDef_xAOD::m_BtagSystStrategy
protected

Definition at line 681 of file SUSYObjDef_xAOD.h.

◆ m_BtagTagger

std::string ST::SUSYObjDef_xAOD::m_BtagTagger
protected

Definition at line 678 of file SUSYObjDef_xAOD.h.

◆ m_BtagTagger_trkJet

std::string ST::SUSYObjDef_xAOD::m_BtagTagger_trkJet
protected

Definition at line 686 of file SUSYObjDef_xAOD.h.

◆ m_BtagWP

std::string ST::SUSYObjDef_xAOD::m_BtagWP
protected

Definition at line 677 of file SUSYObjDef_xAOD.h.

◆ m_BtagWP_trkJet

std::string ST::SUSYObjDef_xAOD::m_BtagWP_trkJet
protected

Definition at line 685 of file SUSYObjDef_xAOD.h.

◆ m_caloMETsyst

bool ST::SUSYObjDef_xAOD::m_caloMETsyst
protected

Definition at line 589 of file SUSYObjDef_xAOD.h.

◆ m_commonPRWFileMC20a

std::string ST::SUSYObjDef_xAOD::m_commonPRWFileMC20a
protected

Definition at line 606 of file SUSYObjDef_xAOD.h.

◆ m_commonPRWFileMC20d

std::string ST::SUSYObjDef_xAOD::m_commonPRWFileMC20d
protected

Definition at line 607 of file SUSYObjDef_xAOD.h.

◆ m_commonPRWFileMC20e

std::string ST::SUSYObjDef_xAOD::m_commonPRWFileMC20e
protected

Definition at line 608 of file SUSYObjDef_xAOD.h.

◆ m_commonPRWFileMC21a

std::string ST::SUSYObjDef_xAOD::m_commonPRWFileMC21a
protected

Definition at line 609 of file SUSYObjDef_xAOD.h.

◆ m_commonPRWFileMC23a

std::string ST::SUSYObjDef_xAOD::m_commonPRWFileMC23a
protected

Definition at line 610 of file SUSYObjDef_xAOD.h.

◆ m_commonPRWFileMC23c

std::string ST::SUSYObjDef_xAOD::m_commonPRWFileMC23c
protected

Definition at line 611 of file SUSYObjDef_xAOD.h.

◆ m_commonPRWFileMC23d

std::string ST::SUSYObjDef_xAOD::m_commonPRWFileMC23d
protected

Definition at line 612 of file SUSYObjDef_xAOD.h.

◆ m_commonPRWFileMC23e

std::string ST::SUSYObjDef_xAOD::m_commonPRWFileMC23e
protected

Definition at line 613 of file SUSYObjDef_xAOD.h.

◆ m_conf_to_prop

std::map<std::string, std::string> ST::SUSYObjDef_xAOD::m_conf_to_prop
private

Definition at line 436 of file SUSYObjDef_xAOD.h.

◆ m_configFile

std::string ST::SUSYObjDef_xAOD::m_configFile
protected

Definition at line 522 of file SUSYObjDef_xAOD.h.

◆ m_currentSyst

CP::SystematicSet ST::SUSYObjDef_xAOD::m_currentSyst
protected

Definition at line 820 of file SUSYObjDef_xAOD.h.

◆ m_dataSource

int ST::SUSYObjDef_xAOD::m_dataSource
protected

Definition at line 519 of file SUSYObjDef_xAOD.h.

◆ m_deadHVTool

asg::AnaToolHandle<IAsgDeadHVCellRemovalTool> ST::SUSYObjDef_xAOD::m_deadHVTool
protected

Definition at line 906 of file SUSYObjDef_xAOD.h.

◆ m_debug

bool ST::SUSYObjDef_xAOD::m_debug
protected

Definition at line 540 of file SUSYObjDef_xAOD.h.

◆ m_defaultJets

std::string ST::SUSYObjDef_xAOD::m_defaultJets
protected

Definition at line 814 of file SUSYObjDef_xAOD.h.

◆ m_defaultSyst

CP::SystematicSet ST::SUSYObjDef_xAOD::m_defaultSyst = CP::SystematicSet()
protected

Definition at line 819 of file SUSYObjDef_xAOD.h.

◆ m_defaultTrackJets

std::string ST::SUSYObjDef_xAOD::m_defaultTrackJets
protected

Definition at line 815 of file SUSYObjDef_xAOD.h.

◆ m_defaultTruthJets

std::string ST::SUSYObjDef_xAOD::m_defaultTruthJets
protected

Definition at line 817 of file SUSYObjDef_xAOD.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_doElIsoSignal

bool ST::SUSYObjDef_xAOD::m_doElIsoSignal
protected

Definition at line 797 of file SUSYObjDef_xAOD.h.

◆ m_doFwdJVT

bool ST::SUSYObjDef_xAOD::m_doFwdJVT
protected

Definition at line 752 of file SUSYObjDef_xAOD.h.

◆ m_doIsoSignal

bool ST::SUSYObjDef_xAOD::m_doIsoSignal
protected

Definition at line 796 of file SUSYObjDef_xAOD.h.

◆ m_doModifiedEleId

bool ST::SUSYObjDef_xAOD::m_doModifiedEleId
protected

Definition at line 527 of file SUSYObjDef_xAOD.h.

◆ m_doMuIsoSignal

bool ST::SUSYObjDef_xAOD::m_doMuIsoSignal
protected

Definition at line 799 of file SUSYObjDef_xAOD.h.

◆ m_doPhiReso

bool ST::SUSYObjDef_xAOD::m_doPhiReso
protected

Definition at line 594 of file SUSYObjDef_xAOD.h.

◆ m_doPhIsoSignal

bool ST::SUSYObjDef_xAOD::m_doPhIsoSignal
protected

Definition at line 798 of file SUSYObjDef_xAOD.h.

◆ m_doTTVAsf

bool ST::SUSYObjDef_xAOD::m_doTTVAsf
protected

Definition at line 526 of file SUSYObjDef_xAOD.h.

◆ m_EG_corrFNList

std::string ST::SUSYObjDef_xAOD::m_EG_corrFNList
protected

Definition at line 824 of file SUSYObjDef_xAOD.h.

◆ m_EG_corrModel

std::string ST::SUSYObjDef_xAOD::m_EG_corrModel
protected

Definition at line 823 of file SUSYObjDef_xAOD.h.

◆ m_egammaAmbiguityTool

asg::AnaToolHandle<IEGammaAmbiguityTool> ST::SUSYObjDef_xAOD::m_egammaAmbiguityTool
protected

Definition at line 916 of file SUSYObjDef_xAOD.h.

◆ m_egammaCalibTool

asg::AnaToolHandle<CP::IEgammaCalibrationAndSmearingTool> ST::SUSYObjDef_xAOD::m_egammaCalibTool
protected

Combined electron collection.

Definition at line 901 of file SUSYObjDef_xAOD.h.

◆ m_EigenvectorReductionB

std::string ST::SUSYObjDef_xAOD::m_EigenvectorReductionB
protected

Definition at line 682 of file SUSYObjDef_xAOD.h.

◆ m_EigenvectorReductionC

std::string ST::SUSYObjDef_xAOD::m_EigenvectorReductionC
protected

Definition at line 683 of file SUSYObjDef_xAOD.h.

◆ m_EigenvectorReductionLight

std::string ST::SUSYObjDef_xAOD::m_EigenvectorReductionLight
protected

Definition at line 684 of file SUSYObjDef_xAOD.h.

◆ m_el_id_support

std::vector<std::string> ST::SUSYObjDef_xAOD::m_el_id_support
protected

Definition at line 629 of file SUSYObjDef_xAOD.h.

◆ m_el_iso_fallback

std::map<std::string, std::string> ST::SUSYObjDef_xAOD::m_el_iso_fallback
protected

Definition at line 637 of file SUSYObjDef_xAOD.h.

◆ m_el_iso_support

std::vector<std::string> ST::SUSYObjDef_xAOD::m_el_iso_support
protected

Definition at line 633 of file SUSYObjDef_xAOD.h.

◆ m_eleAllowRun3TrigSFFallback

bool ST::SUSYObjDef_xAOD::m_eleAllowRun3TrigSFFallback
protected

Definition at line 702 of file SUSYObjDef_xAOD.h.

◆ m_eleBaselineCrackVeto

bool ST::SUSYObjDef_xAOD::m_eleBaselineCrackVeto
protected

Definition at line 692 of file SUSYObjDef_xAOD.h.

◆ m_elebaselined0sig

double ST::SUSYObjDef_xAOD::m_elebaselined0sig
protected

Definition at line 698 of file SUSYObjDef_xAOD.h.

◆ m_eleBaselineEta

double ST::SUSYObjDef_xAOD::m_eleBaselineEta
protected

Definition at line 691 of file SUSYObjDef_xAOD.h.

◆ m_eleBaselineIso_WP

std::string ST::SUSYObjDef_xAOD::m_eleBaselineIso_WP
protected

Definition at line 649 of file SUSYObjDef_xAOD.h.

◆ m_eleBaselinePt

double ST::SUSYObjDef_xAOD::m_eleBaselinePt
protected

Definition at line 690 of file SUSYObjDef_xAOD.h.

◆ m_elebaselinez0

double ST::SUSYObjDef_xAOD::m_elebaselinez0
protected

Definition at line 699 of file SUSYObjDef_xAOD.h.

◆ m_elecChargeEffCorrTool

asg::AnaToolHandle<IAsgElectronEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_elecChargeEffCorrTool
protected

Definition at line 918 of file SUSYObjDef_xAOD.h.

◆ m_elecChargeIDSelectorTool

asg::AnaToolHandle<IAsgElectronLikelihoodTool> ST::SUSYObjDef_xAOD::m_elecChargeIDSelectorTool
protected

Definition at line 917 of file SUSYObjDef_xAOD.h.

◆ m_elecEfficiencySFTool_chf

asg::AnaToolHandle<IAsgElectronEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_elecEfficiencySFTool_chf
protected

Definition at line 891 of file SUSYObjDef_xAOD.h.

◆ m_elecEfficiencySFTool_id

asg::AnaToolHandle<IAsgElectronEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_elecEfficiencySFTool_id
protected

Definition at line 886 of file SUSYObjDef_xAOD.h.

◆ m_elecEfficiencySFTool_iso

asg::AnaToolHandle<IAsgElectronEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_elecEfficiencySFTool_iso
protected

Definition at line 889 of file SUSYObjDef_xAOD.h.

◆ m_elecEfficiencySFTool_isoHighPt

asg::AnaToolHandle<IAsgElectronEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_elecEfficiencySFTool_isoHighPt
protected

Definition at line 890 of file SUSYObjDef_xAOD.h.

◆ m_elecEfficiencySFTool_reco

asg::AnaToolHandle<IAsgElectronEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_elecEfficiencySFTool_reco
protected

Combined muon collection.

Definition at line 885 of file SUSYObjDef_xAOD.h.

◆ m_elecEfficiencySFTool_trig_mixLep

std::vector<asg::AnaToolHandle<IAsgElectronEfficiencyCorrectionTool> > ST::SUSYObjDef_xAOD::m_elecEfficiencySFTool_trig_mixLep
protected

Definition at line 893 of file SUSYObjDef_xAOD.h.

◆ m_elecEfficiencySFTool_trig_singleLep

asg::AnaToolHandle<IAsgElectronEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_elecEfficiencySFTool_trig_singleLep
protected

Definition at line 887 of file SUSYObjDef_xAOD.h.

◆ m_elecEfficiencySFTool_trigEff_mixLep

std::vector<asg::AnaToolHandle<IAsgElectronEfficiencyCorrectionTool> > ST::SUSYObjDef_xAOD::m_elecEfficiencySFTool_trigEff_mixLep
protected

Definition at line 894 of file SUSYObjDef_xAOD.h.

◆ m_elecEfficiencySFTool_trigEff_singleLep

asg::AnaToolHandle<IAsgElectronEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_elecEfficiencySFTool_trigEff_singleLep
protected

Definition at line 888 of file SUSYObjDef_xAOD.h.

◆ m_eleChID_signal

bool ST::SUSYObjDef_xAOD::m_eleChID_signal
protected

Definition at line 664 of file SUSYObjDef_xAOD.h.

◆ m_eleChID_WP

std::string ST::SUSYObjDef_xAOD::m_eleChID_WP
protected

Definition at line 660 of file SUSYObjDef_xAOD.h.

◆ m_eleChIso

bool ST::SUSYObjDef_xAOD::m_eleChIso
protected

Definition at line 663 of file SUSYObjDef_xAOD.h.

◆ m_elecLRTORTool

asg::AnaToolHandle<CP::IElectronLRTOverlapRemovalTool> ST::SUSYObjDef_xAOD::m_elecLRTORTool
protected

Definition at line 897 of file SUSYObjDef_xAOD.h.

◆ m_eleConfig

std::string ST::SUSYObjDef_xAOD::m_eleConfig
protected

Definition at line 647 of file SUSYObjDef_xAOD.h.

◆ m_eleConfigBaseline

std::string ST::SUSYObjDef_xAOD::m_eleConfigBaseline
protected

Definition at line 648 of file SUSYObjDef_xAOD.h.

◆ m_eleCrackVeto

bool ST::SUSYObjDef_xAOD::m_eleCrackVeto
protected

Definition at line 695 of file SUSYObjDef_xAOD.h.

◆ m_elecSelLikelihood

asg::AnaToolHandle<IAsgElectronLikelihoodTool> ST::SUSYObjDef_xAOD::m_elecSelLikelihood
protected

Definition at line 902 of file SUSYObjDef_xAOD.h.

◆ m_elecSelLikelihoodBaseline

asg::AnaToolHandle<IAsgElectronLikelihoodTool> ST::SUSYObjDef_xAOD::m_elecSelLikelihoodBaseline
protected

Definition at line 903 of file SUSYObjDef_xAOD.h.

◆ m_elecTrigEffTools

ToolHandleArray<IAsgElectronEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_elecTrigEffTools
protected

Definition at line 896 of file SUSYObjDef_xAOD.h.

◆ m_elecTrigSFTools

ToolHandleArray<IAsgElectronEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_elecTrigSFTools
protected

Definition at line 895 of file SUSYObjDef_xAOD.h.

◆ m_electronTriggerSFStringSingle

std::string ST::SUSYObjDef_xAOD::m_electronTriggerSFStringSingle
protected

Definition at line 641 of file SUSYObjDef_xAOD.h.

◆ m_eled0sig

double ST::SUSYObjDef_xAOD::m_eled0sig
protected

Definition at line 696 of file SUSYObjDef_xAOD.h.

◆ m_eleEffMapFilePath

std::string ST::SUSYObjDef_xAOD::m_eleEffMapFilePath
protected

Definition at line 700 of file SUSYObjDef_xAOD.h.

◆ m_eleEffMapFilePathRun2

std::string ST::SUSYObjDef_xAOD::m_eleEffMapFilePathRun2
protected

Definition at line 701 of file SUSYObjDef_xAOD.h.

◆ m_eleEta

double ST::SUSYObjDef_xAOD::m_eleEta
protected

Definition at line 694 of file SUSYObjDef_xAOD.h.

◆ m_EleFatJetDR

double ST::SUSYObjDef_xAOD::m_EleFatJetDR
protected

Definition at line 793 of file SUSYObjDef_xAOD.h.

◆ m_eleForceFullSimCalib

bool ST::SUSYObjDef_xAOD::m_eleForceFullSimCalib
protected

Definition at line 703 of file SUSYObjDef_xAOD.h.

◆ m_eleId

std::string ST::SUSYObjDef_xAOD::m_eleId
protected

Definition at line 645 of file SUSYObjDef_xAOD.h.

◆ m_eleIdBaseline

std::string ST::SUSYObjDef_xAOD::m_eleIdBaseline
protected

Definition at line 646 of file SUSYObjDef_xAOD.h.

◆ m_eleIdBaselineDFName

std::string ST::SUSYObjDef_xAOD::m_eleIdBaselineDFName
protected

Definition at line 992 of file SUSYObjDef_xAOD.h.

◆ m_eleIdDFName

std::string ST::SUSYObjDef_xAOD::m_eleIdDFName
protected

Definition at line 993 of file SUSYObjDef_xAOD.h.

◆ m_eleIdExpert

bool ST::SUSYObjDef_xAOD::m_eleIdExpert
protected

Definition at line 650 of file SUSYObjDef_xAOD.h.

◆ m_eleIso_WP

std::string ST::SUSYObjDef_xAOD::m_eleIso_WP
protected

Definition at line 657 of file SUSYObjDef_xAOD.h.

◆ m_eleIsoHighPt_WP

std::string ST::SUSYObjDef_xAOD::m_eleIsoHighPt_WP
protected

Definition at line 658 of file SUSYObjDef_xAOD.h.

◆ m_eleIsoHighPtThresh

double ST::SUSYObjDef_xAOD::m_eleIsoHighPtThresh
protected

Definition at line 659 of file SUSYObjDef_xAOD.h.

◆ m_eleLRT

bool ST::SUSYObjDef_xAOD::m_eleLRT
protected

Definition at line 661 of file SUSYObjDef_xAOD.h.

◆ m_eleLRT_strat

int ST::SUSYObjDef_xAOD::m_eleLRT_strat
protected

Definition at line 662 of file SUSYObjDef_xAOD.h.

◆ m_elePt

double ST::SUSYObjDef_xAOD::m_elePt
protected

Definition at line 693 of file SUSYObjDef_xAOD.h.

◆ m_eleTerm

std::string ST::SUSYObjDef_xAOD::m_eleTerm
protected

Definition at line 569 of file SUSYObjDef_xAOD.h.

◆ m_elez0

double ST::SUSYObjDef_xAOD::m_elez0
protected

Definition at line 697 of file SUSYObjDef_xAOD.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_fatjetFFSmearingSyst

std::vector<CP::SystematicSet> ST::SUSYObjDef_xAOD::m_fatjetFFSmearingSyst
protected

Definition at line 821 of file SUSYObjDef_xAOD.h.

◆ m_fatjetFFSmearingTool

asg::AnaToolHandle<ICPJetCorrectionTool> ST::SUSYObjDef_xAOD::m_fatjetFFSmearingTool
protected

Definition at line 838 of file SUSYObjDef_xAOD.h.

◆ m_fatJets

std::string ST::SUSYObjDef_xAOD::m_fatJets
protected

Definition at line 816 of file SUSYObjDef_xAOD.h.

◆ m_fatJetUncConfig

std::string ST::SUSYObjDef_xAOD::m_fatJetUncConfig
protected

Definition at line 546 of file SUSYObjDef_xAOD.h.

◆ m_fatJetUncertaintiesMCType

std::string ST::SUSYObjDef_xAOD::m_fatJetUncertaintiesMCType
protected

Definition at line 535 of file SUSYObjDef_xAOD.h.

◆ m_fatJetUncertaintiesPDsmearing

bool ST::SUSYObjDef_xAOD::m_fatJetUncertaintiesPDsmearing
protected

Definition at line 547 of file SUSYObjDef_xAOD.h.

◆ m_fatjetUncertaintiesPDSmearTool

asg::AnaToolHandle<ICPJetUncertaintiesTool> ST::SUSYObjDef_xAOD::m_fatjetUncertaintiesPDSmearTool
protected

Definition at line 837 of file SUSYObjDef_xAOD.h.

◆ m_fatjetUncertaintiesTool

asg::AnaToolHandle<ICPJetUncertaintiesTool> ST::SUSYObjDef_xAOD::m_fatjetUncertaintiesTool
protected

Definition at line 836 of file SUSYObjDef_xAOD.h.

◆ m_fatJetUncVars

std::string ST::SUSYObjDef_xAOD::m_fatJetUncVars
protected

Definition at line 548 of file SUSYObjDef_xAOD.h.

◆ m_fJvtConfigRun2

std::string ST::SUSYObjDef_xAOD::m_fJvtConfigRun2
protected

Definition at line 756 of file SUSYObjDef_xAOD.h.

◆ m_fJvtConfigRun3

std::string ST::SUSYObjDef_xAOD::m_fJvtConfigRun3
protected

Definition at line 757 of file SUSYObjDef_xAOD.h.

◆ m_fJvtEtaMin

double ST::SUSYObjDef_xAOD::m_fJvtEtaMin
protected

Definition at line 755 of file SUSYObjDef_xAOD.h.

◆ m_fJvtPtMax

double ST::SUSYObjDef_xAOD::m_fJvtPtMax
protected

Definition at line 754 of file SUSYObjDef_xAOD.h.

◆ m_fJvtWP

std::string ST::SUSYObjDef_xAOD::m_fJvtWP
protected

Definition at line 753 of file SUSYObjDef_xAOD.h.

◆ m_force_noElId

bool ST::SUSYObjDef_xAOD::m_force_noElId
protected

Definition at line 524 of file SUSYObjDef_xAOD.h.

◆ m_force_noMuId

bool ST::SUSYObjDef_xAOD::m_force_noMuId
protected

Definition at line 525 of file SUSYObjDef_xAOD.h.

◆ m_gammaTerm

std::string ST::SUSYObjDef_xAOD::m_gammaTerm
protected

Definition at line 570 of file SUSYObjDef_xAOD.h.

◆ m_GSFLRTCollectionName

SG::ReadHandleKey<xAOD::TrackParticleContainer> ST::SUSYObjDef_xAOD::m_GSFLRTCollectionName {this, "GSFLRTCollectionName", "LRTGSFTrackParticles", "GSF LRT collection name"}
private

Definition at line 482 of file SUSYObjDef_xAOD.h.

482{this, "GSFLRTCollectionName", "LRTGSFTrackParticles", "GSF LRT collection name"};

◆ m_inputMetaStore

MetaStore_t asg::AsgMetadataTool::m_inputMetaStore
privateinherited

Object accessing the input metadata store.

Definition at line 119 of file AsgMetadataTool.h.

◆ m_inputMETCore

std::string ST::SUSYObjDef_xAOD::m_inputMETCore
protected

Definition at line 576 of file SUSYObjDef_xAOD.h.

◆ m_inputMETMap

std::string ST::SUSYObjDef_xAOD::m_inputMETMap
protected

Definition at line 575 of file SUSYObjDef_xAOD.h.

◆ m_inputMETRef

std::string ST::SUSYObjDef_xAOD::m_inputMETRef
protected

Definition at line 577 of file SUSYObjDef_xAOD.h.

◆ m_inputMETSuffix

std::string ST::SUSYObjDef_xAOD::m_inputMETSuffix
protected

Definition at line 574 of file SUSYObjDef_xAOD.h.

◆ m_isoBaselineTool

asg::AnaToolHandle<CP::IIsolationSelectionTool> ST::SUSYObjDef_xAOD::m_isoBaselineTool
protected

Definition at line 978 of file SUSYObjDef_xAOD.h.

◆ m_IsoCloseByORpassLabel

std::string ST::SUSYObjDef_xAOD::m_IsoCloseByORpassLabel
protected

Definition at line 802 of file SUSYObjDef_xAOD.h.

◆ m_isoCloseByTool

asg::AnaToolHandle<CP::IIsolationCloseByCorrectionTool> ST::SUSYObjDef_xAOD::m_isoCloseByTool
protected

Definition at line 980 of file SUSYObjDef_xAOD.h.

◆ m_isoCorrTool

asg::AnaToolHandle<CP::IIsolationCorrectionTool> ST::SUSYObjDef_xAOD::m_isoCorrTool
protected

Definition at line 975 of file SUSYObjDef_xAOD.h.

◆ m_isoHighPtTool

asg::AnaToolHandle<CP::IIsolationSelectionTool> ST::SUSYObjDef_xAOD::m_isoHighPtTool
protected

Definition at line 979 of file SUSYObjDef_xAOD.h.

◆ m_isoTool

asg::AnaToolHandle<CP::IIsolationSelectionTool> ST::SUSYObjDef_xAOD::m_isoTool
protected

Definition at line 976 of file SUSYObjDef_xAOD.h.

◆ m_isPHYSLITE

bool ST::SUSYObjDef_xAOD::m_isPHYSLITE
protected

Definition at line 808 of file SUSYObjDef_xAOD.h.

◆ m_isRun3

bool ST::SUSYObjDef_xAOD::m_isRun3
protected

Definition at line 807 of file SUSYObjDef_xAOD.h.

◆ m_jesCalibArea

std::string ST::SUSYObjDef_xAOD::m_jesCalibArea
protected

Definition at line 869 of file SUSYObjDef_xAOD.h.

◆ m_jesCalibSeq

std::string ST::SUSYObjDef_xAOD::m_jesCalibSeq
protected

Definition at line 866 of file SUSYObjDef_xAOD.h.

◆ m_jesCalibSeqFat

std::string ST::SUSYObjDef_xAOD::m_jesCalibSeqFat
protected

Definition at line 868 of file SUSYObjDef_xAOD.h.

◆ m_jesCalibSeqJMS

std::string ST::SUSYObjDef_xAOD::m_jesCalibSeqJMS
protected

Definition at line 867 of file SUSYObjDef_xAOD.h.

◆ m_jesConfig

std::string ST::SUSYObjDef_xAOD::m_jesConfig
protected

Definition at line 860 of file SUSYObjDef_xAOD.h.

◆ m_jesConfigAFII

std::string ST::SUSYObjDef_xAOD::m_jesConfigAFII
protected

Definition at line 863 of file SUSYObjDef_xAOD.h.

◆ m_jesConfigFat

std::string ST::SUSYObjDef_xAOD::m_jesConfigFat
protected

Definition at line 864 of file SUSYObjDef_xAOD.h.

◆ m_jesConfigFatData

std::string ST::SUSYObjDef_xAOD::m_jesConfigFatData
protected

Definition at line 865 of file SUSYObjDef_xAOD.h.

◆ m_jesConfigJMS

std::string ST::SUSYObjDef_xAOD::m_jesConfigJMS
protected

Definition at line 861 of file SUSYObjDef_xAOD.h.

◆ m_jesConfigJMSData

std::string ST::SUSYObjDef_xAOD::m_jesConfigJMSData
protected

Definition at line 862 of file SUSYObjDef_xAOD.h.

◆ m_jetCalibTool

asg::AnaToolHandle<IJetCalibrationTool> ST::SUSYObjDef_xAOD::m_jetCalibTool
protected

Definition at line 832 of file SUSYObjDef_xAOD.h.

◆ m_jetCleanDFName

std::string ST::SUSYObjDef_xAOD::m_jetCleanDFName
protected

Definition at line 996 of file SUSYObjDef_xAOD.h.

◆ m_jetCleaningTool

asg::AnaToolHandle<IJetSelector> ST::SUSYObjDef_xAOD::m_jetCleaningTool
protected

Definition at line 839 of file SUSYObjDef_xAOD.h.

◆ m_jetEta

double ST::SUSYObjDef_xAOD::m_jetEta
protected

Definition at line 742 of file SUSYObjDef_xAOD.h.

◆ m_jetFatCalibTool

asg::AnaToolHandle<IJetCalibrationTool> ST::SUSYObjDef_xAOD::m_jetFatCalibTool
protected

Definition at line 833 of file SUSYObjDef_xAOD.h.

◆ m_JetFatJetDR

double ST::SUSYObjDef_xAOD::m_JetFatJetDR
protected

Definition at line 794 of file SUSYObjDef_xAOD.h.

◆ m_jetfJvtEfficiencyTool

asg::AnaToolHandle<CP::IJvtEfficiencyTool> ST::SUSYObjDef_xAOD::m_jetfJvtEfficiencyTool
protected

Definition at line 847 of file SUSYObjDef_xAOD.h.

◆ m_jetfJvtSelectionTool

asg::AnaToolHandle<IAsgSelectionTool> ST::SUSYObjDef_xAOD::m_jetfJvtSelectionTool
protected

Definition at line 846 of file SUSYObjDef_xAOD.h.

◆ m_jetInputType

int ST::SUSYObjDef_xAOD::m_jetInputType
protected

Definition at line 520 of file SUSYObjDef_xAOD.h.

◆ m_jetJvt

double ST::SUSYObjDef_xAOD::m_jetJvt
protected

Definition at line 743 of file SUSYObjDef_xAOD.h.

◆ m_jetJvtMomentTool

asg::AnaToolHandle<JetVertexTaggerTool> ST::SUSYObjDef_xAOD::m_jetJvtMomentTool
protected

Definition at line 842 of file SUSYObjDef_xAOD.h.

◆ m_jetNNJvtEfficiencyTool

asg::AnaToolHandle<CP::IJvtEfficiencyTool> ST::SUSYObjDef_xAOD::m_jetNNJvtEfficiencyTool
protected

Definition at line 845 of file SUSYObjDef_xAOD.h.

◆ m_jetNNJvtMomentTool

asg::AnaToolHandle<JetPileupTag::JetVertexNNTagger> ST::SUSYObjDef_xAOD::m_jetNNJvtMomentTool
protected

Definition at line 843 of file SUSYObjDef_xAOD.h.

◆ m_jetNNJvtSelectionTool

asg::AnaToolHandle<IAsgSelectionTool> ST::SUSYObjDef_xAOD::m_jetNNJvtSelectionTool
protected

Definition at line 844 of file SUSYObjDef_xAOD.h.

◆ m_jetPileupLabelingTool

asg::AnaToolHandle<JetPileupLabelingTool> ST::SUSYObjDef_xAOD::m_jetPileupLabelingTool
protected

Definition at line 841 of file SUSYObjDef_xAOD.h.

◆ m_jetPt

double ST::SUSYObjDef_xAOD::m_jetPt
protected

Definition at line 741 of file SUSYObjDef_xAOD.h.

◆ m_jetTerm

std::string ST::SUSYObjDef_xAOD::m_jetTerm
protected

Definition at line 572 of file SUSYObjDef_xAOD.h.

◆ m_jetTruthLabelingTool

asg::AnaToolHandle<JetTruthLabelingTool> ST::SUSYObjDef_xAOD::m_jetTruthLabelingTool
protected

Definition at line 852 of file SUSYObjDef_xAOD.h.

◆ m_JetTruthLabelName

std::string ST::SUSYObjDef_xAOD::m_JetTruthLabelName
protected

Definition at line 564 of file SUSYObjDef_xAOD.h.

◆ m_jetUncertaintiesAnalysisFile

std::string ST::SUSYObjDef_xAOD::m_jetUncertaintiesAnalysisFile
protected

Definition at line 532 of file SUSYObjDef_xAOD.h.

◆ m_jetUncertaintiesCalibArea

std::string ST::SUSYObjDef_xAOD::m_jetUncertaintiesCalibArea
protected

Definition at line 533 of file SUSYObjDef_xAOD.h.

◆ m_jetUncertaintiesConfig

std::string ST::SUSYObjDef_xAOD::m_jetUncertaintiesConfig
protected

Prefix for trigger matchiing container name.

Definition at line 531 of file SUSYObjDef_xAOD.h.

◆ m_jetUncertaintiesMCType

std::string ST::SUSYObjDef_xAOD::m_jetUncertaintiesMCType
protected

Definition at line 534 of file SUSYObjDef_xAOD.h.

◆ m_jetUncertaintiesPDsmearing

bool ST::SUSYObjDef_xAOD::m_jetUncertaintiesPDsmearing
protected

Definition at line 536 of file SUSYObjDef_xAOD.h.

◆ m_jetUncertaintiesPDSmearTool

asg::AnaToolHandle<ICPJetUncertaintiesTool> ST::SUSYObjDef_xAOD::m_jetUncertaintiesPDSmearTool
protected

Definition at line 835 of file SUSYObjDef_xAOD.h.

◆ m_jetUncertaintiesTool

asg::AnaToolHandle<ICPJetUncertaintiesTool> ST::SUSYObjDef_xAOD::m_jetUncertaintiesTool
protected

Definition at line 834 of file SUSYObjDef_xAOD.h.

◆ m_JMScalib

bool ST::SUSYObjDef_xAOD::m_JMScalib
protected

Definition at line 759 of file SUSYObjDef_xAOD.h.

◆ m_JvtConfigRun2

std::string ST::SUSYObjDef_xAOD::m_JvtConfigRun2
protected

Definition at line 746 of file SUSYObjDef_xAOD.h.

◆ m_JvtConfigRun3

std::string ST::SUSYObjDef_xAOD::m_JvtConfigRun3
protected

Definition at line 747 of file SUSYObjDef_xAOD.h.

◆ m_JvtPtMax

double ST::SUSYObjDef_xAOD::m_JvtPtMax
protected

Definition at line 745 of file SUSYObjDef_xAOD.h.

◆ m_JvtWP

std::string ST::SUSYObjDef_xAOD::m_JvtWP
protected

Definition at line 744 of file SUSYObjDef_xAOD.h.

◆ m_label_truthKey

SG::ReadDecorHandleKey<xAOD::JetContainer> ST::SUSYObjDef_xAOD::m_label_truthKey
protected

Definition at line 857 of file SUSYObjDef_xAOD.h.

◆ m_legsPerTool

std::map<std::string,std::string> ST::SUSYObjDef_xAOD::m_legsPerTool
protected

Definition at line 829 of file SUSYObjDef_xAOD.h.

◆ m_legsPerTool_ph

std::map<std::string,std::string> ST::SUSYObjDef_xAOD::m_legsPerTool_ph
protected

Definition at line 830 of file SUSYObjDef_xAOD.h.

◆ m_LRTCollectionName

SG::ReadHandleKey<xAOD::TrackParticleContainer> ST::SUSYObjDef_xAOD::m_LRTCollectionName {this, "LRTCollectionName", "InDetLargeD0TrackParticles", "LRT collection name"}
private

Definition at line 481 of file SUSYObjDef_xAOD.h.

481{this, "LRTCollectionName", "InDetLargeD0TrackParticles", "LRT collection name"};

◆ m_LRTuncTool

asg::AnaToolHandle<InDet::IInclusiveTrackFilterTool> ST::SUSYObjDef_xAOD::m_LRTuncTool
protected

Definition at line 984 of file SUSYObjDef_xAOD.h.

◆ m_mcCampaign

std::string ST::SUSYObjDef_xAOD::m_mcCampaign
protected

Definition at line 602 of file SUSYObjDef_xAOD.h.

◆ m_mcChannel

int ST::SUSYObjDef_xAOD::m_mcChannel
protected

Definition at line 603 of file SUSYObjDef_xAOD.h.

◆ m_metDoMuonEloss

bool ST::SUSYObjDef_xAOD::m_metDoMuonEloss
protected

Definition at line 583 of file SUSYObjDef_xAOD.h.

◆ m_metDoRemoveMuonJets

bool ST::SUSYObjDef_xAOD::m_metDoRemoveMuonJets
protected

Definition at line 581 of file SUSYObjDef_xAOD.h.

◆ m_metDoSetMuonJetEMScale

bool ST::SUSYObjDef_xAOD::m_metDoSetMuonJetEMScale
protected

Definition at line 580 of file SUSYObjDef_xAOD.h.

◆ m_metGreedyPhotons

bool ST::SUSYObjDef_xAOD::m_metGreedyPhotons
protected

Definition at line 584 of file SUSYObjDef_xAOD.h.

◆ m_metJetSelection

std::string ST::SUSYObjDef_xAOD::m_metJetSelection
protected

Definition at line 810 of file SUSYObjDef_xAOD.h.

◆ m_metMaker

asg::AnaToolHandle<IMETMaker> ST::SUSYObjDef_xAOD::m_metMaker
protected

Definition at line 933 of file SUSYObjDef_xAOD.h.

◆ m_metRemoveOverlappingCaloTaggedMuons

bool ST::SUSYObjDef_xAOD::m_metRemoveOverlappingCaloTaggedMuons
protected

Definition at line 579 of file SUSYObjDef_xAOD.h.

◆ m_metSignif

asg::AnaToolHandle<IMETSignificance> ST::SUSYObjDef_xAOD::m_metSignif
protected

Definition at line 935 of file SUSYObjDef_xAOD.h.

◆ m_metsysConfigPrefix

std::string ST::SUSYObjDef_xAOD::m_metsysConfigPrefix
protected

Definition at line 586 of file SUSYObjDef_xAOD.h.

◆ m_metSystTool

asg::AnaToolHandle<IMETSystematicsTool> ST::SUSYObjDef_xAOD::m_metSystTool
protected

Definition at line 934 of file SUSYObjDef_xAOD.h.

◆ m_metUseGhostMuons

bool ST::SUSYObjDef_xAOD::m_metUseGhostMuons
protected

Definition at line 582 of file SUSYObjDef_xAOD.h.

◆ m_metVeryGreedyPhotons

bool ST::SUSYObjDef_xAOD::m_metVeryGreedyPhotons
protected

Definition at line 585 of file SUSYObjDef_xAOD.h.

◆ m_mu_id_support

int ST::SUSYObjDef_xAOD::m_mu_id_support
protected

Definition at line 631 of file SUSYObjDef_xAOD.h.

◆ m_mu_iso_fallback

std::map<std::string, std::string> ST::SUSYObjDef_xAOD::m_mu_iso_fallback
protected

Definition at line 638 of file SUSYObjDef_xAOD.h.

◆ m_mu_iso_support

std::vector<std::string> ST::SUSYObjDef_xAOD::m_mu_iso_support
protected

Definition at line 634 of file SUSYObjDef_xAOD.h.

◆ m_mubaselined0sig

double ST::SUSYObjDef_xAOD::m_mubaselined0sig
protected

Definition at line 712 of file SUSYObjDef_xAOD.h.

◆ m_muBaselineEta

double ST::SUSYObjDef_xAOD::m_muBaselineEta
protected

Definition at line 707 of file SUSYObjDef_xAOD.h.

◆ m_muBaselineIso_WP

std::string ST::SUSYObjDef_xAOD::m_muBaselineIso_WP
protected

Definition at line 669 of file SUSYObjDef_xAOD.h.

◆ m_muBaselinePt

double ST::SUSYObjDef_xAOD::m_muBaselinePt
protected

Definition at line 706 of file SUSYObjDef_xAOD.h.

◆ m_mubaselinez0

double ST::SUSYObjDef_xAOD::m_mubaselinez0
protected

Definition at line 713 of file SUSYObjDef_xAOD.h.

◆ m_muCalibrationMode

int ST::SUSYObjDef_xAOD::m_muCalibrationMode
protected

Definition at line 718 of file SUSYObjDef_xAOD.h.

◆ m_muCosmicd0

double ST::SUSYObjDef_xAOD::m_muCosmicd0
protected

Definition at line 716 of file SUSYObjDef_xAOD.h.

◆ m_muCosmicz0

double ST::SUSYObjDef_xAOD::m_muCosmicz0
protected

Definition at line 715 of file SUSYObjDef_xAOD.h.

◆ m_mud0sig

double ST::SUSYObjDef_xAOD::m_mud0sig
protected

Definition at line 710 of file SUSYObjDef_xAOD.h.

◆ m_muEffCorrForce1D

bool ST::SUSYObjDef_xAOD::m_muEffCorrForce1D
protected

Definition at line 674 of file SUSYObjDef_xAOD.h.

◆ m_muEta

double ST::SUSYObjDef_xAOD::m_muEta
protected

Definition at line 709 of file SUSYObjDef_xAOD.h.

◆ m_muHighPtExtraSmear

bool ST::SUSYObjDef_xAOD::m_muHighPtExtraSmear
protected

Definition at line 673 of file SUSYObjDef_xAOD.h.

◆ m_muId

int ST::SUSYObjDef_xAOD::m_muId
protected

Definition at line 651 of file SUSYObjDef_xAOD.h.

◆ m_muIdBaseline

int ST::SUSYObjDef_xAOD::m_muIdBaseline
protected

Definition at line 652 of file SUSYObjDef_xAOD.h.

◆ m_muIso_WP

std::string ST::SUSYObjDef_xAOD::m_muIso_WP
protected

Definition at line 670 of file SUSYObjDef_xAOD.h.

◆ m_muIsoHighPt_WP

std::string ST::SUSYObjDef_xAOD::m_muIsoHighPt_WP
protected

Definition at line 671 of file SUSYObjDef_xAOD.h.

◆ m_muIsoHighPtThresh

double ST::SUSYObjDef_xAOD::m_muIsoHighPtThresh
protected

Definition at line 672 of file SUSYObjDef_xAOD.h.

◆ m_muLRT

bool ST::SUSYObjDef_xAOD::m_muLRT
protected

Definition at line 719 of file SUSYObjDef_xAOD.h.

◆ m_muonCalibTool

asg::AnaToolHandle<CP::IMuonCalibrationAndSmearingTool> ST::SUSYObjDef_xAOD::m_muonCalibTool
protected

Definition at line 874 of file SUSYObjDef_xAOD.h.

◆ m_muonEfficiencyBMHighPtSFTool

asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors> ST::SUSYObjDef_xAOD::m_muonEfficiencyBMHighPtSFTool
protected

Definition at line 876 of file SUSYObjDef_xAOD.h.

◆ m_muonEfficiencySFTool

asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors> ST::SUSYObjDef_xAOD::m_muonEfficiencySFTool
protected

Definition at line 875 of file SUSYObjDef_xAOD.h.

◆ m_muonHighPtIsolationSFTool

asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors> ST::SUSYObjDef_xAOD::m_muonHighPtIsolationSFTool
protected

Definition at line 879 of file SUSYObjDef_xAOD.h.

◆ m_muonIsolationSFTool

asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors> ST::SUSYObjDef_xAOD::m_muonIsolationSFTool
protected

Definition at line 878 of file SUSYObjDef_xAOD.h.

◆ m_muonLRTORTool

asg::AnaToolHandle<CP::IMuonLRTOverlapRemovalTool> ST::SUSYObjDef_xAOD::m_muonLRTORTool
protected

Definition at line 882 of file SUSYObjDef_xAOD.h.

◆ m_muonSelectionHighPtTool

asg::AnaToolHandle<CP::IMuonSelectionTool> ST::SUSYObjDef_xAOD::m_muonSelectionHighPtTool
protected

Definition at line 872 of file SUSYObjDef_xAOD.h.

◆ m_muonSelectionTool

asg::AnaToolHandle<CP::IMuonSelectionTool> ST::SUSYObjDef_xAOD::m_muonSelectionTool
protected

Definition at line 871 of file SUSYObjDef_xAOD.h.

◆ m_muonSelectionToolBaseline

asg::AnaToolHandle<CP::IMuonSelectionTool> ST::SUSYObjDef_xAOD::m_muonSelectionToolBaseline
protected

Definition at line 873 of file SUSYObjDef_xAOD.h.

◆ m_muonTerm

std::string ST::SUSYObjDef_xAOD::m_muonTerm
protected

Definition at line 573 of file SUSYObjDef_xAOD.h.

◆ m_muonTriggerSFTool

asg::AnaToolHandle<CP::IMuonTriggerScaleFactors> ST::SUSYObjDef_xAOD::m_muonTriggerSFTool
protected

Definition at line 880 of file SUSYObjDef_xAOD.h.

◆ m_muonTrigSFTools

ToolHandleArray<CP::IMuonTriggerScaleFactors> ST::SUSYObjDef_xAOD::m_muonTrigSFTools
protected

Definition at line 881 of file SUSYObjDef_xAOD.h.

◆ m_muonTTVAEfficiencySFTool

asg::AnaToolHandle<CP::IMuonEfficiencyScaleFactors> ST::SUSYObjDef_xAOD::m_muonTTVAEfficiencySFTool
protected

Definition at line 877 of file SUSYObjDef_xAOD.h.

◆ m_muPt

double ST::SUSYObjDef_xAOD::m_muPt
protected

Definition at line 708 of file SUSYObjDef_xAOD.h.

◆ m_murequirepassedHighPtCuts

bool ST::SUSYObjDef_xAOD::m_murequirepassedHighPtCuts
protected

Definition at line 714 of file SUSYObjDef_xAOD.h.

◆ m_muTriggerSFCalibFilename

std::string ST::SUSYObjDef_xAOD::m_muTriggerSFCalibFilename
protected

Definition at line 676 of file SUSYObjDef_xAOD.h.

◆ m_muTriggerSFCalibRelease

std::string ST::SUSYObjDef_xAOD::m_muTriggerSFCalibRelease
protected

Definition at line 675 of file SUSYObjDef_xAOD.h.

◆ m_muz0

double ST::SUSYObjDef_xAOD::m_muz0
protected

Definition at line 711 of file SUSYObjDef_xAOD.h.

◆ m_orApplyRelPt

bool ST::SUSYObjDef_xAOD::m_orApplyRelPt
protected

Definition at line 780 of file SUSYObjDef_xAOD.h.

◆ m_orBJetPtUpperThres

double ST::SUSYObjDef_xAOD::m_orBJetPtUpperThres
protected

Definition at line 789 of file SUSYObjDef_xAOD.h.

◆ m_orBoostedElectronC1

double ST::SUSYObjDef_xAOD::m_orBoostedElectronC1
protected

Definition at line 773 of file SUSYObjDef_xAOD.h.

◆ m_orBoostedElectronC2

double ST::SUSYObjDef_xAOD::m_orBoostedElectronC2
protected

Definition at line 774 of file SUSYObjDef_xAOD.h.

◆ m_orBoostedElectronMaxConeSize

double ST::SUSYObjDef_xAOD::m_orBoostedElectronMaxConeSize
protected

Definition at line 775 of file SUSYObjDef_xAOD.h.

◆ m_orBoostedMuonC1

double ST::SUSYObjDef_xAOD::m_orBoostedMuonC1
protected

Definition at line 777 of file SUSYObjDef_xAOD.h.

◆ m_orBoostedMuonC2

double ST::SUSYObjDef_xAOD::m_orBoostedMuonC2
protected

Definition at line 778 of file SUSYObjDef_xAOD.h.

◆ m_orBoostedMuonMaxConeSize

double ST::SUSYObjDef_xAOD::m_orBoostedMuonMaxConeSize
protected

Definition at line 779 of file SUSYObjDef_xAOD.h.

◆ m_orBtagWP

std::string ST::SUSYObjDef_xAOD::m_orBtagWP
protected

Definition at line 786 of file SUSYObjDef_xAOD.h.

◆ m_orDoBjet

bool ST::SUSYObjDef_xAOD::m_orDoBjet
protected

Definition at line 768 of file SUSYObjDef_xAOD.h.

◆ m_orDoBoostedElectron

bool ST::SUSYObjDef_xAOD::m_orDoBoostedElectron
protected

Definition at line 772 of file SUSYObjDef_xAOD.h.

◆ m_orDoBoostedMuon

bool ST::SUSYObjDef_xAOD::m_orDoBoostedMuon
protected

Definition at line 776 of file SUSYObjDef_xAOD.h.

◆ m_orDoElBjet

bool ST::SUSYObjDef_xAOD::m_orDoElBjet
protected

Definition at line 769 of file SUSYObjDef_xAOD.h.

◆ m_orDoEleJet

bool ST::SUSYObjDef_xAOD::m_orDoEleJet
protected

Definition at line 764 of file SUSYObjDef_xAOD.h.

◆ m_orDoElEl

bool ST::SUSYObjDef_xAOD::m_orDoElEl
protected

Definition at line 765 of file SUSYObjDef_xAOD.h.

◆ m_orDoElMu

bool ST::SUSYObjDef_xAOD::m_orDoElMu
protected

Definition at line 766 of file SUSYObjDef_xAOD.h.

◆ m_orDoFatjets

bool ST::SUSYObjDef_xAOD::m_orDoFatjets
protected

Definition at line 792 of file SUSYObjDef_xAOD.h.

◆ m_orDoMuBjet

bool ST::SUSYObjDef_xAOD::m_orDoMuBjet
protected

Definition at line 770 of file SUSYObjDef_xAOD.h.

◆ m_orDoMuonJet

bool ST::SUSYObjDef_xAOD::m_orDoMuonJet
protected

Definition at line 767 of file SUSYObjDef_xAOD.h.

◆ m_orDoMuonJetGhostAssociation

bool ST::SUSYObjDef_xAOD::m_orDoMuonJetGhostAssociation
protected

Definition at line 784 of file SUSYObjDef_xAOD.h.

◆ m_orDoPhoton

bool ST::SUSYObjDef_xAOD::m_orDoPhoton
protected

Definition at line 763 of file SUSYObjDef_xAOD.h.

◆ m_orDoTau

bool ST::SUSYObjDef_xAOD::m_orDoTau
protected

Overlap removal options.

Definition at line 762 of file SUSYObjDef_xAOD.h.

◆ m_orDoTauBjet

bool ST::SUSYObjDef_xAOD::m_orDoTauBjet
protected

Definition at line 771 of file SUSYObjDef_xAOD.h.

◆ m_orInputLabel

std::string ST::SUSYObjDef_xAOD::m_orInputLabel
protected

Definition at line 787 of file SUSYObjDef_xAOD.h.

◆ m_orLinkOverlapObjects

bool ST::SUSYObjDef_xAOD::m_orLinkOverlapObjects
protected

Definition at line 790 of file SUSYObjDef_xAOD.h.

◆ m_orMuJetInnerDR

double ST::SUSYObjDef_xAOD::m_orMuJetInnerDR
protected

Definition at line 783 of file SUSYObjDef_xAOD.h.

◆ m_orMuJetPtRatio

double ST::SUSYObjDef_xAOD::m_orMuJetPtRatio
protected

Definition at line 781 of file SUSYObjDef_xAOD.h.

◆ m_orMuJetTrkPtRatio

double ST::SUSYObjDef_xAOD::m_orMuJetTrkPtRatio
protected

Definition at line 782 of file SUSYObjDef_xAOD.h.

◆ m_orPhotonFavoured

bool ST::SUSYObjDef_xAOD::m_orPhotonFavoured
protected

Definition at line 788 of file SUSYObjDef_xAOD.h.

◆ m_orRemoveCaloMuons

bool ST::SUSYObjDef_xAOD::m_orRemoveCaloMuons
protected

Definition at line 785 of file SUSYObjDef_xAOD.h.

◆ m_orToolbox

ORUtils::ToolBox ST::SUSYObjDef_xAOD::m_orToolbox
protected

Definition at line 987 of file SUSYObjDef_xAOD.h.

◆ m_outElectronLocation

SG::WriteHandleKey<xAOD::ElectronContainer> ST::SUSYObjDef_xAOD::m_outElectronLocation {this, "OutputElectronLocation", "StdWithLRTElectrons", "name of the muon container to write"}
protected

Definition at line 898 of file SUSYObjDef_xAOD.h.

898{this, "OutputElectronLocation", "StdWithLRTElectrons", "name of the muon container to write"};

◆ m_outMETTerm

std::string ST::SUSYObjDef_xAOD::m_outMETTerm
protected

Definition at line 578 of file SUSYObjDef_xAOD.h.

◆ m_outMuonLocation

SG::WriteHandleKey<xAOD::MuonContainer> ST::SUSYObjDef_xAOD::m_outMuonLocation {this, "OutputMuonLocation", "StdWithLRTMuons", "name of the muon container to write"}
protected

Definition at line 883 of file SUSYObjDef_xAOD.h.

883{this, "OutputMuonLocation", "StdWithLRTMuons", "name of the muon container to write"};

◆ m_outputMetaStore

MetaStore_t asg::AsgMetadataTool::m_outputMetaStore
privateinherited

Object accessing the output metadata store.

Definition at line 121 of file AsgMetadataTool.h.

◆ m_ph_id_support

std::vector<std::string> ST::SUSYObjDef_xAOD::m_ph_id_support
protected

Definition at line 630 of file SUSYObjDef_xAOD.h.

◆ m_photonAllowLate

bool ST::SUSYObjDef_xAOD::m_photonAllowLate
protected

Definition at line 727 of file SUSYObjDef_xAOD.h.

◆ m_photonBaselineCrackVeto

bool ST::SUSYObjDef_xAOD::m_photonBaselineCrackVeto
protected

Definition at line 725 of file SUSYObjDef_xAOD.h.

◆ m_photonBaselineEta

double ST::SUSYObjDef_xAOD::m_photonBaselineEta
protected

Definition at line 722 of file SUSYObjDef_xAOD.h.

◆ m_photonBaselineIso_WP

std::string ST::SUSYObjDef_xAOD::m_photonBaselineIso_WP
protected

Definition at line 666 of file SUSYObjDef_xAOD.h.

◆ m_photonBaselinePt

double ST::SUSYObjDef_xAOD::m_photonBaselinePt
protected

Definition at line 721 of file SUSYObjDef_xAOD.h.

◆ m_photonCrackVeto

bool ST::SUSYObjDef_xAOD::m_photonCrackVeto
protected

Definition at line 726 of file SUSYObjDef_xAOD.h.

◆ m_photonEfficiencySFTool

asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_photonEfficiencySFTool
protected

Definition at line 907 of file SUSYObjDef_xAOD.h.

◆ m_photonEfficiencySFTool_trigEff_AsymDiphoton

std::vector<asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool> > ST::SUSYObjDef_xAOD::m_photonEfficiencySFTool_trigEff_AsymDiphoton
protected

Definition at line 912 of file SUSYObjDef_xAOD.h.

◆ m_photonEfficiencySFTool_trigSF_AsymDiphoton

std::vector<asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool> > ST::SUSYObjDef_xAOD::m_photonEfficiencySFTool_trigSF_AsymDiphoton
protected

Definition at line 911 of file SUSYObjDef_xAOD.h.

◆ m_photonEta

double ST::SUSYObjDef_xAOD::m_photonEta
protected

Definition at line 723 of file SUSYObjDef_xAOD.h.

◆ m_photonId

std::string ST::SUSYObjDef_xAOD::m_photonId
protected

Definition at line 653 of file SUSYObjDef_xAOD.h.

◆ m_photonIdBaseline

std::string ST::SUSYObjDef_xAOD::m_photonIdBaseline
protected

Definition at line 654 of file SUSYObjDef_xAOD.h.

◆ m_photonIdBaselineDFName

std::string ST::SUSYObjDef_xAOD::m_photonIdBaselineDFName
protected

Definition at line 994 of file SUSYObjDef_xAOD.h.

◆ m_photonIdDFName

std::string ST::SUSYObjDef_xAOD::m_photonIdDFName
protected

Definition at line 995 of file SUSYObjDef_xAOD.h.

◆ m_photonIso_WP

std::string ST::SUSYObjDef_xAOD::m_photonIso_WP
protected

Definition at line 667 of file SUSYObjDef_xAOD.h.

◆ m_photonIsolationSFTool

asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_photonIsolationSFTool
protected

Definition at line 908 of file SUSYObjDef_xAOD.h.

◆ m_photonPt

double ST::SUSYObjDef_xAOD::m_photonPt
protected

Definition at line 724 of file SUSYObjDef_xAOD.h.

◆ m_photonSelIsEM

asg::AnaToolHandle<IAsgPhotonIsEMSelector> ST::SUSYObjDef_xAOD::m_photonSelIsEM
protected

Definition at line 904 of file SUSYObjDef_xAOD.h.

◆ m_photonSelIsEMBaseline

asg::AnaToolHandle<IAsgPhotonIsEMSelector> ST::SUSYObjDef_xAOD::m_photonSelIsEMBaseline
protected

Definition at line 905 of file SUSYObjDef_xAOD.h.

◆ m_photonTrigEffTools

ToolHandleArray<IAsgPhotonEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_photonTrigEffTools
protected

Definition at line 914 of file SUSYObjDef_xAOD.h.

◆ m_photonTriggerName

std::string ST::SUSYObjDef_xAOD::m_photonTriggerName
protected

Definition at line 668 of file SUSYObjDef_xAOD.h.

◆ m_photonTriggerSFTool

asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_photonTriggerSFTool
protected

Definition at line 909 of file SUSYObjDef_xAOD.h.

◆ m_photonTrigSFTools

ToolHandleArray<IAsgPhotonEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_photonTrigSFTools
protected

Definition at line 913 of file SUSYObjDef_xAOD.h.

◆ m_pmgSHnjetWeighter

asg::AnaToolHandle<IWeightTool> ST::SUSYObjDef_xAOD::m_pmgSHnjetWeighter
protected

Definition at line 989 of file SUSYObjDef_xAOD.h.

◆ m_pmgSHnjetWeighterWZ

asg::AnaToolHandle<IWeightTool> ST::SUSYObjDef_xAOD::m_pmgSHnjetWeighterWZ
protected

Definition at line 990 of file SUSYObjDef_xAOD.h.

◆ m_prwActualMu2017File

std::string ST::SUSYObjDef_xAOD::m_prwActualMu2017File
protected

Definition at line 617 of file SUSYObjDef_xAOD.h.

◆ m_prwActualMu2018File

std::string ST::SUSYObjDef_xAOD::m_prwActualMu2018File
protected

Definition at line 618 of file SUSYObjDef_xAOD.h.

◆ m_prwActualMu2022File

std::string ST::SUSYObjDef_xAOD::m_prwActualMu2022File
protected

Definition at line 619 of file SUSYObjDef_xAOD.h.

◆ m_prwActualMu2023File

std::string ST::SUSYObjDef_xAOD::m_prwActualMu2023File
protected

Definition at line 620 of file SUSYObjDef_xAOD.h.

◆ m_prwActualMu2024File

std::string ST::SUSYObjDef_xAOD::m_prwActualMu2024File
protected

Definition at line 621 of file SUSYObjDef_xAOD.h.

◆ m_prwConfFiles

std::vector<std::string> ST::SUSYObjDef_xAOD::m_prwConfFiles
protected

Definition at line 615 of file SUSYObjDef_xAOD.h.

◆ m_prwDataSF

double ST::SUSYObjDef_xAOD::m_prwDataSF
protected

Definition at line 623 of file SUSYObjDef_xAOD.h.

◆ m_prwDataSF_DW

double ST::SUSYObjDef_xAOD::m_prwDataSF_DW
protected

Definition at line 625 of file SUSYObjDef_xAOD.h.

◆ m_prwDataSF_UP

double ST::SUSYObjDef_xAOD::m_prwDataSF_UP
protected

Definition at line 624 of file SUSYObjDef_xAOD.h.

◆ m_prwLcalcFiles

std::vector<std::string> ST::SUSYObjDef_xAOD::m_prwLcalcFiles
protected

Definition at line 616 of file SUSYObjDef_xAOD.h.

◆ m_prwTool

asg::AnaToolHandle<CP::IPileupReweightingTool> ST::SUSYObjDef_xAOD::m_prwTool
protected

Definition at line 982 of file SUSYObjDef_xAOD.h.

◆ m_runDepPrescaleWeightPRW

bool ST::SUSYObjDef_xAOD::m_runDepPrescaleWeightPRW
protected

Definition at line 626 of file SUSYObjDef_xAOD.h.

◆ m_runECIS

bool ST::SUSYObjDef_xAOD::m_runECIS
protected

Definition at line 665 of file SUSYObjDef_xAOD.h.

◆ m_showerType

int ST::SUSYObjDef_xAOD::m_showerType
protected

Definition at line 812 of file SUSYObjDef_xAOD.h.

◆ m_slices

std::map<std::string,bool> ST::SUSYObjDef_xAOD::m_slices
protected

Definition at line 806 of file SUSYObjDef_xAOD.h.

◆ m_softTermParam

int ST::SUSYObjDef_xAOD::m_softTermParam
protected

Definition at line 592 of file SUSYObjDef_xAOD.h.

◆ m_strictConfigCheck

bool ST::SUSYObjDef_xAOD::m_strictConfigCheck
protected

Definition at line 542 of file SUSYObjDef_xAOD.h.

◆ m_subtool_init

bool ST::SUSYObjDef_xAOD::m_subtool_init
protected

Definition at line 567 of file SUSYObjDef_xAOD.h.

◆ m_tau_id_support

std::vector<std::string> ST::SUSYObjDef_xAOD::m_tau_id_support
protected

Definition at line 632 of file SUSYObjDef_xAOD.h.

◆ m_tau_trig_support

std::map<std::string, std::string> ST::SUSYObjDef_xAOD::m_tau_trig_support
protected

Definition at line 643 of file SUSYObjDef_xAOD.h.

◆ m_tauConfigPath

std::string ST::SUSYObjDef_xAOD::m_tauConfigPath
protected

Definition at line 732 of file SUSYObjDef_xAOD.h.

◆ m_tauConfigPathBaseline

std::string ST::SUSYObjDef_xAOD::m_tauConfigPathBaseline
protected

Definition at line 733 of file SUSYObjDef_xAOD.h.

◆ m_tauConfigReader

TEnv ST::SUSYObjDef_xAOD::m_tauConfigReader
protected

Definition at line 739 of file SUSYObjDef_xAOD.h.

◆ m_tauDoTTM

bool ST::SUSYObjDef_xAOD::m_tauDoTTM
protected

Definition at line 734 of file SUSYObjDef_xAOD.h.

◆ m_tauEffTool

asg::AnaToolHandle<TauAnalysisTools::ITauEfficiencyCorrectionsTool> ST::SUSYObjDef_xAOD::m_tauEffTool
protected

Definition at line 924 of file SUSYObjDef_xAOD.h.

◆ m_tauEffToolRecommendationTag

std::string ST::SUSYObjDef_xAOD::m_tauEffToolRecommendationTag
protected

Definition at line 736 of file SUSYObjDef_xAOD.h.

◆ m_tauEta

double ST::SUSYObjDef_xAOD::m_tauEta
protected

Definition at line 731 of file SUSYObjDef_xAOD.h.

◆ m_tauId

std::string ST::SUSYObjDef_xAOD::m_tauId
protected

Definition at line 655 of file SUSYObjDef_xAOD.h.

◆ m_tauIdBaseline

std::string ST::SUSYObjDef_xAOD::m_tauIdBaseline
protected

Definition at line 656 of file SUSYObjDef_xAOD.h.

◆ m_tauJetORtool

asg::AnaToolHandle<ORUtils::IOverlapTool> ST::SUSYObjDef_xAOD::m_tauJetORtool
protected

Definition at line 986 of file SUSYObjDef_xAOD.h.

◆ m_tauPrePtCut

double ST::SUSYObjDef_xAOD::m_tauPrePtCut
protected

Definition at line 729 of file SUSYObjDef_xAOD.h.

◆ m_tauPt

double ST::SUSYObjDef_xAOD::m_tauPt
protected

Definition at line 730 of file SUSYObjDef_xAOD.h.

◆ m_tauSelTool

asg::AnaToolHandle<TauAnalysisTools::ITauSelectionTool> ST::SUSYObjDef_xAOD::m_tauSelTool
protected

Definition at line 920 of file SUSYObjDef_xAOD.h.

◆ m_tauSelToolBaseline

asg::AnaToolHandle<TauAnalysisTools::ITauSelectionTool> ST::SUSYObjDef_xAOD::m_tauSelToolBaseline
protected

Definition at line 921 of file SUSYObjDef_xAOD.h.

◆ m_tauSmearingTool

asg::AnaToolHandle<TauAnalysisTools::ITauSmearingTool> ST::SUSYObjDef_xAOD::m_tauSmearingTool
protected

Definition at line 922 of file SUSYObjDef_xAOD.h.

◆ m_tauSmearingToolGenerator

std::string ST::SUSYObjDef_xAOD::m_tauSmearingToolGenerator
protected

Definition at line 737 of file SUSYObjDef_xAOD.h.

◆ m_tauSmearingToolRecommendationTag

std::string ST::SUSYObjDef_xAOD::m_tauSmearingToolRecommendationTag
protected

Definition at line 735 of file SUSYObjDef_xAOD.h.

◆ m_tauTerm

std::string ST::SUSYObjDef_xAOD::m_tauTerm
protected

Definition at line 571 of file SUSYObjDef_xAOD.h.

◆ m_tauTrigEffTool

std::vector<asg::AnaToolHandle<TauAnalysisTools::ITauEfficiencyCorrectionsTool> > ST::SUSYObjDef_xAOD::m_tauTrigEffTool
protected

Definition at line 925 of file SUSYObjDef_xAOD.h.

◆ m_tauTruthMatch

asg::AnaToolHandle<TauAnalysisTools::ITauTruthMatchingTool> ST::SUSYObjDef_xAOD::m_tauTruthMatch
protected

Definition at line 923 of file SUSYObjDef_xAOD.h.

◆ m_tool_init

bool ST::SUSYObjDef_xAOD::m_tool_init
protected

Definition at line 566 of file SUSYObjDef_xAOD.h.

◆ m_TopconfigReader

TEnv ST::SUSYObjDef_xAOD::m_TopconfigReader
protected

Definition at line 552 of file SUSYObjDef_xAOD.h.

◆ m_TopDecorName

std::string ST::SUSYObjDef_xAOD::m_TopDecorName
protected

Definition at line 555 of file SUSYObjDef_xAOD.h.

◆ m_ToptagConfig

std::string ST::SUSYObjDef_xAOD::m_ToptagConfig
protected

Definition at line 558 of file SUSYObjDef_xAOD.h.

◆ m_TopTaggerCalibArea

std::string ST::SUSYObjDef_xAOD::m_TopTaggerCalibArea
protected

Definition at line 560 of file SUSYObjDef_xAOD.h.

◆ m_TopTaggerTool

asg::AnaToolHandle<JSSWTopTaggerDNN> ST::SUSYObjDef_xAOD::m_TopTaggerTool
protected

Definition at line 851 of file SUSYObjDef_xAOD.h.

◆ m_TopTagjetUncertaintiesTool

asg::AnaToolHandle<ICPJetUncertaintiesTool> ST::SUSYObjDef_xAOD::m_TopTagjetUncertaintiesTool
protected

Definition at line 855 of file SUSYObjDef_xAOD.h.

◆ m_TopTagUncConfig

std::string ST::SUSYObjDef_xAOD::m_TopTagUncConfig
protected

Definition at line 563 of file SUSYObjDef_xAOD.h.

◆ m_treatPUJets

bool ST::SUSYObjDef_xAOD::m_treatPUJets
protected

Definition at line 593 of file SUSYObjDef_xAOD.h.

◆ m_trig2015combination_diLep

std::string ST::SUSYObjDef_xAOD::m_trig2015combination_diLep
protected

Definition at line 946 of file SUSYObjDef_xAOD.h.

◆ m_trig2015combination_diPhoton

std::string ST::SUSYObjDef_xAOD::m_trig2015combination_diPhoton
protected

Definition at line 962 of file SUSYObjDef_xAOD.h.

◆ m_trig2015combination_multiLep

std::string ST::SUSYObjDef_xAOD::m_trig2015combination_multiLep
protected

Definition at line 954 of file SUSYObjDef_xAOD.h.

◆ m_trig2015combination_singleLep

std::string ST::SUSYObjDef_xAOD::m_trig2015combination_singleLep
protected

Definition at line 937 of file SUSYObjDef_xAOD.h.

◆ m_trig2016combination_diLep

std::string ST::SUSYObjDef_xAOD::m_trig2016combination_diLep
protected

Definition at line 947 of file SUSYObjDef_xAOD.h.

◆ m_trig2016combination_diPhoton

std::string ST::SUSYObjDef_xAOD::m_trig2016combination_diPhoton
protected

Definition at line 963 of file SUSYObjDef_xAOD.h.

◆ m_trig2016combination_multiLep

std::string ST::SUSYObjDef_xAOD::m_trig2016combination_multiLep
protected

Definition at line 955 of file SUSYObjDef_xAOD.h.

◆ m_trig2016combination_singleLep

std::string ST::SUSYObjDef_xAOD::m_trig2016combination_singleLep
protected

Definition at line 938 of file SUSYObjDef_xAOD.h.

◆ m_trig2017combination_diLep

std::string ST::SUSYObjDef_xAOD::m_trig2017combination_diLep
protected

Definition at line 948 of file SUSYObjDef_xAOD.h.

◆ m_trig2017combination_diPhoton

std::string ST::SUSYObjDef_xAOD::m_trig2017combination_diPhoton
protected

Definition at line 964 of file SUSYObjDef_xAOD.h.

◆ m_trig2017combination_multiLep

std::string ST::SUSYObjDef_xAOD::m_trig2017combination_multiLep
protected

Definition at line 956 of file SUSYObjDef_xAOD.h.

◆ m_trig2017combination_singleLep

std::string ST::SUSYObjDef_xAOD::m_trig2017combination_singleLep
protected

Definition at line 939 of file SUSYObjDef_xAOD.h.

◆ m_trig2018combination_diLep

std::string ST::SUSYObjDef_xAOD::m_trig2018combination_diLep
protected

Definition at line 949 of file SUSYObjDef_xAOD.h.

◆ m_trig2018combination_diPhoton

std::string ST::SUSYObjDef_xAOD::m_trig2018combination_diPhoton
protected

Definition at line 965 of file SUSYObjDef_xAOD.h.

◆ m_trig2018combination_multiLep

std::string ST::SUSYObjDef_xAOD::m_trig2018combination_multiLep
protected

Definition at line 957 of file SUSYObjDef_xAOD.h.

◆ m_trig2018combination_singleLep

std::string ST::SUSYObjDef_xAOD::m_trig2018combination_singleLep
protected

Definition at line 940 of file SUSYObjDef_xAOD.h.

◆ m_trig2022combination_diLep

std::string ST::SUSYObjDef_xAOD::m_trig2022combination_diLep
protected

Definition at line 950 of file SUSYObjDef_xAOD.h.

◆ m_trig2022combination_diPhoton

std::string ST::SUSYObjDef_xAOD::m_trig2022combination_diPhoton
protected

Definition at line 966 of file SUSYObjDef_xAOD.h.

◆ m_trig2022combination_multiLep

std::string ST::SUSYObjDef_xAOD::m_trig2022combination_multiLep
protected

Definition at line 958 of file SUSYObjDef_xAOD.h.

◆ m_trig2022combination_singleLep

std::string ST::SUSYObjDef_xAOD::m_trig2022combination_singleLep
protected

Definition at line 941 of file SUSYObjDef_xAOD.h.

◆ m_trig2023combination_singleLep

std::string ST::SUSYObjDef_xAOD::m_trig2023combination_singleLep
protected

Definition at line 942 of file SUSYObjDef_xAOD.h.

◆ m_trig2024combination_singleLep

std::string ST::SUSYObjDef_xAOD::m_trig2024combination_singleLep
protected

Definition at line 943 of file SUSYObjDef_xAOD.h.

◆ m_trigConfTool

asg::AnaToolHandle<TrigConf::ITrigConfigTool> ST::SUSYObjDef_xAOD::m_trigConfTool
protected

Definition at line 969 of file SUSYObjDef_xAOD.h.

◆ m_trigDecTool

asg::AnaToolHandle<Trig::TrigDecisionTool> ST::SUSYObjDef_xAOD::m_trigDecTool
protected

Definition at line 970 of file SUSYObjDef_xAOD.h.

◆ m_trigDRScoringTool

asg::AnaToolHandle<Trig::IMatchScoringTool> ST::SUSYObjDef_xAOD::m_trigDRScoringTool
protected

Definition at line 973 of file SUSYObjDef_xAOD.h.

◆ m_triggerCacheMutex

std::mutex ST::SUSYObjDef_xAOD::m_triggerCacheMutex
mutableprivate

Definition at line 446 of file SUSYObjDef_xAOD.h.

◆ m_trigGlobalEffCorrTool_diLep

asg::AnaToolHandle<ITrigGlobalEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_trigGlobalEffCorrTool_diLep
protected

Definition at line 951 of file SUSYObjDef_xAOD.h.

◆ m_trigGlobalEffCorrTool_diPhoton

asg::AnaToolHandle<ITrigGlobalEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_trigGlobalEffCorrTool_diPhoton
protected

Definition at line 967 of file SUSYObjDef_xAOD.h.

◆ m_trigGlobalEffCorrTool_multiLep

asg::AnaToolHandle<ITrigGlobalEfficiencyCorrectionTool> ST::SUSYObjDef_xAOD::m_trigGlobalEffCorrTool_multiLep
protected

Definition at line 959 of file SUSYObjDef_xAOD.h.

◆ m_trigMatchingPrefix

std::string ST::SUSYObjDef_xAOD::m_trigMatchingPrefix
protected

Use composite trigger matching tool if matching was done upstream.

Definition at line 529 of file SUSYObjDef_xAOD.h.

◆ m_trigMatchingTool

asg::AnaToolHandle<Trig::IMatchingTool> ST::SUSYObjDef_xAOD::m_trigMatchingTool
protected

Definition at line 971 of file SUSYObjDef_xAOD.h.

◆ m_trigMatchScoringTool

asg::AnaToolHandle<Trig::IMatchScoringTool> ST::SUSYObjDef_xAOD::m_trigMatchScoringTool
protected

Definition at line 972 of file SUSYObjDef_xAOD.h.

◆ m_trigNToys_diLep

int ST::SUSYObjDef_xAOD::m_trigNToys_diLep
protected

Definition at line 945 of file SUSYObjDef_xAOD.h.

◆ m_trigNToys_diPhoton

int ST::SUSYObjDef_xAOD::m_trigNToys_diPhoton
protected

Definition at line 961 of file SUSYObjDef_xAOD.h.

◆ m_trigNToys_multiLep

int ST::SUSYObjDef_xAOD::m_trigNToys_multiLep
protected

Definition at line 953 of file SUSYObjDef_xAOD.h.

◆ m_trkJetEta

double ST::SUSYObjDef_xAOD::m_trkJetEta
protected

Definition at line 750 of file SUSYObjDef_xAOD.h.

◆ m_trkJetPt

double ST::SUSYObjDef_xAOD::m_trkJetPt
protected

Definition at line 749 of file SUSYObjDef_xAOD.h.

◆ m_trkJetsyst

bool ST::SUSYObjDef_xAOD::m_trkJetsyst
protected

Definition at line 590 of file SUSYObjDef_xAOD.h.

◆ m_trkMETsyst

bool ST::SUSYObjDef_xAOD::m_trkMETsyst
protected

Definition at line 588 of file SUSYObjDef_xAOD.h.

◆ m_upstreamTriggerMatching

bool ST::SUSYObjDef_xAOD::m_upstreamTriggerMatching
protected

Definition at line 528 of file SUSYObjDef_xAOD.h.

◆ m_useBtagging

bool ST::SUSYObjDef_xAOD::m_useBtagging
protected

Definition at line 538 of file SUSYObjDef_xAOD.h.

◆ m_useBtagging_trkJet

bool ST::SUSYObjDef_xAOD::m_useBtagging_trkJet
protected

Definition at line 539 of file SUSYObjDef_xAOD.h.

◆ m_useCommonPRWFiles

bool ST::SUSYObjDef_xAOD::m_useCommonPRWFiles
protected

Definition at line 605 of file SUSYObjDef_xAOD.h.

◆ m_useIncidents

bool asg::AsgMetadataTool::m_useIncidents
privateinherited

Definition at line 128 of file AsgMetadataTool.h.

◆ m_useSigLepForIsoCloseByOR

bool ST::SUSYObjDef_xAOD::m_useSigLepForIsoCloseByOR
protected

Definition at line 801 of file SUSYObjDef_xAOD.h.

◆ m_useTRUTH3

bool ST::SUSYObjDef_xAOD::m_useTRUTH3
protected

Definition at line 804 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs15_cache_diLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs15_cache_diLep
private

Definition at line 468 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs15_cache_multiLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs15_cache_multiLep
private

Definition at line 474 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs15_cache_singleEle

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs15_cache_singleEle
private

Definition at line 452 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs15_cache_singleLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs15_cache_singleLep
private

Definition at line 460 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs16_cache_diLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs16_cache_diLep
private

Definition at line 469 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs16_cache_multiLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs16_cache_multiLep
private

Definition at line 475 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs16_cache_singleEle

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs16_cache_singleEle
private

Definition at line 453 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs16_cache_singleLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs16_cache_singleLep
private

Definition at line 461 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs17_cache_diLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs17_cache_diLep
private

Definition at line 470 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs17_cache_multiLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs17_cache_multiLep
private

Definition at line 476 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs17_cache_singleEle

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs17_cache_singleEle
private

Definition at line 454 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs17_cache_singleLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs17_cache_singleLep
private

Definition at line 462 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs18_cache_diLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs18_cache_diLep
private

Definition at line 471 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs18_cache_multiLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs18_cache_multiLep
private

Definition at line 477 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs18_cache_singleEle

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs18_cache_singleEle
private

Definition at line 455 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs18_cache_singleLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs18_cache_singleLep
private

Definition at line 463 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs22_cache_diLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs22_cache_diLep
private

Definition at line 472 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs22_cache_multiLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs22_cache_multiLep
private

Definition at line 478 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs22_cache_singleEle

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs22_cache_singleEle
private

Definition at line 456 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs22_cache_singleLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs22_cache_singleLep
private

Definition at line 464 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs23_cache_singleEle

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs23_cache_singleEle
private

Definition at line 457 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs23_cache_singleLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs23_cache_singleLep
private

Definition at line 465 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs24_cache_singleEle

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs24_cache_singleEle
private

Definition at line 458 of file SUSYObjDef_xAOD.h.

◆ m_v_trigs24_cache_singleLep

std::vector<std::string> ST::SUSYObjDef_xAOD::m_v_trigs24_cache_singleLep
private

Definition at line 466 of file SUSYObjDef_xAOD.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.

◆ m_WconfigReader

TEnv ST::SUSYObjDef_xAOD::m_WconfigReader
protected

Definition at line 550 of file SUSYObjDef_xAOD.h.

◆ m_WDecorName

std::string ST::SUSYObjDef_xAOD::m_WDecorName
protected

Definition at line 553 of file SUSYObjDef_xAOD.h.

◆ m_WtagConfig

std::string ST::SUSYObjDef_xAOD::m_WtagConfig
protected

Definition at line 556 of file SUSYObjDef_xAOD.h.

◆ m_WTaggerTool

asg::AnaToolHandle<SmoothedWZTagger> ST::SUSYObjDef_xAOD::m_WTaggerTool
protected

Definition at line 849 of file SUSYObjDef_xAOD.h.

◆ m_WTagjetUncertaintiesTool

asg::AnaToolHandle<ICPJetUncertaintiesTool> ST::SUSYObjDef_xAOD::m_WTagjetUncertaintiesTool
protected

Definition at line 853 of file SUSYObjDef_xAOD.h.

◆ m_WTagUncConfig

std::string ST::SUSYObjDef_xAOD::m_WTagUncConfig
protected

Definition at line 561 of file SUSYObjDef_xAOD.h.

◆ m_WZTaggerCalibArea

std::string ST::SUSYObjDef_xAOD::m_WZTaggerCalibArea
protected

Definition at line 559 of file SUSYObjDef_xAOD.h.

◆ m_ZconfigReader

TEnv ST::SUSYObjDef_xAOD::m_ZconfigReader
protected

Definition at line 551 of file SUSYObjDef_xAOD.h.

◆ m_ZDecorName

std::string ST::SUSYObjDef_xAOD::m_ZDecorName
protected

Definition at line 554 of file SUSYObjDef_xAOD.h.

◆ m_ZtagConfig

std::string ST::SUSYObjDef_xAOD::m_ZtagConfig
protected

Definition at line 557 of file SUSYObjDef_xAOD.h.

◆ m_ZTaggerTool

asg::AnaToolHandle<SmoothedWZTagger> ST::SUSYObjDef_xAOD::m_ZTaggerTool
protected

Definition at line 850 of file SUSYObjDef_xAOD.h.

◆ m_ZTagjetUncertaintiesTool

asg::AnaToolHandle<ICPJetUncertaintiesTool> ST::SUSYObjDef_xAOD::m_ZTagjetUncertaintiesTool
protected

Definition at line 854 of file SUSYObjDef_xAOD.h.

◆ m_ZTagUncConfig

std::string ST::SUSYObjDef_xAOD::m_ZTagUncConfig
protected

Definition at line 562 of file SUSYObjDef_xAOD.h.

◆ prompt_electrons

const xAOD::ElectronContainer* ST::SUSYObjDef_xAOD::prompt_electrons = nullptr

Definition at line 211 of file SUSYObjDef_xAOD.h.

◆ prompt_muons

const xAOD::MuonContainer* ST::SUSYObjDef_xAOD::prompt_muons = nullptr

Definition at line 205 of file SUSYObjDef_xAOD.h.


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