CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Types | Public Member Functions | Private Attributes
EGExtraInfoModifierFromDB Class Reference
Inheritance diagram for EGExtraInfoModifierFromDB:
ModifyObjectValueBase

Classes

struct  electron_config
 
struct  photon_config
 

Public Types

typedef std::pair
< edm::InputTag,
ValMapFloatToken
ValMapFloatTagTokenPair
 
typedef edm::EDGetTokenT
< edm::ValueMap< float > > 
ValMapFloatToken
 
typedef std::pair
< edm::InputTag,
ValMapIntToken
ValMapIntTagTokenPair
 
typedef edm::EDGetTokenT
< edm::ValueMap< int > > 
ValMapIntToken
 

Public Member Functions

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

bool applyExtraHighEnergyProtection_
 
bool autoDetectBunchSpacing_
 
int bunchspacing_
 
edm::InputTag bunchspacingTag_
 
edm::EDGetTokenT< unsigned int > bunchSpacingToken_
 
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
 
const GBRForestep_forestH_weight_
 
const edm::EventSetupiSetup_
 
int nVtx_
 
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_
 
edm::Handle
< reco::VertexCollection
vtxH_
 
edm::InputTag vtxTag_
 
edm::EDGetTokenT
< reco::VertexCollection
vtxToken_
 

Detailed Description

Definition at line 28 of file EGExtraInfoModifierFromDB.cc.

Member Typedef Documentation

Definition at line 32 of file EGExtraInfoModifierFromDB.cc.

Definition at line 30 of file EGExtraInfoModifierFromDB.cc.

Definition at line 33 of file EGExtraInfoModifierFromDB.cc.

Definition at line 31 of file EGExtraInfoModifierFromDB.cc.

Constructor & Destructor Documentation

EGExtraInfoModifierFromDB::EGExtraInfoModifierFromDB ( const edm::ParameterSet conf)

Definition at line 111 of file EGExtraInfoModifierFromDB.cc.

References EGExtraInfoModifierFromDB::electron_config::condnames_mean_25ns, EGExtraInfoModifierFromDB::photon_config::condnames_mean_25ns, EGExtraInfoModifierFromDB::electron_config::condnames_mean_50ns, EGExtraInfoModifierFromDB::photon_config::condnames_mean_50ns, EGExtraInfoModifierFromDB::electron_config::condnames_sigma_25ns, EGExtraInfoModifierFromDB::photon_config::condnames_sigma_25ns, EGExtraInfoModifierFromDB::electron_config::condnames_sigma_50ns, EGExtraInfoModifierFromDB::photon_config::condnames_sigma_50ns, EGExtraInfoModifierFromDB::electron_config::condnames_weight_25ns, EGExtraInfoModifierFromDB::electron_config::condnames_weight_50ns, constexpr, EGExtraInfoModifierFromDB::electron_config::electron_src, HI_PhotonSkim_cff::electrons, edm::ParameterSet::exists(), edm::ParameterSet::existsAs(), edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNames(), ModifyObjectValueBase::name(), HLT_25ns10e33_v2_cff::parameters, EGExtraInfoModifierFromDB::photon_config::photon_src, interactiveExample::photons, AlCaHLTBitMon_QueryRunRegistry::string, EGExtraInfoModifierFromDB::electron_config::tag_float_token_map, EGExtraInfoModifierFromDB::photon_config::tag_float_token_map, EGExtraInfoModifierFromDB::electron_config::tag_int_token_map, and EGExtraInfoModifierFromDB::photon_config::tag_int_token_map.

111  :
112  ModifyObjectValueBase(conf) {
113 
114  bunchspacing_ = 450;
115  autoDetectBunchSpacing_ = conf.getParameter<bool>("autoDetectBunchSpacing");
116  applyExtraHighEnergyProtection_ = conf.getParameter<bool>("applyExtraHighEnergyProtection");
117 
118  rhoTag_ = conf.getParameter<edm::InputTag>("rhoCollection");
119  vtxTag_ = conf.getParameter<edm::InputTag>("vertexCollection");
120 
122  bunchspacingTag_ = conf.getParameter<edm::InputTag>("bunchSpacingTag");
123  } else {
124  bunchspacing_ = conf.getParameter<int>("manualBunchSpacing");
125  }
126 
127  constexpr char electronSrc[] = "electronSrc";
128  constexpr char photonSrc[] = "photonSrc";
129 
130  if(conf.exists("electron_config")) {
131  const edm::ParameterSet& electrons = conf.getParameter<edm::ParameterSet>("electron_config");
132  if( electrons.exists(electronSrc) )
133  e_conf.electron_src = electrons.getParameter<edm::InputTag>(electronSrc);
134 
135  std::vector<std::string> intValueMaps;
136  if ( electrons.existsAs<std::vector<std::string> >("intValueMaps"))
137  intValueMaps = electrons.getParameter<std::vector<std::string> >("intValueMaps");
138 
139  const std::vector<std::string> parameters = electrons.getParameterNames();
140  for( const std::string& name : parameters ) {
141  if( std::string(electronSrc) == name )
142  continue;
143  if( electrons.existsAs<edm::InputTag>(name)) {
144  for (auto vmp : intValueMaps) {
145  if (name == vmp) {
147  break;
148  }
149  }
151  }
152  }
153 
154  e_conf.condnames_mean_50ns = electrons.getParameter<std::vector<std::string> >("regressionKey_50ns");
155  e_conf.condnames_sigma_50ns = electrons.getParameter<std::vector<std::string> >("uncertaintyKey_50ns");
156  e_conf.condnames_mean_25ns = electrons.getParameter<std::vector<std::string> >("regressionKey_25ns");
157  e_conf.condnames_sigma_25ns = electrons.getParameter<std::vector<std::string> >("uncertaintyKey_25ns");
158  e_conf.condnames_weight_50ns = electrons.getParameter<std::string>("combinationKey_50ns");
159  e_conf.condnames_weight_25ns = electrons.getParameter<std::string>("combinationKey_25ns");
160  }
161 
162  if( conf.exists("photon_config") ) {
163  const edm::ParameterSet& photons = conf.getParameter<edm::ParameterSet>("photon_config");
164 
165  if( photons.exists(photonSrc) )
166  ph_conf.photon_src = photons.getParameter<edm::InputTag>(photonSrc);
167 
168  std::vector<std::string> intValueMaps;
169  if ( photons.existsAs<std::vector<std::string> >("intValueMaps"))
170  intValueMaps = photons.getParameter<std::vector<std::string> >("intValueMaps");
171 
172  const std::vector<std::string> parameters = photons.getParameterNames();
173  for( const std::string& name : parameters ) {
174  if( std::string(photonSrc) == name )
175  continue;
176  if( photons.existsAs<edm::InputTag>(name)) {
177  for (auto vmp : intValueMaps) {
178  if (name == vmp) {
180  break;
181  }
182  }
184  }
185  }
186 
187  ph_conf.condnames_mean_50ns = photons.getParameter<std::vector<std::string>>("regressionKey_50ns");
188  ph_conf.condnames_sigma_50ns = photons.getParameter<std::vector<std::string>>("uncertaintyKey_50ns");
189  ph_conf.condnames_mean_25ns = photons.getParameter<std::vector<std::string>>("regressionKey_25ns");
190  ph_conf.condnames_sigma_25ns = photons.getParameter<std::vector<std::string>>("uncertaintyKey_25ns");
191  }
192 }
T getParameter(std::string const &) const
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:186
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
bool exists(std::string const &parameterName) const
checks if a parameter exists
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
#define constexpr
const std::string & name() const
std::pair< edm::InputTag, ValMapFloatToken > ValMapFloatTagTokenPair
std::vector< std::string > getParameterNames() const
edm::EDGetTokenT< edm::ValueMap< int > > ValMapIntToken
ModifyObjectValueBase(const edm::ParameterSet &conf)
std::pair< edm::InputTag, ValMapIntToken > ValMapIntTagTokenPair
edm::EDGetTokenT< edm::ValueMap< float > > ValMapFloatToken
EGExtraInfoModifierFromDB::~EGExtraInfoModifierFromDB ( )
inline

Definition at line 62 of file EGExtraInfoModifierFromDB.cc.

62 {};

Member Function Documentation

void EGExtraInfoModifierFromDB::modifyObject ( reco::GsfElectron ele) const
finaloverridevirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 366 of file EGExtraInfoModifierFromDB.cc.

References funct::abs(), applyExtraHighEnergyProtection_, reco::GsfElectron::classification(), constexpr, reco::GsfElectron::correctMomentum(), reco::deltaPhi(), reco::deltaR(), e_forestH_mean_, e_forestH_sigma_, reco::GsfElectron::ecalDriven(), ep_forestH_weight_, GBRForest::GetResponse(), edm::Ref< C, T, F >::isAvailable(), reco::GsfElectron::isEB(), iSetup_, EcalClusterLocal::localCoordsEB(), EcalClusterLocal::localCoordsEE(), bookConverter::max, timingPdfMaker::mean, nVtx_, reco::GsfElectron::p4(), reco::return(), reco::GsfElectron::setCorrectedEcalEnergy(), reco::GsfElectron::setCorrectedEcalEnergyError(), reco::GsfElectron::showerShape(), mathSSE::sqrt(), reco::GsfElectron::superCluster(), reco::GsfElectron::trackerDrivenSeed(), reco::GsfElectron::trackMomentumAtVtx(), reco::GsfElectron::trackMomentumError(), and puppiForMET_cff::weight.

Referenced by modifyObject().

366  {
367  // regression calculation needs no additional valuemaps
368 
369  const reco::SuperClusterRef& the_sc = ele.superCluster();
370  const edm::Ptr<reco::CaloCluster>& theseed = the_sc->seed();
371  const int numberOfClusters = the_sc->clusters().size();
372  const bool missing_clusters = !the_sc->clusters()[numberOfClusters-1].isAvailable();
373 
374  if( missing_clusters ) return ; // do not apply corrections in case of missing info (slimmed MiniAOD electrons)
375 
376  std::array<float, 33> eval;
377  const double raw_energy = the_sc->rawEnergy();
378  const auto& ess = ele.showerShape();
379 
380  // SET INPUTS
381  eval[0] = nVtx_;
382  eval[1] = raw_energy;
383  eval[2] = the_sc->eta();
384  eval[3] = the_sc->phi();
385  eval[4] = the_sc->etaWidth();
386  eval[5] = the_sc->phiWidth();
387  eval[6] = ess.r9;
388  eval[7] = theseed->energy()/raw_energy;
389  eval[8] = ess.eMax/raw_energy;
390  eval[9] = ess.e2nd/raw_energy;
391  eval[10] = (ess.eLeft + ess.eRight != 0.f ? (ess.eLeft-ess.eRight)/(ess.eLeft+ess.eRight) : 0.f);
392  eval[11] = (ess.eTop + ess.eBottom != 0.f ? (ess.eTop-ess.eBottom)/(ess.eTop+ess.eBottom) : 0.f);
393  eval[12] = ess.sigmaIetaIeta;
394  eval[13] = ess.sigmaIetaIphi;
395  eval[14] = ess.sigmaIphiIphi;
396  eval[15] = std::max(0,numberOfClusters-1);
397 
398  // calculate sub-cluster variables
399  std::vector<float> clusterRawEnergy;
400  clusterRawEnergy.resize(std::max(3, numberOfClusters), 0);
401  std::vector<float> clusterDEtaToSeed;
402  clusterDEtaToSeed.resize(std::max(3, numberOfClusters), 0);
403  std::vector<float> clusterDPhiToSeed;
404  clusterDPhiToSeed.resize(std::max(3, numberOfClusters), 0);
405  float clusterMaxDR = 999.;
406  float clusterMaxDRDPhi = 999.;
407  float clusterMaxDRDEta = 999.;
408  float clusterMaxDRRawEnergy = 0.;
409 
410  size_t iclus = 0;
411  float maxDR = 0;
413  // loop over all clusters that aren't the seed
414  auto clusend = the_sc->clustersEnd();
415  for( auto clus = the_sc->clustersBegin(); clus != clusend; ++clus ) {
416  pclus = *clus;
417 
418  if(theseed == pclus )
419  continue;
420  clusterRawEnergy[iclus] = pclus->energy();
421  clusterDPhiToSeed[iclus] = reco::deltaPhi(pclus->phi(),theseed->phi());
422  clusterDEtaToSeed[iclus] = pclus->eta() - theseed->eta();
423 
424  // find cluster with max dR
425  const auto the_dr = reco::deltaR(*pclus, *theseed);
426  if(the_dr > maxDR) {
427  maxDR = the_dr;
428  clusterMaxDR = maxDR;
429  clusterMaxDRDPhi = clusterDPhiToSeed[iclus];
430  clusterMaxDRDEta = clusterDEtaToSeed[iclus];
431  clusterMaxDRRawEnergy = clusterRawEnergy[iclus];
432  }
433  ++iclus;
434  }
435 
436  eval[16] = clusterMaxDR;
437  eval[17] = clusterMaxDRDPhi;
438  eval[18] = clusterMaxDRDEta;
439  eval[19] = clusterMaxDRRawEnergy/raw_energy;
440  eval[20] = clusterRawEnergy[0]/raw_energy;
441  eval[21] = clusterRawEnergy[1]/raw_energy;
442  eval[22] = clusterRawEnergy[2]/raw_energy;
443  eval[23] = clusterDPhiToSeed[0];
444  eval[24] = clusterDPhiToSeed[1];
445  eval[25] = clusterDPhiToSeed[2];
446  eval[26] = clusterDEtaToSeed[0];
447  eval[27] = clusterDEtaToSeed[1];
448  eval[28] = clusterDEtaToSeed[2];
449 
450  // calculate coordinate variables
451  const bool iseb = ele.isEB();
452  float dummy;
453  int iPhi;
454  int iEta;
455  float cryPhi;
456  float cryEta;
457  EcalClusterLocal _ecalLocal;
458  if (ele.isEB())
459  _ecalLocal.localCoordsEB(*theseed, *iSetup_, cryEta, cryPhi, iEta, iPhi, dummy, dummy);
460  else
461  _ecalLocal.localCoordsEE(*theseed, *iSetup_, cryEta, cryPhi, iEta, iPhi, dummy, dummy);
462 
463  if (iseb) {
464  eval[29] = cryEta;
465  eval[30] = cryPhi;
466  eval[31] = iEta;
467  eval[32] = iPhi;
468  } else {
469  eval[29] = the_sc->preshowerEnergy()/the_sc->rawEnergy();
470  }
471 
472  //magic numbers for MINUIT-like transformation of BDT output onto limited range
473  //(These should be stored inside the conditions object in the future as well)
474  constexpr double meanlimlow = 0.2;
475  constexpr double meanlimhigh = 2.0;
476  constexpr double meanoffset = meanlimlow + 0.5*(meanlimhigh-meanlimlow);
477  constexpr double meanscale = 0.5*(meanlimhigh-meanlimlow);
478 
479  constexpr double sigmalimlow = 0.0002;
480  constexpr double sigmalimhigh = 0.5;
481  constexpr double sigmaoffset = sigmalimlow + 0.5*(sigmalimhigh-sigmalimlow);
482  constexpr double sigmascale = 0.5*(sigmalimhigh-sigmalimlow);
483 
484  int coridx = 0;
485  if (!iseb)
486  coridx = 1;
487 
488  //these are the actual BDT responses
489  double rawmean = e_forestH_mean_[coridx]->GetResponse(eval.data());
490  double rawsigma = e_forestH_sigma_[coridx]->GetResponse(eval.data());
491 
492  //apply transformation to limited output range (matching the training)
493  double mean = meanoffset + meanscale*vdt::fast_sin(rawmean);
494  double sigma = sigmaoffset + sigmascale*vdt::fast_sin(rawsigma);
495 
496  //regression target is ln(Etrue/Eraw)
497  //so corrected energy is ecor=exp(mean)*e, uncertainty is exp(mean)*eraw*sigma=ecor*sigma
498  double ecor = mean*(eval[1]);
499  if (!iseb)
500  ecor = mean*(eval[1]+the_sc->preshowerEnergy());
501  const double sigmacor = sigma*ecor;
502 
503  ele.setCorrectedEcalEnergy(ecor);
504  ele.setCorrectedEcalEnergyError(sigmacor);
505 
506  // E-p combination
507  //std::array<float, 11> eval_ep;
508  float eval_ep[11];
509 
510  const float ep = ele.trackMomentumAtVtx().R();
511  const float tot_energy = the_sc->rawEnergy()+the_sc->preshowerEnergy();
512  const float momentumError = ele.trackMomentumError();
513  const float trkMomentumRelError = ele.trackMomentumError()/ep;
514  const float eOverP = tot_energy*mean/ep;
515  eval_ep[0] = tot_energy*mean;
516  eval_ep[1] = sigma/mean;
517  eval_ep[2] = ep;
518  eval_ep[3] = trkMomentumRelError;
519  eval_ep[4] = sigma/mean/trkMomentumRelError;
520  eval_ep[5] = tot_energy*mean/ep;
521  eval_ep[6] = tot_energy*mean/ep*sqrt(sigma/mean*sigma/mean+trkMomentumRelError*trkMomentumRelError);
522  eval_ep[7] = ele.ecalDriven();
523  eval_ep[8] = ele.trackerDrivenSeed();
524  eval_ep[9] = int(ele.classification());//eleClass;
525  eval_ep[10] = iseb;
526 
527  // CODE FOR FUTURE SEMI_PARAMETRIC
528  //double rawweight = ep_forestH_mean_[coridx]->GetResponse(eval_ep.data());
530  //double weight = meanoffset + meanscale*vdt::fast_sin(rawweight);
532 
533  // CODE FOR STANDARD BDT
534  double weight = 0.;
535  if ( eOverP > 0.025 &&
536  std::abs(ep-ecor) < 15.*std::sqrt( momentumError*momentumError + sigmacor*sigmacor ) &&
537  (!applyExtraHighEnergyProtection_ || ((momentumError < 10.*ep) || (ecor < 200.)))
538  ) {
539  // protection against crazy track measurement
540  weight = ep_forestH_weight_->GetResponse(eval_ep);
541  if(weight>1.)
542  weight = 1.;
543  else if(weight<0.)
544  weight = 0.;
545  }
546 
547  double combinedMomentum = weight*ele.trackMomentumAtVtx().R() + (1.-weight)*ecor;
548  double combinedMomentumError = sqrt(weight*weight*ele.trackMomentumError()*ele.trackMomentumError() + (1.-weight)*(1.-weight)*sigmacor*sigmacor);
549 
550  math::XYZTLorentzVector oldMomentum = ele.p4();
551  math::XYZTLorentzVector newMomentum = math::XYZTLorentzVector(oldMomentum.x()*combinedMomentum/oldMomentum.t(),
552  oldMomentum.y()*combinedMomentum/oldMomentum.t(),
553  oldMomentum.z()*combinedMomentum/oldMomentum.t(),
554  combinedMomentum);
555 
556  //ele.correctEcalEnergy(combinedMomentum, combinedMomentumError);
557  ele.correctMomentum(newMomentum, ele.trackMomentumError(), combinedMomentumError);
558 }
double GetResponse(const float *vector) const
Definition: GBRForest.h:59
const ShowerShape & showerShape() const
Definition: GsfElectron.h:429
bool isAvailable() const
Definition: Ref.h:576
float trackMomentumError() const
Definition: GsfElectron.h:773
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:223
void correctMomentum(const LorentzVector &p4, float trackMomentumError, float p4Error)
Definition: GsfElectron.h:795
math::XYZVectorF trackMomentumAtVtx() const
Definition: GsfElectron.h:289
#define constexpr
bool isEB() const
Definition: GsfElectron.h:350
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
void setCorrectedEcalEnergyError(float newEnergyError)
Definition: GsfElectron.cc:177
T sqrt(T t)
Definition: SSEVec.h:18
virtual SuperClusterRef superCluster() const
reference to a SuperCluster
Definition: GsfElectron.h:182
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:28
double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
Classification classification() const
Definition: GsfElectron.h:694
std::vector< const GBRForestD * > e_forestH_mean_
void localCoordsEB(const reco::CaloCluster &bclus, const edm::EventSetup &es, float &etacry, float &phicry, int &ieta, int &iphi, float &thetatilt, float &phitilt) const
return(e1-e2)*(e1-e2)+dp *dp
void setCorrectedEcalEnergy(float newEnergy)
Definition: GsfElectron.cc:180
bool trackerDrivenSeed() const
Definition: GsfElectron.h:187
void localCoordsEE(const reco::CaloCluster &bclus, const edm::EventSetup &es, float &xcry, float &ycry, int &ix, int &iy, float &thetatilt, float &phitilt) const
bool ecalDriven() const
Definition: GsfElectron.cc:172
std::vector< const GBRForestD * > e_forestH_sigma_
void EGExtraInfoModifierFromDB::modifyObject ( reco::Photon pho) const
finaloverridevirtual

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 564 of file EGExtraInfoModifierFromDB.cc.

References funct::abs(), reco::deltaPhi(), reco::Photon::e5x5(), reco::Photon::hadronicOverEm(), edm::Ref< C, T, F >::isAvailable(), reco::Photon::isEB(), bookConverter::max, timingPdfMaker::mean, nVtx_, ph_forestH_mean_, ph_forestH_sigma_, reco::Photon::r9(), reco::return(), rhoValue_, reco::Photon::setCorrectedEnergy(), reco::Photon::showerShapeVariables(), and reco::Photon::superCluster().

564  {
565  // regression calculation needs no additional valuemaps
566 
567  std::array<float, 35> eval;
568  const reco::SuperClusterRef& the_sc = pho.superCluster();
569  const edm::Ptr<reco::CaloCluster>& theseed = the_sc->seed();
570 
571  const int numberOfClusters = the_sc->clusters().size();
572  const bool missing_clusters = !the_sc->clusters()[numberOfClusters-1].isAvailable();
573 
574  if( missing_clusters ) return ; // do not apply corrections in case of missing info (slimmed MiniAOD electrons)
575 
576  const double raw_energy = the_sc->rawEnergy();
577  const auto& ess = pho.showerShapeVariables();
578 
579  // SET INPUTS
580  eval[0] = raw_energy;
581  eval[1] = pho.r9();
582  eval[2] = the_sc->etaWidth();
583  eval[3] = the_sc->phiWidth();
584  eval[4] = std::max(0,numberOfClusters - 1);
585  eval[5] = pho.hadronicOverEm();
586  eval[6] = rhoValue_;
587  eval[7] = nVtx_;
588  eval[8] = theseed->eta()-the_sc->position().Eta();
589  eval[9] = reco::deltaPhi(theseed->phi(),the_sc->position().Phi());
590  eval[10] = theseed->energy()/raw_energy;
591  eval[11] = ess.e3x3/ess.e5x5;
592  eval[12] = ess.sigmaIetaIeta;
593  eval[13] = ess.sigmaIphiIphi;
594  eval[14] = ess.sigmaIetaIphi/(ess.sigmaIphiIphi*ess.sigmaIetaIeta);
595  eval[15] = ess.maxEnergyXtal/ess.e5x5;
596  eval[16] = ess.e2nd/ess.e5x5;
597  eval[17] = ess.eTop/ess.e5x5;
598  eval[18] = ess.eBottom/ess.e5x5;
599  eval[19] = ess.eLeft/ess.e5x5;
600  eval[20] = ess.eRight/ess.e5x5;
601  eval[21] = ess.e2x5Max/ess.e5x5;
602  eval[22] = ess.e2x5Left/ess.e5x5;
603  eval[23] = ess.e2x5Right/ess.e5x5;
604  eval[24] = ess.e2x5Top/ess.e5x5;
605  eval[25] = ess.e2x5Bottom/ess.e5x5;
606 
607  const bool iseb = pho.isEB();
608  if (iseb) {
609  EBDetId ebseedid(theseed->seed());
610  eval[26] = pho.e5x5()/theseed->energy();
611  int ieta = ebseedid.ieta();
612  int iphi = ebseedid.iphi();
613  eval[27] = ieta;
614  eval[28] = iphi;
615  int signieta = ieta > 0 ? +1 : -1;
616  eval[29] = (ieta-signieta)%5;
617  eval[30] = (iphi-1)%2;
618  // eval[31] = (abs(ieta)<=25)*((ieta-signieta)%25) + (abs(ieta)>25)*((ieta-26*signieta)%20); //%25 is unnescessary in this formula
619  eval[31] = (abs(ieta)<=25)*((ieta-signieta)) + (abs(ieta)>25)*((ieta-26*signieta)%20);
620  eval[32] = (iphi-1)%20;
621  eval[33] = ieta;
622  eval[34] = iphi;
623  } else {
624  EEDetId eeseedid(theseed->seed());
625  eval[26] = the_sc->preshowerEnergy()/raw_energy;
626  eval[27] = the_sc->preshowerEnergyPlane1()/raw_energy;
627  eval[28] = the_sc->preshowerEnergyPlane2()/raw_energy;
628  eval[29] = eeseedid.ix();
629  eval[30] = eeseedid.iy();
630  }
631 
632  //magic numbers for MINUIT-like transformation of BDT output onto limited range
633  //(These should be stored inside the conditions object in the future as well)
634  const double meanlimlow = 0.2;
635  const double meanlimhigh = 2.0;
636  const double meanoffset = meanlimlow + 0.5*(meanlimhigh-meanlimlow);
637  const double meanscale = 0.5*(meanlimhigh-meanlimlow);
638 
639  const double sigmalimlow = 0.0002;
640  const double sigmalimhigh = 0.5;
641  const double sigmaoffset = sigmalimlow + 0.5*(sigmalimhigh-sigmalimlow);
642  const double sigmascale = 0.5*(sigmalimhigh-sigmalimlow);
643 
644  int coridx = 0;
645  if (!iseb)
646  coridx = 1;
647 
648  //these are the actual BDT responses
649  double rawmean = ph_forestH_mean_[coridx]->GetResponse(eval.data());
650  double rawsigma = ph_forestH_sigma_[coridx]->GetResponse(eval.data());
651  //apply transformation to limited output range (matching the training)
652  double mean = meanoffset + meanscale*vdt::fast_sin(rawmean);
653  double sigma = sigmaoffset + sigmascale*vdt::fast_sin(rawsigma);
654 
655  //regression target is ln(Etrue/Eraw)
656  //so corrected energy is ecor=exp(mean)*e, uncertainty is exp(mean)*eraw*sigma=ecor*sigma
657  double ecor = mean*eval[0];
658  if (!iseb)
659  ecor = mean*(eval[0]+the_sc->preshowerEnergy());
660 
661  double sigmacor = sigma*ecor;
662  pho.setCorrectedEnergy(reco::Photon::P4type::regression2, ecor, sigmacor, true);
663 }
bool isAvailable() const
Definition: Ref.h:576
reco::SuperClusterRef superCluster() const
Ref to SuperCluster.
void setCorrectedEnergy(P4type type, float E, float dE, bool toCand=true)
float e5x5() const
Definition: Photon.h:221
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:203
std::vector< const GBRForestD * > ph_forestH_mean_
double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
return(e1-e2)*(e1-e2)+dp *dp
bool isEB() const
Definition: Photon.h:120
float r9() const
Definition: Photon.h:227
const ShowerShape & showerShapeVariables() const
Definition: Photon.h:196
void EGExtraInfoModifierFromDB::modifyObject ( pat::Electron ele) const
finaloverridevirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 560 of file EGExtraInfoModifierFromDB.cc.

References modifyObject().

560  {
561  modifyObject(static_cast<reco::GsfElectron&>(ele));
562 }
void modifyObject(reco::GsfElectron &) const overridefinal
void EGExtraInfoModifierFromDB::modifyObject ( pat::Photon pho) const
finaloverridevirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 665 of file EGExtraInfoModifierFromDB.cc.

References modifyObject().

665  {
666  modifyObject(static_cast<reco::Photon&>(pho));
667 }
void modifyObject(reco::GsfElectron &) const overridefinal
void EGExtraInfoModifierFromDB::setConsumes ( edm::ConsumesCollector sumes)
finaloverridevirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 318 of file EGExtraInfoModifierFromDB.cc.

References autoDetectBunchSpacing_, bunchspacingTag_, bunchSpacingToken_, edm::ConsumesCollector::consumes(), e_conf, EGExtraInfoModifierFromDB::electron_config::electron_src, ph_conf, EGExtraInfoModifierFromDB::photon_config::photon_src, rhoTag_, rhoToken_, EGExtraInfoModifierFromDB::electron_config::tag_float_token_map, EGExtraInfoModifierFromDB::photon_config::tag_float_token_map, EGExtraInfoModifierFromDB::electron_config::tag_int_token_map, EGExtraInfoModifierFromDB::photon_config::tag_int_token_map, EGExtraInfoModifierFromDB::electron_config::tok_electron_src, EGExtraInfoModifierFromDB::photon_config::tok_photon_src, vtxTag_, and vtxToken_.

318  {
319 
320  rhoToken_ = sumes.consumes<double>(rhoTag_);
322 
324  bunchSpacingToken_ = sumes.consumes<unsigned int>(bunchspacingTag_);
325 
326  //setup electrons
327  if(!(empty_tag == e_conf.electron_src))
329 
330  for ( std::unordered_map<std::string, ValMapFloatTagTokenPair>::iterator imap = e_conf.tag_float_token_map.begin();
331  imap != e_conf.tag_float_token_map.end();
332  imap++) {
333  make_consumes(imap->second.first, imap->second.second, sumes);
334  }
335 
336  for ( std::unordered_map<std::string, ValMapIntTagTokenPair>::iterator imap = e_conf.tag_int_token_map.begin();
337  imap != e_conf.tag_int_token_map.end();
338  imap++) {
339  make_int_consumes(imap->second.first, imap->second.second, sumes);
340  }
341 
342  // setup photons
343  if(!(empty_tag == ph_conf.photon_src))
345 
346  for ( std::unordered_map<std::string, ValMapFloatTagTokenPair>::iterator imap = ph_conf.tag_float_token_map.begin();
347  imap != ph_conf.tag_float_token_map.end();
348  imap++) {
349  make_consumes(imap->second.first, imap->second.second, sumes);
350  }
351 
352  for ( std::unordered_map<std::string, ValMapIntTagTokenPair>::iterator imap = ph_conf.tag_int_token_map.begin();
353  imap != ph_conf.tag_int_token_map.end();
354  imap++) {
355  make_int_consumes(imap->second.first, imap->second.second, sumes);
356  }
357 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
edm::EDGetTokenT< edm::View< pat::Photon > > tok_photon_src
edm::EDGetTokenT< unsigned int > bunchSpacingToken_
edm::EDGetTokenT< reco::VertexCollection > vtxToken_
edm::EDGetTokenT< double > rhoToken_
edm::EDGetTokenT< edm::View< pat::Electron > > tok_electron_src
void EGExtraInfoModifierFromDB::setEvent ( const edm::Event evt)
finaloverridevirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 203 of file EGExtraInfoModifierFromDB.cc.

References autoDetectBunchSpacing_, bunchspacing_, bunchSpacingToken_, e_conf, ele_int_vmaps, ele_vmaps, eles_by_oop, edm::Event::getByToken(), i, edm::EDGetTokenT< T >::isUninitialized(), edm::Ptr< T >::key(), nVtx_, ph_conf, pho_int_vmaps, pho_vmaps, phos_by_oop, rhoToken_, rhoValue_, EGExtraInfoModifierFromDB::electron_config::tag_float_token_map, EGExtraInfoModifierFromDB::photon_config::tag_float_token_map, EGExtraInfoModifierFromDB::electron_config::tag_int_token_map, EGExtraInfoModifierFromDB::photon_config::tag_int_token_map, EGExtraInfoModifierFromDB::electron_config::tok_electron_src, EGExtraInfoModifierFromDB::photon_config::tok_photon_src, vtxH_, and vtxToken_.

203  {
204  eles_by_oop.clear();
205  phos_by_oop.clear();
206  ele_vmaps.clear();
207  ele_int_vmaps.clear();
208  pho_vmaps.clear();
209  pho_int_vmaps.clear();
210 
214 
215  for( unsigned i = 0; i < eles->size(); ++i ) {
216  edm::Ptr<pat::Electron> ptr = eles->ptrAt(i);
217  eles_by_oop[ptr->originalObjectRef().key()] = ptr;
218  }
219  }
220 
221  for (std::unordered_map<std::string, ValMapFloatTagTokenPair>::iterator imap = e_conf.tag_float_token_map.begin();
222  imap != e_conf.tag_float_token_map.end();
223  imap++) {
224  get_product(evt, imap->second.second, ele_vmaps);
225  }
226 
227  for (std::unordered_map<std::string, ValMapIntTagTokenPair>::iterator imap = e_conf.tag_int_token_map.begin();
228  imap != e_conf.tag_int_token_map.end();
229  imap++) {
230  get_product(evt, imap->second.second, ele_int_vmaps);
231  }
232 
236 
237  for( unsigned i = 0; i < phos->size(); ++i ) {
238  edm::Ptr<pat::Photon> ptr = phos->ptrAt(i);
239  phos_by_oop[ptr->originalObjectRef().key()] = ptr;
240  }
241  }
242 
243 
244  for (std::unordered_map<std::string, ValMapFloatTagTokenPair>::iterator imap = ph_conf.tag_float_token_map.begin();
245  imap != ph_conf.tag_float_token_map.end();
246  imap++) {
247  get_product(evt, imap->second.second, pho_vmaps);
248  }
249 
250  for (std::unordered_map<std::string, ValMapIntTagTokenPair>::iterator imap = ph_conf.tag_int_token_map.begin();
251  imap != ph_conf.tag_int_token_map.end();
252  imap++) {
253  get_product(evt, imap->second.second, pho_int_vmaps);
254  }
255 
257  edm::Handle<unsigned int> bunchSpacingH;
258  evt.getByToken(bunchSpacingToken_,bunchSpacingH);
259  bunchspacing_ = *bunchSpacingH;
260  }
261 
262  edm::Handle<double> rhoH;
263  evt.getByToken(rhoToken_, rhoH);
264  rhoValue_ = *rhoH;
265 
266  evt.getByToken(vtxToken_, vtxH_);
267  nVtx_ = vtxH_->size();
268 }
int i
Definition: DBlmapReader.cc:9
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
key_type key() const
Definition: Ptr.h:186
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:462
std::unordered_map< std::string, ValMapIntTagTokenPair > tag_int_token_map
std::unordered_map< unsigned, edm::Ptr< reco::Photon > > phos_by_oop
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
std::unordered_map< std::string, ValMapFloatTagTokenPair > tag_float_token_map
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::GsfElectron > > eles_by_oop
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< float > > > ele_vmaps
edm::EDGetTokenT< edm::View< pat::Photon > > tok_photon_src
edm::EDGetTokenT< unsigned int > bunchSpacingToken_
edm::Handle< reco::VertexCollection > vtxH_
edm::EDGetTokenT< reco::VertexCollection > vtxToken_
bool isUninitialized() const
Definition: EDGetToken.h:73
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< int > > > ele_int_vmaps
edm::EDGetTokenT< double > rhoToken_
edm::EDGetTokenT< edm::View< pat::Electron > > tok_electron_src
void EGExtraInfoModifierFromDB::setEventContent ( const edm::EventSetup evs)
finaloverridevirtual

Reimplemented from ModifyObjectValueBase.

Definition at line 270 of file EGExtraInfoModifierFromDB.cc.

References bunchspacing_, EGExtraInfoModifierFromDB::electron_config::condnames_mean_25ns, EGExtraInfoModifierFromDB::photon_config::condnames_mean_25ns, EGExtraInfoModifierFromDB::electron_config::condnames_mean_50ns, EGExtraInfoModifierFromDB::photon_config::condnames_mean_50ns, EGExtraInfoModifierFromDB::electron_config::condnames_sigma_25ns, EGExtraInfoModifierFromDB::photon_config::condnames_sigma_25ns, EGExtraInfoModifierFromDB::electron_config::condnames_sigma_50ns, EGExtraInfoModifierFromDB::photon_config::condnames_sigma_50ns, EGExtraInfoModifierFromDB::electron_config::condnames_weight_25ns, EGExtraInfoModifierFromDB::electron_config::condnames_weight_50ns, e_conf, e_forestH_mean_, e_forestH_sigma_, ep_forestH_weight_, edm::EventSetup::get(), iSetup_, ph_conf, ph_forestH_mean_, ph_forestH_sigma_, edm::ESHandle< class >::product(), and AlCaHLTBitMon_QueryRunRegistry::string.

270  {
271 
272  iSetup_ = &evs;
273 
274  edm::ESHandle<GBRForestD> forestDEH;
275  edm::ESHandle<GBRForest> forestEH;
276 
277  const std::vector<std::string> ph_condnames_mean = (bunchspacing_ == 25) ? ph_conf.condnames_mean_25ns : ph_conf.condnames_mean_50ns;
278  const std::vector<std::string> ph_condnames_sigma = (bunchspacing_ == 25) ? ph_conf.condnames_sigma_25ns : ph_conf.condnames_sigma_50ns;
279 
280  unsigned int ncor = ph_condnames_mean.size();
281  for (unsigned int icor=0; icor<ncor; ++icor) {
282  evs.get<GBRDWrapperRcd>().get(ph_condnames_mean[icor], forestDEH);
283  ph_forestH_mean_.push_back(forestDEH.product());
284  evs.get<GBRDWrapperRcd>().get(ph_condnames_sigma[icor], forestDEH);
285  ph_forestH_sigma_.push_back(forestDEH.product());
286  }
287 
288  const std::vector<std::string> e_condnames_mean = (bunchspacing_ == 25) ? e_conf.condnames_mean_25ns : e_conf.condnames_mean_50ns;
289  const std::vector<std::string> e_condnames_sigma = (bunchspacing_ == 25) ? e_conf.condnames_sigma_25ns : e_conf.condnames_sigma_50ns;
290  const std::string ep_condnames_weight = (bunchspacing_ == 25) ? e_conf.condnames_weight_25ns : e_conf.condnames_weight_50ns;
291 
292  unsigned int encor = e_condnames_mean.size();
293  evs.get<GBRWrapperRcd>().get(ep_condnames_weight, forestEH);
294  ep_forestH_weight_ = forestEH.product();
295 
296  for (unsigned int icor=0; icor<encor; ++icor) {
297  evs.get<GBRDWrapperRcd>().get(e_condnames_mean[icor], forestDEH);
298  e_forestH_mean_.push_back(forestDEH.product());
299  evs.get<GBRDWrapperRcd>().get(e_condnames_sigma[icor], forestDEH);
300  e_forestH_sigma_.push_back(forestDEH.product());
301  }
302 }
std::vector< const GBRForestD * > ph_forestH_sigma_
std::vector< const GBRForestD * > ph_forestH_mean_
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
std::vector< const GBRForestD * > e_forestH_mean_
std::vector< const GBRForestD * > e_forestH_sigma_

Member Data Documentation

bool EGExtraInfoModifierFromDB::applyExtraHighEnergyProtection_
private

Definition at line 96 of file EGExtraInfoModifierFromDB.cc.

Referenced by modifyObject().

bool EGExtraInfoModifierFromDB::autoDetectBunchSpacing_
private

Definition at line 85 of file EGExtraInfoModifierFromDB.cc.

Referenced by setConsumes(), and setEvent().

int EGExtraInfoModifierFromDB::bunchspacing_
private

Definition at line 86 of file EGExtraInfoModifierFromDB.cc.

Referenced by setEvent(), and setEventContent().

edm::InputTag EGExtraInfoModifierFromDB::bunchspacingTag_
private

Definition at line 87 of file EGExtraInfoModifierFromDB.cc.

Referenced by setConsumes().

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

Definition at line 88 of file EGExtraInfoModifierFromDB.cc.

Referenced by setConsumes(), and setEvent().

electron_config EGExtraInfoModifierFromDB::e_conf
private

Definition at line 76 of file EGExtraInfoModifierFromDB.cc.

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

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

Definition at line 102 of file EGExtraInfoModifierFromDB.cc.

Referenced by modifyObject(), and setEventContent().

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

Definition at line 103 of file EGExtraInfoModifierFromDB.cc.

Referenced by modifyObject(), and setEventContent().

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

Definition at line 80 of file EGExtraInfoModifierFromDB.cc.

Referenced by setEvent().

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

Definition at line 79 of file EGExtraInfoModifierFromDB.cc.

Referenced by setEvent().

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

Definition at line 78 of file EGExtraInfoModifierFromDB.cc.

Referenced by setEvent().

const GBRForest* EGExtraInfoModifierFromDB::ep_forestH_weight_
private

Definition at line 104 of file EGExtraInfoModifierFromDB.cc.

Referenced by modifyObject(), and setEventContent().

const edm::EventSetup* EGExtraInfoModifierFromDB::iSetup_
private

Definition at line 98 of file EGExtraInfoModifierFromDB.cc.

Referenced by modifyObject(), and setEventContent().

int EGExtraInfoModifierFromDB::nVtx_
private

Definition at line 92 of file EGExtraInfoModifierFromDB.cc.

Referenced by modifyObject(), and setEvent().

photon_config EGExtraInfoModifierFromDB::ph_conf
private

Definition at line 77 of file EGExtraInfoModifierFromDB.cc.

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

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

Definition at line 100 of file EGExtraInfoModifierFromDB.cc.

Referenced by modifyObject(), and setEventContent().

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

Definition at line 101 of file EGExtraInfoModifierFromDB.cc.

Referenced by modifyObject(), and setEventContent().

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

Definition at line 83 of file EGExtraInfoModifierFromDB.cc.

Referenced by setEvent().

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

Definition at line 82 of file EGExtraInfoModifierFromDB.cc.

Referenced by setEvent().

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

Definition at line 81 of file EGExtraInfoModifierFromDB.cc.

Referenced by setEvent().

edm::InputTag EGExtraInfoModifierFromDB::rhoTag_
private

Definition at line 90 of file EGExtraInfoModifierFromDB.cc.

Referenced by setConsumes().

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

Definition at line 91 of file EGExtraInfoModifierFromDB.cc.

Referenced by setConsumes(), and setEvent().

float EGExtraInfoModifierFromDB::rhoValue_
private

Definition at line 89 of file EGExtraInfoModifierFromDB.cc.

Referenced by modifyObject(), and setEvent().

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

Definition at line 95 of file EGExtraInfoModifierFromDB.cc.

Referenced by setEvent().

edm::InputTag EGExtraInfoModifierFromDB::vtxTag_
private

Definition at line 93 of file EGExtraInfoModifierFromDB.cc.

Referenced by setConsumes().

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

Definition at line 94 of file EGExtraInfoModifierFromDB.cc.

Referenced by setConsumes(), and setEvent().