CMS 3D CMS Logo

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

Classes

struct  electron_config
 
struct  photon_config
 

Public Types

typedef std::pair< edm::InputTag, ValMapFloatTokenValMapFloatTagTokenPair
 
typedef edm::EDGetTokenT< edm::ValueMap< float > > ValMapFloatToken
 
typedef std::pair< edm::InputTag, ValMapIntTokenValMapIntTagTokenPair
 
typedef edm::EDGetTokenT< edm::ValueMap< int > > ValMapIntToken
 

Public Member Functions

 EGRegressionModifierV2 (const edm::ParameterSet &conf)
 
void modifyObject (reco::GsfElectron &) const final
 
void modifyObject (reco::Photon &) const final
 
void modifyObject (pat::Electron &) const final
 
void modifyObject (pat::Photon &) const final
 
void setConsumes (edm::ConsumesCollector &) final
 
void setEvent (const edm::Event &) final
 
void setEventContent (const edm::EventSetup &) final
 
 ~EGRegressionModifierV2 () override
 
- 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

electron_config e_conf
 
std::vector< const GBRForestD * > e_forestH_mean_
 
std::vector< const GBRForestD * > e_forestH_sigma_
 
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< int > > > ele_int_vmaps
 
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< float > > > ele_vmaps
 
std::unordered_map< unsigned, edm::Ptr< reco::GsfElectron > > eles_by_oop
 
double eOverP_ECALTRKThr_
 
double epDiffSig_ECALTRKThr_
 
double epSig_ECALTRKThr_
 
bool forceHighEnergyEcalTrainingIfSaturated_
 
double highEnergy_ECALTRKThr_
 
const edm::EventSetupiSetup_
 
double lowEnergy_ECALonlyThr_
 
double lowEnergy_ECALTRKThr_
 
photon_config ph_conf
 
std::vector< const GBRForestD * > ph_forestH_mean_
 
std::vector< const GBRForestD * > ph_forestH_sigma_
 
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< int > > > pho_int_vmaps
 
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< float > > > pho_vmaps
 
std::unordered_map< unsigned, edm::Ptr< reco::Photon > > phos_by_oop
 
edm::InputTag rhoTag_
 
edm::EDGetTokenT< double > rhoToken_
 
float rhoValue_
 

Detailed Description

Definition at line 24 of file EGRegressionModifierV2.cc.

Member Typedef Documentation

Definition at line 28 of file EGRegressionModifierV2.cc.

Definition at line 26 of file EGRegressionModifierV2.cc.

Definition at line 29 of file EGRegressionModifierV2.cc.

Definition at line 27 of file EGRegressionModifierV2.cc.

Constructor & Destructor Documentation

EGRegressionModifierV2::EGRegressionModifierV2 ( const edm::ParameterSet conf)

Definition at line 103 of file EGRegressionModifierV2.cc.

References EGRegressionModifierV2::electron_config::condnames_ecalonly_mean, EGRegressionModifierV2::photon_config::condnames_ecalonly_mean, EGRegressionModifierV2::electron_config::condnames_ecalonly_sigma, EGRegressionModifierV2::photon_config::condnames_ecalonly_sigma, EGRegressionModifierV2::electron_config::condnames_ecaltrk_mean, EGRegressionModifierV2::electron_config::condnames_ecaltrk_sigma, constexpr, EGRegressionModifierV2::electron_config::electron_src, electrons_cff::electrons, PatBasicAnalyzer_cfi::electronSrc, edm::ParameterSet::exists(), edm::ParameterSet::existsAs(), edm::Event::getByToken(), edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNames(), genParticles_cff::map, ModifyObjectValueBase::name(), EGRegressionModifierV2::photon_config::photon_src, nano_cff::photons, PatBasicAnalyzer_cfi::photonSrc, AlCaHLTBitMon_QueryRunRegistry::string, EGRegressionModifierV2::electron_config::tag_float_token_map, EGRegressionModifierV2::photon_config::tag_float_token_map, EGRegressionModifierV2::electron_config::tag_int_token_map, and EGRegressionModifierV2::photon_config::tag_int_token_map.

103  :
104  ModifyObjectValueBase(conf) {
105 
106  lowEnergy_ECALonlyThr_ = conf.getParameter<double>("lowEnergy_ECALonlyThr");
107  lowEnergy_ECALTRKThr_ = conf.getParameter<double>("lowEnergy_ECALTRKThr");
108  highEnergy_ECALTRKThr_ = conf.getParameter<double>("highEnergy_ECALTRKThr");
109  eOverP_ECALTRKThr_ = conf.getParameter<double>("eOverP_ECALTRKThr");
110  epDiffSig_ECALTRKThr_ = conf.getParameter<double>("epDiffSig_ECALTRKThr");
111  epSig_ECALTRKThr_ = conf.getParameter<double>("epSig_ECALTRKThr");
112  forceHighEnergyEcalTrainingIfSaturated_ = conf.getParameter<bool>("forceHighEnergyEcalTrainingIfSaturated");
113  rhoTag_ = conf.getParameter<edm::InputTag>("rhoCollection");
114 
115  constexpr char electronSrc[] = "electronSrc";
116  constexpr char photonSrc[] = "photonSrc";
117 
118  if(conf.exists("electron_config")) {
119  const edm::ParameterSet& electrons = conf.getParameter<edm::ParameterSet>("electron_config");
120  if( electrons.exists(electronSrc) )
121  e_conf.electron_src = electrons.getParameter<edm::InputTag>(electronSrc);
122 
123  std::vector<std::string> intValueMaps;
124  if ( electrons.existsAs<std::vector<std::string> >("intValueMaps"))
125  intValueMaps = electrons.getParameter<std::vector<std::string> >("intValueMaps");
126 
127  const std::vector<std::string> parameters = electrons.getParameterNames();
128  for( const std::string& name : parameters ) {
129  if( std::string(electronSrc) == name )
130  continue;
131  if( electrons.existsAs<edm::InputTag>(name)) {
132  for (auto vmp : intValueMaps) {
133  if (name == vmp) {
135  break;
136  }
137  }
139  }
140  }
141 
142  e_conf.condnames_ecalonly_mean = electrons.getParameter<std::vector<std::string> >("regressionKey_ecalonly");
143  e_conf.condnames_ecalonly_sigma = electrons.getParameter<std::vector<std::string> >("uncertaintyKey_ecalonly");
144  e_conf.condnames_ecaltrk_mean = electrons.getParameter<std::vector<std::string> >("regressionKey_ecaltrk");
145  e_conf.condnames_ecaltrk_sigma = electrons.getParameter<std::vector<std::string> >("uncertaintyKey_ecaltrk");
146 
147  unsigned int encor = e_conf.condnames_ecalonly_mean.size();
148  e_forestH_mean_.reserve(2*encor);
149  e_forestH_sigma_.reserve(2*encor);
150 
151  }
152 
153  if( conf.exists("photon_config") ) {
154  const edm::ParameterSet& photons = conf.getParameter<edm::ParameterSet>("photon_config");
155 
156  if( photons.exists(photonSrc) )
157  ph_conf.photon_src = photons.getParameter<edm::InputTag>(photonSrc);
158 
159  std::vector<std::string> intValueMaps;
160  if ( photons.existsAs<std::vector<std::string> >("intValueMaps"))
161  intValueMaps = photons.getParameter<std::vector<std::string> >("intValueMaps");
162 
163  const std::vector<std::string> parameters = photons.getParameterNames();
164  for( const std::string& name : parameters ) {
165  if( std::string(photonSrc) == name )
166  continue;
167  if( photons.existsAs<edm::InputTag>(name)) {
168  for (auto vmp : intValueMaps) {
169  if (name == vmp) {
171  break;
172  }
173  }
175  }
176  }
177 
178  ph_conf.condnames_ecalonly_mean = photons.getParameter<std::vector<std::string>>("regressionKey_ecalonly");
179  ph_conf.condnames_ecalonly_sigma = photons.getParameter<std::vector<std::string>>("uncertaintyKey_ecalonly");
180 
181  unsigned int ncor = ph_conf.condnames_ecalonly_mean.size();
182  ph_forestH_mean_.reserve(ncor);
183  ph_forestH_sigma_.reserve(ncor);
184 
185  }
186 
187 
188 }
T getParameter(std::string const &) const
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:185
std::vector< std::string > condnames_ecalonly_sigma
bool exists(std::string const &parameterName) const
checks if a parameter exists
std::pair< edm::InputTag, ValMapIntToken > ValMapIntTagTokenPair
std::vector< std::string > condnames_ecalonly_mean
std::vector< std::string > condnames_ecalonly_mean
std::vector< std::string > condnames_ecalonly_sigma
#define constexpr
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
const std::string & name() const
std::pair< edm::InputTag, ValMapFloatToken > ValMapFloatTagTokenPair
std::vector< const GBRForestD * > ph_forestH_sigma_
std::vector< std::string > getParameterNames() const
ModifyObjectValueBase(const edm::ParameterSet &conf)
edm::EDGetTokenT< edm::ValueMap< int > > ValMapIntToken
std::vector< std::string > condnames_ecaltrk_mean
std::vector< std::string > condnames_ecaltrk_sigma
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
std::vector< const GBRForestD * > e_forestH_sigma_
edm::EDGetTokenT< edm::ValueMap< float > > ValMapFloatToken
std::vector< const GBRForestD * > ph_forestH_mean_
std::vector< const GBRForestD * > e_forestH_mean_
EGRegressionModifierV2::~EGRegressionModifierV2 ( )
override

Definition at line 199 of file EGRegressionModifierV2.cc.

199 {}

Member Function Documentation

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

Reimplemented from ModifyObjectValueBase.

Definition at line 357 of file EGRegressionModifierV2.cc.

References funct::abs(), constexpr, reco::GsfElectron::correctMomentum(), reco::deltaPhi(), DetId::det(), reco::GsfElectron::ShowerShape::e5x5, e_forestH_mean_, e_forestH_sigma_, reco::GsfElectron::ecalDrivenSeed(), eOverP_ECALTRKThr_, epDiffSig_ECALTRKThr_, epSig_ECALTRKThr_, reco::CaloCluster::eta(), reco::GsfElectron::fbrem(), forceHighEnergyEcalTrainingIfSaturated_, reco::GsfElectron::full5x5_showerShape(), reco::GsfElectron::gsfTrack(), reco::GsfElectron::hcalOverEcalBc(), highEnergy_ECALTRKThr_, edm::Ref< C, T, F >::isAvailable(), reco::GsfElectron::isEB(), iSetup_, EcalTools::isHGCalDet(), CastorSimpleRecAlgoImpl::isSaturated(), EcalClusterLocal::localCoordsEB(), EcalClusterLocal::localCoordsEE(), lowEnergy_ECALonlyThr_, lowEnergy_ECALTRKThr_, SiStripPI::max, SiStripPI::mean, reco::GsfElectron::nSaturatedXtals(), reco::GsfElectron::p4(), reco::CaloCluster::phi(), mathSSE::return(), rhoValue_, reco::CaloCluster::seed(), reco::GsfElectron::setCorrectedEcalEnergy(), reco::GsfElectron::setCorrectedEcalEnergyError(), mathSSE::sqrt(), reco::GsfElectron::superCluster(), reco::GsfElectron::ClassificationVariables::trackFbrem, and reco::GsfElectron::trackMomentumError().

Referenced by modifyObject().

357  {
358 
359  // regression calculation needs no additional valuemaps
360 
361  const reco::SuperClusterRef& the_sc = ele.superCluster();
362  const edm::Ptr<reco::CaloCluster>& theseed = the_sc->seed();
363 
364  // skip HGCAL for now
365  if( EcalTools::isHGCalDet(theseed->seed().det()) ) return;
366 
367  const int numberOfClusters = the_sc->clusters().size();
368  const bool missing_clusters = !the_sc->clusters()[numberOfClusters-1].isAvailable();
369  if( missing_clusters ) return ; // do not apply corrections in case of missing info (slimmed MiniAOD electrons)
370 
371  //check if fbrem is filled as its needed for E/p combination so abort if its set to the default value
372  //this will be the case for <5 (or current cuts) for miniAOD electrons
374 
375  const bool iseb = ele.isEB();
376 
377  std::array<float, 32> eval;
378  const double raw_energy = the_sc->rawEnergy();
379  const double raw_es_energy = the_sc->preshowerEnergy();
380  const auto& full5x5_ess = ele.full5x5_showerShape();
381 
382  float e5x5Inverse = full5x5_ess.e5x5 != 0. ? vdt::fast_inv(full5x5_ess.e5x5) : 0.;
383 
384  eval[0] = raw_energy;
385  eval[1] = the_sc->etaWidth();
386  eval[2] = the_sc->phiWidth();
387  eval[3] = the_sc->seed()->energy()/raw_energy;
388  eval[4] = full5x5_ess.e5x5/raw_energy;
389  eval[5] = ele.hcalOverEcalBc();
390  eval[6] = rhoValue_;
391  eval[7] = theseed->eta() - the_sc->position().Eta();
392  eval[8] = reco::deltaPhi( theseed->phi(),the_sc->position().Phi());
393  eval[9] = full5x5_ess.r9;
394  eval[10] = full5x5_ess.sigmaIetaIeta;
395  eval[11] = full5x5_ess.sigmaIetaIphi;
396  eval[12] = full5x5_ess.sigmaIphiIphi;
397  eval[13] = full5x5_ess.eMax*e5x5Inverse;
398  eval[14] = full5x5_ess.e2nd*e5x5Inverse;
399  eval[15] = full5x5_ess.eTop*e5x5Inverse;
400  eval[16] = full5x5_ess.eBottom*e5x5Inverse;
401  eval[17] = full5x5_ess.eLeft*e5x5Inverse;
402  eval[18] = full5x5_ess.eRight*e5x5Inverse;
403  eval[19] = full5x5_ess.e2x5Max*e5x5Inverse;
404  eval[20] = full5x5_ess.e2x5Left*e5x5Inverse;
405  eval[21] = full5x5_ess.e2x5Right*e5x5Inverse;
406  eval[22] = full5x5_ess.e2x5Top*e5x5Inverse;
407  eval[23] = full5x5_ess.e2x5Bottom*e5x5Inverse;
408  eval[24] = ele.nSaturatedXtals();
409  eval[25] = std::max(0,numberOfClusters);
410 
411  // calculate coordinate variables
412  EcalClusterLocal _ecalLocal;
413  if (iseb) {
414 
415  float dummy;
416  int ieta;
417  int iphi;
418  _ecalLocal.localCoordsEB(*theseed, *iSetup_, dummy, dummy, ieta, iphi, dummy, dummy);
419  eval[26] = ieta;
420  eval[27] = iphi;
421  int signieta = ieta > 0 ? +1 : -1;
422  eval[28] = (ieta-signieta)%5;
423  eval[29] = (iphi-1)%2;
424  eval[30] = (abs(ieta)<=25)*((ieta-signieta)) + (abs(ieta)>25)*((ieta-26*signieta)%20);
425  eval[31] = (iphi-1)%20;
426 
427  } else {
428 
429  float dummy;
430  int ix;
431  int iy;
432  _ecalLocal.localCoordsEE(*theseed, *iSetup_, dummy, dummy, ix, iy, dummy, dummy);
433  eval[26] = ix;
434  eval[27] = iy;
435  eval[28] = raw_es_energy/raw_energy;
436 
437  }
438 
439  //magic numbers for MINUIT-like transformation of BDT output onto limited range
440  //(These should be stored inside the conditions object in the future as well)
441  constexpr double meanlimlow = -1.0;
442  constexpr double meanlimhigh = 3.0;
443  constexpr double meanoffset = meanlimlow + 0.5*(meanlimhigh-meanlimlow);
444  constexpr double meanscale = 0.5*(meanlimhigh-meanlimlow);
445 
446  constexpr double sigmalimlow = 0.0002;
447  constexpr double sigmalimhigh = 0.5;
448  constexpr double sigmaoffset = sigmalimlow + 0.5*(sigmalimhigh-sigmalimlow);
449  constexpr double sigmascale = 0.5*(sigmalimhigh-sigmalimlow);
450 
451 
452  size_t coridx = 0;
453  float raw_pt = raw_energy*the_sc->position().rho()/the_sc->position().r();
454  bool isSaturated = ele.nSaturatedXtals()!=0;
455 
456  if(raw_pt >= lowEnergy_ECALonlyThr_ ||
457  (isSaturated && forceHighEnergyEcalTrainingIfSaturated_)){
458  if(iseb) coridx = 1;
459  else coridx = 3;
460  }else{
461  if(iseb) coridx = 0;
462  else coridx = 2;
463  }
464 
465 
466  //these are the actual BDT responses
467  double rawmean = e_forestH_mean_[coridx]->GetResponse(eval.data());
468  double rawsigma = e_forestH_sigma_[coridx]->GetResponse(eval.data());
469 
470  //apply transformation to limited output range (matching the training)
471  double mean = meanoffset + meanscale*vdt::fast_sin(rawmean);
472  double sigma = sigmaoffset + sigmascale*vdt::fast_sin(rawsigma);
473 
474  // Correct the energy. A negative energy means that the correction went
475  // outside the boundaries of the training. In this case uses raw.
476  // The resolution estimation, on the other hand should be ok.
477  if (mean < 0.) mean = 1.0;
478 
479  const double ecor = mean*(raw_energy + raw_es_energy);
480  const double sigmacor = sigma*ecor;
481 
482  ele.setCorrectedEcalEnergy(ecor);
483  ele.setCorrectedEcalEnergyError(sigmacor);
484 
485  double combinedEnergy = ecor;
486  double combinedEnergyError = sigmacor;
487 
488  auto el_track = ele.gsfTrack();
489  const float trkMomentum = el_track->pMode();
490  const float trkEta = el_track->etaMode();
491  const float trkPhi = el_track->phiMode();
492  const float trkMomentumError = std::abs(el_track->qoverpModeError())*trkMomentum*trkMomentum;
493 
494  const float eOverP = (raw_energy+raw_es_energy)*mean/trkMomentum;
495  const float fbrem = ele.fbrem();
496 
497  // E-p combination
498  if (ecor < highEnergy_ECALTRKThr_ &&
499  eOverP > eOverP_ECALTRKThr_ &&
500  std::abs(ecor - trkMomentum) < epDiffSig_ECALTRKThr_*std::sqrt(trkMomentumError*trkMomentumError+sigmacor*sigmacor) &&
501  trkMomentumError < epSig_ECALTRKThr_*trkMomentum) {
502 
503  raw_pt = ecor/cosh(trkEta);
504  if (iseb && raw_pt < lowEnergy_ECALTRKThr_)
505  coridx = 4;
506  else if (iseb && raw_pt >= lowEnergy_ECALTRKThr_)
507  coridx = 5;
508  else if (!iseb && raw_pt < lowEnergy_ECALTRKThr_)
509  coridx = 6;
510  else if (!iseb && raw_pt >= lowEnergy_ECALTRKThr_)
511  coridx = 7;
512 
513  eval[0] = ecor;
514  eval[1] = sigma/mean;
515  eval[2] = trkMomentumError/trkMomentum;
516  eval[3] = eOverP;
517  eval[4] = ele.ecalDrivenSeed();
518  eval[5] = full5x5_ess.r9;
519  eval[6] = fbrem;
520  eval[7] = trkEta;
521  eval[8] = trkPhi;
522 
523  float ecalEnergyVar = (raw_energy + raw_es_energy)*sigma;
524  float rawcombNormalization = (trkMomentumError*trkMomentumError + ecalEnergyVar*ecalEnergyVar);
525  float rawcomb = ( ecor*trkMomentumError*trkMomentumError + trkMomentum*ecalEnergyVar*ecalEnergyVar ) / rawcombNormalization;
526 
527  //these are the actual BDT responses
528  double rawmean_trk = e_forestH_mean_[coridx]->GetResponse(eval.data());
529  double rawsigma_trk = e_forestH_sigma_[coridx]->GetResponse(eval.data());
530 
531  //apply transformation to limited output range (matching the training)
532  double mean_trk = meanoffset + meanscale*vdt::fast_sin(rawmean_trk);
533  double sigma_trk = sigmaoffset + sigmascale*vdt::fast_sin(rawsigma_trk);
534 
535  // Final correction
536  // A negative energy means that the correction went
537  // outside the boundaries of the training. In this case uses raw.
538  // The resolution estimation, on the other hand should be ok.
539  if (mean_trk < 0.) mean_trk = 1.0;
540 
541  combinedEnergy = mean_trk*rawcomb;
542  combinedEnergyError = sigma_trk*rawcomb;
543  }
544 
545  math::XYZTLorentzVector oldFourMomentum = ele.p4();
546  math::XYZTLorentzVector newFourMomentum = math::XYZTLorentzVector(oldFourMomentum.x()*combinedEnergy/oldFourMomentum.t(),
547  oldFourMomentum.y()*combinedEnergy/oldFourMomentum.t(),
548  oldFourMomentum.z()*combinedEnergy/oldFourMomentum.t(),
549  combinedEnergy);
550 
551  ele.correctMomentum(newFourMomentum, ele.trackMomentumError(), combinedEnergyError);
552 }
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
bool isAvailable() const
Definition: Ref.h:577
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
Definition: GsfElectron.h:185
static bool isHGCalDet(DetId::Detector thedet)
identify HGCal cells
Definition: EcalTools.h:54
float nSaturatedXtals() const
Definition: GsfElectron.h:516
float trackMomentumError() const
Definition: GsfElectron.h:836
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:225
const edm::EventSetup * iSetup_
void correctMomentum(const LorentzVector &p4, float trackMomentumError, float p4Error)
Definition: GsfElectron.h:858
float fbrem() const
Definition: GsfElectron.h:761
#define constexpr
bool isEB() const
Definition: GsfElectron.h:352
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:168
return((rh^lh)&mask)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
void setCorrectedEcalEnergyError(float newEnergyError)
Definition: GsfElectron.cc:179
T sqrt(T t)
Definition: SSEVec.h:18
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
float hcalOverEcalBc() const
Definition: GsfElectron.h:448
DetId seed() const
return DetId of seed
Definition: CaloCluster.h:207
void localCoordsEB(const reco::CaloCluster &bclus, const edm::EventSetup &es, float &etacry, float &phicry, int &ieta, int &iphi, float &thetatilt, float &phitilt) const
void setCorrectedEcalEnergy(float newEnergy)
Definition: GsfElectron.cc:182
bool isSaturated(const Digi &digi, const int &maxADCvalue, int ifirst, int n)
const ShowerShape & full5x5_showerShape() const
Definition: GsfElectron.h:479
std::vector< const GBRForestD * > e_forestH_sigma_
SuperClusterRef superCluster() const override
reference to a SuperCluster
Definition: GsfElectron.h:184
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:171
void localCoordsEE(const reco::CaloCluster &bclus, const edm::EventSetup &es, float &xcry, float &ycry, int &ix, int &iy, float &thetatilt, float &phitilt) const
std::vector< const GBRForestD * > e_forestH_mean_
bool ecalDrivenSeed() const
Definition: GsfElectron.h:188
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:39
void EGRegressionModifierV2::modifyObject ( reco::Photon pho) const
finalvirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 558 of file EGRegressionModifierV2.cc.

References funct::abs(), constexpr, reco::deltaPhi(), DetId::det(), reco::Photon::ShowerShape::e5x5, reco::CaloCluster::eta(), forceHighEnergyEcalTrainingIfSaturated_, reco::Photon::full5x5_r9(), reco::Photon::full5x5_showerShapeVariables(), reco::Photon::hadronicOverEm(), edm::Ref< C, T, F >::isAvailable(), reco::Photon::isEB(), iSetup_, EcalTools::isHGCalDet(), CastorSimpleRecAlgoImpl::isSaturated(), EcalClusterLocal::localCoordsEB(), EcalClusterLocal::localCoordsEE(), lowEnergy_ECALonlyThr_, SiStripPI::max, SiStripPI::mean, reco::Photon::nSaturatedXtals(), ph_forestH_mean_, ph_forestH_sigma_, reco::CaloCluster::phi(), mathSSE::return(), rhoValue_, reco::CaloCluster::seed(), reco::Photon::setCorrectedEnergy(), and reco::Photon::superCluster().

558  {
559  // regression calculation needs no additional valuemaps
560 
561  const reco::SuperClusterRef& the_sc = pho.superCluster();
562  const edm::Ptr<reco::CaloCluster>& theseed = the_sc->seed();
563 
564  // skip HGCAL for now
565  if( EcalTools::isHGCalDet(theseed->seed().det()) ) return;
566 
567  const int numberOfClusters = the_sc->clusters().size();
568  const bool missing_clusters = !the_sc->clusters()[numberOfClusters-1].isAvailable();
569  if( missing_clusters ) return ; // do not apply corrections in case of missing info (slimmed MiniAOD electrons)
570 
571  const bool iseb = pho.isEB();
572 
573  std::array<float, 32> eval;
574  const double raw_energy = the_sc->rawEnergy();
575  const double raw_es_energy = the_sc->preshowerEnergy();
576  const auto& full5x5_pss = pho.full5x5_showerShapeVariables();
577 
578  float e5x5Inverse = full5x5_pss.e5x5 != 0. ? vdt::fast_inv(full5x5_pss.e5x5) : 0.;
579 
580  eval[0] = raw_energy;
581  eval[1] = the_sc->etaWidth();
582  eval[2] = the_sc->phiWidth();
583  eval[3] = the_sc->seed()->energy()/raw_energy;
584  eval[4] = full5x5_pss.e5x5/raw_energy;
585  eval[5] = pho.hadronicOverEm();
586  eval[6] = rhoValue_;
587  eval[7] = theseed->eta() - the_sc->position().Eta();
588  eval[8] = reco::deltaPhi( theseed->phi(),the_sc->position().Phi());
589  eval[9] = pho.full5x5_r9();
590  eval[10] = full5x5_pss.sigmaIetaIeta;
591  eval[11] = full5x5_pss.sigmaIetaIphi;
592  eval[12] = full5x5_pss.sigmaIphiIphi;
593  eval[13] = full5x5_pss.maxEnergyXtal*e5x5Inverse;
594  eval[14] = full5x5_pss.e2nd*e5x5Inverse;
595  eval[15] = full5x5_pss.eTop*e5x5Inverse;
596  eval[16] = full5x5_pss.eBottom*e5x5Inverse;
597  eval[17] = full5x5_pss.eLeft*e5x5Inverse;
598  eval[18] = full5x5_pss.eRight*e5x5Inverse;
599  eval[19] = full5x5_pss.e2x5Max*e5x5Inverse;
600  eval[20] = full5x5_pss.e2x5Left*e5x5Inverse;
601  eval[21] = full5x5_pss.e2x5Right*e5x5Inverse;
602  eval[22] = full5x5_pss.e2x5Top*e5x5Inverse;
603  eval[23] = full5x5_pss.e2x5Bottom*e5x5Inverse;
604  eval[24] = pho.nSaturatedXtals();
605  eval[25] = std::max(0,numberOfClusters);
606 
607  // calculate coordinate variables
608  EcalClusterLocal _ecalLocal;
609 
610  if (iseb) {
611 
612  float dummy;
613  int ieta;
614  int iphi;
615  _ecalLocal.localCoordsEB(*theseed, *iSetup_, dummy, dummy, ieta, iphi, dummy, dummy);
616  eval[26] = ieta;
617  eval[27] = iphi;
618  int signieta = ieta > 0 ? +1 : -1;
619  eval[28] = (ieta-signieta)%5;
620  eval[29] = (iphi-1)%2;
621  eval[30] = (abs(ieta)<=25)*((ieta-signieta)) + (abs(ieta)>25)*((ieta-26*signieta)%20);
622  eval[31] = (iphi-1)%20;
623 
624  } else {
625 
626  float dummy;
627  int ix;
628  int iy;
629  _ecalLocal.localCoordsEE(*theseed, *iSetup_, dummy, dummy, ix, iy, dummy, dummy);
630  eval[26] = ix;
631  eval[27] = iy;
632  eval[28] = raw_es_energy/raw_energy;
633 
634  }
635 
636  //magic numbers for MINUIT-like transformation of BDT output onto limited range
637  //(These should be stored inside the conditions object in the future as well)
638  constexpr double meanlimlow = -1.0;
639  constexpr double meanlimhigh = 3.0;
640  constexpr double meanoffset = meanlimlow + 0.5*(meanlimhigh-meanlimlow);
641  constexpr double meanscale = 0.5*(meanlimhigh-meanlimlow);
642 
643  constexpr double sigmalimlow = 0.0002;
644  constexpr double sigmalimhigh = 0.5;
645  constexpr double sigmaoffset = sigmalimlow + 0.5*(sigmalimhigh-sigmalimlow);
646  constexpr double sigmascale = 0.5*(sigmalimhigh-sigmalimlow);
647 
648  size_t coridx = 0;
649  float raw_pt = raw_energy*the_sc->position().rho()/the_sc->position().r();
650  bool isSaturated = pho.nSaturatedXtals();
651 
652  if(raw_pt >= lowEnergy_ECALonlyThr_ ||
653  (isSaturated && forceHighEnergyEcalTrainingIfSaturated_)){
654  if(iseb) coridx = 1;
655  else coridx = 3;
656  }else{
657  if(iseb) coridx = 0;
658  else coridx = 2;
659  }
660 
661  //these are the actual BDT responses
662  double rawmean = ph_forestH_mean_[coridx]->GetResponse(eval.data());
663  double rawsigma = ph_forestH_sigma_[coridx]->GetResponse(eval.data());
664 
665  //apply transformation to limited output range (matching the training)
666  double mean = meanoffset + meanscale*vdt::fast_sin(rawmean);
667  double sigma = sigmaoffset + sigmascale*vdt::fast_sin(rawsigma);
668 
669  // Correct the energy. A negative energy means that the correction went
670  // outside the boundaries of the training. In this case uses raw.
671  // The resolution estimation, on the other hand should be ok.
672  if (mean < 0.) mean = 1.0;
673 
674  const double ecor = mean*(raw_energy + raw_es_energy);
675  const double sigmacor = sigma*ecor;
676 
677  pho.setCorrectedEnergy(reco::Photon::P4type::regression2, ecor, sigmacor, true);
678 }
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
bool isAvailable() const
Definition: Ref.h:577
static bool isHGCalDet(DetId::Detector thedet)
identify HGCal cells
Definition: EcalTools.h:54
void setCorrectedEnergy(P4type type, float E, float dE, bool toCand=true)
const edm::EventSetup * iSetup_
reco::SuperClusterRef superCluster() const override
Ref to SuperCluster.
#define constexpr
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:168
return((rh^lh)&mask)
float full5x5_r9() const
Definition: Photon.h:246
std::vector< const GBRForestD * > ph_forestH_sigma_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
float hadronicOverEm() const
the total hadronic over electromagnetic fraction
Definition: Photon.h:206
DetId seed() const
return DetId of seed
Definition: CaloCluster.h:207
void localCoordsEB(const reco::CaloCluster &bclus, const edm::EventSetup &es, float &etacry, float &phicry, int &ieta, int &iphi, float &thetatilt, float &phitilt) const
bool isEB() const
Definition: Photon.h:121
bool isSaturated(const Digi &digi, const int &maxADCvalue, int ifirst, int n)
const ShowerShape & full5x5_showerShapeVariables() const
Definition: Photon.h:200
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:171
void localCoordsEE(const reco::CaloCluster &bclus, const edm::EventSetup &es, float &xcry, float &ycry, int &ix, int &iy, float &thetatilt, float &phitilt) const
std::vector< const GBRForestD * > ph_forestH_mean_
float nSaturatedXtals() const
Definition: Photon.h:260
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:39
void EGRegressionModifierV2::modifyObject ( pat::Electron ele) const
finalvirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 554 of file EGRegressionModifierV2.cc.

References modifyObject().

554  {
555  modifyObject(static_cast<reco::GsfElectron&>(ele));
556 }
void modifyObject(reco::GsfElectron &) const final
void EGRegressionModifierV2::modifyObject ( pat::Photon pho) const
finalvirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 680 of file EGRegressionModifierV2.cc.

References modifyObject().

680  {
681  modifyObject(static_cast<reco::Photon&>(pho));
682 }
void modifyObject(reco::GsfElectron &) const final
void EGRegressionModifierV2::setConsumes ( edm::ConsumesCollector sumes)
finalvirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 313 of file EGRegressionModifierV2.cc.

References edm::ConsumesCollector::consumes(), e_conf, EGRegressionModifierV2::electron_config::electron_src, genParticles_cff::map, ph_conf, EGRegressionModifierV2::photon_config::photon_src, rhoTag_, rhoToken_, edm::second(), EGRegressionModifierV2::electron_config::tag_float_token_map, EGRegressionModifierV2::photon_config::tag_float_token_map, EGRegressionModifierV2::electron_config::tag_int_token_map, EGRegressionModifierV2::photon_config::tag_int_token_map, EGRegressionModifierV2::electron_config::tok_electron_src, EGRegressionModifierV2::photon_config::tok_photon_src, mitigatedMETSequence_cff::U, and DOFs::Z.

313  {
314 
315  rhoToken_ = sumes.consumes<double>(rhoTag_);
316 
317  //setup electrons
318  if(!(empty_tag == e_conf.electron_src))
320 
321  for ( std::unordered_map<std::string, ValMapFloatTagTokenPair>::iterator imap = e_conf.tag_float_token_map.begin();
322  imap != e_conf.tag_float_token_map.end();
323  imap++) {
324  make_consumes(imap->second.first, imap->second.second, sumes);
325  }
326 
327  for ( std::unordered_map<std::string, ValMapIntTagTokenPair>::iterator imap = e_conf.tag_int_token_map.begin();
328  imap != e_conf.tag_int_token_map.end();
329  imap++) {
330  make_int_consumes(imap->second.first, imap->second.second, sumes);
331  }
332 
333  // setup photons
334  if(!(empty_tag == ph_conf.photon_src))
336 
337  for ( std::unordered_map<std::string, ValMapFloatTagTokenPair>::iterator imap = ph_conf.tag_float_token_map.begin();
338  imap != ph_conf.tag_float_token_map.end();
339  imap++) {
340  make_consumes(imap->second.first, imap->second.second, sumes);
341  }
342 
343  for ( std::unordered_map<std::string, ValMapIntTagTokenPair>::iterator imap = ph_conf.tag_int_token_map.begin();
344  imap != ph_conf.tag_int_token_map.end();
345  imap++) {
346  make_int_consumes(imap->second.first, imap->second.second, sumes);
347  }
348 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
edm::EDGetTokenT< edm::View< pat::Electron > > tok_electron_src
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
edm::EDGetTokenT< double > rhoToken_
edm::EDGetTokenT< edm::View< pat::Photon > > tok_photon_src
void EGRegressionModifierV2::setEvent ( const edm::Event evt)
finalvirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 201 of file EGRegressionModifierV2.cc.

References e_conf, ele_int_vmaps, ele_vmaps, eles_by_oop, edm::Event::getByToken(), mps_fire::i, edm::EDGetTokenT< T >::isUninitialized(), edm::Ptr< T >::key(), pat::PATObject< ObjectType >::originalObjectRef(), ph_conf, pho_int_vmaps, pho_vmaps, phos_by_oop, rhoToken_, rhoValue_, EGRegressionModifierV2::electron_config::tag_float_token_map, EGRegressionModifierV2::photon_config::tag_float_token_map, EGRegressionModifierV2::electron_config::tag_int_token_map, EGRegressionModifierV2::photon_config::tag_int_token_map, EGRegressionModifierV2::electron_config::tok_electron_src, and EGRegressionModifierV2::photon_config::tok_photon_src.

201  {
202 
203  eles_by_oop.clear();
204  phos_by_oop.clear();
205  ele_vmaps.clear();
206  ele_int_vmaps.clear();
207  pho_vmaps.clear();
208  pho_int_vmaps.clear();
209 
213 
214  for( unsigned i = 0; i < eles->size(); ++i ) {
215  edm::Ptr<pat::Electron> ptr = eles->ptrAt(i);
216  eles_by_oop[ptr->originalObjectRef().key()] = ptr;
217  }
218  }
219 
220  for (std::unordered_map<std::string, ValMapFloatTagTokenPair>::iterator imap = e_conf.tag_float_token_map.begin();
221  imap != e_conf.tag_float_token_map.end();
222  imap++) {
223  get_product(evt, imap->second.second, ele_vmaps);
224  }
225 
226  for (std::unordered_map<std::string, ValMapIntTagTokenPair>::iterator imap = e_conf.tag_int_token_map.begin();
227  imap != e_conf.tag_int_token_map.end();
228  imap++) {
229  get_product(evt, imap->second.second, ele_int_vmaps);
230  }
231 
235 
236  for( unsigned i = 0; i < phos->size(); ++i ) {
237  edm::Ptr<pat::Photon> ptr = phos->ptrAt(i);
238  phos_by_oop[ptr->originalObjectRef().key()] = ptr;
239  }
240  }
241 
242 
243  for (std::unordered_map<std::string, ValMapFloatTagTokenPair>::iterator imap = ph_conf.tag_float_token_map.begin();
244  imap != ph_conf.tag_float_token_map.end();
245  imap++) {
246  get_product(evt, imap->second.second, pho_vmaps);
247  }
248 
249  for (std::unordered_map<std::string, ValMapIntTagTokenPair>::iterator imap = ph_conf.tag_int_token_map.begin();
250  imap != ph_conf.tag_int_token_map.end();
251  imap++) {
252  get_product(evt, imap->second.second, pho_int_vmaps);
253  }
254 
255  edm::Handle<double> rhoH;
256  evt.getByToken(rhoToken_, rhoH);
257  rhoValue_ = *rhoH;
258 
259 }
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< float > > > ele_vmaps
key_type key() const
Definition: Ptr.h:185
edm::EDGetTokenT< edm::View< pat::Electron > > tok_electron_src
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< int > > > ele_int_vmaps
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
std::unordered_map< unsigned, edm::Ptr< reco::Photon > > phos_by_oop
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< float > > > pho_vmaps
std::unordered_map< unsigned, edm::Ptr< reco::GsfElectron > > eles_by_oop
const edm::Ptr< reco::Candidate > & originalObjectRef() const
reference to original object. Returns a null reference if not available
Definition: PATObject.h:500
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< int > > > pho_int_vmaps
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
edm::EDGetTokenT< double > rhoToken_
edm::EDGetTokenT< edm::View< pat::Photon > > tok_photon_src
bool isUninitialized() const
Definition: EDGetToken.h:73
void EGRegressionModifierV2::setEventContent ( const edm::EventSetup evs)
finalvirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 261 of file EGRegressionModifierV2.cc.

References EGRegressionModifierV2::electron_config::condnames_ecalonly_mean, EGRegressionModifierV2::photon_config::condnames_ecalonly_mean, EGRegressionModifierV2::electron_config::condnames_ecalonly_sigma, EGRegressionModifierV2::photon_config::condnames_ecalonly_sigma, EGRegressionModifierV2::electron_config::condnames_ecaltrk_mean, EGRegressionModifierV2::electron_config::condnames_ecaltrk_sigma, e_conf, e_forestH_mean_, e_forestH_sigma_, edm::EventSetup::get(), iSetup_, ph_conf, ph_forestH_mean_, ph_forestH_sigma_, edm::ESHandle< T >::product(), GlobalPosition_Frontier_DevDB_cff::tag, and mitigatedMETSequence_cff::U.

261  {
262 
263  iSetup_ = &evs;
264 
265  edm::ESHandle<GBRForestD> forestDEH;
266 
267  const std::vector<std::string> ph_condnames_ecalonly_mean = ph_conf.condnames_ecalonly_mean;
268  const std::vector<std::string> ph_condnames_ecalonly_sigma = ph_conf.condnames_ecalonly_sigma;
269 
270  unsigned int ncor = ph_condnames_ecalonly_mean.size();
271  for (unsigned int icor=0; icor<ncor; ++icor) {
272  evs.get<GBRDWrapperRcd>().get(ph_condnames_ecalonly_mean[icor], forestDEH);
273  ph_forestH_mean_[icor] = forestDEH.product();
274  evs.get<GBRDWrapperRcd>().get(ph_condnames_ecalonly_sigma[icor], forestDEH);
275  ph_forestH_sigma_[icor] = forestDEH.product();
276  }
277 
278  const std::vector<std::string> e_condnames_ecalonly_mean = e_conf.condnames_ecalonly_mean;
279  const std::vector<std::string> e_condnames_ecalonly_sigma = e_conf.condnames_ecalonly_sigma;
280  const std::vector<std::string> e_condnames_ecaltrk_mean = e_conf.condnames_ecaltrk_mean;
281  const std::vector<std::string> e_condnames_ecaltrk_sigma = e_conf.condnames_ecaltrk_sigma;
282 
283  unsigned int encor = e_condnames_ecalonly_mean.size();
284  for (unsigned int icor=0; icor<encor; ++icor) {
285  evs.get<GBRDWrapperRcd>().get(e_condnames_ecalonly_mean[icor], forestDEH);
286  e_forestH_mean_[icor] = forestDEH.product();
287  evs.get<GBRDWrapperRcd>().get(e_condnames_ecalonly_sigma[icor], forestDEH);
288  e_forestH_sigma_[icor] = forestDEH.product();
289  }
290  for (unsigned int icor=0; icor<encor; ++icor) {
291  evs.get<GBRDWrapperRcd>().get(e_condnames_ecaltrk_mean[icor], forestDEH);
292  e_forestH_mean_[icor+encor] = forestDEH.product();
293  evs.get<GBRDWrapperRcd>().get(e_condnames_ecaltrk_sigma[icor], forestDEH);
294  e_forestH_sigma_[icor+encor] = forestDEH.product();
295  }
296 
297 }
const edm::EventSetup * iSetup_
std::vector< std::string > condnames_ecalonly_sigma
std::vector< std::string > condnames_ecalonly_mean
std::vector< std::string > condnames_ecalonly_mean
std::vector< std::string > condnames_ecalonly_sigma
std::vector< const GBRForestD * > ph_forestH_sigma_
std::vector< std::string > condnames_ecaltrk_mean
std::vector< std::string > condnames_ecaltrk_sigma
std::vector< const GBRForestD * > e_forestH_sigma_
T get() const
Definition: EventSetup.h:62
T const * product() const
Definition: ESHandle.h:86
std::vector< const GBRForestD * > ph_forestH_mean_
std::vector< const GBRForestD * > e_forestH_mean_

Member Data Documentation

electron_config EGRegressionModifierV2::e_conf
private

Definition at line 68 of file EGRegressionModifierV2.cc.

Referenced by setConsumes(), setEvent(), and setEventContent().

std::vector<const GBRForestD*> EGRegressionModifierV2::e_forestH_mean_
private

Definition at line 85 of file EGRegressionModifierV2.cc.

Referenced by modifyObject(), and setEventContent().

std::vector<const GBRForestD*> EGRegressionModifierV2::e_forestH_sigma_
private

Definition at line 86 of file EGRegressionModifierV2.cc.

Referenced by modifyObject(), and setEventContent().

std::unordered_map<unsigned,edm::Handle<edm::ValueMap<int> > > EGRegressionModifierV2::ele_int_vmaps
private

Definition at line 72 of file EGRegressionModifierV2.cc.

Referenced by setEvent().

std::unordered_map<unsigned,edm::Handle<edm::ValueMap<float> > > EGRegressionModifierV2::ele_vmaps
private

Definition at line 71 of file EGRegressionModifierV2.cc.

Referenced by setEvent().

std::unordered_map<unsigned,edm::Ptr<reco::GsfElectron> > EGRegressionModifierV2::eles_by_oop
private

Definition at line 70 of file EGRegressionModifierV2.cc.

Referenced by setEvent().

double EGRegressionModifierV2::eOverP_ECALTRKThr_
private

Definition at line 91 of file EGRegressionModifierV2.cc.

Referenced by modifyObject().

double EGRegressionModifierV2::epDiffSig_ECALTRKThr_
private

Definition at line 92 of file EGRegressionModifierV2.cc.

Referenced by modifyObject().

double EGRegressionModifierV2::epSig_ECALTRKThr_
private

Definition at line 93 of file EGRegressionModifierV2.cc.

Referenced by modifyObject().

bool EGRegressionModifierV2::forceHighEnergyEcalTrainingIfSaturated_
private

Definition at line 94 of file EGRegressionModifierV2.cc.

Referenced by modifyObject().

double EGRegressionModifierV2::highEnergy_ECALTRKThr_
private

Definition at line 90 of file EGRegressionModifierV2.cc.

Referenced by modifyObject().

const edm::EventSetup* EGRegressionModifierV2::iSetup_
private

Definition at line 81 of file EGRegressionModifierV2.cc.

Referenced by modifyObject(), and setEventContent().

double EGRegressionModifierV2::lowEnergy_ECALonlyThr_
private

Definition at line 88 of file EGRegressionModifierV2.cc.

Referenced by modifyObject().

double EGRegressionModifierV2::lowEnergy_ECALTRKThr_
private

Definition at line 89 of file EGRegressionModifierV2.cc.

Referenced by modifyObject().

photon_config EGRegressionModifierV2::ph_conf
private

Definition at line 69 of file EGRegressionModifierV2.cc.

Referenced by setConsumes(), setEvent(), and setEventContent().

std::vector<const GBRForestD*> EGRegressionModifierV2::ph_forestH_mean_
private

Definition at line 83 of file EGRegressionModifierV2.cc.

Referenced by modifyObject(), and setEventContent().

std::vector<const GBRForestD*> EGRegressionModifierV2::ph_forestH_sigma_
private

Definition at line 84 of file EGRegressionModifierV2.cc.

Referenced by modifyObject(), and setEventContent().

std::unordered_map<unsigned,edm::Handle<edm::ValueMap<int> > > EGRegressionModifierV2::pho_int_vmaps
private

Definition at line 75 of file EGRegressionModifierV2.cc.

Referenced by setEvent().

std::unordered_map<unsigned,edm::Handle<edm::ValueMap<float> > > EGRegressionModifierV2::pho_vmaps
private

Definition at line 74 of file EGRegressionModifierV2.cc.

Referenced by setEvent().

std::unordered_map<unsigned,edm::Ptr<reco::Photon> > EGRegressionModifierV2::phos_by_oop
private

Definition at line 73 of file EGRegressionModifierV2.cc.

Referenced by setEvent().

edm::InputTag EGRegressionModifierV2::rhoTag_
private

Definition at line 78 of file EGRegressionModifierV2.cc.

Referenced by setConsumes().

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

Definition at line 79 of file EGRegressionModifierV2.cc.

Referenced by setConsumes(), and setEvent().

float EGRegressionModifierV2::rhoValue_
private

Definition at line 77 of file EGRegressionModifierV2.cc.

Referenced by modifyObject(), and setEvent().