CMS 3D CMS Logo

PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc
Go to the documentation of this file.
4 
6 public:
8 
9  result_type operator()(const reco::PhotonPtr&) const final;
10 
12  void getEventContent(const edm::EventBase&) final;
13 
14  double value(const reco::CandidatePtr& cand) const final;
15 
17 
18 private:
19  // Cut values
20  float _C1_EB;
21  float _C2_EB;
22  float _C3_EB;
23  float _C1_EE;
24  float _C2_EE;
25  // Configuration
28  // Effective area constants
30  // The isolations computed upstream
32  // The rho
34 
35  constexpr static char anyPFIsoWithEA_[] = "anyPFIsoWithEA";
36  constexpr static char rhoString_[] = "rho";
37 };
38 
41 
42 DEFINE_EDM_PLUGIN(CutApplicatorFactory, PhoAnyPFIsoWithEAAndExpoScalingEBCut, "PhoAnyPFIsoWithEAAndExpoScalingEBCut");
43 
46  _C1_EB(c.getParameter<double>("C1_EB")),
47  _C2_EB(c.getParameter<double>("C2_EB")),
48  _C3_EB(c.getParameter<double>("C3_EB")),
49  _C1_EE(c.getParameter<double>("C1_EE")),
50  _C2_EE(c.getParameter<double>("C2_EE")),
51  _barrelCutOff(c.getParameter<double>("barrelCutOff")),
52  _useRelativeIso(c.getParameter<bool>("useRelativeIso")),
53  _effectiveAreas((c.getParameter<edm::FileInPath>("effAreasConfigFile")).fullPath()) {
54  edm::InputTag maptag = c.getParameter<edm::InputTag>("anyPFIsoMap");
55  contentTags_.emplace(anyPFIsoWithEA_, maptag);
56 
57  edm::InputTag rhoTag = c.getParameter<edm::InputTag>("rho");
58  contentTags_.emplace(rhoString_, rhoTag);
59 }
60 
62  auto anyPFIsoWithEA = cc.consumes<edm::ValueMap<float> >(contentTags_[anyPFIsoWithEA_]);
63  contentTokens_.emplace(anyPFIsoWithEA_, anyPFIsoWithEA);
64 
65  auto rho = cc.consumes<double>(contentTags_[rhoString_]);
66  contentTokens_.emplace(rhoString_, rho);
67 }
68 
71  ev.getByLabel(contentTags_[rhoString_], _rhoHandle);
72 }
73 
75  // in case we are by-value
76  const std::string& inst_name = contentTags_.find(anyPFIsoWithEA_)->second.instance();
78  float anyisoval = -1.0;
79  if (_anyPFIsoMap.isValid() && _anyPFIsoMap->contains(cand.id())) {
80  anyisoval = (*_anyPFIsoMap)[cand];
81  } else if (_anyPFIsoMap.isValid() && _anyPFIsoMap->idSize() == 1 && cand.id() == edm::ProductID()) {
82  // in case we have spoofed a ptr
83  //note this must be a 1:1 valuemap (only one product input)
84  anyisoval = _anyPFIsoMap->begin()[cand.key()];
85  } else if (_anyPFIsoMap.isValid()) { // throw an exception
86  anyisoval = (*_anyPFIsoMap)[cand];
87  }
88 
89  // Figure out the cut value
90  // The value is generally pt-dependent: C1 + pt * C2
91  const float pt = cand->pt();
92 
93  // In this version of the isolation cut we apply
94  // exponential pt scaling to the barrel isolation cut,
95  // and linear pt scaling to the endcap isolation cut.
96  double absEta = std::abs(cand->superCluster()->eta());
97  const float isolationCutValue = (absEta < _barrelCutOff ? _C1_EB + exp(pt * _C2_EB + _C3_EB) : _C1_EE + pt * _C2_EE);
98 
99  // Retrieve the variable value for this particle
100  float anyPFIso = _anyPFIsoMap.isValid() ? anyisoval : pat->userFloat(inst_name);
101 
102  // Apply pile-up correction
103  double eA = _effectiveAreas.getEffectiveArea(absEta);
104  double rho = *_rhoHandle;
105  float anyPFIsoWithEA = std::max(0.0, anyPFIso - rho * eA);
106 
107  // Divide by pT if the relative isolation is requested
108  if (_useRelativeIso)
109  anyPFIsoWithEA /= pt;
110 
111  // Apply the cut and return the result
112  return anyPFIsoWithEA < isolationCutValue;
113 }
114 
116  reco::PhotonPtr pho(cand);
117 
118  // in case we are by-value
119  const std::string& inst_name = contentTags_.find(anyPFIsoWithEA_)->second.instance();
121  float anyisoval = -1.0;
122  if (_anyPFIsoMap.isValid() && _anyPFIsoMap->contains(cand.id())) {
123  anyisoval = (*_anyPFIsoMap)[cand];
124  } else if (_anyPFIsoMap.isValid() && _anyPFIsoMap->idSize() == 1 && cand.id() == edm::ProductID()) {
125  // in case we have spoofed a ptr
126  //note this must be a 1:1 valuemap (only one product input)
127  anyisoval = _anyPFIsoMap->begin()[cand.key()];
128  } else if (_anyPFIsoMap.isValid()) { // throw an exception
129  anyisoval = (*_anyPFIsoMap)[cand];
130  }
131 
132  // Figure out the cut value
133  // The value is generally pt-dependent: C1 + pt * C2
134  const float pt = pho->pt();
135 
136  // In this version of the isolation cut we apply
137  // exponential pt scaling to the barrel isolation cut,
138  // and linear pt scaling to the endcap isolation cut.
139  double absEta = std::abs(pho->superCluster()->eta());
140 
141  // Retrieve the variable value for this particle
142  float anyPFIso = _anyPFIsoMap.isValid() ? anyisoval : pat->userFloat(inst_name);
143 
144  // Apply pile-up correction
145  double eA = _effectiveAreas.getEffectiveArea(absEta);
146  double rho = *_rhoHandle;
147  float anyPFIsoWithEA = std::max(0.0, anyPFIso - rho * eA);
148 
149  // Divide by pT if the relative isolation is requested
150  if (_useRelativeIso)
151  anyPFIsoWithEA /= pt;
152 
153  // Apply the cut and return the result
154  return anyPFIsoWithEA;
155 }
electrons_cff.bool
bool
Definition: electrons_cff.py:366
CutApplicatorBase::PHOTON
Definition: CutApplicatorBase.h:47
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
contentValuesFiles.fullPath
fullPath
Definition: contentValuesFiles.py:64
edm
HLT enums.
Definition: AlignableModifier.h:19
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_rhoHandle
edm::Handle< double > _rhoHandle
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:33
PhoAnyPFIsoWithEAAndExpoScalingEBCut::setConsumes
void setConsumes(edm::ConsumesCollector &) final
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:61
PhoAnyPFIsoWithEAAndExpoScalingEBCut::rhoString_
constexpr static char rhoString_[]
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:36
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_C2_EE
float _C2_EE
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:24
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_useRelativeIso
bool _useRelativeIso
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:27
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_C1_EB
float _C1_EB
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:20
EffectiveAreas.h
watchdog.const
const
Definition: watchdog.py:83
edm::Handle
Definition: AssociativeIterator.h:50
PhoAnyPFIsoWithEAAndExpoScalingEBCut::candidateType
CandidateType candidateType() const final
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:16
CutApplicatorWithEventContentBase::contentTags_
std::unordered_map< std::string, edm::InputTag > contentTags_
Definition: CutApplicatorWithEventContentBase.h:35
HLT_FULL_cff.rhoTag
rhoTag
Definition: HLT_FULL_cff.py:14990
candidate_functions::CandidateCut::result_type
bool result_type
Definition: CandidateCut.h:11
Photon.h
EffectiveAreas
Definition: EffectiveAreas.h:7
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_C3_EB
float _C3_EB
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:22
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_C2_EB
float _C2_EB
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:21
CutApplicatorWithEventContentBase.h
DEFINE_EDM_PLUGIN
#define DEFINE_EDM_PLUGIN(factory, type, name)
Definition: PluginFactory.h:124
DDAxes::rho
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
PhoAnyPFIsoWithEAAndExpoScalingEBCut
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:5
edm::ParameterSet
Definition: ParameterSet.h:47
CutApplicatorBase::CandidateType
CandidateType
Definition: CutApplicatorBase.h:47
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
PhoAnyPFIsoWithEAAndExpoScalingEBCut::operator()
result_type operator()(const reco::PhotonPtr &) const final
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:74
edmplugin::PluginFactory
Definition: PluginFactory.h:34
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_anyPFIsoMap
edm::Handle< edm::ValueMap< float > > _anyPFIsoMap
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:31
edm::ValueMap::begin
const_iterator begin() const
Definition: ValueMap.h:229
cand
Definition: decayParser.h:32
PhoAnyPFIsoWithEAAndExpoScalingEBCut::value
double value(const reco::CandidatePtr &cand) const final
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:115
PhoAnyPFIsoWithEAAndExpoScalingEBCut::PhoAnyPFIsoWithEAAndExpoScalingEBCut
PhoAnyPFIsoWithEAAndExpoScalingEBCut(const edm::ParameterSet &c)
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:44
pat
Definition: HeavyIon.h:7
cc
edm::Ptr
Definition: AssociationVector.h:31
PhoAnyPFIsoWithEAAndExpoScalingEBCut::getEventContent
void getEventContent(const edm::EventBase &) final
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:69
edm::ValueMap::idSize
size_t idSize() const
Definition: ValueMap.h:157
edm::ValueMap< float >
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
CutApplicatorWithEventContentBase::contentTokens_
std::unordered_map< std::string, edm::EDGetToken > contentTokens_
Definition: CutApplicatorWithEventContentBase.h:40
edm::EventBase
Definition: EventBase.h:46
EffectiveAreas::getEffectiveArea
const float getEffectiveArea(float eta) const
Definition: EffectiveAreas.cc:44
PhoAnyPFIsoWithEAAndExpoScalingEBCut::anyPFIsoWithEA_
constexpr static char anyPFIsoWithEA_[]
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:35
edm::ValueMap::contains
bool contains(ProductID id) const
Definition: ValueMap.h:155
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
c
auto & c
Definition: CAHitNtupletGeneratorKernelsImpl.h:46
JetChargeProducer_cfi.exp
exp
Definition: JetChargeProducer_cfi.py:6
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_barrelCutOff
float _barrelCutOff
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:26
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_C1_EE
float _C1_EE
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:23
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
edm::ProductID
Definition: ProductID.h:27
CutApplicatorWithEventContentBase
Definition: CutApplicatorWithEventContentBase.h:19
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_effectiveAreas
EffectiveAreas _effectiveAreas
Definition: PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:29