ATLAS Offline Software
SCT_FwdRing.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
9 
12 
15 
17 
18 #include "GeoModelRead/ReadGeoModel.h"
19 #include "GeoModelKernel/GeoTube.h"
20 #include "GeoModelKernel/GeoBox.h"
21 #include "GeoModelKernel/GeoLogVol.h"
22 #include "GeoModelKernel/GeoPhysVol.h"
23 #include "GeoModelKernel/GeoNameTag.h"
24 #include "GeoModelKernel/GeoIdentifierTag.h"
25 #include "GeoModelKernel/GeoTransform.h"
26 #include "GeoModelKernel/GeoAlignableTransform.h"
27 #include "GeoModelKernel/GeoMaterial.h"
28 #include "GeoModelKernel/GeoShapeShift.h"
29 #include "GeoModelKernel/GeoDefinitions.h"
30 #include "GaudiKernel/PhysicalConstants.h"
31 
32 #include <sstream>
33 #include <cmath>
34 
35 inline double sqr(double x) {return x*x;}
36 
37 SCT_FwdRing::SCT_FwdRing(const std::string & name,
39  int iWheel,
40  int iRing,
41  int ec,
42  InDetDD::SCT_DetectorManager* detectorManager,
43  SCT_GeometryManager* geometryManager,
44  SCT_MaterialManager* materials,
45  GeoModelIO::ReadGeoModel* sqliteReader,
46  std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
47  std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
48  : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials, sqliteReader, mapFPV, mapAX),
49  m_iWheel(iWheel),
50  m_iRing(iRing),
51  m_endcap(ec),
52  m_module(module)
53 {
54  getParameters();
57 
58 }
59 
60 void
62 {
63 
65  m_numModules = parameters->fwdRingNumModules(m_iRing);
66 
67  if(!m_sqliteReader){
68 
69  const SCT_GeneralParameters * generalParameters = m_geometryManager->generalParameters();
70  m_safety = generalParameters->safety();
71 
72  m_moduleStagger = parameters->fwdRingModuleStagger(m_iRing);
73  m_refStartAngle = parameters->fwdRingPhiOfRefModule(m_iRing);
74  m_refFirstStagger = parameters->fwdRingStaggerOfRefModule(m_iWheel, m_iRing, m_endcap);
75  m_ringSide = parameters->fwdWheelRingSide(m_iWheel, m_iRing, m_endcap);
76  m_stereoSign = parameters->fwdWheelStereoType(m_iWheel);
77  m_ringOffset = parameters->fwdRingDistToDiscCenter(m_iRing);
78  m_discSupportThickness = parameters->fwdDiscSupportThickness();
79  m_discRotated = (parameters->fwdRingUsualRingSide(m_iRing) != m_ringSide);
81  }
82  // Set numerology
84 
85 }
86 
88 {
89 }
90 
91 const GeoLogVol *
93 {
94 
95  // Make a ring. This is made of two half rings. They are identical but as
96  // we need different identifiers they are made seperately.
97  // We will refer to the two halves as inner and outer.
98  // Inner will be the one closest to support when disk is on side of support
99  // furthest from IP. z of Inner < z of Outer.
100  // In later versions need to decide if I should rotate rings that are on IP side of
101  // support by 180 around x (or y) axis.
102 
103  // Make sure we have even number of modules
104  if (m_numModules % 2) std::cout << "SCT_FwdRing: Number of modules in ring must be even." << std::endl;
105 
106 
107  // We define here the module with id = 0 as the nearest module to phi = 0.
108  // It is at most 1/2 a division from 0, ie Between -0.5*divisionAngle to +0.5*divisionAngle.
109  // For old number it was the first module with positive phi.
110 
111  // The parameter refStartAngle is the angle of any module.
112  // refFirstStagger is whether this is an upper (+1) or lower (-1) module.
113  // The stagger and angle of the module with id = 0, is calculated from this.
114 
115  double angle = m_refStartAngle;
116  // If disc is rotated then recalculate the angle.
117  // It assumed the disc is rotated around the Y axis.
118  // TODO: Check this assumption.
120  double divisionAngle = 2*Gaudi::Units::pi / m_numModules;
121 
122  // Now we choose module 0 as the first module with -0.5 * divAngle < phi <= 0.5 * divAngle
123  double moduleCount = angle / divisionAngle;
124  int moduleCountInt = static_cast<int>(floor(moduleCount +0.5 -0.0001)); // The -0.0001 allows slightly positive
125  // in case of rounding errors.
126  m_startAngle = divisionAngle * (moduleCount - moduleCountInt);
127 
128  // Determine numbering for -ve endcap.
129  // This is for a rotation around Y axis.
130  // After rotation we want the first module closest to phi = 0.
131  double angleNegEC = Gaudi::Units::pi - m_startAngle;
132  double moduleCountNegEC = angleNegEC / divisionAngle;
133  m_moduleZero = static_cast<int>(floor(moduleCountNegEC + 0.5 - 0.0001));
134 
135  if(m_sqliteReader) return nullptr;
136 
137  // Determine if it is an upper or lower.
139  if (moduleCountInt % 2) m_firstStagger = -m_refFirstStagger;
140 
142 
143  // Make envelope for ring
144  double moduleClearanceZ = 0.6 * Gaudi::Units::mm; // Arbitrary choice
145  double moduleClearanceR = 0.5 * Gaudi::Units::mm;
146 
147  m_innerRadius = m_module->innerRadius() - 0.5*m_module->stereoAngle()*(0.5*m_module->innerWidth()) - moduleClearanceR;
149  + 0.5*m_module->stereoAngle()*(0.5*m_module->outerWidth()) + moduleClearanceR;
150 
151  // Calculate clearance we have. NB. This is an approximate.
152  m_thicknessOuter = 0.5 * m_module->thickness() + m_moduleStagger + moduleClearanceZ;
154  // We have to at least include 1*m_safety as the moduleservices envelope is increased by this amount.
155  // m_maxModuleServicesBaseToRingCenter is calculated in makeModuleServices()
156 
158 
159  // We want the center in z to be at the module mid plane. So we shift the volume.
160  double envelopeShift = -m_ringSide * (0.5 * m_thickness - m_thicknessOuter);
161 
162  const GeoTube * tmpShape = new GeoTube(m_innerRadius, m_outerRadius, 0.5 * m_thickness);
163  const GeoShape & ringEnvelopeShape = (*tmpShape << GeoTrf::Translate3D(0, 0, envelopeShift));
164  GeoLogVol * ringLog = new GeoLogVol(getName(), &ringEnvelopeShape, m_materials->gasMaterial());
165 
166  return ringLog;
167 }
168 
169 
170 
171 GeoVPhysVol *
173 {
174 
175  // Physical volume for the half ring
176  GeoPhysVol * ring=nullptr;
177  bool negativeEndCap = (id.getBarrelEC() < 0);
178 
179  if(!m_sqliteReader){
180 
181  ring=new GeoPhysVol(m_logVolume);
182 
184 
185  for (int i = 0; i < m_numModules; i++){
186 
187  // As used by the identifier
188  int idNumber = i;
189 
190  // Alternate upper/lower
191  int staggerUpperLower = m_firstStagger;
192  if (i%2) staggerUpperLower = -m_firstStagger;
193 
194  // The negative endcap is rotated and so we have to play some tricks to get the
195  // identifier numbering right.
196 
197  // In order to get the identifiers going in the direction of
198  // increasing phi we have to invert them in the negative endcap.
199 
200  // Although the endcaps differ slightly (some upper/lower swaps) we build them in much the same
201  // way and change just the numbering.
202 
203  // The id number for the detector element
204  int idModule = idNumber;
205 
206  if (negativeEndCap) {
207  // identifiers go in the opposite direction for the negative endcap.
208  // We renumber so that module number "moduleZero" becomes zero.
209  idModule = (m_numModules + m_moduleZero - idNumber) % m_numModules;
210  }
211 
212  // The module is a TRD with length along z-axis.
213  // We need to rotate this so length is along the y-axis
214  // This can be achieved with a 90 deg rotation around Y.
215  // This leaves the depth axis point in the -z direction which
216  // is correct for modules mounted on the -ve side (side closest to the IP, ringSide = -1).
217  // For modules mounted on the opposite side we
218  // rotate 180 around X so that the depth axis is pointing in the same direction as z.
219  // Finally we rotate about z by phi and the 0.5*stereo (ie the u-phi or v-phi orientation)
220 
221  // It is assumed that the module is centered on the physics center (center of sensor)
222 
223  double phi = i * deltaPhi + m_startAngle;
224 
225  GeoTrf::Transform3D rot = GeoTrf::RotateZ3D(phi + 0.5 * m_module->stereoAngle() * m_stereoSign);
226  if (m_ringSide > 0) {
227  rot = rot*GeoTrf::RotateX3D(180*Gaudi::Units::degree);
228  }
229  rot = rot*GeoTrf::RotateY3D(90*Gaudi::Units::degree);
230 
231  double zPos = staggerUpperLower * m_moduleStagger * m_ringSide;
233  xyz = GeoTrf::RotateZ3D(phi)*xyz;
234  GeoTrf::Transform3D modulePos = GeoTrf::Translate3D(xyz.x(),xyz.y(),xyz.z())*rot;
235 
236 
237  // Add the module
238  std::string moduleName = "FwdModuleR" + intToString(m_iRing) + "#" + intToString(idModule);
239  ring->add(new GeoNameTag(moduleName));
240  ring->add(new GeoIdentifierTag(idModule));
241  GeoAlignableTransform * moduleTransform = new GeoAlignableTransform(modulePos);
242  ring->add(moduleTransform);
243  id.setPhiModule(idModule);
244  GeoVPhysVol * modulePV = m_module->build(id);
245  ring->add(modulePV);
246 
247  // Store alignable transform
248  m_detectorManager->addAlignableTransform(1, id.getWaferId(), moduleTransform, modulePV);
249 
250  // Add the moduleServices (contains the cooling block)
251  // In principle this should also be rotated by the stereo angle (although one
252  // would need to be care were the center of rotation is. However this is not
253  // really necessary for the services so we do not bother.
254 
255  double zModuleServices = 0;
256  double rModuleServices = 0;
257  GeoVPhysVol * moduleServices = nullptr;
258  if (staggerUpperLower > 0){ // Upper
259  zModuleServices = m_moduleServicesHiZPos * m_ringSide;
260  rModuleServices = m_moduleServicesHiRPos;
261  moduleServices = m_moduleServicesHi;
262  } else { // Lower
263  zModuleServices = m_moduleServicesLoZPos * m_ringSide;
264  rModuleServices = m_moduleServicesLoRPos;
265  moduleServices = m_moduleServicesLo;
266  }
267 
268 
269  ring->add(new GeoTransform(GeoTrf::RotateZ3D(phi)*GeoTrf::Translate3D(rModuleServices, 0, zModuleServices)));
270  ring->add(moduleServices);
271 
272  }
273  }
274  else{
275 
276 
277  for (int i = 0; i < m_numModules; i++){
278 
279  // As used by the identifier
280  int idNumber = i;
281 
282  // Alternate upper/lower
283  //int staggerUpperLower = m_firstStagger;
284  //if (i%2) staggerUpperLower = -m_firstStagger;
285 
286  // The negative endcap is rotated and so we have to play some tricks to get the
287  // identifier numbering right.
288 
289  // In order to get the identifiers going in the direction of
290  // increasing phi we have to invert them in the negative endcap.
291 
292  // Although the endcaps differ slightly (some upper/lower swaps) we build them in much the same
293  // way and change just the numbering.
294 
295  // The id number for the detector element
296  int idModule = idNumber;
297 
298  if (negativeEndCap) {
299  // identifiers go in the opposite direction for the negative endcap.
300  // We renumber so that module number "moduleZero" becomes zero.
301  idModule = (m_numModules + m_moduleZero - idNumber) % m_numModules;
302  }
303 
304  id.setPhiModule(idModule);
305  m_module->build(id);
306  std::string key="FwdModuleR" + intToString(m_iRing)+"_"+std::to_string(id.getBarrelEC())+"_"+std::to_string(id.getLayerDisk())+"_"+std::to_string(id.getEtaModule())+"_"+std::to_string(id.getPhiModule());
307 
308  // Store alignable transform
309  m_detectorManager->addAlignableTransform(1, id.getWaferId(), (*m_mapAX)[key], (*m_mapFPV)[key]);
310 
311  }
312 
313  }
314 
315  return ring;
316 }
317 
318 
319 
320 
321 // These are offset in z by m_moduleStagger and one is rotated relative to the other by the
322 // 360/m_numModules.
323 
324 
325 
326 void
328 {
329  // Make an envelope to contain the two cooling blocks. Not sure if there much to gain by this
330  // rather than just adding the cooling blocks directly to the ring but it may help if we decide
331  // to add more things to it later. We call it module services.
332 
333  // Cooling blocks for the upper Modules
334  m_coolingBlockHiMain = std::make_unique<SCT_FwdCoolingBlock>("CoolingBlkHiMain",SCT_FwdCoolingBlock::UPPER, SCT_FwdCoolingBlock::MAIN,
336  m_coolingBlockHiSec = std::make_unique<SCT_FwdCoolingBlock>("CoolingBlkHiSec", SCT_FwdCoolingBlock::UPPER, SCT_FwdCoolingBlock::SECONDARY,
338  // Cooling blocks for the lower Modules
339  m_coolingBlockLoMain = std::make_unique<SCT_FwdCoolingBlock>("CoolingBlkLoMain",SCT_FwdCoolingBlock::LOWER, SCT_FwdCoolingBlock::MAIN,
341  m_coolingBlockLoSec = std::make_unique<SCT_FwdCoolingBlock>("CoolingBlkLoSec", SCT_FwdCoolingBlock::LOWER, SCT_FwdCoolingBlock::SECONDARY,
343 
344  double coolingBlkMainR = m_module->mainMountPointRadius();
345  double coolingBlkSecR = m_module->endModuleRadius(); // This is the end of the module. Align block with the end.
346  double moduleServicesHiWidth = std::max(m_coolingBlockHiMain->rphi(), m_coolingBlockHiSec->rphi());
347  double moduleServicesLoWidth = std::max(m_coolingBlockLoMain->rphi(), m_coolingBlockLoSec->rphi());
348  double moduleServicesHiLength = std::abs(coolingBlkMainR - coolingBlkSecR) + 0.5 * m_coolingBlockHiMain->deltaR();
349  double moduleServicesLoLength = std::abs(coolingBlkMainR - coolingBlkSecR) + 0.5 * m_coolingBlockLoMain->deltaR();
350  double moduleServicesHiThickness = std::max(m_coolingBlockHiMain->thickness(), m_coolingBlockHiSec->thickness());
351  double moduleServicesLoThickness = std::max(m_coolingBlockLoMain->thickness(), m_coolingBlockLoSec->thickness());
352 
353  // Radial position of this services volume. The calculation depends on whether the main cooling block is at the outer or inner radius.
354  double moduleOrientation = (coolingBlkMainR > coolingBlkSecR) ? +1 : -1;
355  m_moduleServicesHiRPos = coolingBlkMainR + moduleOrientation * (0.5 * m_coolingBlockHiMain->deltaR() - 0.5 * moduleServicesHiLength);
356  m_moduleServicesLoRPos = coolingBlkMainR + moduleOrientation * (0.5 * m_coolingBlockLoMain->deltaR() - 0.5 * moduleServicesLoLength);
357 
358  // Radial position of the mid point of the secondary cooling block
359  double coolingBlkHiSecRMid = coolingBlkSecR + moduleOrientation * 0.5 * m_coolingBlockHiSec->deltaR();
360  double coolingBlkLoSecRMid = coolingBlkSecR + moduleOrientation * 0.5 * m_coolingBlockLoSec->deltaR();
361 
362  // z position. Set so the surface closest to the disc support is at a fixed distance relative to the disc support or ring center.
363  // The distance between the disc surface and cooling block surface is obtained from the cooling block.
364  // We average the number even though they are all the same.
365  double coolingBlockOffsetHi = 0.5 * (m_coolingBlockHiMain->offsetFromDisc() + m_coolingBlockHiSec->offsetFromDisc());
366  double coolingBlockOffsetLo = 0.5 * (m_coolingBlockLoMain->offsetFromDisc() + m_coolingBlockLoSec->offsetFromDisc());
367  double moduleServicesBaseToRingCenterHi = m_ringOffset - 0.5*m_discSupportThickness - coolingBlockOffsetHi;
368  double moduleServicesBaseToRingCenterLo = m_ringOffset - 0.5*m_discSupportThickness - coolingBlockOffsetLo;
369  m_maxModuleServicesBaseToRingCenter = std::max(moduleServicesBaseToRingCenterHi, moduleServicesBaseToRingCenterLo);
370  m_moduleServicesHiZPos = -(moduleServicesBaseToRingCenterHi - 0.5 * moduleServicesHiThickness);
371  m_moduleServicesLoZPos = -(moduleServicesBaseToRingCenterLo - 0.5 * moduleServicesLoThickness);
372 
373  // For checking clearance. Position of outer surface of module service with respect to the ring center.
374  //
375  m_moduleServicesHiOuterZPos = -(moduleServicesBaseToRingCenterHi - moduleServicesHiThickness);
376  m_moduleServicesLoOuterZPos = -(moduleServicesBaseToRingCenterLo - moduleServicesLoThickness);
377 
378  const GeoBox * moduleServicesHiShape = new GeoBox(0.5*moduleServicesHiLength + m_safety,
379  0.5*moduleServicesHiWidth + m_safety,
380  0.5*moduleServicesHiThickness + m_safety);
381  const GeoBox * moduleServicesLoShape = new GeoBox(0.5*moduleServicesLoLength + m_safety,
382  0.5*moduleServicesLoWidth + m_safety,
383  0.5*moduleServicesLoThickness + m_safety);
384  const GeoLogVol * moduleServicesHiLog = new GeoLogVol("ModuleServicesHi", moduleServicesHiShape, m_materials->gasMaterial());
385  const GeoLogVol * moduleServicesLoLog = new GeoLogVol("ModuleServicesLo", moduleServicesLoShape, m_materials->gasMaterial());
386 
387  m_moduleServicesHi = new GeoPhysVol(moduleServicesHiLog);
388  m_moduleServicesLo = new GeoPhysVol(moduleServicesLoLog);
389 
390  // Add the cooling blocks
391  // Main Upper
392  m_moduleServicesHi->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkMainR - m_moduleServicesHiRPos, 0, 0)));
393  m_moduleServicesHi->add(m_coolingBlockHiMain->getVolume());
394  // Secondary Upper
395  m_moduleServicesHi->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkHiSecRMid - m_moduleServicesHiRPos, 0, 0)));
396  m_moduleServicesHi->add(m_coolingBlockHiSec->getVolume());
397  // Main Lower
398  m_moduleServicesLo->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkMainR - m_moduleServicesLoRPos, 0, 0)));
399  m_moduleServicesLo->add(m_coolingBlockLoMain->getVolume());
400  // Secondary Lower
401  m_moduleServicesLo->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkLoSecRMid - m_moduleServicesLoRPos, 0, 0)));
402  m_moduleServicesLo->add(m_coolingBlockLoSec->getVolume());
403 }
SCT_FwdRing::m_thickness
double m_thickness
Definition: SCT_FwdRing.h:93
SCT_FwdRing::m_iWheel
int m_iWheel
Definition: SCT_FwdRing.h:74
SCT_ComponentFactory::m_geometryManager
SCT_GeometryManager * m_geometryManager
Definition: SCT_ComponentFactory.h:42
SCT_FwdRing::m_module
SCT_FwdModule * m_module
Definition: SCT_FwdRing.h:112
SCT_MaterialManager
Definition: SCT_MaterialManager.h:21
SCT_Identifier
Definition: SCT_Identifier.h:12
SCT_FwdRing::m_moduleServicesLoOuterZPos
double m_moduleServicesLoOuterZPos
Definition: SCT_FwdRing.h:107
SCT_FwdModule.h
SCT_FwdModule::stereoAngle
double stereoAngle() const
Definition: SCT_FwdModule.h:47
InDetDD::SiDetectorManager::numerology
const SiNumerology & numerology() const
Access Numerology.
Definition: SiDetectorManager.h:126
InDetDD::SCT_DetectorManager
Definition: SCT_DetectorManager.h:49
SCT_UniqueComponentFactory::m_mapFPV
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
Definition: SCT_ComponentFactory.h:95
max
#define max(a, b)
Definition: cfImp.cxx:41
SCT_GeneralParameters::safety
double safety() const
Definition: SCT_GeneralParameters.cxx:48
SCT_FwdRing::m_startAngle
double m_startAngle
Definition: SCT_FwdRing.h:96
SCT_FwdRing::m_ringSide
int m_ringSide
Definition: SCT_FwdRing.h:83
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
SCT_FwdRing::m_innerRadius
double m_innerRadius
Definition: SCT_FwdRing.h:91
SCT_FwdRing::makeModuleServices
void makeModuleServices()
Definition: SCT_FwdRing.cxx:327
SCT_UniqueComponentFactory::m_mapAX
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
Definition: SCT_ComponentFactory.h:96
SCT_FwdRing::SCT_FwdRing
SCT_FwdRing(const std::string &name, SCT_FwdModule *module, int iWheel, int iRing, int ec, InDetDD::SCT_DetectorManager *detectorManager, SCT_GeometryManager *geometryManager, SCT_MaterialManager *materials, GeoModelIO::ReadGeoModel *sqliteReader, std::shared_ptr< std::map< std::string, GeoFullPhysVol * >> mapFPV, std::shared_ptr< std::map< std::string, GeoAlignableTransform * >> mapAX)
Definition: SCT_FwdRing.cxx:37
SCT_MaterialManager.h
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
SCT_FwdRing::m_refFirstStagger
int m_refFirstStagger
Definition: SCT_FwdRing.h:86
SCT_FwdRing::m_moduleStagger
double m_moduleStagger
Definition: SCT_FwdRing.h:80
SCT_FwdRing::~SCT_FwdRing
~SCT_FwdRing()
Definition: SCT_FwdRing.cxx:87
SCT_FwdRing::m_coolingBlockLoSec
std::unique_ptr< SCT_FwdCoolingBlock > m_coolingBlockLoSec
Definition: SCT_FwdRing.h:116
SCT_FwdRing::m_identifier
int m_identifier
Definition: SCT_FwdRing.h:82
SCT_FwdModule::build
virtual GeoVPhysVol * build(SCT_Identifier id)
Definition: SCT_FwdModule.cxx:174
xyz
#define xyz
SCT_GeometryManager::forwardParameters
const SCT_ForwardParameters * forwardParameters() const
Definition: SCT_GeometryManager.cxx:98
SCT_FwdRing::m_iRing
int m_iRing
Definition: SCT_FwdRing.h:75
SCT_FwdRing::m_coolingBlockLoMain
std::unique_ptr< SCT_FwdCoolingBlock > m_coolingBlockLoMain
Definition: SCT_FwdRing.h:115
SCT_FwdRing::m_discSupportThickness
double m_discSupportThickness
Definition: SCT_FwdRing.h:88
SCT_FwdCoolingBlock::LOWER
@ LOWER
Definition: SCT_FwdCoolingBlock.h:28
SCT_FwdModule::innerWidth
double innerWidth() const
Definition: SCT_FwdModule.h:53
SCT_ComponentFactory::m_detectorManager
InDetDD::SCT_DetectorManager * m_detectorManager
Definition: SCT_ComponentFactory.h:41
x
#define x
SCT_FwdRing::m_moduleZero
int m_moduleZero
Definition: SCT_FwdRing.h:99
SCT_FwdRing::m_coolingBlockHiMain
std::unique_ptr< SCT_FwdCoolingBlock > m_coolingBlockHiMain
Definition: SCT_FwdRing.h:113
SCT_FwdRing::m_refStartAngle
double m_refStartAngle
Definition: SCT_FwdRing.h:85
SCT_GeometryManager::generalParameters
const SCT_GeneralParameters * generalParameters() const
Definition: SCT_GeometryManager.cxx:105
pi
#define pi
Definition: TileMuonFitter.cxx:65
SCT_FwdRing::m_moduleServicesLoRPos
double m_moduleServicesLoRPos
Definition: SCT_FwdRing.h:102
SCT_GeneralParameters.h
SCT_FwdModule::endModuleRadius
double endModuleRadius() const
Definition: SCT_FwdModule.h:65
python.PyAthena.module
module
Definition: PyAthena.py:134
SCT_FwdCoolingBlock::SECONDARY
@ SECONDARY
Definition: SCT_FwdCoolingBlock.h:30
SCT_FwdModule::outerWidth
double outerWidth() const
Definition: SCT_FwdModule.h:52
SCT_FwdRing::m_ringOffset
double m_ringOffset
Definition: SCT_FwdRing.h:87
lumiFormat.i
int i
Definition: lumiFormat.py:92
SCT_FwdModule::thickness
double thickness() const
Definition: SCT_FwdModule.h:54
SCT_MaterialManager::gasMaterial
const GeoMaterial * gasMaterial() const
Definition: SCT_MaterialManager.cxx:80
SCT_FwdRing::m_maxModuleServicesBaseToRingCenter
double m_maxModuleServicesBaseToRingCenter
Definition: SCT_FwdRing.h:109
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:73
sqr
double sqr(double x)
Definition: SCT_FwdRing.cxx:35
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
SCT_FwdRing.h
SCT_FwdRing::m_numModules
int m_numModules
Definition: SCT_FwdRing.h:79
SCT_FwdRing::m_moduleServicesHiZPos
double m_moduleServicesHiZPos
Definition: SCT_FwdRing.h:103
SCT_FwdModule
Definition: SCT_FwdModule.h:27
SCT_ComponentFactory::intToString
std::string intToString(int i) const
Definition: SCT_ComponentFactory.cxx:29
SCT_FwdRing::m_moduleServicesHi
GeoPhysVol * m_moduleServicesHi
Definition: SCT_FwdRing.h:118
SCT_GeneralParameters
Definition: SCT_GeneralParameters.h:16
SCT_FwdRing::m_outerRadius
double m_outerRadius
Definition: SCT_FwdRing.h:92
SCT_FwdCoolingBlock::MAIN
@ MAIN
Definition: SCT_FwdCoolingBlock.h:29
SCT_FwdCoolingBlock::UPPER
@ UPPER
Definition: SCT_FwdCoolingBlock.h:27
SCT_FwdRing::m_stereoSign
int m_stereoSign
Definition: SCT_FwdRing.h:84
SCT_FwdRing::getParameters
void getParameters()
Definition: SCT_FwdRing.cxx:61
InDetDD::SiNumerology::setNumPhiModulesForDiskRing
void setNumPhiModulesForDiskRing(int disk, int ring, int nPhiModules)
Definition: SiNumerology.cxx:55
SCT_ComponentFactory::m_materials
SCT_MaterialManager * m_materials
Definition: SCT_ComponentFactory.h:43
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
SCT_FwdModule::innerRadius
double innerRadius() const
Definition: SCT_FwdModule.h:56
SCT_FwdRing::preBuild
virtual const GeoLogVol * preBuild()
Definition: SCT_FwdRing.cxx:92
SCT_FwdRing::m_moduleServicesHiOuterZPos
double m_moduleServicesHiOuterZPos
Definition: SCT_FwdRing.h:106
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
SCT_FwdRing::m_firstStagger
int m_firstStagger
Definition: SCT_FwdRing.h:97
SCT_FwdModule::outerRadius
double outerRadius() const
Definition: SCT_FwdModule.h:57
SCT_UniqueComponentFactory::m_logVolume
const GeoLogVol * m_logVolume
Definition: SCT_ComponentFactory.h:90
SCT_FwdRing::m_moduleServicesHiRPos
double m_moduleServicesHiRPos
Definition: SCT_FwdRing.h:101
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
SCT_UniqueComponentFactory
Definition: SCT_ComponentFactory.h:76
InDetDD::SCT_DetectorManager::addAlignableTransform
virtual void addAlignableTransform(int level, const Identifier &id, GeoAlignableTransform *xf, const GeoVFullPhysVol *child)
Add alignable transforms. No access to these, they will be changed by manager:
Definition: SCT_DetectorManager.cxx:264
SCT_FwdModule::mainMountPointRadius
double mainMountPointRadius() const
Definition: SCT_FwdModule.h:63
SCT_FwdRing::m_safety
double m_safety
Definition: SCT_FwdRing.h:81
SCT_FwdRing::m_discRotated
bool m_discRotated
Definition: SCT_FwdRing.h:98
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
SCT_FwdModule::sensorCenterRadius
double sensorCenterRadius() const
Definition: SCT_FwdModule.h:60
SCT_FwdRing::m_endcap
int m_endcap
Definition: SCT_FwdRing.h:76
SCT_ForwardParameters.h
SCT_DetectorManager.h
SCT_UniqueComponentFactory::m_sqliteReader
GeoModelIO::ReadGeoModel * m_sqliteReader
Definition: SCT_ComponentFactory.h:91
SCT_FwdRing::m_moduleServicesLo
GeoPhysVol * m_moduleServicesLo
Definition: SCT_FwdRing.h:119
SCT_ComponentFactory::getName
const std::string & getName() const
Definition: SCT_ComponentFactory.h:35
SCT_FwdRing::m_thicknessOuter
double m_thicknessOuter
Definition: SCT_FwdRing.h:95
SCT_FwdRing::m_coolingBlockHiSec
std::unique_ptr< SCT_FwdCoolingBlock > m_coolingBlockHiSec
Definition: SCT_FwdRing.h:114
SCT_FwdRing::build
virtual GeoVPhysVol * build(SCT_Identifier id)
Definition: SCT_FwdRing.cxx:172
SCT_GeometryManager.h
python.SystemOfUnits.degree
tuple degree
Definition: SystemOfUnits.py:106
SCT_GeometryManager
Definition: SCT_GeometryManager.h:25
SCT_FwdRing::m_moduleServicesLoZPos
double m_moduleServicesLoZPos
Definition: SCT_FwdRing.h:104
SCT_ForwardParameters
Definition: SCT_ForwardParameters.h:16
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
SCT_FwdRing::m_thicknessInner
double m_thicknessInner
Definition: SCT_FwdRing.h:94
SCT_FwdCoolingBlock.h