45 faBarrel =
new TF1(
"faBarrel",
"(x<190)?([0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))):([9]+[10]*exp(-x/[11]))",1.,1000.);
58 fbBarrel =
new TF1(
"fbBarrel",
"(x<190)?([0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))):([9]+[10]*exp(-x/[11]))",1.,1000.);
71 fcBarrel =
new TF1(
"fcBarrel",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
81 faEtaBarrel =
new TF1(
"faEtaBarrelEH",
"[0]+[1]*exp(-x/[2])",1.,1000.);
85 fbEtaBarrel =
new TF1(
"fbEtaBarrelEH",
"[0]+[1]*exp(-x/[2])",1.,1000.);
91 faEndcap =
new TF1(
"faEndcap",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
97 faEndcap->SetParameter(5,0.00670624);
100 faEndcap->SetParameter(8,0.0329707);
101 fbEndcap =
new TF1(
"fbEndcap",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
105 fbEndcap->SetParameter(3,0.0963555);
106 fbEndcap->SetParameter(4,-0.627371);
107 fbEndcap->SetParameter(5,0.0023847);
110 fbEndcap->SetParameter(8,-0.0108459);
111 fcEndcap =
new TF1(
"fcEndcap",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
119 fcEndcap->SetParameter(7,-0.252215);
121 faEtaEndcap =
new TF1(
"faEtaEndcapEH",
"[0]+[1]*exp(-x/[2])",1.,1000.);
125 fbEtaEndcap =
new TF1(
"fbEtaEndcapEH",
"[0]+[1]*x*exp(x*[2])",1.,1000.);
143 double etaCorrE = 1.;
144 double etaCorrH = 1.;
145 t =
min(999.9,
max(tt,e+h));
146 if ( t < 1. )
return;
157 if ( a < -0.25 || b < -0.25 ) {
164 t =
min(999.9,
max(tt, thresh+a*e+b*h));
172 if ( e > 0. && thresh > 0. )
174 if ( h > 0. && thresh > 0. )
185 if ( a < -0.25 || b < -0.25 ) {
192 t =
min(999.9,
max(tt, thresh+a*e+b*h));
197 double etaPow = dEta * dEta * dEta * dEta;
204 if ( e > 0. && thresh > 0. )
206 if ( h > 0. && thresh > 0. )
213 if ( e < 0. || h < 0. ) {
216 if ( e < 0. ) e = ee;
217 if ( h < 0. ) h = hh;
389 std::vector<double> &EclustersPS1,
390 std::vector<double> &EclustersPS2,
391 bool crackCorrection )
const {
392 double ePS1(std::accumulate(EclustersPS1.begin(), EclustersPS1.end(), 0.0));
393 double ePS2(std::accumulate(EclustersPS2.begin(), EclustersPS2.end(), 0.0));
394 return energyEm(clusterEcal, ePS1, ePS2, crackCorrection);
401 bool crackCorrection )
const {
402 double eEcal = clusterEcal.
energy();
409 double calibrated =
Ecorr(eEcal,ePS1,ePS2,eta,phi, crackCorrection);
415 std::vector<double> &EclustersPS1,
416 std::vector<double> &EclustersPS2,
417 double& ps1,
double& ps2,
418 bool crackCorrection)
const {
419 double ePS1(std::accumulate(EclustersPS1.begin(), EclustersPS1.end(), 0.0));
420 double ePS2(std::accumulate(EclustersPS2.begin(), EclustersPS2.end(), 0.0));
421 return energyEm(clusterEcal, ePS1, ePS2, ps1, ps2, crackCorrection);
424 double ePS1,
double ePS2,
425 double& ps1,
double& ps2,
426 bool crackCorrection)
const {
427 double eEcal = clusterEcal.
energy();
434 double calibrated =
Ecorr(eEcal,ePS1,ePS2,eta,phi,ps1,ps2,crackCorrection);
443 if(!out )
return out;
445 out<<
"PFEnergyCalibration -- "<<endl;
449 std::cout <<
"Functions taken from the global tags : " << std::endl;
451 static std::map<std::string, PerformanceResult::ResultType> functType;
464 for(std::map<std::string,PerformanceResult::ResultType>::const_iterator
465 func = functType.begin();
466 func != functType.end();
469 cout <<
"Function: " <<
func->first << endl;
476 std::cout <<
"Default calibration functions : " << std::endl;
529 std::vector<double> fillcPhi() {
530 std::vector<double> retValue;
531 retValue.resize(18,0);
533 for(
unsigned i=1;
i<=17;++
i) retValue[
i]=retValue[0]-2*
i*pi/18;
539 const std::vector<double> cPhi = fillcPhi();
553 if(eta<0) phi +=delta_cPhi;
555 if (phi>=-pi && phi<=pi){
558 if (phi<cPhi[17] || phi>=cPhi[0]){
559 if (phi<0) phi+= 2*
pi;
560 m =
minimum(phi -cPhi[0],phi-cPhi[17]-2*pi);
569 m=
minimum(phi-cPhi[i+1],phi-cPhi[i]);
578 std::cout<<
"Problem in dminphi"<<std::endl;
604 double result = (1+p1*TMath::Gaus(dminphi,p2,p3)+p4*TMath::Gaus(dminphi,p5,p6)+p7*TMath::Gaus(dminphi,p8,p9));
615 constexpr double a[] = {6.13349e-01, 5.08146e-01, 4.44480e-01, 3.3487e-01, 7.65627e-01};
616 constexpr double m[] = {-1.79514e-02, 4.44747e-01, 7.92824e-01, 1.14090e+00, 1.47464e+00};
617 constexpr double s[] = {7.92382e-03, 3.06028e-03, 3.36139e-03, 3.94521e-03, 8.63950e-04};
618 constexpr double sa[] = {1.27228e+01, 3.81517e-02, 1.63507e-01, -6.56480e-02, 1.87160e-01};
619 constexpr double ss[] = {5.48753e-02, -1.00223e-02, 2.22866e-03, 4.26288e-04, 2.67937e-03};
622 for(
unsigned i=0;
i<=4;
i++) result+=a[
i]*TMath::Gaus(eta,m[
i],s[i])*(1+sa[
i]*
TMath::Sign(1.,eta-m[i])*TMath::Exp(-
TMath::Abs(eta-m[i])/ss[i]));
655 double result = (p0+1/(p1+p2*TMath::Power(E,p3))+p4*TMath::Exp(-E/p5)+p6*TMath::Exp(-E*E/(p7*p7)))*(1+p8*eta*eta);
686 constexpr double norm = (p1+p2*(2.6+1.656)/2);
707 constexpr double norm = (p4+p5*(2.6+1.656)/2);
709 double result = (1.0012+p0*TMath::Exp(-E/p3)+p1*TMath::Exp(-E/p2))*(p4+p5*eta)/norm;
725 constexpr double norm = (p1+p2*(2.6+1.656)/2);
727 double result = p0*(p1+p2*etaEcal)/norm;
745 bool crackCorrection )
const {
774 double result = E*(p0+p1*TMath::Exp(-E/p2))*(p3+p4*TMath::Gaus(eta,p6,p5)+p7*
eta)/norm;
786 double E =
Beta(1.0155*eEcal+0.025*(ePS1+0.5976*ePS2)/9
e-5,etaEcal)*eEcal+
Gamma(etaEcal)*(ePS1+
Alpha(etaEcal)*ePS2)/9
e-5 ;
795 double result = E*(p0+p1*TMath::Exp(-E/p2)-p3*TMath::Exp(-E/p4));
806 double gammaprime=
Gamma(etaEcal)/9
e-5;
818 outputPS2 = corrTotES - outputPS1;
824 outputPS1 = corrTotES - outputPS2;
828 outputPS1 = gammaprime*ePS1;
829 outputPS2 = gammaprime*
Alpha(etaEcal)*ePS2;
832 double E =
Beta(1.0155*eEcal+0.025*(ePS1+0.5976*ePS2)/9
e-5,etaEcal)*eEcal+outputPS1+outputPS2;
841 double corrfac=(p0+p1*TMath::Exp(-E/p2)-p3*TMath::Exp(-E/p4));
844 double result = E*corrfac;
866 constexpr double norm = (p4+p5*(2.6+1.656)/2);
868 double result = eEcal*(p0+p1*TMath::Exp(-
TMath::Abs(eEcal-p3)/p2))*(p4+p5*eta)/norm;
899 double result = E*(p0+p1*TMath::Exp(-(E-p3)/p2)+1/(p4+p5*TMath::Power(E,p6)))*(p7+p8*TMath::Gaus(eta,p9,p10)+p11*TMath::Gaus(eta,p12,p13))/norm;
911 bool crackCorrection )
const {
923 if(eta <= endBarrel) result =
EcorrBarrel(eEcal,eta,phi,crackCorrection);
925 else if((eta < endPS) && ePS1==0 && ePS2==0) result =
EcorrPS_ePSNil(eEcal,eta);
926 else if(eta < endPS) result =
EcorrPS(eEcal,ePS1,ePS2,eta);
932 if(result<eEcal) result=eEcal;
951 if(eta <= endBarrel) result =
EcorrBarrel(eEcal,eta,phi,crackCorrection);
953 else if((eta < endPS) && ePS1==0 && ePS2==0) result =
EcorrPS_ePSNil(eEcal,eta);
954 else if(eta < endPS) result =
EcorrPS(eEcal,ePS1,ePS2,eta,ps1,ps2);
960 if(result<eEcal) result=eEcal;
const PerformancePayloadFromTFormula * pfCalibrations
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
double bBarrel(double x) const
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
double aEndcap(double x) const
double bEndcap(double x) const
const ESEEIntercalibConstants * esEEInterCalib_
double Ecorr(double eEcal, double ePS1, double ePS2, double eta, double phi, bool crackCorrection=true) const
float getGammaLow2() const
std::ostream & operator<<(std::ostream &out, const ALILine &li)
double EcorrZoneBeforePS(double E, double eta) const
double Alpha(double eta) const
void energyEmHad(double t, double &e, double &h, double eta, double phi) const
T x() const
Cartesian x coordinate.
MVATrainerComputer * calib
void calculatePositionREP()
computes posrep_ once and for all
double bEtaEndcap(double x) const
double cEndcap(double x) const
const REPPoint & positionREP() const
cluster position: rho, eta, phi
double Beta(double E, double eta) const
Abs< T >::type abs(const T &t)
double energy() const
cluster energy
double EcorrZoneAfterPS(double E, double eta) const
std::pair< int, edm::FunctionWithDict > OK
float getGammaLow3() const
bool insert(BinningVariables::BinningVariablesType, float)
float getGammaLow0() const
double CorrBarrel(double E, double eta) const
double Gamma(double etaEcal) const
float getGammaLow1() const
double energyEm(const reco::PFCluster &clusterEcal, std::vector< double > &EclustersPS1, std::vector< double > &EclustersPS2, bool crackCorrection=true) const
Geom::Phi< T > phi() const
double dCrackPhi(double phi, double eta) const
double aEtaBarrel(double x) const
double aEtaEndcap(double x) const
double bEtaBarrel(double x) const
double CorrEta(double eta) const
void initializeCalibrationFunctions()
double aBarrel(double x) const
double CorrPhi(double phi, double eta) const
double EcorrPS_ePSNil(double eEcal, double eta) const
double cBarrel(double x) const
double EcorrBarrel(double E, double eta, double phi, bool crackCorrection=true) const
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
double EcorrPS(double eEcal, double ePS1, double ePS2, double etaEcal) const
double minimum(double a, double b) const