ATLAS Offline Software
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
SCT_Layer Class Reference

#include <SCT_Layer.h>

Inheritance diagram for SCT_Layer:
Collaboration diagram for SCT_Layer:

Public Member Functions

 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)
 
virtual ~SCT_Layer ()
 
 SCT_Layer (const SCT_Layer &)=delete
 
SCT_Layeroperator= (const SCT_Layer &)=delete
 
virtual GeoVPhysVol * build (SCT_Identifier id)
 
int skisPerLayer () const
 
double tilt () const
 
int stereoSign () const
 
double radius () const
 
double innerRadius () const
 
double outerRadius () const
 
double length () const
 
double skiPhiStart () const
 
const std::string & getName () const
 
std::string intToString (int i) const
 

Protected Member Functions

double epsilon () const
 

Protected Attributes

const GeoLogVol * m_logVolume
 
GeoModelIO::ReadGeoModel * m_sqliteReader
 
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
 
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
 
InDetDD::SCT_DetectorManagerm_detectorManager
 
SCT_GeometryManagerm_geometryManager
 
SCT_MaterialManagerm_materials
 

Private Member Functions

void getParameters ()
 
virtual const GeoLogVol * preBuild ()
 
void activeEnvelopeExtent (double &rmin, double &rmax)
 
double calcSkiPhiOffset ()
 

Private Attributes

int m_iLayer
 
int m_skisPerLayer = 0
 
double m_tilt = 0.0
 
int m_stereoSign = 0
 
double m_radius = 0.0
 
double m_safety = 0.0
 
double m_innerRadius = 0.0
 
double m_outerRadius = 0.0
 
double m_cylinderLength = 0.0
 
double m_activeLength = 0.0
 
double m_innerRadiusActive = 0.0
 
double m_outerRadiusActive = 0.0
 
double m_outerRadiusOfSupport = 0.0
 
double m_skiPhiStart = 0.0
 
double m_skiAuxPhiStart = 0.0
 
double m_bracketPhiOffset = 0.0
 
double m_phiRefModule = 0.0
 
bool m_includeFSI = false
 
int m_nRepeatEndJewel = 0
 
double m_phiEndJewel = 0.0
 
double m_zEndJewel = 0.0
 
int m_nRepeatScorpion = 0
 
double m_phiScorpion = 0.0
 
double m_zScorpion = 0.0
 
SCT_Modulem_module
 
std::unique_ptr< SCT_Skim_ski
 
std::unique_ptr< SCT_Clampm_clamp
 
std::unique_ptr< SCT_CoolingEndm_coolingEnd
 
std::unique_ptr< SCT_Bracketm_bracket
 
std::unique_ptr< SCT_Harnessm_harness
 
std::unique_ptr< SCT_SkiPowerTapem_skiPowerTape
 
std::unique_ptr< SCT_SkiAuxm_skiAux
 
std::unique_ptr< SCT_Flangem_flange
 
std::unique_ptr< SCT_SupportCylm_supportCyl
 
std::unique_ptr< SCT_FSIEndJewelm_endJewel
 
std::unique_ptr< SCT_FSIScorpionm_scorpion
 
std::unique_ptr< SCT_FSIFibreMaskm_fibreMask
 
std::string m_name
 

Static Private Attributes

static const double s_epsilon = 1.0e-6 * Gaudi::Units::mm
 

Detailed Description

Definition at line 36 of file SCT_Layer.h.

Constructor & Destructor Documentation

◆ SCT_Layer() [1/2]

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 at line 51 of file SCT_Layer.cxx.

60 : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials, sqliteReader, mapFPV, mapAX),
61  m_iLayer(iLayer),
63 {
64  getParameters();
66 }

◆ ~SCT_Layer()

SCT_Layer::~SCT_Layer ( )
virtual

Definition at line 68 of file SCT_Layer.cxx.

69 {
70 }

◆ SCT_Layer() [2/2]

SCT_Layer::SCT_Layer ( const SCT_Layer )
delete

Member Function Documentation

◆ activeEnvelopeExtent()

void SCT_Layer::activeEnvelopeExtent ( double &  rmin,
double &  rmax 
)
private

Definition at line 397 of file SCT_Layer.cxx.

398 {
399 
400  // These are the coordinates of the corners of the ski envelope.
401  // x is in the radial direction and x is in the phi direction.
402 
403  //GeoTrf::Vector3D c0();
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 c3();
411  GeoTrf::Vector3D c4(-(m_ski->env1RefPointVector()->x()) + 0.5*(m_ski->env1Thickness()),
412  -(m_ski->env1RefPointVector()->y()) - 0.5*(m_ski->env1Width()),
413  0.0);
414 
415  //c0.rotateZ(m_tilt);
416  c1 = GeoTrf::RotateZ3D(m_tilt)*c1;
417  c2 = GeoTrf::RotateZ3D(m_tilt)*c2;
418  //c3.rotateZ(m_tilt);
419  c4 = GeoTrf::RotateZ3D(m_tilt)*c4;
420 
421  GeoTrf::Vector3D vxmax = c4;
422  GeoTrf::Vector3D vxmin;
423  if (c1.x() < c2.x()) {
424  vxmin = c1;
425  }
426  else {
427  vxmin = c2;
428  }
429 
430  double xmax = vxmax.x();
431  double xmin = vxmin.x();
432  double ymax = vxmax.y();
433  double ymin = vxmin.y();
434 
435  rmax = sqrt(sqr(m_radius + xmax) + sqr(ymax));
436  rmin = sqrt(sqr(m_radius + xmin) + sqr(ymin));
437 }

◆ build()

GeoVPhysVol * SCT_Layer::build ( SCT_Identifier  id)
virtual

Implements SCT_UniqueComponentFactory.

Definition at line 254 of file SCT_Layer.cxx.

255 {
256 
257  double divisionAngle = 360 * Gaudi::Units::degree / m_skisPerLayer;
258 
259  if(m_sqliteReader) {
260  for (int iSki = 0; iSki < m_skisPerLayer; iSki++){
261  id.setPhiModule(iSki);
262  m_ski->build(id);
263 
264  }
265  return nullptr;
266  }
267 
268 
269  // We make this a fullPhysVol for alignment code.
270  GeoFullPhysVol * layer = new GeoFullPhysVol(m_logVolume);
271 
272 
273  //
274  // Active Layer
275  //
276  // Make envelope for active layer
277  //
278  const GeoTube * activeLayerEnvelopeShape = new GeoTube(m_innerRadiusActive, m_outerRadiusActive, 0.5 * m_cylinderLength);
279  GeoLogVol * activeLayerLog = new GeoLogVol(getName()+"Active", activeLayerEnvelopeShape, m_materials->gasMaterial());
280  GeoPhysVol * activeLayer = new GeoPhysVol(activeLayerLog);
281 
282  for (int iSki = 0; iSki < m_skisPerLayer; iSki++){
283  std::ostringstream name; name << "Ski#" << iSki;
284 
285  double phi = m_skiPhiStart + iSki * divisionAngle;
286 
288  pos = GeoTrf::RotateZ3D(phi)*pos;
289  GeoTrf::Transform3D rot = GeoTrf::RotateZ3D(m_tilt)*GeoTrf::RotateZ3D(phi);
290 
291  // Because the ski envelope center is not positioned at the rotation axis for the ski we must first
292  // apply the inverse of refPointTransform() of the ski.
293  GeoTrf::Transform3D trans(GeoTrf::Transform3D(GeoTrf::Translate3D(pos.x(),pos.y(),pos.z())*rot) * m_ski->getRefPointTransform()->getTransform().inverse());
294 
295  activeLayer->add(new GeoAlignableTransform(trans));
296  activeLayer->add(new GeoNameTag(name.str()));
297  activeLayer->add(new GeoIdentifierTag(iSki));
298  id.setPhiModule(iSki);
299  activeLayer->add(m_ski->build(id));
300  }
301 
302  // And add the service material
303  double clampZPos = 0.5 * m_cylinderLength - 0.5 * m_clamp->length();
304  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(clampZPos)));
305  activeLayer->add(m_clamp->getVolume());
306  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-clampZPos)));
307  activeLayer->add(m_clamp->getVolume());
308 
309  double coolingZPos = 0.5 * m_cylinderLength - 0.5 * m_coolingEnd->length();
310  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(coolingZPos)));
311  activeLayer->add(m_coolingEnd->getVolume());
312  activeLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-coolingZPos)));
313  activeLayer->add(m_coolingEnd->getVolume());
314 
315  //
316  // Aux Layer
317  // Envelope for brackets and powertapes.
318  //
319  const GeoTube * auxLayerEnvelopeShape = new GeoTube(m_skiAux->innerRadius(), m_skiAux->outerRadius(),
320  0.5*m_skiAux->length());
321  GeoLogVol * auxLayerLog = new GeoLogVol(getName()+"Aux", auxLayerEnvelopeShape, m_materials->gasMaterial());
322  GeoPhysVol * auxLayer = new GeoPhysVol(auxLayerLog);
323 
324  for (int iSki = 0; iSki < m_skisPerLayer; iSki++){
325  //for (int iSki = 0; iSki < 2; iSki++){
326  double phi = m_skiAuxPhiStart + iSki * divisionAngle;
327  auxLayer->add(new GeoTransform(GeoTrf::RotateZ3D(phi)));
328  auxLayer->add(m_skiAux->getVolume());
329  }
330 
331 
332  //
333  // Support Layer
334  //
335 
336  // Envelope for support cylinder, flanges and FSI.
337  // Layer0 no longer needs cut-out
338  //
339  const GeoTube * supportLayerTube = new GeoTube(m_innerRadius, m_outerRadiusOfSupport, 0.5 * m_cylinderLength);
340  GeoLogVol * supportLayerLog = new GeoLogVol(getName()+"Support", supportLayerTube,
342  GeoPhysVol * supportLayer = new GeoPhysVol(supportLayerLog);
343 
344  // Position flanges. One at each end.
345  double flangeZPos = 0.5 * m_cylinderLength - 0.5 * m_flange->length();
346  supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(flangeZPos)));
347  supportLayer->add(m_flange->getVolume());
348  supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-flangeZPos)));
349  supportLayer->add(m_flange->getVolume());
350 
351  // Position supportCyl
352  supportLayer->add(m_supportCyl->getVolume());
353 
354  if(m_includeFSI) {
355  // Position FSI fibre masks
356  double fibreMaskZPos = 0.5 * m_cylinderLength - m_flange->length() - 0.5 * m_fibreMask->length();
357  supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(fibreMaskZPos)));
358  supportLayer->add(m_fibreMask->getVolume());
359  supportLayer->add(new GeoTransform(GeoTrf::TranslateZ3D(-fibreMaskZPos)));
360  supportLayer->add(m_fibreMask->getVolume());
361 
362  // Position FSI End jewels
363  double jewelRadius = std::sqrt(m_fibreMask->innerRadius()*m_fibreMask->innerRadius() - 0.25 * m_endJewel->rPhiWidth()*m_endJewel->rPhiWidth()) - 0.5 * m_endJewel->radialWidth();
364  for ( int i=0; i<m_nRepeatEndJewel; i++) {
365  double jewelAngle = m_phiEndJewel + i * 360.*Gaudi::Units::degree/m_nRepeatEndJewel;
366  supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(jewelAngle)*GeoTrf::TranslateX3D(jewelRadius)*GeoTrf::TranslateZ3D(m_zEndJewel)));
367  supportLayer->add(m_endJewel->getVolume());
368  supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(jewelAngle)*GeoTrf::TranslateX3D(jewelRadius)*GeoTrf::TranslateZ3D(-m_zEndJewel)));
369  supportLayer->add(m_endJewel->getVolume());
370  }
371 
372  // Position FSI Scorpions
373  double scorpionRadius = std::sqrt(m_supportCyl->innerRadius()*m_supportCyl->innerRadius() - 0.25 * m_scorpion->rPhiWidth()*m_scorpion->rPhiWidth()) - 0.5 * m_scorpion->radialWidth();
374  for ( int i=0; i<m_nRepeatScorpion; i++) {
375  double scorpionAngle = m_phiScorpion + i * 360.*Gaudi::Units::degree/m_nRepeatScorpion;
376  supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(scorpionAngle)*GeoTrf::TranslateX3D(scorpionRadius)*GeoTrf::TranslateZ3D(m_zScorpion)));
377  supportLayer->add(m_scorpion->getVolume());
378  supportLayer->add(new GeoTransform(GeoTrf::RotateZ3D(scorpionAngle)*GeoTrf::TranslateX3D(scorpionRadius)*GeoTrf::TranslateZ3D(-m_zScorpion)));
379  supportLayer->add(m_scorpion->getVolume());
380  }
381  }
382 
383  // Extra Material
385  xMat.add(supportLayer, "SCTLayer"+intToString(m_iLayer));
386 
387 
388  // Now place all the sub layers into the overall layer.
389  layer->add(activeLayer);
390  layer->add(auxLayer);
391  layer->add(supportLayer);
392 
393  return layer;
394 }

◆ calcSkiPhiOffset()

double SCT_Layer::calcSkiPhiOffset ( )
private

Definition at line 441 of file SCT_Layer.cxx.

442 {
443  // Calculate skiPhiOffset such that active silicon touches edge of division
444  // This is what is done in AGE.
445 
446  // First calculated for abs(m_tilt).
447 
448  double divisionAngle = 360 * Gaudi::Units::degree / m_skisPerLayer;
449 
450  // double activeHalfWidth = 0.5 * m_skiAux->ski()->module()->activeWidth();
451  // double moduleHalfThickness = 0.5 * m_skiAux->ski()->module()->thickness();
452  double activeHalfWidth = 0.5 * m_module->activeWidth();
453  double moduleHalfThickness = 0.5 * m_module->thickness();
454 
455  // rotate top points by tilt xin,yin (-X,+Y) and xout,yout (+X,+Y)
456  double ctilt = std::abs(cos(m_tilt));
457  double stilt = std::abs(sin(m_tilt));
458  double xin = m_radius
459  - ctilt * moduleHalfThickness - stilt * activeHalfWidth;
460  double yin = - stilt * moduleHalfThickness + ctilt * activeHalfWidth;
461  double xout = m_radius
462  + ctilt * moduleHalfThickness - stilt * activeHalfWidth;
463  double yout = stilt * moduleHalfThickness + ctilt * activeHalfWidth;
464  double alpha_in = atan(yin/xin);
465  double alpha_out = atan(yout/xout);
466  double alpha = std::max(alpha_in, alpha_out);
467 
468  int tiltSign = (m_tilt < 0) ? -1 : 1;
469  // As ski is larger than (ie alpha > divisionAngle/2)
470  // skiPhiOffset < 0 for +ve tilt and > 0 for -ve tilt.
471  double skiPhiOffset = tiltSign * (0.5 * divisionAngle - alpha);
472 
473  return skiPhiOffset;
474 }

◆ epsilon()

double SCT_ComponentFactory::epsilon ( ) const
protectedinherited

Definition at line 37 of file SCT_ComponentFactory.cxx.

38 {
39  return s_epsilon;
40 }

◆ getName()

const std::string& SCT_ComponentFactory::getName ( ) const
inlineinherited

Definition at line 35 of file SCT_ComponentFactory.h.

35 {return m_name;}

◆ getParameters()

void SCT_Layer::getParameters ( )
private

Definition at line 73 of file SCT_Layer.cxx.

74 {
76  const SCT_GeneralParameters * generalParameters = m_geometryManager->generalParameters();
77 
78  m_safety = generalParameters->safety();
79  m_radius = parameters->radius(m_iLayer);
80  m_skisPerLayer = parameters->skisPerLayer(m_iLayer);
81  m_tilt = parameters->tilt(m_iLayer);
82  m_stereoSign = parameters->layerStereoSign(m_iLayer);
83  m_bracketPhiOffset = parameters->layerBracketPhiOffset(m_iLayer);
84  m_phiRefModule = parameters->layerPhiOfRefModule(m_iLayer);
85 
86  m_outerRadiusOfSupport = parameters->supportCylOuterRadius(m_iLayer);
87  m_activeLength = parameters->activeLength();
88  m_cylinderLength = parameters->cylinderLength();
89 
90  m_includeFSI = parameters->includeFSI();
91  if (m_includeFSI) {
92  m_nRepeatEndJewel = parameters->fsiEndJewelNRepeat(m_iLayer);
93  m_phiEndJewel = parameters->fsiEndJewelPhi(m_iLayer);
94  m_zEndJewel = parameters->fsiEndJewelZ(m_iLayer);
95  m_nRepeatScorpion = parameters->fsiScorpionNRepeat(m_iLayer);
96  m_phiScorpion = parameters->fsiScorpionPhi(m_iLayer);
97  m_zScorpion = parameters->fsiScorpionZ(m_iLayer);
98  }
99 
100  // Set numerology
103 
104 }

◆ innerRadius()

double SCT_Layer::innerRadius ( ) const
inline

Definition at line 63 of file SCT_Layer.h.

63 {return m_innerRadius;}

◆ intToString()

std::string SCT_ComponentFactory::intToString ( int  i) const
inherited

Definition at line 29 of file SCT_ComponentFactory.cxx.

30 {
31  std::ostringstream str;
32  str << i;
33  return str.str();
34 }

◆ length()

double SCT_Layer::length ( ) const
inline

Definition at line 65 of file SCT_Layer.h.

65 {return m_cylinderLength;}

◆ operator=()

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

◆ outerRadius()

double SCT_Layer::outerRadius ( ) const
inline

Definition at line 64 of file SCT_Layer.h.

64 {return m_outerRadius;}

◆ preBuild()

const GeoLogVol * SCT_Layer::preBuild ( )
privatevirtual

Implements SCT_UniqueComponentFactory.

Definition at line 109 of file SCT_Layer.cxx.

110 {
111  // Build the components required for the layer.
112  // We use the layer number as a string quite a bit
113  std::string layerNumStr = intToString(m_iLayer);
114  // Make the ski
115  // The ski length is now reduced to m_activeLength to make room for the cooling inlet/outlet volumes
116  m_ski = std::make_unique<SCT_Ski>("Ski"+layerNumStr, m_module, m_stereoSign, m_tilt, m_activeLength,
118 
119 
120  //
121  // Calculations for making active layer components - called ski.
122  // This is the modules + doglegs + cooling blocks + coolingpipe
123  //
124  double divisionAngle = 360. * Gaudi::Units::degree / m_skisPerLayer;
125 
126  // We define here the first module(id = 0) as the nearest module to phi = 0 with positive phi.
127  // We allow slightly negative in case of rounding errors.
128 
129  double moduleCount = m_phiRefModule / divisionAngle;
130  m_skiPhiStart = divisionAngle * (moduleCount - floor(moduleCount +0.5 -0.0001));
131 
132  if(m_sqliteReader) return nullptr;
133 
134  // Build the Flanges
135  m_flange = std::make_unique<SCT_Flange>("Flange"+layerNumStr, m_iLayer, m_detectorManager, m_geometryManager, m_materials);
136 
137  // Build the SupportCyl
138  m_supportCyl = std::make_unique<SCT_SupportCyl>("SupportCyl"+layerNumStr, m_iLayer, m_cylinderLength,
140 
141  // Build the FSI end jewel, scorpion and fibre mask
142  // Mask runs between scorpions and flange in z - must be built after these
143  if (m_includeFSI) {
144  m_endJewel = std::make_unique<SCT_FSIEndJewel>("FSIEndJewel"+layerNumStr, m_detectorManager, m_geometryManager, m_materials);
145  m_scorpion = std::make_unique<SCT_FSIScorpion>("FSIScorpion"+layerNumStr, m_detectorManager, m_geometryManager, m_materials);
146  double length_mask = 0.5*m_cylinderLength - m_flange->length() - m_zScorpion - 0.5*m_scorpion->length();
147  m_fibreMask = std::make_unique<SCT_FSIFibreMask>("FSIFibreMask"+layerNumStr, m_iLayer, length_mask,
149  }
150 
151  m_skiAuxPhiStart = 0;
152 
153  //
154  // Make SkiAux - This is the brackets, harness and power tape.
155  //
156  // Bracket is placed at edge of division.
157  // -tiltSign * (r*divisionAngle/2 - bracket_width/2)
158  // Works for both +ve and -ve tilt.
159  m_bracket = std::make_unique<SCT_Bracket>("Bracket"+layerNumStr, m_detectorManager, m_geometryManager, m_materials);
160 
161  m_harness = std::make_unique<SCT_Harness>("Harness"+layerNumStr, m_cylinderLength,
163  m_skiPowerTape = std::make_unique<SCT_SkiPowerTape>("SkiPowerTape"+layerNumStr, m_ski.get(), m_cylinderLength,
165 
166  int tiltSign = (m_tilt < 0) ? -1 : +1;
167 
168  double bracketOffset = m_skiPhiStart - tiltSign * m_bracketPhiOffset;
169  double powerTapeOffset = bracketOffset - tiltSign * 0.5*divisionAngle;
170  // tiltSign not really necessary in powerTapeOffset calculate
171  // - but keeps the bracket and powertape pair associated with the same ski
172 
173 
174  // Make the SkiAux. This is layer dependent.
175  m_skiAux = std::make_unique<SCT_SkiAux>("SkiAux"+layerNumStr,
176  m_ski.get(),
177  m_bracket.get(),
178  m_harness.get(),
179  m_skiPowerTape.get(),
181  bracketOffset,
182  powerTapeOffset,
183  divisionAngle,
186  m_materials);
187 
188  // Build the clamp: we cannot do this until we have the dimensions of SkiAux
189  m_clamp = std::make_unique<SCT_Clamp>("Clamp"+layerNumStr, m_iLayer, m_skiAux->outerRadius(),
191 
192  // Build the volume representing the cooling inlets, outlet and U-bends.
193  // We cannot do this until we have the dimensions of the clamp
194  double coolingInnerRadius = m_clamp->outerRadius();
195  double clearance = 1*Gaudi::Units::mm;
196  double coolingLength = 0.5*m_cylinderLength - 0.5*m_activeLength - clearance;
197  m_coolingEnd = std::make_unique<SCT_CoolingEnd>("CoolingEnd"+layerNumStr, m_iLayer, coolingInnerRadius, coolingLength,
199 
200  //
201  // Calculate the envelopes.
202  //
203 
204 
205  //
206  // Active Layer Envelope extent
207  // Envelope for the active part (ie containing all the skis for the layer)
208  //
209  double rMinActive, rMaxActive;
210 
211  // Returns the min and max radius for the active envelope
212  activeEnvelopeExtent(rMinActive, rMaxActive);
213 
214  // Add some safety
215  rMinActive -= m_safety;
216  rMaxActive += m_safety;
217 
218  // But active layer now includes clamp....
219  rMinActive = m_skiAux->outerRadius();
220 
221  m_innerRadiusActive = rMinActive;
222  m_outerRadiusActive = rMaxActive;
223 
224  //
225  // Extent Envelope for support cyl, flanges and close-outs.
226  //
227  double rMinSupport = std::min(m_supportCyl->innerRadius(),m_flange->innerRadius());
228  //
229  // Overall Layer Envelope extent
230  //
231  // Inner radius is inner radius of support.
232  m_innerRadius = rMinSupport;
234 
235  //
236  // Make envelope for layer; length is now same as support cylinder
237  //
238  double length = m_cylinderLength;
239  // double length = m_layerLength;
240  // if (m_iLayer == 0) {length = m_cylinderLength + m_safety;}
241  const GeoTube * layerEnvelopeTube = new GeoTube(m_innerRadius, m_outerRadius, 0.5 * length);
242 
243  GeoLogVol * layerLog = new GeoLogVol(getName(), layerEnvelopeTube, m_materials->gasMaterial());
244 
245  // Check for overlap.
246  if (m_skiAux->outerRadius() > rMinActive) {
247  std::cout << "----> WARNING: SCT_Layer: Overlap between active layer and aux layer." << std::endl;
248  }
249 
250  return layerLog;
251 }

◆ radius()

double SCT_Layer::radius ( ) const
inline

Definition at line 61 of file SCT_Layer.h.

61 {return m_radius;}

◆ skiPhiStart()

double SCT_Layer::skiPhiStart ( ) const
inline

Definition at line 67 of file SCT_Layer.h.

67 {return m_skiPhiStart;}

◆ skisPerLayer()

int SCT_Layer::skisPerLayer ( ) const
inline

Definition at line 58 of file SCT_Layer.h.

58 {return m_skisPerLayer;}

◆ stereoSign()

int SCT_Layer::stereoSign ( ) const
inline

Definition at line 60 of file SCT_Layer.h.

60 {return m_stereoSign;}

◆ tilt()

double SCT_Layer::tilt ( ) const
inline

Definition at line 59 of file SCT_Layer.h.

59 {return m_tilt;}

Member Data Documentation

◆ m_activeLength

double SCT_Layer::m_activeLength = 0.0
private

Definition at line 89 of file SCT_Layer.h.

◆ m_bracket

std::unique_ptr<SCT_Bracket> SCT_Layer::m_bracket
private

Definition at line 114 of file SCT_Layer.h.

◆ m_bracketPhiOffset

double SCT_Layer::m_bracketPhiOffset = 0.0
private

Definition at line 99 of file SCT_Layer.h.

◆ m_clamp

std::unique_ptr<SCT_Clamp> SCT_Layer::m_clamp
private

Definition at line 112 of file SCT_Layer.h.

◆ m_coolingEnd

std::unique_ptr<SCT_CoolingEnd> SCT_Layer::m_coolingEnd
private

Definition at line 113 of file SCT_Layer.h.

◆ m_cylinderLength

double SCT_Layer::m_cylinderLength = 0.0
private

Definition at line 88 of file SCT_Layer.h.

◆ m_detectorManager

InDetDD::SCT_DetectorManager* SCT_ComponentFactory::m_detectorManager
protectedinherited

Definition at line 41 of file SCT_ComponentFactory.h.

◆ m_endJewel

std::unique_ptr<SCT_FSIEndJewel> SCT_Layer::m_endJewel
private

Definition at line 120 of file SCT_Layer.h.

◆ m_fibreMask

std::unique_ptr<SCT_FSIFibreMask> SCT_Layer::m_fibreMask
private

Definition at line 122 of file SCT_Layer.h.

◆ m_flange

std::unique_ptr<SCT_Flange> SCT_Layer::m_flange
private

Definition at line 118 of file SCT_Layer.h.

◆ m_geometryManager

SCT_GeometryManager* SCT_ComponentFactory::m_geometryManager
protectedinherited

Definition at line 42 of file SCT_ComponentFactory.h.

◆ m_harness

std::unique_ptr<SCT_Harness> SCT_Layer::m_harness
private

Definition at line 115 of file SCT_Layer.h.

◆ m_iLayer

int SCT_Layer::m_iLayer
private

Definition at line 78 of file SCT_Layer.h.

◆ m_includeFSI

bool SCT_Layer::m_includeFSI = false
private

Definition at line 102 of file SCT_Layer.h.

◆ m_innerRadius

double SCT_Layer::m_innerRadius = 0.0
private

Definition at line 86 of file SCT_Layer.h.

◆ m_innerRadiusActive

double SCT_Layer::m_innerRadiusActive = 0.0
private

Definition at line 91 of file SCT_Layer.h.

◆ m_logVolume

const GeoLogVol* SCT_UniqueComponentFactory::m_logVolume
protectedinherited

Definition at line 90 of file SCT_ComponentFactory.h.

◆ m_mapAX

std::shared_ptr<std::map<std::string, GeoAlignableTransform*> > SCT_UniqueComponentFactory::m_mapAX
protectedinherited

Definition at line 96 of file SCT_ComponentFactory.h.

◆ m_mapFPV

std::shared_ptr<std::map<std::string, GeoFullPhysVol*> > SCT_UniqueComponentFactory::m_mapFPV
protectedinherited

Definition at line 95 of file SCT_ComponentFactory.h.

◆ m_materials

SCT_MaterialManager* SCT_ComponentFactory::m_materials
protectedinherited

Definition at line 43 of file SCT_ComponentFactory.h.

◆ m_module

SCT_Module* SCT_Layer::m_module
private

Definition at line 110 of file SCT_Layer.h.

◆ m_name

std::string SCT_ComponentFactory::m_name
privateinherited

Definition at line 49 of file SCT_ComponentFactory.h.

◆ m_nRepeatEndJewel

int SCT_Layer::m_nRepeatEndJewel = 0
private

Definition at line 103 of file SCT_Layer.h.

◆ m_nRepeatScorpion

int SCT_Layer::m_nRepeatScorpion = 0
private

Definition at line 106 of file SCT_Layer.h.

◆ m_outerRadius

double SCT_Layer::m_outerRadius = 0.0
private

Definition at line 87 of file SCT_Layer.h.

◆ m_outerRadiusActive

double SCT_Layer::m_outerRadiusActive = 0.0
private

Definition at line 92 of file SCT_Layer.h.

◆ m_outerRadiusOfSupport

double SCT_Layer::m_outerRadiusOfSupport = 0.0
private

Definition at line 94 of file SCT_Layer.h.

◆ m_phiEndJewel

double SCT_Layer::m_phiEndJewel = 0.0
private

Definition at line 104 of file SCT_Layer.h.

◆ m_phiRefModule

double SCT_Layer::m_phiRefModule = 0.0
private

Definition at line 100 of file SCT_Layer.h.

◆ m_phiScorpion

double SCT_Layer::m_phiScorpion = 0.0
private

Definition at line 107 of file SCT_Layer.h.

◆ m_radius

double SCT_Layer::m_radius = 0.0
private

Definition at line 83 of file SCT_Layer.h.

◆ m_safety

double SCT_Layer::m_safety = 0.0
private

Definition at line 84 of file SCT_Layer.h.

◆ m_scorpion

std::unique_ptr<SCT_FSIScorpion> SCT_Layer::m_scorpion
private

Definition at line 121 of file SCT_Layer.h.

◆ m_ski

std::unique_ptr<SCT_Ski> SCT_Layer::m_ski
private

Definition at line 111 of file SCT_Layer.h.

◆ m_skiAux

std::unique_ptr<SCT_SkiAux> SCT_Layer::m_skiAux
private

Definition at line 117 of file SCT_Layer.h.

◆ m_skiAuxPhiStart

double SCT_Layer::m_skiAuxPhiStart = 0.0
private

Definition at line 97 of file SCT_Layer.h.

◆ m_skiPhiStart

double SCT_Layer::m_skiPhiStart = 0.0
private

Definition at line 96 of file SCT_Layer.h.

◆ m_skiPowerTape

std::unique_ptr<SCT_SkiPowerTape> SCT_Layer::m_skiPowerTape
private

Definition at line 116 of file SCT_Layer.h.

◆ m_skisPerLayer

int SCT_Layer::m_skisPerLayer = 0
private

Definition at line 80 of file SCT_Layer.h.

◆ m_sqliteReader

GeoModelIO::ReadGeoModel* SCT_UniqueComponentFactory::m_sqliteReader
protectedinherited

Definition at line 91 of file SCT_ComponentFactory.h.

◆ m_stereoSign

int SCT_Layer::m_stereoSign = 0
private

Definition at line 82 of file SCT_Layer.h.

◆ m_supportCyl

std::unique_ptr<SCT_SupportCyl> SCT_Layer::m_supportCyl
private

Definition at line 119 of file SCT_Layer.h.

◆ m_tilt

double SCT_Layer::m_tilt = 0.0
private

Definition at line 81 of file SCT_Layer.h.

◆ m_zEndJewel

double SCT_Layer::m_zEndJewel = 0.0
private

Definition at line 105 of file SCT_Layer.h.

◆ m_zScorpion

double SCT_Layer::m_zScorpion = 0.0
private

Definition at line 108 of file SCT_Layer.h.

◆ s_epsilon

const double SCT_ComponentFactory::s_epsilon = 1.0e-6 * Gaudi::Units::mm
staticprivateinherited

Definition at line 50 of file SCT_ComponentFactory.h.


The documentation for this class was generated from the following files:
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
ymin
double ymin
Definition: listroot.cxx:63
SCT_ComponentFactory::m_name
std::string m_name
Definition: SCT_ComponentFactory.h:49
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
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
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
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
extractSporadic.c1
c1
Definition: extractSporadic.py:134
SCT_UniqueComponentFactory::SCT_UniqueComponentFactory
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)
Definition: SCT_ComponentFactory.cxx:43
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_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_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
SCT_Layer::m_safety
double m_safety
Definition: SCT_Layer.h:84
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
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
python.PyAthena.module
module
Definition: PyAthena.py:134
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::m_fibreMask
std::unique_ptr< SCT_FSIFibreMask > m_fibreMask
Definition: SCT_Layer.h:122
lumiFormat.i
int i
Definition: lumiFormat.py:92
xmin
double xmin
Definition: listroot.cxx:60
SCT_Layer::m_phiScorpion
double m_phiScorpion
Definition: SCT_Layer.h:107
SCT_Layer::m_endJewel
std::unique_ptr< SCT_FSIEndJewel > m_endJewel
Definition: SCT_Layer.h:120
SCT_MaterialManager::gasMaterial
const GeoMaterial * gasMaterial() const
Definition: SCT_MaterialManager.cxx:80
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
SCT_Layer::length
double length() const
Definition: SCT_Layer.h:65
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
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_ComponentFactory::intToString
std::string intToString(int i) const
Definition: SCT_ComponentFactory.cxx:29
SCT_GeneralParameters
Definition: SCT_GeneralParameters.h:16
SCT_ComponentFactory::s_epsilon
static const double s_epsilon
Definition: SCT_ComponentFactory.h:50
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:49
SCT_ComponentFactory::m_materials
SCT_MaterialManager * m_materials
Definition: SCT_ComponentFactory.h:43
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
compileRPVLLRates.c2
c2
Definition: compileRPVLLRates.py:361
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_Layer::m_tilt
double m_tilt
Definition: SCT_Layer.h:81
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
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
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
SCT_Layer::m_scorpion
std::unique_ptr< SCT_FSIScorpion > m_scorpion
Definition: SCT_Layer.h:121
SCT_BarrelParameters
Definition: SCT_BarrelParameters.h:12
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
xmax
double xmax
Definition: listroot.cxx:61
SCT_Layer::m_innerRadius
double m_innerRadius
Definition: SCT_Layer.h:86
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
SCT_Layer::m_cylinderLength
double m_cylinderLength
Definition: SCT_Layer.h:88
str
Definition: BTagTrackIpAccessor.cxx:11
SCT_Layer::m_phiRefModule
double m_phiRefModule
Definition: SCT_Layer.h:100
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
SCT_Layer::m_iLayer
int m_iLayer
Definition: SCT_Layer.h:78
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:73
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:397
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:109