59 the_aeta = std::abs (adj_eta);
61 the_aeta = std::abs (
eta);
63 const float etamax =
m_etamax (myctx);
64 if (the_aeta >= etamax)
return;
70 if (the_aeta < eta_start_crack)
72 else if (the_aeta > eta_end_crack)
81 unsigned int shape[] = {2};
83 interp_barriers[0] = eta_start_crack;
84 interp_barriers[1] = eta_end_crack;
87 int ibin =
static_cast<int> (the_aeta / etamax * correction.size());
88 pars[0] = correction[ibin][1];
89 pars[1] = correction[ibin][2];
90 pars[2] = correction[ibin][3];
91 pars[3] = correction[ibin][4];
92 pars[4] = correction[ibin][5];
93 pars[5] = correction[ibin][6];
104 { CaloSampling::PreSamplerB,
107 CaloSampling::EMB3 },
108 { CaloSampling::PreSamplerE,
116 float a = cluster->
e()*exp(-pars[4])/pars[0];
117 if (
a>1) b = pars[0]*log(
a) + pars[0];
120 cluster->setEnergy (samps[si][0], cluster->
eSample (samps[si][0]) * pars[1]);
121 cluster->setEnergy (samps[si][3], cluster->
eSample (samps[si][3]) * pars[2]);
124 for (
int sampling=0; sampling<4; ++sampling)
125 total += cluster->
eSample (samps[si][sampling]);
127 cluster->
setE (pars[3] * (b + pars[5] + total));
virtual void makeTheCorrection(const Context &myctx, xAOD::CaloCluster *cluster, const CaloDetDescrElement *elt, float eta, float adj_eta, float phi, float adj_phi, CaloSampling::CaloSample samp) const
Virtual function for the correction-specific code.
float interpolate(const CaloRec::Array< 2 > &a, float x, unsigned int degree, unsigned int ycol=1, const CaloRec::Array< 1 > ®ions=CaloRec::Array< 1 >(), int n_points=-1, bool fixZero=false)
Polynomial interpolation in a table.