ATLAS Offline Software
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 
20 #include "EgammaHitsCalibration.h"
21 //#include "TrigCaloEvent/TrigEMCluster.h"
23 #include "GaudiKernel/MsgStream.h"
24 
25 
35 };
36 
37 
44 float 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 
89 void 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 
163 bool EgammaHitsShowerDepth::endcapCoefs (const float &aeta,
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 
constants.EMB1
int EMB1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:53
IDTPM::R
float R(const U &p)
Definition: TrackParametersHelper.h:101
CxxUtils::Array::size
unsigned int size(unsigned int dim=0) const
Return the size of the array along one dimension.
TrigEMCluster.h
constants.EMB2
int EMB2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:54
lumiFormat.i
int i
Definition: lumiFormat.py:92
CaloSampling::CaloSample
CaloSample
Definition: Calorimeter/CaloGeoHelpers/CaloGeoHelpers/CaloSampling.h:22
CxxUtils::Array< 2 >
constants.EME1
int EME1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:55
CaloCell_ID_FCS::EME3
@ EME3
Definition: FastCaloSim_CaloCell_ID.h:26
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
EgammaHitsShowerDepth::depth
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.
Definition: EgammaHitsShowerDepth.cxx:44
EgammaHitsShowerDepth::endcapCoefs
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.
Definition: EgammaHitsShowerDepth.cxx:163
CaloCell_ID_FCS::PreSamplerE
@ PreSamplerE
Definition: FastCaloSim_CaloCell_ID.h:23
CaloCell_ID_FCS::PreSamplerB
@ PreSamplerB
Definition: FastCaloSim_CaloCell_ID.h:19
EgammaHitsCalibration.h
xAOD::TrigEMCluster_v1
Description of a trigger EM cluster.
Definition: TrigEMCluster_v1.h:28
CaloCell_ID_FCS::EMB3
@ EMB3
Definition: FastCaloSim_CaloCell_ID.h:22
xAOD::TrigEMCluster_v1::energy
float energy() const
get Energy (calibrated)
constants.EME2
int EME2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:56
EgammaHitsShowerDepth::barrelCoefs
void barrelCoefs(const float &aeta, float R[4]) const
Calculate the sampling depth coefficients for the barrel.
Definition: EgammaHitsShowerDepth.cxx:89
EgammaHitsShowerDepth::m_samps
static const CaloSampling::CaloSample m_samps[2][4]
Definition: EgammaHitsShowerDepth.h:24