ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
DetectorDescription
GeoModel
GeoSpecialShapes
src
LArWheelCalculator.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// LArWheelCalculator 19-Apr-2001 Bill Seligman
6
// 26-May-2009 AMS: remove all previous comments from here as obsoleted
7
8
#include <cmath>
9
#include <climits>
10
#include <cassert>
11
#ifndef PORTABLE_LAR_SHAPE
12
#include "GaudiKernel/Bootstrap.h"
13
#include "GaudiKernel/ISvcLocator.h"
14
#include "GaudiKernel/MsgStream.h"
15
#else
16
#include "
PortableMsgStream/PortableMsgStream.h
"
17
#endif
18
19
#include "
GeoSpecialShapes/LArWheelCalculator.h
"
20
#include "
GeoSpecialShapes/EMECData.h
"
21
22
#include "
./LArWheelCalculator_Impl/DistanceCalculatorFactory.h
"
23
#include "
./LArWheelCalculator_Impl/FanCalculatorFactory.h
"
24
25
26
#include "GeoModelKernel/Units.h"
27
28
using namespace
GeoModelKernelUnits;
29
30
31
// these numbers are taken from DB in constructor,
32
// hardcoded values here are just for reference
33
/*
34
double LArWheelCalculator::zWheelRefPoint = 3689.5*mm; //=endg_z0
35
double LArWheelCalculator::dMechFocaltoWRP = 3691. *mm; //=endg_z1
36
double LArWheelCalculator::dElecFocaltoWRP = 3689. *mm; //=endg_dcf
37
double LArWheelCalculator::rOuterCutoff = 2034. *mm; //=endg_rlimit
38
double LArWheelCalculator::HalfGapBetweenWheels = 0.15*cm; // In DB EMECGEOMETRY.DCRACK
39
float LArWheelCalculator::m_zShift = 4. *cm; // endg_zshift
40
double LArWheelCalculator::eta_hi = 3.2; // from EmecWheelParameters
41
double LArWheelCalculator::eta_mid = 2.5;
42
double LArWheelCalculator::eta_low = 1.375;
43
*/
44
45
// these values are taken from "EMECParams" DB
46
/*
47
bool LArWheelCalculator::SaggingOn = false;
48
bool LArWheelCalculator::phiRotation = false;
49
*/
50
51
// these were internal constants, now everything in DB
52
//const double LArWheelCalculator::s_dWRPtoFrontFace = 11.*mm;
53
//const double LArWheelCalculator::s_WheelThickness = 514.*mm;
54
// 2x2mm are to be substracted from value of wheel thickness
55
// - for straight 2-mm domains at start and finish of absorber
56
//const double LArWheelCalculator::s_StraightStartSection = 2.*mm;
57
//const double LArWheelCalculator::s_HalfWheelThickness = s_WheelThickness * 0.5;
58
//const double LArWheelCalculator::s_WheelThickness_wo_2sss = s_WheelThickness - 2.*s_StraightStartSection;
59
60
static
const
double
default_slant_parametrization
[2][5] = {
61
{ -50.069, 0.50073, -0.10127E-02, 0.10390E-05, -0.42176E-09 },
// inner
62
{ -34.254, 0.15528, -0.11670E-03, 0.45018E-07, -0.68473E-11 }
//outer
63
};
64
65
const
char
*
LArWheelCalculator::LArWheelCalculatorTypeString
(
LArG4::LArWheelCalculator_t
type
)
66
{
67
switch
(
type
){
68
case
LArG4::InnerAbsorberWheel
:
return
(
"InnerAbsorberWheel"
);
69
case
LArG4::OuterAbsorberWheel
:
return
(
"OuterAbsorberWheel"
);
70
case
LArG4::InnerElectrodWheel
:
return
(
"InnerElectrodWheel"
);
71
case
LArG4::OuterElectrodWheel
:
return
(
"OuterElectrodWheel"
);
72
case
LArG4::InnerAbsorberModule
:
return
(
"InnerAbsorberModule"
);
73
case
LArG4::OuterAbsorberModule
:
return
(
"OuterAbsorberModule"
);
74
case
LArG4::InnerElectrodModule
:
return
(
"InnerElectrodModule"
);
75
case
LArG4::OuterElectrodModule
:
return
(
"OuterElectrodModule"
);
76
case
LArG4::BackOuterBarretteWheel
:
return
(
"BackOuterBarretteWheel"
);
77
case
LArG4::BackInnerBarretteWheel
:
return
(
"BackInnerBarretteWheel"
);
78
case
LArG4::BackOuterBarretteModule
:
return
(
"BackOuterBarretteModule"
);
79
case
LArG4::BackInnerBarretteModule
:
return
(
"BackInnerBarretteModule"
);
80
case
LArG4::BackOuterBarretteWheelCalib
:
return
(
"BackOuterBarretteWheelCalib"
);
81
case
LArG4::BackInnerBarretteWheelCalib
:
return
(
"BackInnerBarretteWheelCalib"
);
82
case
LArG4::BackOuterBarretteModuleCalib
:
return
(
"BackOuterBarretteModuleCalib"
);
83
case
LArG4::BackInnerBarretteModuleCalib
:
return
(
"BackInnerBarretteModuleCalib"
);
84
case
LArG4::InnerGlueWheel
:
return
(
"InnerGlueWheel"
);
85
case
LArG4::InnerLeadWheel
:
return
(
"InnerLeadWheel"
);
86
case
LArG4::OuterGlueWheel
:
return
(
"OuterGlueWheel"
);
87
case
LArG4::OuterLeadWheel
:
return
(
"OuterLeadWheel"
);
88
}
89
return
(
"unknown"
);
90
}
91
92
LArWheelCalculator::~LArWheelCalculator
() {
93
delete
m_distanceCalcImpl
;
94
m_distanceCalcImpl
= 0;
95
delete
m_fanCalcImpl
;
96
m_fanCalcImpl
= 0;
97
}
98
99
LArWheelCalculator::LArWheelCalculator
(
const
EMECData
& emecData,
LArG4::LArWheelCalculator_t
a_wheelType,
int
zside) :
100
m_type
(a_wheelType),
101
m_AtlasZside
(zside),
102
m_distanceCalcImpl
(0),
103
m_fanCalcImpl
(0)
104
{
105
106
#ifndef PORTABLE_LAR_SHAPE
107
// Get pointer to the message service
108
SmartIF<IMessageSvc> msgSvc{Gaudi::svcLocator()->service(
"MessageSvc"
)};
109
if
(!msgSvc.isValid()){
110
throw std::runtime_error(
"LArWheelCalculator constructor: cannot initialze message service"
);
111
}
112
MsgStream
msg
(msgSvc,
"LArWheelCalculator"
);
113
#else
114
PortableMsgStream
msg
(
"LArWheelCalculator"
);
115
#endif
116
msg
<< MSG::VERBOSE <<
"LArWheelCalculator constructor at "
<<
this
117
<<
" (type "
<<
LArWheelCalculatorTypeString
(
m_type
)
118
<<
"):"
<<
endmsg
;
119
120
121
msg
<< MSG::VERBOSE <<
"LArWheelCalculator constructor at "
<<
this
122
<<
" (type "
<<
LArWheelCalculatorTypeString
(
m_type
)
123
<<
"):"
<<
endmsg
;
124
125
msg
<< MSG::VERBOSE <<
"compiled with new DTNF"
<<
endmsg
;
126
127
// Access source of detector parameters.
128
msg
<< MSG::VERBOSE
129
<<
"initializing data members from DB..."
<<
endmsg
;
130
131
m_zWheelRefPoint
=emecData.
emecgeometry
[0].Z0*
cm
;
132
m_dMechFocaltoWRP
=emecData.
emecgeometry
[0].Z1*
cm
;
133
m_dElecFocaltoWRP
=emecData.
emecgeometry
[0].DCF*
cm
;
134
m_HalfGapBetweenWheels
=emecData.
emecgeometry
[0].DCRACK*
cm
;
135
m_rOuterCutoff
=emecData.
emecgeometry
[0].RLIMIT*
cm
;
136
m_zShift
=emecData.
emecgeometry
[0].ZSHIFT*
cm
;
137
138
139
m_eta_hi
=emecData.
emecwheelparameters
[0].ETAINT;
140
m_eta_mid
=emecData.
emecwheelparameters
[0].ETAEXT;
141
m_eta_low
=emecData.
emecwheelparameters
[1].ETAEXT;
142
143
144
145
m_leadThicknessInner
=emecData.
emecfan
[0].LEADTHICKNESSINNER*mm;
146
m_leadThicknessOuter
=emecData.
emecfan
[0].LEADTHICKNESSOUTER*mm;
147
m_steelThickness
=emecData.
emecfan
[0].STEELTHICKNESS*mm;
148
m_glueThickness
=emecData.
emecfan
[0].GLUETHICKNESS*mm;
149
m_electrodeTotalThickness
=emecData.
emecfan
[0].ELECTRODETOTALTHICKNESS*mm;
150
m_coldContraction
=emecData.
coldcontraction
[0].ABSORBERCONTRACTION;
151
m_electrodeInvContraction
=emecData.
coldcontraction
[0].ELECTRODEINVCONTRACTION;
152
153
154
155
m_ActiveLength
=emecData.
emecmagicnumbers
[0].ACTIVELENGTH*mm;
156
m_StraightStartSection
=emecData.
emecmagicnumbers
[0].STRAIGHTSTARTSECTION*mm;
157
m_dWRPtoFrontFace
=emecData.
emecmagicnumbers
[0].REFTOACTIVE*mm;
158
159
160
m_WheelThickness
=
m_ActiveLength
+ 2.*
m_StraightStartSection
;
161
m_HalfWheelThickness
=
m_WheelThickness
* 0.5;
162
163
std::string pr_opt_value=emecData.
emecparams
[0].PHIROTATION;
164
std::string sagging_opt_value=emecData.
emecparams
[0].SAGGING;
165
166
m_phiRotation
= pr_opt_value ==
"g3"
?
true
:
false
;
167
168
m_zWheelFrontFace
=
m_dMechFocaltoWRP
+
m_dWRPtoFrontFace
;
169
m_zWheelBackFace
=
m_zWheelFrontFace
+
m_WheelThickness
;
170
171
msg
<< MSG::DEBUG <<
"... got these values:"
<<
endmsg
172
<<
"m_zWheelRefPoint : "
<<
m_zWheelRefPoint
/
cm
<<
" [cm]"
<<
endmsg
173
<<
"m_dMechFocaltoWRP : "
<<
m_dMechFocaltoWRP
/
cm
<<
" [cm]"
<<
endmsg
174
<<
"m_dElecFocaltoWRP : "
<<
m_dElecFocaltoWRP
/
cm
<<
" [cm]"
<<
endmsg
175
<<
"m_HalfGapBetweenWheels : "
<<
m_HalfGapBetweenWheels
/
cm
<<
" [cm]"
<<
endmsg
176
<<
"m_rOuterCutoff : "
<<
m_rOuterCutoff
/
cm
<<
" [cm]"
<<
endmsg
177
<<
"m_zWheelFrontFace : "
<<
m_zWheelFrontFace
/
cm
<<
" [cm]"
<<
endmsg
178
<<
"m_zWheelBackFace : "
<<
m_zWheelBackFace
/
cm
<<
" [cm]"
<<
endmsg
179
<<
"m_zShift : "
<<
m_zShift
/
cm
<<
" [cm]"
<<
endmsg
180
<<
"Phi rotation : "
<< (
m_phiRotation
?
"true"
:
"false"
) <<
""
<<
endmsg
181
<<
"eta wheels limits : "
<<
m_eta_low
<<
", "
<<
m_eta_mid
<<
", "
<<
m_eta_hi
182
<<
endmsg
;
183
msg
<< MSG::VERBOSE <<
"hardcoded constants: "
<<
endmsg
184
<<
"m_WheelThickness : "
<<
m_WheelThickness
/
cm
<<
" [cm]"
<<
endmsg
185
<<
"m_dWRPtoFrontFace : "
<<
m_dWRPtoFrontFace
/
cm
<<
" [cm]"
186
<<
endmsg
;
187
188
189
// Constructor initializes the geometry.
190
191
m_isBarrette
=
false
;
192
m_isBarretteCalib
=
false
;
193
m_isModule
=
false
;
194
m_isElectrode
=
false
;
195
m_isInner
=
false
;
196
m_FirstFan
= 0;
197
m_LastFan
= 0;
198
199
switch
(
m_type
){
200
case
LArG4::BackInnerBarretteWheelCalib
:
201
m_isBarretteCalib
=
true
;
202
/* FALLTHROUGH */
203
case
LArG4::BackInnerBarretteWheel
:
204
m_isBarrette
=
true
;
205
m_type
=
LArG4::InnerAbsorberWheel
;
206
/* FALLTHROUGH */
207
case
LArG4::InnerAbsorberWheel
:
208
case
LArG4::InnerGlueWheel
:
209
case
LArG4::InnerLeadWheel
:
210
inner_wheel_init
(emecData);
211
m_ZeroFanPhi
=
m_FanStepOnPhi
* 0.5;
212
if
(
m_phiRotation
)
m_ZeroFanPhi
+=
m_FanStepOnPhi
* 0.5;
213
break
;
214
case
LArG4::BackOuterBarretteWheelCalib
:
215
m_isBarretteCalib
=
true
;
216
/* FALLTHROUGH */
217
case
LArG4::BackOuterBarretteWheel
:
218
m_isBarrette
=
true
;
219
m_type
=
LArG4::OuterAbsorberWheel
;
220
/* FALLTHROUGH */
221
case
LArG4::OuterAbsorberWheel
:
222
case
LArG4::OuterGlueWheel
:
223
case
LArG4::OuterLeadWheel
:
224
outer_wheel_init
(emecData);
225
m_ZeroFanPhi
=
m_FanStepOnPhi
* 0.5;
226
if
(
m_phiRotation
)
m_ZeroFanPhi
+=
m_FanStepOnPhi
* 0.5;
227
break
;
228
case
LArG4::InnerElectrodWheel
:
229
inner_wheel_init
(emecData);
230
m_ZeroFanPhi
= 0;
231
if
(
m_phiRotation
)
m_ZeroFanPhi
+=
m_FanStepOnPhi
* 0.5;
232
m_isElectrode
=
true
;
233
break
;
234
case
LArG4::OuterElectrodWheel
:
235
outer_wheel_init
(emecData);
236
m_ZeroFanPhi
= 0;
237
if
(
m_phiRotation
)
m_ZeroFanPhi
+=
m_FanStepOnPhi
* 0.5;
238
m_isElectrode
=
true
;
239
break
;
240
case
LArG4::BackInnerBarretteModuleCalib
:
241
m_isBarretteCalib
=
true
;
242
/* FALLTHROUGH */
243
case
LArG4::BackInnerBarretteModule
:
244
m_isBarrette
=
true
;
245
m_type
=
LArG4::InnerAbsorberModule
;
246
/* FALLTHROUGH */
247
case
LArG4::InnerAbsorberModule
:
248
inner_wheel_init
(emecData);
249
module_init
();
250
m_ZeroFanPhi
+=
m_FanStepOnPhi
* 0.5;
251
// later for all? m_ZeroFanPhi_ForDetNeaFan = m_ZeroFanPhi - m_FanStepOnPhi * 0.5;
252
break
;
253
case
LArG4::BackOuterBarretteModuleCalib
:
254
m_isBarretteCalib
=
true
;
255
/* FALLTHROUGH */
256
case
LArG4::BackOuterBarretteModule
:
257
m_isBarrette
=
true
;
258
m_type
=
LArG4::OuterAbsorberModule
;
259
/* FALLTHROUGH */
260
case
LArG4::OuterAbsorberModule
:
261
outer_wheel_init
(emecData);
262
module_init
();
263
m_ZeroFanPhi
+=
m_FanStepOnPhi
* 0.5;
264
// later for all? m_ZeroFanPhi_ForDetNeaFan = m_ZeroFanPhi - m_FanStepOnPhi * 0.5;
265
break
;
266
case
LArG4::InnerElectrodModule
:
267
inner_wheel_init
(emecData);
268
module_init
();
269
m_FirstFan
++;
270
m_isElectrode
=
true
;
271
break
;
272
case
LArG4::OuterElectrodModule
:
273
outer_wheel_init
(emecData);
274
module_init
();
275
m_FirstFan
++;
276
m_isElectrode
=
true
;
277
break
;
278
default
:
279
throw
std::runtime_error(
"LArWheelCalculator constructor:unknown LArWheelCalculator_t"
);
280
}
281
m_ZeroFanPhi_ForDetNeaFan
=
m_ZeroFanPhi
-
m_FanStepOnPhi
* 0.5;
282
m_NumberOfHalfWaves
=
m_NumberOfWaves
* 2;
283
m_HalfWaveLength
=
m_ActiveLength
/
m_NumberOfHalfWaves
;
284
m_QuarterWaveLength
=
m_HalfWaveLength
* 0.5;
285
//m_HalfNumberOfFans = m_NumberOfFans / 2;
286
m_FanHalfThickness
=
GetFanHalfThickness
(
m_type
);
287
288
// Init sagging
289
// value read above
290
// std::string sagging_opt_value = (*DB_EMECParams)[0]->getString("SAGGING");
291
292
msg
<< MSG::VERBOSE <<
"SAGGING value = "
<< sagging_opt_value <<
endmsg
;
293
294
// the same condition is in DistanceCalculatorFactory::Create
295
m_SaggingOn
= (sagging_opt_value !=
""
&& sagging_opt_value !=
"off"
)?
true
:
false
;
296
297
m_distanceCalcImpl
=
LArWheelCalculator_Impl::DistanceCalculatorFactory::Create
(
298
sagging_opt_value,
this
);
299
if
(
m_SaggingOn
) {
300
msg
<< MSG::VERBOSE <<
"Creating DistanceCalculatorSaggingOn = "
<<
this
301
<<
','
<<
m_distanceCalcImpl
<<
endmsg
;
302
}
else
{
303
msg
<< MSG::VERBOSE <<
"Creating DistanceCalculatorSaggingOff = "
<<
this
304
<<
','
<<
m_distanceCalcImpl
<<
endmsg
;
305
}
306
307
m_fanCalcImpl
=
LArWheelCalculator_Impl::FanCalculatorFactory::Create
(
308
m_SaggingOn
,
m_isModule
,
this
);
309
310
//--------------------------
311
// At this place there was the loading of sagging parameters
312
// Transfered to DistanceCalculatorSaggingOn
313
//--------------------------
314
315
// Get option: Slant params.
316
msg
<< MSG::VERBOSE <<
"Loading SlantAngle parameters ..."
;
317
std::string slant_params;
318
319
if
(
m_isInner
) {
320
slant_params=emecData.
emecparams
[0].INNERSLANTPARAM;
321
}
else
{
322
slant_params=emecData.
emecparams
[0].OUTERSLANTPARAM;
323
}
324
325
msg
<< (
m_isInner
?
" InnerWheel "
:
" OuterWheel "
) << slant_params <<
endmsg
;
326
327
if
(slant_params !=
""
&& slant_params !=
"default"
){
328
double
a
, b, c, d, e;
329
if
(sscanf(slant_params.c_str(),
"%80le %80le %80le %80le %80le"
, &
a
, &b, &c, &d, &e) != 5){
330
msg
<< MSG::ERROR
331
<<
"LArWheelCalculator: ERROR: wrong value(s) "
332
<<
"for EMEC slant angle parameters: "
333
<< slant_params <<
", "
334
<<
"defaults are used"
<<
endmsg
;
335
}
else
{
336
m_slant_parametrization
[0] =
a
;
337
m_slant_parametrization
[1] = b;
338
m_slant_parametrization
[2] = c;
339
m_slant_parametrization
[3] = d;
340
m_slant_parametrization
[4] = e;
341
m_slant_use_default
=
false
;
342
}
343
}
// else already initialized in inner/outer_wheel_init()
344
345
fill_sincos_parameterization
();
// initialize sin&cos parameterization
346
347
msg
<< MSG::VERBOSE <<
"All params initialized. Print some internal variables"
<<
endmsg
;
348
349
msg
<< MSG::VERBOSE <<
"Data members:"
<<
endmsg
350
<<
"m_AtlasZside = "
<<
m_AtlasZside
<<
""
<<
endmsg
351
<<
"m_NumberOfFans = "
<<
m_NumberOfFans
<<
""
<<
endmsg
352
<<
"m_ZeroFanPhi = "
<<
m_ZeroFanPhi
<<
""
<<
endmsg
353
<<
"m_ZeroFanPhi_ForDetNeaFan = "
<<
m_ZeroFanPhi_ForDetNeaFan
<<
""
<<
endmsg
354
<<
"m_FanStepOnPhi = "
<<
m_FanStepOnPhi
<<
""
<<
endmsg
355
<<
"m_FanHalfThickness = "
<<
m_FanHalfThickness
<<
""
<<
endmsg
356
//<< "Sagging parameters : " << m_sagging_parameter[0][0] << " " << m_sagging_parameter[0][1] << "" << endmsg
357
//<< "Sagging parameters : " << m_sagging_parameter[1][0] << " " << m_sagging_parameter[1][1] << "" << endmsg
358
<<
"slant_params = "
<< slant_params <<
""
<<
endmsg
359
<<
"Sagging option = "
<< sagging_opt_value <<
""
<<
endmsg
360
<<
"SaggingOn = "
<< (
m_SaggingOn
?
"true"
:
"false"
) <<
""
<<
endmsg
361
<<
"Slant parameters : "
;
362
for
(
int
i = 0; i < 5; i ++)
msg
<<
" "
<<
m_slant_parametrization
[i];
363
msg
<<
endmsg
;
364
365
if
(
m_isModule
){
366
msg
<< MSG::VERBOSE
367
<<
"module_init: FirstFan = "
<<
m_FirstFan
368
<<
", LastFan = "
<<
m_LastFan
369
<<
", ZeroFanPhi = "
<<
m_ZeroFanPhi
370
<<
endmsg
;
371
}
372
373
//m_fan_number = -1000;
374
375
// Is the following code fragment obsoleted? DM 2015-03-13
376
/* to compare various methods of slant angle computation:
377
if(isInner) return;
378
FILE *O = fopen("slant_stat.table1.txt", "w");
379
if(O == 0) abort();
380
struct timeval t1, t2;
381
struct timezone tz;
382
std::vector<double> alpha;
383
gettimeofday(&t1, &tz);
384
for(double r = 600.; r < 2100.; r += .01){
385
alpha.push_back(parameterized_slant_angle(r));
386
}
387
gettimeofday(&t2, &tz);
388
389
fprintf(O, "%d.%06d %d.%06d" << endmsg, t1.tv_sec, t1.tv_usec, t2.tv_sec, t2.tv_usec);
390
int i = 0;
391
for(double r = 600.; r < 2100.; r += .01, i ++){
392
fprintf(O, "%f %f\n", r, alpha[i]);
393
}
394
395
fclose(O);
396
exit(0);
397
*/
398
}
399
400
/* converts module gap number into wheel gap number */
401
int
LArWheelCalculator::PhiGapNumberForWheel
(
int
i)
const
402
{
403
return
m_fanCalcImpl
->PhiGapNumberForWheel(i);
404
}
405
406
void
LArWheelCalculator::inner_wheel_init
(
const
EMECData
& emecData)
407
{
408
for
(
int
i = 0; i < 5; ++ i) {
409
m_slant_parametrization
[i] =
default_slant_parametrization
[0][i];
410
}
411
m_slant_use_default
=
true
;
412
413
m_NumberOfFans
=emecData.
emecwheelparameters
[0].NABS;
414
m_NumberOfWaves
=emecData.
emecwheelparameters
[0].NACC;
415
416
m_FanFoldRadius
= 3.25*mm;
417
m_ZeroGapNumber
= 64;
// internal constant, should not be taken from DB
418
m_FanStepOnPhi
= 2*
M_PI
/
m_NumberOfFans
;
419
m_isInner
=
true
;
420
}
421
422
void
LArWheelCalculator::outer_wheel_init
(
const
EMECData
& emecData)
423
{
424
for
(
int
i = 0; i < 5; ++ i) {
425
m_slant_parametrization
[i] =
default_slant_parametrization
[1][i];
426
}
427
m_slant_use_default
=
true
;
428
429
m_NumberOfFans
=emecData.
emecwheelparameters
[1].NABS;
430
m_NumberOfWaves
=emecData.
emecwheelparameters
[1].NACC;
431
432
433
m_FanFoldRadius
= 3.0*mm;
434
m_ZeroGapNumber
= 192;
// internal constant, should not be taken from DB
435
m_FanStepOnPhi
= 2*
M_PI
/
m_NumberOfFans
;
436
m_isInner
=
false
;
437
}
438
439
double
LArWheelCalculator::GetFanHalfThickness
(
LArG4::LArWheelCalculator_t
t)
const
440
{
441
442
switch
(t){
443
case
LArG4::BackInnerBarretteWheelCalib
:
444
case
LArG4::BackInnerBarretteModuleCalib
:
445
case
LArG4::BackInnerBarretteWheel
:
446
case
LArG4::BackInnerBarretteModule
:
447
case
LArG4::InnerAbsorberWheel
:
448
case
LArG4::InnerAbsorberModule
:
449
return
(
m_leadThicknessInner
/ 2 +
m_steelThickness
+
m_glueThickness
)*
m_coldContraction
;
// new values, 02.11.06 J.T. with contraction in cold
450
// lead / 2 + steel + glue
451
case
LArG4::InnerGlueWheel
:
452
return
(
m_leadThicknessInner
/ 2 +
m_glueThickness
)*
m_coldContraction
;
453
case
LArG4::InnerLeadWheel
:
454
return
m_leadThicknessInner
/ 2 *
m_coldContraction
;
455
456
case
LArG4::BackOuterBarretteWheelCalib
:
457
case
LArG4::BackOuterBarretteModuleCalib
:
458
case
LArG4::BackOuterBarretteWheel
:
459
case
LArG4::BackOuterBarretteModule
:
460
case
LArG4::OuterAbsorberWheel
:
461
case
LArG4::OuterAbsorberModule
:
462
return
(
m_leadThicknessOuter
/ 2 +
m_steelThickness
+
m_glueThickness
)*
m_coldContraction
;
// new values, 02.11.06 J.T.
463
case
LArG4::OuterGlueWheel
:
464
return
(
m_leadThicknessOuter
/ 2 +
m_glueThickness
)*
m_coldContraction
;
465
case
LArG4::OuterLeadWheel
:
466
return
m_leadThicknessOuter
/ 2 *
m_coldContraction
;
467
468
case
LArG4::InnerElectrodWheel
:
469
case
LArG4::OuterElectrodWheel
:
470
case
LArG4::InnerElectrodModule
:
471
case
LArG4::OuterElectrodModule
:
472
return
m_electrodeTotalThickness
/
m_electrodeInvContraction
* 0.5;
//new values, 02.11.06 J.T
473
}
474
throw
std::runtime_error(
"LArWheelCalculator::GetFanHalfThickness: wrong wheel type"
);
475
}
476
477
void
LArWheelCalculator::module_init
()
478
{
479
m_isModule
=
true
;
480
m_LastFan
=
m_NumberOfFans
/ 8;
481
m_FirstFan
= 0;
482
m_ZeroFanPhi
= -
m_LastFan
/ 2 *
m_FanStepOnPhi
;
483
}
484
485
/*
486
array of r is filled with:
487
for inner wheel - 2 elements { r_front, r_back }
488
for outer wheel - 3 elements { r_front, r_middle, r_back }
489
return value - delta_z of middle point in case of outer wheel
490
*/
491
double
LArWheelCalculator::GetWheelInnerRadius
(std::array<double,2> &
r
)
const
492
{
493
double
zMid = 0.;
494
if
(
m_isInner
){
495
double
tanThetaInner = 2. * exp(-
m_eta_hi
) / (1. - exp(-2.*
m_eta_hi
));
496
r
[0] =
m_zWheelFrontFace
* tanThetaInner;
497
r
[1] =
m_zWheelBackFace
* tanThetaInner;
498
}
499
return
zMid;
500
}
501
502
double
LArWheelCalculator::GetWheelInnerRadius
(std::array<double,3> &
r
)
const
503
{
504
double
zMid = 0.;
505
if
(not
m_isInner
){
506
double
tanThetaMid = 2. * exp(-
m_eta_mid
) / (1. - exp(-2.*
m_eta_mid
));
507
double
inv_tanThetaOuter = (1. - exp(-2.*
m_eta_low
)) / (2. * exp(-
m_eta_low
));
508
// Note that there is a 3mm gap between the outer surface of the
509
// inner wheel and the inner surface of the outer wheel.
510
r
[0] =
m_zWheelFrontFace
* tanThetaMid +
m_HalfGapBetweenWheels
;
511
r
[1] =
m_rOuterCutoff
* inv_tanThetaOuter * tanThetaMid +
m_HalfGapBetweenWheels
;
512
r
[2] =
m_zWheelBackFace
* tanThetaMid +
m_HalfGapBetweenWheels
;
513
zMid =
m_rOuterCutoff
* inv_tanThetaOuter -
m_zWheelFrontFace
;
514
}
515
return
zMid;
516
}
517
518
/*
519
array of r is filled with:
520
for inner wheel - 2 elements { r_front, r_back }
521
for outer wheel - 3 elements { r_front, r_middle, r_back }
522
*/
523
void
LArWheelCalculator::GetWheelOuterRadius
(std::array<double,2> &
r
)
const
524
{
525
if
(
m_isInner
){
526
double
tanThetaMid = 2. * exp(-
m_eta_mid
) / (1. - exp(-2.*
m_eta_mid
));
527
// Note that there is a 3mm gap between the outer surface of the
528
// inner wheel and the inner surface of the outer wheel.
529
r
[0] =
m_zWheelFrontFace
* tanThetaMid -
m_HalfGapBetweenWheels
;
530
r
[1] =
m_zWheelBackFace
* tanThetaMid -
m_HalfGapBetweenWheels
;
531
}
532
}
533
void
LArWheelCalculator::GetWheelOuterRadius
(std::array<double,3> &
r
)
const
534
{
535
if
(not
m_isInner
){
536
double
tanThetaOuter = 2. * exp(-
m_eta_low
) / (1. - exp(-2.*
m_eta_low
));
537
r
[0] =
m_zWheelFrontFace
* tanThetaOuter;
538
r
[1] =
m_rOuterCutoff
;
539
r
[2] =
m_rOuterCutoff
;
540
}
541
}
M_PI
#define M_PI
Definition
ActiveFraction.h:14
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:61
DistanceCalculatorFactory.h
EMECData.h
FanCalculatorFactory.h
a
static Double_t a
Definition
LArPhysWaveHECTool.cxx:38
default_slant_parametrization
static const double default_slant_parametrization[2][5]
Definition
LArWheelCalculator.cxx:60
LArWheelCalculator.h
PortableMsgStream.h
cm
const double cm
Definition
Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
LArWheelCalculator_Impl::DistanceCalculatorFactory::Create
static IDistanceCalculator * Create(const std::string &sagging_opt, LArWheelCalculator *lwc)
Definition
DistanceCalculatorFactory.cxx:14
LArWheelCalculator_Impl::FanCalculatorFactory::Create
static IFanCalculator * Create(bool isSaggingOn, bool isModule, LArWheelCalculator *lwc)
Definition
FanCalculatorFactory.cxx:13
LArWheelCalculator::m_isInner
bool m_isInner
Definition
LArWheelCalculator.h:186
LArWheelCalculator::module_init
void module_init()
Definition
LArWheelCalculator.cxx:477
LArWheelCalculator::m_NumberOfFans
int m_NumberOfFans
Definition
LArWheelCalculator.h:177
LArWheelCalculator::m_zWheelFrontFace
double m_zWheelFrontFace
Definition
LArWheelCalculator.h:167
LArWheelCalculator::m_dMechFocaltoWRP
double m_dMechFocaltoWRP
Definition
LArWheelCalculator.h:159
LArWheelCalculator::GetFanHalfThickness
double GetFanHalfThickness() const
Definition
LArWheelCalculator.h:96
LArWheelCalculator::m_SaggingOn
bool m_SaggingOn
Definition
LArWheelCalculator.h:146
LArWheelCalculator::m_StraightStartSection
double m_StraightStartSection
Definition
LArWheelCalculator.h:155
LArWheelCalculator::outer_wheel_init
void outer_wheel_init(const EMECData &)
Definition
LArWheelCalculator.cxx:422
LArWheelCalculator::m_rOuterCutoff
double m_rOuterCutoff
Definition
LArWheelCalculator.h:161
LArWheelCalculator::m_electrodeTotalThickness
double m_electrodeTotalThickness
Definition
LArWheelCalculator.h:195
LArWheelCalculator::m_eta_hi
double m_eta_hi
Definition
LArWheelCalculator.h:162
LArWheelCalculator::m_isBarrette
bool m_isBarrette
Definition
LArWheelCalculator.h:187
LArWheelCalculator::m_phiRotation
bool m_phiRotation
Definition
LArWheelCalculator.h:147
LArWheelCalculator::m_FanFoldRadius
double m_FanFoldRadius
Definition
LArWheelCalculator.h:171
LArWheelCalculator::m_leadThicknessOuter
double m_leadThicknessOuter
Definition
LArWheelCalculator.h:192
LArWheelCalculator::m_QuarterWaveLength
double m_QuarterWaveLength
Definition
LArWheelCalculator.h:169
LArWheelCalculator::m_HalfWaveLength
double m_HalfWaveLength
Definition
LArWheelCalculator.h:170
LArWheelCalculator::m_ActiveLength
double m_ActiveLength
Definition
LArWheelCalculator.h:154
LArWheelCalculator::m_dElecFocaltoWRP
double m_dElecFocaltoWRP
Definition
LArWheelCalculator.h:160
LArWheelCalculator::m_isModule
bool m_isModule
Definition
LArWheelCalculator.h:184
LArWheelCalculator::m_glueThickness
double m_glueThickness
Definition
LArWheelCalculator.h:194
LArWheelCalculator::m_LastFan
int m_LastFan
Definition
LArWheelCalculator.h:182
LArWheelCalculator::m_slant_use_default
bool m_slant_use_default
Definition
LArWheelCalculator.h:148
LArWheelCalculator::m_leadThicknessInner
double m_leadThicknessInner
Definition
LArWheelCalculator.h:191
LArWheelCalculator::m_FirstFan
int m_FirstFan
Definition
LArWheelCalculator.h:181
LArWheelCalculator::m_ZeroGapNumber
int m_ZeroGapNumber
Definition
LArWheelCalculator.h:180
LArWheelCalculator::m_zShift
double m_zShift
Definition
LArWheelCalculator.h:163
LArWheelCalculator::m_slant_parametrization
std::array< double, 5 > m_slant_parametrization
Definition
LArWheelCalculator.h:149
LArWheelCalculator::m_HalfWheelThickness
double m_HalfWheelThickness
Definition
LArWheelCalculator.h:166
LArWheelCalculator::m_electrodeInvContraction
double m_electrodeInvContraction
Definition
LArWheelCalculator.h:197
LArWheelCalculator::m_FanHalfThickness
double m_FanHalfThickness
Definition
LArWheelCalculator.h:179
LArWheelCalculator::m_FanStepOnPhi
double m_FanStepOnPhi
Definition
LArWheelCalculator.h:174
LArWheelCalculator::m_steelThickness
double m_steelThickness
Definition
LArWheelCalculator.h:193
LArWheelCalculator::m_isBarretteCalib
bool m_isBarretteCalib
Definition
LArWheelCalculator.h:188
LArWheelCalculator::m_isElectrode
bool m_isElectrode
Definition
LArWheelCalculator.h:185
LArWheelCalculator::~LArWheelCalculator
virtual ~LArWheelCalculator()
Definition
LArWheelCalculator.cxx:92
LArWheelCalculator::m_fanCalcImpl
LArWheelCalculator_Impl::IFanCalculator * m_fanCalcImpl
Definition
LArWheelCalculator.h:235
LArWheelCalculator::PhiGapNumberForWheel
int PhiGapNumberForWheel(int) const
Definition
LArWheelCalculator.cxx:401
LArWheelCalculator::m_zWheelBackFace
double m_zWheelBackFace
Definition
LArWheelCalculator.h:167
LArWheelCalculator::m_AtlasZside
int m_AtlasZside
Definition
LArWheelCalculator.h:145
LArWheelCalculator::m_coldContraction
double m_coldContraction
Definition
LArWheelCalculator.h:196
LArWheelCalculator::inner_wheel_init
void inner_wheel_init(const EMECData &)
Definition
LArWheelCalculator.cxx:406
LArWheelCalculator::m_type
LArG4::LArWheelCalculator_t m_type
Definition
LArWheelCalculator.h:143
LArWheelCalculator::m_zWheelRefPoint
double m_zWheelRefPoint
Definition
LArWheelCalculator.h:158
LArWheelCalculator::m_NumberOfHalfWaves
int m_NumberOfHalfWaves
Definition
LArWheelCalculator.h:176
LArWheelCalculator::m_eta_mid
double m_eta_mid
Definition
LArWheelCalculator.h:162
LArWheelCalculator::m_ZeroFanPhi
double m_ZeroFanPhi
Definition
LArWheelCalculator.h:172
LArWheelCalculator::m_WheelThickness
double m_WheelThickness
Definition
LArWheelCalculator.h:165
LArWheelCalculator::LArWheelCalculator
LArWheelCalculator(const EMECData &emecData, LArG4::LArWheelCalculator_t a_wheelType, int zside=1)
Definition
LArWheelCalculator.cxx:99
LArWheelCalculator::GetWheelInnerRadius
double GetWheelInnerRadius(std::array< double, 2 > &rInner) const
Definition
LArWheelCalculator.cxx:491
LArWheelCalculator::m_distanceCalcImpl
LArWheelCalculator_Impl::IDistanceCalculator * m_distanceCalcImpl
Definition
LArWheelCalculator.h:234
LArWheelCalculator::type
virtual LArG4::LArWheelCalculator_t type() const
Definition
LArWheelCalculator.h:80
LArWheelCalculator::LArWheelCalculatorTypeString
static const char * LArWheelCalculatorTypeString(LArG4::LArWheelCalculator_t)
Definition
LArWheelCalculator.cxx:65
LArWheelCalculator::m_dWRPtoFrontFace
double m_dWRPtoFrontFace
Definition
LArWheelCalculator.h:156
LArWheelCalculator::fill_sincos_parameterization
void fill_sincos_parameterization()
Definition
sincos_poly.cxx:247
LArWheelCalculator::GetWheelOuterRadius
void GetWheelOuterRadius(std::array< double, 2 > &rOuter) const
Definition
LArWheelCalculator.cxx:523
LArWheelCalculator::m_NumberOfWaves
int m_NumberOfWaves
Definition
LArWheelCalculator.h:175
LArWheelCalculator::m_HalfGapBetweenWheels
double m_HalfGapBetweenWheels
Definition
LArWheelCalculator.h:157
LArWheelCalculator::m_eta_low
double m_eta_low
Definition
LArWheelCalculator.h:162
LArWheelCalculator::m_ZeroFanPhi_ForDetNeaFan
double m_ZeroFanPhi_ForDetNeaFan
Definition
LArWheelCalculator.h:173
r
int r
Definition
globals.cxx:22
LArG4::LArWheelCalculator_t
LArWheelCalculator_t
Definition
LArWheelCalculatorEnums.h:10
LArG4::OuterElectrodModule
@ OuterElectrodModule
Definition
LArWheelCalculatorEnums.h:14
LArG4::InnerLeadWheel
@ InnerLeadWheel
Definition
LArWheelCalculatorEnums.h:20
LArG4::OuterLeadWheel
@ OuterLeadWheel
Definition
LArWheelCalculatorEnums.h:20
LArG4::InnerAbsorberWheel
@ InnerAbsorberWheel
Definition
LArWheelCalculatorEnums.h:11
LArG4::InnerElectrodWheel
@ InnerElectrodWheel
Definition
LArWheelCalculatorEnums.h:12
LArG4::BackInnerBarretteModule
@ BackInnerBarretteModule
Definition
LArWheelCalculatorEnums.h:17
LArG4::BackOuterBarretteModule
@ BackOuterBarretteModule
Definition
LArWheelCalculatorEnums.h:17
LArG4::BackOuterBarretteWheelCalib
@ BackOuterBarretteWheelCalib
Definition
LArWheelCalculatorEnums.h:16
LArG4::InnerGlueWheel
@ InnerGlueWheel
Definition
LArWheelCalculatorEnums.h:19
LArG4::BackOuterBarretteWheel
@ BackOuterBarretteWheel
Definition
LArWheelCalculatorEnums.h:15
LArG4::BackInnerBarretteWheel
@ BackInnerBarretteWheel
Definition
LArWheelCalculatorEnums.h:15
LArG4::InnerElectrodModule
@ InnerElectrodModule
Definition
LArWheelCalculatorEnums.h:14
LArG4::OuterAbsorberModule
@ OuterAbsorberModule
Definition
LArWheelCalculatorEnums.h:13
LArG4::OuterAbsorberWheel
@ OuterAbsorberWheel
Definition
LArWheelCalculatorEnums.h:11
LArG4::OuterElectrodWheel
@ OuterElectrodWheel
Definition
LArWheelCalculatorEnums.h:12
LArG4::BackInnerBarretteWheelCalib
@ BackInnerBarretteWheelCalib
Definition
LArWheelCalculatorEnums.h:16
LArG4::InnerAbsorberModule
@ InnerAbsorberModule
Definition
LArWheelCalculatorEnums.h:13
LArG4::BackInnerBarretteModuleCalib
@ BackInnerBarretteModuleCalib
Definition
LArWheelCalculatorEnums.h:18
LArG4::OuterGlueWheel
@ OuterGlueWheel
Definition
LArWheelCalculatorEnums.h:19
LArG4::BackOuterBarretteModuleCalib
@ BackOuterBarretteModuleCalib
Definition
LArWheelCalculatorEnums.h:18
EMECData
Definition
EMECData.h:131
EMECData::emecparams
std::vector< EMECPARAMS > emecparams
Definition
EMECData.h:133
EMECData::emecfan
std::vector< EMECFAN > emecfan
Definition
EMECData.h:137
EMECData::coldcontraction
std::vector< COLDCONTRACTION > coldcontraction
Definition
EMECData.h:136
EMECData::emecgeometry
std::vector< EMECGEOMETRY > emecgeometry
Definition
EMECData.h:132
EMECData::emecmagicnumbers
std::vector< EMECMAGICNUMBERS > emecmagicnumbers
Definition
EMECData.h:135
EMECData::emecwheelparameters
std::vector< EMECWHEELPARAMETERS > emecwheelparameters
Definition
EMECData.h:134
msg
MsgStream & msg
Definition
testRead.cxx:32
Generated on
for ATLAS Offline Software by
1.17.0