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

This class separates some of the geometry details of the LAr endcap. More...

#include <LArWheelCalculator.h>

Collaboration diagram for LArWheelCalculator:

Public Member Functions

 LArWheelCalculator (const EMECData &emecData, LArG4::LArWheelCalculator_t a_wheelType, int zside=1)
virtual ~LArWheelCalculator ()
 LArWheelCalculator (const LArWheelCalculator &)=delete
LArWheelCalculatoroperator= (const LArWheelCalculator &)=delete
double GetFanHalfThickness (LArG4::LArWheelCalculator_t) const
double GetWheelThickness () const
double GetdWRPtoFrontFace () const
double GetStraightStartSection () const
virtual LArG4::LArWheelCalculator_t type () const
int GetAtlasZside () const
double zShift () const
double GetFanFoldRadius () const
double GetZeroFanPhi () const
int GetNumberOfWaves () const
int GetNumberOfHalfWaves () const
int GetNumberOfFans () const
double GetActiveLength () const
double GetFanStepOnPhi () const
double GetHalfWaveLength () const
double GetQuarterWaveLength () const
double GetWheelRefPoint () const
double GetFanHalfThickness () const
bool GetisModule () const
bool GetisElectrode () const
bool GetisInner () const
bool GetisBarrette () const
bool GetisBarretteCalib () const
double GetWheelInnerRadius (std::array< double, 2 > &rInner) const
double GetWheelInnerRadius (std::array< double, 3 > &rInner) const
void GetWheelOuterRadius (std::array< double, 2 > &rOuter) const
void GetWheelOuterRadius (std::array< double, 3 > &rOuter) const
double GetElecFocaltoWRP () const
int GetFirstFan () const
int GetLastFan () const
int GetStartGapNumber () const
void SetStartGapNumber (int n)
int adjust_fan_number (int fan_number) const
double parameterized_slant_angle (double) const
 Calculates wave slant angle using parametrization for current wheel for given distance from calorimeter axis.
geometry methods
double DistanceToTheNearestFan (CLHEP::Hep3Vector &p, int &out_fan_number) const
 Determines the nearest to the input point fan.
double DistanceToTheNeutralFibre (const CLHEP::Hep3Vector &p, int fan_number) const
 Calculates aproximate, probably underestimate, distance to the neutral fibre of the vertical fan.
CLHEP::Hep3Vector NearestPointOnNeutralFibre (const CLHEP::Hep3Vector &p, int fan_number) const
std::vector< double > NearestPointOnNeutralFibre_asVector (const CLHEP::Hep3Vector &p, int fan_number) const
int GetPhiGap (const CLHEP::Hep3Vector &p) const
int PhiGapNumberForWheel (int) const
std::pair< int, int > GetPhiGapAndSide (const CLHEP::Hep3Vector &p) const
double AmplitudeOfSurface (const CLHEP::Hep3Vector &P, int side, int fan_number) const

Static Public Member Functions

static const char * LArWheelCalculatorTypeString (LArG4::LArWheelCalculator_t)

Private Member Functions

void outer_wheel_init (const EMECData &)
void inner_wheel_init (const EMECData &)
void module_init ()
void parameterized_sincos (const double, double &, double &) const
void parameterized_sin (const double, double &, double &) const
void fill_sincos_parameterization ()

Private Attributes

LArG4::LArWheelCalculator_t m_type
int m_AtlasZside
bool m_SaggingOn
bool m_phiRotation
bool m_slant_use_default
std::array< double, 5 > m_slant_parametrization
std::array< double, LARWC_SINCOS_POLY+1 > m_sin_parametrization
std::array< double, LARWC_SINCOS_POLY+1 > m_cos_parametrization
std::vector< std::vector< double > > m_sagging_parameter
double m_ActiveLength
double m_StraightStartSection
double m_dWRPtoFrontFace
double m_HalfGapBetweenWheels
double m_zWheelRefPoint
double m_dMechFocaltoWRP
double m_dElecFocaltoWRP
double m_rOuterCutoff
double m_eta_hi
double m_eta_mid
double m_eta_low
double m_zShift
double m_WheelThickness
double m_HalfWheelThickness
double m_zWheelFrontFace
double m_zWheelBackFace
double m_QuarterWaveLength
double m_HalfWaveLength
double m_FanFoldRadius
double m_ZeroFanPhi
double m_ZeroFanPhi_ForDetNeaFan
double m_FanStepOnPhi
int m_NumberOfWaves
int m_NumberOfHalfWaves
int m_NumberOfFans
double m_FanHalfThickness
int m_ZeroGapNumber
int m_FirstFan
int m_LastFan
bool m_isModule
bool m_isElectrode
bool m_isInner
bool m_isBarrette
bool m_isBarretteCalib
double m_leadThicknessInner
double m_leadThicknessOuter
double m_steelThickness
double m_glueThickness
double m_electrodeTotalThickness
double m_coldContraction
double m_electrodeInvContraction
LArWheelCalculator_Impl::IDistanceCalculatorm_distanceCalcImpl
LArWheelCalculator_Impl::IFanCalculatorm_fanCalcImpl

Friends

class LArWheelCalculator_Impl::DistanceCalculatorSaggingOff
class LArWheelCalculator_Impl::DistanceCalculatorSaggingOn
class LArWheelCalculator_Impl::ModuleFanCalculator
template<typename SaggingType>
class LArWheelCalculator_Impl::WheelFanCalculator
template<typename SaggingType>
class LArWheelCalculator_Impl::DistanceToTheNeutralFibre_OfFan

Detailed Description

This class separates some of the geometry details of the LAr endcap.

26-May-2009 AMS: remove all previous comments from here as obsoleted

Definition at line 58 of file LArWheelCalculator.h.

Constructor & Destructor Documentation

◆ LArWheelCalculator() [1/2]

LArWheelCalculator::LArWheelCalculator ( const EMECData & emecData,
LArG4::LArWheelCalculator_t a_wheelType,
int zside = 1 )

Definition at line 99 of file LArWheelCalculator.cxx.

99 :
100 m_type(a_wheelType),
101 m_AtlasZside(zside),
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
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
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){
201 m_isBarretteCalib = true;
202 /* FALLTHROUGH */
204 m_isBarrette = true;
206 /* FALLTHROUGH */
210 inner_wheel_init(emecData);
213 break;
215 m_isBarretteCalib = true;
216 /* FALLTHROUGH */
218 m_isBarrette = true;
220 /* FALLTHROUGH */
224 outer_wheel_init(emecData);
227 break;
229 inner_wheel_init(emecData);
230 m_ZeroFanPhi = 0;
232 m_isElectrode = true;
233 break;
235 outer_wheel_init(emecData);
236 m_ZeroFanPhi = 0;
238 m_isElectrode = true;
239 break;
241 m_isBarretteCalib = true;
242 /* FALLTHROUGH */
244 m_isBarrette = true;
246 /* FALLTHROUGH */
248 inner_wheel_init(emecData);
249 module_init();
251 // later for all? m_ZeroFanPhi_ForDetNeaFan = m_ZeroFanPhi - m_FanStepOnPhi * 0.5;
252 break;
254 m_isBarretteCalib = true;
255 /* FALLTHROUGH */
257 m_isBarrette = true;
259 /* FALLTHROUGH */
261 outer_wheel_init(emecData);
262 module_init();
264 // later for all? m_ZeroFanPhi_ForDetNeaFan = m_ZeroFanPhi - m_FanStepOnPhi * 0.5;
265 break;
267 inner_wheel_init(emecData);
268 module_init();
269 m_FirstFan ++;
270 m_isElectrode = true;
271 break;
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 }
285 //m_HalfNumberOfFans = m_NumberOfFans / 2;
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
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
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 {
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}
#define endmsg
static Double_t a
static IDistanceCalculator * Create(const std::string &sagging_opt, LArWheelCalculator *lwc)
static IFanCalculator * Create(bool isSaggingOn, bool isModule, LArWheelCalculator *lwc)
double GetFanHalfThickness() const
void outer_wheel_init(const EMECData &)
std::array< double, 5 > m_slant_parametrization
LArWheelCalculator_Impl::IFanCalculator * m_fanCalcImpl
void inner_wheel_init(const EMECData &)
LArG4::LArWheelCalculator_t m_type
LArWheelCalculator_Impl::IDistanceCalculator * m_distanceCalcImpl
static const char * LArWheelCalculatorTypeString(LArG4::LArWheelCalculator_t)
void fill_sincos_parameterization()
std::vector< EMECPARAMS > emecparams
Definition EMECData.h:133
std::vector< EMECFAN > emecfan
Definition EMECData.h:137
std::vector< COLDCONTRACTION > coldcontraction
Definition EMECData.h:136
std::vector< EMECGEOMETRY > emecgeometry
Definition EMECData.h:132
std::vector< EMECMAGICNUMBERS > emecmagicnumbers
Definition EMECData.h:135
std::vector< EMECWHEELPARAMETERS > emecwheelparameters
Definition EMECData.h:134
MsgStream & msg
Definition testRead.cxx:32

◆ ~LArWheelCalculator()

LArWheelCalculator::~LArWheelCalculator ( )
virtual

Definition at line 92 of file LArWheelCalculator.cxx.

92 {
93 delete m_distanceCalcImpl;
95 delete m_fanCalcImpl;
96 m_fanCalcImpl = 0;
97}

◆ LArWheelCalculator() [2/2]

LArWheelCalculator::LArWheelCalculator ( const LArWheelCalculator & )
delete

Member Function Documentation

◆ adjust_fan_number()

int LArWheelCalculator::adjust_fan_number ( int fan_number) const
inline

Definition at line 217 of file LArWheelCalculator.h.

217 {
218 int res_fan_number = fan_number;
219 if(res_fan_number < 0) res_fan_number += m_NumberOfFans;
220 res_fan_number += m_ZeroGapNumber;
221 if(res_fan_number >= m_NumberOfFans) res_fan_number -= m_NumberOfFans;
222 return res_fan_number;
223 }

◆ AmplitudeOfSurface()

double LArWheelCalculator::AmplitudeOfSurface ( const CLHEP::Hep3Vector & P,
int side,
int fan_number ) const

Definition at line 130 of file LArWheelCalculatorGeometry.cxx.

131{
132 return m_distanceCalcImpl->AmplitudeOfSurface(P, side, fan_number);
133}
static Double_t P(Double_t *tt, Double_t *par)

◆ DistanceToTheNearestFan()

double LArWheelCalculator::DistanceToTheNearestFan ( CLHEP::Hep3Vector & p,
int & out_fan_number ) const

Determines the nearest to the input point fan.

Rotates point p to the localFan coordinates and returns the fan number to out_fan_number parameter.

Definition at line 90 of file LArWheelCalculatorGeometry.cxx.

91{
92 return m_fanCalcImpl->DistanceToTheNearestFan(p, out_fan_number);
93}

◆ DistanceToTheNeutralFibre()

double LArWheelCalculator::DistanceToTheNeutralFibre ( const CLHEP::Hep3Vector & p,
int fan_number ) const

Calculates aproximate, probably underestimate, distance to the neutral fibre of the vertical fan.

Sign of return value means side of the fan; negative - lower phi.

Definition at line 108 of file LArWheelCalculatorGeometry.cxx.

109{
110 return m_distanceCalcImpl->DistanceToTheNeutralFibre(P, fan_number);
111}

◆ fill_sincos_parameterization()

void LArWheelCalculator::fill_sincos_parameterization ( )
private

Definition at line 247 of file sincos_poly.cxx.

248{
249 // The polynomial approximations are calculated once per side, and stored
250 // as statics for reuse in successive calculator instances.
251 const sincos_params& p = m_isInner ? inner_params(*this) : outer_params(*this);
252
253 // Fill the parameters into our instances variables
256
257 // Parameterization for the vectorized sincos calculation
258 // see ATLASSIM-4753 for details
259 // s4, s5, c4, c5
260 // s2, s3, c2, c3
261 // s0, s1, c0, c1
262 m_vsincos_par.param_0[0] = m_sin_parametrization[4];
263 m_vsincos_par.param_0[1] = m_sin_parametrization[5];
264 m_vsincos_par.param_0[2] = m_cos_parametrization[4];
265 m_vsincos_par.param_0[3] = m_cos_parametrization[5];
266 m_vsincos_par.param_1[0] = m_sin_parametrization[2];
267 m_vsincos_par.param_1[1] = m_sin_parametrization[3];
268 m_vsincos_par.param_1[2] = m_cos_parametrization[2];
269 m_vsincos_par.param_1[3] = m_cos_parametrization[3];
270 m_vsincos_par.param_2[0] = m_sin_parametrization[0];
271 m_vsincos_par.param_2[1] = m_sin_parametrization[1];
272 m_vsincos_par.param_2[2] = m_cos_parametrization[0];
273 m_vsincos_par.param_2[3] = m_cos_parametrization[1];
274}
std::array< double, LARWC_SINCOS_POLY+1 > m_cos_parametrization
std::array< double, LARWC_SINCOS_POLY+1 > m_sin_parametrization

◆ GetActiveLength()

double LArWheelCalculator::GetActiveLength ( ) const
inline

Definition at line 93 of file LArWheelCalculator.h.

93{ return m_ActiveLength; }

◆ GetAtlasZside()

int LArWheelCalculator::GetAtlasZside ( ) const
inline

Definition at line 85 of file LArWheelCalculator.h.

85{ return m_AtlasZside; }

◆ GetdWRPtoFrontFace()

double LArWheelCalculator::GetdWRPtoFrontFace ( ) const
inline

Definition at line 80 of file LArWheelCalculator.h.

80{ return m_dWRPtoFrontFace; }

◆ GetElecFocaltoWRP()

double LArWheelCalculator::GetElecFocaltoWRP ( ) const
inline

Definition at line 111 of file LArWheelCalculator.h.

111{ return m_dElecFocaltoWRP; }

◆ GetFanFoldRadius()

double LArWheelCalculator::GetFanFoldRadius ( ) const
inline

Definition at line 87 of file LArWheelCalculator.h.

87{ return m_FanFoldRadius; }

◆ GetFanHalfThickness() [1/2]

double LArWheelCalculator::GetFanHalfThickness ( ) const
inline

Definition at line 98 of file LArWheelCalculator.h.

98{ return m_FanHalfThickness; }

◆ GetFanHalfThickness() [2/2]

double LArWheelCalculator::GetFanHalfThickness ( LArG4::LArWheelCalculator_t t) const

Definition at line 439 of file LArWheelCalculator.cxx.

440{
441
442 switch(t){
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
455
462 return (m_leadThicknessOuter / 2 + m_steelThickness + m_glueThickness)*m_coldContraction; // new values, 02.11.06 J.T.
467
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}

◆ GetFanStepOnPhi()

double LArWheelCalculator::GetFanStepOnPhi ( ) const
inline

Definition at line 94 of file LArWheelCalculator.h.

94{ return m_FanStepOnPhi; }

◆ GetFirstFan()

int LArWheelCalculator::GetFirstFan ( ) const
inline

Definition at line 114 of file LArWheelCalculator.h.

114{ return m_FirstFan; }

◆ GetHalfWaveLength()

double LArWheelCalculator::GetHalfWaveLength ( ) const
inline

Definition at line 95 of file LArWheelCalculator.h.

95{ return m_HalfWaveLength; }

◆ GetisBarrette()

bool LArWheelCalculator::GetisBarrette ( ) const
inline

Definition at line 103 of file LArWheelCalculator.h.

103{ return m_isBarrette; }

◆ GetisBarretteCalib()

bool LArWheelCalculator::GetisBarretteCalib ( ) const
inline

Definition at line 104 of file LArWheelCalculator.h.

104{ return m_isBarretteCalib; }

◆ GetisElectrode()

bool LArWheelCalculator::GetisElectrode ( ) const
inline

Definition at line 101 of file LArWheelCalculator.h.

101{ return m_isElectrode; }

◆ GetisInner()

bool LArWheelCalculator::GetisInner ( ) const
inline

Definition at line 102 of file LArWheelCalculator.h.

102{ return m_isInner; }

◆ GetisModule()

bool LArWheelCalculator::GetisModule ( ) const
inline

Definition at line 100 of file LArWheelCalculator.h.

100{ return m_isModule; }

◆ GetLastFan()

int LArWheelCalculator::GetLastFan ( ) const
inline

Definition at line 115 of file LArWheelCalculator.h.

115{ return m_LastFan; }

◆ GetNumberOfFans()

int LArWheelCalculator::GetNumberOfFans ( ) const
inline

Definition at line 91 of file LArWheelCalculator.h.

91{ return m_NumberOfFans; }

◆ GetNumberOfHalfWaves()

int LArWheelCalculator::GetNumberOfHalfWaves ( ) const
inline

Definition at line 90 of file LArWheelCalculator.h.

90{ return m_NumberOfHalfWaves; }

◆ GetNumberOfWaves()

int LArWheelCalculator::GetNumberOfWaves ( ) const
inline

Definition at line 89 of file LArWheelCalculator.h.

89{ return m_NumberOfWaves; }

◆ GetPhiGap()

int LArWheelCalculator::GetPhiGap ( const CLHEP::Hep3Vector & p) const
inline

Definition at line 137 of file LArWheelCalculator.h.

137{ return GetPhiGapAndSide(p).first; }
std::pair< int, int > GetPhiGapAndSide(const CLHEP::Hep3Vector &p) const

◆ GetPhiGapAndSide()

std::pair< int, int > LArWheelCalculator::GetPhiGapAndSide ( const CLHEP::Hep3Vector & p) const

Definition at line 98 of file LArWheelCalculatorGeometry.cxx.

99{
100 return m_fanCalcImpl->GetPhiGapAndSide(p);
101}

◆ GetQuarterWaveLength()

double LArWheelCalculator::GetQuarterWaveLength ( ) const
inline

Definition at line 96 of file LArWheelCalculator.h.

96{ return m_QuarterWaveLength; }

◆ GetStartGapNumber()

int LArWheelCalculator::GetStartGapNumber ( ) const
inline

Definition at line 117 of file LArWheelCalculator.h.

117{ return m_ZeroGapNumber; }

◆ GetStraightStartSection()

double LArWheelCalculator::GetStraightStartSection ( ) const
inline

Definition at line 81 of file LArWheelCalculator.h.

81{ return m_StraightStartSection; }

◆ GetWheelInnerRadius() [1/2]

double LArWheelCalculator::GetWheelInnerRadius ( std::array< double, 2 > & rInner) const

Definition at line 491 of file LArWheelCalculator.cxx.

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}
int r
Definition globals.cxx:22

◆ GetWheelInnerRadius() [2/2]

double LArWheelCalculator::GetWheelInnerRadius ( std::array< double, 3 > & rInner) const

Definition at line 502 of file LArWheelCalculator.cxx.

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}

◆ GetWheelOuterRadius() [1/2]

void LArWheelCalculator::GetWheelOuterRadius ( std::array< double, 2 > & rOuter) const

Definition at line 523 of file LArWheelCalculator.cxx.

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}

◆ GetWheelOuterRadius() [2/2]

void LArWheelCalculator::GetWheelOuterRadius ( std::array< double, 3 > & rOuter) const

Definition at line 533 of file LArWheelCalculator.cxx.

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}

◆ GetWheelRefPoint()

double LArWheelCalculator::GetWheelRefPoint ( ) const
inline

Definition at line 97 of file LArWheelCalculator.h.

97{ return m_zWheelRefPoint; }

◆ GetWheelThickness()

double LArWheelCalculator::GetWheelThickness ( ) const
inline

Definition at line 79 of file LArWheelCalculator.h.

79{ return m_WheelThickness; }

◆ GetZeroFanPhi()

double LArWheelCalculator::GetZeroFanPhi ( ) const
inline

Definition at line 88 of file LArWheelCalculator.h.

88{ return m_ZeroFanPhi; }

◆ inner_wheel_init()

void LArWheelCalculator::inner_wheel_init ( const EMECData & emecData)
private

Definition at line 406 of file LArWheelCalculator.cxx.

407{
408 for(int i = 0; i < 5; ++ 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
419 m_isInner = true;
420}
#define M_PI
static const double default_slant_parametrization[2][5]

◆ LArWheelCalculatorTypeString()

const char * LArWheelCalculator::LArWheelCalculatorTypeString ( LArG4::LArWheelCalculator_t type)
static

Definition at line 65 of file LArWheelCalculator.cxx.

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}
virtual LArG4::LArWheelCalculator_t type() const

◆ module_init()

void LArWheelCalculator::module_init ( )
private

Definition at line 477 of file LArWheelCalculator.cxx.

478{
479 m_isModule = true;
481 m_FirstFan = 0;
483}

◆ NearestPointOnNeutralFibre()

CLHEP::Hep3Vector LArWheelCalculator::NearestPointOnNeutralFibre ( const CLHEP::Hep3Vector & p,
int fan_number ) const

Definition at line 113 of file LArWheelCalculatorGeometry.cxx.

114{
115 return m_distanceCalcImpl->NearestPointOnNeutralFibre(P, fan_number);
116}

◆ NearestPointOnNeutralFibre_asVector()

std::vector< double > LArWheelCalculator::NearestPointOnNeutralFibre_asVector ( const CLHEP::Hep3Vector & p,
int fan_number ) const

Definition at line 118 of file LArWheelCalculatorGeometry.cxx.

119{
120 CLHEP::Hep3Vector np = NearestPointOnNeutralFibre(p, fan_number);
121 return std::vector<double> { np.x(), np.y(), np.z() };
122}
CLHEP::Hep3Vector NearestPointOnNeutralFibre(const CLHEP::Hep3Vector &p, int fan_number) const

◆ operator=()

LArWheelCalculator & LArWheelCalculator::operator= ( const LArWheelCalculator & )
delete

◆ outer_wheel_init()

void LArWheelCalculator::outer_wheel_init ( const EMECData & emecData)
private

Definition at line 422 of file LArWheelCalculator.cxx.

423{
424 for(int i = 0; i < 5; ++ 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
436 m_isInner = false;
437}

◆ parameterized_sin()

void LArWheelCalculator::parameterized_sin ( const double r,
double & sin_a,
double & cos_a ) const
private

Definition at line 21 of file LArWheelCalculatorGeometry.cxx.

22{
23 const double r2 = r*r;
24 const double r3 = r2*r;
25 const double r4 = r2*r2;
26#if LARWC_SINCOS_POLY > 4
27 const double r5 = r4*r;
28#endif
29 sin_a = m_sin_parametrization[0]
34#if LARWC_SINCOS_POLY > 4
36#endif
37 ;
38 cos_a = sqrt(1. - sin_a*sin_a);
39}

◆ parameterized_sincos()

void LArWheelCalculator::parameterized_sincos ( const double r,
double & sin_a,
double & cos_a ) const
private

Definition at line 41 of file LArWheelCalculatorGeometry.cxx.

42{
43 const double r2 = r*r;
44 const double r3 = r2*r;
45 const double r4 = r2*r2;
46#if LARWC_SINCOS_POLY > 4
47 const double r5 = r4*r;
48#endif
49 sin_a = m_sin_parametrization[0]
54#if LARWC_SINCOS_POLY > 4
56#endif
57 ;
58 cos_a = m_cos_parametrization[0]
63#if LARWC_SINCOS_POLY > 4
65#endif
66 ;
67}

◆ parameterized_slant_angle()

double LArWheelCalculator::parameterized_slant_angle ( double r) const

Calculates wave slant angle using parametrization for current wheel for given distance from calorimeter axis.

Definition at line 71 of file LArWheelCalculatorGeometry.cxx.

72{
73 const double r2 = r*r;
74 const double r3 = r2*r;
75 const double r4 = r2*r2;
76 const double result = m_slant_parametrization[0] +
81 return result*deg;
82}
#define deg

◆ PhiGapNumberForWheel()

int LArWheelCalculator::PhiGapNumberForWheel ( int i) const

Definition at line 401 of file LArWheelCalculator.cxx.

402{
403 return m_fanCalcImpl->PhiGapNumberForWheel(i);
404}

◆ SetStartGapNumber()

void LArWheelCalculator::SetStartGapNumber ( int n)
inline

Definition at line 118 of file LArWheelCalculator.h.

◆ type()

virtual LArG4::LArWheelCalculator_t LArWheelCalculator::type ( ) const
inlinevirtual

Definition at line 82 of file LArWheelCalculator.h.

82{ return m_type; }

◆ zShift()

double LArWheelCalculator::zShift ( ) const
inline

Definition at line 86 of file LArWheelCalculator.h.

86{ return m_zShift; }

◆ LArWheelCalculator_Impl::DistanceCalculatorSaggingOff

Definition at line 61 of file LArWheelCalculator.h.

◆ LArWheelCalculator_Impl::DistanceCalculatorSaggingOn

Definition at line 62 of file LArWheelCalculator.h.

◆ LArWheelCalculator_Impl::DistanceToTheNeutralFibre_OfFan

template<typename SaggingType>
friend class LArWheelCalculator_Impl::DistanceToTheNeutralFibre_OfFan
friend

Definition at line 65 of file LArWheelCalculator.h.

◆ LArWheelCalculator_Impl::ModuleFanCalculator

Definition at line 63 of file LArWheelCalculator.h.

◆ LArWheelCalculator_Impl::WheelFanCalculator

template<typename SaggingType>
friend class LArWheelCalculator_Impl::WheelFanCalculator
friend

Definition at line 64 of file LArWheelCalculator.h.

Member Data Documentation

◆ m_ActiveLength

double LArWheelCalculator::m_ActiveLength
private

Definition at line 156 of file LArWheelCalculator.h.

◆ m_AtlasZside

int LArWheelCalculator::m_AtlasZside
private

Definition at line 147 of file LArWheelCalculator.h.

◆ m_coldContraction

double LArWheelCalculator::m_coldContraction
private

Definition at line 198 of file LArWheelCalculator.h.

◆ m_cos_parametrization

std::array<double,LARWC_SINCOS_POLY+1> LArWheelCalculator::m_cos_parametrization
private

Definition at line 153 of file LArWheelCalculator.h.

◆ m_dElecFocaltoWRP

double LArWheelCalculator::m_dElecFocaltoWRP
private

Definition at line 162 of file LArWheelCalculator.h.

◆ m_distanceCalcImpl

LArWheelCalculator_Impl::IDistanceCalculator* LArWheelCalculator::m_distanceCalcImpl
private

Definition at line 236 of file LArWheelCalculator.h.

◆ m_dMechFocaltoWRP

double LArWheelCalculator::m_dMechFocaltoWRP
private

Definition at line 161 of file LArWheelCalculator.h.

◆ m_dWRPtoFrontFace

double LArWheelCalculator::m_dWRPtoFrontFace
private

Definition at line 158 of file LArWheelCalculator.h.

◆ m_electrodeInvContraction

double LArWheelCalculator::m_electrodeInvContraction
private

Definition at line 199 of file LArWheelCalculator.h.

◆ m_electrodeTotalThickness

double LArWheelCalculator::m_electrodeTotalThickness
private

Definition at line 197 of file LArWheelCalculator.h.

◆ m_eta_hi

double LArWheelCalculator::m_eta_hi
private

Definition at line 164 of file LArWheelCalculator.h.

◆ m_eta_low

double LArWheelCalculator::m_eta_low
private

Definition at line 164 of file LArWheelCalculator.h.

◆ m_eta_mid

double LArWheelCalculator::m_eta_mid
private

Definition at line 164 of file LArWheelCalculator.h.

◆ m_fanCalcImpl

LArWheelCalculator_Impl::IFanCalculator* LArWheelCalculator::m_fanCalcImpl
private

Definition at line 237 of file LArWheelCalculator.h.

◆ m_FanFoldRadius

double LArWheelCalculator::m_FanFoldRadius
private

Definition at line 173 of file LArWheelCalculator.h.

◆ m_FanHalfThickness

double LArWheelCalculator::m_FanHalfThickness
private

Definition at line 181 of file LArWheelCalculator.h.

◆ m_FanStepOnPhi

double LArWheelCalculator::m_FanStepOnPhi
private

Definition at line 176 of file LArWheelCalculator.h.

◆ m_FirstFan

int LArWheelCalculator::m_FirstFan
private

Definition at line 183 of file LArWheelCalculator.h.

◆ m_glueThickness

double LArWheelCalculator::m_glueThickness
private

Definition at line 196 of file LArWheelCalculator.h.

◆ m_HalfGapBetweenWheels

double LArWheelCalculator::m_HalfGapBetweenWheels
private

Definition at line 159 of file LArWheelCalculator.h.

◆ m_HalfWaveLength

double LArWheelCalculator::m_HalfWaveLength
private

Definition at line 172 of file LArWheelCalculator.h.

◆ m_HalfWheelThickness

double LArWheelCalculator::m_HalfWheelThickness
private

Definition at line 168 of file LArWheelCalculator.h.

◆ m_isBarrette

bool LArWheelCalculator::m_isBarrette
private

Definition at line 189 of file LArWheelCalculator.h.

◆ m_isBarretteCalib

bool LArWheelCalculator::m_isBarretteCalib
private

Definition at line 190 of file LArWheelCalculator.h.

◆ m_isElectrode

bool LArWheelCalculator::m_isElectrode
private

Definition at line 187 of file LArWheelCalculator.h.

◆ m_isInner

bool LArWheelCalculator::m_isInner
private

Definition at line 188 of file LArWheelCalculator.h.

◆ m_isModule

bool LArWheelCalculator::m_isModule
private

Definition at line 186 of file LArWheelCalculator.h.

◆ m_LastFan

int LArWheelCalculator::m_LastFan
private

Definition at line 184 of file LArWheelCalculator.h.

◆ m_leadThicknessInner

double LArWheelCalculator::m_leadThicknessInner
private

Definition at line 193 of file LArWheelCalculator.h.

◆ m_leadThicknessOuter

double LArWheelCalculator::m_leadThicknessOuter
private

Definition at line 194 of file LArWheelCalculator.h.

◆ m_NumberOfFans

int LArWheelCalculator::m_NumberOfFans
private

Definition at line 179 of file LArWheelCalculator.h.

◆ m_NumberOfHalfWaves

int LArWheelCalculator::m_NumberOfHalfWaves
private

Definition at line 178 of file LArWheelCalculator.h.

◆ m_NumberOfWaves

int LArWheelCalculator::m_NumberOfWaves
private

Definition at line 177 of file LArWheelCalculator.h.

◆ m_phiRotation

bool LArWheelCalculator::m_phiRotation
private

Definition at line 149 of file LArWheelCalculator.h.

◆ m_QuarterWaveLength

double LArWheelCalculator::m_QuarterWaveLength
private

Definition at line 171 of file LArWheelCalculator.h.

◆ m_rOuterCutoff

double LArWheelCalculator::m_rOuterCutoff
private

Definition at line 163 of file LArWheelCalculator.h.

◆ m_sagging_parameter

std::vector<std::vector<double> > LArWheelCalculator::m_sagging_parameter
private

Definition at line 154 of file LArWheelCalculator.h.

◆ m_SaggingOn

bool LArWheelCalculator::m_SaggingOn
private

Definition at line 148 of file LArWheelCalculator.h.

◆ m_sin_parametrization

std::array<double,LARWC_SINCOS_POLY+1> LArWheelCalculator::m_sin_parametrization
private

Definition at line 152 of file LArWheelCalculator.h.

◆ m_slant_parametrization

std::array<double,5> LArWheelCalculator::m_slant_parametrization
private

Definition at line 151 of file LArWheelCalculator.h.

◆ m_slant_use_default

bool LArWheelCalculator::m_slant_use_default
private

Definition at line 150 of file LArWheelCalculator.h.

◆ m_steelThickness

double LArWheelCalculator::m_steelThickness
private

Definition at line 195 of file LArWheelCalculator.h.

◆ m_StraightStartSection

double LArWheelCalculator::m_StraightStartSection
private

Definition at line 157 of file LArWheelCalculator.h.

◆ m_type

LArG4::LArWheelCalculator_t LArWheelCalculator::m_type
private

Definition at line 145 of file LArWheelCalculator.h.

◆ m_WheelThickness

double LArWheelCalculator::m_WheelThickness
private

Definition at line 167 of file LArWheelCalculator.h.

◆ m_ZeroFanPhi

double LArWheelCalculator::m_ZeroFanPhi
private

Definition at line 174 of file LArWheelCalculator.h.

◆ m_ZeroFanPhi_ForDetNeaFan

double LArWheelCalculator::m_ZeroFanPhi_ForDetNeaFan
private

Definition at line 175 of file LArWheelCalculator.h.

◆ m_ZeroGapNumber

int LArWheelCalculator::m_ZeroGapNumber
private

Definition at line 182 of file LArWheelCalculator.h.

◆ m_zShift

double LArWheelCalculator::m_zShift
private

Definition at line 165 of file LArWheelCalculator.h.

◆ m_zWheelBackFace

double LArWheelCalculator::m_zWheelBackFace
private

Definition at line 169 of file LArWheelCalculator.h.

◆ m_zWheelFrontFace

double LArWheelCalculator::m_zWheelFrontFace
private

Definition at line 169 of file LArWheelCalculator.h.

◆ m_zWheelRefPoint

double LArWheelCalculator::m_zWheelRefPoint
private

Definition at line 160 of file LArWheelCalculator.h.


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