CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Attributes
EGRegressionModifierV1 Class Reference
Inheritance diagram for EGRegressionModifierV1:
ModifyObjectValueBase

Classes

struct  CondNames
 

Public Member Functions

 EGRegressionModifierV1 (const edm::ParameterSet &conf, edm::ConsumesCollector &cc)
 
void modifyObject (reco::GsfElectron &) const final
 
void modifyObject (reco::Photon &) const final
 
void modifyObject (pat::Electron &ele) const final
 
void modifyObject (pat::Photon &pho) const final
 
void setEvent (const edm::Event &) final
 
void setEventContent (const edm::EventSetup &) final
 
- Public Member Functions inherited from ModifyObjectValueBase
virtual void modifyObject (reco::Muon &) const
 
virtual void modifyObject (reco::BaseTau &) const
 
virtual void modifyObject (reco::Jet &) const
 
virtual void modifyObject (pat::Muon &) const
 
virtual void modifyObject (pat::Tau &) const
 
virtual void modifyObject (pat::Jet &) const
 
 ModifyObjectValueBase (const edm::ParameterSet &conf)
 
const std::string & name () const
 
virtual ~ModifyObjectValueBase ()
 

Private Attributes

const bool applyExtraHighEnergyProtection_
 
const bool autoDetectBunchSpacing_
 
int bunchspacing_
 
edm::EDGetTokenT< unsigned int > bunchSpacingToken_
 
edm::ESHandle< CaloGeometrycaloGeomH_
 
std::string condNamesWeight25ns_
 
std::string condNamesWeight50ns_
 
CondNames eleCondNames_
 
std::vector< const GBRForestD * > eleForestsMean_
 
std::vector< const GBRForestD * > eleForestsSigma_
 
const GBRForestepForest_
 
int nVtx_
 
CondNames phoCondNames_
 
std::vector< const GBRForestD * > phoForestsMean_
 
std::vector< const GBRForestD * > phoForestsSigma_
 
edm::EDGetTokenT< double > rhoToken_
 
float rhoValue_
 
edm::Handle< reco::VertexCollectionvtxH_
 
edm::EDGetTokenT< reco::VertexCollectionvtxToken_
 

Detailed Description

Definition at line 18 of file EGRegressionModifierV1.cc.

Constructor & Destructor Documentation

EGRegressionModifierV1::EGRegressionModifierV1 ( const edm::ParameterSet conf,
edm::ConsumesCollector cc 
)

Definition at line 66 of file EGRegressionModifierV1.cc.

References autoDetectBunchSpacing_, bunchSpacingToken_, condNamesWeight25ns_, condNamesWeight50ns_, edm::ConsumesCollector::consumes(), eleCondNames_, pwdgSkimBPark_cfi::electrons, edm::ParameterSet::getParameter(), EGRegressionModifierV1::CondNames::mean50ns, phoCondNames_, BPHMonitor_cfi::photons, and AlCaHLTBitMon_QueryRunRegistry::string.

67  : ModifyObjectValueBase(conf),
68  autoDetectBunchSpacing_(conf.getParameter<bool>("autoDetectBunchSpacing")),
69  bunchspacing_(autoDetectBunchSpacing_ ? 450 : conf.getParameter<int>("manualBunchSpacing")),
70  rhoToken_(cc.consumes<double>(conf.getParameter<edm::InputTag>("rhoCollection"))),
71  vtxToken_(cc.consumes<reco::VertexCollection>(conf.getParameter<edm::InputTag>("vertexCollection"))),
72  applyExtraHighEnergyProtection_(conf.getParameter<bool>("applyExtraHighEnergyProtection")) {
74  bunchSpacingToken_ = cc.consumes<unsigned int>(conf.getParameter<edm::InputTag>("bunchSpacingTag"));
75 
76  const edm::ParameterSet& electrons = conf.getParameter<edm::ParameterSet>("electron_config");
77  eleCondNames_ = CondNames{.mean50ns = electrons.getParameter<std::vector<std::string>>("regressionKey_50ns"),
78  .sigma50ns = electrons.getParameter<std::vector<std::string>>("uncertaintyKey_50ns"),
79  .mean25ns = electrons.getParameter<std::vector<std::string>>("regressionKey_25ns"),
80  .sigma25ns = electrons.getParameter<std::vector<std::string>>("uncertaintyKey_25ns")};
81  condNamesWeight50ns_ = electrons.getParameter<std::string>("combinationKey_50ns");
82  condNamesWeight25ns_ = electrons.getParameter<std::string>("combinationKey_25ns");
83 
84  const edm::ParameterSet& photons = conf.getParameter<edm::ParameterSet>("photon_config");
85  phoCondNames_ = CondNames{.mean50ns = photons.getParameter<std::vector<std::string>>("regressionKey_50ns"),
86  .sigma50ns = photons.getParameter<std::vector<std::string>>("uncertaintyKey_50ns"),
87  .mean25ns = photons.getParameter<std::vector<std::string>>("regressionKey_25ns"),
88  .sigma25ns = photons.getParameter<std::vector<std::string>>("uncertaintyKey_25ns")};
89 }
edm::EDGetTokenT< reco::VertexCollection > vtxToken_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
edm::EDGetTokenT< double > rhoToken_
ModifyObjectValueBase(const edm::ParameterSet &conf)
edm::EDGetTokenT< unsigned int > bunchSpacingToken_

Member Function Documentation

void EGRegressionModifierV1::modifyObject ( reco::GsfElectron ele) const
finalvirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 121 of file EGRegressionModifierV1.cc.

References funct::abs(), applyExtraHighEnergyProtection_, caloGeomH_, reco::GsfElectron::classification(), constexpr, reco::GsfElectron::correctMomentum(), reco::deltaPhi(), reco::deltaR(), reco::GsfElectron::ecalDriven(), eleForestsMean_, eleForestsSigma_, reco::CaloCluster::energy(), EgHLTOffHistBins_cfi::eOverP, SiStripBadComponentsDQMServiceTemplate_cfg::ep, epForest_, reco::CaloCluster::eta(), GBRForest::GetResponse(), createfilelist::int, edm::Ref< C, T, F >::isAvailable(), reco::GsfElectron::isEB(), egammaTools::localEcalClusterCoordsEB(), egammaTools::localEcalClusterCoordsEE(), SiStripPI::max, jets_cff::maxDR, SiStripPI::mean, nVtx_, reco::GsfElectron::p4(), reco::CaloCluster::phi(), reco::GsfElectron::setCorrectedEcalEnergy(), reco::GsfElectron::setCorrectedEcalEnergyError(), reco::GsfElectron::showerShape(), mathSSE::sqrt(), reco::GsfElectron::superCluster(), reco::GsfElectron::trackerDrivenSeed(), reco::GsfElectron::trackMomentumAtVtx(), reco::GsfElectron::trackMomentumError(), and mps_merge::weight.

121  {
122  // regression calculation needs no additional valuemaps
123 
124  const reco::SuperClusterRef& superClus = ele.superCluster();
125  const edm::Ptr<reco::CaloCluster>& theseed = superClus->seed();
126  const int numberOfClusters = superClus->clusters().size();
127  const bool missing_clusters = !superClus->clusters()[numberOfClusters - 1].isAvailable();
128 
129  if (missing_clusters)
130  return; // do not apply corrections in case of missing info (slimmed MiniAOD electrons)
131 
132  std::array<float, 33> eval;
133  const double rawEnergy = superClus->rawEnergy();
134  const auto& ess = ele.showerShape();
135 
136  // SET INPUTS
137  eval[0] = nVtx_;
138  eval[1] = rawEnergy;
139  eval[2] = superClus->eta();
140  eval[3] = superClus->phi();
141  eval[4] = superClus->etaWidth();
142  eval[5] = superClus->phiWidth();
143  eval[6] = ess.r9;
144  eval[7] = theseed->energy() / rawEnergy;
145  eval[8] = ess.eMax / rawEnergy;
146  eval[9] = ess.e2nd / rawEnergy;
147  eval[10] = (ess.eLeft + ess.eRight != 0.f ? (ess.eLeft - ess.eRight) / (ess.eLeft + ess.eRight) : 0.f);
148  eval[11] = (ess.eTop + ess.eBottom != 0.f ? (ess.eTop - ess.eBottom) / (ess.eTop + ess.eBottom) : 0.f);
149  eval[12] = ess.sigmaIetaIeta;
150  eval[13] = ess.sigmaIetaIphi;
151  eval[14] = ess.sigmaIphiIphi;
152  eval[15] = std::max(0, numberOfClusters - 1);
153 
154  // calculate sub-cluster variables
155  std::vector<float> clusterRawEnergy;
156  clusterRawEnergy.resize(std::max(3, numberOfClusters), 0);
157  std::vector<float> clusterDEtaToSeed;
158  clusterDEtaToSeed.resize(std::max(3, numberOfClusters), 0);
159  std::vector<float> clusterDPhiToSeed;
160  clusterDPhiToSeed.resize(std::max(3, numberOfClusters), 0);
161  float clusterMaxDR = 999.;
162  float clusterMaxDRDPhi = 999.;
163  float clusterMaxDRDEta = 999.;
164  float clusterMaxDRRawEnergy = 0.;
165 
166  size_t iclus = 0;
167  float maxDR = 0;
168  // loop over all clusters that aren't the seed
169  for (auto const& pclus : superClus->clusters()) {
170  if (theseed == pclus)
171  continue;
172  clusterRawEnergy[iclus] = pclus->energy();
173  clusterDPhiToSeed[iclus] = reco::deltaPhi(pclus->phi(), theseed->phi());
174  clusterDEtaToSeed[iclus] = pclus->eta() - theseed->eta();
175 
176  // find cluster with max dR
177  const auto the_dr = reco::deltaR(*pclus, *theseed);
178  if (the_dr > maxDR) {
179  maxDR = the_dr;
180  clusterMaxDR = maxDR;
181  clusterMaxDRDPhi = clusterDPhiToSeed[iclus];
182  clusterMaxDRDEta = clusterDEtaToSeed[iclus];
183  clusterMaxDRRawEnergy = clusterRawEnergy[iclus];
184  }
185  ++iclus;
186  }
187 
188  eval[16] = clusterMaxDR;
189  eval[17] = clusterMaxDRDPhi;
190  eval[18] = clusterMaxDRDEta;
191  eval[19] = clusterMaxDRRawEnergy / rawEnergy;
192  eval[20] = clusterRawEnergy[0] / rawEnergy;
193  eval[21] = clusterRawEnergy[1] / rawEnergy;
194  eval[22] = clusterRawEnergy[2] / rawEnergy;
195  eval[23] = clusterDPhiToSeed[0];
196  eval[24] = clusterDPhiToSeed[1];
197  eval[25] = clusterDPhiToSeed[2];
198  eval[26] = clusterDEtaToSeed[0];
199  eval[27] = clusterDEtaToSeed[1];
200  eval[28] = clusterDEtaToSeed[2];
201 
202  // calculate coordinate variables
203  const bool isEB = ele.isEB();
204  float dummy;
205  int iPhi;
206  int iEta;
207  float cryPhi;
208  float cryEta;
209  if (ele.isEB())
210  egammaTools::localEcalClusterCoordsEB(*theseed, *caloGeomH_, cryEta, cryPhi, iEta, iPhi, dummy, dummy);
211  else
212  egammaTools::localEcalClusterCoordsEE(*theseed, *caloGeomH_, cryEta, cryPhi, iEta, iPhi, dummy, dummy);
213 
214  if (isEB) {
215  eval[29] = cryEta;
216  eval[30] = cryPhi;
217  eval[31] = iEta;
218  eval[32] = iPhi;
219  } else {
220  eval[29] = superClus->preshowerEnergy() / superClus->rawEnergy();
221  }
222 
223  //magic numbers for MINUIT-like transformation of BDT output onto limited range
224  //(These should be stored inside the conditions object in the future as well)
225  constexpr double meanlimlow = 0.2;
226  constexpr double meanlimhigh = 2.0;
227  constexpr double meanoffset = meanlimlow + 0.5 * (meanlimhigh - meanlimlow);
228  constexpr double meanscale = 0.5 * (meanlimhigh - meanlimlow);
229 
230  constexpr double sigmalimlow = 0.0002;
231  constexpr double sigmalimhigh = 0.5;
232  constexpr double sigmaoffset = sigmalimlow + 0.5 * (sigmalimhigh - sigmalimlow);
233  constexpr double sigmascale = 0.5 * (sigmalimhigh - sigmalimlow);
234 
235  const int coridx = isEB ? 0 : 1;
236 
237  //these are the actual BDT responses
238  double rawmean = eleForestsMean_[coridx]->GetResponse(eval.data());
239  double rawsigma = eleForestsSigma_[coridx]->GetResponse(eval.data());
240 
241  //apply transformation to limited output range (matching the training)
242  double mean = meanoffset + meanscale * vdt::fast_sin(rawmean);
243  double sigma = sigmaoffset + sigmascale * vdt::fast_sin(rawsigma);
244 
245  //regression target is ln(Etrue/Eraw)
246  //so corrected energy is ecor=exp(mean)*e, uncertainty is exp(mean)*eraw*sigma=ecor*sigma
247  double ecor = mean * (eval[1]);
248  if (!isEB)
249  ecor = mean * (eval[1] + superClus->preshowerEnergy());
250  const double sigmacor = sigma * ecor;
251 
252  ele.setCorrectedEcalEnergy(ecor);
253  ele.setCorrectedEcalEnergyError(sigmacor);
254 
255  // E-p combination
256  std::array<float, 11> eval_ep;
257 
258  const float ep = ele.trackMomentumAtVtx().R();
259  const float tot_energy = superClus->rawEnergy() + superClus->preshowerEnergy();
260  const float momentumError = ele.trackMomentumError();
261  const float trkMomentumRelError = ele.trackMomentumError() / ep;
262  const float eOverP = tot_energy * mean / ep;
263  eval_ep[0] = tot_energy * mean;
264  eval_ep[1] = sigma / mean;
265  eval_ep[2] = ep;
266  eval_ep[3] = trkMomentumRelError;
267  eval_ep[4] = sigma / mean / trkMomentumRelError;
268  eval_ep[5] = tot_energy * mean / ep;
269  eval_ep[6] = tot_energy * mean / ep * sqrt(sigma / mean * sigma / mean + trkMomentumRelError * trkMomentumRelError);
270  eval_ep[7] = ele.ecalDriven();
271  eval_ep[8] = ele.trackerDrivenSeed();
272  eval_ep[9] = int(ele.classification()); //eleClass;
273  eval_ep[10] = isEB;
274 
275  // CODE FOR FUTURE SEMI_PARAMETRIC
276  //double rawweight = ep_forestsMean_[coridx]->GetResponse(eval_ep.data());
278  //double weight = meanoffset + meanscale*vdt::fast_sin(rawweight);
280 
281  // CODE FOR STANDARD BDT
282  double weight = 0.;
283  if (eOverP > 0.025 && std::abs(ep - ecor) < 15. * std::sqrt(momentumError * momentumError + sigmacor * sigmacor) &&
284  (!applyExtraHighEnergyProtection_ || ((momentumError < 10. * ep) || (ecor < 200.)))) {
285  // protection against crazy track measurement
286  weight = std::clamp(epForest_->GetResponse(eval_ep.data()), 0., 1.);
287  }
288 
289  double combinedMomentum = weight * ele.trackMomentumAtVtx().R() + (1. - weight) * ecor;
290  double combinedMomentumError = sqrt(weight * weight * ele.trackMomentumError() * ele.trackMomentumError() +
291  (1. - weight) * (1. - weight) * sigmacor * sigmacor);
292 
293  math::XYZTLorentzVector oldMomentum = ele.p4();
294  math::XYZTLorentzVector newMomentum(oldMomentum.x() * combinedMomentum / oldMomentum.t(),
295  oldMomentum.y() * combinedMomentum / oldMomentum.t(),
296  oldMomentum.z() * combinedMomentum / oldMomentum.t(),
297  combinedMomentum);
298 
299  ele.correctMomentum(newMomentum, ele.trackMomentumError(), combinedMomentumError);
300 }
double GetResponse(const float *vector) const
Definition: GBRForest.h:49
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:26
const ShowerShape & showerShape() const
Definition: GsfElectron.h:431
void localEcalClusterCoordsEB(const reco::CaloCluster &bclus, const CaloGeometry &geom, float &etacry, float &phicry, int &ieta, int &iphi, float &thetatilt, float &phitilt)
float trackMomentumError() const
Definition: GsfElectron.h:800
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:211
edm::ESHandle< CaloGeometry > caloGeomH_
void correctMomentum(const LorentzVector &p4, float trackMomentumError, float p4Error)
Definition: GsfElectron.h:821
math::XYZVectorF trackMomentumAtVtx() const
Definition: GsfElectron.h:268
Definition: weight.py:1
bool isAvailable() const
Definition: Ref.h:537
bool isEB() const
Definition: GsfElectron.h:328
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:180
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
void setCorrectedEcalEnergyError(float newEnergyError)
Definition: GsfElectron.cc:170
T sqrt(T t)
Definition: SSEVec.h:19
std::vector< const GBRForestD * > eleForestsSigma_
std::vector< const GBRForestD * > eleForestsMean_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double energy() const
cluster energy
Definition: CaloCluster.h:148
void localEcalClusterCoordsEE(const reco::CaloCluster &bclus, const CaloGeometry &geom, float &xcry, float &ycry, int &ix, int &iy, float &thetatilt, float &phitilt)
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:30
Classification classification() const
Definition: GsfElectron.h:722
void setCorrectedEcalEnergy(float newEnergy)
Definition: GsfElectron.cc:174
SuperClusterRef superCluster() const override
reference to a SuperCluster
Definition: GsfElectron.h:155
bool trackerDrivenSeed() const
Definition: GsfElectron.h:159
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:183
bool ecalDriven() const
Definition: GsfElectron.cc:168
#define constexpr
void EGRegressionModifierV1::modifyObject ( reco::Photon pho) const
finalvirtual

this is 1*abs(ieta)/ieta in original training

duplicated variables but this was trained like that

duplicated variables but this was trained like that

Reimplemented from ModifyObjectValueBase.

Definition at line 302 of file EGRegressionModifierV1.cc.

References funct::abs(), reco::deltaPhi(), reco::Photon::e5x5(), reco::CaloCluster::energy(), reco::CaloCluster::eta(), reco::Photon::hadronicOverEm(), LEDCalibrationChannels::ieta, LEDCalibrationChannels::iphi, edm::Ref< C, T, F >::isAvailable(), reco::Photon::isEB(), SiStripPI::max, SiStripPI::mean, nVtx_, reco::CaloCluster::phi(), phoForestsMean_, phoForestsSigma_, reco::Photon::r9(), rhoValue_, reco::CaloCluster::seed(), reco::Photon::setCorrectedEnergy(), reco::Photon::showerShapeVariables(), and reco::Photon::superCluster().

302  {
303  // regression calculation needs no additional valuemaps
304 
305  std::array<float, 35> eval;
306  const reco::SuperClusterRef& superClus = pho.superCluster();
307  const edm::Ptr<reco::CaloCluster>& theseed = superClus->seed();
308 
309  const int numberOfClusters = superClus->clusters().size();
310  const bool missing_clusters = !superClus->clusters()[numberOfClusters - 1].isAvailable();
311 
312  if (missing_clusters)
313  return; // do not apply corrections in case of missing info (slimmed MiniAOD electrons)
314 
315  const double rawEnergy = superClus->rawEnergy();
316  const auto& ess = pho.showerShapeVariables();
317 
318  // SET INPUTS
319  eval[0] = rawEnergy;
320  eval[1] = pho.r9();
321  eval[2] = superClus->etaWidth();
322  eval[3] = superClus->phiWidth();
323  eval[4] = std::max(0, numberOfClusters - 1);
324  eval[5] = pho.hadronicOverEm();
325  eval[6] = rhoValue_;
326  eval[7] = nVtx_;
327  eval[8] = theseed->eta() - superClus->position().Eta();
328  eval[9] = reco::deltaPhi(theseed->phi(), superClus->position().Phi());
329  eval[10] = theseed->energy() / rawEnergy;
330  eval[11] = ess.e3x3 / ess.e5x5;
331  eval[12] = ess.sigmaIetaIeta;
332  eval[13] = ess.sigmaIphiIphi;
333  eval[14] = ess.sigmaIetaIphi / (ess.sigmaIphiIphi * ess.sigmaIetaIeta);
334  eval[15] = ess.maxEnergyXtal / ess.e5x5;
335  eval[16] = ess.e2nd / ess.e5x5;
336  eval[17] = ess.eTop / ess.e5x5;
337  eval[18] = ess.eBottom / ess.e5x5;
338  eval[19] = ess.eLeft / ess.e5x5;
339  eval[20] = ess.eRight / ess.e5x5;
340  eval[21] = ess.e2x5Max / ess.e5x5;
341  eval[22] = ess.e2x5Left / ess.e5x5;
342  eval[23] = ess.e2x5Right / ess.e5x5;
343  eval[24] = ess.e2x5Top / ess.e5x5;
344  eval[25] = ess.e2x5Bottom / ess.e5x5;
345 
346  const bool isEB = pho.isEB();
347  if (isEB) {
348  EBDetId ebseedid(theseed->seed());
349  eval[26] = pho.e5x5() / theseed->energy();
350  int ieta = ebseedid.ieta();
351  int iphi = ebseedid.iphi();
352  eval[27] = ieta;
353  eval[28] = iphi;
354  int signieta = ieta > 0 ? +1 : -1;
355  eval[29] = (ieta - signieta) % 5;
356  eval[30] = (iphi - 1) % 2;
357  eval[31] = (abs(ieta) <= 25) * ((ieta - signieta)) + (abs(ieta) > 25) * ((ieta - 26 * signieta) % 20);
358  eval[32] = (iphi - 1) % 20;
359  eval[33] = ieta;
360  eval[34] = iphi;
361  } else {
362  EEDetId eeseedid(theseed->seed());
363  eval[26] = superClus->preshowerEnergy() / rawEnergy;
364  eval[27] = superClus->preshowerEnergyPlane1() / rawEnergy;
365  eval[28] = superClus->preshowerEnergyPlane2() / rawEnergy;
366  eval[29] = eeseedid.ix();
367  eval[30] = eeseedid.iy();
368  }
369 
370  //magic numbers for MINUIT-like transformation of BDT output onto limited range
371  //(These should be stored inside the conditions object in the future as well)
372  const double meanlimlow = 0.2;
373  const double meanlimhigh = 2.0;
374  const double meanoffset = meanlimlow + 0.5 * (meanlimhigh - meanlimlow);
375  const double meanscale = 0.5 * (meanlimhigh - meanlimlow);
376 
377  const double sigmalimlow = 0.0002;
378  const double sigmalimhigh = 0.5;
379  const double sigmaoffset = sigmalimlow + 0.5 * (sigmalimhigh - sigmalimlow);
380  const double sigmascale = 0.5 * (sigmalimhigh - sigmalimlow);
381 
382  const int coridx = isEB ? 0 : 1;
383 
384  //these are the actual BDT responses
385  const double rawmean = phoForestsMean_[coridx]->GetResponse(eval.data());
386  const double rawsigma = phoForestsSigma_[coridx]->GetResponse(eval.data());
387  //apply transformation to limited output range (matching the training)
388  const double mean = meanoffset + meanscale * vdt::fast_sin(rawmean);
389  const double sigma = sigmaoffset + sigmascale * vdt::fast_sin(rawsigma);
390 
391  //regression target is ln(Etrue/Eraw)
392  //so corrected energy is ecor=exp(mean)*e, uncertainty is exp(mean)*eraw*sigma=ecor*sigma
393  const double ecor = isEB ? mean * eval[0] : mean * (eval[0] + superClus->preshowerEnergy());
394 
395  const double sigmacor = sigma * ecor;
396  pho.setCorrectedEnergy(reco::Photon::P4type::regression2, ecor, sigmacor, true);
397 }
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:26
void setCorrectedEnergy(P4type type, float E, float dE, bool toCand=true)
float e5x5() const
Definition: Photon.h:234
reco::SuperClusterRef superCluster() const override
Ref to SuperCluster.
bool isAvailable() const
Definition: Ref.h:537
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:180
std::vector< const GBRForestD * > phoForestsMean_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double energy() const
cluster energy
Definition: CaloCluster.h:148
float hadronicOverEm() const
the total hadronic over electromagnetic fraction
Definition: Photon.h:208
std::vector< const GBRForestD * > phoForestsSigma_
DetId seed() const
return DetId of seed
Definition: CaloCluster.h:218
bool isEB() const
Definition: Photon.h:119
float r9() const
Definition: Photon.h:240
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:183
const ShowerShape & showerShapeVariables() const
Definition: Photon.h:201
void EGRegressionModifierV1::modifyObject ( pat::Electron ele) const
inlinefinalvirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 29 of file EGRegressionModifierV1.cc.

References modifyObject().

Referenced by modifyObject().

29 { modifyObject(static_cast<reco::GsfElectron&>(ele)); }
void modifyObject(reco::GsfElectron &) const final
void EGRegressionModifierV1::modifyObject ( pat::Photon pho) const
inlinefinalvirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 30 of file EGRegressionModifierV1.cc.

References modifyObject().

Referenced by modifyObject().

30 { modifyObject(static_cast<reco::Photon&>(pho)); }
void modifyObject(reco::GsfElectron &) const final
void EGRegressionModifierV1::setEvent ( const edm::Event evt)
finalvirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 91 of file EGRegressionModifierV1.cc.

References autoDetectBunchSpacing_, bunchspacing_, bunchSpacingToken_, edm::Event::getByToken(), nVtx_, rhoToken_, rhoValue_, vtxH_, and vtxToken_.

91  {
93  edm::Handle<unsigned int> bunchSpacingH;
94  evt.getByToken(bunchSpacingToken_, bunchSpacingH);
95  bunchspacing_ = *bunchSpacingH;
96  }
97 
99  evt.getByToken(rhoToken_, rhoH);
100  rhoValue_ = *rhoH;
101 
102  evt.getByToken(vtxToken_, vtxH_);
103  nVtx_ = vtxH_->size();
104 }
edm::EDGetTokenT< reco::VertexCollection > vtxToken_
edm::Handle< reco::VertexCollection > vtxH_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
edm::EDGetTokenT< double > rhoToken_
edm::EDGetTokenT< unsigned int > bunchSpacingToken_
void EGRegressionModifierV1::setEventContent ( const edm::EventSetup evs)
finalvirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 106 of file EGRegressionModifierV1.cc.

References bunchspacing_, caloGeomH_, condNamesWeight25ns_, condNamesWeight50ns_, eleCondNames_, eleForestsMean_, eleForestsSigma_, epForest_, edm::EventSetup::get(), EGRegressionModifierV1::CondNames::mean25ns, EGRegressionModifierV1::CondNames::mean50ns, phoCondNames_, phoForestsMean_, phoForestsSigma_, edm::ESHandle< T >::product(), retrieveGBRForests(), EGRegressionModifierV1::CondNames::sigma25ns, EGRegressionModifierV1::CondNames::sigma50ns, and AlCaHLTBitMon_QueryRunRegistry::string.

106  {
107  evs.get<CaloGeometryRecord>().get(caloGeomH_);
108 
111 
114 
115  edm::ESHandle<GBRForest> forestEH;
116  const std::string ep_condnames_weight = (bunchspacing_ == 25) ? condNamesWeight25ns_ : condNamesWeight50ns_;
117  evs.get<GBRWrapperRcd>().get(ep_condnames_weight, forestEH);
118  epForest_ = forestEH.product();
119 }
std::vector< std::string > sigma25ns
edm::ESHandle< CaloGeometry > caloGeomH_
std::vector< const GBRForestD * > phoForestsMean_
std::vector< std::string > sigma50ns
std::vector< const GBRForestD * > retrieveGBRForests(edm::EventSetup const &evs, std::vector< std::string > const &names)
std::vector< const GBRForestD * > eleForestsSigma_
std::vector< const GBRForestD * > eleForestsMean_
std::vector< const GBRForestD * > phoForestsSigma_
T get() const
Definition: EventSetup.h:73
T const * product() const
Definition: ESHandle.h:86

Member Data Documentation

const bool EGRegressionModifierV1::applyExtraHighEnergyProtection_
private

Definition at line 55 of file EGRegressionModifierV1.cc.

Referenced by modifyObject().

const bool EGRegressionModifierV1::autoDetectBunchSpacing_
private

Definition at line 46 of file EGRegressionModifierV1.cc.

Referenced by EGRegressionModifierV1(), and setEvent().

int EGRegressionModifierV1::bunchspacing_
private

Definition at line 47 of file EGRegressionModifierV1.cc.

Referenced by setEvent(), and setEventContent().

edm::EDGetTokenT<unsigned int> EGRegressionModifierV1::bunchSpacingToken_
private

Definition at line 48 of file EGRegressionModifierV1.cc.

Referenced by EGRegressionModifierV1(), and setEvent().

edm::ESHandle<CaloGeometry> EGRegressionModifierV1::caloGeomH_
private

Definition at line 54 of file EGRegressionModifierV1.cc.

Referenced by modifyObject(), and setEventContent().

std::string EGRegressionModifierV1::condNamesWeight25ns_
private

Definition at line 44 of file EGRegressionModifierV1.cc.

Referenced by EGRegressionModifierV1(), and setEventContent().

std::string EGRegressionModifierV1::condNamesWeight50ns_
private

Definition at line 43 of file EGRegressionModifierV1.cc.

Referenced by EGRegressionModifierV1(), and setEventContent().

CondNames EGRegressionModifierV1::eleCondNames_
private

Definition at line 40 of file EGRegressionModifierV1.cc.

Referenced by EGRegressionModifierV1(), and setEventContent().

std::vector<const GBRForestD*> EGRegressionModifierV1::eleForestsMean_
private

Definition at line 59 of file EGRegressionModifierV1.cc.

Referenced by modifyObject(), and setEventContent().

std::vector<const GBRForestD*> EGRegressionModifierV1::eleForestsSigma_
private

Definition at line 60 of file EGRegressionModifierV1.cc.

Referenced by modifyObject(), and setEventContent().

const GBRForest* EGRegressionModifierV1::epForest_
private

Definition at line 61 of file EGRegressionModifierV1.cc.

Referenced by modifyObject(), and setEventContent().

int EGRegressionModifierV1::nVtx_
private

Definition at line 51 of file EGRegressionModifierV1.cc.

Referenced by modifyObject(), and setEvent().

CondNames EGRegressionModifierV1::phoCondNames_
private

Definition at line 41 of file EGRegressionModifierV1.cc.

Referenced by EGRegressionModifierV1(), and setEventContent().

std::vector<const GBRForestD*> EGRegressionModifierV1::phoForestsMean_
private

Definition at line 57 of file EGRegressionModifierV1.cc.

Referenced by modifyObject(), and setEventContent().

std::vector<const GBRForestD*> EGRegressionModifierV1::phoForestsSigma_
private

Definition at line 58 of file EGRegressionModifierV1.cc.

Referenced by modifyObject(), and setEventContent().

edm::EDGetTokenT<double> EGRegressionModifierV1::rhoToken_
private

Definition at line 50 of file EGRegressionModifierV1.cc.

Referenced by setEvent().

float EGRegressionModifierV1::rhoValue_
private

Definition at line 49 of file EGRegressionModifierV1.cc.

Referenced by modifyObject(), and setEvent().

edm::Handle<reco::VertexCollection> EGRegressionModifierV1::vtxH_
private

Definition at line 53 of file EGRegressionModifierV1.cc.

Referenced by setEvent().

edm::EDGetTokenT<reco::VertexCollection> EGRegressionModifierV1::vtxToken_
private

Definition at line 52 of file EGRegressionModifierV1.cc.

Referenced by setEvent().