ATLAS Offline Software
SCT_Layer.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //
6 // CPW 17/8/06
7 // Version using new model of services from A. Tricoli
8 //
17 #include "SCT_GeoModel/SCT_Clamp.h"
21 #include "SCT_GeoModel/SCT_Ski.h"
28 
31 
32 #include "GeoModelRead/ReadGeoModel.h"
33 #include "GeoModelKernel/GeoTube.h"
34 #include "GeoModelKernel/GeoLogVol.h"
35 #include "GeoModelKernel/GeoPhysVol.h"
36 #include "GeoModelKernel/GeoFullPhysVol.h"
37 #include "GeoModelKernel/GeoNameTag.h"
38 #include "GeoModelKernel/GeoIdentifierTag.h"
39 #include "GeoModelKernel/GeoTransform.h"
40 #include "GeoModelKernel/GeoAlignableTransform.h"
41 #include "GeoModelKernel/GeoMaterial.h"
42 #include "GeoModelKernel/GeoShapeSubtraction.h"
43 #include "GeoModelKernel/GeoDefinitions.h"
44 #include "GaudiKernel/SystemOfUnits.h"
45 
46 #include <cmath>
47 #include <sstream>
48 #include <utility>
49 
50 inline double sqr(double x) {return x * x;}
51 
52 SCT_Layer::SCT_Layer(const std::string & name,
53  int iLayer,
55  InDetDD::SCT_DetectorManager* detectorManager,
56  SCT_GeometryManager* geometryManager,
57  SCT_MaterialManager* materials,
58  GeoModelIO::ReadGeoModel* sqliteReader,
59  std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
60  std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
61 : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials, sqliteReader, std::move(mapFPV), std::move(mapAX)),
62  m_iLayer(iLayer),
63  m_module(module)
64 {
65  getParameters();
67 }
68 
70 {
71 }
72 
73 void
75 {
77  const SCT_GeneralParameters * generalParameters = m_geometryManager->generalParameters();
78 
79  m_safety = generalParameters->safety();
80  m_radius = parameters->radius(m_iLayer);
81  m_skisPerLayer = parameters->skisPerLayer(m_iLayer);
82  m_tilt = parameters->tilt(m_iLayer);
83  m_stereoSign = parameters->layerStereoSign(m_iLayer);
84  m_bracketPhiOffset = parameters->layerBracketPhiOffset(m_iLayer);
85  m_phiRefModule = parameters->layerPhiOfRefModule(m_iLayer);
86 
87  m_outerRadiusOfSupport = parameters->supportCylOuterRadius(m_iLayer);
88  m_activeLength = parameters->activeLength();
89  m_cylinderLength = parameters->cylinderLength();
90 
91  m_includeFSI = parameters->includeFSI();
92  if (m_includeFSI) {
93  m_nRepeatEndJewel = parameters->fsiEndJewelNRepeat(m_iLayer);
94  m_phiEndJewel = parameters->fsiEndJewelPhi(m_iLayer);
95  m_zEndJewel = parameters->fsiEndJewelZ(m_iLayer);
96  m_nRepeatScorpion = parameters->fsiScorpionNRepeat(m_iLayer);
97  m_phiScorpion = parameters->fsiScorpionPhi(m_iLayer);
98  m_zScorpion = parameters->fsiScorpionZ(m_iLayer);
99  }
100 
101  // Set numerology
104 
105 }
106 
107 
108 
109 const GeoLogVol *
111 {
112  // Build the components required for the layer.
113  // We use the layer number as a string quite a bit
114  std::string layerNumStr = intToString(m_iLayer);
115  // Make the ski
116  // The ski length is now reduced to m_activeLength to make room for the cooling inlet/outlet volumes
117  m_ski = std::make_unique<SCT_Ski>("Ski"+layerNumStr, m_module, m_stereoSign, m_tilt, m_activeLength,
119 
120 
121  //
122  // Calculations for making active layer components - called ski.
123  // This is the modules + doglegs + cooling blocks + coolingpipe
124  //
125  double divisionAngle = 360. * Gaudi::Units::degree / m_skisPerLayer;
126 
127  // We define here the first module(id = 0) as the nearest module to phi = 0 with positive phi.
128  // We allow slightly negative in case of rounding errors.
129 
130  double moduleCount = m_phiRefModule / divisionAngle;
131  m_skiPhiStart = divisionAngle * (moduleCount - floor(moduleCount +0.5 -0.0001));
132 
133  if(m_sqliteReader) return nullptr;
134 
135  // Build the Flanges
136  m_flange = std::make_unique<SCT_Flange>("Flange"+layerNumStr, m_iLayer, m_detectorManager, m_geometryManager, m_materials);
137 
138  // Build the SupportCyl
139  m_supportCyl = std::make_unique<SCT_SupportCyl>("SupportCyl"+layerNumStr, m_iLayer, m_cylinderLength,
141 
142  // Build the FSI end jewel, scorpion and fibre mask
143  // Mask runs between scorpions and flange in z - must be built after these
144  if (m_includeFSI) {
145  m_endJewel = std::make_unique<SCT_FSIEndJewel>("FSIEndJewel"+layerNumStr, m_detectorManager, m_geometryManager, m_materials);
146  m_scorpion = std::make_unique<SCT_FSIScorpion>("FSIScorpion"+layerNumStr, m_detectorManager, m_geometryManager, m_materials);
147  double length_mask = 0.5*m_cylinderLength - m_flange->length() - m_zScorpion - 0.5*m_scorpion->length();
148  m_fibreMask = std::make_unique<SCT_FSIFibreMask>("FSIFibreMask"+layerNumStr, m_iLayer, length_mask,
150  }
151 
152  m_skiAuxPhiStart = 0;
153 
154  //
155  // Make SkiAux - This is the brackets, harness and power tape.
156  //
157  // Bracket is placed at edge of division.
158  // -tiltSign * (r*divisionAngle/2 - bracket_width/2)
159  // Works for both +ve and -ve tilt.
160  m_bracket = std::make_unique<SCT_Bracket>("Bracket"+layerNumStr, m_detectorManager, m_geometryManager, m_materials);
161 
162  m_harness = std::make_unique<SCT_Harness>("Harness"+layerNumStr, m_cylinderLength,
164  m_skiPowerTape = std::make_unique<SCT_SkiPowerTape>("SkiPowerTape"+layerNumStr, m_ski.get(), m_cylinderLength,
166 
167  int tiltSign = (m_tilt < 0) ? -1 : +1;
168 
169  double bracketOffset = m_skiPhiStart - tiltSign * m_bracketPhiOffset;
170  double powerTapeOffset = bracketOffset - tiltSign * 0.5*divisionAngle;
171  // tiltSign not really necessary in powerTapeOffset calculate
172  // - but keeps the bracket and powertape pair associated with the same ski
173 
174 
175  // Make the SkiAux. This is layer dependent.
176  m_skiAux = std::make_unique<SCT_SkiAux>("SkiAux"+layerNumStr,
177  m_ski.get(),
178  m_bracket.get(),
179  m_harness.get(),
180  m_skiPowerTape.get(),
182  bracketOffset,
183  powerTapeOffset,
184  divisionAngle,
187  m_materials);
188 
189  // Build the clamp: we cannot do this until we have the dimensions of SkiAux
190  m_clamp = std::make_unique<SCT_Clamp>("Clamp"+layerNumStr, m_iLayer, m_skiAux->outerRadius(),
192 
193  // Build the volume representing the cooling inlets, outlet and U-bends.
194  // We cannot do this until we have the dimensions of the clamp
195  double coolingInnerRadius = m_clamp->outerRadius();
196  double clearance = 1*Gaudi::Units::mm;
197  double coolingLength = 0.5*m_cylinderLength - 0.5*m_activeLength - clearance;
198  m_coolingEnd = std::make_unique<SCT_CoolingEnd>("CoolingEnd"+layerNumStr, m_iLayer, coolingInnerRadius, coolingLength,
200 
201  //
202  // Calculate the envelopes.
203  //
204 
205 
206  //
207  // Active Layer Envelope extent
208  // Envelope for the active part (ie containing all the skis for the layer)
209  //
210  double rMinActive, rMaxActive;
211 
212  // Returns the min and max radius for the active envelope
213  activeEnvelopeExtent(rMinActive, rMaxActive);
214 
215  // Add some safety
216  rMinActive -= m_safety;
217  rMaxActive += m_safety;
218 
219  // But active layer now includes clamp....
220  rMinActive = m_skiAux->outerRadius();
221 
222  m_innerRadiusActive = rMinActive;
223  m_outerRadiusActive = rMaxActive;
224 
225  //
226  // Extent Envelope for support cyl, flanges and close-outs.
227  //
228  double rMinSupport = std::min(m_supportCyl->innerRadius(),m_flange->innerRadius());
229  //
230  // Overall Layer Envelope extent
231  //
232  // Inner radius is inner radius of support.
233  m_innerRadius = rMinSupport;
235 
236  //
237  // Make envelope for layer; length is now same as support cylinder
238  //
239  double length = m_cylinderLength;
240  // double length = m_layerLength;
241  // if (m_iLayer == 0) {length = m_cylinderLength + m_safety;}
242  const GeoTube * layerEnvelopeTube = new GeoTube(m_innerRadius, m_outerRadius, 0.5 * length);
243 
244  GeoLogVol * layerLog = new GeoLogVol(getName(), layerEnvelopeTube, m_materials->gasMaterial());
245 
246  // Check for overlap.
247  if (m_skiAux->outerRadius() > rMinActive) {
248  std::cout << "----> WARNING: SCT_Layer: Overlap between active layer and aux layer." << std::endl;
249  }
250 
251  return layerLog;
252 }
253 
254 GeoVPhysVol *
256 {
257 
258  double divisionAngle = 360 * Gaudi::Units::degree / m_skisPerLayer;
259 
260  if(m_sqliteReader) {
261  for (int iSki = 0; iSki < m_skisPerLayer; iSki++){
262  id.setPhiModule(iSki);
263  m_ski->build(id);
264 
265  }
266  return nullptr;
267  }
268 
269 
270  // We make this a fullPhysVol for alignment code.
271  GeoFullPhysVol * layer = new GeoFullPhysVol(m_logVolume);
272 
273 
274  //
275  // Active Layer
276  //
277  // Make envelope for active layer
278  //
279  const GeoTube * activeLayerEnvelopeShape = new GeoTube(m_innerRadiusActive, m_outerRadiusActive, 0.5 * m_cylinderLength);
280  GeoLogVol * activeLayerLog = new GeoLogVol(getName()+"Active", activeLayerEnvelopeShape, m_materials->gasMaterial());
281  GeoPhysVol * activeLayer = new GeoPhysVol(activeLayerLog);
282 
283  for (int iSki = 0; iSki < m_skisPerLayer; iSki++){
284  std::ostringstream name; name << "Ski#" << iSki;
285 
286  double phi = m_skiPhiStart + iSki * divisionAngle;
287 
289  pos = GeoTrf::RotateZ3D(phi)*pos;
290  GeoTrf::Transform3D rot = GeoTrf::RotateZ3D(m_tilt)*GeoTrf::RotateZ3D(phi);
291 
292  // Because the ski envelope center is not positioned at the rotation axis for the ski we must first
293  // apply the inverse of refPointTransform() of the ski.
294  GeoTrf::Transform3D trans(GeoTrf::Transform3D(GeoTrf::Translate3D(pos.x(),pos.y(),pos.z())*rot) * m_ski->getRefPointTransform()->getTransform().inverse());
295 
296  activeLayer->add(new GeoAlignableTransform(trans));
297  activeLayer->add(new GeoNameTag(name.str()));
298  activeLayer->add(new GeoIdentifierTag(iSki));
299  id.setPhiModule(iSki);
300  activeLayer->add(m_ski->build(id));
301  }
302 
303  // And add the service material
304  double clampZPos = 0.5 * m_cylinderLength - 0.5 * m_clamp->length();
305  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(clampZPos)));
306  activeLayer->add(m_clamp->getVolume());
307  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-clampZPos)));
308  activeLayer->add(m_clamp->getVolume());
309 
310  double coolingZPos = 0.5 * m_cylinderLength - 0.5 * m_coolingEnd->length();
311  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(coolingZPos)));
312  activeLayer->add(m_coolingEnd->getVolume());
313  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-coolingZPos)));
314  activeLayer->add(m_coolingEnd->getVolume());
315 
316  //
317  // Aux Layer
318  // Envelope for brackets and powertapes.
319  //
320  const GeoTube * auxLayerEnvelopeShape = new GeoTube(m_skiAux->innerRadius(), m_skiAux->outerRadius(),
321  0.5*m_skiAux->length());
322  GeoLogVol * auxLayerLog = new GeoLogVol(getName()+"Aux", auxLayerEnvelopeShape, m_materials->gasMaterial());
323  GeoPhysVol * auxLayer = new GeoPhysVol(auxLayerLog);
324 
325  for (int iSki = 0; iSki < m_skisPerLayer; iSki++){
326  //for (int iSki = 0; iSki < 2; iSki++){
327  double phi = m_skiAuxPhiStart + iSki * divisionAngle;
328  auxLayer->add(new GeoTransform(GeoTrf::RotateZ3D(phi)));
329  auxLayer->add(m_skiAux->getVolume());
330  }
331 
332 
333  //
334  // Support Layer
335  //
336 
337  // Envelope for support cylinder, flanges and FSI.
338  // Layer0 no longer needs cut-out
339  //
340  const GeoTube * supportLayerTube = new GeoTube(m_innerRadius, m_outerRadiusOfSupport, 0.5 * m_cylinderLength);
341  GeoLogVol * supportLayerLog = new GeoLogVol(getName()+"Support", supportLayerTube,
343  GeoPhysVol * supportLayer = new GeoPhysVol(supportLayerLog);
344 
345  // Position flanges. One at each end.
346  double flangeZPos = 0.5 * m_cylinderLength - 0.5 * m_flange->length();
347  supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(flangeZPos)));
348  supportLayer->add(m_flange->getVolume());
349  supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-flangeZPos)));
350  supportLayer->add(m_flange->getVolume());
351 
352  // Position supportCyl
353  supportLayer->add(m_supportCyl->getVolume());
354 
355  if(m_includeFSI) {
356  // Position FSI fibre masks
357  double fibreMaskZPos = 0.5 * m_cylinderLength - m_flange->length() - 0.5 * m_fibreMask->length();
358  supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(fibreMaskZPos)));
359  supportLayer->add(m_fibreMask->getVolume());
360  supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-fibreMaskZPos)));
361  supportLayer->add(m_fibreMask->getVolume());
362 
363  // Position FSI End jewels
364  double jewelRadius = std::sqrt(m_fibreMask->innerRadius()*m_fibreMask->innerRadius() - 0.25 * m_endJewel->rPhiWidth()*m_endJewel->rPhiWidth()) - 0.5 * m_endJewel->radialWidth();
365  for ( int i=0; i<m_nRepeatEndJewel; i++) {
366  double jewelAngle = m_phiEndJewel + i * 360.*Gaudi::Units::degree/m_nRepeatEndJewel;
367  supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(jewelAngle)*GeoTrf::TranslateX3D(jewelRadius)*GeoTrf::TranslateZ3D(m_zEndJewel)));
368  supportLayer->add(m_endJewel->getVolume());
369  supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(jewelAngle)*GeoTrf::TranslateX3D(jewelRadius)*GeoTrf::TranslateZ3D(-m_zEndJewel)));
370  supportLayer->add(m_endJewel->getVolume());
371  }
372 
373  // Position FSI Scorpions
374  double scorpionRadius = std::sqrt(m_supportCyl->innerRadius()*m_supportCyl->innerRadius() - 0.25 * m_scorpion->rPhiWidth()*m_scorpion->rPhiWidth()) - 0.5 * m_scorpion->radialWidth();
375  for ( int i=0; i<m_nRepeatScorpion; i++) {
376  double scorpionAngle = m_phiScorpion + i * 360.*Gaudi::Units::degree/m_nRepeatScorpion;
377  supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(scorpionAngle)*GeoTrf::TranslateX3D(scorpionRadius)*GeoTrf::TranslateZ3D(m_zScorpion)));
378  supportLayer->add(m_scorpion->getVolume());
379  supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(scorpionAngle)*GeoTrf::TranslateX3D(scorpionRadius)*GeoTrf::TranslateZ3D(-m_zScorpion)));
380  supportLayer->add(m_scorpion->getVolume());
381  }
382  }
383 
384  // Extra Material
386  xMat.add(supportLayer, "SCTLayer"+intToString(m_iLayer));
387 
388 
389  // Now place all the sub layers into the overall layer.
390  layer->add(activeLayer);
391  layer->add(auxLayer);
392  layer->add(supportLayer);
393 
394  return layer;
395 }
396 
397 void
398 SCT_Layer::activeEnvelopeExtent(double & rmin, double & rmax)
399 {
400 
401  // These are the coordinates of the corners of the ski envelope.
402  // x is in the radial direction and x is in the phi direction.
403 
404  //GeoTrf::Vector3D c0();
405  GeoTrf::Vector3D c1(-(m_ski->env1RefPointVector()->x()) - 0.5*(m_ski->env1Thickness()),
406  -(m_ski->env1RefPointVector()->y()) + 0.5*(m_ski->env1Width()),
407  0.0);
408  GeoTrf::Vector3D c2(-(m_ski->env2RefPointVector()->x()) - 0.5*(m_ski->env2Thickness()),
409  -(m_ski->env2RefPointVector()->y()) + 0.5*(m_ski->env2Width()),
410  0.0);
411  //GeoTrf::Vector3D c3();
412  GeoTrf::Vector3D c4(-(m_ski->env1RefPointVector()->x()) + 0.5*(m_ski->env1Thickness()),
413  -(m_ski->env1RefPointVector()->y()) - 0.5*(m_ski->env1Width()),
414  0.0);
415 
416  //c0.rotateZ(m_tilt);
417  c1 = GeoTrf::RotateZ3D(m_tilt)*c1;
418  c2 = GeoTrf::RotateZ3D(m_tilt)*c2;
419  //c3.rotateZ(m_tilt);
420  c4 = GeoTrf::RotateZ3D(m_tilt)*c4;
421 
422  GeoTrf::Vector3D vxmax = c4;
423  GeoTrf::Vector3D vxmin;
424  if (c1.x() < c2.x()) {
425  vxmin = c1;
426  }
427  else {
428  vxmin = c2;
429  }
430 
431  double xmax = vxmax.x();
432  double xmin = vxmin.x();
433  double ymax = vxmax.y();
434  double ymin = vxmin.y();
435 
436  rmax = sqrt(sqr(m_radius + xmax) + sqr(ymax));
437  rmin = sqrt(sqr(m_radius + xmin) + sqr(ymin));
438 }
439 // *** End of modified lines. ------------------ (07)*********************************
440 
441 double
443 {
444  // Calculate skiPhiOffset such that active silicon touches edge of division
445  // This is what is done in AGE.
446 
447  // First calculated for abs(m_tilt).
448 
449  double divisionAngle = 360 * Gaudi::Units::degree / m_skisPerLayer;
450 
451  // double activeHalfWidth = 0.5 * m_skiAux->ski()->module()->activeWidth();
452  // double moduleHalfThickness = 0.5 * m_skiAux->ski()->module()->thickness();
453  double activeHalfWidth = 0.5 * m_module->activeWidth();
454  double moduleHalfThickness = 0.5 * m_module->thickness();
455 
456  // rotate top points by tilt xin,yin (-X,+Y) and xout,yout (+X,+Y)
457  double ctilt = std::abs(cos(m_tilt));
458  double stilt = std::abs(sin(m_tilt));
459  double xin = m_radius
460  - ctilt * moduleHalfThickness - stilt * activeHalfWidth;
461  double yin = - stilt * moduleHalfThickness + ctilt * activeHalfWidth;
462  double xout = m_radius
463  + ctilt * moduleHalfThickness - stilt * activeHalfWidth;
464  double yout = stilt * moduleHalfThickness + ctilt * activeHalfWidth;
465  double alpha_in = atan(yin/xin);
466  double alpha_out = atan(yout/xout);
467  double alpha = std::max(alpha_in, alpha_out);
468 
469  int tiltSign = (m_tilt < 0) ? -1 : 1;
470  // As ski is larger than (ie alpha > divisionAngle/2)
471  // skiPhiOffset < 0 for +ve tilt and > 0 for -ve tilt.
472  double skiPhiOffset = tiltSign * (0.5 * divisionAngle - alpha);
473 
474  return skiPhiOffset;
475 }
SCT_Layer::m_includeFSI
bool m_includeFSI
Definition: SCT_Layer.h:102
SCT_ComponentFactory::m_geometryManager
SCT_GeometryManager * m_geometryManager
Definition: SCT_ComponentFactory.h:42
SCT_Layer::m_outerRadius
double m_outerRadius
Definition: SCT_Layer.h:87
SCT_MaterialManager
Definition: SCT_MaterialManager.h:21
SCT_Identifier
Definition: SCT_Identifier.h:12
ymin
double ymin
Definition: listroot.cxx:63
SCT_Layer::m_stereoSign
int m_stereoSign
Definition: SCT_Layer.h:82
SCT_Module::thickness
double thickness() const
Definition: SCT_Module.h:44
SCT_Layer::m_ski
std::unique_ptr< SCT_Ski > m_ski
Definition: SCT_Layer.h:111
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_Identifier.h
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
SCT_Layer::m_coolingEnd
std::unique_ptr< SCT_CoolingEnd > m_coolingEnd
Definition: SCT_Layer.h:113
SCT_UniqueComponentFactory::m_mapAX
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
Definition: SCT_ComponentFactory.h:96
SCT_MaterialManager.h
SCT_Flange.h
extractSporadic.c1
c1
Definition: extractSporadic.py:134
SCT_Layer::build
virtual GeoVPhysVol * build(SCT_Identifier id)
Definition: SCT_Layer.cxx:255
SCT_Layer::m_bracket
std::unique_ptr< SCT_Bracket > m_bracket
Definition: SCT_Layer.h:114
SCT_Layer::m_zEndJewel
double m_zEndJewel
Definition: SCT_Layer.h:105
SCT_Module
Definition: SCT_Module.h:25
ExtraMaterial.h
SCT_Layer::m_skiPhiStart
double m_skiPhiStart
Definition: SCT_Layer.h:96
SCT_Layer::m_nRepeatScorpion
int m_nRepeatScorpion
Definition: SCT_Layer.h:106
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
SCT_Harness.h
SCT_Layer::m_outerRadiusOfSupport
double m_outerRadiusOfSupport
Definition: SCT_Layer.h:94
SCT_Module::activeWidth
double activeWidth() const
Definition: SCT_Module.h:63
SCT_ComponentFactory::m_detectorManager
InDetDD::SCT_DetectorManager * m_detectorManager
Definition: SCT_ComponentFactory.h:41
x
#define x
SCT_Layer::m_safety
double m_safety
Definition: SCT_Layer.h:84
SCT_SkiPowerTape.h
SCT_Layer::m_innerRadiusActive
double m_innerRadiusActive
Definition: SCT_Layer.h:91
SCT_GeometryManager::generalParameters
const SCT_GeneralParameters * generalParameters() const
Definition: SCT_GeometryManager.cxx:105
InDetDD::ExtraMaterial::add
void add(GeoPhysVol *parent, const std::string &parentName, double zPos=0)
Definition: ExtraMaterial.cxx:42
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
SCT_FSIFibreMask.h
SCT_GeneralParameters.h
python.PyAthena.module
module
Definition: PyAthena.py:131
SCT_Layer::m_bracketPhiOffset
double m_bracketPhiOffset
Definition: SCT_Layer.h:99
SCT_Layer::m_clamp
std::unique_ptr< SCT_Clamp > m_clamp
Definition: SCT_Layer.h:112
SCT_Layer::m_skiPowerTape
std::unique_ptr< SCT_SkiPowerTape > m_skiPowerTape
Definition: SCT_Layer.h:116
SCT_Layer::SCT_Layer
SCT_Layer(const std::string &name, int iLayer, SCT_Module *module, 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_Layer.cxx:52
SCT_Layer::m_fibreMask
std::unique_ptr< SCT_FSIFibreMask > m_fibreMask
Definition: SCT_Layer.h:122
lumiFormat.i
int i
Definition: lumiFormat.py:85
xmin
double xmin
Definition: listroot.cxx:60
SCT_Layer::m_phiScorpion
double m_phiScorpion
Definition: SCT_Layer.h:107
SCT_MaterialManager::gasMaterial
const GeoMaterial * gasMaterial() const
Definition: SCT_MaterialManager.cxx:69
SCT_Layer::m_endJewel
std::unique_ptr< SCT_FSIEndJewel > m_endJewel
Definition: SCT_Layer.h:120
SCT_Layer::m_nRepeatEndJewel
int m_nRepeatEndJewel
Definition: SCT_Layer.h:103
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
SCT_Layer::m_skiAuxPhiStart
double m_skiAuxPhiStart
Definition: SCT_Layer.h:97
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
SCT_Layer::length
double length() const
Definition: SCT_Layer.h:65
SCT_Layer::m_supportCyl
std::unique_ptr< SCT_SupportCyl > m_supportCyl
Definition: SCT_Layer.h:119
SCT_GeometryManager::barrelParameters
const SCT_BarrelParameters * barrelParameters() const
Definition: SCT_GeometryManager.cxx:78
SCT_Layer::m_module
SCT_Module * m_module
Definition: SCT_Layer.h:110
SCT_GeometryManager::distortedMatManager
InDetDD::DistortedMaterialManager * distortedMatManager() const
Definition: SCT_GeometryManager.cxx:111
SCT_Clamp.h
SCT_FSIScorpion.h
SCT_ComponentFactory::intToString
std::string intToString(int i) const
Definition: SCT_ComponentFactory.cxx:30
SCT_GeneralParameters
Definition: SCT_GeneralParameters.h:16
SCT_Ski.h
SCT_Layer::m_radius
double m_radius
Definition: SCT_Layer.h:83
min
#define min(a, b)
Definition: cfImp.cxx:40
SCT_Layer::m_skiAux
std::unique_ptr< SCT_SkiAux > m_skiAux
Definition: SCT_Layer.h:117
sqr
double sqr(double x)
Definition: SCT_Layer.cxx:50
SCT_ComponentFactory::m_materials
SCT_MaterialManager * m_materials
Definition: SCT_ComponentFactory.h:43
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
InDetDD::SiNumerology::setNumEtaModulesForLayer
void setNumEtaModulesForLayer(int layer, int nEtaModules)
Definition: SiNumerology.cxx:67
SCT_Layer::m_outerRadiusActive
double m_outerRadiusActive
Definition: SCT_Layer.h:92
SCT_Module.h
SCT_Layer::m_tilt
double m_tilt
Definition: SCT_Layer.h:81
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
SCT_SupportCyl.h
SCT_UniqueComponentFactory::m_logVolume
const GeoLogVol * m_logVolume
Definition: SCT_ComponentFactory.h:90
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
SCT_Layer::m_phiEndJewel
double m_phiEndJewel
Definition: SCT_Layer.h:104
SCT_FSIEndJewel.h
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
SCT_UniqueComponentFactory
Definition: SCT_ComponentFactory.h:76
python.DataFormatRates.c2
c2
Definition: DataFormatRates.py:123
SCT_Layer::m_scorpion
std::unique_ptr< SCT_FSIScorpion > m_scorpion
Definition: SCT_Layer.h:121
SCT_Bracket.h
SCT_BarrelParameters
Definition: SCT_BarrelParameters.h:12
xmax
double xmax
Definition: listroot.cxx:61
SCT_Layer::m_innerRadius
double m_innerRadius
Definition: SCT_Layer.h:86
SCT_BarrelParameters.h
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
SCT_Layer::m_cylinderLength
double m_cylinderLength
Definition: SCT_Layer.h:88
SCT_Layer::m_phiRefModule
double m_phiRefModule
Definition: SCT_Layer.h:100
SCT_Layer.h
SCT_Layer::calcSkiPhiOffset
double calcSkiPhiOffset()
Definition: SCT_Layer.cxx:442
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
SCT_Layer::~SCT_Layer
virtual ~SCT_Layer()
Definition: SCT_Layer.cxx:69
SCT_Layer::m_iLayer
int m_iLayer
Definition: SCT_Layer.h:78
SCT_DetectorManager.h
SCT_SkiAux.h
SCT_UniqueComponentFactory::m_sqliteReader
GeoModelIO::ReadGeoModel * m_sqliteReader
Definition: SCT_ComponentFactory.h:91
InDetDD::ExtraMaterial
Definition: ExtraMaterial.h:23
SCT_Layer::m_harness
std::unique_ptr< SCT_Harness > m_harness
Definition: SCT_Layer.h:115
InDetDD::SiNumerology::setNumPhiModulesForLayer
void setNumPhiModulesForLayer(int layer, int nPhiModules)
Definition: SiNumerology.cxx:61
SCT_ComponentFactory::getName
const std::string & getName() const
Definition: SCT_ComponentFactory.h:35
SCT_Layer::m_zScorpion
double m_zScorpion
Definition: SCT_Layer.h:108
SCT_Layer::getParameters
void getParameters()
Definition: SCT_Layer.cxx:74
SCT_CoolingEnd.h
SCT_GeometryManager.h
SCT_Layer::m_flange
std::unique_ptr< SCT_Flange > m_flange
Definition: SCT_Layer.h:118
python.SystemOfUnits.degree
tuple degree
Definition: SystemOfUnits.py:106
SCT_Layer::activeEnvelopeExtent
void activeEnvelopeExtent(double &rmin, double &rmax)
Definition: SCT_Layer.cxx:398
SCT_GeometryManager
Definition: SCT_GeometryManager.h:25
SCT_Layer::m_skisPerLayer
int m_skisPerLayer
Definition: SCT_Layer.h:80
ymax
double ymax
Definition: listroot.cxx:64
SCT_Layer::m_activeLength
double m_activeLength
Definition: SCT_Layer.h:89
SCT_Layer::preBuild
virtual const GeoLogVol * preBuild()
Definition: SCT_Layer.cxx:110