13#include "CLHEP/Units/PhysicalConstants.h"
17#include "GaudiKernel/MsgStream.h"
18#include "GaudiKernel/StatusCode.h"
27using std::numbers::pi;
33inline constexpr double twopi = 2*
pi;
34inline constexpr double deta = 0.2;
35inline constexpr double dphi =
twopi / 64. ;
48 return StatusCode::SUCCESS;
85 the_aeta = std::abs (adj_eta);
88 the_aeta = std::abs (
eta);
92 float the_aeta_boundaries;
94 the_aeta_boundaries = std::abs (adj_eta);
96 the_aeta_boundaries = std::abs (
eta);
105 float eta_clus = cluster->
eta();
106 float phi_clus = cluster->
phi();
119 for ( ; f_cell!=l_cell; ++f_cell)
123 if (CaloCell_ID::TileGap3 == cell->caloDDE()->getSampling()) {
124 double phic = cell->phi();
125 double etac = cell->eta();
127 float diffeta = etac-eta_clus;
128 float diffphi = phic-phi_clus;
129 if (diffphi < -
pi) diffphi +=
twopi;
130 if (diffphi >
pi) diffphi -=
twopi;
132 if(fabs(diffeta)<deta && fabs(diffphi)<dphi){
133 eh_scint += cell->e();
146 const int degree =
m_degree (myctx);
148 a = interpolate (correctionGoodPhi, fabs(eta_clus), degree, 1);
149 alpha = interpolate (correctionGoodPhi, fabs(eta_clus), degree, 2);
150 offset = interpolate (correctionGoodPhi, fabs(eta_clus), degree, 3);
153 const int degree =
m_degree (myctx);
155 a = interpolate (correctionBadPhi, fabs(eta_clus), degree, 1);
156 alpha = interpolate (correctionBadPhi, fabs(eta_clus), degree, 2);
157 offset = interpolate (correctionBadPhi, fabs(eta_clus), degree, 3);
162 float ec = cluster->
e();
166 cluster->
setE (
a*(ec + alpha*eh_scint + offset));
176 (
const std::string& name)
178 return this->
setProperty (StringProperty (
"cells_name", name));
186 int emptyTGEtaPosind[NBad] = {3,12,23,30,35,44,53,60};
187 float emptyTGEtaPos[NBad];
188 int emptyTGEtaNegind[NBad] = {4,13,20,28,37,45,54,61};
189 float emptyTGEtaNeg[NBad];
192 float modSize =
twopi / Nmodules;
193 float offset = modSize/2.;
195 for(
int i=0;i<NBad;i++){
196 float shift = (emptyTGEtaPosind[i]-1)*modSize;
198 emptyTGEtaPos[i] = offset + shift;
200 shift = (emptyTGEtaNegind[i]-1)*modSize;
202 emptyTGEtaNeg[i] = offset + shift;
209 for(
int ipos=0;ipos<NBad;ipos++){
210 float min = emptyTGEtaPos[ipos]-0.05;
211 float max = emptyTGEtaPos[ipos]+0.05;
218 for(
int ipos=0;ipos<NBad;ipos++){
219 float min = emptyTGEtaNeg[ipos]-0.05;
220 float max = emptyTGEtaNeg[ipos]+0.05;
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
Sandrine should document this.
void setProperty(columnar::PythonToolHandle &self, const std::string &key, nb::object value)
Handle class for reading from StoreGate.
Data object for each calorimeter readout cell.
virtual void setenergy(xAOD::CaloCluster *cluster, float energy) const
virtual StatusCode initialize() override
Principal data class for CaloCell clusters.
virtual double e() const
Retrieve energy independent of signal state.
virtual double eta() const
Retrieve eta independent of signal state.
virtual double phi() const
Retrieve phi independent of signal state.
virtual void setE(double e)
Set energy.
This class groups all DetDescr information related to a CaloCell.
Constant< int > m_degree
Calibration constant: The interpolation degree.
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 override
Virtual function for the correction-specific code.
Constant< float > m_etamax_crack
Constant< bool > m_use_raw_eta_boundaries
virtual bool isGoodPhi(float eta, float phi) const
virtual StatusCode setCaloCellContainerName(const std::string &name) override
Change the name of the CaloCellContainer used by this tool.
virtual StatusCode initialize() override
Standard Gaudi initialize method.
Constant< float > m_etamin_crack
Calibration constants: The range over which this correction is defined.
Constant< CxxUtils::Array< 2 > > m_correctionGoodPhi
Calibration constant: The tabulated array of correction weights, A and alpha.
Constant< CxxUtils::Array< 2 > > m_correctionBadPhi
Constant< bool > m_use_raw_eta
Calibration constant: If true, tabulated values are in terms of raw (local) eta.
SG::ReadHandleKey< CaloCellContainer > m_cells_name
Property: The name of the container in which to look to find tile cells.
Read-only multidimensional array.
DataModel_detail::const_iterator< DataVector > const_iterator
Polynomial interpolation in a table.
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.
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.