46 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.);
59 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.);
72 fcBarrel =
new TF1(
"fcBarrel",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
82 faEtaBarrel =
new TF1(
"faEtaBarrelEH",
"[0]+[1]*exp(-x/[2])",1.,1000.);
86 fbEtaBarrel =
new TF1(
"fbEtaBarrelEH",
"[0]+[1]*exp(-x/[2])",1.,1000.);
92 faEndcap =
new TF1(
"faEndcap",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
98 faEndcap->SetParameter(5,0.00670624);
101 faEndcap->SetParameter(8,0.0329707);
102 fbEndcap =
new TF1(
"fbEndcap",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
106 fbEndcap->SetParameter(3,0.0963555);
107 fbEndcap->SetParameter(4,-0.627371);
108 fbEndcap->SetParameter(5,0.0023847);
111 fbEndcap->SetParameter(8,-0.0108459);
112 fcEndcap =
new TF1(
"fcEndcap",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
120 fcEndcap->SetParameter(7,-0.252215);
122 faEtaEndcap =
new TF1(
"faEtaEndcapEH",
"[0]+[1]*exp(-x/[2])",1.,1000.);
126 fbEtaEndcap =
new TF1(
"fbEtaEndcapEH",
"[0]+[1]*x*exp(x*[2])",1.,1000.);
144 double etaCorrE = 1.;
145 double etaCorrH = 1.;
146 t =
min(999.9,
max(tt,e+h));
147 if ( t < 1. )
return;
158 if ( a < -0.25 || b < -0.25 ) {
165 t =
min(999.9,
max(tt, thresh+a*e+b*h));
173 if ( e > 0. && thresh > 0. )
175 if ( h > 0. && thresh > 0. )
186 if ( a < -0.25 || b < -0.25 ) {
193 t =
min(999.9,
max(tt, thresh+a*e+b*h));
198 double etaPow = dEta * dEta * dEta * dEta;
205 if ( e > 0. && thresh > 0. )
207 if ( h > 0. && thresh > 0. )
214 if ( e < 0. || h < 0. ) {
217 if ( e < 0. ) e = ee;
218 if ( h < 0. ) h = hh;
390 std::vector<double> &EclustersPS1,
391 std::vector<double> &EclustersPS2,
392 bool crackCorrection )
const {
393 double ePS1(std::accumulate(EclustersPS1.begin(), EclustersPS1.end(), 0.0));
394 double ePS2(std::accumulate(EclustersPS2.begin(), EclustersPS2.end(), 0.0));
395 return energyEm(clusterEcal, ePS1, ePS2, crackCorrection);
402 bool crackCorrection )
const {
403 double eEcal = clusterEcal.
energy();
410 double calibrated =
Ecorr(eEcal,ePS1,ePS2,eta,phi, crackCorrection);
416 std::vector<double> &EclustersPS1,
417 std::vector<double> &EclustersPS2,
418 double& ps1,
double& ps2,
419 bool crackCorrection)
const {
420 double ePS1(std::accumulate(EclustersPS1.begin(), EclustersPS1.end(), 0.0));
421 double ePS2(std::accumulate(EclustersPS2.begin(), EclustersPS2.end(), 0.0));
422 return energyEm(clusterEcal, ePS1, ePS2, ps1, ps2, crackCorrection);
425 double ePS1,
double ePS2,
426 double& ps1,
double& ps2,
427 bool crackCorrection)
const {
428 double eEcal = clusterEcal.
energy();
435 double calibrated =
Ecorr(eEcal,ePS1,ePS2,eta,phi,ps1,ps2,crackCorrection);
444 if(!out )
return out;
446 out<<
"PFEnergyCalibration -- "<<endl;
450 std::cout <<
"Functions taken from the global tags : " << std::endl;
452 static std::map<std::string, PerformanceResult::ResultType> functType;
465 for(std::map<std::string,PerformanceResult::ResultType>::const_iterator
466 func = functType.begin();
467 func != functType.end();
470 cout <<
"Function: " <<
func->first << endl;
477 std::cout <<
"Default calibration functions : " << std::endl;
530 std::vector<double> fillcPhi() {
531 std::vector<double> retValue;
532 retValue.resize(18,0);
534 for(
unsigned i=1;
i<=17;++
i) retValue[
i]=retValue[0]-2*
i*pi/18;
540 const std::vector<double> cPhi = fillcPhi();
554 if(eta<0) phi +=delta_cPhi;
556 if (phi>=-
pi && phi<=
pi){
559 if (phi<cPhi[17] || phi>=cPhi[0]){
560 if (phi<0) phi+= 2*
pi;
561 m =
minimum(phi -cPhi[0],phi-cPhi[17]-2*
pi);
570 m=
minimum(phi-cPhi[i+1],phi-cPhi[i]);
579 std::cout<<
"Problem in dminphi"<<std::endl;
605 double result = (1+p1*TMath::Gaus(dminphi,p2,p3)+p4*TMath::Gaus(dminphi,p5,p6)+p7*TMath::Gaus(dminphi,p8,p9));
616 constexpr double a[] = {6.13349e-01, 5.08146e-01, 4.44480e-01, 3.3487e-01, 7.65627e-01};
617 constexpr double m[] = {-1.79514e-02, 4.44747e-01, 7.92824e-01, 1.14090e+00, 1.47464e+00};
618 constexpr double s[] = {7.92382e-03, 3.06028e-03, 3.36139e-03, 3.94521e-03, 8.63950e-04};
619 constexpr double sa[] = {1.27228e+01, 3.81517e-02, 1.63507e-01, -6.56480e-02, 1.87160e-01};
620 constexpr double ss[] = {5.48753e-02, -1.00223e-02, 2.22866e-03, 4.26288e-04, 2.67937e-03};
623 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]));
656 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);
687 constexpr double norm = (p1+p2*(2.6+1.656)/2);
708 constexpr double norm = (p4+p5*(2.6+1.656)/2);
710 double result = (1.0012+p0*TMath::Exp(-E/p3)+p1*TMath::Exp(-E/p2))*(p4+p5*eta)/norm;
726 constexpr double norm = (p1+p2*(2.6+1.656)/2);
728 double result = p0*(p1+p2*etaEcal)/norm;
746 bool crackCorrection )
const {
775 double result = E*(p0+p1*TMath::Exp(-E/p2))*(p3+p4*TMath::Gaus(eta,p6,p5)+p7*
eta)/norm;
787 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 ;
796 double result = E*(p0+p1*TMath::Exp(-E/p2)-p3*TMath::Exp(-E/p4));
807 double gammaprime=
Gamma(etaEcal)/9
e-5;
819 outputPS2 = corrTotES - outputPS1;
825 outputPS1 = corrTotES - outputPS2;
829 outputPS1 = gammaprime*ePS1;
830 outputPS2 = gammaprime*
Alpha(etaEcal)*ePS2;
833 double E =
Beta(1.0155*eEcal+0.025*(ePS1+0.5976*ePS2)/9
e-5,etaEcal)*eEcal+outputPS1+outputPS2;
842 double corrfac=(p0+p1*TMath::Exp(-E/p2)-p3*TMath::Exp(-E/p4));
845 double result = E*corrfac;
867 constexpr double norm = (p4+p5*(2.6+1.656)/2);
869 double result = eEcal*(p0+p1*TMath::Exp(-
TMath::Abs(eEcal-p3)/p2))*(p4+p5*eta)/norm;
900 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;
912 bool crackCorrection )
const {
924 if(eta <= endBarrel) result =
EcorrBarrel(eEcal,eta,phi,crackCorrection);
926 else if((eta < endPS) && ePS1==0 && ePS2==0) result =
EcorrPS_ePSNil(eEcal,eta);
927 else if(eta < endPS) result =
EcorrPS(eEcal,ePS1,ePS2,eta);
933 if(result<eEcal) result=eEcal;
952 if(eta <= endBarrel) result =
EcorrBarrel(eEcal,eta,phi,crackCorrection);
954 else if((eta < endPS) && ePS1==0 && ePS2==0) result =
EcorrPS_ePSNil(eEcal,eta);
955 else if(eta < endPS) result =
EcorrPS(eEcal,ePS1,ePS2,eta,ps1,ps2);
961 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
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
void calculatePositionREP()
computes posrep_ once and for all
double bEtaEndcap(double x) const
friend std::ostream & operator<<(std::ostream &out, const PFEnergyCalibration &calib)
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
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