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 39 of file SCT_Ski.cxx.

50  : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials, sqliteReader, std::move(mapFPV), std::move(mapAX)),
52  m_tilt(tilt),
53  m_length(length),
55 {
56  getParameters();
57  if(!m_sqliteReader) {
59  }
60 }

◆ ~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 341 of file SCT_Ski.cxx.

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

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

39 {
40  return s_epsilon;
41 }

◆ 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 66 of file SCT_Ski.cxx.

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

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

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

◆ 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 102 of file SCT_Ski.cxx.

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

◆ 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:66
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:44
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
hotSpotInTAG.c0
c0
Definition: hotSpotInTAG.py:192
python.DataFormatRates.c3
c3
Definition: DataFormatRates.py:127
SCT_Module::build
virtual GeoVPhysVol * build(SCT_Identifier id)
Definition: SCT_Module.cxx:317
SCT_Ski::stereoSign
int stereoSign() const
Definition: SCT_Ski.h:59
lumiFormat.i
int i
Definition: lumiFormat.py:85
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:69
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:221
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
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
python.DataFormatRates.c2
c2
Definition: DataFormatRates.py:123
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:102
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37