ATLAS Offline Software
SCT_FwdWheel.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8 
12 
24 
26 
29 
30 #include "GeoModelRead/ReadGeoModel.h"
31 #include "GeoModelKernel/GeoTube.h"
32 #include "GeoModelKernel/GeoLogVol.h"
33 #include "GeoModelKernel/GeoPhysVol.h"
34 #include "GeoModelKernel/GeoFullPhysVol.h"
35 #include "GeoModelKernel/GeoNameTag.h"
36 #include "GeoModelKernel/GeoIdentifierTag.h"
37 #include "GeoModelKernel/GeoTransform.h"
38 #include "GeoModelKernel/GeoAlignableTransform.h"
39 #include "GeoModelKernel/GeoMaterial.h"
40 #include "GeoModelKernel/GeoShapeShift.h"
41 #include "GeoModelKernel/GeoDefinitions.h"
42 #include "GaudiKernel/SystemOfUnits.h"
43 
44 #include <sstream>
45 #include <cmath>
46 
47 #include <iostream>
48 #include <utility>
49 
50 inline double sqr(double x) {return x*x;}
51 
52 SCT_FwdWheel::SCT_FwdWheel(const std::string & name,
53  int iWheel,
54  const std::vector<SCT_FwdModule *> & modules,
55  int ec,
56  InDetDD::SCT_DetectorManager* detectorManager,
57  SCT_GeometryManager* geometryManager,
58  SCT_MaterialManager* materials,
59  GeoModelIO::ReadGeoModel* sqliteReader,
60  std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
61  std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
62  : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials, sqliteReader, std::move(mapFPV), std::move(mapAX)),
63  m_iWheel(iWheel),
64  m_endcap(ec),
65  m_modules(modules)
66 {
67  getParameters();
69 
70 }
71 
73 {
74 }
75 
76 void
78 {
80 
81  m_zPosition = parameters->fwdWheelZPosition(m_iWheel);
82  m_numRings = parameters->fwdWheelNumRings(m_iWheel);
83  for (int iRing = 0; iRing < m_numRings; iRing++) {
84  m_ringType.push_back(parameters->fwdWheelModuleType(m_iWheel,iRing, m_endcap));
85  }
86 
87  if(!m_sqliteReader){
88 
89  m_numPatchPanelLocs = parameters->fwdNumPatchPanelLocs();
90  m_numPatchPanelTypes = parameters->fwdNumPatchPanelTypes();
91 
92  for (int iPPLoc = 0; iPPLoc < m_numPatchPanelLocs; iPPLoc++) {
93  m_patchPanelType.push_back(parameters->fwdPatchPanelType(iPPLoc));
94  m_patchPanelLocAngle.push_back(parameters->fwdPatchPanelLocAngle(iPPLoc));
95  m_patchPanelRepeatQuadrant.push_back(parameters->fwdPatchPanelRepeatQuadrant(iPPLoc));
96  }
97 
98  // FIXME: Check and put these in DB or calculate them
99  // We have a maximum width of 80.2. Make it 75 for some clearance.
100  //m_innerRadius = 267 * Gaudi::Units::mm;
101  //m_outerRadius = 590 * Gaudi::Units::mm;
102  //m_thickness = 100 * Gaudi::Units::mm;
103  // These get swapped later if the wheel is rotated.
106 
107  m_numFSITypes = parameters->fwdFSINumGeomTypes();
108  m_fsiVector = &(parameters->fsiVector(m_iWheel));
109 
110  m_numWheels = parameters->fwdNumWheels();
111 
112  m_optoHarnessPresent = parameters->fwdOptoHarnessPresent();
113  m_pPConnectorPresent = parameters->fwdPPConnectorPresent();
114  m_pPCoolingPresent = parameters->fwdPPCoolingPresent();
115 
116  m_discFixationPresent = parameters->fwdDiscFixationPresent();
118  for (int iLoc = 0; iLoc < parameters->fwdNumCylinderServiceLocs(); iLoc++) {
119  // Disc fixations are at same locations at as N2 pipes
120  if(parameters->fwdCylinderServiceLocName(iLoc) == "NPipe") {
121  m_discFixationLocAngle.push_back(parameters->fwdCylinderServiceLocAngle(iLoc));
122  }
123  }
124  }
125 
127  }
128 
129  // Set numerology
131 
132 }
133 
134 const GeoLogVol *
136 {
137  // The rings
138  for (int iRing = 0; iRing < m_numRings; iRing++){
139  std::string ringName = "Ring"+intToString(iRing)+"For"+getName();
140  int ringType = m_ringType[iRing];
141  m_rings.push_back(std::make_unique<SCT_FwdRing>(ringName, m_modules[ringType], m_iWheel, iRing, m_endcap,m_detectorManager, m_geometryManager, m_materials, m_sqliteReader, m_mapFPV,m_mapAX));
142  }
143 
144  if(m_sqliteReader) return nullptr;
145 
146  // Calculate total number of modules
147  m_totalModules = 0;
148  for (int iRing = 0; iRing < m_numRings; iRing++){
149  m_totalModules += m_rings[iRing]->numModules();
150  }
151 
152  // Create disc support.
153  m_discSupport = std::make_unique<SCT_FwdDiscSupport>("DiscSupport"+intToString(m_iWheel), m_iWheel,
155 
156 
157  // Create Patch Panel
158  for (int iPPType = 0; iPPType < m_numPatchPanelTypes; iPPType++) {
159  m_patchPanel.push_back(std::make_unique<SCT_FwdPatchPanel>("PatchPanel"+intToString(iPPType), iPPType,
161  }
162 
163  // Create Patch Pannel Connector and Cooling, and disc Fixations
164  if (m_pPConnectorPresent) {
165  m_pPConnector = std::make_unique<SCT_FwdPPConnector>("PPConnector",
167  }
168  if (m_pPCoolingPresent) {
169  m_pPCooling = std::make_unique<SCT_FwdPPCooling>("PPCooling",
171  }
172  if (m_discFixationPresent) {
173  m_discFixation = std::make_unique<SCT_FwdDiscFixation>("DiscFixation",
175  }
176 
177  // Create the FSI types
178  m_fsiType.resize(m_numFSITypes);
179  for (unsigned int iFSI = 0; iFSI < m_fsiVector->size(); iFSI++) {
180  int type = (*m_fsiVector)[iFSI]->simType();
181  if (!m_fsiType[type]) {
182  m_fsiType[type] = std::make_unique<SCT_FwdFSI>("FSI"+intToString(type), type,
184  }
185  }
186 
187  // Calculate the extent of the envelope
188  // Use support disc as starting values.
189  double maxOuterRadius = m_discSupport->outerRadius();
190  double minInnerRadius = m_discSupport->innerRadius();
191  double maxModuleThickness = 0.5 * m_discSupport->thickness();
192 
193 
194  // Extend min max accounting for rings
195  for (int iRing = 0; iRing < m_numRings; iRing++){
196  maxOuterRadius = std::max(m_rings[iRing]->outerRadius(), maxOuterRadius);
197  minInnerRadius = std::min(m_rings[iRing]->innerRadius(), minInnerRadius);
198  maxModuleThickness = std::max(maxModuleThickness, m_rings[iRing]->thicknessOuter() + m_rings[iRing]->ringOffset());
199  }
200  m_ringMaxRadius = maxOuterRadius;
201 
202  // If first or last wheel there is nothing protruding beyond the rings so we reduce the
203  // envelope size. Comes to about 20 mm. Note the front becomes the back later for the last wheel.
204  if ((m_iWheel == 0) || (m_iWheel == m_numWheels - 1)) {
205  m_thicknessFront = maxModuleThickness + 1*Gaudi::Units::mm; // We give plenty of safety as we have the room.
206  // But now modified by disc fixations
209  }
210  }
211 
212  // The outer radius is now defined by the patch panel cooling if present
213  if(m_pPCoolingPresent) {
214  double ppCoolingOuterRadius = sqrt(sqr(m_patchPanel[2]->outerRadius() + m_pPCooling->deltaR()) + sqr(m_pPCooling->rphi())) + m_safety;
215  maxOuterRadius = std::max(ppCoolingOuterRadius, maxOuterRadius);
216  }
217 
218  // Or maybe by the disc fixations...
220  double discFixationOuterRadius = sqrt(sqr(m_ringMaxRadius + m_discFixation->thickness() + m_safety) + sqr(m_discFixation->radius())) + m_safety;
221  maxOuterRadius = std::max(discFixationOuterRadius, maxOuterRadius);
222  }
223 
224  m_rotateWheel = +1; // +1 normal, -1 rotate (ie last wheel)
225  if (m_numRings > 0) { // Should always be true
226  m_rotateWheel = (m_rings[0]->discRotated()) ? -1 : +1 ;
227  }
228 
229  // swap thickness front/back (this only happens for the last wheel).
230  if (m_rotateWheel < 0) {
231  double tmp = m_thicknessFront;
234  }
235 
237 
238  m_innerRadius = minInnerRadius - m_safety;
239  m_outerRadius = maxOuterRadius + m_safety;
240 
241 
242  // TODO. Have to account for FSI and patch panels
243  //m_thickness = 2. * maxRingOffset + maxThickness;
244  // m_thickness = 100 * Gaudi::Units::mm;
245 
246  // Make envelope for the wheel
247  double envelopeShift = 0.5*(m_thicknessBack - m_thicknessFront);
248  const GeoTube * tmpShape = new GeoTube(m_innerRadius, m_outerRadius, 0.5 * m_thickness);
249  const GeoShape & fwdWheelEnvelopeShape = *tmpShape << GeoTrf::Translate3D(0, 0, envelopeShift);
250 
251  const GeoLogVol * fwdWheelLog =
252  new GeoLogVol(getName(), &fwdWheelEnvelopeShape, m_materials->gasMaterial());
253 
254 
255  return fwdWheelLog;
256 
257 }
258 
259 GeoVPhysVol *
261 {
262 
263  if(m_sqliteReader) {
264 
265  for (int iRing = 0; iRing < m_numRings; iRing++){
266 
267  SCT_FwdRing * ring = m_rings[iRing].get();
268  id.setEtaModule(ring->identifier());
269  ring->build(id);
270 
271  }
272  return nullptr;
273 
274  }
275 
276  GeoFullPhysVol * wheel= new GeoFullPhysVol(m_logVolume);
277 
278 
279  // Add discsupport. Its centered so no need for a transform
280  wheel->add(m_discSupport->getVolume());
281 
282  //
283  // Loop over rings and put in rings, cooling and power tapes.
284  //
285  double powerTapeZPlusMax = 0.5 * m_discSupport->thickness();
286  double powerTapeZMinusMax = -0.5 * m_discSupport->thickness();
287 
288  double maxZOfRingsFront = 0;
289 
290  for (int iRing = 0; iRing < m_numRings; iRing++){
291 
292  SCT_FwdRing * ring = m_rings[iRing].get();
293 
294  // Position ring
295  double ringZpos = ring->ringSide() * ring->ringOffset();
296  double ringOuterZ = ring->ringOffset() + ring->thicknessOuter();
297  maxZOfRingsFront = std::max(maxZOfRingsFront, ringOuterZ);
298 
299  std::string ringNameTag = "Ring#" + intToString(ring->identifier());
300  wheel->add(new GeoNameTag(ringNameTag));
301  wheel->add(new GeoIdentifierTag(ring->identifier()));
302  wheel->add(new GeoTransform(GeoTrf::Translate3D(0, 0, ringZpos)));
303  id.setEtaModule(ring->identifier());
304  wheel->add(ring->build(id));
305 
306  // Position cooling
307  // Get a pointer to the cooling ring.
308  SCT_FwdRingCooling cooling("RingCoolingW"+intToString(m_iWheel)+"R"+intToString(iRing),
310  double coolingZpos = ring->ringSide() * (0.5*(m_discSupport->thickness() + cooling.thickness()));
311  wheel->add(new GeoTransform(GeoTrf::TranslateZ3D(coolingZpos)));
312  wheel->add(cooling.getVolume());
313 
314  // Power Tapes
315  // Get a pointer to the power tape
316  SCT_FwdDiscPowerTape powerTape("PowerTapeW"+intToString(m_iWheel)+
317  "R"+intToString(iRing), iRing,
319 
320  double powerTapeZpos = ring->ringSide() * (0.5*(m_discSupport->thickness() + powerTape.thickness()) +
321  cooling.thickness());
322  // Make sure we don't overlap with powertape from outer rings
323  // We store max extent of power tape for each side (Plus, Minus)
324  // This is really only ever an issue for ring2 but we keep it general.
325  if (ring->ringSide() > 0) {
326  double powerTapeZstart = powerTapeZpos - 0.5 * powerTape.thickness();
327  if (powerTapeZstart < powerTapeZPlusMax) {
328  powerTapeZpos = powerTapeZPlusMax + 0.5 * powerTape.thickness();
329  }
330  powerTapeZPlusMax = powerTapeZpos + 0.5 * powerTape.thickness();
331  } else {
332  double powerTapeZstart = powerTapeZpos + 0.5 * powerTape.thickness();
333  if (powerTapeZstart > powerTapeZMinusMax) {
334  powerTapeZpos = powerTapeZMinusMax - 0.5 * powerTape.thickness();
335  }
336  powerTapeZMinusMax = powerTapeZpos - 0.5 * powerTape.thickness();
337  }
338  if ((std::abs(powerTapeZpos)+0.5*powerTape.thickness()) > (std::abs(ringZpos) - 0.5*ring->thicknessInner())) {
339  std::cout << "ERROR: Power tapes clash with modules!!!" << std::endl;
340  }
341  wheel->add(new GeoTransform(GeoTrf::TranslateZ3D(powerTapeZpos)));
342  wheel->add(powerTape.getVolume());
343 
344 
345  } // End Ring loop
346 
347 
348  //
349  // Put in the patch Panel
350  //
351  // Put it on opposide side of outer ring (ring 0).
352  int patchPanelSide = m_rotateWheel;
353 
354 
355  // Get outer position of power tape on that side.
356  // In case there are no rings on that side (and hence no powertapes) this will be 1/2 disc support thickness
357  double powerTapeZMax = 0;
358  if (patchPanelSide > 0) {
359  powerTapeZMax = powerTapeZPlusMax;
360  } else {
361  powerTapeZMax = -powerTapeZMinusMax;
362  }
363 
364 
365 
366  // Loop over patch panel locations
367  for (int iPPLoc = 0; iPPLoc < m_numPatchPanelLocs ; iPPLoc++) {
368 
369  // The patchpanels generally repeat in the four quadrants.
370  int numRepeat = 1;
371  if (m_patchPanelRepeatQuadrant[iPPLoc]) numRepeat = 4;
372  int ppType = m_patchPanelType[iPPLoc];
373  if (ppType >= m_numPatchPanelTypes) std::cout << "ERROR: Patch Panel type number out of range!" << std::endl;
374  for (int iRepeat = 0; iRepeat < numRepeat; iRepeat++) {
375 
376  // Calculate the location.
377  double patchPanelAngle = m_patchPanelLocAngle[iPPLoc] + iRepeat * 90*Gaudi::Units::degree;
378  double patchPanelZpos = patchPanelSide * (powerTapeZMax + 0.5*m_patchPanel[ppType]->thickness() + m_safety);
379  double patchPanelR = m_patchPanel[ppType]->midRadius();
380 
381  // Check for overlap with middle ring.
382  if (m_numRings >= 2 && (m_patchPanel[ppType]->innerRadius() <= m_rings[1]->outerRadius())) {
383  std::cout << "ERROR: Patch Panel clashes with middle ring" << std::endl;
384  std::cout << " PatchPanel inner radius: " << m_patchPanel[ppType]->innerRadius() << std::endl;
385  std::cout << " Ring outer radius: " << m_rings[1]->outerRadius() << std::endl;
386  }
387 
388  // Add it to the wheel
389  wheel->add(new GeoTransform(GeoTrf::RotateZ3D(patchPanelAngle)*GeoTrf::TranslateX3D(patchPanelR)*GeoTrf::TranslateZ3D(patchPanelZpos)));
390  wheel->add(m_patchPanel[ppType]->getVolume());
391 
392  // Make and add the connector for PPF0e (type 0)
393  // Positioned immediately outside PatchPanel at same angle
394  if(ppType == 0 && m_pPConnectorPresent) {
395  double ppConnectorZpos = patchPanelSide * (powerTapeZMax + 0.5*m_pPConnector->thickness() + m_safety);
396  double ppConnectorR = m_patchPanel[ppType]->outerRadius() + 0.5*m_pPConnector->deltaR() + m_safety;
397  // Check is within wheel
398  if (ppConnectorR + 0.5*m_pPConnector->deltaR() >= m_outerRadius) {
399  std::cout << "ERROR: Patch Panel Connector clashes outside wheel" << std::endl;
400  std::cout << " PatchPanel Connector outer radius: " << ppConnectorR + 0.5*m_pPConnector->deltaR() << std::endl;
401  std::cout << " Wheel outer radius: " << m_outerRadius << std::endl;
402  }
403  // Add it to the wheel
404  wheel->add(new GeoTransform(GeoTrf::RotateZ3D(patchPanelAngle)*GeoTrf::TranslateX3D(ppConnectorR)*GeoTrf::TranslateZ3D(ppConnectorZpos)));
405  wheel->add(m_pPConnector->getVolume());
406  }
407 
408  // Make and add the cooling for PPF0c (type 2)
409  // Positioned immediately outside PatchPanel at same angle
410  if(ppType == 2 && m_pPCoolingPresent) {
411  double ppCoolingZpos = patchPanelSide * (powerTapeZMax + 0.5*m_pPCooling->thickness() + m_safety);
412  double ppCoolingR = m_patchPanel[ppType]->outerRadius() + 0.5*m_pPCooling->deltaR() + m_safety;
413  // Check is within wheel
414  if (ppCoolingR + 0.5*m_pPCooling->deltaR() >= m_outerRadius) {
415  std::cout << "ERROR: Patch Panel Cooling clashes outside wheel" << std::endl;
416  std::cout << " PatchPanel Cooling outer radius: " << ppCoolingR + 0.5*m_pPCooling->deltaR() << std::endl;
417  std::cout << " Wheel outer radius: " << m_outerRadius << std::endl;
418  }
419  // Add it to the wheel
420  wheel->add(new GeoTransform(GeoTrf::RotateZ3D(patchPanelAngle)*GeoTrf::TranslateX3D(ppCoolingR)*GeoTrf::TranslateZ3D(ppCoolingZpos)));
421  wheel->add(m_pPCooling->getVolume());
422  }
423  }
424 
425  } // end loop over patch panel locations
426 
427 
428  // Add the optoharness - type depends on number of rings
429  // The optoharness is always on the back side (except if the wheel is rotates)
430  double optoHarnessZMax = 0.5 * m_discSupport->thickness();
431  if (m_optoHarnessPresent) {
432  std::string optoharnessName = "OptoHarnessO";
433  if(m_numRings > 1) {optoharnessName+="M";}
434  if(m_numRings > 2) {optoharnessName+="I";}
435  SCT_FwdOptoHarness optoharness(optoharnessName+"W"+intToString(m_iWheel), m_numRings,
437  double optoHarnessZpos = 0.5*m_rotateWheel*(m_discSupport->thickness() + optoharness.thickness());
438  wheel->add(new GeoTransform(GeoTrf::TranslateZ3D(optoHarnessZpos)));
439  wheel->add(optoharness.getVolume());
440  optoHarnessZMax = optoHarnessZpos + 0.5*optoharness.thickness();
441  }
442 
443  // Loop over FSI locations.
444  for (unsigned int iFSI = 0; iFSI < m_fsiVector->size(); iFSI++) {
445  int type = (*m_fsiVector)[iFSI]->simType();
446  double fsiRadius = (*m_fsiVector)[iFSI]->location().radius();
447  double fsiPhi = (*m_fsiVector)[iFSI]->location().phi();
448  int fsiUsualSide = (*m_fsiVector)[iFSI]->location().side();
449  int fsiSide = fsiUsualSide * m_rotateWheel;
450  double fsiZpos = fsiSide * m_fsiType[type]->zOffset();
451 
452  // Check for clashes on front side
453  if (fsiUsualSide < 0) {
454  double zMin = std::abs(fsiZpos) - 0.5*m_fsiType[type]->thickness();
455  if (maxZOfRingsFront > zMin) {
456  std::cout << "WARNING: FSI probably clashes with ring" << std::endl;
457  std::cout << " maxZOfRingsFront = " << maxZOfRingsFront << std::endl;
458  std::cout << " fsiZMin = " << zMin << std::endl;
459  }
460  } else { // ... and backside
461  // Check radius of fsi.
462  // If outer radii check for overlap with powertape
463  // If inner radii check for overlap with optoharness (disksupport if no optoharness)
464  double diskMidRadius = 0.5*(m_outerRadius + m_innerRadius);
465  double servicesZMax = (fsiRadius > diskMidRadius) ? powerTapeZMax : optoHarnessZMax;
466  double zMin = std::abs(fsiZpos) - 0.5*m_fsiType[type]->thickness();
467  if (servicesZMax > zMin) {
468  std::cout << "WARNING: FSI probably clashes with disc services" << std::endl;
469  std::cout << " servicesZMax = " << servicesZMax << std::endl;
470  std::cout << " fsiZMin = " << zMin << std::endl;
471  std::cout << " fsiRadius = " << fsiRadius << std::endl;
472  }
473  }
474 
475  wheel->add(new GeoTransform(GeoTrf::RotateZ3D(fsiPhi)*GeoTrf::TranslateX3D(fsiRadius)*GeoTrf::TranslateZ3D(fsiZpos)));
476  wheel->add(m_fsiType[type]->getVolume());
477 
478 
479  } // end loop over FSI.
480 
481  // Loop over disc fixation locations
483  for (unsigned int iLoc = 0; iLoc < m_discFixationLocAngle.size() ; iLoc++) {
484  // The disc fixations repeat in the four quadrants.
485  for (int iRepeat = 0; iRepeat < 4; iRepeat++) {
486  // Calculate the location.
487  double discFixationAngle = m_discFixationLocAngle[iLoc] + iRepeat * 90*Gaudi::Units::degree;
488  double discFixationR = m_ringMaxRadius + 0.5*m_discFixation->thickness() + m_safety;
489  // Check is within wheel
490  if (discFixationR + 0.5*m_discFixation->thickness() >= m_outerRadius) {
491  std::cout << "ERROR: Disc Fixation outside wheel" << std::endl;
492  std::cout << "Disc fixation outer radius: " << discFixationR + 0.5*m_discFixation->thickness() << std::endl;
493  std::cout << " Wheel outer radius: " << m_outerRadius << std::endl;
494  }
495  // Add it to the wheel
496  wheel->add(new GeoTransform(GeoTrf::RotateY3D(90.*Gaudi::Units::degree)*GeoTrf::RotateX3D(discFixationAngle)*GeoTrf::TranslateZ3D(discFixationR)));
497  wheel->add(m_discFixation->getVolume());
498  }
499  }
500  }
501 
502  // Extra Material
504  xMat.add(wheel, "SCTDisc");
505  xMat.add(wheel, "SCTDisc"+intToString(m_iWheel));
506  if (m_endcap > 0) {
507  xMat.add(wheel, "SCTDiscA");
508  xMat.add(wheel, "SCTDiscA"+intToString(m_iWheel));
509  } else {
510  xMat.add(wheel, "SCTDiscC");
511  xMat.add(wheel, "SCTDiscC"+intToString(m_iWheel));
512  }
513 
514 
515 
516  return wheel;
517 
518 }
519 
InDetDD::SiNumerology::setNumRingsForDisk
void setNumRingsForDisk(int disk, int nRings)
Definition: SiNumerology.cxx:48
SCT_ComponentFactory::m_geometryManager
SCT_GeometryManager * m_geometryManager
Definition: SCT_ComponentFactory.h:42
SCT_MaterialManager
Definition: SCT_MaterialManager.h:21
SCT_FwdWheel::m_outerRadius
double m_outerRadius
Definition: SCT_FwdWheel.h:90
SCT_Identifier
Definition: SCT_Identifier.h:12
SCT_FwdWheel::m_numRings
int m_numRings
Definition: SCT_FwdWheel.h:72
SCT_FwdDiscPowerTape
Definition: SCT_FwdDiscPowerTape.h:13
SCT_FwdWheel::m_discFixationLocAngle
std::vector< double > m_discFixationLocAngle
Definition: SCT_FwdWheel.h:86
SCT_FwdRingCooling::thickness
double thickness() const
Definition: SCT_FwdRingCooling.h:27
SCT_FwdModule.h
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
SCT_GeneralParameters::safety
double safety() const
Definition: SCT_GeneralParameters.cxx:48
SCT_FwdRing
Definition: SCT_FwdRing.h:22
SCT_FwdWheel::m_thickness
double m_thickness
Definition: SCT_FwdWheel.h:91
SCT_FwdWheel::m_pPCooling
std::unique_ptr< SCT_FwdPPCooling > m_pPCooling
Definition: SCT_FwdWheel.h:105
SCT_FwdWheel::m_zPosition
double m_zPosition
Definition: SCT_FwdWheel.h:73
SCT_FwdWheel::m_fsiVector
const std::vector< const FSIDetails * > * m_fsiVector
Definition: SCT_FwdWheel.h:112
SCT_FwdOptoHarness.h
SCT_FwdWheel::build
virtual GeoVPhysVol * build(SCT_Identifier id)
Definition: SCT_FwdWheel.cxx:260
SCT_FSIHelper.h
SCT_UniqueComponentFactory::m_mapAX
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
Definition: SCT_ComponentFactory.h:96
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
SCT_MaterialManager.h
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
SCT_FwdRing::thicknessInner
double thicknessInner() const
Definition: SCT_FwdRing.h:53
SCT_FwdDiscPowerTape.h
SCT_FwdWheel::m_fsiType
std::vector< std::unique_ptr< SCT_FwdFSI > > m_fsiType
Definition: SCT_FwdWheel.h:106
SCT_GeometryManager::forwardParameters
const SCT_ForwardParameters * forwardParameters() const
Definition: SCT_GeometryManager.cxx:98
SCT_FwdOptoHarness
Definition: SCT_FwdOptoHarness.h:13
SCT_FwdWheel::m_safety
double m_safety
Definition: SCT_FwdWheel.h:98
ExtraMaterial.h
SCT_FwdWheel::~SCT_FwdWheel
~SCT_FwdWheel()
Definition: SCT_FwdWheel.cxx:72
SCT_FwdWheel::m_numWheels
int m_numWheels
Definition: SCT_FwdWheel.h:81
SCT_FwdWheel::m_rotateWheel
int m_rotateWheel
Definition: SCT_FwdWheel.h:95
SCT_FwdWheel::m_modules
const std::vector< SCT_FwdModule * > & m_modules
Definition: SCT_FwdWheel.h:109
SCT_FwdWheel::m_discSupport
std::unique_ptr< SCT_FwdDiscSupport > m_discSupport
Definition: SCT_FwdWheel.h:102
SCT_ComponentFactory::m_detectorManager
InDetDD::SCT_DetectorManager * m_detectorManager
Definition: SCT_ComponentFactory.h:41
x
#define x
SCT_FwdRingCooling.h
SCT_GeometryManager::generalParameters
const SCT_GeneralParameters * generalParameters() const
Definition: SCT_GeometryManager.cxx:105
SCT_FwdWheel::m_numFSITypes
int m_numFSITypes
Definition: SCT_FwdWheel.h:80
InDetDD::ExtraMaterial::add
void add(GeoPhysVol *parent, const std::string &parentName, double zPos=0)
Definition: ExtraMaterial.cxx:42
SCT_FwdDiscPowerTape::thickness
double thickness() const
Definition: SCT_FwdDiscPowerTape.h:25
SCT_FwdWheel::m_numPatchPanelTypes
int m_numPatchPanelTypes
Definition: SCT_FwdWheel.h:79
SCT_FwdWheel.h
SCT_FwdWheel::ring
const SCT_FwdRing * ring(int i)
Definition: SCT_FwdWheel.h:51
SCT_GeneralParameters.h
SCT_FwdWheel::m_ringType
std::vector< int > m_ringType
Definition: SCT_FwdWheel.h:74
SCT_FwdWheel::m_patchPanelType
std::vector< int > m_patchPanelType
Definition: SCT_FwdWheel.h:75
SCT_FwdWheel::innerRadius
double innerRadius() const
Definition: SCT_FwdWheel.h:57
SCT_FwdWheel::getParameters
void getParameters()
Definition: SCT_FwdWheel.cxx:77
SCT_FwdWheel::m_patchPanelLocAngle
std::vector< double > m_patchPanelLocAngle
Definition: SCT_FwdWheel.h:76
SCT_FwdRing::ringOffset
double ringOffset() const
Definition: SCT_FwdRing.h:50
SCT_FwdRing::identifier
int identifier() const
Definition: SCT_FwdRing.h:48
SCT_FwdWheel::ringType
int ringType(int i) const
Definition: SCT_FwdWheel.h:50
SCT_FwdOptoHarness::thickness
double thickness() const
Definition: SCT_FwdOptoHarness.h:27
SCT_SharedComponentFactory::getVolume
GeoVPhysVol * getVolume()
Definition: SCT_ComponentFactory.h:67
SCT_MaterialManager::gasMaterial
const GeoMaterial * gasMaterial() const
Definition: SCT_MaterialManager.cxx:69
SCT_FwdWheel::m_endcap
int m_endcap
Definition: SCT_FwdWheel.h:69
SCT_FwdWheel::SCT_FwdWheel
SCT_FwdWheel(const std::string &name, int iWheel, const std::vector< SCT_FwdModule * > &modules, 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_FwdWheel.cxx:52
SCT_FwdRing.h
SCT_FwdWheel::m_iWheel
int m_iWheel
Definition: SCT_FwdWheel.h:68
SCT_FwdWheel::m_pPConnectorPresent
bool m_pPConnectorPresent
Definition: SCT_FwdWheel.h:83
SCT_FwdRingCooling
Definition: SCT_FwdRingCooling.h:13
SCT_FwdDiscSupport.h
SCT_GeometryManager::distortedMatManager
InDetDD::DistortedMaterialManager * distortedMatManager() const
Definition: SCT_GeometryManager.cxx:111
DeMoUpdate.tmp
string tmp
Definition: DeMoUpdate.py:1167
SCT_FwdPatchPanel.h
SCT_ComponentFactory::intToString
std::string intToString(int i) const
Definition: SCT_ComponentFactory.cxx:30
SCT_FwdWheel::m_innerRadius
double m_innerRadius
Definition: SCT_FwdWheel.h:89
SCT_FwdWheel::m_pPConnector
std::unique_ptr< SCT_FwdPPConnector > m_pPConnector
Definition: SCT_FwdWheel.h:104
SCT_FwdWheel::m_discFixationPresent
bool m_discFixationPresent
Definition: SCT_FwdWheel.h:85
SCT_FwdWheel::m_optoHarnessPresent
bool m_optoHarnessPresent
Definition: SCT_FwdWheel.h:82
SCT_ComponentFactory::m_materials
SCT_MaterialManager * m_materials
Definition: SCT_ComponentFactory.h:43
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
SCT_FwdPPConnector.h
SCT_FwdWheel::m_thicknessFront
double m_thicknessFront
Definition: SCT_FwdWheel.h:92
SCT_FwdWheel::m_numPatchPanelLocs
int m_numPatchPanelLocs
Definition: SCT_FwdWheel.h:78
SCT_FwdWheel::m_patchPanelRepeatQuadrant
std::vector< bool > m_patchPanelRepeatQuadrant
Definition: SCT_FwdWheel.h:77
SCT_UniqueComponentFactory::m_logVolume
const GeoLogVol * m_logVolume
Definition: SCT_ComponentFactory.h:90
SCT_FwdWheel::m_totalModules
int m_totalModules
Definition: SCT_FwdWheel.h:94
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
SCT_UniqueComponentFactory
Definition: SCT_ComponentFactory.h:76
SCT_FwdWheel::outerRadius
double outerRadius() const
Definition: SCT_FwdWheel.h:58
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
SCT_FwdWheel::m_rings
std::vector< std::unique_ptr< SCT_FwdRing > > m_rings
Definition: SCT_FwdWheel.h:101
SCT_FwdRing::thicknessOuter
double thicknessOuter() const
Definition: SCT_FwdRing.h:54
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
SCT_ForwardParameters.h
SCT_FwdFSI.h
SCT_FwdWheel::m_pPCoolingPresent
bool m_pPCoolingPresent
Definition: SCT_FwdWheel.h:84
SCT_FwdWheel::preBuild
virtual const GeoLogVol * preBuild()
Definition: SCT_FwdWheel.cxx:135
SCT_DetectorManager.h
SCT_UniqueComponentFactory::m_sqliteReader
GeoModelIO::ReadGeoModel * m_sqliteReader
Definition: SCT_ComponentFactory.h:91
SCT_FwdWheel::m_discFixation
std::unique_ptr< SCT_FwdDiscFixation > m_discFixation
Definition: SCT_FwdWheel.h:107
SCT_FwdRing::ringSide
int ringSide() const
Definition: SCT_FwdRing.h:49
InDetDD::ExtraMaterial
Definition: ExtraMaterial.h:23
SCT_FwdDiscFixation.h
SCT_ComponentFactory::getName
const std::string & getName() const
Definition: SCT_ComponentFactory.h:35
SCT_FwdRing::build
virtual GeoVPhysVol * build(SCT_Identifier id)
Definition: SCT_FwdRing.cxx:173
SCT_GeometryManager.h
sqr
double sqr(double x)
Definition: SCT_FwdWheel.cxx:50
python.SystemOfUnits.degree
tuple degree
Definition: SystemOfUnits.py:106
SCT_GeometryManager
Definition: SCT_GeometryManager.h:25
SCT_FwdWheel::m_thicknessBack
double m_thicknessBack
Definition: SCT_FwdWheel.h:93
SCT_FwdWheel::m_ringMaxRadius
double m_ringMaxRadius
Definition: SCT_FwdWheel.h:96
SCT_FwdPPCooling.h
SCT_ForwardParameters
Definition: SCT_ForwardParameters.h:16
SCT_FwdWheel::m_patchPanel
std::vector< std::unique_ptr< SCT_FwdPatchPanel > > m_patchPanel
Definition: SCT_FwdWheel.h:103