42 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.);
55 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.);
68 fcBarrel =
new TF1(
"fcBarrel",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
78 faEtaBarrel =
new TF1(
"faEtaBarrelEH",
"[0]+[1]*exp(-x/[2])",1.,1000.);
82 fbEtaBarrel =
new TF1(
"fbEtaBarrelEH",
"[0]+[1]*exp(-x/[2])",1.,1000.);
88 faEndcap =
new TF1(
"faEndcap",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
94 faEndcap->SetParameter(5,0.00670624);
98 fbEndcap =
new TF1(
"fbEndcap",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
102 fbEndcap->SetParameter(3,0.0963555);
103 fbEndcap->SetParameter(4,-0.627371);
104 fbEndcap->SetParameter(5,0.0023847);
107 fbEndcap->SetParameter(8,-0.0108459);
108 fcEndcap =
new TF1(
"fcEndcap",
"[0]+((([1]+([2]/x^[8]))*exp(-(x^[6]/[3])))-([4]*exp(-(x^[7]/[5]))))",1.,1000.);
116 fcEndcap->SetParameter(7,-0.252215);
118 faEtaEndcap =
new TF1(
"faEtaEndcapEH",
"[0]+[1]*exp(-x/[2])",1.,1000.);
122 fbEtaEndcap =
new TF1(
"fbEtaEndcapEH",
"[0]+[1]*x*exp(x*[2])",1.,1000.);
140 double etaCorrE = 1.;
141 double etaCorrH = 1.;
142 t =
min(999.9,
max(tt,e+h));
143 if ( t < 1. )
return;
154 if ( a < -0.25 || b < -0.25 ) {
161 t =
min(999.9,
max(tt, thresh+a*e+b*h));
169 if ( e > 0. && thresh > 0. )
171 if ( h > 0. && thresh > 0. )
182 if ( a < -0.25 || b < -0.25 ) {
189 t =
min(999.9,
max(tt, thresh+a*e+b*h));
194 double etaPow = dEta * dEta * dEta * dEta;
201 if ( e > 0. && thresh > 0. )
203 if ( h > 0. && thresh > 0. )
210 if ( e < 0. || h < 0. ) {
213 if ( e < 0. ) e = ee;
214 if ( h < 0. ) h = hh;
386 std::vector<double> &EclustersPS1,
387 std::vector<double> &EclustersPS2,
388 bool crackCorrection )
const {
389 double ePS1(std::accumulate(EclustersPS1.begin(), EclustersPS1.end(), 0.0));
390 double ePS2(std::accumulate(EclustersPS2.begin(), EclustersPS2.end(), 0.0));
391 return energyEm(clusterEcal, ePS1, ePS2, crackCorrection);
398 bool crackCorrection )
const {
399 double eEcal = clusterEcal.
energy();
406 double calibrated =
Ecorr(eEcal,ePS1,ePS2,eta,phi, crackCorrection);
412 std::vector<double> &EclustersPS1,
413 std::vector<double> &EclustersPS2,
414 double& ps1,
double& ps2,
415 bool crackCorrection)
const {
416 double ePS1(std::accumulate(EclustersPS1.begin(), EclustersPS1.end(), 0.0));
417 double ePS2(std::accumulate(EclustersPS2.begin(), EclustersPS2.end(), 0.0));
418 return energyEm(clusterEcal, ePS1, ePS2, ps1, ps2, crackCorrection);
421 double ePS1,
double ePS2,
422 double& ps1,
double& ps2,
423 bool crackCorrection)
const {
424 double eEcal = clusterEcal.
energy();
431 double calibrated =
Ecorr(eEcal,ePS1,ePS2,eta,phi,ps1,ps2,crackCorrection);
440 if(!out )
return out;
442 out<<
"PFEnergyCalibration -- "<<endl;
446 std::cout <<
"Functions taken from the global tags : " << std::endl;
448 static std::map<std::string, PerformanceResult::ResultType> functType;
461 for(std::map<std::string,PerformanceResult::ResultType>::const_iterator
462 func = functType.begin();
463 func != functType.end();
466 cout <<
"Function: " << func->first << endl;
473 std::cout <<
"Default calibration functions : " << std::endl;
526 std::vector<double> fillcPhi() {
527 std::vector<double> retValue;
528 retValue.resize(18,0);
530 for(
unsigned i=1;
i<=17;++
i) retValue[
i]=retValue[0]-2*
i*pi/18;
536 const std::vector<double> cPhi = fillcPhi();
550 if(eta<0) phi +=delta_cPhi;
552 if (phi>=-pi && phi<=pi){
555 if (phi<cPhi[17] || phi>=cPhi[0]){
556 if (phi<0) phi+= 2*
pi;
557 m =
minimum(phi -cPhi[0],phi-cPhi[17]-2*pi);
566 m=
minimum(phi-cPhi[i+1],phi-cPhi[i]);
575 std::cout<<
"Problem in dminphi"<<std::endl;
601 double result = (1+p1*TMath::Gaus(dminphi,p2,p3)+p4*TMath::Gaus(dminphi,p5,p6)+p7*TMath::Gaus(dminphi,p8,p9));
612 constexpr double a[] = {6.13349e-01, 5.08146e-01, 4.44480e-01, 3.3487e-01, 7.65627e-01};
613 constexpr double m[] = {-1.79514e-02, 4.44747e-01, 7.92824e-01, 1.14090e+00, 1.47464e+00};
614 constexpr double s[] = {7.92382e-03, 3.06028e-03, 3.36139e-03, 3.94521e-03, 8.63950e-04};
615 constexpr double sa[] = {1.27228e+01, 3.81517e-02, 1.63507e-01, -6.56480e-02, 1.87160e-01};
616 constexpr double ss[] = {5.48753e-02, -1.00223e-02, 2.22866e-03, 4.26288e-04, 2.67937e-03};
619 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]));
652 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);
683 constexpr double norm = (p1+p2*(2.6+1.656)/2);
704 constexpr double norm = (p4+p5*(2.6+1.656)/2);
706 double result = (1.0012+p0*TMath::Exp(-E/p3)+p1*TMath::Exp(-E/p2))*(p4+p5*eta)/norm;
722 constexpr double norm = (p1+p2*(2.6+1.656)/2);
724 double result = p0*(p1+p2*etaEcal)/norm;
742 bool crackCorrection )
const {
771 double result = E*(p0+p1*TMath::Exp(-E/p2))*(p3+p4*TMath::Gaus(eta,p6,p5)+p7*
eta)/norm;
783 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 ;
792 double result = E*(p0+p1*TMath::Exp(-E/p2)-p3*TMath::Exp(-E/p4));
803 double gammaprime=
Gamma(etaEcal)/9
e-5;
804 outputPS1=gammaprime*ePS1;
805 outputPS2=gammaprime*
Alpha(etaEcal)*ePS2;
806 double E =
Beta(1.0155*eEcal+0.025*(ePS1+0.5976*ePS2)/9
e-5,etaEcal)*eEcal+outputPS1+outputPS2;
815 double corrfac=(p0+p1*TMath::Exp(-E/p2)-p3*TMath::Exp(-E/p4));
818 double result = E*corrfac;
840 constexpr double norm = (p4+p5*(2.6+1.656)/2);
842 double result = eEcal*(p0+p1*TMath::Exp(-
TMath::Abs(eEcal-p3)/p2))*(p4+p5*eta)/norm;
873 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;
885 bool crackCorrection )
const {
897 if(eta <= endBarrel) result =
EcorrBarrel(eEcal,eta,phi,crackCorrection);
899 else if((eta < endPS) && ePS1==0 && ePS2==0) result =
EcorrPS_ePSNil(eEcal,eta);
900 else if(eta < endPS) result =
EcorrPS(eEcal,ePS1,ePS2,eta);
906 if(result<eEcal) result=eEcal;
925 if(eta <= endBarrel) result =
EcorrBarrel(eEcal,eta,phi,crackCorrection);
927 else if((eta < endPS) && ePS1==0 && ePS2==0) result =
EcorrPS_ePSNil(eEcal,eta);
928 else if(eta < endPS) result =
EcorrPS(eEcal,ePS1,ePS2,eta,ps1,ps2);
934 if(result<eEcal) result=eEcal;
const PerformancePayloadFromTFormula * pfCalibrations
double bBarrel(double x) const
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
double aEndcap(double x) const
double bEndcap(double x) const
double Ecorr(double eEcal, double ePS1, double ePS2, double eta, double phi, bool crackCorrection=true) 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)
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
double energy() const
cluster energy
double EcorrZoneAfterPS(double E, double eta) const
std::pair< int, edm::FunctionWithDict > OK
bool insert(BinningVariables::BinningVariablesType, float)
double CorrBarrel(double E, double eta) const
double Gamma(double etaEcal) 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