CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
EpCombinationTool Class Reference

#include <EpCombinationTool.h>

Public Member Functions

void combine (SimpleElectron &mySimpleElectron) const
 
std::pair< float, float > combine (const reco::GsfElectron &electron) const
 
std::pair< float, float > combine (const reco::GsfElectron &electron, float corrEcalEnergyErr) const
 
 EpCombinationTool ()
 
 EpCombinationTool (const EpCombinationTool &other)=delete
 
 EpCombinationTool (const edm::ParameterSet &iConfig)
 
bool init (const GBRForest *forest)
 
bool init (const std::string &regressionFile, const std::string &bdtName)
 
EpCombinationTooloperator= (const EpCombinationTool &other)=delete
 
void setEventContent (const edm::EventSetup &iSetup)
 
 ~EpCombinationTool ()
 
 ~EpCombinationTool ()
 

Static Public Member Functions

static edm::ParameterSetDescription makePSetDescription ()
 

Private Attributes

EgammaRegressionContainer ecalTrkEnergyRegress_
 
EgammaRegressionContainer ecalTrkEnergyRegressUncert_
 
const GBRForestm_forest
 
bool m_ownForest
 
float maxEcalEnergyForComb_
 
float maxEPDiffInSigmaForComb_
 
float maxRelTrkMomErrForComb_
 
float minEOverPForComb_
 

Detailed Description

Definition at line 10 of file EpCombinationTool.h.

Constructor & Destructor Documentation

EpCombinationTool::EpCombinationTool ( )

Definition at line 12 of file EpCombinationTool.cc.

13  : m_forest(nullptr),
14  m_ownForest(false)
15 /*****************************************************************/
16 {}
const GBRForest * m_forest
EpCombinationTool::~EpCombinationTool ( )

Definition at line 19 of file EpCombinationTool.cc.

References m_forest, and m_ownForest.

21 {
22  if (m_ownForest)
23  delete m_forest;
24 }
const GBRForest * m_forest
EpCombinationTool::EpCombinationTool ( const EpCombinationTool other)
delete
EpCombinationTool::EpCombinationTool ( const edm::ParameterSet iConfig)

Definition at line 14 of file EpCombinationTool.cc.

15  : ecalTrkEnergyRegress_(iConfig.getParameter<edm::ParameterSet>("ecalTrkRegressionConfig")),
16  ecalTrkEnergyRegressUncert_(iConfig.getParameter<edm::ParameterSet>("ecalTrkRegressionUncertConfig")),
17  maxEcalEnergyForComb_(iConfig.getParameter<double>("maxEcalEnergyForComb")),
18  minEOverPForComb_(iConfig.getParameter<double>("minEOverPForComb")),
19  maxEPDiffInSigmaForComb_(iConfig.getParameter<double>("maxEPDiffInSigmaForComb")),
20  maxRelTrkMomErrForComb_(iConfig.getParameter<double>("maxRelTrkMomErrForComb")) {}
T getParameter(std::string const &) const
EgammaRegressionContainer ecalTrkEnergyRegress_
EgammaRegressionContainer ecalTrkEnergyRegressUncert_
EpCombinationTool::~EpCombinationTool ( )
inline

Definition at line 22 of file EpCombinationTool.h.

References funct::combine(), and metsig::electron.

22 {}

Member Function Documentation

void EpCombinationTool::combine ( SimpleElectron mySimpleElectron) const

Definition at line 58 of file EpCombinationTool.cc.

References gather_cfg::cout, HCALHighEnergyHPDFilter_cfi::energy, EgHLTOffHistBins_cfi::eOverP, GBRForest::GetResponse(), m_forest, mathSSE::sqrt(), and mps_merge::weight.

Referenced by EGEtScaleSysModifier::calCombinedMom(), ElectronEnergyCalibrator::calCombinedMom(), ElectronEnergyCalibratorRun2::calibrate(), and combine().

60 {
61  if (!m_forest) {
62  cout << "ERROR: The combination tool is not initialized\n";
63  return;
64  }
65 
66  float energy = mySimpleElectron.getNewEnergy();
67  float energyError = mySimpleElectron.getNewEnergyError();
68  float momentum = mySimpleElectron.getTrackerMomentum();
69  float momentumError = mySimpleElectron.getTrackerMomentumError();
70  int electronClass = mySimpleElectron.getElClass();
71  bool isEcalDriven = mySimpleElectron.isEcalDriven();
72  bool isTrackerDriven = mySimpleElectron.isTrackerDriven();
73  bool isEB = mySimpleElectron.isEB();
74 
75  // compute relative errors and ratio of errors
76  float energyRelError = energyError / energy;
77  float momentumRelError = momentumError / momentum;
78  float errorRatio = energyRelError / momentumRelError;
79 
80  // calculate E/p and corresponding error
81  float eOverP = energy / momentum;
82  float eOverPerror =
83  sqrt((energyError / momentum) * (energyError / momentum) +
84  (energy * momentumError / momentum / momentum) * (energy * momentumError / momentum / momentum));
85 
86  // fill input variables
87  float regressionInputs[11];
88  regressionInputs[0] = energy;
89  regressionInputs[1] = energyRelError;
90  regressionInputs[2] = momentum;
91  regressionInputs[3] = momentumRelError;
92  regressionInputs[4] = errorRatio;
93  regressionInputs[5] = eOverP;
94  regressionInputs[6] = eOverPerror;
95  regressionInputs[7] = static_cast<float>(isEcalDriven);
96  regressionInputs[8] = static_cast<float>(isTrackerDriven);
97  regressionInputs[9] = static_cast<float>(electronClass);
98  regressionInputs[10] = static_cast<float>(isEB);
99 
100  // retrieve combination weight
101  float weight = 0.;
102  if (eOverP > 0.025 &&
103  fabs(momentum - energy) < 15. * sqrt(momentumError * momentumError + energyError * energyError) &&
104  ((momentumError < 10. * momentum) || (energy < 200.))) // protection against crazy track measurement
105  {
106  weight = m_forest->GetResponse(regressionInputs);
107  if (weight > 1.)
108  weight = 1.;
109  else if (weight < 0.)
110  weight = 0.;
111  }
112 
113  float combinedMomentum = weight * momentum + (1. - weight) * energy;
114  float combinedMomentumError =
115  sqrt(weight * weight * momentumError * momentumError + (1. - weight) * (1. - weight) * energyError * energyError);
116 
117  // FIXME : pure tracker electrons have track momentum error of 999.
118  // If the combination try to combine such electrons then the original combined momentum is kept
119  if (momentumError != 999. || weight == 0.) {
120  mySimpleElectron.setCombinedMomentum(combinedMomentum);
121  mySimpleElectron.setCombinedMomentumError(combinedMomentumError);
122  }
123 }
double GetResponse(const float *vector) const
Definition: GBRForest.h:49
int getElClass() const
void setCombinedMomentum(double combinedMomentum)
double getTrackerMomentum() const
const GBRForest * m_forest
Definition: weight.py:1
double getNewEnergy() const
bool isTrackerDriven() const
double getNewEnergyError() const
T sqrt(T t)
Definition: SSEVec.h:19
bool isEB() const
void setCombinedMomentumError(double combinedMomentumError)
double getTrackerMomentumError() const
bool isEcalDriven() const
std::pair< float, float > EpCombinationTool::combine ( const reco::GsfElectron electron) const

Definition at line 39 of file EpCombinationTool.cc.

References combine(), and reco::GsfElectron::correctedEcalEnergyError().

39  {
40  return combine(ele, ele.correctedEcalEnergyError());
41 }
void combine(SimpleElectron &mySimpleElectron) const
std::pair< float, float > EpCombinationTool::combine ( const reco::GsfElectron electron,
float  corrEcalEnergyErr 
) const

Definition at line 46 of file EpCombinationTool.cc.

References funct::abs(), reco::GsfElectron::correctedEcalEnergy(), reco::GsfElectron::ecalDrivenSeed(), ecalTrkEnergyRegress_, ecalTrkEnergyRegressUncert_, EgHLTOffHistBins_cfi::eOverP, reco::GsfElectron::fbrem(), reco::GsfElectron::full5x5_showerShape(), reco::GsfElectron::gsfTrack(), reco::GsfElectron::isEB(), maxEPDiffInSigmaForComb_, maxRelTrkMomErrForComb_, SiStripPI::mean, minEOverPForComb_, reco::GsfElectron::nSaturatedXtals(), reco::GsfElectron::ShowerShape::r9, mathSSE::sqrt(), and reco::GsfElectron::superCluster().

46  {
47  const float scRawEnergy = ele.superCluster()->rawEnergy();
48  const float esEnergy = ele.superCluster()->preshowerEnergy();
49 
50  const float corrEcalEnergy = ele.correctedEcalEnergy();
51  const float ecalMean = ele.correctedEcalEnergy() / (scRawEnergy + esEnergy);
52  const float ecalSigma = corrEcalEnergyErr / corrEcalEnergy;
53 
54  auto gsfTrk = ele.gsfTrack();
55 
56  const float trkP = gsfTrk->pMode();
57  const float trkEta = gsfTrk->etaMode();
58  const float trkPhi = gsfTrk->phiMode();
59  const float trkPErr = std::abs(gsfTrk->qoverpModeError()) * trkP * trkP;
60  const float eOverP = corrEcalEnergy / trkP;
61  const float fbrem = ele.fbrem();
62 
63  if (corrEcalEnergy < maxEcalEnergyForComb_ && eOverP > minEOverPForComb_ &&
64  std::abs(corrEcalEnergy - trkP) <
65  maxEPDiffInSigmaForComb_ * std::sqrt(trkPErr * trkPErr + corrEcalEnergyErr * corrEcalEnergyErr) &&
66  trkPErr < maxRelTrkMomErrForComb_ * trkP) {
67  std::array<float, 9> eval;
68  eval[0] = corrEcalEnergy;
69  eval[1] = ecalSigma / ecalMean;
70  eval[2] = trkPErr / trkP;
71  eval[3] = eOverP;
72  eval[4] = ele.ecalDrivenSeed();
73  eval[5] = ele.full5x5_showerShape().r9;
74  eval[6] = fbrem;
75  eval[7] = trkEta;
76  eval[8] = trkPhi;
77 
78  const float preCombinationEt = corrEcalEnergy / std::cosh(trkEta);
79  float mean = ecalTrkEnergyRegress_(preCombinationEt, ele.isEB(), ele.nSaturatedXtals() != 0, eval.data());
80  float sigma = ecalTrkEnergyRegressUncert_(preCombinationEt, ele.isEB(), ele.nSaturatedXtals() != 0, eval.data());
81  // Final correction
82  // A negative energy means that the correction went
83  // outside the boundaries of the training. In this case uses raw.
84  // The resolution estimation, on the other hand should be ok.
85  if (mean < 0.)
86  mean = 1.0;
87 
88  //why this differs from the defination of corrEcalEnergyErr (it misses the mean) is not clear to me
89  //still this is a direct port from EGExtraInfoModifierFromDB, potential bugs and all
90  const float ecalSigmaTimesRawEnergy = ecalSigma * (scRawEnergy + esEnergy);
91  const float rawCombEnergy =
92  (corrEcalEnergy * trkPErr * trkPErr + trkP * ecalSigmaTimesRawEnergy * ecalSigmaTimesRawEnergy) /
93  (trkPErr * trkPErr + ecalSigmaTimesRawEnergy * ecalSigmaTimesRawEnergy);
94 
95  return std::make_pair(mean * rawCombEnergy, sigma * rawCombEnergy);
96  } else {
97  return std::make_pair(corrEcalEnergy, corrEcalEnergyErr);
98  }
99 }
EgammaRegressionContainer ecalTrkEnergyRegress_
EgammaRegressionContainer ecalTrkEnergyRegressUncert_
T sqrt(T t)
Definition: SSEVec.h:19
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool EpCombinationTool::init ( const GBRForest forest)

Definition at line 49 of file EpCombinationTool.cc.

References m_forest, and m_ownForest.

Referenced by CalibratedElectronProducerRun2T< T >::produce().

49  {
50  if (m_ownForest)
51  delete m_forest;
52  m_forest = forest;
53  m_ownForest = false;
54  return true;
55 }
const GBRForest * m_forest
bool EpCombinationTool::init ( const std::string &  regressionFile,
const std::string &  bdtName 
)

Definition at line 27 of file EpCombinationTool.cc.

References gather_cfg::cout, m_forest, and m_ownForest.

29 {
30  TFile* regressionFile = TFile::Open(regressionFileName.c_str());
31  if (!regressionFile) {
32  cout << "ERROR: Cannot open regression file " << regressionFileName << "\n";
33  return false;
34  }
35  if (m_ownForest)
36  delete m_forest;
37  m_forest = (GBRForest*)regressionFile->Get(bdtName.c_str());
38  m_ownForest = true;
39  //regressionFile->GetObject(bdtName.c_str(), m_forest);
40  if (!m_forest) {
41  cout << "ERROR: Cannot find forest " << bdtName << " in " << regressionFileName << "\n";
42  regressionFile->Close();
43  return false;
44  }
45  regressionFile->Close();
46  return true;
47 }
const GBRForest * m_forest
edm::ParameterSetDescription EpCombinationTool::makePSetDescription ( )
static

Definition at line 22 of file EpCombinationTool.cc.

References edm::ParameterSetDescription::add(), and EgammaRegressionContainer::makePSetDescription().

Referenced by CalibratedElectronProducerT< T >::fillDescriptions().

22  {
25  desc.add<edm::ParameterSetDescription>("ecalTrkRegressionUncertConfig",
27  desc.add<double>("maxEcalEnergyForComb", 200.);
28  desc.add<double>("minEOverPForComb", 0.025);
29  desc.add<double>("maxEPDiffInSigmaForComb", 15.);
30  desc.add<double>("maxRelTrkMomErrForComb", 10.);
31  return desc;
32 }
static edm::ParameterSetDescription makePSetDescription()
ParameterDescriptionBase * add(U const &iLabel, T const &value)
EpCombinationTool& EpCombinationTool::operator= ( const EpCombinationTool other)
delete
void EpCombinationTool::setEventContent ( const edm::EventSetup iSetup)

Member Data Documentation

EgammaRegressionContainer EpCombinationTool::ecalTrkEnergyRegress_
private

Definition at line 31 of file EpCombinationTool.h.

Referenced by combine(), and setEventContent().

EgammaRegressionContainer EpCombinationTool::ecalTrkEnergyRegressUncert_
private

Definition at line 32 of file EpCombinationTool.h.

Referenced by combine(), and setEventContent().

const GBRForest* EpCombinationTool::m_forest
private

Definition at line 23 of file EpCombinationTool.h.

Referenced by combine(), init(), and ~EpCombinationTool().

bool EpCombinationTool::m_ownForest
private

Definition at line 24 of file EpCombinationTool.h.

Referenced by init(), and ~EpCombinationTool().

float EpCombinationTool::maxEcalEnergyForComb_
private

Definition at line 33 of file EpCombinationTool.h.

float EpCombinationTool::maxEPDiffInSigmaForComb_
private

Definition at line 35 of file EpCombinationTool.h.

Referenced by combine().

float EpCombinationTool::maxRelTrkMomErrForComb_
private

Definition at line 36 of file EpCombinationTool.h.

Referenced by combine().

float EpCombinationTool::minEOverPForComb_
private

Definition at line 34 of file EpCombinationTool.h.

Referenced by combine().