ATLAS Offline Software
Loading...
Searching...
No Matches
EgammaHitsShowerDepth.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: EgammaShowerDepth.cxx
8// PACKAGE: Trigger/TrigTools/EgammaHitsShowerDepth.cxx
9//
10// AUTHOR: Werner Spolidoro Freund (wsfreund@cern.ch)
11//
12// REFERENCES: Auxiliar Class for Hits Calibration (BASED ON OFFLINE)
13//
14// Updated: January 14, 2011
15// Modifications on EgammaHitsCalibration updated for offline rev 30069
16//
17// ********************************************************************
18
19
21//#include "TrigCaloEvent/TrigEMCluster.h"
23#include "GaudiKernel/MsgStream.h"
24
25
27{ { CaloSampling::PreSamplerB,
28 CaloSampling::EMB1,
29 CaloSampling::EMB2,
30 CaloSampling::EMB3 },
31 { CaloSampling::PreSamplerE,
32 CaloSampling::EME1,
33 CaloSampling::EME2,
34 CaloSampling::EME3 }
35};
36
37
44float EgammaHitsShowerDepth::depth (const float &aeta,
45 const float start_crack,
46 const float end_crack,
47 const CxxUtils::Array<2>& sampling_depth,
48 const float etamax,
49 const xAOD::TrigEMCluster* cluster) const
50{
51
52 float R[4];
53 int si;
54
55 if (aeta < start_crack) {
56 barrelCoefs (aeta, R);
57 si = 0;
58 }
59 else if (aeta > end_crack) {
60 if (!endcapCoefs (aeta, sampling_depth, etamax, R))
61 return 0;
62 si = 1;
63 }
64 else
65 return 0;
66
67 double rsum = 0;
68 double esum = 0;
69 for (int i=0; i < 4; i++) {
70 float e = cluster->energy (m_samps[si][i]);
71 rsum += R[i] * e;
72 esum += e;
73 }
74
75 if (esum == 0)
76 return 0;
77
78 float depth = rsum / esum;
79
80 return depth;
81}
82
83
89void EgammaHitsShowerDepth::barrelCoefs (const float &aeta, float R[4]) const
90{
91//----------------------------------------------------------------------
92// APPROXIMATE Longitudinal segmentation of the EM Barrel
93// Inspired from M.Seman's former ACCOMPA.
94// - PURPOSE Computes the shower longitudinal barycenter
95// - Inputs: shower eta and energies in the compartments
96//----------------------------------------------------------------------
97
98 // Constants:
99 static const float
100 X0IN = 1.6, // 1.7 X0 before strips
101 X0S1 = 6.0, // 6 X0 till end of strips
102// X0S2 = 24.0, // 24 X0 till end of S2
103// X0S3 = 2.0, // 2 X0 at least in S3
104// RIN = 150.0024, // where strips start (cm)
105// ROUT = 197.0482, // where S3 ends (cm)
106// RCLR = 0.7, // clearance for resistive ink (cm)
107 //BEND1 = 152.1000, // first 3 bends radii (cm)
108 //BEND2 = 155.9659,
109 //BEND3 = 159.7202,
110 ETASTEP = 0.8, // where lead changes
111 //DENSHI = 2.137, // cm/X0 high density
112 //DENSLO = 2.695, // cm/X0 low density
113 X0THI = 23.74, // total depth high density part (not indep?)
114 X0TLO = 19.177; // total depth low density part (not indep?)
115
116 float /*DENS,*/ X0T/*, RLO, RHI*/ ;
117 float R12, R23;
118
119 if ( aeta < ETASTEP ) {
120 //DENS = DENSHI;
121 X0T = X0THI;
122 //RLO = BEND2; // break strips between bends 2 and 3
123 //RHI = BEND3;
124 }else{
125 //DENS = DENSLO;
126 X0T = X0TLO;
127 //RLO = BEND1; // break strips between bends 1 and 2
128 //RHI = BEND2;
129 }
130
131 R[0] = (X0IN) * cosh(aeta);
132
133 // R12 is radius at transition strips->Sampling2
134 // R23 is radius at transition Sampling2->Sampling3
135
136 R12 = X0S1;
137
138 //.. total depth of calo at given eta
139
140 float RADLTOT = X0T*cosh(aeta);
141
142 //.. radius where S2 ends. Make sure there are 2X0 left for S3
143
144 if (aeta < 0.5){
145 R23 = 22 * cosh(aeta) ;
146 }else{
147 R23 = 25;
148 }
149
150 R[1] = R[0] + (R12 - R[0])/2 ;
151 R[2] = R12 + (R23 - R12)/2;
152 R[3] = R23 + (RADLTOT - R23)/2;
153}
154
155
164 const CxxUtils::Array<2>& sampling_depth,
165 const float etamax,
166 float R[4]) const
167{
168 unsigned int ibin = (static_cast<unsigned int> (aeta / etamax * 100)) ;
169 if (ibin >= sampling_depth.size())
170 return false;
171
172 for (int i=0; i < 4; i++)
173 R[i] = sampling_depth[ibin][i+1];
174 return true;
175}
176
Read-only multidimensional array.
unsigned int size(unsigned int dim=0) const
Return the size of the array along one dimension.
static const CaloSampling::CaloSample m_samps[2][4]
float depth(const float &aeta, const float start_crack, const float end_crack, const CxxUtils::Array< 2 > &sampling_depth, const float etamax, const xAOD::TrigEMCluster *cluster) const
Calculate the depth of the cluster.
void barrelCoefs(const float &aeta, float R[4]) const
Calculate the sampling depth coefficients for the barrel.
bool endcapCoefs(const float &aeta, const CxxUtils::Array< 2 > &sampling_depth, const float etamax, float R[4]) const
Calculate the sampling depth coefficients for the endcap.
float energy() const
get Energy (calibrated)
TrigEMCluster_v1 TrigEMCluster
Define the latest version of the trigger EM cluster class.