ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_Layer.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 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//
9#include "SCT_Layer.h"
10#include "SCT_Identifier.h"
11#include "SCT_GeometryManager.h"
12#include "SCT_MaterialManager.h"
15#include "SCT_Bracket.h"
16#include "SCT_CoolingEnd.h"
17#include "SCT_Clamp.h"
18#include "SCT_Flange.h"
19#include "SCT_Harness.h"
20#include "SCT_Module.h"
21#include "SCT_Ski.h"
22#include "SCT_SkiAux.h"
23#include "SCT_SkiPowerTape.h"
24#include "SCT_SupportCyl.h"
25#include "SCT_FSIEndJewel.h"
26#include "SCT_FSIScorpion.h"
27#include "SCT_FSIFibreMask.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
50inline double sqr(double x) {return x * x;}
51
52SCT_Layer::SCT_Layer(const std::string & name,
53 int iLayer,
54 SCT_Module * module,
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{
67}
68
72
73void
75{
76 const SCT_BarrelParameters * parameters = m_geometryManager->barrelParameters();
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
102 m_detectorManager->numerology().setNumPhiModulesForLayer(m_iLayer,m_skisPerLayer);
103 m_detectorManager->numerology().setNumEtaModulesForLayer(m_iLayer,parameters->modulesPerSki());
104
105}
106
107
108
109const 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
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,
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
254GeoVPhysVol *
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
288 GeoTrf::Vector3D pos(m_radius, 0, 0);
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,
342 m_materials->gasMaterial());
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
385 InDetDD::ExtraMaterial xMat(m_geometryManager->distortedMatManager());
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
397void
398SCT_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 c1(-(m_ski->env1RefPointVector()->x()) - 0.5*(m_ski->env1Thickness()),
405 -(m_ski->env1RefPointVector()->y()) + 0.5*(m_ski->env1Width()),
406 0.0);
407 GeoTrf::Vector3D c2(-(m_ski->env2RefPointVector()->x()) - 0.5*(m_ski->env2Thickness()),
408 -(m_ski->env2RefPointVector()->y()) + 0.5*(m_ski->env2Width()),
409 0.0);
410 GeoTrf::Vector3D c4(-(m_ski->env1RefPointVector()->x()) + 0.5*(m_ski->env1Thickness()),
411 -(m_ski->env1RefPointVector()->y()) - 0.5*(m_ski->env1Width()),
412 0.0);
413
414 c1 = GeoTrf::RotateZ3D(m_tilt)*c1;
415 c2 = GeoTrf::RotateZ3D(m_tilt)*c2;
416 c4 = GeoTrf::RotateZ3D(m_tilt)*c4;
417
418 GeoTrf::Vector3D vxmax = std::move(c4);
419 GeoTrf::Vector3D vxmin;
420 if (c1.x() < c2.x()) {
421 vxmin = std::move(c1);
422 }
423 else {
424 vxmin = std::move(c2);
425 }
426
427 double xmax = vxmax.x();
428 double xmin = vxmin.x();
429 double ymax = vxmax.y();
430 double ymin = vxmin.y();
431
432 rmax = sqrt(sqr(m_radius + xmax) + sqr(ymax));
433 rmin = sqrt(sqr(m_radius + xmin) + sqr(ymin));
434}
435// *** End of modified lines. ------------------ (07)*********************************
436
437double
439{
440 // Calculate skiPhiOffset such that active silicon touches edge of division
441 // This is what is done in AGE.
442
443 // First calculated for abs(m_tilt).
444
445 double divisionAngle = 360 * Gaudi::Units::degree / m_skisPerLayer;
446
447 // double activeHalfWidth = 0.5 * m_skiAux->ski()->module()->activeWidth();
448 // double moduleHalfThickness = 0.5 * m_skiAux->ski()->module()->thickness();
449 double activeHalfWidth = 0.5 * m_module->activeWidth();
450 double moduleHalfThickness = 0.5 * m_module->thickness();
451
452 // rotate top points by tilt xin,yin (-X,+Y) and xout,yout (+X,+Y)
453 double ctilt = std::abs(cos(m_tilt));
454 double stilt = std::abs(sin(m_tilt));
455 double xin = m_radius
456 - ctilt * moduleHalfThickness - stilt * activeHalfWidth;
457 double yin = - stilt * moduleHalfThickness + ctilt * activeHalfWidth;
458 double xout = m_radius
459 + ctilt * moduleHalfThickness - stilt * activeHalfWidth;
460 double yout = stilt * moduleHalfThickness + ctilt * activeHalfWidth;
461 double alpha_in = atan(yin/xin);
462 double alpha_out = atan(yout/xout);
463 double alpha = std::max(alpha_in, alpha_out);
464
465 int tiltSign = (m_tilt < 0) ? -1 : 1;
466 // As ski is larger than (ie alpha > divisionAngle/2)
467 // skiPhiOffset < 0 for +ve tilt and > 0 for -ve tilt.
468 double skiPhiOffset = tiltSign * (0.5 * divisionAngle - alpha);
469
470 return skiPhiOffset;
471}
Scalar phi() const
phi method
#define sqr(t)
#define x
void add(GeoPhysVol *parent, const std::string &parentName, double zPos=0)
Dedicated detector manager extending the functionality of the SiDetectorManager with dedicated SCT in...
const std::string & getName() const
std::string intToString(int i) const
InDetDD::SCT_DetectorManager * m_detectorManager
SCT_GeometryManager * m_geometryManager
SCT_MaterialManager * m_materials
double calcSkiPhiOffset()
double m_bracketPhiOffset
Definition SCT_Layer.h:99
std::unique_ptr< SCT_Ski > m_ski
Definition SCT_Layer.h:111
double m_skiPhiStart
Definition SCT_Layer.h:96
double length() const
Definition SCT_Layer.h:65
virtual ~SCT_Layer()
Definition SCT_Layer.cxx:69
virtual GeoVPhysVol * build(SCT_Identifier id)
std::unique_ptr< SCT_FSIFibreMask > m_fibreMask
Definition SCT_Layer.h:122
double m_outerRadiusActive
Definition SCT_Layer.h:92
int m_skisPerLayer
Definition SCT_Layer.h:80
std::unique_ptr< SCT_Flange > m_flange
Definition SCT_Layer.h:118
double m_innerRadiusActive
Definition SCT_Layer.h:91
int m_iLayer
Definition SCT_Layer.h:78
double m_safety
Definition SCT_Layer.h:84
std::unique_ptr< SCT_SkiAux > m_skiAux
Definition SCT_Layer.h:117
double m_cylinderLength
Definition SCT_Layer.h:88
void activeEnvelopeExtent(double &rmin, double &rmax)
std::unique_ptr< SCT_Clamp > m_clamp
Definition SCT_Layer.h:112
double m_outerRadiusOfSupport
Definition SCT_Layer.h:94
double m_phiEndJewel
Definition SCT_Layer.h:104
void getParameters()
Definition SCT_Layer.cxx:74
bool m_includeFSI
Definition SCT_Layer.h:102
double m_tilt
Definition SCT_Layer.h:81
std::unique_ptr< SCT_CoolingEnd > m_coolingEnd
Definition SCT_Layer.h:113
double m_phiScorpion
Definition SCT_Layer.h:107
int m_stereoSign
Definition SCT_Layer.h:82
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
int m_nRepeatScorpion
Definition SCT_Layer.h:106
int m_nRepeatEndJewel
Definition SCT_Layer.h:103
double m_phiRefModule
Definition SCT_Layer.h:100
double m_outerRadius
Definition SCT_Layer.h:87
std::unique_ptr< SCT_Harness > m_harness
Definition SCT_Layer.h:115
SCT_Module * m_module
Definition SCT_Layer.h:110
double m_radius
Definition SCT_Layer.h:83
std::unique_ptr< SCT_SupportCyl > m_supportCyl
Definition SCT_Layer.h:119
double m_zEndJewel
Definition SCT_Layer.h:105
double m_zScorpion
Definition SCT_Layer.h:108
std::unique_ptr< SCT_Bracket > m_bracket
Definition SCT_Layer.h:114
std::unique_ptr< SCT_FSIEndJewel > m_endJewel
Definition SCT_Layer.h:120
double m_skiAuxPhiStart
Definition SCT_Layer.h:97
virtual const GeoLogVol * preBuild()
double m_activeLength
Definition SCT_Layer.h:89
std::unique_ptr< SCT_SkiPowerTape > m_skiPowerTape
Definition SCT_Layer.h:116
std::unique_ptr< SCT_FSIScorpion > m_scorpion
Definition SCT_Layer.h:121
double m_innerRadius
Definition SCT_Layer.h:86
SCT_UniqueComponentFactory(const std::string &name, InDetDD::SCT_DetectorManager *detectorManager, SCT_GeometryManager *geometryManager, SCT_MaterialManager *materials=nullptr, GeoModelIO::ReadGeoModel *sqliteReader=nullptr, std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > mapFPV=nullptr, std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > mapAX=nullptr)
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
GeoModelIO::ReadGeoModel * m_sqliteReader
double xmax
Definition listroot.cxx:61
double ymin
Definition listroot.cxx:63
double xmin
Definition listroot.cxx:60
double ymax
Definition listroot.cxx:64
STL namespace.