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

#include <SCT_Ski.h>

Inheritance diagram for SCT_Ski:
Collaboration diagram for SCT_Ski:

Public Member Functions

 SCT_Ski (const std::string &name, SCT_Module *module, int stereoSign, double tilt, double length, 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)
 
 ~SCT_Ski ()
 
virtual GeoVPhysVol * build (SCT_Identifier id)
 
double thickness () const
 
double width () const
 
double length () const
 
double zPos (int i) const
 
int identifier (int i) const
 
double radialSep () const
 
int firstStagger () const
 
int modulesPerSki () const
 
double tilt () const
 
int stereoSign () const
 
const SCT_Modulemodule () const
 
const SCT_Doglegdogleg () const
 
const SCT_CoolingBlockcoolingBlock () const
 
const SCT_CoolingPipecoolingPipe () const
 
const GeoTransform * getRefPointTransform () const
 
const GeoTrf::Vector3D * env1RefPointVector () const
 
const GeoTrf::Vector3D * env2RefPointVector () const
 
double env1Thickness () const
 
double env1Width () const
 
double env2Thickness () const
 
double env2Width () const
 
double coolingBlockOffsetX () const
 
double coolingBlockOffsetY () const
 
double coolingBlockOffsetZ () const
 
double coolingPipeOffsetX () const
 
double coolingPipeOffsetY () const
 
double doglegOffsetX () const
 
double doglegOffsetY () 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

 SCT_Ski (const SCT_Ski &ski)
 
SCT_Skioperator= (const SCT_Ski &ski)
 
void getParameters ()
 
virtual const GeoLogVol * preBuild ()
 

Private Attributes

double m_radialSep = 0.0
 
int m_firstStagger = 0
 
int m_modulesPerSki = 0
 
double m_safety = 0.0
 
std::vector< double > m_zPos
 
std::vector< int > m_id
 
int m_stereoSign
 
double m_tilt
 
double m_length
 
double m_width = 0.0
 
double m_thickness = 0.0
 
double m_doglegPhiOffset = 0.0
 
double m_doglegRadialOffset = 0.0
 
double m_coolingBlockPhiOffset = 0.0
 
double m_coolingBlockRadialOffset = 0.0
 
double m_coolingPipeRadialOffset = 0.0
 
double m_coolingPipePhiOffset = 0.0
 
double m_coolingBlockOffsetX = 0.0
 
double m_coolingBlockOffsetY = 0.0
 
double m_coolingBlockOffsetZ = 0.0
 
double m_coolingPipeOffsetX = 0.0
 
double m_coolingPipeOffsetY = 0.0
 
double m_doglegOffsetX = 0.0
 
double m_doglegOffsetY = 0.0
 
SCT_Modulem_module
 
std::unique_ptr< SCT_Doglegm_dogleg
 
std::unique_ptr< SCT_CoolingBlockm_coolingBlock
 
std::unique_ptr< SCT_CoolingPipem_coolingPipe
 
GeoIntrusivePtr< GeoTransform > m_refPointTransform {}
 
GeoIntrusivePtr< GeoTransform > m_coolingPipePos {}
 
std::unique_ptr< GeoTrf::Vector3D > m_env1RefPointVector
 For calculations of envelopes of SCT_DetailLayer. More...
 
std::unique_ptr< GeoTrf::Vector3D > m_env2RefPointVector
 For calculations of envelopes of SCT_DetailLayer. More...
 
double m_env1Thickness = 0.0
 
double m_env1Width = 0.0
 
double m_env2Thickness = 0.0
 
double m_env2Width = 0.0
 
std::vector< GeoNameTag * > m_nameTag
 
std::vector< GeoTrf::Transform3D > m_modulePos
 
std::vector< GeoTransform * > m_doglegPos
 
std::vector< GeoTransform * > m_coolingBlockPos
 
std::string m_name
 

Static Private Attributes

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

Detailed Description

Definition at line 28 of file SCT_Ski.h.

Constructor & Destructor Documentation

◆ SCT_Ski() [1/2]

SCT_Ski::SCT_Ski ( const std::string &  name,
SCT_Module module,
int  stereoSign,
double  tilt,
double  length,
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 38 of file SCT_Ski.cxx.

49  : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials, sqliteReader, mapFPV, mapAX),
51  m_tilt(tilt),
52  m_length(length),
54 {
55  getParameters();
56  if(!m_sqliteReader) {
58  }
59 }

◆ ~SCT_Ski()

SCT_Ski::~SCT_Ski ( )
default

◆ SCT_Ski() [2/2]

SCT_Ski::SCT_Ski ( const SCT_Ski ski)
private

Member Function Documentation

◆ build()

GeoVPhysVol * SCT_Ski::build ( SCT_Identifier  id)
virtual

Implements SCT_UniqueComponentFactory.

Definition at line 340 of file SCT_Ski.cxx.

341 {
342  GeoPhysVol * ski=nullptr;
343 
344  if(!m_sqliteReader){
345 
346  ski= new GeoPhysVol(m_logVolume);
347 
348  for (int iModule = 0; iModule < m_modulesPerSki; iModule++) {
349 
350  // Add modules.
351  ski->add(m_refPointTransform);
352  GeoAlignableTransform * moduleTransform = new GeoAlignableTransform(m_modulePos[iModule]);
353  ski->add(moduleTransform);
354  ski->add(m_nameTag[iModule]);
355  ski->add(new GeoIdentifierTag(m_id[iModule]));
356  id.setEtaModule(m_id[iModule]); // Set identifier.
357  GeoVPhysVol * modulePV = m_module->build(id);
358  ski->add(modulePV);
359 
360  // Store alignable transform
361  m_detectorManager->addAlignableTransform(1, id.getWaferId(), moduleTransform, modulePV);
362 
363  // Add dogleg
364  ski->add(m_refPointTransform);
365  ski->add(m_doglegPos[iModule]);
366  ski->add(m_dogleg->getVolume());
367 
368  // and coolingblock
369  ski->add(m_refPointTransform);
370  ski->add(m_coolingBlockPos[iModule]);
371  ski->add(m_coolingBlock->getVolume());
372  }
373 
374  // Add Cooling pipe
375  ski->add(m_refPointTransform);
376  ski->add(m_coolingPipePos);
377  ski->add(m_coolingPipe->getVolume());
378  }
379  else{
380 
381  for (int iModule = 0; iModule < m_modulesPerSki; iModule++) {
382 
383  // Add modules.
384  id.setEtaModule(m_id[iModule]); // Set identifier.
385  m_module->build(id);
386 
387  std::string key="ModuleSKI_"+std::to_string(id.getLayerDisk())+"_"+std::to_string(id.getEtaModule())+"_"+std::to_string(id.getPhiModule());
388 
389  // Store alignable transform
390  m_detectorManager->addAlignableTransform(1, id.getWaferId(), (*m_mapAX)[key], (*m_mapFPV)[key]);
391 
392  }
393  }
394  return ski;
395 }

◆ coolingBlock()

const SCT_CoolingBlock* SCT_Ski::coolingBlock ( ) const
inline

Definition at line 63 of file SCT_Ski.h.

63 {return m_coolingBlock.get();}

◆ coolingBlockOffsetX()

double SCT_Ski::coolingBlockOffsetX ( ) const
inline

Definition at line 73 of file SCT_Ski.h.

73 {return m_coolingBlockOffsetX;}

◆ coolingBlockOffsetY()

double SCT_Ski::coolingBlockOffsetY ( ) const
inline

Definition at line 74 of file SCT_Ski.h.

74 {return m_coolingBlockOffsetY;}

◆ coolingBlockOffsetZ()

double SCT_Ski::coolingBlockOffsetZ ( ) const
inline

Definition at line 75 of file SCT_Ski.h.

75 {return m_coolingBlockOffsetZ;}

◆ coolingPipe()

const SCT_CoolingPipe* SCT_Ski::coolingPipe ( ) const
inline

Definition at line 64 of file SCT_Ski.h.

64 {return m_coolingPipe.get();}

◆ coolingPipeOffsetX()

double SCT_Ski::coolingPipeOffsetX ( ) const
inline

Definition at line 76 of file SCT_Ski.h.

76 {return m_coolingPipeOffsetX;}

◆ coolingPipeOffsetY()

double SCT_Ski::coolingPipeOffsetY ( ) const
inline

Definition at line 77 of file SCT_Ski.h.

77 {return m_coolingPipeOffsetY;}

◆ dogleg()

const SCT_Dogleg* SCT_Ski::dogleg ( ) const
inline

Definition at line 62 of file SCT_Ski.h.

62 {return m_dogleg.get();}

◆ doglegOffsetX()

double SCT_Ski::doglegOffsetX ( ) const
inline

Definition at line 79 of file SCT_Ski.h.

79 {return m_doglegOffsetX;}

◆ doglegOffsetY()

double SCT_Ski::doglegOffsetY ( ) const
inline

Definition at line 80 of file SCT_Ski.h.

80 {return m_doglegOffsetY;}

◆ env1RefPointVector()

const GeoTrf::Vector3D* SCT_Ski::env1RefPointVector ( ) const
inline

Definition at line 67 of file SCT_Ski.h.

67 {return m_env1RefPointVector.get();}

◆ env1Thickness()

double SCT_Ski::env1Thickness ( ) const
inline

Definition at line 69 of file SCT_Ski.h.

69 {return m_env1Thickness;}

◆ env1Width()

double SCT_Ski::env1Width ( ) const
inline

Definition at line 70 of file SCT_Ski.h.

70 {return m_env1Width;}

◆ env2RefPointVector()

const GeoTrf::Vector3D* SCT_Ski::env2RefPointVector ( ) const
inline

Definition at line 68 of file SCT_Ski.h.

68 {return m_env2RefPointVector.get();}

◆ env2Thickness()

double SCT_Ski::env2Thickness ( ) const
inline

Definition at line 71 of file SCT_Ski.h.

71 {return m_env2Thickness;}

◆ env2Width()

double SCT_Ski::env2Width ( ) const
inline

Definition at line 72 of file SCT_Ski.h.

72 {return m_env2Width;}

◆ epsilon()

double SCT_ComponentFactory::epsilon ( ) const
protectedinherited

Definition at line 37 of file SCT_ComponentFactory.cxx.

38 {
39  return s_epsilon;
40 }

◆ firstStagger()

int SCT_Ski::firstStagger ( ) const
inline

Definition at line 55 of file SCT_Ski.h.

55 {return m_firstStagger;}

◆ 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_Ski::getParameters ( )
private

Definition at line 65 of file SCT_Ski.cxx.

66 {
67 
69  const SCT_GeneralParameters * generalParameters = m_geometryManager->generalParameters();
70 
71  m_safety = generalParameters->safety();
72 
73  m_radialSep = parameters->skiRadialSep();
74  m_firstStagger = parameters->skiFirstStagger();
75  m_modulesPerSki = parameters->modulesPerSki();
76  for (int iModule = 0; iModule < m_modulesPerSki; iModule++){
77  m_zPos.push_back(parameters->skiZPosition(iModule));
78  m_id.push_back(parameters->skiModuleIdentifier(iModule));
79  }
80 
81  // Various offset for the doglegs, cooling blocks and cooling pipe.
82  // These are not currently needed and are all set to zero.
89 
90  m_coolingBlockOffsetX = parameters->coolingBlockOffsetX();
91  m_coolingBlockOffsetY = parameters->coolingBlockOffsetY();
92  m_coolingBlockOffsetZ = parameters->coolingBlockOffsetZ();
93  m_coolingPipeOffsetX = parameters->coolingPipeOffsetX();
94  m_coolingPipeOffsetY = parameters->coolingPipeOffsetY();
95 
96  m_doglegOffsetX = parameters->doglegOffsetX();
97  m_doglegOffsetY = parameters->doglegOffsetY();
98 }

◆ getRefPointTransform()

const GeoTransform* SCT_Ski::getRefPointTransform ( ) const
inline

Definition at line 66 of file SCT_Ski.h.

66 {return m_refPointTransform;}

◆ identifier()

int SCT_Ski::identifier ( int  i) const
inline

Definition at line 53 of file SCT_Ski.h.

53 {return m_id[i];}

◆ 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_Ski::length ( ) const
inline

Definition at line 50 of file SCT_Ski.h.

50 {return m_length;}

◆ module()

const SCT_Module* SCT_Ski::module ( ) const
inline

Definition at line 61 of file SCT_Ski.h.

61 {return m_module;}

◆ modulesPerSki()

int SCT_Ski::modulesPerSki ( ) const
inline

Definition at line 56 of file SCT_Ski.h.

56 {return m_modulesPerSki;}

◆ operator=()

SCT_Ski& SCT_Ski::operator= ( const SCT_Ski ski)
private

◆ preBuild()

const GeoLogVol * SCT_Ski::preBuild ( )
privatevirtual

Implements SCT_UniqueComponentFactory.

Definition at line 101 of file SCT_Ski.cxx.

102 {
103  const double rphiClearance = 0.5*Gaudi::Units::mm;
104  const double radialClearance = 0.5*Gaudi::Units::mm;
105 
106 
107  // Make components.
108  m_dogleg = std::make_unique<SCT_Dogleg>(getName()+"Dogleg", m_detectorManager, m_geometryManager, m_materials);
109  m_coolingBlock = std::make_unique<SCT_CoolingBlock>(getName()+"CoolingBlock",
111  m_coolingPipe = std::make_unique<SCT_CoolingPipe>(getName()+"CoolingPipe", m_length,
113 
114  // We need the sign of the tilt in numerous places
115  int tiltSign = (m_tilt < 0) ? -1 : +1;
116 
117 
118  // The two modules are lined up in x in the unrotated ski. The ski then gets tilted
119  // when placed in the layer.
120  // So the x offset is just the raidal separation and the y offset is zero.
121 
122  double xModuleOffset = 0.5 * m_radialSep;
123 
124  double yModuleOffset = 0.0;
125 
126 
127  //
128  // Calculate position of cooling block
129  //
130  // Position the cooling block m_coolingBlockPhiOffset from the lower egde
131  // of the module and m_coolingBlockRadialOffset from surface of the module.
132 
133  double xCoolingBlockOffset = - m_coolingBlockRadialOffset + coolingBlockOffsetX();
134  double yCoolingBlockOffset = tiltSign *(coolingBlockOffsetY() - m_coolingBlockPhiOffset);
135  double zCoolingBlockOffset = coolingBlockOffsetZ();
136 
137  //
138  // Calculate position of dogleg
139  //
140 
141  double xDoglegOffset = doglegOffsetX() - m_doglegRadialOffset;
142 
143  // NB length of dogleg runs in phi direction.
144  double yDoglegOffset = tiltSign * (doglegOffsetY() + m_doglegPhiOffset);
145 
146  double zDoglegOffset = coolingBlockOffsetZ();
147 
148  //
149  // Calculate position of cooling pipe.
150  //
151  double xCoolingPipePos = coolingPipeOffsetX() - m_coolingPipeRadialOffset;
152  double yCoolingPipePos = coolingPipeOffsetY() + m_coolingPipePhiOffset;
153  m_coolingPipePos = new GeoTransform(GeoTrf::Translate3D(xCoolingPipePos, yCoolingPipePos, 0));
154  //
155  //
156  //
157 
158  int stagger_sign = m_firstStagger;
159  // Loop over modules in ski as we need their z positions.
160  for (int iModule = 0; iModule < m_modulesPerSki; iModule++) {
161 
162  // For compatibility with AGE we need to offset the module in y by -0.5*sep*sin(tilt) so that center
163  // of module lines up with radial line. (Not sure if this is what is done in reality)
164 
165  // Not sure if this needs to be alignable
166  double xModulePos = stagger_sign * xModuleOffset;
167  double yModulePos = yModuleOffset;
168  double zModulePos = m_zPos[iModule];
169 
170  // There is only one type of module and this is rotated one way or the other
171  // to get the phi-v (-ve), u-phi (+ve) orientations
172  GeoTrf::RotateX3D rot(0.5 * m_stereoSign * m_module->stereoAngle());
173  GeoTrf::Translation3D pos(xModulePos, yModulePos, zModulePos);
174  m_modulePos.push_back(GeoTrf::Transform3D(pos*rot));
175 
176  //
177  // Calculate position of cooling block
178  //
179 
180  double xCoolingBlockPos = xCoolingBlockOffset + xModulePos;
181  double yCoolingBlockPos = yCoolingBlockOffset + yModulePos;
182  double zCoolingBlockPos = zCoolingBlockOffset + zModulePos;
183  m_coolingBlockPos.push_back(new GeoTransform(GeoTrf::Translate3D(xCoolingBlockPos, yCoolingBlockPos, zCoolingBlockPos)));
184 
185 
186  //
187  // Calculate position of dogleg
188  //
189  double xDoglegPos = xDoglegOffset + xModulePos;
190  double yDoglegPos = yDoglegOffset + yModulePos;
191  double zDoglegPos = zDoglegOffset + zModulePos;
192  m_doglegPos.push_back(new GeoTransform(GeoTrf::Translate3D(xDoglegPos, yDoglegPos, zDoglegPos)));
193 
194  // alternate staggering
195  stagger_sign = - stagger_sign;
196 
197 
198  }
199 
200  //
201  // calculate envelope for ski with just modules. Not all these are used.
202  // These are coordinates of corners of module's envelopes.
203  //
204 
205  GeoTrf::Vector3D c0(0.0,
206  -(m_module->env1RefPointVector()->y()) + 0.5*(m_module->env1Width()),
207  -(m_module->env1RefPointVector()->z()) + 0.5*(m_module->env1Length()));
208  GeoTrf::Vector3D c1(0.0,
209  -(m_module->env1RefPointVector()->y()) - 0.5*(m_module->env1Width()),
210  -(m_module->env1RefPointVector()->z()) + 0.5*(m_module->env1Length()));
211  GeoTrf::Vector3D c2(0.0,
212  -(m_module->env1RefPointVector()->y()) - 0.5*(m_module->env1Width()),
213  -(m_module->env1RefPointVector()->z()) - 0.5*(m_module->env1Length()));
214  GeoTrf::Vector3D c3(0.0,
215  -(m_module->env1RefPointVector()->y()) + 0.5*(m_module->env1Width()),
216  -(m_module->env1RefPointVector()->z()) - 0.5*(m_module->env1Length()));
217  GeoTrf::Vector3D c4(0.0,
218  -(m_module->env2RefPointVector()->y()) + 0.5*(m_module->env2Width()),
219  -(m_module->env2RefPointVector()->z()) + 0.5*(m_module->env2Length()));
220  GeoTrf::Vector3D c5(0.0,
221  -(m_module->env2RefPointVector()->y()) - 0.5*(m_module->env2Width()),
222  -(m_module->env2RefPointVector()->z()) + 0.5*(m_module->env2Length()));
223  GeoTrf::Vector3D c6(0.0,
224  -(m_module->env2RefPointVector()->y()) - 0.5*(m_module->env2Width()),
225  -(m_module->env2RefPointVector()->z()) - 0.5*(m_module->env2Length()));
226  GeoTrf::Vector3D c7(0.0,
227  -(m_module->env2RefPointVector()->y()) + 0.5*(m_module->env2Width()),
228  -(m_module->env2RefPointVector()->z()) - 0.5*(m_module->env2Length()));
229 
230  double moduleYMax = c4.y();
231  double moduleYMin = c5.y();
232  c0 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c0;
233  c1 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c1;
234  c2 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c2;
235  c3 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c3;
236  c4 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c4;
237  c5 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c5;
238  c6 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c6;
239  c7 = GeoTrf::RotateX3D(0.5 * m_stereoSign * m_module->stereoAngle())*c7;
240 
241  moduleYMax = std::max(std::max(c0.y(), c4.y()), std::max(c7.y(), c3.y()));
242  moduleYMin = std::min(std::min(c1.y(), c5.y()), std::min(c6.y(), c2.y()));
243 
244  double skiWidth = moduleYMax - moduleYMin + 2*rphiClearance;
245 
246  //
247  // NB. The envelope is centered on x.
248  //
249  double skiThickness = m_module->thickness() + 2 * std::abs(xModuleOffset) + radialClearance;
250 
251  // Due to the cooling block and dogleg being next to the module and
252  // as the modules are staggered it is no longer possible to have a
253  // simple envelope around the ski.
254 
255  // Calculate envelope needed. This is a boolean of two rectangles.
256  // 1. Contains the modules and dogleg.
257  // 2. Contains the cooling pipe and cooling block.
258 
259  double xmax1 = 0.5*skiThickness;
260  double xmin1 = -xModuleOffset + xDoglegOffset - 0.5*m_dogleg->thickness();
261  double xmax2 = xmax1;
262  double xmin2 = xCoolingPipePos - m_coolingPipe->pipeRadius();
263 
264  // Take into account possiblity that the dogleg extends past the module.
265 
266  double ymax1 = moduleYMax + rphiClearance;
267  double ymin1 = moduleYMin - rphiClearance;
268  double ymin2,ymax2;
269  if (tiltSign > 0) {
270  ymax2 = std::max(-yModuleOffset + yCoolingBlockOffset + 0.5*m_coolingBlock->width(),
271  yCoolingPipePos + m_coolingPipe->pipeRadius());
272  ymin2 = ymin1;
273  } else {
274  ymax2 = ymax1;
275  ymin2 = std::min(-yModuleOffset + yCoolingBlockOffset - 0.5*m_coolingBlock->width(),
276  yCoolingPipePos - m_coolingPipe->pipeRadius());
277  }
278 
279 
280  // Add some safety
281  xmin1 -= m_safety;
282  xmax1 += m_safety;
283  ymin1 -= m_safety;
284  ymax1 += m_safety;
285 
286  xmin2 -= m_safety;
287  xmax2 += m_safety;
288  ymin2 -= m_safety;
289  ymax2 += m_safety;
290 
291  double xCenter = 0.5*(xmin1+xmax1);
292  double yCenter = 0.5*(ymin1+ymax1);
293  double xShift2 = 0.5*(xmin2+xmax2) - xCenter;
294  double yShift2 = 0.5*(ymin2+ymax2) - yCenter;
295 
296  m_refPointTransform = new GeoTransform(GeoTrf::Translate3D(-xCenter, -yCenter, 0));
297 
298  m_env1RefPointVector = std::make_unique<GeoTrf::Vector3D>(-xCenter, -yCenter, 0.0);
299  m_env2RefPointVector = std::make_unique<GeoTrf::Vector3D>(-xShift2, -yShift2, 0.0);
300  m_env1Thickness = xmax1-xmin1;
301  m_env1Width = ymax1-ymin1;
302  m_env2Thickness = xmax2-xmin2;
303  m_env2Width = ymax2-ymin2;
304 
305  GeoBox * envelope1 = new GeoBox(0.5 * (xmax1-xmin1), 0.5 * (ymax1-ymin1), 0.5 * m_length);
306  GeoBox * envelope2 = new GeoBox(0.5 * (xmax2-xmin2), 0.5 * (ymax2-ymin2), 0.5 * m_length);
307 
308  const GeoShape * skiEnvelopeShape = nullptr;
309 
310  const GeoShape & tmpShape = (*envelope1).
311  add(*envelope2 << GeoTrf::Translate3D(xShift2, yShift2, 0));
312  skiEnvelopeShape = &tmpShape;
313 
314  GeoLogVol * skiLog = new GeoLogVol(getName(), skiEnvelopeShape, m_materials->gasMaterial());
315 
316  // Make names once only so we don't recreate them again again.
317  for (int iModule = 0; iModule < m_modulesPerSki; iModule++) {
318  // Add identifier to name.
319  std::ostringstream name;
320  name << "Module#" << m_id[iModule];
321  m_nameTag.push_back(new GeoNameTag(name.str()));
322  }
323 
324 
325  // Define thickness, width, and length. This is chosen as bounding box centered on the ski rotation axis
326  // which contains the modules and dogleg (ie cooling blocks and cooling pipe is ignored.)
327  m_thickness = 2 * std::abs(xmin1);
328  m_width = skiWidth;
329 
330 
331  // Calculate the clearances. Module envelope1 is the thickness up to the sensors. This is used for the module to
332  // module distance
333 
334  return skiLog;
335 
336 }

◆ radialSep()

double SCT_Ski::radialSep ( ) const
inline

Definition at line 54 of file SCT_Ski.h.

54 {return m_radialSep;}

◆ stereoSign()

int SCT_Ski::stereoSign ( ) const
inline

Definition at line 59 of file SCT_Ski.h.

59 {return m_stereoSign;}

◆ thickness()

double SCT_Ski::thickness ( ) const
inline

Definition at line 48 of file SCT_Ski.h.

48 {return m_thickness;}

◆ tilt()

double SCT_Ski::tilt ( ) const
inline

Definition at line 58 of file SCT_Ski.h.

58 {return m_tilt;}

◆ width()

double SCT_Ski::width ( ) const
inline

Definition at line 49 of file SCT_Ski.h.

49 {return m_width;}

◆ zPos()

double SCT_Ski::zPos ( int  i) const
inline

Definition at line 52 of file SCT_Ski.h.

52 {return m_zPos[i];}

Member Data Documentation

◆ m_coolingBlock

std::unique_ptr<SCT_CoolingBlock> SCT_Ski::m_coolingBlock
private

Definition at line 126 of file SCT_Ski.h.

◆ m_coolingBlockOffsetX

double SCT_Ski::m_coolingBlockOffsetX = 0.0
private

Definition at line 115 of file SCT_Ski.h.

◆ m_coolingBlockOffsetY

double SCT_Ski::m_coolingBlockOffsetY = 0.0
private

Definition at line 116 of file SCT_Ski.h.

◆ m_coolingBlockOffsetZ

double SCT_Ski::m_coolingBlockOffsetZ = 0.0
private

Definition at line 117 of file SCT_Ski.h.

◆ m_coolingBlockPhiOffset

double SCT_Ski::m_coolingBlockPhiOffset = 0.0
private

Definition at line 109 of file SCT_Ski.h.

◆ m_coolingBlockPos

std::vector<GeoTransform *> SCT_Ski::m_coolingBlockPos
private

Definition at line 145 of file SCT_Ski.h.

◆ m_coolingBlockRadialOffset

double SCT_Ski::m_coolingBlockRadialOffset = 0.0
private

Definition at line 110 of file SCT_Ski.h.

◆ m_coolingPipe

std::unique_ptr<SCT_CoolingPipe> SCT_Ski::m_coolingPipe
private

Definition at line 127 of file SCT_Ski.h.

◆ m_coolingPipeOffsetX

double SCT_Ski::m_coolingPipeOffsetX = 0.0
private

Definition at line 118 of file SCT_Ski.h.

◆ m_coolingPipeOffsetY

double SCT_Ski::m_coolingPipeOffsetY = 0.0
private

Definition at line 119 of file SCT_Ski.h.

◆ m_coolingPipePhiOffset

double SCT_Ski::m_coolingPipePhiOffset = 0.0
private

Definition at line 112 of file SCT_Ski.h.

◆ m_coolingPipePos

GeoIntrusivePtr<GeoTransform> SCT_Ski::m_coolingPipePos {}
private

Definition at line 130 of file SCT_Ski.h.

◆ m_coolingPipeRadialOffset

double SCT_Ski::m_coolingPipeRadialOffset = 0.0
private

Definition at line 111 of file SCT_Ski.h.

◆ m_detectorManager

InDetDD::SCT_DetectorManager* SCT_ComponentFactory::m_detectorManager
protectedinherited

Definition at line 41 of file SCT_ComponentFactory.h.

◆ m_dogleg

std::unique_ptr<SCT_Dogleg> SCT_Ski::m_dogleg
private

Definition at line 125 of file SCT_Ski.h.

◆ m_doglegOffsetX

double SCT_Ski::m_doglegOffsetX = 0.0
private

Definition at line 121 of file SCT_Ski.h.

◆ m_doglegOffsetY

double SCT_Ski::m_doglegOffsetY = 0.0
private

Definition at line 122 of file SCT_Ski.h.

◆ m_doglegPhiOffset

double SCT_Ski::m_doglegPhiOffset = 0.0
private

Definition at line 107 of file SCT_Ski.h.

◆ m_doglegPos

std::vector<GeoTransform *> SCT_Ski::m_doglegPos
private

Definition at line 144 of file SCT_Ski.h.

◆ m_doglegRadialOffset

double SCT_Ski::m_doglegRadialOffset = 0.0
private

Definition at line 108 of file SCT_Ski.h.

◆ m_env1RefPointVector

std::unique_ptr<GeoTrf::Vector3D> SCT_Ski::m_env1RefPointVector
private

For calculations of envelopes of SCT_DetailLayer.

Definition at line 133 of file SCT_Ski.h.

◆ m_env1Thickness

double SCT_Ski::m_env1Thickness = 0.0
private

Definition at line 137 of file SCT_Ski.h.

◆ m_env1Width

double SCT_Ski::m_env1Width = 0.0
private

Definition at line 138 of file SCT_Ski.h.

◆ m_env2RefPointVector

std::unique_ptr<GeoTrf::Vector3D> SCT_Ski::m_env2RefPointVector
private

For calculations of envelopes of SCT_DetailLayer.

Definition at line 135 of file SCT_Ski.h.

◆ m_env2Thickness

double SCT_Ski::m_env2Thickness = 0.0
private

Definition at line 139 of file SCT_Ski.h.

◆ m_env2Width

double SCT_Ski::m_env2Width = 0.0
private

Definition at line 140 of file SCT_Ski.h.

◆ m_firstStagger

int SCT_Ski::m_firstStagger = 0
private

Definition at line 91 of file SCT_Ski.h.

◆ m_geometryManager

SCT_GeometryManager* SCT_ComponentFactory::m_geometryManager
protectedinherited

Definition at line 42 of file SCT_ComponentFactory.h.

◆ m_id

std::vector<int> SCT_Ski::m_id
private

Definition at line 96 of file SCT_Ski.h.

◆ m_length

double SCT_Ski::m_length
private

Definition at line 101 of file SCT_Ski.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_Ski::m_module
private

Definition at line 124 of file SCT_Ski.h.

◆ m_modulePos

std::vector<GeoTrf::Transform3D> SCT_Ski::m_modulePos
private

Definition at line 143 of file SCT_Ski.h.

◆ m_modulesPerSki

int SCT_Ski::m_modulesPerSki = 0
private

Definition at line 92 of file SCT_Ski.h.

◆ m_name

std::string SCT_ComponentFactory::m_name
privateinherited

Definition at line 49 of file SCT_ComponentFactory.h.

◆ m_nameTag

std::vector<GeoNameTag *> SCT_Ski::m_nameTag
private

Definition at line 142 of file SCT_Ski.h.

◆ m_radialSep

double SCT_Ski::m_radialSep = 0.0
private

Definition at line 90 of file SCT_Ski.h.

◆ m_refPointTransform

GeoIntrusivePtr<GeoTransform> SCT_Ski::m_refPointTransform {}
private

Definition at line 129 of file SCT_Ski.h.

◆ m_safety

double SCT_Ski::m_safety = 0.0
private

Definition at line 93 of file SCT_Ski.h.

◆ m_sqliteReader

GeoModelIO::ReadGeoModel* SCT_UniqueComponentFactory::m_sqliteReader
protectedinherited

Definition at line 91 of file SCT_ComponentFactory.h.

◆ m_stereoSign

int SCT_Ski::m_stereoSign
private

Definition at line 98 of file SCT_Ski.h.

◆ m_thickness

double SCT_Ski::m_thickness = 0.0
private

Definition at line 103 of file SCT_Ski.h.

◆ m_tilt

double SCT_Ski::m_tilt
private

Definition at line 99 of file SCT_Ski.h.

◆ m_width

double SCT_Ski::m_width = 0.0
private

Definition at line 102 of file SCT_Ski.h.

◆ m_zPos

std::vector<double> SCT_Ski::m_zPos
private

Definition at line 95 of file SCT_Ski.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_ComponentFactory::m_geometryManager
SCT_GeometryManager * m_geometryManager
Definition: SCT_ComponentFactory.h:42
SCT_Ski::m_zPos
std::vector< double > m_zPos
Definition: SCT_Ski.h:95
SCT_Ski::m_stereoSign
int m_stereoSign
Definition: SCT_Ski.h:98
SCT_ComponentFactory::m_name
std::string m_name
Definition: SCT_ComponentFactory.h:49
SCT_Ski::m_env1Width
double m_env1Width
Definition: SCT_Ski.h:138
SCT_Module::thickness
double thickness() const
Definition: SCT_Module.h:44
SCT_Ski::getParameters
void getParameters()
Definition: SCT_Ski.cxx:65
SCT_Ski::m_coolingPipePos
GeoIntrusivePtr< GeoTransform > m_coolingPipePos
Definition: SCT_Ski.h:130
SCT_UniqueComponentFactory::m_mapFPV
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
Definition: SCT_ComponentFactory.h:95
max
#define max(a, b)
Definition: cfImp.cxx:41
SCT_GeneralParameters::safety
double safety() const
Definition: SCT_GeneralParameters.cxx:48
SCT_Ski::coolingBlockOffsetX
double coolingBlockOffsetX() const
Definition: SCT_Ski.h:73
SCT_Ski::coolingBlockOffsetZ
double coolingBlockOffsetZ() const
Definition: SCT_Ski.h:75
SCT_Ski::m_tilt
double m_tilt
Definition: SCT_Ski.h:99
SCT_Module::env2Width
double env2Width() const
Definition: SCT_Module.h:52
SCT_Ski::module
const SCT_Module * module() const
Definition: SCT_Ski.h:61
SCT_UniqueComponentFactory::m_mapAX
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
Definition: SCT_ComponentFactory.h:96
SCT_Ski::m_coolingBlockOffsetZ
double m_coolingBlockOffsetZ
Definition: SCT_Ski.h:117
SCT_Ski::m_env2Width
double m_env2Width
Definition: SCT_Ski.h:140
SCT_Ski::coolingPipeOffsetX
double coolingPipeOffsetX() const
Definition: SCT_Ski.h:76
SCT_Ski::m_env1RefPointVector
std::unique_ptr< GeoTrf::Vector3D > m_env1RefPointVector
For calculations of envelopes of SCT_DetailLayer.
Definition: SCT_Ski.h:133
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_Ski::m_dogleg
std::unique_ptr< SCT_Dogleg > m_dogleg
Definition: SCT_Ski.h:125
SCT_Module::env1Width
double env1Width() const
Definition: SCT_Module.h:49
SCT_Ski::m_env1Thickness
double m_env1Thickness
Definition: SCT_Ski.h:137
SCT_Ski::m_width
double m_width
Definition: SCT_Ski.h:102
SCT_Ski::m_coolingBlock
std::unique_ptr< SCT_CoolingBlock > m_coolingBlock
Definition: SCT_Ski.h:126
SCT_Ski::coolingBlockOffsetY
double coolingBlockOffsetY() const
Definition: SCT_Ski.h:74
SCT_Module::env1Length
double env1Length() const
Definition: SCT_Module.h:50
SCT_Ski::m_coolingPipeRadialOffset
double m_coolingPipeRadialOffset
Definition: SCT_Ski.h:111
SCT_ComponentFactory::m_detectorManager
InDetDD::SCT_DetectorManager * m_detectorManager
Definition: SCT_ComponentFactory.h:41
SCT_Ski::tilt
double tilt() const
Definition: SCT_Ski.h:58
SCT_GeometryManager::generalParameters
const SCT_GeneralParameters * generalParameters() const
Definition: SCT_GeometryManager.cxx:105
SCT_Module::stereoAngle
double stereoAngle() const
Definition: SCT_Module.h:61
SCT_Ski::m_refPointTransform
GeoIntrusivePtr< GeoTransform > m_refPointTransform
Definition: SCT_Ski.h:129
SCT_Ski::m_coolingPipeOffsetY
double m_coolingPipeOffsetY
Definition: SCT_Ski.h:119
SCT_Module::env2Length
double env2Length() const
Definition: SCT_Module.h:53
SCT_Ski::m_firstStagger
int m_firstStagger
Definition: SCT_Ski.h:91
compileRPVLLRates_emergingFilterTest.c3
c3
Definition: compileRPVLLRates_emergingFilterTest.py:559
hotSpotInTAG.c0
c0
Definition: hotSpotInTAG.py:192
SCT_Module::build
virtual GeoVPhysVol * build(SCT_Identifier id)
Definition: SCT_Module.cxx:316
SCT_Ski::stereoSign
int stereoSign() const
Definition: SCT_Ski.h:59
lumiFormat.i
int i
Definition: lumiFormat.py:92
SCT_Ski::m_env2Thickness
double m_env2Thickness
Definition: SCT_Ski.h:139
SCT_Ski::m_thickness
double m_thickness
Definition: SCT_Ski.h:103
SCT_MaterialManager::gasMaterial
const GeoMaterial * gasMaterial() const
Definition: SCT_MaterialManager.cxx:80
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
SCT_Ski::length
double length() const
Definition: SCT_Ski.h:50
SCT_Ski::m_modulesPerSki
int m_modulesPerSki
Definition: SCT_Ski.h:92
SCT_Ski::doglegOffsetX
double doglegOffsetX() const
Definition: SCT_Ski.h:79
add
bool add(const std::string &hname, TKey *tobj)
Definition: fastadd.cxx:55
SCT_GeometryManager::barrelParameters
const SCT_BarrelParameters * barrelParameters() const
Definition: SCT_GeometryManager.cxx:78
SCT_Ski::m_doglegOffsetY
double m_doglegOffsetY
Definition: SCT_Ski.h:122
SCT_Ski::m_coolingPipeOffsetX
double m_coolingPipeOffsetX
Definition: SCT_Ski.h:118
SCT_Ski::m_modulePos
std::vector< GeoTrf::Transform3D > m_modulePos
Definition: SCT_Ski.h:143
SCT_Ski::m_coolingBlockRadialOffset
double m_coolingBlockRadialOffset
Definition: SCT_Ski.h:110
SCT_Module::env1RefPointVector
const GeoTrf::Vector3D * env1RefPointVector() const
Definition: SCT_Module.h:55
SCT_GeneralParameters
Definition: SCT_GeneralParameters.h:16
SCT_ComponentFactory::s_epsilon
static const double s_epsilon
Definition: SCT_ComponentFactory.h:50
SCT_Ski::m_length
double m_length
Definition: SCT_Ski.h:101
min
#define min(a, b)
Definition: cfImp.cxx:40
SCT_Ski::m_doglegRadialOffset
double m_doglegRadialOffset
Definition: SCT_Ski.h:108
SCT_Ski::m_id
std::vector< int > m_id
Definition: SCT_Ski.h:96
SCT_Ski::m_module
SCT_Module * m_module
Definition: SCT_Ski.h:124
SCT_ComponentFactory::m_materials
SCT_MaterialManager * m_materials
Definition: SCT_ComponentFactory.h:43
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
compileRPVLLRates.c2
c2
Definition: compileRPVLLRates.py:361
SCT_Ski::m_doglegOffsetX
double m_doglegOffsetX
Definition: SCT_Ski.h:121
SCT_Ski::coolingPipeOffsetY
double coolingPipeOffsetY() const
Definition: SCT_Ski.h:77
SCT_Ski::m_doglegPos
std::vector< GeoTransform * > m_doglegPos
Definition: SCT_Ski.h:144
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
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
SCT_Ski::m_coolingBlockPhiOffset
double m_coolingBlockPhiOffset
Definition: SCT_Ski.h:109
SCT_BarrelParameters
Definition: SCT_BarrelParameters.h:12
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
SCT_Ski::m_env2RefPointVector
std::unique_ptr< GeoTrf::Vector3D > m_env2RefPointVector
For calculations of envelopes of SCT_DetailLayer.
Definition: SCT_Ski.h:135
InDetDD::SCT_DetectorManager::addAlignableTransform
virtual void addAlignableTransform(int level, const Identifier &id, GeoAlignableTransform *xf, const GeoVFullPhysVol *child)
Add alignable transforms. No access to these, they will be changed by manager:
Definition: SCT_DetectorManager.cxx:264
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
SCT_Ski::doglegOffsetY
double doglegOffsetY() const
Definition: SCT_Ski.h:80
SCT_Ski::m_coolingBlockOffsetX
double m_coolingBlockOffsetX
Definition: SCT_Ski.h:115
SCT_Ski::m_coolingPipe
std::unique_ptr< SCT_CoolingPipe > m_coolingPipe
Definition: SCT_Ski.h:127
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
str
Definition: BTagTrackIpAccessor.cxx:11
SCT_Ski::m_safety
double m_safety
Definition: SCT_Ski.h:93
SCT_Module::env2RefPointVector
const GeoTrf::Vector3D * env2RefPointVector() const
Definition: SCT_Module.h:56
SCT_Ski::m_coolingBlockPos
std::vector< GeoTransform * > m_coolingBlockPos
Definition: SCT_Ski.h:145
SCT_UniqueComponentFactory::m_sqliteReader
GeoModelIO::ReadGeoModel * m_sqliteReader
Definition: SCT_ComponentFactory.h:91
SCT_Ski::m_coolingBlockOffsetY
double m_coolingBlockOffsetY
Definition: SCT_Ski.h:116
SCT_ComponentFactory::getName
const std::string & getName() const
Definition: SCT_ComponentFactory.h:35
SCT_Ski::m_coolingPipePhiOffset
double m_coolingPipePhiOffset
Definition: SCT_Ski.h:112
SCT_Ski::m_radialSep
double m_radialSep
Definition: SCT_Ski.h:90
SCT_Ski::m_nameTag
std::vector< GeoNameTag * > m_nameTag
Definition: SCT_Ski.h:142
SCT_Ski::m_doglegPhiOffset
double m_doglegPhiOffset
Definition: SCT_Ski.h:107
SCT_Ski::preBuild
virtual const GeoLogVol * preBuild()
Definition: SCT_Ski.cxx:101
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37