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 52 of file SCT_Layer.cxx.

61 : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials, sqliteReader, std::move(mapFPV), std::move(mapAX)),
62  m_iLayer(iLayer),
64 {
65  getParameters();
67 }

◆ ~SCT_Layer()

SCT_Layer::~SCT_Layer ( )
virtual

Definition at line 69 of file SCT_Layer.cxx.

70 {
71 }

◆ 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 398 of file SCT_Layer.cxx.

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 }

◆ build()

GeoVPhysVol * SCT_Layer::build ( SCT_Identifier  id)
virtual

Implements SCT_UniqueComponentFactory.

Definition at line 255 of file SCT_Layer.cxx.

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 }

◆ calcSkiPhiOffset()

double SCT_Layer::calcSkiPhiOffset ( )
private

Definition at line 442 of file SCT_Layer.cxx.

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 }

◆ epsilon()

double SCT_ComponentFactory::epsilon ( ) const
protectedinherited

Definition at line 38 of file SCT_ComponentFactory.cxx.

39 {
40  return s_epsilon;
41 }

◆ 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 74 of file SCT_Layer.cxx.

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 }

◆ 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 30 of file SCT_ComponentFactory.cxx.

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

◆ 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 110 of file SCT_Layer.cxx.

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 }

◆ 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
SCT_GeneralParameters::safety
double safety() const
Definition: SCT_GeneralParameters.cxx:48
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
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
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:44
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: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::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_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:69
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:30
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
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:228
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
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_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:74
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_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