ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Calorimeter
CaloClusterCorrection
src
CaloTopoEMLongWeights.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
/********************************************************************
6
7
NAME: CaloTopoEMLongWeights.cxx
8
PACKAGE: offline/Calorimter/CaloSwLongWeights
9
10
AUTHORS: N. Kerschen
11
CREATED: Nov 8, 2006
12
13
PURPOSE: Longitudinal weights for topoEM cluster (thresholds:633)
14
15
********************************************************************/
16
#include "
CaloTopoEMLongWeights.h
"
17
#include "
CaloClusterCorrection/interpolate.h
"
18
19
20
using
xAOD::CaloCluster
;
21
using
CaloClusterCorr::interpolate
;
22
23
44
void
CaloTopoEMLongWeights::makeTheCorrection
45
(
const
Context& myctx,
46
CaloCluster
* cluster,
47
const
CaloDetDescrElement
*
/*elt*/
,
48
float
eta
,
49
float
adj_eta,
50
float
/*phi*/
,
51
float
/*adj_phi*/
,
52
CaloSampling::CaloSample
/*samp*/
)
const
53
{
54
// ??? In principle, we should use adj_eta for the interpolation
55
// and range checks. However, the v2 corrections were derived
56
// using regular eta instead.
57
float
the_aeta;
58
if
(
m_use_raw_eta
(myctx))
59
the_aeta = std::abs (adj_eta);
60
else
61
the_aeta = std::abs (
eta
);
62
63
const
float
etamax =
m_etamax
(myctx);
64
if
(the_aeta >= etamax)
return
;
65
66
const
float
eta_start_crack =
m_eta_start_crack
(myctx);
67
const
float
eta_end_crack =
m_eta_end_crack
(myctx);
68
69
int
si;
70
if
(the_aeta < eta_start_crack)
71
si = 0;
72
else
if
(the_aeta > eta_end_crack)
73
si = 1;
74
else
{
75
// No corrections are applied for the crack region.
76
return
;
77
}
78
79
const
CxxUtils::Array<2>
correction =
m_correction
(myctx);
80
81
unsigned
int
shape[] = {2};
82
CaloRec::WritableArrayData<1>
interp_barriers (shape);
83
interp_barriers[0] = eta_start_crack;
84
interp_barriers[1] = eta_end_crack;
85
86
float
pars[6];
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];
94
95
// for (int i=0; i<6; i++)
96
// pars[i] = interpolate (correction,
97
// the_aeta,
98
// degree,
99
// i+1,
100
// interp_barriers);
101
102
static
const
103
CaloSampling::CaloSample
samps[2][4] = {
104
{ CaloSampling::PreSamplerB,
105
CaloSampling::EMB1,
106
CaloSampling::EMB2,
107
CaloSampling::EMB3 },
108
{ CaloSampling::PreSamplerE,
109
CaloSampling::EME1,
110
CaloSampling::EME2,
111
CaloSampling::EME3 }
112
};
113
114
float
b = 0;
115
if
(pars[0] != 0) {
116
float
a
= cluster->
e
()*exp(-pars[4])/pars[0];
117
if
(
a
>1) b = pars[0]*log(
a
) + pars[0];
118
}
119
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]);
122
123
double
total = 0;
124
for
(
int
sampling=0; sampling<4; ++sampling)
125
total += cluster->
eSample
(samps[si][sampling]);
126
127
cluster->
setE
(pars[3] * (b + pars[5] + total));
128
}
129
130
eta
Scalar eta() const
pseudorapidity method
Definition
AmgMatrixBasePlugin.h:83
CaloTopoEMLongWeights.h
a
static Double_t a
Definition
LArPhysWaveHECTool.cxx:38
CaloCluster
Principal data class for CaloCell clusters.
Definition
Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:79
CaloCluster::eSample
double eSample(sampling_type sampling) const
Retrieve energy in a given sampling.
Definition
Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:975
CaloCluster::e
virtual double e() const
Retrieve energy independent of signal state.
Definition
Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:753
CaloCluster::setE
virtual void setE(double e)
Set energy.
Definition
Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:767
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell.
Definition
Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
CaloSampling::CaloSample
CaloSample
Definition
Calorimeter/CaloGeoHelpers/CaloGeoHelpers/CaloSampling.h:22
CaloTopoEMLongWeights::m_eta_start_crack
Constant< float > m_eta_start_crack
Definition
CaloTopoEMLongWeights.h:63
CaloTopoEMLongWeights::m_correction
Constant< CxxUtils::Array< 2 > > m_correction
Definition
CaloTopoEMLongWeights.h:62
CaloTopoEMLongWeights::m_use_raw_eta
Constant< bool > m_use_raw_eta
Definition
CaloTopoEMLongWeights.h:67
CaloTopoEMLongWeights::m_etamax
Constant< float > m_etamax
Definition
CaloTopoEMLongWeights.h:65
CaloTopoEMLongWeights::m_eta_end_crack
Constant< float > m_eta_end_crack
Definition
CaloTopoEMLongWeights.h:64
CaloTopoEMLongWeights::makeTheCorrection
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.
Definition
CaloTopoEMLongWeights.cxx:45
CxxUtils::Array
Read-only multidimensional array.
Definition
Control/CxxUtils/CxxUtils/Array.h:135
CxxUtils::WritableArrayData
Definition
Control/CxxUtils/CxxUtils/Array.h:775
interpolate.h
Polynomial interpolation in a table.
CaloClusterCorr::interpolate
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.
Definition
interpolate.cxx:74
xAOD::CaloCluster
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
Definition
Event/xAOD/xAODCaloEvent/xAODCaloEvent/CaloCluster.h:19
Generated on
for ATLAS Offline Software by
1.17.0