ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_Module Class Reference

#include <SCT_Module.h>

Inheritance diagram for SCT_Module:
Collaboration diagram for SCT_Module:

Public Member Functions

 SCT_Module (const std::string &name, 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_Module ()
 SCT_Module (const SCT_Module &)=delete
SCT_Moduleoperator= (const SCT_Module &)=delete
virtual GeoVPhysVol * build (SCT_Identifier id)
double thickness () const
double width () const
double length () const
double env1Thickness () const
double env1Width () const
double env1Length () const
double env2Thickness () const
double env2Width () const
double env2Length () const
const GeoTrf::Vector3D * env1RefPointVector () const
const GeoTrf::Vector3D * env2RefPointVector () const
double sensorGap () const
double stereoInner () const
double stereoOuter () const
double stereoAngle () const
double activeWidth () const
double baseBoardOffsetY () const
double baseBoardOffsetZ () const
const SCT_InnerSideinnerSide () const
const SCT_OuterSideouterSide () const
const SCT_BaseBoardbaseBoard () 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 ()

Private Attributes

double m_thickness = 0.0
double m_width = 0.0
double m_length = 0.0
double m_env1Thickness = 0.0
double m_env1Width = 0.0
double m_env1Length = 0.0
double m_env2Thickness = 0.0
double m_env2Width = 0.0
double m_env2Length = 0.0
double m_activeWidth = 0.0
double m_baseBoardOffsetY = 0.0
double m_baseBoardOffsetZ = 0.0
double m_sensorGap = 0.0
double m_stereoInner = 0.0
double m_stereoOuter = 0.0
double m_stereoAngle = 0.0
int m_upperSide = 0
double m_safety = 0.0
std::unique_ptr< SCT_InnerSidem_innerSide
std::unique_ptr< SCT_OuterSidem_outerSide
std::unique_ptr< SCT_BaseBoardm_baseBoard
std::unique_ptr< GeoTrf::Transform3D > m_innerSidePos
std::unique_ptr< GeoTrf::Transform3D > m_outerSidePos
std::unique_ptr< GeoTrf::Translate3D > m_baseBoardPos
std::unique_ptr< GeoTrf::Vector3D > m_env1RefPointVector
std::unique_ptr< GeoTrf::Vector3D > m_env2RefPointVector
std::string m_name

Static Private Attributes

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

Detailed Description

Definition at line 23 of file SCT_Module.h.

Constructor & Destructor Documentation

◆ SCT_Module() [1/2]

SCT_Module::SCT_Module ( const std::string & name,
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 43 of file SCT_Module.cxx.

50: SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials, sqliteReader, std::move(mapFPV), std::move(mapAX))
51{
54}
void getParameters()
virtual const GeoLogVol * preBuild()
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)

◆ ~SCT_Module()

SCT_Module::~SCT_Module ( )

Definition at line 57 of file SCT_Module.cxx.

58{
59}

◆ SCT_Module() [2/2]

SCT_Module::SCT_Module ( const SCT_Module & )
delete

Member Function Documentation

◆ activeWidth()

double SCT_Module::activeWidth ( ) const
inline

Definition at line 63 of file SCT_Module.h.

63{return m_activeWidth;}
double m_activeWidth
Definition SCT_Module.h:88

◆ baseBoard()

const SCT_BaseBoard * SCT_Module::baseBoard ( ) const
inline

Definition at line 70 of file SCT_Module.h.

70{return m_baseBoard.get();}
std::unique_ptr< SCT_BaseBoard > m_baseBoard
Definition SCT_Module.h:102

◆ baseBoardOffsetY()

double SCT_Module::baseBoardOffsetY ( ) const
inline

Definition at line 65 of file SCT_Module.h.

65{return m_baseBoardOffsetY;}
double m_baseBoardOffsetY
Definition SCT_Module.h:90

◆ baseBoardOffsetZ()

double SCT_Module::baseBoardOffsetZ ( ) const
inline

Definition at line 66 of file SCT_Module.h.

66{return m_baseBoardOffsetZ;}
double m_baseBoardOffsetZ
Definition SCT_Module.h:91

◆ build()

GeoVPhysVol * SCT_Module::build ( SCT_Identifier id)
virtual

Implements SCT_UniqueComponentFactory.

Definition at line 317 of file SCT_Module.cxx.

318{
319 GeoFullPhysVol * module=nullptr;
320
321 if(!m_sqliteReader){
322
323 module=new GeoFullPhysVol(m_logVolume);
324
325
326 // We make these fullPhysVols for the alignment code.
327 // We probably should make the transform for the sensor
328 // alignable rather than the "side" to save making an extra full phys volume.
329
330 //
331 // Build the module
332 //
333 // Add Baseboard
334 GeoTransform * baseBoardTransform = new GeoTransform(*m_baseBoardPos);
335 module->add(baseBoardTransform);
336 module->add(m_baseBoard->getVolume());
337
338 // Add innerside
339 GeoAlignableTransform * innerTransform = new GeoAlignableTransform(*m_innerSidePos);
340 module->add(innerTransform);
341 int innerSideNumber = (m_upperSide) ? 0 : 1;
342 module->add(new GeoNameTag("Side#"+intToString(innerSideNumber))); // Identifier side=0
343 module->add(new GeoIdentifierTag(innerSideNumber));
344 id.setSide(innerSideNumber);
345 Identifier innerId = id.getWaferId();
346 GeoVPhysVol * innerSide = m_innerSide->build(id);
347 module->add(innerSide);
348 // Store alignable transform
349 m_detectorManager->addAlignableTransform(0, innerId, innerTransform, innerSide);
350
351 // Add outerside
352 GeoAlignableTransform * outerTransform = new GeoAlignableTransform(*m_outerSidePos);
353 module->add(outerTransform);
354 int outerSideNumber = m_upperSide;
355 module->add(new GeoNameTag("Side#"+intToString(outerSideNumber))); // Identifier side=1
356 module->add(new GeoIdentifierTag(outerSideNumber));
357 id.setSide(outerSideNumber);
358 Identifier outerId = id.getWaferId();
359 GeoVPhysVol * outerSide = m_outerSide->build(id);
360 module->add(outerSide);
361 // Store alignable transform
362 m_detectorManager->addAlignableTransform(0, outerId, outerTransform, outerSide);
363 } else
364 {
365
366 // Add innerside
367 int innerSideNumber = (m_upperSide) ? 0 : 1;
368 id.setSide(innerSideNumber);
369 // Store alignable transform
370 Identifier innerId = id.getWaferId();
371 m_innerSide->build(id);
372
373 std::string key="Side#"+intToString(innerSideNumber)+"_"+std::to_string(id.getBarrelEC())+"_"+std::to_string(id.getLayerDisk())+"_"+std::to_string(id.getEtaModule())+"_"+std::to_string(id.getPhiModule());
374 m_detectorManager->addAlignableTransform(0, innerId, (*m_mapAX)[key], (*m_mapFPV)[key]);
375
376
377 // Add outerside
378 int outerSideNumber = m_upperSide;
379 id.setSide(outerSideNumber);
380 // Store alignable transform
381 Identifier outerId = id.getWaferId();
382 m_outerSide->build(id);
383
384 key="Side#"+intToString(outerSideNumber)+"_"+std::to_string(id.getBarrelEC())+"_"+std::to_string(id.getLayerDisk())+"_"+std::to_string(id.getEtaModule())+"_"+std::to_string(id.getPhiModule());
385 m_detectorManager->addAlignableTransform(0, outerId, (*m_mapAX)[key], (*m_mapFPV)[key]);
386
387 }
388 return module;
389}
std::string intToString(int i) const
InDetDD::SCT_DetectorManager * m_detectorManager
const SCT_OuterSide * outerSide() const
Definition SCT_Module.h:69
const SCT_InnerSide * innerSide() const
Definition SCT_Module.h:68
std::unique_ptr< GeoTrf::Transform3D > m_innerSidePos
Definition SCT_Module.h:104
std::unique_ptr< GeoTrf::Translate3D > m_baseBoardPos
Definition SCT_Module.h:106
std::unique_ptr< SCT_InnerSide > m_innerSide
Definition SCT_Module.h:100
std::unique_ptr< SCT_OuterSide > m_outerSide
Definition SCT_Module.h:101
int m_upperSide
Definition SCT_Module.h:97
std::unique_ptr< GeoTrf::Transform3D > m_outerSidePos
Definition SCT_Module.h:105
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
GeoModelIO::ReadGeoModel * m_sqliteReader

◆ env1Length()

double SCT_Module::env1Length ( ) const
inline

Definition at line 50 of file SCT_Module.h.

50{return m_env1Length;}
double m_env1Length
Definition SCT_Module.h:83

◆ env1RefPointVector()

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

Definition at line 55 of file SCT_Module.h.

55{return m_env1RefPointVector.get();}
std::unique_ptr< GeoTrf::Vector3D > m_env1RefPointVector
Definition SCT_Module.h:108

◆ env1Thickness()

double SCT_Module::env1Thickness ( ) const
inline

Definition at line 48 of file SCT_Module.h.

48{return m_env1Thickness;}
double m_env1Thickness
Definition SCT_Module.h:81

◆ env1Width()

double SCT_Module::env1Width ( ) const
inline

Definition at line 49 of file SCT_Module.h.

49{return m_env1Width;}
double m_env1Width
Definition SCT_Module.h:82

◆ env2Length()

double SCT_Module::env2Length ( ) const
inline

Definition at line 53 of file SCT_Module.h.

53{return m_env2Length;}
double m_env2Length
Definition SCT_Module.h:86

◆ env2RefPointVector()

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

Definition at line 56 of file SCT_Module.h.

56{return m_env2RefPointVector.get();}
std::unique_ptr< GeoTrf::Vector3D > m_env2RefPointVector
Definition SCT_Module.h:109

◆ env2Thickness()

double SCT_Module::env2Thickness ( ) const
inline

Definition at line 51 of file SCT_Module.h.

51{return m_env2Thickness;}
double m_env2Thickness
Definition SCT_Module.h:84

◆ env2Width()

double SCT_Module::env2Width ( ) const
inline

Definition at line 52 of file SCT_Module.h.

52{return m_env2Width;}
double m_env2Width
Definition SCT_Module.h:85

◆ epsilon()

double SCT_ComponentFactory::epsilon ( ) const
protectedinherited

Definition at line 38 of file SCT_ComponentFactory.cxx.

39{
40 return s_epsilon;
41}
static const double s_epsilon

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

Definition at line 63 of file SCT_Module.cxx.

64{
65 const SCT_BarrelModuleParameters * parameters = m_geometryManager->barrelModuleParameters();
66 const SCT_GeneralParameters * generalParameters = m_geometryManager->generalParameters();
67 m_safety = generalParameters->safety();
68
69 m_sensorGap = parameters->moduleSensorToSensorGap();
70
71 m_stereoAngle = parameters->moduleStereoAngle();
72 int sign = parameters->moduleStereoUpperSign();
73 m_upperSide = parameters->moduleUpperSideNumber();
76
77 m_baseBoardOffsetY = parameters->baseBoardOffsetY();
78 m_baseBoardOffsetZ = parameters->baseBoardOffsetZ();
79}
int sign(int a)
SCT_GeometryManager * m_geometryManager
double m_stereoOuter
Definition SCT_Module.h:95
double m_stereoInner
Definition SCT_Module.h:94
double m_sensorGap
Definition SCT_Module.h:93
double m_safety
Definition SCT_Module.h:98
double m_stereoAngle
Definition SCT_Module.h:96

◆ innerSide()

const SCT_InnerSide * SCT_Module::innerSide ( ) const
inline

Definition at line 68 of file SCT_Module.h.

68{return m_innerSide.get();}

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

Definition at line 46 of file SCT_Module.h.

46{return m_length;}
double m_length
Definition SCT_Module.h:79

◆ operator=()

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

◆ outerSide()

const SCT_OuterSide * SCT_Module::outerSide ( ) const
inline

Definition at line 69 of file SCT_Module.h.

69{return m_outerSide.get();}

◆ preBuild()

const GeoLogVol * SCT_Module::preBuild ( )
privatevirtual

Implements SCT_UniqueComponentFactory.

Definition at line 83 of file SCT_Module.cxx.

84{
85 // Create child components
86 m_outerSide = std::make_unique<SCT_OuterSide>("OuterSide", m_detectorManager, m_geometryManager, m_materials, m_sqliteReader, m_mapFPV, m_mapAX);
87 m_innerSide = std::make_unique<SCT_InnerSide>("InnerSide", m_detectorManager, m_geometryManager, m_materials, m_sqliteReader, m_mapFPV, m_mapAX);
88
89 if(m_sqliteReader) return nullptr;
90
91 m_baseBoard = std::make_unique<SCT_BaseBoard>("BaseBoard", m_detectorManager, m_geometryManager, m_materials);
92 //
93 // We have 2 envelopes.
94 // 1. It contains two sensors and baseBoard.
95 // 2. It contains hybrid and pigtail.
96 //
97 // See "doc/cornerName.ps".
98 //
99
100 // We need to take into account the safety incorporated in the inner and outer side
101 // envelopes.
102 double sensorWidth = m_innerSide->sensor()->width() + m_safety;
103 double sensorLength = m_innerSide->sensor()->length() + m_safety;
104 double innerSideHybridWidth = m_innerSide->hybrid()->width() + m_safety;
105 double innerSideHybridLength = m_innerSide->hybrid()->length() + m_safety;
106 double outerSideHybridWidth = m_outerSide->hybrid()->width() + m_safety;
107 double outerSideHybridLength = m_outerSide->hybrid()->length() + m_safety;
108 double baseBoardWidth = m_baseBoard->width() + m_safety;
109 double baseBoardLength = m_baseBoard->length() + m_safety;
110 double outerSidePigtailLength = m_outerSide->pigtail()->length() + m_safety;
111
112
113 // Define constants for convenience.
114 // for corner of outer side sensor.
115 GeoTrf::Vector3D a(0.0, 0.5 * sensorWidth, 0.5 * sensorLength);
116 GeoTrf::Vector3D b(0.0, -0.5 * sensorWidth, a.z());
117 GeoTrf::Vector3D c(0.0, b.y(),-0.5 * sensorLength);
118 GeoTrf::Vector3D d(0.0, a.y(), c.z());
119
120 // for corner of inner side sensor.
121 GeoTrf::Vector3D e(0.0, a.y(), a.z());
122 GeoTrf::Vector3D f(0.0, b.y(), b.z());
123 GeoTrf::Vector3D g(0.0, c.y(), c.z());
124 GeoTrf::Vector3D h(0.0, d.y(), d.z());
125
126 // for corner of base board.
127 GeoTrf::Vector3D u(0.0,
128 m_baseBoardOffsetY + 0.5*baseBoardWidth,
129 m_baseBoardOffsetZ + 0.5*baseBoardLength);
130 GeoTrf::Vector3D v(0.0, m_baseBoardOffsetY - 0.5*baseBoardWidth, u.z());
131 GeoTrf::Vector3D w(0.0, v.y(), m_baseBoardOffsetZ - 0.5*baseBoardLength);
132 GeoTrf::Vector3D x(0.0, u.y(),w.z());
133
134 // for corner of hybrid, connectorouter and pigtail of outer side.
135 GeoTrf::Vector3D i(0.0,
136 0.5*outerSideHybridWidth,
137 m_outerSide->hybridOffsetZ() + 0.5*outerSidePigtailLength);
138 GeoTrf::Vector3D l(0.0,
139 -0.5*outerSideHybridWidth - m_outerSide->pigtail()->width(), i.z());
140 GeoTrf::Vector3D m(0.0, l.y(),
141 m_outerSide->hybridOffsetZ() - 0.5*outerSidePigtailLength);
142 GeoTrf::Vector3D p(0.0, i.y(),
143 m.z());
144
145
146
147 // for corner of hybrid and interConnect of inner side.
148 GeoTrf::Vector3D q(0.0, 0.5*outerSideHybridWidth, m_outerSide->hybridOffsetZ() + 0.5*outerSideHybridLength );
149 GeoTrf::Vector3D r(0.0, -0.5*innerSideHybridWidth, q.z());
150 GeoTrf::Vector3D s(0.0, r.y(), m_innerSide->hybridOffsetZ() - 0.5*innerSideHybridLength);
151 GeoTrf::Vector3D t(0.0, q.y(), s.z());
152
153 // All points turn +-20 mGaudi::Units::rad around physical center of module.
154 a = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*a;
155 b = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*b;
156 c = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*c;
157 d = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*d;
158
159 e = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*e;
160 f = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*f;
161 g = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*g;
162 h = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*h;
163
164 i = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*i;
165 //k.rotateX(m_stereoOuter/Gaudi::Units::radian);
166 l = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*l;
167 m = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*m;
168 //n.rotateX(m_stereoOuter/Gaudi::Units::radian);
169 p = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*p;
170
171 q = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*q;
172 r = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*r;
173 s = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*s;
174 t = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*t;
175
176 // Calculate demension of envelope1.
177 const double z_ab = std::max(a.z(), b.z());
178 const double z_ef = std::max(e.z(), f.z());
179 const double z_cd = std::min(c.z(), d.z());
180 const double z_gh = std::min(g.z(), h.z());
181
182 const double y_ad = std::max(a.y(), d.y());
183 const double y_eh = std::max(e.y(), h.y());
184 const double y_bc = std::min(b.y(), c.y());
185 const double y_fg = std::min(f.y(), g.y());
186
187 const double zmaxEnv1 = std::max(z_ab, z_ef);
188 const double zminEnv1 = std::min(z_cd, z_gh);
189
190 const double ypre_maxEnv1 = std::max(y_ad, y_eh);
191 const double ypre_minEnv1 = std::min(y_bc, y_fg);
192
193 const double ymaxEnv1 = std::max(ypre_maxEnv1, u.y());
194 const double yminEnv1 = std::min(ypre_minEnv1, v.y());
195
196 // some temporary value.
197 const double thicknessEnv1 = m_sensorGap + 2.0*m_outerSide->sensor()->thickness();
198 const double lengthEnv1 = zmaxEnv1 - zminEnv1;
199 const double widthEnv1 = ymaxEnv1 - yminEnv1;
200
201 // Center of evnelope1.
202 const double xCenterEnv1 = 0.0;
203 const double yCenterEnv1 = yminEnv1 + 0.5*widthEnv1;
204 const double zCenterEnv1 = zmaxEnv1 - 0.5*lengthEnv1;
205
206 m_env1RefPointVector = std::make_unique<GeoTrf::Vector3D>(-xCenterEnv1, -yCenterEnv1, -zCenterEnv1);
207
208 // Calculate demension of envelope2.
209 const double z_ikl = std::max(i.z(), l.z());
210 const double z_qr = std::max(q.z(), r.z());
211 const double z_mnp = std::min(m.z(), p.z());
212 const double z_st = std::min(s.z(), t.z());
213
214 const double y_ip = std::max(i.y(), p.y());
215 const double y_qt = std::max(q.y(), t.y());
216 const double y_lm = std::min(l.y(), m.y());
217 const double y_rs = std::min(r.y(), s.y());
218
219 const double zmaxEnv2 = std::max(z_ikl, z_qr);
220 const double zminEnv2 = std::min(z_mnp, z_st);
221
222 const double ymaxEnv2 = std::max(y_ip, y_qt);
223 const double yminEnv2 = std::min(y_lm, y_rs);
224
225 const double thicknessEnv2 = 2.0*(m_outerSide->hybridOffsetX() +
226 0.5*m_innerSide->sensor()->thickness() +
227 0.5*m_sensorGap +
228 0.5*m_outerSide->hybrid()->thickness());
229 const double lengthEnv2 = zmaxEnv2 - zminEnv2;
230 const double widthEnv2 = ymaxEnv2 - yminEnv2;
231
232 // Center of envelope2.
233 const double xCenterEnv2 = 0.0;
234 const double yCenterEnv2 = ymaxEnv2 - 0.5*widthEnv2;
235 const double zCenterEnv2 = zmaxEnv2 - 0.5*lengthEnv2;
236
237 m_env2RefPointVector = std::make_unique<GeoTrf::Vector3D>(-xCenterEnv2, -yCenterEnv2, -zCenterEnv2);
238
239 // Calculate dimension of subbox
240 const double xmaxSubBox = - 0.5*m_baseBoard->thickness() - m_safety;
241 const double xminSubBox = - 0.5*thicknessEnv2 - 2.0*m_safety;
242
243 const double ymaxSubBox = std::min(r.y(), s.y()) - m_safety;
244 const double yminSubBox = yminEnv2 - 2.0*m_safety;
245
246 const double zmaxSubBox = zmaxEnv1 + 2.0*m_safety;
247 const double zminSubBox = zminEnv1 - 2.0*m_safety;
248
249 const double thicknessSubBox = xmaxSubBox - xminSubBox;
250 const double widthSubBox = ymaxSubBox - yminSubBox;
251 const double lengthSubBox = zmaxSubBox - zminSubBox;
252
253 // Center of subbox.
254 const double xCenterSubBox = xmaxSubBox - 0.5*thicknessSubBox;
255 const double yCenterSubBox = ymaxSubBox - 0.5*widthSubBox;
256 const double zCenterSubBox = zmaxSubBox - 0.5*lengthSubBox;
257
258
259 m_env1Thickness = thicknessEnv1 + 2*m_safety;
260 m_env1Width = widthEnv1 + 2*m_safety;
261 m_env1Length = lengthEnv1 + 2*m_safety;
262
263 m_env2Thickness = thicknessEnv2 + 2*m_safety;
264 m_env2Width = widthEnv2 + 2*m_safety;
265 m_env2Length = lengthEnv2 + 2*m_safety;
266
267 // Envelope 2 defines the overall thickness. NB. The ski assumes the
268 // the envelope "thickness" is centered on x, which it is.
273
274 // Calculate a few things.
275 const double OSPosX = 0.5*m_sensorGap + 0.5*m_innerSide->sensor()->thickness();
276 const double ISPosX = -(0.5*m_sensorGap + 0.5*m_innerSide->sensor()->thickness());
277
278 //
279 // Make an envelope for the whole module.
280 //
281 const GeoBox * envelope1 = new GeoBox(0.5*m_env1Thickness, 0.5*m_env1Width, 0.5*m_env1Length);
282 const GeoBox * envelope2 = new GeoBox(0.5*m_env2Thickness, 0.5*m_env2Width, 0.5*m_env2Length);
283
284 const GeoBox * subBox = new GeoBox(0.5*thicknessSubBox, 0.5*widthSubBox, 0.6*lengthSubBox);
285
286 // In the following, envelope1 and envelope2 are added and SUBBOX is pulled.
287 const GeoShape & moduleEnvelope = (*envelope1 << GeoTrf::Translate3D(xCenterEnv1, yCenterEnv1, zCenterEnv1)).
288 add(*envelope2 << GeoTrf::Translate3D(xCenterEnv2, yCenterEnv2, zCenterEnv2)).
289 subtract(*subBox << GeoTrf::Translate3D(xCenterSubBox, yCenterSubBox, zCenterSubBox));
290
291 const GeoLogVol * moduleLog = new GeoLogVol(getName(), &moduleEnvelope, m_materials->gasMaterial());
292
293 //
294 // inner side
295 //
296 GeoTrf::Transform3D rotInner = GeoTrf::RotateX3D(m_stereoInner) * GeoTrf::RotateZ3D(180*Gaudi::Units::deg);
297 m_innerSidePos = std::make_unique<GeoTrf::Transform3D>(GeoTrf::Transform3D(GeoTrf::Translation3D(ISPosX, 0.0, 0.0)*rotInner));
298
299 //
300 // outer side
301 //
302 GeoTrf::RotateX3D rotOuter(m_stereoOuter);
303 m_outerSidePos = std::make_unique<GeoTrf::Transform3D>(GeoTrf::Transform3D(GeoTrf::Translation3D(OSPosX, 0.0, 0.0)*rotOuter));
304
305 //
306 // base board
307 //
308 const double baseBoardPosY = m_baseBoardOffsetY;
309 const double baseBoardPosZ = m_baseBoardOffsetZ;
310 m_baseBoardPos = std::make_unique<GeoTrf::Translate3D>(0.0, baseBoardPosY, baseBoardPosZ);
311
312 return moduleLog;
313}
static Double_t a
#define x
const std::string & getName() const
SCT_MaterialManager * m_materials
double thickness() const
Definition SCT_Module.h:44
double m_width
Definition SCT_Module.h:78
double m_thickness
Definition SCT_Module.h:77
bool add(const std::string &hname, TKey *tobj)
Definition fastadd.cxx:55
int r
Definition globals.cxx:22
l
Printing final latex table to .tex output file.
@ u
Enums for curvilinear frames.
Definition ParamDefs.h:77

◆ sensorGap()

double SCT_Module::sensorGap ( ) const
inline

Definition at line 58 of file SCT_Module.h.

58{return m_sensorGap;}

◆ stereoAngle()

double SCT_Module::stereoAngle ( ) const
inline

Definition at line 61 of file SCT_Module.h.

61{return m_stereoAngle;}

◆ stereoInner()

double SCT_Module::stereoInner ( ) const
inline

Definition at line 59 of file SCT_Module.h.

59{return m_stereoInner;}

◆ stereoOuter()

double SCT_Module::stereoOuter ( ) const
inline

Definition at line 60 of file SCT_Module.h.

60{return m_stereoOuter;}

◆ thickness()

double SCT_Module::thickness ( ) const
inline

Definition at line 44 of file SCT_Module.h.

44{return m_thickness;}

◆ width()

double SCT_Module::width ( ) const
inline

Definition at line 45 of file SCT_Module.h.

45{return m_width;}

Member Data Documentation

◆ m_activeWidth

double SCT_Module::m_activeWidth = 0.0
private

Definition at line 88 of file SCT_Module.h.

◆ m_baseBoard

std::unique_ptr<SCT_BaseBoard> SCT_Module::m_baseBoard
private

Definition at line 102 of file SCT_Module.h.

◆ m_baseBoardOffsetY

double SCT_Module::m_baseBoardOffsetY = 0.0
private

Definition at line 90 of file SCT_Module.h.

◆ m_baseBoardOffsetZ

double SCT_Module::m_baseBoardOffsetZ = 0.0
private

Definition at line 91 of file SCT_Module.h.

◆ m_baseBoardPos

std::unique_ptr<GeoTrf::Translate3D> SCT_Module::m_baseBoardPos
private

Definition at line 106 of file SCT_Module.h.

◆ m_detectorManager

InDetDD::SCT_DetectorManager* SCT_ComponentFactory::m_detectorManager
protectedinherited

Definition at line 41 of file SCT_ComponentFactory.h.

◆ m_env1Length

double SCT_Module::m_env1Length = 0.0
private

Definition at line 83 of file SCT_Module.h.

◆ m_env1RefPointVector

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

Definition at line 108 of file SCT_Module.h.

◆ m_env1Thickness

double SCT_Module::m_env1Thickness = 0.0
private

Definition at line 81 of file SCT_Module.h.

◆ m_env1Width

double SCT_Module::m_env1Width = 0.0
private

Definition at line 82 of file SCT_Module.h.

◆ m_env2Length

double SCT_Module::m_env2Length = 0.0
private

Definition at line 86 of file SCT_Module.h.

◆ m_env2RefPointVector

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

Definition at line 109 of file SCT_Module.h.

◆ m_env2Thickness

double SCT_Module::m_env2Thickness = 0.0
private

Definition at line 84 of file SCT_Module.h.

◆ m_env2Width

double SCT_Module::m_env2Width = 0.0
private

Definition at line 85 of file SCT_Module.h.

◆ m_geometryManager

SCT_GeometryManager* SCT_ComponentFactory::m_geometryManager
protectedinherited

Definition at line 42 of file SCT_ComponentFactory.h.

◆ m_innerSide

std::unique_ptr<SCT_InnerSide> SCT_Module::m_innerSide
private

Definition at line 100 of file SCT_Module.h.

◆ m_innerSidePos

std::unique_ptr<GeoTrf::Transform3D> SCT_Module::m_innerSidePos
private

Definition at line 104 of file SCT_Module.h.

◆ m_length

double SCT_Module::m_length = 0.0
private

Definition at line 79 of file SCT_Module.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_name

std::string SCT_ComponentFactory::m_name
privateinherited

Definition at line 49 of file SCT_ComponentFactory.h.

◆ m_outerSide

std::unique_ptr<SCT_OuterSide> SCT_Module::m_outerSide
private

Definition at line 101 of file SCT_Module.h.

◆ m_outerSidePos

std::unique_ptr<GeoTrf::Transform3D> SCT_Module::m_outerSidePos
private

Definition at line 105 of file SCT_Module.h.

◆ m_safety

double SCT_Module::m_safety = 0.0
private

Definition at line 98 of file SCT_Module.h.

◆ m_sensorGap

double SCT_Module::m_sensorGap = 0.0
private

Definition at line 93 of file SCT_Module.h.

◆ m_sqliteReader

GeoModelIO::ReadGeoModel* SCT_UniqueComponentFactory::m_sqliteReader
protectedinherited

Definition at line 91 of file SCT_ComponentFactory.h.

◆ m_stereoAngle

double SCT_Module::m_stereoAngle = 0.0
private

Definition at line 96 of file SCT_Module.h.

◆ m_stereoInner

double SCT_Module::m_stereoInner = 0.0
private

Definition at line 94 of file SCT_Module.h.

◆ m_stereoOuter

double SCT_Module::m_stereoOuter = 0.0
private

Definition at line 95 of file SCT_Module.h.

◆ m_thickness

double SCT_Module::m_thickness = 0.0
private

Definition at line 77 of file SCT_Module.h.

◆ m_upperSide

int SCT_Module::m_upperSide = 0
private

Definition at line 97 of file SCT_Module.h.

◆ m_width

double SCT_Module::m_width = 0.0
private

Definition at line 78 of file SCT_Module.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: