ATLAS Offline Software
Loading...
Searching...
No Matches
CaloSwEta1e_g3.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5/********************************************************************
6
7NAME: CaloSwEta1e_g3.cxx
8PACKAGE: offline/Calorimeter/CaloClusterCorrection
9
10AUTHORS: H. Ma, S. Rajagopalan
11CREATED: Dec. 15, 1999
12
13PURPOSE: S-shape corrections in sampling 1 as a function of eta for endcap
14 (Tuned using 100 GeV E photons)
15 base class: CaloClusterCorrection
16 Correction tuned on G3 samples.
17
18Atrecon Orig: emreco/qeta1e.age
19
20Updated: Feb 11, 2003 (MW)
21 new correction for DC1 data
22Updated: Feb 28, 2003 (MW)
23 protect against unphysical clusters
24
25Updated: May 5, 2004 (Sven Menke)
26 base class changed from algo to tool
27
28Updated: June, 2004 (sss)
29 Use ToolWithConstants to get correction constants.
30********************************************************************/
31#include "CaloSwEta1e_g3.h"
33#include <cmath>
34
37
38// granularity of middle EM barrel layer
39
41
42// make correction to one cluster
44 CaloCluster* cluster) const
45{
46 // Only for endcap
47 if (!cluster->inEndcap())
48 return;
49
50 const CxxUtils::Array<3> correction = m_correction (myctx);
51 const float correction_coef = m_correction_coef (myctx);
52 const int correction_degree = m_correction_degree (myctx);
53
54 float eta = cluster->etaSample(CaloSampling::EME1);
55 if (eta == -999.) return;
56 float etamax = cluster->etamax(CaloSampling::EME1);
57 float aeta = fabs(eta);
58
59 int corrndx;
60 float ufrac;
61 if (aeta > 2.0)
62 {
64 corrndx = 0;
65 }
66 else if (aeta > 1.8)
67 {
68 ufrac = s_middle_layer_granularity*(1./6);
69 corrndx = 1;
70 }
71 else if (aeta > 1.5)
72 {
74 corrndx = 2;
75 }
76 else
77 {
78 // not in endcap, no correction.
79 return;
80 }
81
82 float u = fmod(eta-etamax, ufrac/2.);
83 u += ufrac/2.;
84 if (eta < 0.) u = ufrac-u;
85 float deta = correction_coef * interpolate (correction[corrndx],
86 u,
87 correction_degree);
88 if (eta < 0)
89 deta = -deta;
90
91 // Make the correction:
92 cluster->setEta( CaloSampling::EME1, eta - deta);
93}
94
95
96const std::string& CaloSwEta1e_g3::toolType() const
97{
98 static const std::string typeName = "CaloSwEta_g3";
99 return typeName;
100}
Scalar eta() const
pseudorapidity method
Principal data class for CaloCell clusters.
double etamax(sampling_type sampling) const
Retrieve of cell with maximum energy in given sampling.
virtual void setEta(double eta)
Set eta.
double etaSample(sampling_type sampling) const
Retrieve barycenter in a given sample.
bool inEndcap() const
Returns true if at least one clustered cell in EMEC.
Constant< float > m_correction_coef
static const float s_middle_layer_granularity
Constant< int > m_correction_degree
Constant< CxxUtils::Array< 3 > > m_correction
virtual void makeCorrection(const Context &myctx, xAOD::CaloCluster *cluster) const override
virtual const std::string & toolType() const override
Return the name of the type of this tool.
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.