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::AcceptInfogetPhotonAcceptInfo () const override
virtual const asg::AcceptInfogetElectronAcceptInfo () const override
virtual const asg::AcceptInfogetMuonAcceptInfo () const override
virtual const asg::AcceptInfogetObjAcceptInfo () 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< StoreGateSvcStoreGateSvc_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/v1/", " 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::AcceptInfom_iparAcceptInfo {nullptr}
Gaudi::Property< boolm_doInterpM {this, "doCutInterpolationMuon", false, "flag to perform cut interpolation, muon"}
Gaudi::Property< boolm_doInterpE {this, "doCutInterpolationElec", true, "flag to perform cut interpolation, electron"}
std::shared_ptr< Interp3Dm_Interp {nullptr}
SG::ReadDecorHandleKeyArray< xAOD::IParticleContainerm_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 388 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 22 of file IsolationSelectionTool.cxx.

23 : 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 902 of file IsolationSelectionTool.cxx.

902 {
903 if (x.type == xAOD::Type::Electron) {
904 asg::AcceptData accept(&m_electronAccept);
906 return accept;
907 } else if (x.type == xAOD::Type::Muon) {
908 asg::AcceptData accept(&m_muonAccept);
910 return accept;
911 } else if (x.type == xAOD::Type::Photon) {
912 asg::AcceptData accept(&m_photonAccept);
914 return accept;
915 } else {
916 asg::AcceptData accept(&m_objAccept);
918 return accept;
919 }
920 return asg::AcceptData(&m_objAccept);
921}
#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 866 of file IsolationSelectionTool.cxx.

866 {
867 asg::AcceptData accept(&m_electronAccept);
869 return accept;
870}

◆ accept() [3/5]

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

Implements CP::IIsolationSelectionTool.

Definition at line 878 of file IsolationSelectionTool.cxx.

878 {
879 if (x.type() == xAOD::Type::Electron) {
880 asg::AcceptData accept(&m_electronAccept);
882 return accept;
883 } else if (x.type() == xAOD::Type::Muon) {
884 asg::AcceptData accept(&m_muonAccept);
886 return accept;
887 } else if (x.type() == xAOD::Type::Photon) {
888 asg::AcceptData accept(&m_photonAccept);
890 return accept;
891 }
892
893 else if (m_iparAcceptInfo && m_iparWPs) {
894 asg::AcceptData accept(m_iparAcceptInfo);
896 return accept;
897 }
898 ATH_MSG_ERROR("Someting here makes really no sense");
899 return asg::AcceptData(&m_objAccept);
900}
#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 872 of file IsolationSelectionTool.cxx.

872 {
873 asg::AcceptData accept(&m_muonAccept);
875 return accept;
876}

◆ 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 860 of file IsolationSelectionTool.cxx.

860 {
861 asg::AcceptData accept(&m_photonAccept);
863 return accept;
864}

◆ 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 172 of file IsolationSelectionTool.cxx.

175 {
176 return addCutToWP(wp, key, t, expression, t);
177}
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 140 of file IsolationSelectionTool.cxx.

143 {
144 if (!m_calibFile) {
145 ATH_MSG_ERROR("Calibration File (" << m_calibFileName << ") is missing.");
146 return StatusCode::FAILURE;
147 }
148
149 std::string varname(xAOD::Iso::toCString(isoCutRemap));
150 std::string key = key_in + varname;
151
152 TH3F* calibHisto{nullptr};
153 m_calibFile->GetObject(key.c_str(), calibHisto);
154 if (!calibHisto) {
155 ATH_MSG_FATAL(" Failed to load " << key << " from "
156 << m_calibFile->GetName());
157 return StatusCode::FAILURE;
158 }
159 calibHisto->SetDirectory(nullptr);
160 std::unique_ptr<TH3F> histogram(calibHisto);
161 std::unique_ptr<IsolationConditionHist> ich =
162 std::make_unique<IsolationConditionHist>(varname, t, expression,
163 std::move(histogram));
164 if ((m_doInterpM && key.find("Muon") != std::string::npos) ||
165 (m_doInterpE && key.find("Electron") != std::string::npos))
166 ich->setInterp(m_Interp);
167 wp->addCut(std::move(ich));
168
169 return StatusCode::SUCCESS;
170}
#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 109 of file IsolationSelectionTool.cxx.

110 {
111 if (container.empty())
112 return;
113 for (const std::unique_ptr<IsolationCondition>& cond : wp.conditions()) {
114 for (unsigned int acc = 0; acc < cond->num_types(); ++acc) {
115 m_isoDecors.emplace_back(
116 container + "." +
117 SG::AuxTypeRegistry::instance().getName(cond->accessor(acc).auxid()));
118 }
119 }
120}
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
static const SG::AuxElement::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 582 of file IsolationSelectionTool.cxx.

582 {
583 std::unique_ptr<IsolationWP> wp = std::make_unique<IsolationWP>(elWPname);
584
585 if (elWPname == "HighPtCaloOnly") {
586 wp->addCut(std::make_unique<IsolationConditionFormula>(
587 "FCHighPtCaloOnly_calo", xAOD::Iso::topoetcone20,
588 "std::max(0.015*x,3.5E3)", false, m_isoDecSuffix)); // units are MeV!
589 } else if (elWPname == "Tight_VarRad") {
590 wp->addCut(std::make_unique<IsolationConditionFormula>(
591 "ElecTight_track",
593 "0.06*x", false, m_isoDecSuffix));
594 wp->addCut(std::make_unique<IsolationConditionFormula>(
595 "ElecTight_calo", xAOD::Iso::topoetcone20, "0.06*x", false,
597 } else if (elWPname == "Loose_VarRad") {
598 wp->addCut(std::make_unique<IsolationConditionFormula>(
599 "ElecLoose_track",
601 "0.15*x", false, m_isoDecSuffix));
602 wp->addCut(std::make_unique<IsolationConditionFormula>(
603 "ElecLoose_calo", xAOD::Iso::topoetcone20, "0.20*x", false,
605 } else if (elWPname == "TightTrackOnly_VarRad") {
606 wp->addCut(std::make_unique<IsolationConditionFormula>(
607 "ElecTightTrackOnly",
609 "0.06*x", false, m_isoDecSuffix));
610 } else if (elWPname == "TightTrackOnly_FixedRad") {
611 wp->addCut(std::make_unique<IsolationConditionFormula>(
612 "ElecTightTrackOnly_lowPt",
614 "0.06*(x>50e3?1e9:x)", false, m_isoDecSuffix));
615 wp->addCut(std::make_unique<IsolationConditionFormula>(
616 "ElecTightTrackOnly_highPt",
618 "0.06*(x>50e3?x:1e9)", false, m_isoDecSuffix));
619 } else if (elWPname == "PflowTight_FixedRad") {
620 std::vector<xAOD::Iso::IsolationType> isoTypesHighPt{
623 std::vector<xAOD::Iso::IsolationType> isoTypesLowPt{
626 wp->addCut(std::make_unique<IsolationConditionCombined>(
627 "ElecPFlowTightLowPt", isoTypesLowPt,
628 std::make_unique<TF2>("pflowTFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
629 "0.045*(x>50e3?1e9:x)", m_isoDecSuffix));
630 wp->addCut(std::make_unique<IsolationConditionCombined>(
631 "ElecPFlowTightHighPt", isoTypesHighPt,
632 std::make_unique<TF2>("pflowTFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
633 "0.045*(x>50e3?x:1e9)", m_isoDecSuffix));
634 } else if (elWPname == "PflowTight") {
635 std::vector<xAOD::Iso::IsolationType> isoTypes{
638 wp->addCut(std::make_unique<IsolationConditionCombined>(
639 "ElecPFlowTight", isoTypes,
640 std::make_unique<TF2>("pflowLFunction", "fabs(x)+0.4*(y>0?y:0)"),
641 "0.045*x", m_isoDecSuffix));
642 } else if (elWPname == "PflowLoose_FixedRad") {
643 std::vector<xAOD::Iso::IsolationType> isoTypesHighPt{
646 std::vector<xAOD::Iso::IsolationType> isoTypesLowPt{
649 wp->addCut(std::make_unique<IsolationConditionCombined>(
650 "ElecPFlowLooseLowPt", isoTypesLowPt,
651 std::make_unique<TF2>("pflowLFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
652 "0.16*(x>50e3?1e9:x)", m_isoDecSuffix));
653 wp->addCut(std::make_unique<IsolationConditionCombined>(
654 "ElecPFlowLooseHighPt", isoTypesHighPt,
655 std::make_unique<TF2>("pflowLFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
656 "0.16*(x>50e3?x:1e9)", m_isoDecSuffix));
657 } else if (elWPname == "PflowLoose") {
658 std::vector<xAOD::Iso::IsolationType> isoTypes{
661 wp->addCut(std::make_unique<IsolationConditionCombined>(
662 "ElecPFlowLoose", isoTypes,
663 std::make_unique<TF2>("pflowLFunction", "fabs(x)+0.4*(y>0?y:0)"),
664 "0.16*x", m_isoDecSuffix));
665 } else if (elWPname == "isolPLITVeryTightRun3" ||
666 elWPname == "isolPLITTightRun3" ||
667 elWPname == "isolPLITVeryLooseRun3" ||
668 elWPname == "isolPLITVeryTightRun2" ||
669 elWPname == "isolPLITTightRun2" ||
670 elWPname == "isolPLITVeryLooseRun2"
671 ) {
672 // open the file path to read out WP definition file
673 // if (!m_filePathName.empty()) { should never be empty --> default value
674 std::string filename =
675 PathResolverFindCalibFile(m_filePathName + "/" + elWPname + ".root");
676
677 ATH_MSG_INFO("Reading input file " << elWPname << " from " << m_filePathName
678 << " " << filename << ": " << (m_filePathName + "/" + elWPname + ".root"));
679 m_WPdefinitionFile = std::make_unique<TFile>(filename.c_str(), "READ");
680
681 if (!m_WPdefinitionFile || m_WPdefinitionFile->IsZombie()) {
682 ATH_MSG_ERROR("Error opening file " << filename);
683 return StatusCode::FAILURE;
684 }
685
686 // read out histograms/graphs
687 TH1F* binning = dynamic_cast<TH1F*>(m_WPdefinitionFile->Get("binning"));
688 if (!binning) {
690 "Could not retrieve binning histogram in filename=" << filename);
691 return StatusCode::FAILURE;
692 }
693
694 std::vector<std::unique_ptr<TGraph>> cutGraphUPtr;
695
696 TIter nextkey(m_WPdefinitionFile->GetListOfKeys());
697 TKey* key;
698
699 while ((key = (TKey*)nextkey())) {
700 TObject* obj = key->ReadObj();
701 if (obj->InheritsFrom(TGraph::Class())) {
702 std::unique_ptr<TGraph> graph(static_cast<TGraph*>(obj));
703 cutGraphUPtr.push_back(std::move(graph));
704
705 // keep this as hint on how to read out RunNumber validity
706 // TObjArray* tokens = Obj_name.Tokenize("_");
707 // int n = tokens->GetEntries();
708 // double min_runnumber = ((TObjString*)tokens->At(n -
709 // 4))->GetString().Atof(); double max_runnumber =
710 // ((TObjString*)tokens->At(n - 3))->GetString().Atof();
711 }
712 }
713
714 static const std::vector<std::string> isoTypes = {"PLIT_PLITel_pelxpromp",
715 "PLIT_PLITel_pnpxall"};
716
717 if (elWPname == "isolPLITVeryTightRun3") {
718 wp->addCut(std::make_unique<IsolationConditionGraph>(
719 "isolPLITVeryTightRun3", isoTypes,
720 std::make_unique<TF2>("elePLIT", "TMath::Log(x / y)"), std::move(cutGraphUPtr),
721 std::make_unique<TH1F>(*binning), m_isoDecSuffix.value(), false));
722 } else if (elWPname == "isolPLITTightRun3") {
723 wp->addCut(std::make_unique<IsolationConditionGraph>(
724 "isolPLITTightRun3", isoTypes,
725 std::make_unique<TF2>("elePLIT", "TMath::Log(x / y)"), std::move(cutGraphUPtr),
726 std::make_unique<TH1F>(*binning), m_isoDecSuffix.value(), false));
727 } else if (elWPname == "isolPLITVeryLooseRun3") {
728 wp->addCut(std::make_unique<IsolationConditionGraph>(
729 "isolPLITVeryLooseRun3", isoTypes,
730 std::make_unique<TF2>("elePLIT", "TMath::Log(x / y)"), std::move(cutGraphUPtr),
731 std::make_unique<TH1F>(*binning), m_isoDecSuffix.value(), false));
732 }
733 else if (elWPname == "isolPLITVeryTightRun2") {
734 wp->addCut(std::make_unique<IsolationConditionGraph>(
735 "isolPLITVeryTightRun2", isoTypes,
736 std::make_unique<TF2>("elePLIT", "TMath::Log(x / y)"), std::move(cutGraphUPtr),
737 std::make_unique<TH1F>(*binning), m_isoDecSuffix.value(), false));
738 } else if (elWPname == "isolPLITTightRun2") {
739 wp->addCut(std::make_unique<IsolationConditionGraph>(
740 "isolPLITTightRun2", isoTypes,
741 std::make_unique<TF2>("elePLIT", "TMath::Log(x / y)"), std::move(cutGraphUPtr),
742 std::make_unique<TH1F>(*binning), m_isoDecSuffix.value(), false));
743 } else if (elWPname == "isolPLITVeryLooseRun2") {
744 wp->addCut(std::make_unique<IsolationConditionGraph>(
745 "isolPLITVeryLooseRun2", isoTypes,
746 std::make_unique<TF2>("elePLIT", "TMath::Log(x / y)"), std::move(cutGraphUPtr),
747 std::make_unique<TH1F>(*binning), m_isoDecSuffix.value(), false));
748 }
749 else {
750 ATH_MSG_ERROR("Unknown electron isolation WP: " << elWPname);
751 return StatusCode::FAILURE;
752 }
753 } else {
754 ATH_MSG_ERROR("Unknown electron isolation WP: " << elWPname);
755 return StatusCode::FAILURE;
756 }
757
758 m_electronAccept.addCut(wp->name(), wp->name());
759#ifndef XAOD_STANDALONE
761#endif
762 m_elWPs.push_back(std::move(wp));
763
764 // Return gracefully:
765 return StatusCode::SUCCESS;
766}
#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 179 of file IsolationSelectionTool.cxx.

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

531 {
532 std::unique_ptr<IsolationWP> wp = std::make_unique<IsolationWP>(phWPname);
533 if (phWPname == "TightCaloOnly") {
534 wp->addCut(std::make_unique<IsolationConditionFormula>(
535 "PhFixedCut_calo40", xAOD::Iso::topoetcone40, "0.022*x+2450", false,
537 } else if (phWPname == "FixedCutTight") {
538 wp->addCut(std::make_unique<IsolationConditionFormula>(
539 "PhFixedCut_calo40", xAOD::Iso::topoetcone40, "0.022*x+2450", false,
541 wp->addCut(std::make_unique<IsolationConditionFormula>(
542 "PhFixedCut_track20", xAOD::Iso::ptcone20, "0.05*x", false,
544 } else if (phWPname == "FixedCutLoose") {
545 wp->addCut(std::make_unique<IsolationConditionFormula>(
546 "PhFixedCut_calo20", xAOD::Iso::topoetcone20, "0.065*x", false,
548 wp->addCut(std::make_unique<IsolationConditionFormula>(
549 "PhFixedCut_track20", xAOD::Iso::ptcone20, "0.05*x", false,
551 } else if (phWPname == "Tight") {
552 wp->addCut(std::make_unique<IsolationConditionFormula>(
553 "PhFixedCut_calo40", xAOD::Iso::topoetcone40, "0.022*x+2450", false,
555 wp->addCut(std::make_unique<IsolationConditionFormula>(
556 "PhFixedCut_Tighttrack20",
559 } else if (phWPname == "Loose") {
560 wp->addCut(std::make_unique<IsolationConditionFormula>(
561 "PhFixedCut_calo20", xAOD::Iso::topoetcone20, "0.065*x", false,
563 wp->addCut(std::make_unique<IsolationConditionFormula>(
564 "PhFixedCut_Tighttrack20",
567 } else {
568 ATH_MSG_ERROR("Unknown photon isolation WP: " << phWPname);
569 return StatusCode::FAILURE;
570 }
571
572 m_photonAccept.addCut(wp->name(), wp->name());
573#ifndef XAOD_STANDALONE
575#endif
576 m_phWPs.push_back(std::move(wp));
577
578 // Return gracefully:
579 return StatusCode::SUCCESS;
580}
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 768 of file IsolationSelectionTool.cxx.

771 {
772 std::vector<std::unique_ptr<IsolationWP>>* wps(nullptr);
773 asg::AcceptInfo* ac = nullptr;
774 if (ObjType == xAOD::Type::Electron) {
775 if (key == "")
776 key = m_elWPKey;
777 wps = &m_elWPs;
778 ac = &m_electronAccept;
779 } else if (ObjType == xAOD::Type::Muon) {
780 if (key == "")
781 key = m_muWPKey;
782 wps = &m_muWPs;
783 ac = &m_muonAccept;
784 } else if (ObjType == xAOD::Type::Photon) {
785 if (key == "")
786 key = m_phWPKey;
787 wps = &m_phWPs;
788 ac = &m_photonAccept;
789 } else if (ObjType == xAOD::Type::Other) {
790 if (key == "")
791 return StatusCode::FAILURE;
792 wps = &m_objWPs;
793 ac = &m_objAccept;
794 } else {
795 return StatusCode::FAILURE;
796 }
797
798 std::unique_ptr<IsolationWP> wp = std::make_unique<IsolationWP>(WPname);
799 if (type == Efficiency) {
800 for (auto& c : cuts)
801 ATH_CHECK(addCutToWP(wp.get(), key, c.first, c.second));
802 } else if (type == Cut) {
803 for (auto& c : cuts)
804 wp->addCut(std::make_unique<IsolationConditionFormula>(
805 xAOD::Iso::toCString(c.first), c.first, c.second));
806 } else {
807 ATH_MSG_ERROR("Unknown isolation WP type -- should not happen.");
808 return StatusCode::FAILURE;
809 }
810
811 ac->addCut(wp->name(), wp->name());
812 wps->push_back(std::move(wp));
813 return StatusCode::SUCCESS;
814}
#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 816 of file IsolationSelectionTool.cxx.

817 {
818 if (ObjType == xAOD::Type::Electron) {
819 return addElectronWP(WP);
820 } else if (ObjType == xAOD::Type::Muon) {
821 return addMuonWP(WP);
822 } else if (ObjType == xAOD::Type::Photon) {
823 return addPhotonWP(WP);
824 }
825
826 return StatusCode::FAILURE;
827}
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 828 of file IsolationSelectionTool.cxx.

829 {
830 if (ObjType == xAOD::Type::Electron) {
831 m_electronAccept.addCut(wp->name(), wp->name());
832 m_elWPs.push_back(std::move(wp));
833 } else if (ObjType == xAOD::Type::Muon) {
834 m_muonAccept.addCut(wp->name(), wp->name());
835 m_muWPs.push_back(std::move(wp));
836
837 } else if (ObjType == xAOD::Type::Photon) {
838 m_photonAccept.addCut(wp->name(), wp->name());
839 m_phWPs.push_back(std::move(wp));
840
841 } else if (ObjType == xAOD::Type::Other) {
842 m_objAccept.addCut(wp->name(), wp->name());
843 m_objWPs.push_back(std::move(wp));
844 } else {
845 return StatusCode::FAILURE;
846 }
847
848 return StatusCode::SUCCESS;
849}

◆ 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 938 of file IsolationSelectionTool.cxx.

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

◆ 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 851 of file IsolationSelectionTool.cxx.

853 {
854 accept.clear();
855 for (const std::unique_ptr<IsolationWP>& i : WP) {
856 if (i->accept(x))
857 accept.setCutResult(i->name(), true);
858 }
859}

◆ 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 927 of file IsolationSelectionTool.cxx.

927 {
928 return m_electronAccept;
929}

◆ getElectronWPs()

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

Implements CP::IIsolationSelectionTool.

Definition at line 29 of file IsolationSelectionTool.cxx.

29 {
30 return m_elWPs;
31}

◆ getKey()

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

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

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

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

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

Definition at line 119 of file AsgTool.cxx.

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

◆ getMuonAcceptInfo()

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

Implements CP::IIsolationSelectionTool.

Definition at line 931 of file IsolationSelectionTool.cxx.

931 {
932 return m_muonAccept;
933}

◆ getMuonWPs()

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

Implements CP::IIsolationSelectionTool.

Definition at line 25 of file IsolationSelectionTool.cxx.

25 {
26 return m_muWPs;
27}

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

◆ getObjAcceptInfo()

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

Implements CP::IIsolationSelectionTool.

Definition at line 934 of file IsolationSelectionTool.cxx.

934 {
935 return m_objAccept;
936}

◆ getObjWPs()

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

Implements CP::IIsolationSelectionTool.

Definition at line 37 of file IsolationSelectionTool.cxx.

37 {
38 return m_objWPs;
39}

◆ getPhotonAcceptInfo()

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

Implements CP::IIsolationSelectionTool.

Definition at line 923 of file IsolationSelectionTool.cxx.

923 {
924 return m_photonAccept;
925}

◆ getPhotonWPs()

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

Implements CP::IIsolationSelectionTool.

Definition at line 33 of file IsolationSelectionTool.cxx.

33 {
34 return m_phWPs;
35}

◆ 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 42 of file IsolationSelectionTool.cxx.

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

◆ setIParticleCutsFrom()

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

Implements CP::IIsolationSelectionTool.

Definition at line 122 of file IsolationSelectionTool.cxx.

123 {
124 if (ObjType == xAOD::Type::Electron) {
127 } else if (ObjType == xAOD::Type::Muon) {
130 } else if (ObjType == xAOD::Type::Photon) {
133 } else {
134 return StatusCode::FAILURE;
135 }
136
137 return StatusCode::SUCCESS;
138}

◆ sysInitialize()

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

Perform system initialization for an algorithm.

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

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

◆ sysStart()

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

Handle START transition.

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

◆ 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

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 393 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 390 of file AthCommonDataStore.h.

◆ m_filePathName

Gaudi::Property<std::string> CP::IsolationSelectionTool::m_filePathName {this, "filePathName", "ElectronIsolationSelection/2022_2025/v1/", " 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/v1/", " 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 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_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: