ATLAS Offline Software
Loading...
Searching...
No Matches
eflowDepthCalculator Class Reference

The class calculates the depth of each layer, in interaction lengths, for a given EM2 eta. More...

#include <eflowDepthCalculator.h>

Collaboration diagram for eflowDepthCalculator:

Public Types

enum  DEPTHLAYER {
  ORIGIN =0 , EMB1 , EMB2 , EMB3 ,
  EMB_back , EME1 , EME2 , EME3 ,
  EME_back , HEC1 , HEC2 , HEC3 ,
  HEC4 , HEC_back , Tile1 , TileGap12 ,
  Tile2 , TileGap23 , Tile3 , Tile_back ,
  FCAL0 , FCAL1 , FCAL2 , Unknown =999
}

Public Member Functions

 eflowDepthCalculator ()
 ~eflowDepthCalculator ()
const double * calcDepthArray (double eta, double filler=0.0)
const double * getDepthArray () const

Static Public Member Functions

static int NDepth ()
static DEPTHLAYER depthIndex (eflowCaloENUM layer)

Static Public Attributes

static const double m_preEMBat0eta = 0.5793
static const double m_cryostatAt0eta = 0.4666
static const double m_LArGap = 0.4
static const double m_preEMEat19eta = 0.5
static const double m_preHEC = 0.4
static const double m_preFCAL = 0.5
static const double m_tileGapAt1eta = 0.5
static const double m_inclusivePreTileExt = 3.9603
static const double m_EMBlambdaPerUnitLength = 2.5189 / Gaudi::Units::meter
static const double m_tileLambdaPerUnitLength = 4.9979 / Gaudi::Units::meter
static const double m_fcalLambdaPerUnitLength [3] = {27.5/(0.45*Gaudi::Units::meter),91.3/(0.45*Gaudi::Units::meter),89.2/(0.45*Gaudi::Units::meter)}
static const double m_EMBlayerR [4] = {1.5*Gaudi::Units::meter, 1.586*Gaudi::Units::meter, 1.93*Gaudi::Units::meter, 1.96*Gaudi::Units::meter}
static const double m_EMBzMin = 0.0*Gaudi::Units::meter
static const double m_EMBzMax = 3.15*Gaudi::Units::meter
static const double m_EMErMin = 0.33*Gaudi::Units::meter
static const double m_EMErMax = 1.96*Gaudi::Units::meter
static const double m_EMElayerZ [4] = { 3.55*Gaudi::Units::meter, 3.65*Gaudi::Units::meter, 3.95*Gaudi::Units::meter, 4.08*Gaudi::Units::meter }
static const double m_HECrMin = 0.50*Gaudi::Units::meter
static const double m_HECrMax = 1.96*Gaudi::Units::meter
static const double m_HEClayerZ [5] = { 4.14*Gaudi::Units::meter, 4.61*Gaudi::Units::meter, 5.08*Gaudi::Units::meter, 5.55*Gaudi::Units::meter, 6.00*Gaudi::Units::meter }
static const double m_FCALrMin = 0.6*Gaudi::Units::meter
static const double m_FCALrMax = 0.45*Gaudi::Units::meter
static const double m_FCALlayerZ [4] = { 4.71*Gaudi::Units::meter, (4.71+.45)*Gaudi::Units::meter, (4.71+2*.45)*Gaudi::Units::meter, (4.71+3*.45)*Gaudi::Units::meter }
static const double m_tileBarLayerR [4] = {2.3*Gaudi::Units::meter, 2.6*Gaudi::Units::meter, 3.44*Gaudi::Units::meter, 3.82*Gaudi::Units::meter}
static const double m_tileBarZmin = 0.0*Gaudi::Units::meter
static const double m_tileBarZmax = 2.82*Gaudi::Units::meter
static const double m_tileExtLayerR [4] = {2.3*Gaudi::Units::meter, 2.6*Gaudi::Units::meter, 3.14*Gaudi::Units::meter, 3.82*Gaudi::Units::meter}
static const double m_tileExtZmin = 3.42*Gaudi::Units::meter
static const double m_tileExtZmax = 6.33*Gaudi::Units::meter
static const double m_itc1Zmin = 3.34*Gaudi::Units::meter
static const double m_itc1Zmax = 3.42*Gaudi::Units::meter
static const double m_itc1Rmin = 2.99*Gaudi::Units::meter
static const double m_itc1Rmax = 3.44*Gaudi::Units::meter
static const double m_itc2Zmin = 3.17*Gaudi::Units::meter
static const double m_itc2Zmax = 3.42*Gaudi::Units::meter
static const double m_itc2Rmin = 3.44*Gaudi::Units::meter
static const double m_itc2Rmax = 3.82*Gaudi::Units::meter

Static Private Member Functions

static double lengthThroughBox (double theta, double zMin, double zMax, double rMin, double rMax)

Private Attributes

double m_layerDepth [m_nDepth+1] {}

Static Private Attributes

static const int m_nDepth = FCAL2
static const DEPTHLAYER m_layerDepthMap [eflowCalo::nRegions] = { EMB1, EMB2, EMB3, EME1, EME2, EME3, HEC1, HEC2, HEC3, HEC4, Tile1, Tile2, Tile3, FCAL0, FCAL1, FCAL2 }

Detailed Description

The class calculates the depth of each layer, in interaction lengths, for a given EM2 eta.

This is used by eflowLayerIntegrator.

This holds m_layerDepth (returned by getDepthArray) which is an array of double. Each double is the depth of a calorimeter layer in nuclear interaction lengths, and this is filled in calcDepthArray. This is needed in eflowLayerIntegrator::getFirstIntLayer() to calculate dy/dx, which uses the cluster integral in each calorimeter layer to calculate the gaussian weighted density.

It has an enum (depthLayerENUM) which designates where in the detector we are, and this includes additional calorimeter positions such as EMB_back.

Definition at line 27 of file eflowDepthCalculator.h.

Member Enumeration Documentation

◆ DEPTHLAYER

Enumerator
ORIGIN 
EMB1 
EMB2 
EMB3 
EMB_back 
EME1 
EME2 
EME3 
EME_back 
HEC1 
HEC2 
HEC3 
HEC4 
HEC_back 
Tile1 
TileGap12 
Tile2 
TileGap23 
Tile3 
Tile_back 
FCAL0 
FCAL1 
FCAL2 
Unknown 

Definition at line 39 of file eflowDepthCalculator.h.

39 {
45 Unknown=999
46 };

Constructor & Destructor Documentation

◆ eflowDepthCalculator()

eflowDepthCalculator::eflowDepthCalculator ( )

Definition at line 88 of file eflowDepthCalculator.cxx.

88 {
89
90 //initialize the array
91 for (int i = 0; i <= m_nDepth; i++) m_layerDepth[i] = 0.0;
92
93}
double m_layerDepth[m_nDepth+1]

◆ ~eflowDepthCalculator()

eflowDepthCalculator::~eflowDepthCalculator ( )
inline

Definition at line 32 of file eflowDepthCalculator.h.

32{}

Member Function Documentation

◆ calcDepthArray()

const double * eflowDepthCalculator::calcDepthArray ( double eta,
double filler = 0.0 )

Definition at line 152 of file eflowDepthCalculator.cxx.

153{
154 static const double thetaTileExtBottomRight = atan( m_tileExtLayerR[0] / m_tileExtZmax );
155 static const double thetaEMBbottomRight = atan( m_EMBlayerR[0] / m_EMBzMax );
156 static const double thetaEMEtopLeft = atan( m_EMErMax / m_EMElayerZ[0] );
157 static const double thetaHECtopLeft = atan( m_HECrMax / m_HEClayerZ[0] );
158 static const double thetaFCALtopLeft = atan( m_FCALrMax / m_FCALlayerZ[0] );
159 static const double preEMBbottomRight = m_preEMBat0eta / sin(thetaEMBbottomRight);
160 static const double etaEMBbottomRight = fabs( log(tan(thetaEMBbottomRight / 2)) );
161
162 for (int i = 0; i <= m_nDepth; i++) m_layerDepth[i] = 0.0;
163 eta = fabs(eta);
164
165 if (eta >= 4.0) {
166 return nullptr;
167 }
168 else {
169 const double theta = 2.0 * atan( exp(-eta) );
170 const double sinTheta = sin(theta);
171
172 if (theta > thetaEMBbottomRight) {
173 m_layerDepth[EMB1] = m_preEMBat0eta / sinTheta;
174 if (theta < thetaEMEtopLeft) m_layerDepth[EME1] = m_LArGap;
175 }
176 else {
178 if (eta < 1.9) m_layerDepth[EME1] += (1.9 - eta) * (preEMBbottomRight - m_preEMEat19eta) / (1.9 - etaEMBbottomRight);
179 }
180
181 if (theta < thetaHECtopLeft) m_layerDepth[HEC1] = m_preHEC;
182 if (theta < thetaFCALtopLeft) m_layerDepth[FCAL0] = m_preFCAL;
183 if (theta > thetaTileExtBottomRight) m_layerDepth[Tile1] = m_cryostatAt0eta / sinTheta;
184
185 for (int i = 0; i < 3; i++) {
188 }
189
192
193 if (eta <= 0.7) {
194
195 for (int i = 0; i < 3; i++)
197 }
198 else if (eta < 1.0) {
199
200 bool haveIncludedGap = false;
201 double tileGap = m_tileGapAt1eta;
202 double tileBar, tileExt, temp;
203
204 for (int i = 0; i < 3; i++) {
205
208
209 if (1 == i)
211 else if (2 == i)
213
214 if (tileBar > 0.0 && tileExt > 0.0) {
215
216 temp = tileBar + tileExt;
217
218 if (!haveIncludedGap) {
219 temp += tileGap;
220 haveIncludedGap = true;
221 }
222
223 m_layerDepth[2*i+TileGap12] = temp;
224 }
225 else if (tileBar == 0.0 && tileExt > 0.0) {
226
227 m_layerDepth[2*i+TileGap12] = tileExt;
228
229 if (i > 0 && !haveIncludedGap) {
230 m_layerDepth[2*i+Tile1] = tileGap;
231 haveIncludedGap = true;
232 }
233 }
234 else {
235
236 m_layerDepth[2*i+TileGap12] = tileBar;
237 }
238 }
239 }
240 else {
241
242 double temp = 0.0;
243
244 for (int i = ORIGIN; i <= Tile1; i++) temp += m_layerDepth[i];
246
247 for (int i = 0; i < 3; i++)
249 }
250
251 for (int i = 1; i <= m_nDepth; i++) {
252 if (m_layerDepth[i] == 0.0) m_layerDepth[i] = filler;
254 }
255 }
256
257 return m_layerDepth;
258}
Scalar eta() const
pseudorapidity method
Scalar theta() const
theta method
static const double m_tileExtLayerR[4]
static const double m_cryostatAt0eta
static const double m_tileBarZmax
static const double m_preEMBat0eta
static const double m_preEMEat19eta
static const double m_HEClayerZ[5]
static const double m_itc1Rmin
static const double m_tileExtZmax
static const double m_tileLambdaPerUnitLength
static const double m_EMBlayerR[4]
static const double m_itc2Rmin
static const double m_itc2Zmax
static const double m_tileBarLayerR[4]
static const double m_EMBlambdaPerUnitLength
static const double m_FCALrMin
static const double m_EMElayerZ[4]
static const double m_FCALlayerZ[4]
static const double m_inclusivePreTileExt
static const double m_tileBarZmin
static double lengthThroughBox(double theta, double zMin, double zMax, double rMin, double rMax)
static const double m_preHEC
static const double m_fcalLambdaPerUnitLength[3]
static const double m_itc1Zmin
static const double m_EMBzMin
static const double m_itc1Rmax
static const double m_FCALrMax
static const double m_LArGap
static const double m_EMErMax
static const double m_tileExtZmin
static const double m_itc1Zmax
static const double m_itc2Rmax
static const double m_EMErMin
static const double m_HECrMin
static const double m_HECrMax
static const double m_EMBzMax
static const double m_itc2Zmin
static const double m_preFCAL
static const double m_tileGapAt1eta

◆ depthIndex()

eflowDepthLayerENUM eflowDepthCalculator::depthIndex ( eflowCaloENUM layer)
static

Definition at line 96 of file eflowDepthCalculator.cxx.

97{
98 if (eflowCalo::Unknown == layer)
99 return Unknown;
100 else
101 return m_layerDepthMap[layer];
102}
static const DEPTHLAYER m_layerDepthMap[eflowCalo::nRegions]
@ layer
Definition HitInfo.h:79

◆ getDepthArray()

const double * eflowDepthCalculator::getDepthArray ( ) const
inline

Definition at line 37 of file eflowDepthCalculator.h.

37{return m_layerDepth;}

◆ lengthThroughBox()

double eflowDepthCalculator::lengthThroughBox ( double theta,
double zMin,
double zMax,
double rMin,
double rMax )
staticprivate

Definition at line 109 of file eflowDepthCalculator.cxx.

110{
111 double thetaTopLeft, thetaBottomLeft, thetaTopRight, thetaBottomRight;
112
113
114 if (0.0 == zMin) {
115 thetaTopLeft = M_PI / 2.0;
116 thetaBottomLeft = M_PI / 2.0;
117 }
118 else {
119 thetaTopLeft = atan(rMax / zMin);
120 thetaBottomLeft = atan(rMin / zMin);
121 }
122 thetaBottomRight = atan(rMin / zMax);
123 thetaTopRight = atan(rMax / zMax);
124
125
126 if (theta > thetaTopLeft || theta <= thetaBottomRight) {
127
128 return 0.0;
129 }
130 else if (theta > thetaBottomLeft) {
131
132 if (theta <= thetaTopRight)
133 return (zMax - zMin) / cos(theta);
134 else
135 return (rMax - zMin * tan(theta)) / sin(theta);
136 }
137 else {
138
139 if (theta >= thetaTopRight)
140 return (rMax - rMin) / sin(theta);
141 else
142 return (zMax * tan(theta) - rMin) / sin(theta);
143 }
144}
#define M_PI

◆ NDepth()

int eflowDepthCalculator::NDepth ( )
inlinestatic

Definition at line 34 of file eflowDepthCalculator.h.

34{return m_nDepth;}

Member Data Documentation

◆ m_cryostatAt0eta

const double eflowDepthCalculator::m_cryostatAt0eta = 0.4666
static

Definition at line 51 of file eflowDepthCalculator.h.

◆ m_EMBlambdaPerUnitLength

const double eflowDepthCalculator::m_EMBlambdaPerUnitLength = 2.5189 / Gaudi::Units::meter
static

Definition at line 59 of file eflowDepthCalculator.h.

◆ m_EMBlayerR

const double eflowDepthCalculator::m_EMBlayerR = {1.5*Gaudi::Units::meter, 1.586*Gaudi::Units::meter, 1.93*Gaudi::Units::meter, 1.96*Gaudi::Units::meter}
static

Definition at line 46 of file eflowDepthCalculator.h.

◆ m_EMBzMax

const double eflowDepthCalculator::m_EMBzMax = 3.15*Gaudi::Units::meter
static

Definition at line 65 of file eflowDepthCalculator.h.

◆ m_EMBzMin

const double eflowDepthCalculator::m_EMBzMin = 0.0*Gaudi::Units::meter
static

Definition at line 64 of file eflowDepthCalculator.h.

◆ m_EMElayerZ

const double eflowDepthCalculator::m_EMElayerZ = { 3.55*Gaudi::Units::meter, 3.65*Gaudi::Units::meter, 3.95*Gaudi::Units::meter, 4.08*Gaudi::Units::meter }
static

Definition at line 53 of file eflowDepthCalculator.h.

◆ m_EMErMax

const double eflowDepthCalculator::m_EMErMax = 1.96*Gaudi::Units::meter
static

Definition at line 68 of file eflowDepthCalculator.h.

◆ m_EMErMin

const double eflowDepthCalculator::m_EMErMin = 0.33*Gaudi::Units::meter
static

Definition at line 67 of file eflowDepthCalculator.h.

◆ m_fcalLambdaPerUnitLength

const double eflowDepthCalculator::m_fcalLambdaPerUnitLength = {27.5/(0.45*Gaudi::Units::meter),91.3/(0.45*Gaudi::Units::meter),89.2/(0.45*Gaudi::Units::meter)}
static

Definition at line 43 of file eflowDepthCalculator.h.

◆ m_FCALlayerZ

const double eflowDepthCalculator::m_FCALlayerZ = { 4.71*Gaudi::Units::meter, (4.71+.45)*Gaudi::Units::meter, (4.71+2*.45)*Gaudi::Units::meter, (4.71+3*.45)*Gaudi::Units::meter }
static

Definition at line 63 of file eflowDepthCalculator.h.

◆ m_FCALrMax

const double eflowDepthCalculator::m_FCALrMax = 0.45*Gaudi::Units::meter
static

Definition at line 76 of file eflowDepthCalculator.h.

◆ m_FCALrMin

const double eflowDepthCalculator::m_FCALrMin = 0.6*Gaudi::Units::meter
static

Definition at line 75 of file eflowDepthCalculator.h.

◆ m_HEClayerZ

const double eflowDepthCalculator::m_HEClayerZ = { 4.14*Gaudi::Units::meter, 4.61*Gaudi::Units::meter, 5.08*Gaudi::Units::meter, 5.55*Gaudi::Units::meter, 6.00*Gaudi::Units::meter }
static

Definition at line 58 of file eflowDepthCalculator.h.

◆ m_HECrMax

const double eflowDepthCalculator::m_HECrMax = 1.96*Gaudi::Units::meter
static

Definition at line 72 of file eflowDepthCalculator.h.

◆ m_HECrMin

const double eflowDepthCalculator::m_HECrMin = 0.50*Gaudi::Units::meter
static

Definition at line 71 of file eflowDepthCalculator.h.

◆ m_inclusivePreTileExt

const double eflowDepthCalculator::m_inclusivePreTileExt = 3.9603
static

Definition at line 57 of file eflowDepthCalculator.h.

◆ m_itc1Rmax

const double eflowDepthCalculator::m_itc1Rmax = 3.44*Gaudi::Units::meter
static

Definition at line 90 of file eflowDepthCalculator.h.

◆ m_itc1Rmin

const double eflowDepthCalculator::m_itc1Rmin = 2.99*Gaudi::Units::meter
static

Definition at line 89 of file eflowDepthCalculator.h.

◆ m_itc1Zmax

const double eflowDepthCalculator::m_itc1Zmax = 3.42*Gaudi::Units::meter
static

Definition at line 88 of file eflowDepthCalculator.h.

◆ m_itc1Zmin

const double eflowDepthCalculator::m_itc1Zmin = 3.34*Gaudi::Units::meter
static

Definition at line 87 of file eflowDepthCalculator.h.

◆ m_itc2Rmax

const double eflowDepthCalculator::m_itc2Rmax = 3.82*Gaudi::Units::meter
static

Definition at line 95 of file eflowDepthCalculator.h.

◆ m_itc2Rmin

const double eflowDepthCalculator::m_itc2Rmin = 3.44*Gaudi::Units::meter
static

Definition at line 94 of file eflowDepthCalculator.h.

◆ m_itc2Zmax

const double eflowDepthCalculator::m_itc2Zmax = 3.42*Gaudi::Units::meter
static

Definition at line 93 of file eflowDepthCalculator.h.

◆ m_itc2Zmin

const double eflowDepthCalculator::m_itc2Zmin = 3.17*Gaudi::Units::meter
static

Definition at line 92 of file eflowDepthCalculator.h.

◆ m_LArGap

const double eflowDepthCalculator::m_LArGap = 0.4
static

Definition at line 52 of file eflowDepthCalculator.h.

◆ m_layerDepth

double eflowDepthCalculator::m_layerDepth[m_nDepth+1] {}
private

Definition at line 104 of file eflowDepthCalculator.h.

104{};

◆ m_layerDepthMap

const eflowDepthLayerENUM eflowDepthCalculator::m_layerDepthMap = { EMB1, EMB2, EMB3, EME1, EME2, EME3, HEC1, HEC2, HEC3, HEC4, Tile1, Tile2, Tile3, FCAL0, FCAL1, FCAL2 }
staticprivate

Definition at line 27 of file eflowDepthCalculator.h.

27{

◆ m_nDepth

const int eflowDepthCalculator::m_nDepth = FCAL2
staticprivate

Definition at line 101 of file eflowDepthCalculator.h.

◆ m_preEMBat0eta

const double eflowDepthCalculator::m_preEMBat0eta = 0.5793
static

Definition at line 50 of file eflowDepthCalculator.h.

◆ m_preEMEat19eta

const double eflowDepthCalculator::m_preEMEat19eta = 0.5
static

Definition at line 53 of file eflowDepthCalculator.h.

◆ m_preFCAL

const double eflowDepthCalculator::m_preFCAL = 0.5
static

Definition at line 55 of file eflowDepthCalculator.h.

◆ m_preHEC

const double eflowDepthCalculator::m_preHEC = 0.4
static

Definition at line 54 of file eflowDepthCalculator.h.

◆ m_tileBarLayerR

const double eflowDepthCalculator::m_tileBarLayerR = {2.3*Gaudi::Units::meter, 2.6*Gaudi::Units::meter, 3.44*Gaudi::Units::meter, 3.82*Gaudi::Units::meter}
static

Definition at line 66 of file eflowDepthCalculator.h.

◆ m_tileBarZmax

const double eflowDepthCalculator::m_tileBarZmax = 2.82*Gaudi::Units::meter
static

Definition at line 81 of file eflowDepthCalculator.h.

◆ m_tileBarZmin

const double eflowDepthCalculator::m_tileBarZmin = 0.0*Gaudi::Units::meter
static

Definition at line 80 of file eflowDepthCalculator.h.

◆ m_tileExtLayerR

const double eflowDepthCalculator::m_tileExtLayerR = {2.3*Gaudi::Units::meter, 2.6*Gaudi::Units::meter, 3.14*Gaudi::Units::meter, 3.82*Gaudi::Units::meter}
static

Definition at line 71 of file eflowDepthCalculator.h.

◆ m_tileExtZmax

const double eflowDepthCalculator::m_tileExtZmax = 6.33*Gaudi::Units::meter
static

Definition at line 85 of file eflowDepthCalculator.h.

◆ m_tileExtZmin

const double eflowDepthCalculator::m_tileExtZmin = 3.42*Gaudi::Units::meter
static

Definition at line 84 of file eflowDepthCalculator.h.

◆ m_tileGapAt1eta

const double eflowDepthCalculator::m_tileGapAt1eta = 0.5
static

Definition at line 56 of file eflowDepthCalculator.h.

◆ m_tileLambdaPerUnitLength

const double eflowDepthCalculator::m_tileLambdaPerUnitLength = 4.9979 / Gaudi::Units::meter
static

Definition at line 60 of file eflowDepthCalculator.h.


The documentation for this class was generated from the following files: