7 #include <CLHEP/Random/RandGaussQ.h> 14 correctionRetriever_(correctionFile),
15 epCombinationTool_(&combinator),
40 const float smearNrSigma,
47 std::array<float,EGEnergySysIndex::kNrSysErrs> retVal;
65 unsigned int gainSeedSC = 12;
66 if (seedRecHit != recHits->
end()) {
76 std::array<float,EGEnergySysIndex::kNrSysErrs> uncertainties{};
101 std::array<float,EGEnergySysIndex::kNrSysErrs>& energyData)
const 104 const float smear = smearCorr.
sigma(et);
105 const float smearRhoUp = smearCorr.
sigma(et,1,0);
106 const float smearRhoDn = smearCorr.
sigma(et,-1,0);
107 const float smearPhiUp = smearCorr.
sigma(et,0,1);
108 const float smearPhiDn = smearCorr.
sigma(et,0,-1);
109 const float smearUp = smearRhoUp;
110 const float smearDn = smearRhoDn;
112 const float corr = scale + smear * smearNrSigma;
113 const float corrRhoUp = scale + smearRhoUp * smearNrSigma;
114 const float corrRhoDn = scale + smearRhoDn * smearNrSigma;
115 const float corrPhiUp = scale + smearPhiUp * smearNrSigma;
116 const float corrPhiDn = scale + smearPhiDn * smearNrSigma;
117 const float corrUp = corrRhoUp;
118 const float corrDn = corrRhoDn;
120 const float corrScaleStatUp = corr+scaleCorr.
scaleErrStat();
121 const float corrScaleStatDn = corr-scaleCorr.
scaleErrStat();
122 const float corrScaleSystUp = corr+scaleCorr.
scaleErrSyst();
123 const float corrScaleSystDn = corr-scaleCorr.
scaleErrSyst();
124 const float corrScaleGainUp = corr+scaleCorr.
scaleErrGain();
125 const float corrScaleGainDn = corr-scaleCorr.
scaleErrGain();
152 const std::pair<float, float> combinedMomentum =
calCombinedMom(ele,corr,smear);
154 const float energyCorr = combinedMomentum.first / oldP4.t();
157 oldP4.y() * energyCorr,
158 oldP4.z() * energyCorr,
159 combinedMomentum.first);
173 const float smear)
const 183 const float smear)
const 188 const auto oldP4 = ele.
p4();
199 return combinedMomentum;
211 <<
"XXXXXXX requires the RandomNumberGeneratorService\n" 212 "which is not present in the configuration file. You must add the service\n" 213 "in the configuration file or remove the modules that require it.";
215 CLHEP::RandGaussQ gaussDistribution(rng->
getEngine(
id), 0.0, 1.0);
216 return gaussDistribution.fire();
float trackMomentumError() const
const Corrections & corrections() const
const LorentzVector & p4(P4Kind kind) const
constexpr bool isNotFinite(T x)
void setEcalEnergy(reco::GsfElectron &ele, const float scale, const float smear) const
EnergyScaleCorrection correctionRetriever_
void correctMomentum(const LorentzVector &p4, float trackMomentumError, float p4Error)
std::vector< EcalRecHit >::const_iterator const_iterator
float p4Error(P4Kind kind) const
void initPrivateRng(TRandom *rnd)
void calibrate(SimpleElectron &electron, edm::StreamID const &)
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
float scaleErrGain() const
ElectronEnergyCalibrator()
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
void setCorrectedEcalEnergyError(float newEnergyError)
const ScaleCorrection * getScaleCorr(unsigned int runnr, double et, double eta, double r9, unsigned int gainSeed) const
double energy() const final
energy
Abs< T >::type abs(const T &t)
const SmearCorrection * getSmearCorr(unsigned int runnr, double et, double eta, double r9, unsigned int gainSeed) const
float ecalEnergyError() const
float scaleErr(const std::bitset< kErrNrBits > &uncBitMask) const
float sigma(const float et, const float nrSigmaRho=0., const float nrSigmaPhi=0.) const
const_iterator end() const
double gauss(edm::StreamID const &id) const
et
define resolution functions of each parameter
static const EnergyScaleCorrection::SmearCorrection defaultSmearCorr_
const EpCombinationTool * epCombinationTool_
void setEnergyAndSystVarations(const float scale, const float smearNrSigma, const float et, const EnergyScaleCorrection::ScaleCorrection &scaleCorr, const EnergyScaleCorrection::SmearCorrection &smearCorr, reco::GsfElectron &ele, std::array< float, EGEnergySysIndex::kNrSysErrs > &energyData) const
void setCorrectedEcalEnergy(float newEnergy)
static const EnergyScaleCorrection::ScaleCorrection defaultScaleCorr_
iterator find(key_type k)
SuperClusterRef superCluster() const override
reference to a SuperCluster
float scaleErrSyst() const
float scaleErrStat() const
std::pair< float, float > calCombinedMom(reco::GsfElectron &ele, const float scale, const float smear) const