ATLAS Offline Software
Loading...
Searching...
No Matches
CaloSwPhioff_v2.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
39
40
41#include "CaloSwPhioff_v2.h"
45#include <cmath>
46
47
50
51
73 CaloCluster* cluster,
74 const CaloDetDescrElement* elt,
75 float /*eta*/,
76 float adj_eta,
77 float phi,
78 float /*adj_phi*/,
79 CaloSampling::CaloSample samp) const
80{
81 // Calculate the correction.
82 float offs = m_correction_coef(myctx) * energy_interpolation
83 (cluster->e(),
84 Builder (m_correction (myctx),
85 m_interp_barriers (myctx),
86 m_degree (myctx),
87 std::abs (adj_eta)),
88 m_energies(myctx),
89 m_energy_degree(myctx));
90
91 // Flip the sign, if needed.
92 if (m_flip_phi(myctx) && elt->eta_raw() < 0)
93 offs = -offs;
94
95 // Apply the correction.
96 cluster->setPhi (samp, CaloPhiRange::fix (phi + offs));
97}
98
99
109 const CxxUtils::Array<1>& interp_barriers,
110 int degree,
111 float aeta)
112 : m_correction (correction),
113 m_interp_barriers (interp_barriers),
114 m_degree (degree),
115 m_aeta (aeta)
116{
117}
118
119
126float CaloSwPhioff_v2::Builder::calculate (int energy_ndx, bool& good) const
127{
128 good = true;
129 return interpolate (m_correction[energy_ndx],
130 m_aeta,
131 m_degree,
132 1,
134}
Scalar phi() const
phi method
Definition of CaloDetDescrManager.
CaloPhiRange class declaration.
EM calorimeter phi offset corrections.
static float energy_interpolation(float energy, const TableBuilder &builder, const CaloRec::Array< 1 > &energies, int energy_degree)
Many of the corrections use the same method for doing the final interpolation in energy.
Principal data class for CaloCell clusters.
virtual double e() const
Retrieve energy independent of signal state.
virtual void setPhi(double phi)
Set phi.
This class groups all DetDescr information related to a CaloCell.
static double fix(double phi)
virtual float calculate(int energy_ndx, bool &good) const
Calculate the correction for tabulated energy ENERGY_NDX.
const CxxUtils::Array< 3 > m_correction
Tabulated arrays of function parameters.
Builder(const CxxUtils::Array< 3 > &correction, const CxxUtils::Array< 1 > &interp_barriers, int degree, float aeta)
Constructor.
const CxxUtils::Array< 1 > m_interp_barriers
Allow breaking up the interpolation into independent regions.
int m_degree
Degree of the polynomial interpolation.
float m_aeta
The abs(eta) at which the correction is being evaluated (in cal-local coordinates).
Constant< CaloRec::Array< 3 > > m_correction
Calibration constant: tabulated arrays of function parameters.
Constant< CxxUtils::Array< 1 > > m_interp_barriers
Calibration constant: allow breaking up the interpolation into independent regions.
Constant< bool > m_flip_phi
Calibration constant: if true, the correction gets an opposite sign if eta < 0.
Constant< CxxUtils::Array< 1 > > m_energies
Calibration constant: table of energies at which the correction was tabulated.
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< int > m_energy_degree
Calibration constant: degree of the polynomial interpolation in energy.
Constant< int > m_degree
Calibration constant: degree of the polynomial interpolation.
Constant< float > m_correction_coef
Calibration constant: coefficient by which to scale the entire correction.
Read-only multidimensional array.
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 > &regions=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.