42 faBarrel =
new TF1(
"faBarrel",
"[0]+([1]+[2]/sqrt(x))*exp(-x/[3])-[4]*exp(-x*x/[5])",1.,1000.);
43 fbBarrel =
new TF1(
"fbBarrel",
"[0]+([1]+[2]/sqrt(x))*exp(-x/[3])-[4]*exp(-x*x/[5])",1.,1000.);
44 fcBarrel =
new TF1(
"fcBarrel",
"[0]+([1]+[2]/sqrt(x))*exp(-x/[3])-[4]*exp(-x*x/[5])",1.,1000.);
45 faEtaBarrel =
new TF1(
"faEtaBarrel",
"[0]+[1]*exp(-x/[2])",1.,1000.);
46 fbEtaBarrel =
new TF1(
"fbEtaBarrel",
"[0]+[1]*exp(-x/[2])+[3]*[3]*exp(-x*x/([4]*[4]))",1.,1000.);
73 faEndcap =
new TF1(
"faEndcap",
"[0]+([1]+[2]/sqrt(x))*exp(-x/[3])-[4]*exp(-x*x/[5])",1.,1000.);
74 fbEndcap =
new TF1(
"fbEndcap",
"[0]+([1]+[2]/sqrt(x))*exp(-x/[3])-[4]*exp(-x*x/[5])",1.,1000.);
75 fcEndcap =
new TF1(
"fcEndcap",
"[0]+([1]+[2]/sqrt(x))*exp(-x/[3])-[4]*exp(-x*x/[5])",1.,1000.);
76 faEtaEndcap =
new TF1(
"faEtaEndcap",
"[0]+[1]*exp(-x/[2])",1.,1000.);
77 fbEtaEndcap =
new TF1(
"fbEtaEndcap",
"[0]+[1]*exp(-x/[2])+[3]*[3]*exp(-x*x/([4]*[4]))",1.,1000.);
85 fcEndcap->SetParameter(1,0.00564779);
117 double etaCorrE = 1.;
118 double etaCorrH = 1.;
119 t =
min(999.9,
max(tt,e+h));
120 if ( t < 1. )
return;
123 if ( fabs(eta) < 1.48 ) {
131 if ( a < -0.25 || b < -0.25 ) {
138 t =
min(999.9,
max(tt, thresh+a*e+b*h));
144 t =
max(tt, thresh+etaCorrE*a*e+etaCorrH*b*h);
146 if ( e > 0. && thresh > 0. )
148 if ( h > 0. && thresh > 0. )
173 if ( a < -0.25 || b < -0.25 ) {
180 t =
min(999.9,
max(tt, thresh+a*e+b*h));
183 double dEta = fabs ( fabs(eta) - 1.5 );
184 double etaPow = dEta * dEta * dEta * dEta;
196 t =
min(999.9,
max(tt, thresh + etaCorrE*a*e + etaCorrH*b*h));
198 if ( e > 0. && thresh > 0. )
200 if ( h > 0. && thresh > 0. )
207 if ( e < 0. || h < 0. ) {
214 if ( e < 0. ) e = ee;
215 if ( h < 0. ) h = hh;
387 std::vector<double> &EclustersPS1,
388 std::vector<double> &EclustersPS2,
389 bool crackCorrection ){
390 double ePS1(std::accumulate(EclustersPS1.begin(), EclustersPS1.end(), 0.0));
391 double ePS2(std::accumulate(EclustersPS2.begin(), EclustersPS2.end(), 0.0));
392 return energyEm(clusterEcal, ePS1, ePS2, crackCorrection);
399 bool crackCorrection ){
400 double eEcal = clusterEcal.
energy();
407 double calibrated =
Ecorr(eEcal,ePS1,ePS2,eta,phi, crackCorrection);
408 if(eEcal!=0 && calibrated==0)
std::cout<<
"Eecal = "<<eEcal<<
" eta = "<<eta<<
" phi = "<<phi<<std::endl;
413 std::vector<double> &EclustersPS1,
414 std::vector<double> &EclustersPS2,
415 double& ps1,
double& ps2,
416 bool crackCorrection){
417 double ePS1(std::accumulate(EclustersPS1.begin(), EclustersPS1.end(), 0.0));
418 double ePS2(std::accumulate(EclustersPS2.begin(), EclustersPS2.end(), 0.0));
419 return energyEm(clusterEcal, ePS1, ePS2, ps1, ps2, crackCorrection);
422 double ePS1,
double ePS2,
423 double& ps1,
double& ps2,
424 bool crackCorrection){
425 double eEcal = clusterEcal.
energy();
432 double calibrated =
Ecorr(eEcal,ePS1,ePS2,eta,phi,ps1,ps2,crackCorrection);
433 if(eEcal!=0 && calibrated==0)
std::cout<<
"Eecal = "<<eEcal<<
" eta = "<<eta<<
" phi = "<<phi<<std::endl;
441 if(!out )
return out;
443 out<<
"PFEnergyCalibration -- "<<endl;
447 std::cout <<
"Functions taken from the global tags : " << std::endl;
449 static std::map<std::string, PerformanceResult::ResultType> functType;
462 for(std::map<std::string,PerformanceResult::ResultType>::const_iterator
463 func = functType.begin();
464 func != functType.end();
467 cout <<
"Function: " << func->first << endl;
474 std::cout <<
"Default calibration functions : " << std::endl;
519 if(TMath::Abs(b)<TMath::Abs(a)) a=
b;
531 static std::vector<double> cPhi;
536 for(
unsigned i=1;
i<=17;++
i) cPhi[
i]=cPhi[0]-2*
i*pi/18;
545 if(eta<0) phi +=delta_cPhi;
547 if (phi>=-pi && phi<=pi){
550 if (phi<cPhi[17] || phi>=cPhi[0]){
551 if (phi<0) phi+= 2*
pi;
552 m =
minimum(phi -cPhi[0],phi-cPhi[17]-2*pi);
561 m=
minimum(phi-cPhi[i+1],phi-cPhi[i]);
570 std::cout<<
"Problem in dminphi"<<std::endl;
596 double result = (1+p1*TMath::Gaus(dminphi,p2,p3)+p4*TMath::Gaus(dminphi,p5,p6)+p7*TMath::Gaus(dminphi,p8,p9));
607 constexpr double a[] = {6.13349e-01, 5.08146e-01, 4.44480e-01, 3.3487e-01, 7.65627e-01};
608 constexpr double m[] = {-1.79514e-02, 4.44747e-01, 7.92824e-01, 1.14090e+00, 1.47464e+00};
609 constexpr double s[] = {7.92382e-03, 3.06028e-03, 3.36139e-03, 3.94521e-03, 8.63950e-04};
610 constexpr double sa[] = {1.27228e+01, 3.81517e-02, 1.63507e-01, -6.56480e-02, 1.87160e-01};
611 constexpr double ss[] = {5.48753e-02, -1.00223e-02, 2.22866e-03, 4.26288e-04, 2.67937e-03};
614 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]));
647 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);
678 constexpr double norm = (p1+p2*(2.6+1.656)/2);
699 constexpr double norm = (p4+p5*(2.6+1.656)/2);
701 double result = (1.0012+p0*TMath::Exp(-E/p3)+p1*TMath::Exp(-E/p2))*(p4+p5*eta)/norm;
717 constexpr double norm = (p1+p2*(2.6+1.656)/2);
719 double result = p0*(p1+p2*etaEcal)/norm;
737 bool crackCorrection ){
766 double result = E*(p0+p1*TMath::Exp(-E/p2))*(p3+p4*TMath::Gaus(eta,p6,p5)+p7*
eta)/norm;
778 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 ;
787 double result = E*(p0+p1*TMath::Exp(-E/p2)-p3*TMath::Exp(-E/p4));
798 double gammaprime=
Gamma(etaEcal)/9
e-5;
799 outputPS1=gammaprime*ePS1;
800 outputPS2=gammaprime*
Alpha(etaEcal)*ePS2;
801 double E =
Beta(1.0155*eEcal+0.025*(ePS1+0.5976*ePS2)/9
e-5,etaEcal)*eEcal+outputPS1+outputPS2;
810 double corrfac=(p0+p1*TMath::Exp(-E/p2)-p3*TMath::Exp(-E/p4));
813 double result = E*corrfac;
835 constexpr double norm = (p4+p5*(2.6+1.656)/2);
837 double result = eEcal*(p0+p1*TMath::Exp(-TMath::Abs(eEcal-p3)/p2))*(p4+p5*eta)/norm;
868 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;
880 bool crackCorrection ) {
892 if(eta <= endBarrel) result =
EcorrBarrel(eEcal,eta,phi,crackCorrection);
894 else if((eta < endPS) && ePS1==0 && ePS2==0) result =
EcorrPS_ePSNil(eEcal,eta);
895 else if(eta < endPS) result =
EcorrPS(eEcal,ePS1,ePS2,eta);
901 if(result<eEcal) result=eEcal;
920 if(eta <= endBarrel) result =
EcorrBarrel(eEcal,eta,phi,crackCorrection);
922 else if((eta < endPS) && ePS1==0 && ePS2==0) result =
EcorrPS_ePSNil(eEcal,eta);
923 else if(eta < endPS) result =
EcorrPS(eEcal,ePS1,ePS2,eta,ps1,ps2);
929 if(result<eEcal) result=eEcal;
double Beta(double E, double eta)
double EcorrZoneAfterPS(double E, double eta)
const PerformancePayloadFromTFormula * pfCalibrations
pair< int, edm::FunctionWithDict > OK
double bBarrel(double x) const
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
double aEndcap(double x) const
double bEndcap(double x) const
double EcorrBarrel(double E, double eta, double phi, bool crackCorrection=true)
double EcorrZoneBeforePS(double E, double eta)
double EcorrPS_ePSNil(double eEcal, double eta)
double CorrEta(double eta)
std::ostream & operator<<(std::ostream &out, const ALILine &li)
void energyEmHad(double t, double &e, double &h, double eta, double phi) const
double Gamma(double etaEcal)
MVATrainerComputer * calib
double CorrPhi(double phi, double eta)
double CorrBarrel(double E, double eta)
const T & max(const T &a, const T &b)
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 dCrackPhi(double phi, double eta)
double energy() const
cluster energy
bool insert(BinningVariables::BinningVariablesType, float)
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
double EcorrPS(double eEcal, double ePS1, double ePS2, double etaEcal)
double aEtaBarrel(double x) const
double Ecorr(double eEcal, double ePS1, double ePS2, double eta, double phi, bool crackCorrection=true)
double aEtaEndcap(double x) const
double bEtaBarrel(double x) const
void initializeCalibrationFunctions()
double minimum(double a, double b)
double aBarrel(double x) const
double cBarrel(double x) 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 energyEm(const reco::PFCluster &clusterEcal, std::vector< double > &EclustersPS1, std::vector< double > &EclustersPS2, bool crackCorrection=true)