ATLAS Offline Software
Loading...
Searching...
No Matches
CP::IsolationSelectionTool Class Reference

#include <IsolationSelectionTool.h>

Inheritance diagram for CP::IsolationSelectionTool:
Collaboration diagram for CP::IsolationSelectionTool:

Public Types

enum  IsoWPType { Efficiency , Cut }
 Function finalizing the tool. More...

Public Member Functions

 IsolationSelectionTool (const std::string &name)
 Create a proper constructor for Athena.
virtual ~IsolationSelectionTool ()
 Destructor.
virtual StatusCode initialize () override
 Function initialising the tool.
virtual asg::AcceptData accept (const xAOD::Photon &x) const override
 Declare the interface that the class provides.
virtual asg::AcceptData accept (const xAOD::Electron &x) const override
virtual asg::AcceptData accept (const xAOD::Muon &x) const override
virtual asg::AcceptData accept (const strObj &x) const override
virtual asg::AcceptData accept (const xAOD::IParticle &x) const override
virtual const asg::AcceptInfo & getPhotonAcceptInfo () const override
virtual const asg::AcceptInfo & getElectronAcceptInfo () const override
virtual const asg::AcceptInfo & getMuonAcceptInfo () const override
virtual const asg::AcceptInfo & getObjAcceptInfo () const override
virtual const std::vector< std::unique_ptr< IsolationWP > > & getMuonWPs () const override
virtual const std::vector< std::unique_ptr< IsolationWP > > & getElectronWPs () const override
virtual const std::vector< std::unique_ptr< IsolationWP > > & getPhotonWPs () const override
virtual const std::vector< std::unique_ptr< IsolationWP > > & getObjWPs () const override
virtual StatusCode setIParticleCutsFrom (xAOD::Type::ObjectType ObjType) override
StatusCode addWP (const std::string &WP, xAOD::Type::ObjectType type)
StatusCode addWP (std::unique_ptr< IsolationWP > wp, xAOD::Type::ObjectType type)
StatusCode addMuonWP (const std::string &wpname)
StatusCode addPhotonWP (const std::string &wpname)
StatusCode addElectronWP (const std::string &wpname)
StatusCode addUserDefinedWP (const std::string &WPname, xAOD::Type::ObjectType ObjType, std::vector< std::pair< xAOD::Iso::IsolationType, std::string > > &cuts, std::string key="", IsoWPType type=Efficiency)
StatusCode addCutToWP (IsolationWP *wp, const std::string &key_in, const xAOD::Iso::IsolationType t, const std::string &expression, const xAOD::Iso::IsolationType isoCutRemap)
StatusCode addCutToWP (IsolationWP *wp, const std::string &key, const xAOD::Iso::IsolationType t, const std::string &expression)
virtual void print () const
 Print the state of the tool.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
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.

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvc > StoreGateSvc_t

Private Member Functions

template<typename T>
void evaluateWP (const T &x, const std::vector< std::unique_ptr< IsolationWP > > &WP, asg::AcceptData &accept) const
void addDependencies (const std::string &container, const IsolationWP &wp)
std::string createPieceWisePolinomialFunction (const std::vector< double > &boundaries, const std::vector< std::vector< double > > &parameters, bool isOpen=false) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

Gaudi::Property< std::string > m_muWPname {this, "MuonWP", "Undefined", "Working point for muon"}
Gaudi::Property< std::string > m_elWPname {this, "ElectronWP", "Undefined", "Working point for electron"}
Gaudi::Property< std::string > m_phWPname {this, "PhotonWP", "Undefined", "Working point for photon"}
Gaudi::Property< std::vector< std::string > > m_muWPvec {this, "MuonWPVec", {}, "Vector of working points for muon"}
Gaudi::Property< std::vector< std::string > > m_elWPvec {this, "ElectronWPVec", {}, "Vector of working points for electron"}
Gaudi::Property< std::vector< std::string > > m_phWPvec {this, "PhotonWPVec", {}, "Vector of working points for photon"}
Gaudi::Property< std::string > m_muWPKey {this, "MuonKey", "/Muons/DFCommonGoodMuon/mu_cutValues_", "path of the cut map for muon"}
Gaudi::Property< std::string > m_elWPKey
Gaudi::Property< std::string > m_phWPKey
Gaudi::Property< std::string > m_isoDecSuffix
Gaudi::Property< std::string > m_calibFileName {this, "CalibFileName", "", " The config to use"}
 input file
std::unique_ptr< TFile > m_calibFile {nullptr}
Gaudi::Property< std::string > m_filePathName {this, "filePathName", "ElectronIsolationSelection/2022_2025/v3/", " The nominal file path to use"}
 cvfms path for files containing WP definitions (e.g. for TGraphs)
std::unique_ptr< TFile > m_WPdefinitionFile {nullptr}
std::vector< std::unique_ptr< IsolationWP > > m_muWPs {}
 internal use
std::vector< std::unique_ptr< IsolationWP > > m_elWPs {}
std::vector< std::unique_ptr< IsolationWP > > m_phWPs {}
std::vector< std::unique_ptr< IsolationWP > > m_objWPs {}
asg::AcceptInfo m_photonAccept {"IsolationSelectionToolPhotonAcceptInfo"}
 AcceptInfo's.
asg::AcceptInfo m_electronAccept {"IsolationSelectionToolElectronAcceptInfo"}
asg::AcceptInfo m_muonAccept {"IsolationSelectionToolMuonAcceptInfo"}
asg::AcceptInfo m_objAccept {"IsolationSelectionToolObjAcceptInfo"}
std::vector< std::unique_ptr< IsolationWP > > * m_iparWPs {nullptr}
 Iparticle interface.
asg::AcceptInfo * m_iparAcceptInfo {nullptr}
Gaudi::Property< bool > m_doInterpM {this, "doCutInterpolationMuon", false, "flag to perform cut interpolation, muon"}
Gaudi::Property< bool > m_doInterpE {this, "doCutInterpolationElec", true, "flag to perform cut interpolation, electron"}
std::shared_ptr< Interp3D > m_Interp {nullptr}
SG::ReadDecorHandleKeyArray< xAOD::IParticleContainer > m_isoDecors {this, "IsolationDecors", {}, "List of decorations needed by the tool"}
Gaudi::Property< std::string > m_inMuonContainer {this, "InMuonContainer", "" , "Name of the muon container parsed to the tool."}
 Properties to declare the data dependencies to the avalanche scheduler.
Gaudi::Property< std::string > m_inElecContainer {this, "InElectronContainer", "" , "Name of the electron container parsed to the tool."}
Gaudi::Property< std::string > m_inPhotContainer {this, "InPhotonContainer", "", "Name of the photon container parsed to the tool."}
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 26 of file IsolationSelectionTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

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

Definition at line 376 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ IsoWPType

Function finalizing the tool.

Enumerator
Efficiency 
Cut 

Definition at line 40 of file IsolationSelectionTool.h.

Constructor & Destructor Documentation

◆ IsolationSelectionTool()

CP::IsolationSelectionTool::IsolationSelectionTool ( const std::string & name)

Create a proper constructor for Athena.

Constructor for standalone usage, but please do use the interface and ToolHandle

Definition at line 24 of file IsolationSelectionTool.cxx.

25 : asg::AsgTool(name) {}

◆ ~IsolationSelectionTool()

CP::IsolationSelectionTool::~IsolationSelectionTool ( )
virtualdefault

Destructor.

Member Function Documentation

◆ accept() [1/5]

asg::AcceptData CP::IsolationSelectionTool::accept ( const strObj & x) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 891 of file IsolationSelectionTool.cxx.

891 {
892 if (x.type == xAOD::Type::Electron) {
893 asg::AcceptData accept(&m_electronAccept);
895 return accept;
896 } else if (x.type == xAOD::Type::Muon) {
897 asg::AcceptData accept(&m_muonAccept);
899 return accept;
900 } else if (x.type == xAOD::Type::Photon) {
901 asg::AcceptData accept(&m_photonAccept);
903 return accept;
904 }
905 asg::AcceptData accept(&m_objAccept);
907 return accept;
908}
#define x
void evaluateWP(const T &x, const std::vector< std::unique_ptr< IsolationWP > > &WP, asg::AcceptData &accept) const
asg::AcceptInfo m_photonAccept
AcceptInfo's.
std::vector< std::unique_ptr< IsolationWP > > m_muWPs
internal use
std::vector< std::unique_ptr< IsolationWP > > m_objWPs
virtual asg::AcceptData accept(const xAOD::Photon &x) const override
Declare the interface that the class provides.
std::vector< std::unique_ptr< IsolationWP > > m_phWPs
std::vector< std::unique_ptr< IsolationWP > > m_elWPs
@ 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

◆ accept() [2/5]

asg::AcceptData CP::IsolationSelectionTool::accept ( const xAOD::Electron & x) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 855 of file IsolationSelectionTool.cxx.

855 {
856 asg::AcceptData accept(&m_electronAccept);
858 return accept;
859}

◆ accept() [3/5]

asg::AcceptData CP::IsolationSelectionTool::accept ( const xAOD::IParticle & x) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 867 of file IsolationSelectionTool.cxx.

867 {
868 if (x.type() == xAOD::Type::Electron) {
869 asg::AcceptData accept(&m_electronAccept);
871 return accept;
872 } else if (x.type() == xAOD::Type::Muon) {
873 asg::AcceptData accept(&m_muonAccept);
875 return accept;
876 } else if (x.type() == xAOD::Type::Photon) {
877 asg::AcceptData accept(&m_photonAccept);
879 return accept;
880 }
881
882 else if (m_iparAcceptInfo && m_iparWPs) {
883 asg::AcceptData accept(m_iparAcceptInfo);
885 return accept;
886 }
887 ATH_MSG_ERROR("Someting here makes really no sense");
888 return asg::AcceptData(&m_objAccept);
889}
#define ATH_MSG_ERROR(x,...)
std::vector< std::unique_ptr< IsolationWP > > * m_iparWPs
Iparticle interface.

◆ accept() [4/5]

asg::AcceptData CP::IsolationSelectionTool::accept ( const xAOD::Muon & x) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 861 of file IsolationSelectionTool.cxx.

861 {
862 asg::AcceptData accept(&m_muonAccept);
864 return accept;
865}

◆ accept() [5/5]

asg::AcceptData CP::IsolationSelectionTool::accept ( const xAOD::Photon & x) const
overridevirtual

Declare the interface that the class provides.

Implements CP::IIsolationSelectionTool.

Definition at line 849 of file IsolationSelectionTool.cxx.

849 {
850 asg::AcceptData accept(&m_photonAccept);
852 return accept;
853}

◆ addCutToWP() [1/2]

StatusCode CP::IsolationSelectionTool::addCutToWP ( IsolationWP * wp,
const std::string & key,
const xAOD::Iso::IsolationType t,
const std::string & expression )

Definition at line 174 of file IsolationSelectionTool.cxx.

177 {
178 return addCutToWP(wp, key, t, expression, t);
179}
StatusCode addCutToWP(IsolationWP *wp, const std::string &key_in, const xAOD::Iso::IsolationType t, const std::string &expression, const xAOD::Iso::IsolationType isoCutRemap)

◆ addCutToWP() [2/2]

StatusCode CP::IsolationSelectionTool::addCutToWP ( IsolationWP * wp,
const std::string & key_in,
const xAOD::Iso::IsolationType t,
const std::string & expression,
const xAOD::Iso::IsolationType isoCutRemap )

Definition at line 142 of file IsolationSelectionTool.cxx.

145 {
146 if (!m_calibFile) {
147 ATH_MSG_ERROR("Calibration File (" << m_calibFileName << ") is missing.");
148 return StatusCode::FAILURE;
149 }
150
151 std::string varname(xAOD::Iso::toCString(isoCutRemap));
152 std::string key = key_in + varname;
153
154 TH3F* calibHisto{nullptr};
155 m_calibFile->GetObject(key.c_str(), calibHisto);
156 if (!calibHisto) {
157 ATH_MSG_FATAL(" Failed to load " << key << " from "
158 << m_calibFile->GetName());
159 return StatusCode::FAILURE;
160 }
161 calibHisto->SetDirectory(nullptr);
162 std::unique_ptr<TH3F> histogram(calibHisto);
163 std::unique_ptr<IsolationConditionHist> ich =
164 std::make_unique<IsolationConditionHist>(varname, t, expression,
165 std::move(histogram));
166 if ((m_doInterpM && key.find("Muon") != std::string::npos) ||
167 (m_doInterpE && key.find("Electron") != std::string::npos))
168 ich->setInterp(m_Interp);
169 wp->addCut(std::move(ich));
170
171 return StatusCode::SUCCESS;
172}
#define ATH_MSG_FATAL(x,...)
std::string histogram
Definition chains.cxx:52
Gaudi::Property< bool > m_doInterpM
Gaudi::Property< bool > m_doInterpE
std::unique_ptr< TFile > m_calibFile
std::shared_ptr< Interp3D > m_Interp
Gaudi::Property< std::string > m_calibFileName
input file
static const char * toCString(IsolationConeSize conesize)

◆ addDependencies()

void CP::IsolationSelectionTool::addDependencies ( const std::string & container,
const IsolationWP & wp )
private

Definition at line 111 of file IsolationSelectionTool.cxx.

112 {
113 if (container.empty())
114 return;
115 for (const std::unique_ptr<IsolationCondition>& cond : wp.conditions()) {
116 for (unsigned int acc = 0; acc < cond->num_types(); ++acc) {
117 m_isoDecors.emplace_back(
118 container + "." +
119 SG::AuxTypeRegistry::instance().getName(cond->accessor(acc).auxid()));
120 }
121 }
122}
SG::ReadDecorHandleKeyArray< xAOD::IParticleContainer > m_isoDecors
static AuxTypeRegistry & instance()
Return the singleton registry instance.
const std::string & getName(const void *ptr) const
Get the name of an object that is / should be in the event store.
Definition AsgTool.cxx:106
const SG::AuxVectorData * container() const
Return the container holding this element.
static const SG::Accessor< ElementLink< IParticleContainer > > acc("originalObjectLink")
Object used for setting/getting the dynamic decoration in question.

◆ addElectronWP()

StatusCode CP::IsolationSelectionTool::addElectronWP ( const std::string & wpname)

Definition at line 584 of file IsolationSelectionTool.cxx.

584 {
585 std::unique_ptr<IsolationWP> wp = std::make_unique<IsolationWP>(elWPname);
586
587 if (elWPname == "HighPtCaloOnly") {
588 wp->addCut(std::make_unique<IsolationConditionFormula>(
589 "FCHighPtCaloOnly_calo", xAOD::Iso::topoetcone20,
590 "std::max(0.015*x,3.5E3)", false, m_isoDecSuffix)); // units are MeV!
591 } else if (elWPname == "Tight_VarRad") {
592 wp->addCut(std::make_unique<IsolationConditionFormula>(
593 "ElecTight_track",
595 "0.06*x", false, m_isoDecSuffix));
596 wp->addCut(std::make_unique<IsolationConditionFormula>(
597 "ElecTight_calo", xAOD::Iso::topoetcone20, "0.06*x", false,
599 } else if (elWPname == "Loose_VarRad") {
600 wp->addCut(std::make_unique<IsolationConditionFormula>(
601 "ElecLoose_track",
603 "0.15*x", false, m_isoDecSuffix));
604 wp->addCut(std::make_unique<IsolationConditionFormula>(
605 "ElecLoose_calo", xAOD::Iso::topoetcone20, "0.20*x", false,
607 } else if (elWPname == "TightTrackOnly_VarRad") {
608 wp->addCut(std::make_unique<IsolationConditionFormula>(
609 "ElecTightTrackOnly",
611 "0.06*x", false, m_isoDecSuffix));
612 } else if (elWPname == "TightTrackOnly_FixedRad") {
613 wp->addCut(std::make_unique<IsolationConditionFormula>(
614 "ElecTightTrackOnly_lowPt",
616 "0.06*(x>50e3?1e9:x)", false, m_isoDecSuffix));
617 wp->addCut(std::make_unique<IsolationConditionFormula>(
618 "ElecTightTrackOnly_highPt",
620 "0.06*(x>50e3?x:1e9)", false, m_isoDecSuffix));
621 } else if (elWPname == "PflowTight_FixedRad") {
622 std::vector<xAOD::Iso::IsolationType> isoTypesHighPt{
625 std::vector<xAOD::Iso::IsolationType> isoTypesLowPt{
628 wp->addCut(std::make_unique<IsolationConditionCombined>(
629 "ElecPFlowTightLowPt", isoTypesLowPt,
630 std::make_unique<TF2>("pflowTFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
631 "0.045*(x>50e3?1e9:x)", m_isoDecSuffix));
632 wp->addCut(std::make_unique<IsolationConditionCombined>(
633 "ElecPFlowTightHighPt", isoTypesHighPt,
634 std::make_unique<TF2>("pflowTFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
635 "0.045*(x>50e3?x:1e9)", m_isoDecSuffix));
636 } else if (elWPname == "PflowTight") {
637 std::vector<xAOD::Iso::IsolationType> isoTypes{
640 wp->addCut(std::make_unique<IsolationConditionCombined>(
641 "ElecPFlowTight", isoTypes,
642 std::make_unique<TF2>("pflowLFunction", "fabs(x)+0.4*(y>0?y:0)"),
643 "0.045*x", m_isoDecSuffix));
644 } else if (elWPname == "PflowLoose_FixedRad") {
645 std::vector<xAOD::Iso::IsolationType> isoTypesHighPt{
648 std::vector<xAOD::Iso::IsolationType> isoTypesLowPt{
651 wp->addCut(std::make_unique<IsolationConditionCombined>(
652 "ElecPFlowLooseLowPt", isoTypesLowPt,
653 std::make_unique<TF2>("pflowLFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
654 "0.16*(x>50e3?1e9:x)", m_isoDecSuffix));
655 wp->addCut(std::make_unique<IsolationConditionCombined>(
656 "ElecPFlowLooseHighPt", isoTypesHighPt,
657 std::make_unique<TF2>("pflowLFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
658 "0.16*(x>50e3?x:1e9)", m_isoDecSuffix));
659 } else if (elWPname == "PflowLoose") {
660 std::vector<xAOD::Iso::IsolationType> isoTypes{
663 wp->addCut(std::make_unique<IsolationConditionCombined>(
664 "ElecPFlowLoose", isoTypes,
665 std::make_unique<TF2>("pflowLFunction", "fabs(x)+0.4*(y>0?y:0)"),
666 "0.16*x", m_isoDecSuffix));
667 } else if (elWPname == "isolPLITVeryTightRun3" ||
668 elWPname == "isolPLITTightRun3" ||
669 elWPname == "isolPLITVeryLooseRun3" ||
670 elWPname == "isolPLITVeryTightRun2" ||
671 elWPname == "isolPLITTightRun2" ||
672 elWPname == "isolPLITVeryLooseRun2" ||
673 elWPname == "isolPLITVeryTightRejRun3" ||
674 elWPname == "isolPLITTightRejRun3" ||
675 elWPname == "isolPLITVeryTightRejRun2" ||
676 elWPname == "isolPLITTightRejRun2"
677 ) {
678 // open the file path to read out WP definition file
679 // if (!m_filePathName.empty()) { should never be empty --> default value
680 std::string filename =
681 PathResolverFindCalibFile(m_filePathName + "/" + elWPname + ".root");
682
683 ATH_MSG_INFO("Reading input file " << elWPname << " from " << m_filePathName
684 << " " << filename << ": " << (m_filePathName + "/" + elWPname + ".root"));
685 m_WPdefinitionFile = std::make_unique<TFile>(filename.c_str(), "READ");
686
687 if (!m_WPdefinitionFile || m_WPdefinitionFile->IsZombie()) {
688 ATH_MSG_ERROR("Error opening file " << filename);
689 return StatusCode::FAILURE;
690 }
691
692 // read out histograms/graphs
693 TH1F* binning = dynamic_cast<TH1F*>(m_WPdefinitionFile->Get("binning"));
694 if (!binning) {
696 "Could not retrieve binning histogram in filename=" << filename);
697 return StatusCode::FAILURE;
698 }
699
700 std::vector<std::unique_ptr<TGraph>> cutGraphUPtr;
701
702 TIter nextkey(m_WPdefinitionFile->GetListOfKeys());
703 TKey* key;
704
705 while ((key = (TKey*)nextkey())) {
706 TObject* obj = key->ReadObj();
707 if (obj->InheritsFrom(TGraph::Class())) {
708 std::unique_ptr<TGraph> graph(static_cast<TGraph*>(obj));
709 cutGraphUPtr.push_back(std::move(graph));
710
711 // keep this as hint on how to read out RunNumber validity
712 // TObjArray* tokens = Obj_name.Tokenize("_");
713 // int n = tokens->GetEntries();
714 // double min_runnumber = ((TObjString*)tokens->At(n -
715 // 4))->GetString().Atof(); double max_runnumber =
716 // ((TObjString*)tokens->At(n - 3))->GetString().Atof();
717 }
718 }
719
720 static const std::vector<std::string> isoTypes = {"PLIT_PLITel_pelxpromp",
721 "PLIT_PLITel_pnpxall"};
722
723 if (elWPname == "isolPLITVeryTightRun3" ||
724 elWPname == "isolPLITTightRun3" ||
725 elWPname == "isolPLITVeryLooseRun3" ||
726 elWPname == "isolPLITVeryTightRun2" ||
727 elWPname == "isolPLITTightRun2" ||
728 elWPname == "isolPLITVeryLooseRun2" ||
729 elWPname == "isolPLITVeryTightRejRun3" ||
730 elWPname == "isolPLITTightRejRun3" ||
731 elWPname == "isolPLITVeryTightRejRun2" ||
732 elWPname == "isolPLITTightRejRun2") {
733 wp->addCut(std::make_unique<IsolationConditionGraph>(
734 elWPname, isoTypes,
735 std::make_unique<TF2>("elePLIT", "TMath::Log(x / y)"), std::move(cutGraphUPtr),
736 std::make_unique<TH1F>(*binning), m_isoDecSuffix.value(), true));
737 }
738 else {
739 ATH_MSG_ERROR("Unknown electron isolation WP: " << elWPname);
740 return StatusCode::FAILURE;
741 }
742 } else {
743 ATH_MSG_ERROR("Unknown electron isolation WP: " << elWPname);
744 return StatusCode::FAILURE;
745 }
746
747 m_electronAccept.addCut(wp->name(), wp->name());
748#ifndef XAOD_STANDALONE
750#endif
751 m_elWPs.push_back(std::move(wp));
752
753 // Return gracefully:
754 return StatusCode::SUCCESS;
755}
#define ATH_MSG_INFO(x,...)
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Gaudi::Property< std::string > m_inElecContainer
Gaudi::Property< std::string > m_isoDecSuffix
void addDependencies(const std::string &container, const IsolationWP &wp)
std::unique_ptr< TFile > m_WPdefinitionFile
Gaudi::Property< std::string > m_filePathName
cvfms path for files containing WP definitions (e.g. for TGraphs)
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
@ neflowisol20
Neutral eflow isolation.
@ ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt500
Ptcone http://arxiv.org/abs/1007.2221 for high mu.
@ topoetcone20
Topo-cluster ET-sum.
@ ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000
@ ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000
@ ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500

◆ addMuonWP()

StatusCode CP::IsolationSelectionTool::addMuonWP ( const std::string & wpname)

Definition at line 181 of file IsolationSelectionTool.cxx.

181 {
182 std::unique_ptr<IsolationWP> wp = std::make_unique<IsolationWP>(muWPname);
183 if (muWPname == "HighPtTrackOnly") {
184 wp->addCut(std::make_unique<IsolationConditionFormula>(
185 "ptcone20_Tight_1p25",
187 false, m_isoDecSuffix)); // units are MeV!
188 } else if (muWPname == "TightTrackOnly_FixedRad") {
189 wp->addCut(std::make_unique<IsolationConditionFormula>(
190 "MuonFixedCutHighMuTrackOnly_lowPt",
192 "0.06*(x>50e3?1e9:x)", false, m_isoDecSuffix));
193 wp->addCut(std::make_unique<IsolationConditionFormula>(
194 "MuonFixedCutHighMuTrackOnly_highPt",
196 "0.06*(x>50e3?x:1e9)", false, m_isoDecSuffix));
197 } else if (muWPname == "Tight_FixedRad") {
198 wp->addCut(std::make_unique<IsolationConditionFormula>(
199 "MuonFixedCutHighMuTight_track_lowPt",
201 "0.04*(x>50e3?1e9:x)", false, m_isoDecSuffix));
202 wp->addCut(std::make_unique<IsolationConditionFormula>(
203 "MuonFixedCutHighMuTight_track_highPt",
205 "0.04*(x>50e3?x:1e9)", false, m_isoDecSuffix));
206 wp->addCut(std::make_unique<IsolationConditionFormula>(
207 "MuonFixedCutHighMuTight_calo", xAOD::Iso::topoetcone20, "0.15*x",
208 false, m_isoDecSuffix));
209 } else if (muWPname == "Loose_FixedRad") {
210 wp->addCut(std::make_unique<IsolationConditionFormula>(
211 "MuonFixedCutHighMuLoose_track_lowPt",
213 "0.15*(x>50e3?1e9:x)", false, m_isoDecSuffix));
214 wp->addCut(std::make_unique<IsolationConditionFormula>(
215 "MuonFixedCutHighMuLoose_track_highPt",
217 "0.15*(x>50e3?x:1e9)", false, m_isoDecSuffix));
218 wp->addCut(std::make_unique<IsolationConditionFormula>(
219 "MuonFixedCutHighMuLoose_calo", xAOD::Iso::topoetcone20, "0.30*x",
220 false, m_isoDecSuffix));
221 } else if (muWPname == "TightTrackOnly_VarRad") {
222 wp->addCut(std::make_unique<IsolationConditionFormula>(
223 "MuonFixedCutHighMuTrackOnly",
225 false, m_isoDecSuffix));
226 } else if (muWPname == "Tight_VarRad") {
227 wp->addCut(std::make_unique<IsolationConditionFormula>(
228 "MuonFixedCutHighMuTight_track",
230 false, m_isoDecSuffix));
231 wp->addCut(std::make_unique<IsolationConditionFormula>(
232 "MuonFixedCutHighMuTight_calo", xAOD::Iso::topoetcone20, "0.15*x",
233 false, m_isoDecSuffix));
234 } else if (muWPname == "Loose_VarRad") {
235 wp->addCut(std::make_unique<IsolationConditionFormula>(
236 "MuonFixedCutHighMuLoose_track",
238 false, m_isoDecSuffix));
239 wp->addCut(std::make_unique<IsolationConditionFormula>(
240 "MuonFixedCutHighMuLoose_calo", xAOD::Iso::topoetcone20, "0.30*x",
241 false, m_isoDecSuffix));
242 } else if (muWPname == "PflowTight_FixedRad") {
243 std::vector<xAOD::Iso::IsolationType> isoTypesHighPt{
246 std::vector<xAOD::Iso::IsolationType> isoTypesLowPt{
249 wp->addCut(std::make_unique<IsolationConditionCombined>(
250 "MuonPFlowTightLowPt", isoTypesLowPt,
251 std::make_unique<TF2>("pflowTFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
252 "0.045*(x>50e3?1e9:x)", m_isoDecSuffix));
253 wp->addCut(std::make_unique<IsolationConditionCombined>(
254 "MuonPFlowTightHighPt", isoTypesHighPt,
255 std::make_unique<TF2>("pflowTFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
256 "0.045*(x>50e3?x:1e9)", m_isoDecSuffix));
257 } else if (muWPname == "PflowTight_VarRad") {
258 std::vector<xAOD::Iso::IsolationType> isoTypes{
261 wp->addCut(std::make_unique<IsolationConditionCombined>(
262 "MuonPFlowTight", isoTypes,
263 std::make_unique<TF2>("pflowTFunction", "fabs(x)+0.4*(y>0?y:0)"),
264 "0.045*x", m_isoDecSuffix));
265 } else if (muWPname == "PflowLoose_FixedRad") {
266 std::vector<xAOD::Iso::IsolationType> isoTypesHighPt{
269 std::vector<xAOD::Iso::IsolationType> isoTypesLowPt{
272 wp->addCut(std::make_unique<IsolationConditionCombined>(
273 "MuonPFlowLooseLowPt", isoTypesLowPt,
274 std::make_unique<TF2>("pflowLFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
275 "0.16*(x>50e3?1e9:x)", m_isoDecSuffix));
276 wp->addCut(std::make_unique<IsolationConditionCombined>(
277 "MuonPFlowLooseHighPt", isoTypesHighPt,
278 std::make_unique<TF2>("pflowLFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
279 "0.16*(x>50e3?x:1e9)", m_isoDecSuffix));
280 } else if (muWPname == "PflowLoose_VarRad") {
281 std::vector<xAOD::Iso::IsolationType> isoTypes{
284 wp->addCut(std::make_unique<IsolationConditionCombined>(
285 "MuonPFlowLoose", isoTypes,
286 std::make_unique<TF2>("pflowTFunction", "fabs(x)+0.4*(y>0?y:0)"),
287 "0.16*x", m_isoDecSuffix));
288 } else if (muWPname == "R3PLITasPLIVefficiencyTight") {
289 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
290 "PLIT_TPLTmu_pnpxall"};
291 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
292 20000.0, 25000.0, 32000.0,
293 43000.0, 60000.0, 95000.0};
294 const std::vector<std::vector<double>> parameters = {
295 {3.75},
296 {2.4599999999999946, 0.0002400000000000006},
297 {2.6437499999999883, 0.00023250000000000085},
298 {5.576250000000033, 2.249999999999814e-05},
299 {7.061249999999798, -5.2499999999991085e-05},
300 {6.933482142856749, -4.553571428570058e-05},
301 {7.271590909090752, -5.5909090909086746e-05},
302 {5.105882352941061, -1.1764705882350721e-05},
303 {4.4250000000000025, -2.97364147850582e-20},
304 {4.425000000000001}};
305 const std::string cutFunction =
306 createPieceWisePolinomialFunction(boundaries, parameters, true);
307 wp->addCut(std::make_unique<IsolationConditionCombined>(
308 "R3PLITasPLIVefficiencyTight", isoTypes,
309 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
310 m_isoDecSuffix, true));
311 } else if (muWPname == "R3PLITasPLIVefficiencyVeryTight") {
312 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
313 "PLIT_TPLTmu_pnpxall"};
314 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
315 20000.0, 25000.0, 32000.0,
316 43000.0, 60000.0, 95000.0};
317 const std::vector<std::vector<double>> parameters = {
318 {4.050000000000001},
319 {2.5912499999999903, 0.0002625000000000011},
320 {2.8012499999999214, 0.00024750000000000623},
321 {5.677499999999787, 4.500000000001207e-05},
322 {6.2137499999998145, 2.2500000000008228e-05},
323 {7.09151785714283, -1.8749999999999094e-05},
324 {8.57727272727282, -6.545454545454794e-05},
325 {5.969852941176529, -1.0294117647059968e-05},
326 {5.528483606557319, -2.581967213113981e-06},
327 {5.324999999999999}};
328 const std::string cutFunction =
329 createPieceWisePolinomialFunction(boundaries, parameters, true);
330 wp->addCut(std::make_unique<IsolationConditionCombined>(
331 "R3PLITasPLIVefficiencyVeryTight", isoTypes,
332 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
333 m_isoDecSuffix, true));
334 } else if (muWPname == "R3PLITasPLIVrejectionTight") {
335 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
336 "PLIT_TPLTmu_pnpxall"};
337 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
338 20000.0, 25000.0, 32000.0,
339 43000.0, 60000.0, 95000.0};
340 const std::vector<std::vector<double>> parameters = {
341 {3.6750000000000007},
342 {2.4374999999999987, 0.00022500000000000008},
343 {2.572499999999916, 0.00022500000000000666},
344 {5.351249999999845, 2.2500000000008773e-05},
345 {7.113749999999581, -6.749999999998147e-05},
346 {7.213392857142764, -6.964285714285394e-05},
347 {7.4778409090906415, -7.977272727272016e-05},
348 {4.105790441176434, -1.3419117647058116e-05},
349 {3.590163934426209, -4.180327868852198e-06},
350 {3.1499999999999986}};
351 const std::string cutFunction =
352 createPieceWisePolinomialFunction(boundaries, parameters, true);
353 wp->addCut(std::make_unique<IsolationConditionCombined>(
354 "R3PLITasPLIVrejectionTight", isoTypes,
355 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
356 m_isoDecSuffix, true));
357 } else if (muWPname == "R3PLITasPLIVrejectionVeryTight") {
358 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
359 "PLIT_TPLTmu_pnpxall"};
360 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
361 20000.0, 25000.0, 32000.0,
362 43000.0, 60000.0, 95000.0};
363 const std::vector<std::vector<double>> parameters = {
364 {3.974999999999998},
365 {2.5875000000000035, 0.0002549999999999993},
366 {2.8687499999999373, 0.00023250000000000495},
367 {5.527499999999797, 4.500000000001146e-05},
368 {6.048749999999677, 2.2500000000014293e-05},
369 {7.019196428571157, -2.4107142857133378e-05},
370 {8.878977272727232, -8.38636363636353e-05},
371 {5.708823529411479, -1.76470588235239e-05},
372 {5.215573770491751, -7.131147540982918e-06},
373 {4.649999999999999}};
374 const std::string cutFunction =
375 createPieceWisePolinomialFunction(boundaries, parameters, true);
376 wp->addCut(std::make_unique<IsolationConditionCombined>(
377 "R3PLITasPLIVrejectionVeryTight", isoTypes,
378 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
379 m_isoDecSuffix, true));
380 } else if (muWPname == "R2PLITasPLIVefficiencyTight") {
381 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
382 "PLIT_TPLTmu_pnpxall"};
383 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
384 20000.0, 25000.0, 32000.0,
385 43000.0, 60000.0, 95000.0};
386 const std::vector<std::vector<double>> parameters = {
387 {3.974999999999998},
388 {2.789999999999986, 0.00021000000000000172},
389 {2.39249999999993, 0.00025500000000000555},
390 {5.737499999999933, 1.5000000000003797e-05},
391 {7.413749999999598, -6.749999999998225e-05},
392 {7.098214285714245, -5.3571428571427186e-05},
393 {6.934090909090853, -4.909090909090761e-05},
394 {5.253676470587868, -1.6176470588228218e-05},
395 {4.275000000000021, -3.17095862137587e-19},
396 {4.349999999999998}};
397 const std::string cutFunction =
398 createPieceWisePolinomialFunction(boundaries, parameters, true);
399 wp->addCut(std::make_unique<IsolationConditionCombined>(
400 "R2PLITasPLIVefficiencyTight", isoTypes,
401 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
402 m_isoDecSuffix, true));
403 } else if (muWPname == "R2PLITasPLIVefficiencyVeryTight") {
404 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
405 "PLIT_TPLTmu_pnpxall"};
406 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
407 20000.0, 25000.0, 32000.0,
408 43000.0, 60000.0, 95000.0};
409 const std::vector<std::vector<double>> parameters = {
410 {4.199999999999999},
411 {2.9625000000000026, 0.00022499999999999956},
412 {2.7674999999999454, 0.0002550000000000043},
413 {5.752499999999801, 4.500000000001117e-05},
414 {6.2887499999995, 2.2500000000022112e-05},
415 {7.265625000000208, -2.4107142857150163e-05},
416 {8.287500000000128, -5.863636363636705e-05},
417 {5.99329044117658, -1.194852941176682e-05},
418 {5.653893442622939, -5.5327868852457475e-06},
419 {5.25}};
420 const std::string cutFunction =
421 createPieceWisePolinomialFunction(boundaries, parameters, true);
422 wp->addCut(std::make_unique<IsolationConditionCombined>(
423 "R2PLITasPLIVefficiencyVeryTight", isoTypes,
424 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
425 m_isoDecSuffix, true));
426 } else if (muWPname == "R2PLITasPLIVrejectionTight") {
427 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
428 "PLIT_TPLTmu_pnpxall"};
429 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
430 20000.0, 25000.0, 32000.0,
431 43000.0, 60000.0, 95000.0};
432 const std::vector<std::vector<double>> parameters = {
433 {3.8999999999999986},
434 {2.853749999999994, 0.00018750000000000065},
435 {2.321250000000002, 0.0002474999999999998},
436 {5.426250000000083, 2.2499999999995095e-05},
437 {7.312499999999872, -7.499999999999437e-05},
438 {7.552232142857126, -8.303571428571374e-05},
439 {7.140340909090713, -7.022727272726753e-05},
440 {4.7727941176470186, -2.499999999999921e-05},
441 {3.679918032786865, -5.409836065573509e-06},
442 {3.0}};
443 const std::string cutFunction =
444 createPieceWisePolinomialFunction(boundaries, parameters, true);
445 wp->addCut(std::make_unique<IsolationConditionCombined>(
446 "R2PLITasPLIVrejectionTight", isoTypes,
447 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
448 m_isoDecSuffix, true));
449 } else if (muWPname == "R2PLITasPLIVrejectionVeryTight") {
450 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
451 "PLIT_TPLTmu_pnpxall"};
452 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
453 20000.0, 25000.0, 32000.0,
454 43000.0, 60000.0, 95000.0};
455 const std::vector<std::vector<double>> parameters = {
456 {4.199999999999999},
457 {2.9887499999999982, 0.0002175000000000001},
458 {2.9287500000000426, 0.0002324999999999965},
459 {5.602499999999976, 4.500000000000134e-05},
460 {6.262499999999722, 1.5000000000012243e-05},
461 {7.651339285714248, -4.5535714285712985e-05},
462 {8.947159090908924, -8.659090909090467e-05},
463 {5.994117647058617, -2.3529411764701903e-05},
464 {4.8565573770491985, -2.213114754098622e-06},
465 {4.349999999999998}};
466 const std::string cutFunction =
467 createPieceWisePolinomialFunction(boundaries, parameters, true);
468 wp->addCut(std::make_unique<IsolationConditionCombined>(
469 "R2PLITasPLIVrejectionVeryTight", isoTypes,
470 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
471 m_isoDecSuffix, true));
472 } else if (muWPname == "R3PLITVeryLoose") {
473 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
474 "PLIT_TPLTmu_pnpxall"};
475 const std::vector<double> boundaries = {
476 15000.0, 20000.0, 25000.0, 30000.0, 40000.0, 50000.0,
477 75000.0, 100000.0, 110000.0, 120000.0, 160000.0};
478 const std::vector<std::vector<double>> parameters = {
479 {-0.3040909, 0.0002809},
480 {1.56375, 9.75e-05},
481 {1.22625, 9.75e-05},
482 {1.4625, 7.5e-05},
483 {1.4622506, 6.45e-05},
484 {1.6695205, 4.62e-05},
485 {1.9120284, 3.31e-05},
486 {2.9462838, 1.26e-05},
487 {3.375},
488 {3.45},
489 {3.225},
490 {3.3}};
491 const std::string cutFunction =
492 createPieceWisePolinomialFunction(boundaries, parameters, true);
493 wp->addCut(std::make_unique<IsolationConditionCombined>(
494 "R3PLITVeryLoose", isoTypes,
495 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
496 m_isoDecSuffix, true));
497 } else if (muWPname == "R2PLITVeryLoose") {
498 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
499 "PLIT_TPLTmu_pnpxall"};
500 const std::vector<double> boundaries = {
501 15000.0, 20000.0, 25000.0, 30000.0, 40000.0, 50000.0,
502 75000.0, 100000.0, 110000.0, 120000.0, 160000.0};
503 const std::vector<std::vector<double>> parameters = {{0.0886364, 0.0002536},
504 {1.8651869, 8.55e-05},
505 {1.7625, 7.5e-05},
506 {1.4625, 7.5e-05},
507 {1.5238217, 6.21e-05},
508 {1.743375, 4.43e-05},
509 {2.1522807, 2.78e-05},
510 {2.3787162, 1.74e-05},
511 {3.3},
512 {3.45},
513 {3.15},
514 {3.075}};
515 const std::string cutFunction =
516 createPieceWisePolinomialFunction(boundaries, parameters, true);
517 wp->addCut(std::make_unique<IsolationConditionCombined>(
518 "R2PLITVeryLoose", isoTypes,
519 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
520 m_isoDecSuffix, true));
521 } else {
522 ATH_MSG_ERROR("Unknown muon isolation WP: " << muWPname);
523 return StatusCode::FAILURE;
524 }
525 m_muonAccept.addCut(wp->name(), wp->name());
526#ifndef XAOD_STANDALONE
528#endif
529 m_muWPs.push_back(std::move(wp));
530 return StatusCode::SUCCESS;
531}
std::string createPieceWisePolinomialFunction(const std::vector< double > &boundaries, const std::vector< std::vector< double > > &parameters, bool isOpen=false) const
Gaudi::Property< std::string > m_inMuonContainer
Properties to declare the data dependencies to the avalanche scheduler.
@ ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000
@ ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000
@ ptcone20_Nonprompt_All_MaxWeightTTVA_pt500
Ptcone http://arxiv.org/abs/1007.2221 for high mu.
@ ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500

◆ addPhotonWP()

StatusCode CP::IsolationSelectionTool::addPhotonWP ( const std::string & wpname)

Definition at line 533 of file IsolationSelectionTool.cxx.

533 {
534 std::unique_ptr<IsolationWP> wp = std::make_unique<IsolationWP>(phWPname);
535 if (phWPname == "TightCaloOnly") {
536 wp->addCut(std::make_unique<IsolationConditionFormula>(
537 "PhFixedCut_calo40", xAOD::Iso::topoetcone40, "0.022*x+2450", false,
539 } else if (phWPname == "FixedCutTight") {
540 wp->addCut(std::make_unique<IsolationConditionFormula>(
541 "PhFixedCut_calo40", xAOD::Iso::topoetcone40, "0.022*x+2450", false,
543 wp->addCut(std::make_unique<IsolationConditionFormula>(
544 "PhFixedCut_track20", xAOD::Iso::ptcone20, "0.05*x", false,
546 } else if (phWPname == "FixedCutLoose") {
547 wp->addCut(std::make_unique<IsolationConditionFormula>(
548 "PhFixedCut_calo20", xAOD::Iso::topoetcone20, "0.065*x", false,
550 wp->addCut(std::make_unique<IsolationConditionFormula>(
551 "PhFixedCut_track20", xAOD::Iso::ptcone20, "0.05*x", false,
553 } else if (phWPname == "Tight") {
554 wp->addCut(std::make_unique<IsolationConditionFormula>(
555 "PhFixedCut_calo40", xAOD::Iso::topoetcone40, "0.022*x+2450", false,
557 wp->addCut(std::make_unique<IsolationConditionFormula>(
558 "PhFixedCut_Tighttrack20",
561 } else if (phWPname == "Loose") {
562 wp->addCut(std::make_unique<IsolationConditionFormula>(
563 "PhFixedCut_calo20", xAOD::Iso::topoetcone20, "0.065*x", false,
565 wp->addCut(std::make_unique<IsolationConditionFormula>(
566 "PhFixedCut_Tighttrack20",
569 } else {
570 ATH_MSG_ERROR("Unknown photon isolation WP: " << phWPname);
571 return StatusCode::FAILURE;
572 }
573
574 m_photonAccept.addCut(wp->name(), wp->name());
575#ifndef XAOD_STANDALONE
577#endif
578 m_phWPs.push_back(std::move(wp));
579
580 // Return gracefully:
581 return StatusCode::SUCCESS;
582}
Gaudi::Property< std::string > m_inPhotContainer
@ ptcone20
Track isolation.

◆ addUserDefinedWP()

StatusCode CP::IsolationSelectionTool::addUserDefinedWP ( const std::string & WPname,
xAOD::Type::ObjectType ObjType,
std::vector< std::pair< xAOD::Iso::IsolationType, std::string > > & cuts,
std::string key = "",
IsoWPType type = Efficiency )

Definition at line 757 of file IsolationSelectionTool.cxx.

760 {
761 std::vector<std::unique_ptr<IsolationWP>>* wps(nullptr);
762 asg::AcceptInfo* ac = nullptr;
763 if (ObjType == xAOD::Type::Electron) {
764 if (key == "")
765 key = m_elWPKey;
766 wps = &m_elWPs;
767 ac = &m_electronAccept;
768 } else if (ObjType == xAOD::Type::Muon) {
769 if (key == "")
770 key = m_muWPKey;
771 wps = &m_muWPs;
772 ac = &m_muonAccept;
773 } else if (ObjType == xAOD::Type::Photon) {
774 if (key == "")
775 key = m_phWPKey;
776 wps = &m_phWPs;
777 ac = &m_photonAccept;
778 } else if (ObjType == xAOD::Type::Other) {
779 if (key == "")
780 return StatusCode::FAILURE;
781 wps = &m_objWPs;
782 ac = &m_objAccept;
783 } else {
784 return StatusCode::FAILURE;
785 }
786
787 std::unique_ptr<IsolationWP> wp = std::make_unique<IsolationWP>(WPname);
788 if (type == Efficiency) {
789 for (auto& c : cuts)
790 ATH_CHECK(addCutToWP(wp.get(), key, c.first, c.second));
791 } else if (type == Cut) {
792 for (auto& c : cuts)
793 wp->addCut(std::make_unique<IsolationConditionFormula>(
794 xAOD::Iso::toCString(c.first), c.first, c.second));
795 } else {
796 ATH_MSG_ERROR("Unknown isolation WP type -- should not happen.");
797 return StatusCode::FAILURE;
798 }
799
800 ac->addCut(wp->name(), wp->name());
801 wps->push_back(std::move(wp));
802 return StatusCode::SUCCESS;
803}
#define ATH_CHECK
Evaluate an expression and check for errors.
Gaudi::Property< std::string > m_phWPKey
Gaudi::Property< std::string > m_elWPKey
Gaudi::Property< std::string > m_muWPKey
int addCut(const std::string &cutName, const std::string &cutDescription)
Add a cut; returning the cut position.
Definition AcceptInfo.h:53
@ Other
An object not falling into any of the other categories.
Definition ObjectType.h:34

◆ addWP() [1/2]

StatusCode CP::IsolationSelectionTool::addWP ( const std::string & WP,
xAOD::Type::ObjectType type )

Definition at line 805 of file IsolationSelectionTool.cxx.

806 {
807 if (ObjType == xAOD::Type::Electron) {
808 return addElectronWP(WP);
809 } else if (ObjType == xAOD::Type::Muon) {
810 return addMuonWP(WP);
811 } else if (ObjType == xAOD::Type::Photon) {
812 return addPhotonWP(WP);
813 }
814
815 return StatusCode::FAILURE;
816}
StatusCode addMuonWP(const std::string &wpname)
StatusCode addElectronWP(const std::string &wpname)
StatusCode addPhotonWP(const std::string &wpname)

◆ addWP() [2/2]

StatusCode CP::IsolationSelectionTool::addWP ( std::unique_ptr< IsolationWP > wp,
xAOD::Type::ObjectType type )

Definition at line 817 of file IsolationSelectionTool.cxx.

818 {
819 if (ObjType == xAOD::Type::Electron) {
820 m_electronAccept.addCut(wp->name(), wp->name());
821 m_elWPs.push_back(std::move(wp));
822 } else if (ObjType == xAOD::Type::Muon) {
823 m_muonAccept.addCut(wp->name(), wp->name());
824 m_muWPs.push_back(std::move(wp));
825
826 } else if (ObjType == xAOD::Type::Photon) {
827 m_photonAccept.addCut(wp->name(), wp->name());
828 m_phWPs.push_back(std::move(wp));
829
830 } else if (ObjType == xAOD::Type::Other) {
831 m_objAccept.addCut(wp->name(), wp->name());
832 m_objWPs.push_back(std::move(wp));
833 } else {
834 return StatusCode::FAILURE;
835 }
836
837 return StatusCode::SUCCESS;
838}

◆ createPieceWisePolinomialFunction()

std::string CP::IsolationSelectionTool::createPieceWisePolinomialFunction ( const std::vector< double > & boundaries,
const std::vector< std::vector< double > > & parameters,
bool isOpen = false ) const
private

Definition at line 925 of file IsolationSelectionTool.cxx.

927 {
928
929 if (isOpen && boundaries.size() != parameters.size() - 1) {
931 "The number of region boundaries must be one less than the number of "
932 "parameters for the piecewise polynomial function.");
933 return "";
934 } else if (!isOpen && boundaries.size() != parameters.size() + 1) {
936 "The number of region boundaries must be one more than the number of "
937 "parameters for the piecewise polynomial function.");
938 return "";
939 }
940
941 std::ostringstream oss;
942 oss << std::setprecision(16);
943
944 // a lambda for the polynomial expression
945 // one could remove the zeroes in the parameters vector
946 auto polynomial = [](const std::vector<double>& params) {
947 std::ostringstream oss;
948 oss << std::setprecision(16);
949 oss << "(";
950 for (size_t i = 0; i < params.size(); ++i) {
951 if (i > 0)
952 oss << " + ";
953 if (i == 0) {
954 oss << params[i]; // constant term
955 } else if (i == 1) {
956 oss << params[i] << " * x"; // linear term
957 } else { // higher order terms
958 oss << params[i] << " * pow(x, " << i << ")"; // higher order terms
959 }
960 }
961 oss << ")";
962 return oss.str();
963 };
964
965 // Start the function definition, using concateation of ternary operators
966 // if isOpen==false, just nullify the function before the first and after the
967 // last boundary just create a copy of params, and insert 0.0 at the beginning
968 // and end if isOpen==false
969 std::vector<std::vector<double>> params = parameters;
970 if (!isOpen) {
971 params.insert(params.begin(), {0.0}); // add a zero vector at the beginning
972 params.push_back({0.0}); // add a zero vector at the end
973 }
974
975 // now loop over the boundaries and parameters (we can ignore isOpen finally)
976 for (size_t i = 0; i < boundaries.size(); ++i) {
977 if (i == 0)
978 oss << "(";
979 oss << "(x < " << boundaries[i] << ") ? " << polynomial(params[i]) << " : ";
980 }
981 oss << polynomial(params.back()) << ")"; // last segment, no ternary operator
982
983 return oss.str();
984}

◆ declareGaudiProperty()

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

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

Definition at line 156 of file AthCommonDataStore.h.

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

◆ declareProperty()

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

Definition at line 145 of file AthCommonDataStore.h.

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

◆ detStore()

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

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

Definition at line 95 of file AthCommonDataStore.h.

◆ evaluateWP()

template<typename T>
void CP::IsolationSelectionTool::evaluateWP ( const T & x,
const std::vector< std::unique_ptr< IsolationWP > > & WP,
asg::AcceptData & accept ) const
private

Definition at line 840 of file IsolationSelectionTool.cxx.

842 {
843 accept.clear();
844 for (const std::unique_ptr<IsolationWP>& i : WP) {
845 if (i->accept(x))
846 accept.setCutResult(i->name(), true);
847 }
848}

◆ 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

◆ getElectronAcceptInfo()

const asg::AcceptInfo & CP::IsolationSelectionTool::getElectronAcceptInfo ( ) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 914 of file IsolationSelectionTool.cxx.

914 {
915 return m_electronAccept;
916}

◆ getElectronWPs()

const std::vector< std::unique_ptr< IsolationWP > > & CP::IsolationSelectionTool::getElectronWPs ( ) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 31 of file IsolationSelectionTool.cxx.

31 {
32 return m_elWPs;
33}

◆ getKey()

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

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

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

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

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

Definition at line 119 of file AsgTool.cxx.

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

◆ getMuonAcceptInfo()

const asg::AcceptInfo & CP::IsolationSelectionTool::getMuonAcceptInfo ( ) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 918 of file IsolationSelectionTool.cxx.

918 {
919 return m_muonAccept;
920}

◆ getMuonWPs()

const std::vector< std::unique_ptr< IsolationWP > > & CP::IsolationSelectionTool::getMuonWPs ( ) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 27 of file IsolationSelectionTool.cxx.

27 {
28 return m_muWPs;
29}

◆ getName()

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

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

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

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

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

Definition at line 106 of file AsgTool.cxx.

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

◆ getObjAcceptInfo()

const asg::AcceptInfo & CP::IsolationSelectionTool::getObjAcceptInfo ( ) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 921 of file IsolationSelectionTool.cxx.

921 {
922 return m_objAccept;
923}

◆ getObjWPs()

const std::vector< std::unique_ptr< IsolationWP > > & CP::IsolationSelectionTool::getObjWPs ( ) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 39 of file IsolationSelectionTool.cxx.

39 {
40 return m_objWPs;
41}

◆ getPhotonAcceptInfo()

const asg::AcceptInfo & CP::IsolationSelectionTool::getPhotonAcceptInfo ( ) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 910 of file IsolationSelectionTool.cxx.

910 {
911 return m_photonAccept;
912}

◆ getPhotonWPs()

const std::vector< std::unique_ptr< IsolationWP > > & CP::IsolationSelectionTool::getPhotonWPs ( ) const
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 35 of file IsolationSelectionTool.cxx.

35 {
36 return m_phWPs;
37}

◆ getProperty()

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

Get one of the tool's properties.

◆ initialize()

StatusCode CP::IsolationSelectionTool::initialize ( void )
overridevirtual

Function initialising the tool.

Greet the user:

setup working points

Return gracefully:

Reimplemented from asg::AsgTool.

Definition at line 44 of file IsolationSelectionTool.cxx.

44 {
46 ATH_MSG_INFO("Initialising...");
47
48 ATH_MSG_INFO("IsoDecSuffix: " << m_isoDecSuffix);
49
50 if (!m_calibFileName.empty()) {
52
53 ATH_MSG_INFO("Reading input file " << m_calibFileName << " from "
54 << filename);
55 m_calibFile = std::make_unique<TFile>(filename.c_str(), "READ");
56
57 TObjString* versionInfo{nullptr};
58 m_calibFile->GetObject("VersionInfo", versionInfo);
59 if (versionInfo)
60 ATH_MSG_INFO("VersionInfo:" << versionInfo->String());
61 else
62 ATH_MSG_WARNING("VersionInfo of input file (" << filename
63 << ") is missing.");
64 }
65
66 if (m_doInterpE || m_doInterpM) {
67 // special setting for electrons
68 // do not apply interpolation in crack vicinity for topoetcone
69 std::vector<std::pair<double, double>> rangeEtaNoInt;
70 std::pair<double, double> apair(1.26, 1.665);
71 rangeEtaNoInt.push_back(apair);
72 // do not apply interpolation between Z defined and J/Psi defined cuts (pT <
73 // > 15 GeV/c) for both calo and track iso
74 std::vector<std::pair<double, double>> rangePtNoInt;
75 apair.first = 12.5;
76 apair.second = 17.5;
77 rangePtNoInt.push_back(apair);
78 std::map<std::string, Interp3D::VetoInterp> amap;
79 Interp3D::VetoInterp veto;
80 veto.xRange = std::move(rangePtNoInt);
81 veto.yRange = std::vector<std::pair<double, double>>();
82 amap.insert(std::make_pair(std::string("el_cutValues_ptvarcone20"), veto));
83 veto.yRange = std::move(rangeEtaNoInt);
84 amap.insert(std::make_pair(std::string("el_cutValues_topoetcone20"), veto));
85 m_Interp = std::make_unique<Interp3D>(amap);
86 m_Interp->debug(false);
87 }
88
90 if (m_phWPname != "Undefined")
92 if (m_elWPname != "Undefined")
94 if (m_muWPname != "Undefined")
96 for (const std::string& c : m_muWPvec)
98 for (const std::string& c : m_elWPvec)
100 for (const std::string& c : m_phWPvec)
102
103 m_calibFile.reset();
104#ifndef XAOD_STANDALONE
105 ATH_CHECK(m_isoDecors.initialize());
106#endif
108 return StatusCode::SUCCESS;
109}
#define ATH_MSG_WARNING(x,...)
Gaudi::Property< std::string > m_muWPname
Gaudi::Property< std::vector< std::string > > m_muWPvec
Gaudi::Property< std::vector< std::string > > m_phWPvec
Gaudi::Property< std::string > m_phWPname
Gaudi::Property< std::string > m_elWPname
Gaudi::Property< std::vector< std::string > > m_elWPvec
std::vector< std::string > veto
these patterns are anded
Definition listroot.cxx:191

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

◆ msg()

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg_level_name()

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

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

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

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

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

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

Definition at line 101 of file AsgTool.cxx.

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

◆ msgLvl()

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

Definition at line 30 of file AthCommonMsg.h.

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

◆ outputHandles()

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

Return this algorithm's output handles.

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

◆ print()

◆ 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 368 of file AthCommonDataStore.h.

369 {
370 h.renounce();
372 }
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 352 of file AthCommonDataStore.h.

352 {
354 }

◆ setIParticleCutsFrom()

StatusCode CP::IsolationSelectionTool::setIParticleCutsFrom ( xAOD::Type::ObjectType ObjType)
overridevirtual

Implements CP::IIsolationSelectionTool.

Definition at line 124 of file IsolationSelectionTool.cxx.

125 {
126 if (ObjType == xAOD::Type::Electron) {
129 } else if (ObjType == xAOD::Type::Muon) {
132 } else if (ObjType == xAOD::Type::Photon) {
135 } else {
136 return StatusCode::FAILURE;
137 }
138
139 return StatusCode::SUCCESS;
140}

◆ sysInitialize()

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

Perform system initialization for an algorithm.

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

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

◆ sysStart()

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

Handle START transition.

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

◆ updateVHKA()

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

Definition at line 298 of file AthCommonDataStore.h.

298 {
299 for (auto &a : m_vhka) {
301 for (auto k : keys) {
302 k->setOwner(this);
303 }
304 }
305 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_calibFile

std::unique_ptr<TFile> CP::IsolationSelectionTool::m_calibFile {nullptr}
private

Definition at line 94 of file IsolationSelectionTool.h.

94{nullptr};

◆ m_calibFileName

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_calibFileName {this, "CalibFileName", "", " The config to use"}
private

input file

Definition at line 93 of file IsolationSelectionTool.h.

93{this, "CalibFileName", "", " The config to use"};

◆ m_detStore

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

Pointer to StoreGate (detector store by default).

Definition at line 381 of file AthCommonDataStore.h.

◆ m_doInterpE

Gaudi::Property<bool> CP::IsolationSelectionTool::m_doInterpE {this, "doCutInterpolationElec", true, "flag to perform cut interpolation, electron"}
private

Definition at line 118 of file IsolationSelectionTool.h.

118{this, "doCutInterpolationElec", true, "flag to perform cut interpolation, electron"};

◆ m_doInterpM

Gaudi::Property<bool> CP::IsolationSelectionTool::m_doInterpM {this, "doCutInterpolationMuon", false, "flag to perform cut interpolation, muon"}
private

Definition at line 117 of file IsolationSelectionTool.h.

117{this, "doCutInterpolationMuon", false, "flag to perform cut interpolation, muon"};

◆ m_electronAccept

asg::AcceptInfo CP::IsolationSelectionTool::m_electronAccept {"IsolationSelectionToolElectronAcceptInfo"}
private

Definition at line 108 of file IsolationSelectionTool.h.

108{"IsolationSelectionToolElectronAcceptInfo"};

◆ m_elWPKey

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_elWPKey
private
Initial value:
{this, "ElectronKey", "/ElectronPhoton/LHTight/el_cutValues_",
"path of the cut map for electron"}

Definition at line 84 of file IsolationSelectionTool.h.

84 {this, "ElectronKey", "/ElectronPhoton/LHTight/el_cutValues_",
85 "path of the cut map for electron"};

◆ m_elWPname

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_elWPname {this, "ElectronWP", "Undefined", "Working point for electron"}
private

Definition at line 77 of file IsolationSelectionTool.h.

77{this, "ElectronWP", "Undefined", "Working point for electron"};

◆ m_elWPs

std::vector<std::unique_ptr<IsolationWP> > CP::IsolationSelectionTool::m_elWPs {}
private

Definition at line 102 of file IsolationSelectionTool.h.

102{};

◆ m_elWPvec

Gaudi::Property<std::vector<std::string> > CP::IsolationSelectionTool::m_elWPvec {this, "ElectronWPVec", {}, "Vector of working points for electron"}
private

Definition at line 80 of file IsolationSelectionTool.h.

80{this, "ElectronWPVec", {}, "Vector of working points for electron"};

◆ m_evtStore

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

Pointer to StoreGate (event store by default).

Definition at line 378 of file AthCommonDataStore.h.

◆ m_filePathName

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_filePathName {this, "filePathName", "ElectronIsolationSelection/2022_2025/v3/", " The nominal file path to use"}
private

cvfms path for files containing WP definitions (e.g. for TGraphs)

Definition at line 97 of file IsolationSelectionTool.h.

97{this, "filePathName", "ElectronIsolationSelection/2022_2025/v3/", " The nominal file path to use"};

◆ m_inElecContainer

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_inElecContainer {this, "InElectronContainer", "" , "Name of the electron container parsed to the tool."}
private

Definition at line 126 of file IsolationSelectionTool.h.

126{this, "InElectronContainer", "" , "Name of the electron container parsed to the tool."};

◆ m_inMuonContainer

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_inMuonContainer {this, "InMuonContainer", "" , "Name of the muon container parsed to the tool."}
private

Properties to declare the data dependencies to the avalanche scheduler.

Definition at line 125 of file IsolationSelectionTool.h.

125{this, "InMuonContainer", "" , "Name of the muon container parsed to the tool."};

◆ m_inPhotContainer

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_inPhotContainer {this, "InPhotonContainer", "", "Name of the photon container parsed to the tool."}
private

Definition at line 127 of file IsolationSelectionTool.h.

127{this, "InPhotonContainer", "", "Name of the photon container parsed to the tool."};

◆ m_Interp

std::shared_ptr<Interp3D> CP::IsolationSelectionTool::m_Interp {nullptr}
private

Definition at line 119 of file IsolationSelectionTool.h.

119{nullptr};

◆ m_iparAcceptInfo

asg::AcceptInfo* CP::IsolationSelectionTool::m_iparAcceptInfo {nullptr}
private

Definition at line 114 of file IsolationSelectionTool.h.

114{nullptr};

◆ m_iparWPs

std::vector<std::unique_ptr<IsolationWP> >* CP::IsolationSelectionTool::m_iparWPs {nullptr}
private

Iparticle interface.

Definition at line 113 of file IsolationSelectionTool.h.

113{nullptr};

◆ m_isoDecors

SG::ReadDecorHandleKeyArray<xAOD::IParticleContainer> CP::IsolationSelectionTool::m_isoDecors {this, "IsolationDecors", {}, "List of decorations needed by the tool"}
private

Definition at line 122 of file IsolationSelectionTool.h.

122{this, "IsolationDecors", {}, "List of decorations needed by the tool"};

◆ m_isoDecSuffix

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_isoDecSuffix
private
Initial value:
{
this, "IsoDecSuffix", "", "Suffix added to output isolation variables to allow to NOT overwrite existing values"}

Definition at line 88 of file IsolationSelectionTool.h.

88 {
89 this, "IsoDecSuffix", "", "Suffix added to output isolation variables to allow to NOT overwrite existing values"};

◆ m_muonAccept

asg::AcceptInfo CP::IsolationSelectionTool::m_muonAccept {"IsolationSelectionToolMuonAcceptInfo"}
private

Definition at line 109 of file IsolationSelectionTool.h.

109{"IsolationSelectionToolMuonAcceptInfo"};

◆ m_muWPKey

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_muWPKey {this, "MuonKey", "/Muons/DFCommonGoodMuon/mu_cutValues_", "path of the cut map for muon"}
private

Definition at line 83 of file IsolationSelectionTool.h.

83{this, "MuonKey", "/Muons/DFCommonGoodMuon/mu_cutValues_", "path of the cut map for muon"};

◆ m_muWPname

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_muWPname {this, "MuonWP", "Undefined", "Working point for muon"}
private

Definition at line 76 of file IsolationSelectionTool.h.

76{this, "MuonWP", "Undefined", "Working point for muon"};

◆ m_muWPs

std::vector<std::unique_ptr<IsolationWP> > CP::IsolationSelectionTool::m_muWPs {}
private

internal use

Definition at line 101 of file IsolationSelectionTool.h.

101{};

◆ m_muWPvec

Gaudi::Property<std::vector<std::string> > CP::IsolationSelectionTool::m_muWPvec {this, "MuonWPVec", {}, "Vector of working points for muon"}
private

Definition at line 79 of file IsolationSelectionTool.h.

79{this, "MuonWPVec", {}, "Vector of working points for muon"};

◆ m_objAccept

asg::AcceptInfo CP::IsolationSelectionTool::m_objAccept {"IsolationSelectionToolObjAcceptInfo"}
private

Definition at line 110 of file IsolationSelectionTool.h.

110{"IsolationSelectionToolObjAcceptInfo"};

◆ m_objWPs

std::vector<std::unique_ptr<IsolationWP> > CP::IsolationSelectionTool::m_objWPs {}
private

Definition at line 104 of file IsolationSelectionTool.h.

104{};

◆ m_photonAccept

asg::AcceptInfo CP::IsolationSelectionTool::m_photonAccept {"IsolationSelectionToolPhotonAcceptInfo"}
private

AcceptInfo's.

Definition at line 107 of file IsolationSelectionTool.h.

107{"IsolationSelectionToolPhotonAcceptInfo"};

◆ m_phWPKey

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_phWPKey
private
Initial value:
{this, "PhotonKey", "/ElectronPhoton/LHTight/el_cutValues_",
"path of the cut map for photon"}

Definition at line 86 of file IsolationSelectionTool.h.

86 {this, "PhotonKey", "/ElectronPhoton/LHTight/el_cutValues_",
87 "path of the cut map for photon"};

◆ m_phWPname

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_phWPname {this, "PhotonWP", "Undefined", "Working point for photon"}
private

Definition at line 78 of file IsolationSelectionTool.h.

78{this, "PhotonWP", "Undefined", "Working point for photon"};

◆ m_phWPs

std::vector<std::unique_ptr<IsolationWP> > CP::IsolationSelectionTool::m_phWPs {}
private

Definition at line 103 of file IsolationSelectionTool.h.

103{};

◆ m_phWPvec

Gaudi::Property<std::vector<std::string> > CP::IsolationSelectionTool::m_phWPvec {this, "PhotonWPVec", {}, "Vector of working points for photon"}
private

Definition at line 81 of file IsolationSelectionTool.h.

81{this, "PhotonWPVec", {}, "Vector of working points for photon"};

◆ m_varHandleArraysDeclared

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

Definition at line 387 of file AthCommonDataStore.h.

◆ m_vhka

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

Definition at line 386 of file AthCommonDataStore.h.

◆ m_WPdefinitionFile

std::unique_ptr<TFile> CP::IsolationSelectionTool::m_WPdefinitionFile {nullptr}
private

Definition at line 98 of file IsolationSelectionTool.h.

98{nullptr};

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