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

#include <SCT_FwdRing.h>

Inheritance diagram for SCT_FwdRing:
Collaboration diagram for SCT_FwdRing:

Public Member Functions

 SCT_FwdRing (const std::string &name, SCT_FwdModule *module, int iWheel, int iRing, int ec, 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_FwdRing ()
 
 SCT_FwdRing (const SCT_FwdRing &)=delete
 
SCT_FwdRingoperator= (const SCT_FwdRing &)=delete
 
int numModules () const
 
double moduleStagger () const
 
int identifier () const
 
int ringSide () const
 
double ringOffset () const
 
double thickness () const
 
double thicknessInner () const
 
double thicknessOuter () const
 
double innerRadius () const
 
double outerRadius () const
 
int stereoSign () const
 
bool discRotated () const
 
virtual GeoVPhysVol * build (SCT_Identifier id)
 
const SCT_FwdModulemodule () 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 makeModuleServices ()
 
void getParameters ()
 
virtual const GeoLogVol * preBuild ()
 

Private Attributes

int m_iWheel
 
int m_iRing
 
int m_endcap
 
int m_numModules = 0
 
double m_moduleStagger = 0.0
 
double m_safety = 0.0
 
int m_identifier = 0
 
int m_ringSide = 0
 
int m_stereoSign = 0
 
double m_refStartAngle = 0.0
 
int m_refFirstStagger = 0
 
double m_ringOffset = 0.0
 
double m_discSupportThickness = 0.0
 
double m_innerRadius = 0.0
 
double m_outerRadius = 0.0
 
double m_thickness = 0.0
 
double m_thicknessInner = 0.0
 
double m_thicknessOuter = 0.0
 
double m_startAngle = 0.0
 
int m_firstStagger = 0
 
bool m_discRotated = false
 
int m_moduleZero = 0
 
double m_moduleServicesHiRPos = 0.0
 
double m_moduleServicesLoRPos = 0.0
 
double m_moduleServicesHiZPos = 0.0
 
double m_moduleServicesLoZPos = 0.0
 
double m_moduleServicesHiOuterZPos = 0.0
 
double m_moduleServicesLoOuterZPos = 0.0
 
double m_maxModuleServicesBaseToRingCenter = 0.0
 
SCT_FwdModulem_module
 
std::unique_ptr< SCT_FwdCoolingBlockm_coolingBlockHiMain
 
std::unique_ptr< SCT_FwdCoolingBlockm_coolingBlockHiSec
 
std::unique_ptr< SCT_FwdCoolingBlockm_coolingBlockLoMain
 
std::unique_ptr< SCT_FwdCoolingBlockm_coolingBlockLoSec
 
GeoPhysVol * m_moduleServicesHi = nullptr
 
GeoPhysVol * m_moduleServicesLo = nullptr
 
std::string m_name
 

Static Private Attributes

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

Detailed Description

Definition at line 21 of file SCT_FwdRing.h.

Constructor & Destructor Documentation

◆ SCT_FwdRing() [1/2]

SCT_FwdRing::SCT_FwdRing ( const std::string &  name,
SCT_FwdModule module,
int  iWheel,
int  iRing,
int  ec,
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 37 of file SCT_FwdRing.cxx.

48  : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials, sqliteReader, mapFPV, mapAX),
49  m_iWheel(iWheel),
50  m_iRing(iRing),
51  m_endcap(ec),
53 {
54  getParameters();
57 
58 }

◆ ~SCT_FwdRing()

SCT_FwdRing::~SCT_FwdRing ( )

Definition at line 87 of file SCT_FwdRing.cxx.

88 {
89 }

◆ SCT_FwdRing() [2/2]

SCT_FwdRing::SCT_FwdRing ( const SCT_FwdRing )
delete

Member Function Documentation

◆ build()

GeoVPhysVol * SCT_FwdRing::build ( SCT_Identifier  id)
virtual

Implements SCT_UniqueComponentFactory.

Definition at line 172 of file SCT_FwdRing.cxx.

173 {
174 
175  // Physical volume for the half ring
176  GeoPhysVol * ring=nullptr;
177  bool negativeEndCap = (id.getBarrelEC() < 0);
178 
179  if(!m_sqliteReader){
180 
181  ring=new GeoPhysVol(m_logVolume);
182 
184 
185  for (int i = 0; i < m_numModules; i++){
186 
187  // As used by the identifier
188  int idNumber = i;
189 
190  // Alternate upper/lower
191  int staggerUpperLower = m_firstStagger;
192  if (i%2) staggerUpperLower = -m_firstStagger;
193 
194  // The negative endcap is rotated and so we have to play some tricks to get the
195  // identifier numbering right.
196 
197  // In order to get the identifiers going in the direction of
198  // increasing phi we have to invert them in the negative endcap.
199 
200  // Although the endcaps differ slightly (some upper/lower swaps) we build them in much the same
201  // way and change just the numbering.
202 
203  // The id number for the detector element
204  int idModule = idNumber;
205 
206  if (negativeEndCap) {
207  // identifiers go in the opposite direction for the negative endcap.
208  // We renumber so that module number "moduleZero" becomes zero.
209  idModule = (m_numModules + m_moduleZero - idNumber) % m_numModules;
210  }
211 
212  // The module is a TRD with length along z-axis.
213  // We need to rotate this so length is along the y-axis
214  // This can be achieved with a 90 deg rotation around Y.
215  // This leaves the depth axis point in the -z direction which
216  // is correct for modules mounted on the -ve side (side closest to the IP, ringSide = -1).
217  // For modules mounted on the opposite side we
218  // rotate 180 around X so that the depth axis is pointing in the same direction as z.
219  // Finally we rotate about z by phi and the 0.5*stereo (ie the u-phi or v-phi orientation)
220 
221  // It is assumed that the module is centered on the physics center (center of sensor)
222 
223  double phi = i * deltaPhi + m_startAngle;
224 
225  GeoTrf::Transform3D rot = GeoTrf::RotateZ3D(phi + 0.5 * m_module->stereoAngle() * m_stereoSign);
226  if (m_ringSide > 0) {
227  rot = rot*GeoTrf::RotateX3D(180*Gaudi::Units::degree);
228  }
229  rot = rot*GeoTrf::RotateY3D(90*Gaudi::Units::degree);
230 
231  double zPos = staggerUpperLower * m_moduleStagger * m_ringSide;
233  xyz = GeoTrf::RotateZ3D(phi)*xyz;
234  GeoTrf::Transform3D modulePos = GeoTrf::Translate3D(xyz.x(),xyz.y(),xyz.z())*rot;
235 
236 
237  // Add the module
238  std::string moduleName = "FwdModuleR" + intToString(m_iRing) + "#" + intToString(idModule);
239  ring->add(new GeoNameTag(moduleName));
240  ring->add(new GeoIdentifierTag(idModule));
241  GeoAlignableTransform * moduleTransform = new GeoAlignableTransform(modulePos);
242  ring->add(moduleTransform);
243  id.setPhiModule(idModule);
244  GeoVPhysVol * modulePV = m_module->build(id);
245  ring->add(modulePV);
246 
247  // Store alignable transform
248  m_detectorManager->addAlignableTransform(1, id.getWaferId(), moduleTransform, modulePV);
249 
250  // Add the moduleServices (contains the cooling block)
251  // In principle this should also be rotated by the stereo angle (although one
252  // would need to be care were the center of rotation is. However this is not
253  // really necessary for the services so we do not bother.
254 
255  double zModuleServices = 0;
256  double rModuleServices = 0;
257  GeoVPhysVol * moduleServices = nullptr;
258  if (staggerUpperLower > 0){ // Upper
259  zModuleServices = m_moduleServicesHiZPos * m_ringSide;
260  rModuleServices = m_moduleServicesHiRPos;
261  moduleServices = m_moduleServicesHi;
262  } else { // Lower
263  zModuleServices = m_moduleServicesLoZPos * m_ringSide;
264  rModuleServices = m_moduleServicesLoRPos;
265  moduleServices = m_moduleServicesLo;
266  }
267 
268 
269  ring->add(new GeoTransform(GeoTrf::RotateZ3D(phi)*GeoTrf::Translate3D(rModuleServices, 0, zModuleServices)));
270  ring->add(moduleServices);
271 
272  }
273  }
274  else{
275 
276 
277  for (int i = 0; i < m_numModules; i++){
278 
279  // As used by the identifier
280  int idNumber = i;
281 
282  // Alternate upper/lower
283  //int staggerUpperLower = m_firstStagger;
284  //if (i%2) staggerUpperLower = -m_firstStagger;
285 
286  // The negative endcap is rotated and so we have to play some tricks to get the
287  // identifier numbering right.
288 
289  // In order to get the identifiers going in the direction of
290  // increasing phi we have to invert them in the negative endcap.
291 
292  // Although the endcaps differ slightly (some upper/lower swaps) we build them in much the same
293  // way and change just the numbering.
294 
295  // The id number for the detector element
296  int idModule = idNumber;
297 
298  if (negativeEndCap) {
299  // identifiers go in the opposite direction for the negative endcap.
300  // We renumber so that module number "moduleZero" becomes zero.
301  idModule = (m_numModules + m_moduleZero - idNumber) % m_numModules;
302  }
303 
304  id.setPhiModule(idModule);
305  m_module->build(id);
306  std::string key="FwdModuleR" + intToString(m_iRing)+"_"+std::to_string(id.getBarrelEC())+"_"+std::to_string(id.getLayerDisk())+"_"+std::to_string(id.getEtaModule())+"_"+std::to_string(id.getPhiModule());
307 
308  // Store alignable transform
309  m_detectorManager->addAlignableTransform(1, id.getWaferId(), (*m_mapAX)[key], (*m_mapFPV)[key]);
310 
311  }
312 
313  }
314 
315  return ring;
316 }

◆ discRotated()

bool SCT_FwdRing::discRotated ( ) const
inline

Definition at line 60 of file SCT_FwdRing.h.

60 {return m_discRotated;}

◆ epsilon()

double SCT_ComponentFactory::epsilon ( ) const
protectedinherited

Definition at line 37 of file SCT_ComponentFactory.cxx.

38 {
39  return s_epsilon;
40 }

◆ getName()

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

Definition at line 35 of file SCT_ComponentFactory.h.

35 {return m_name;}

◆ getParameters()

void SCT_FwdRing::getParameters ( )
private

Definition at line 61 of file SCT_FwdRing.cxx.

62 {
63 
65  m_numModules = parameters->fwdRingNumModules(m_iRing);
66 
67  if(!m_sqliteReader){
68 
69  const SCT_GeneralParameters * generalParameters = m_geometryManager->generalParameters();
70  m_safety = generalParameters->safety();
71 
72  m_moduleStagger = parameters->fwdRingModuleStagger(m_iRing);
73  m_refStartAngle = parameters->fwdRingPhiOfRefModule(m_iRing);
74  m_refFirstStagger = parameters->fwdRingStaggerOfRefModule(m_iWheel, m_iRing, m_endcap);
75  m_ringSide = parameters->fwdWheelRingSide(m_iWheel, m_iRing, m_endcap);
76  m_stereoSign = parameters->fwdWheelStereoType(m_iWheel);
77  m_ringOffset = parameters->fwdRingDistToDiscCenter(m_iRing);
78  m_discSupportThickness = parameters->fwdDiscSupportThickness();
79  m_discRotated = (parameters->fwdRingUsualRingSide(m_iRing) != m_ringSide);
81  }
82  // Set numerology
84 
85 }

◆ identifier()

int SCT_FwdRing::identifier ( ) const
inline

Definition at line 48 of file SCT_FwdRing.h.

48 {return m_identifier;}

◆ innerRadius()

double SCT_FwdRing::innerRadius ( ) const
inline

Definition at line 55 of file SCT_FwdRing.h.

55 {return m_innerRadius;}

◆ intToString()

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

Definition at line 29 of file SCT_ComponentFactory.cxx.

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

◆ makeModuleServices()

void SCT_FwdRing::makeModuleServices ( )
private

Definition at line 327 of file SCT_FwdRing.cxx.

328 {
329  // Make an envelope to contain the two cooling blocks. Not sure if there much to gain by this
330  // rather than just adding the cooling blocks directly to the ring but it may help if we decide
331  // to add more things to it later. We call it module services.
332 
333  // Cooling blocks for the upper Modules
334  m_coolingBlockHiMain = std::make_unique<SCT_FwdCoolingBlock>("CoolingBlkHiMain",SCT_FwdCoolingBlock::UPPER, SCT_FwdCoolingBlock::MAIN,
336  m_coolingBlockHiSec = std::make_unique<SCT_FwdCoolingBlock>("CoolingBlkHiSec", SCT_FwdCoolingBlock::UPPER, SCT_FwdCoolingBlock::SECONDARY,
338  // Cooling blocks for the lower Modules
339  m_coolingBlockLoMain = std::make_unique<SCT_FwdCoolingBlock>("CoolingBlkLoMain",SCT_FwdCoolingBlock::LOWER, SCT_FwdCoolingBlock::MAIN,
341  m_coolingBlockLoSec = std::make_unique<SCT_FwdCoolingBlock>("CoolingBlkLoSec", SCT_FwdCoolingBlock::LOWER, SCT_FwdCoolingBlock::SECONDARY,
343 
344  double coolingBlkMainR = m_module->mainMountPointRadius();
345  double coolingBlkSecR = m_module->endModuleRadius(); // This is the end of the module. Align block with the end.
346  double moduleServicesHiWidth = std::max(m_coolingBlockHiMain->rphi(), m_coolingBlockHiSec->rphi());
347  double moduleServicesLoWidth = std::max(m_coolingBlockLoMain->rphi(), m_coolingBlockLoSec->rphi());
348  double moduleServicesHiLength = std::abs(coolingBlkMainR - coolingBlkSecR) + 0.5 * m_coolingBlockHiMain->deltaR();
349  double moduleServicesLoLength = std::abs(coolingBlkMainR - coolingBlkSecR) + 0.5 * m_coolingBlockLoMain->deltaR();
350  double moduleServicesHiThickness = std::max(m_coolingBlockHiMain->thickness(), m_coolingBlockHiSec->thickness());
351  double moduleServicesLoThickness = std::max(m_coolingBlockLoMain->thickness(), m_coolingBlockLoSec->thickness());
352 
353  // Radial position of this services volume. The calculation depends on whether the main cooling block is at the outer or inner radius.
354  double moduleOrientation = (coolingBlkMainR > coolingBlkSecR) ? +1 : -1;
355  m_moduleServicesHiRPos = coolingBlkMainR + moduleOrientation * (0.5 * m_coolingBlockHiMain->deltaR() - 0.5 * moduleServicesHiLength);
356  m_moduleServicesLoRPos = coolingBlkMainR + moduleOrientation * (0.5 * m_coolingBlockLoMain->deltaR() - 0.5 * moduleServicesLoLength);
357 
358  // Radial position of the mid point of the secondary cooling block
359  double coolingBlkHiSecRMid = coolingBlkSecR + moduleOrientation * 0.5 * m_coolingBlockHiSec->deltaR();
360  double coolingBlkLoSecRMid = coolingBlkSecR + moduleOrientation * 0.5 * m_coolingBlockLoSec->deltaR();
361 
362  // z position. Set so the surface closest to the disc support is at a fixed distance relative to the disc support or ring center.
363  // The distance between the disc surface and cooling block surface is obtained from the cooling block.
364  // We average the number even though they are all the same.
365  double coolingBlockOffsetHi = 0.5 * (m_coolingBlockHiMain->offsetFromDisc() + m_coolingBlockHiSec->offsetFromDisc());
366  double coolingBlockOffsetLo = 0.5 * (m_coolingBlockLoMain->offsetFromDisc() + m_coolingBlockLoSec->offsetFromDisc());
367  double moduleServicesBaseToRingCenterHi = m_ringOffset - 0.5*m_discSupportThickness - coolingBlockOffsetHi;
368  double moduleServicesBaseToRingCenterLo = m_ringOffset - 0.5*m_discSupportThickness - coolingBlockOffsetLo;
369  m_maxModuleServicesBaseToRingCenter = std::max(moduleServicesBaseToRingCenterHi, moduleServicesBaseToRingCenterLo);
370  m_moduleServicesHiZPos = -(moduleServicesBaseToRingCenterHi - 0.5 * moduleServicesHiThickness);
371  m_moduleServicesLoZPos = -(moduleServicesBaseToRingCenterLo - 0.5 * moduleServicesLoThickness);
372 
373  // For checking clearance. Position of outer surface of module service with respect to the ring center.
374  //
375  m_moduleServicesHiOuterZPos = -(moduleServicesBaseToRingCenterHi - moduleServicesHiThickness);
376  m_moduleServicesLoOuterZPos = -(moduleServicesBaseToRingCenterLo - moduleServicesLoThickness);
377 
378  const GeoBox * moduleServicesHiShape = new GeoBox(0.5*moduleServicesHiLength + m_safety,
379  0.5*moduleServicesHiWidth + m_safety,
380  0.5*moduleServicesHiThickness + m_safety);
381  const GeoBox * moduleServicesLoShape = new GeoBox(0.5*moduleServicesLoLength + m_safety,
382  0.5*moduleServicesLoWidth + m_safety,
383  0.5*moduleServicesLoThickness + m_safety);
384  const GeoLogVol * moduleServicesHiLog = new GeoLogVol("ModuleServicesHi", moduleServicesHiShape, m_materials->gasMaterial());
385  const GeoLogVol * moduleServicesLoLog = new GeoLogVol("ModuleServicesLo", moduleServicesLoShape, m_materials->gasMaterial());
386 
387  m_moduleServicesHi = new GeoPhysVol(moduleServicesHiLog);
388  m_moduleServicesLo = new GeoPhysVol(moduleServicesLoLog);
389 
390  // Add the cooling blocks
391  // Main Upper
392  m_moduleServicesHi->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkMainR - m_moduleServicesHiRPos, 0, 0)));
393  m_moduleServicesHi->add(m_coolingBlockHiMain->getVolume());
394  // Secondary Upper
395  m_moduleServicesHi->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkHiSecRMid - m_moduleServicesHiRPos, 0, 0)));
396  m_moduleServicesHi->add(m_coolingBlockHiSec->getVolume());
397  // Main Lower
398  m_moduleServicesLo->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkMainR - m_moduleServicesLoRPos, 0, 0)));
399  m_moduleServicesLo->add(m_coolingBlockLoMain->getVolume());
400  // Secondary Lower
401  m_moduleServicesLo->add(new GeoTransform(GeoTrf::Translate3D(coolingBlkLoSecRMid - m_moduleServicesLoRPos, 0, 0)));
402  m_moduleServicesLo->add(m_coolingBlockLoSec->getVolume());
403 }

◆ module()

const SCT_FwdModule* SCT_FwdRing::module ( ) const
inline

Definition at line 65 of file SCT_FwdRing.h.

65 {return m_module;}

◆ moduleStagger()

double SCT_FwdRing::moduleStagger ( ) const
inline

Definition at line 47 of file SCT_FwdRing.h.

47 {return m_moduleStagger;}

◆ numModules()

int SCT_FwdRing::numModules ( ) const
inline

Definition at line 46 of file SCT_FwdRing.h.

46 {return m_numModules;}

◆ operator=()

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

◆ outerRadius()

double SCT_FwdRing::outerRadius ( ) const
inline

Definition at line 56 of file SCT_FwdRing.h.

56 {return m_outerRadius;}

◆ preBuild()

const GeoLogVol * SCT_FwdRing::preBuild ( )
privatevirtual

Implements SCT_UniqueComponentFactory.

Definition at line 92 of file SCT_FwdRing.cxx.

93 {
94 
95  // Make a ring. This is made of two half rings. They are identical but as
96  // we need different identifiers they are made seperately.
97  // We will refer to the two halves as inner and outer.
98  // Inner will be the one closest to support when disk is on side of support
99  // furthest from IP. z of Inner < z of Outer.
100  // In later versions need to decide if I should rotate rings that are on IP side of
101  // support by 180 around x (or y) axis.
102 
103  // Make sure we have even number of modules
104  if (m_numModules % 2) std::cout << "SCT_FwdRing: Number of modules in ring must be even." << std::endl;
105 
106 
107  // We define here the module with id = 0 as the nearest module to phi = 0.
108  // It is at most 1/2 a division from 0, ie Between -0.5*divisionAngle to +0.5*divisionAngle.
109  // For old number it was the first module with positive phi.
110 
111  // The parameter refStartAngle is the angle of any module.
112  // refFirstStagger is whether this is an upper (+1) or lower (-1) module.
113  // The stagger and angle of the module with id = 0, is calculated from this.
114 
115  double angle = m_refStartAngle;
116  // If disc is rotated then recalculate the angle.
117  // It assumed the disc is rotated around the Y axis.
118  // TODO: Check this assumption.
120  double divisionAngle = 2*Gaudi::Units::pi / m_numModules;
121 
122  // Now we choose module 0 as the first module with -0.5 * divAngle < phi <= 0.5 * divAngle
123  double moduleCount = angle / divisionAngle;
124  int moduleCountInt = static_cast<int>(floor(moduleCount +0.5 -0.0001)); // The -0.0001 allows slightly positive
125  // in case of rounding errors.
126  m_startAngle = divisionAngle * (moduleCount - moduleCountInt);
127 
128  // Determine numbering for -ve endcap.
129  // This is for a rotation around Y axis.
130  // After rotation we want the first module closest to phi = 0.
131  double angleNegEC = Gaudi::Units::pi - m_startAngle;
132  double moduleCountNegEC = angleNegEC / divisionAngle;
133  m_moduleZero = static_cast<int>(floor(moduleCountNegEC + 0.5 - 0.0001));
134 
135  if(m_sqliteReader) return nullptr;
136 
137  // Determine if it is an upper or lower.
139  if (moduleCountInt % 2) m_firstStagger = -m_refFirstStagger;
140 
142 
143  // Make envelope for ring
144  double moduleClearanceZ = 0.6 * Gaudi::Units::mm; // Arbitrary choice
145  double moduleClearanceR = 0.5 * Gaudi::Units::mm;
146 
147  m_innerRadius = m_module->innerRadius() - 0.5*m_module->stereoAngle()*(0.5*m_module->innerWidth()) - moduleClearanceR;
149  + 0.5*m_module->stereoAngle()*(0.5*m_module->outerWidth()) + moduleClearanceR;
150 
151  // Calculate clearance we have. NB. This is an approximate.
152  m_thicknessOuter = 0.5 * m_module->thickness() + m_moduleStagger + moduleClearanceZ;
154  // We have to at least include 1*m_safety as the moduleservices envelope is increased by this amount.
155  // m_maxModuleServicesBaseToRingCenter is calculated in makeModuleServices()
156 
158 
159  // We want the center in z to be at the module mid plane. So we shift the volume.
160  double envelopeShift = -m_ringSide * (0.5 * m_thickness - m_thicknessOuter);
161 
162  const GeoTube * tmpShape = new GeoTube(m_innerRadius, m_outerRadius, 0.5 * m_thickness);
163  const GeoShape & ringEnvelopeShape = (*tmpShape << GeoTrf::Translate3D(0, 0, envelopeShift));
164  GeoLogVol * ringLog = new GeoLogVol(getName(), &ringEnvelopeShape, m_materials->gasMaterial());
165 
166  return ringLog;
167 }

◆ ringOffset()

double SCT_FwdRing::ringOffset ( ) const
inline

Definition at line 50 of file SCT_FwdRing.h.

50 {return m_ringOffset;}

◆ ringSide()

int SCT_FwdRing::ringSide ( ) const
inline

Definition at line 49 of file SCT_FwdRing.h.

49 {return m_ringSide;}

◆ stereoSign()

int SCT_FwdRing::stereoSign ( ) const
inline

Definition at line 58 of file SCT_FwdRing.h.

58 {return m_stereoSign;}

◆ thickness()

double SCT_FwdRing::thickness ( ) const
inline

Definition at line 52 of file SCT_FwdRing.h.

52 {return m_thickness;}

◆ thicknessInner()

double SCT_FwdRing::thicknessInner ( ) const
inline

Definition at line 53 of file SCT_FwdRing.h.

53 {return m_thicknessInner;}

◆ thicknessOuter()

double SCT_FwdRing::thicknessOuter ( ) const
inline

Definition at line 54 of file SCT_FwdRing.h.

54 {return m_thicknessOuter;}

Member Data Documentation

◆ m_coolingBlockHiMain

std::unique_ptr<SCT_FwdCoolingBlock> SCT_FwdRing::m_coolingBlockHiMain
private

Definition at line 113 of file SCT_FwdRing.h.

◆ m_coolingBlockHiSec

std::unique_ptr<SCT_FwdCoolingBlock> SCT_FwdRing::m_coolingBlockHiSec
private

Definition at line 114 of file SCT_FwdRing.h.

◆ m_coolingBlockLoMain

std::unique_ptr<SCT_FwdCoolingBlock> SCT_FwdRing::m_coolingBlockLoMain
private

Definition at line 115 of file SCT_FwdRing.h.

◆ m_coolingBlockLoSec

std::unique_ptr<SCT_FwdCoolingBlock> SCT_FwdRing::m_coolingBlockLoSec
private

Definition at line 116 of file SCT_FwdRing.h.

◆ m_detectorManager

InDetDD::SCT_DetectorManager* SCT_ComponentFactory::m_detectorManager
protectedinherited

Definition at line 41 of file SCT_ComponentFactory.h.

◆ m_discRotated

bool SCT_FwdRing::m_discRotated = false
private

Definition at line 98 of file SCT_FwdRing.h.

◆ m_discSupportThickness

double SCT_FwdRing::m_discSupportThickness = 0.0
private

Definition at line 88 of file SCT_FwdRing.h.

◆ m_endcap

int SCT_FwdRing::m_endcap
private

Definition at line 76 of file SCT_FwdRing.h.

◆ m_firstStagger

int SCT_FwdRing::m_firstStagger = 0
private

Definition at line 97 of file SCT_FwdRing.h.

◆ m_geometryManager

SCT_GeometryManager* SCT_ComponentFactory::m_geometryManager
protectedinherited

Definition at line 42 of file SCT_ComponentFactory.h.

◆ m_identifier

int SCT_FwdRing::m_identifier = 0
private

Definition at line 82 of file SCT_FwdRing.h.

◆ m_innerRadius

double SCT_FwdRing::m_innerRadius = 0.0
private

Definition at line 91 of file SCT_FwdRing.h.

◆ m_iRing

int SCT_FwdRing::m_iRing
private

Definition at line 75 of file SCT_FwdRing.h.

◆ m_iWheel

int SCT_FwdRing::m_iWheel
private

Definition at line 74 of file SCT_FwdRing.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_maxModuleServicesBaseToRingCenter

double SCT_FwdRing::m_maxModuleServicesBaseToRingCenter = 0.0
private

Definition at line 109 of file SCT_FwdRing.h.

◆ m_module

SCT_FwdModule* SCT_FwdRing::m_module
private

Definition at line 112 of file SCT_FwdRing.h.

◆ m_moduleServicesHi

GeoPhysVol* SCT_FwdRing::m_moduleServicesHi = nullptr
private

Definition at line 118 of file SCT_FwdRing.h.

◆ m_moduleServicesHiOuterZPos

double SCT_FwdRing::m_moduleServicesHiOuterZPos = 0.0
private

Definition at line 106 of file SCT_FwdRing.h.

◆ m_moduleServicesHiRPos

double SCT_FwdRing::m_moduleServicesHiRPos = 0.0
private

Definition at line 101 of file SCT_FwdRing.h.

◆ m_moduleServicesHiZPos

double SCT_FwdRing::m_moduleServicesHiZPos = 0.0
private

Definition at line 103 of file SCT_FwdRing.h.

◆ m_moduleServicesLo

GeoPhysVol* SCT_FwdRing::m_moduleServicesLo = nullptr
private

Definition at line 119 of file SCT_FwdRing.h.

◆ m_moduleServicesLoOuterZPos

double SCT_FwdRing::m_moduleServicesLoOuterZPos = 0.0
private

Definition at line 107 of file SCT_FwdRing.h.

◆ m_moduleServicesLoRPos

double SCT_FwdRing::m_moduleServicesLoRPos = 0.0
private

Definition at line 102 of file SCT_FwdRing.h.

◆ m_moduleServicesLoZPos

double SCT_FwdRing::m_moduleServicesLoZPos = 0.0
private

Definition at line 104 of file SCT_FwdRing.h.

◆ m_moduleStagger

double SCT_FwdRing::m_moduleStagger = 0.0
private

Definition at line 80 of file SCT_FwdRing.h.

◆ m_moduleZero

int SCT_FwdRing::m_moduleZero = 0
private

Definition at line 99 of file SCT_FwdRing.h.

◆ m_name

std::string SCT_ComponentFactory::m_name
privateinherited

Definition at line 49 of file SCT_ComponentFactory.h.

◆ m_numModules

int SCT_FwdRing::m_numModules = 0
private

Definition at line 79 of file SCT_FwdRing.h.

◆ m_outerRadius

double SCT_FwdRing::m_outerRadius = 0.0
private

Definition at line 92 of file SCT_FwdRing.h.

◆ m_refFirstStagger

int SCT_FwdRing::m_refFirstStagger = 0
private

Definition at line 86 of file SCT_FwdRing.h.

◆ m_refStartAngle

double SCT_FwdRing::m_refStartAngle = 0.0
private

Definition at line 85 of file SCT_FwdRing.h.

◆ m_ringOffset

double SCT_FwdRing::m_ringOffset = 0.0
private

Definition at line 87 of file SCT_FwdRing.h.

◆ m_ringSide

int SCT_FwdRing::m_ringSide = 0
private

Definition at line 83 of file SCT_FwdRing.h.

◆ m_safety

double SCT_FwdRing::m_safety = 0.0
private

Definition at line 81 of file SCT_FwdRing.h.

◆ m_sqliteReader

GeoModelIO::ReadGeoModel* SCT_UniqueComponentFactory::m_sqliteReader
protectedinherited

Definition at line 91 of file SCT_ComponentFactory.h.

◆ m_startAngle

double SCT_FwdRing::m_startAngle = 0.0
private

Definition at line 96 of file SCT_FwdRing.h.

◆ m_stereoSign

int SCT_FwdRing::m_stereoSign = 0
private

Definition at line 84 of file SCT_FwdRing.h.

◆ m_thickness

double SCT_FwdRing::m_thickness = 0.0
private

Definition at line 93 of file SCT_FwdRing.h.

◆ m_thicknessInner

double SCT_FwdRing::m_thicknessInner = 0.0
private

Definition at line 94 of file SCT_FwdRing.h.

◆ m_thicknessOuter

double SCT_FwdRing::m_thicknessOuter = 0.0
private

Definition at line 95 of file SCT_FwdRing.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_FwdRing::m_thickness
double m_thickness
Definition: SCT_FwdRing.h:93
SCT_FwdRing::m_iWheel
int m_iWheel
Definition: SCT_FwdRing.h:74
SCT_ComponentFactory::m_geometryManager
SCT_GeometryManager * m_geometryManager
Definition: SCT_ComponentFactory.h:42
SCT_FwdRing::m_module
SCT_FwdModule * m_module
Definition: SCT_FwdRing.h:112
SCT_ComponentFactory::m_name
std::string m_name
Definition: SCT_ComponentFactory.h:49
SCT_FwdRing::m_moduleServicesLoOuterZPos
double m_moduleServicesLoOuterZPos
Definition: SCT_FwdRing.h:107
SCT_FwdModule::stereoAngle
double stereoAngle() const
Definition: SCT_FwdModule.h:47
InDetDD::SiDetectorManager::numerology
const SiNumerology & numerology() const
Access Numerology.
Definition: SiDetectorManager.h:126
SCT_UniqueComponentFactory::m_mapFPV
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
Definition: SCT_ComponentFactory.h:95
max
#define max(a, b)
Definition: cfImp.cxx:41
SCT_GeneralParameters::safety
double safety() const
Definition: SCT_GeneralParameters.cxx:48
SCT_FwdRing::m_startAngle
double m_startAngle
Definition: SCT_FwdRing.h:96
SCT_FwdRing::m_ringSide
int m_ringSide
Definition: SCT_FwdRing.h:83
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
SCT_FwdRing::m_innerRadius
double m_innerRadius
Definition: SCT_FwdRing.h:91
SCT_FwdRing::makeModuleServices
void makeModuleServices()
Definition: SCT_FwdRing.cxx:327
SCT_UniqueComponentFactory::m_mapAX
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
Definition: SCT_ComponentFactory.h:96
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
SCT_FwdRing::m_refFirstStagger
int m_refFirstStagger
Definition: SCT_FwdRing.h:86
SCT_FwdRing::m_moduleStagger
double m_moduleStagger
Definition: SCT_FwdRing.h:80
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_FwdRing::m_coolingBlockLoSec
std::unique_ptr< SCT_FwdCoolingBlock > m_coolingBlockLoSec
Definition: SCT_FwdRing.h:116
SCT_FwdRing::m_identifier
int m_identifier
Definition: SCT_FwdRing.h:82
SCT_FwdModule::build
virtual GeoVPhysVol * build(SCT_Identifier id)
Definition: SCT_FwdModule.cxx:174
xyz
#define xyz
SCT_GeometryManager::forwardParameters
const SCT_ForwardParameters * forwardParameters() const
Definition: SCT_GeometryManager.cxx:98
SCT_FwdRing::m_iRing
int m_iRing
Definition: SCT_FwdRing.h:75
SCT_FwdRing::m_coolingBlockLoMain
std::unique_ptr< SCT_FwdCoolingBlock > m_coolingBlockLoMain
Definition: SCT_FwdRing.h:115
SCT_FwdRing::m_discSupportThickness
double m_discSupportThickness
Definition: SCT_FwdRing.h:88
SCT_FwdCoolingBlock::LOWER
@ LOWER
Definition: SCT_FwdCoolingBlock.h:28
SCT_FwdModule::innerWidth
double innerWidth() const
Definition: SCT_FwdModule.h:53
SCT_ComponentFactory::m_detectorManager
InDetDD::SCT_DetectorManager * m_detectorManager
Definition: SCT_ComponentFactory.h:41
SCT_FwdRing::m_moduleZero
int m_moduleZero
Definition: SCT_FwdRing.h:99
SCT_FwdRing::m_coolingBlockHiMain
std::unique_ptr< SCT_FwdCoolingBlock > m_coolingBlockHiMain
Definition: SCT_FwdRing.h:113
SCT_FwdRing::m_refStartAngle
double m_refStartAngle
Definition: SCT_FwdRing.h:85
SCT_GeometryManager::generalParameters
const SCT_GeneralParameters * generalParameters() const
Definition: SCT_GeometryManager.cxx:105
pi
#define pi
Definition: TileMuonFitter.cxx:65
SCT_FwdRing::m_moduleServicesLoRPos
double m_moduleServicesLoRPos
Definition: SCT_FwdRing.h:102
SCT_FwdRing::module
const SCT_FwdModule * module() const
Definition: SCT_FwdRing.h:65
SCT_FwdModule::endModuleRadius
double endModuleRadius() const
Definition: SCT_FwdModule.h:65
SCT_FwdCoolingBlock::SECONDARY
@ SECONDARY
Definition: SCT_FwdCoolingBlock.h:30
SCT_FwdModule::outerWidth
double outerWidth() const
Definition: SCT_FwdModule.h:52
SCT_FwdRing::m_ringOffset
double m_ringOffset
Definition: SCT_FwdRing.h:87
lumiFormat.i
int i
Definition: lumiFormat.py:92
SCT_FwdModule::thickness
double thickness() const
Definition: SCT_FwdModule.h:54
SCT_MaterialManager::gasMaterial
const GeoMaterial * gasMaterial() const
Definition: SCT_MaterialManager.cxx:80
SCT_FwdRing::m_maxModuleServicesBaseToRingCenter
double m_maxModuleServicesBaseToRingCenter
Definition: SCT_FwdRing.h:109
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:73
sqr
double sqr(double x)
Definition: SCT_FwdRing.cxx:35
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
SCT_FwdRing::m_numModules
int m_numModules
Definition: SCT_FwdRing.h:79
SCT_FwdRing::m_moduleServicesHiZPos
double m_moduleServicesHiZPos
Definition: SCT_FwdRing.h:103
SCT_ComponentFactory::intToString
std::string intToString(int i) const
Definition: SCT_ComponentFactory.cxx:29
SCT_FwdRing::m_moduleServicesHi
GeoPhysVol * m_moduleServicesHi
Definition: SCT_FwdRing.h:118
SCT_GeneralParameters
Definition: SCT_GeneralParameters.h:16
SCT_FwdRing::m_outerRadius
double m_outerRadius
Definition: SCT_FwdRing.h:92
SCT_FwdCoolingBlock::MAIN
@ MAIN
Definition: SCT_FwdCoolingBlock.h:29
SCT_ComponentFactory::s_epsilon
static const double s_epsilon
Definition: SCT_ComponentFactory.h:50
SCT_FwdCoolingBlock::UPPER
@ UPPER
Definition: SCT_FwdCoolingBlock.h:27
SCT_FwdRing::m_stereoSign
int m_stereoSign
Definition: SCT_FwdRing.h:84
SCT_FwdRing::getParameters
void getParameters()
Definition: SCT_FwdRing.cxx:61
InDetDD::SiNumerology::setNumPhiModulesForDiskRing
void setNumPhiModulesForDiskRing(int disk, int ring, int nPhiModules)
Definition: SiNumerology.cxx:55
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
SCT_FwdModule::innerRadius
double innerRadius() const
Definition: SCT_FwdModule.h:56
SCT_FwdRing::preBuild
virtual const GeoLogVol * preBuild()
Definition: SCT_FwdRing.cxx:92
SCT_FwdRing::m_moduleServicesHiOuterZPos
double m_moduleServicesHiOuterZPos
Definition: SCT_FwdRing.h:106
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
SCT_FwdRing::m_firstStagger
int m_firstStagger
Definition: SCT_FwdRing.h:97
SCT_FwdModule::outerRadius
double outerRadius() const
Definition: SCT_FwdModule.h:57
SCT_UniqueComponentFactory::m_logVolume
const GeoLogVol * m_logVolume
Definition: SCT_ComponentFactory.h:90
SCT_FwdRing::m_moduleServicesHiRPos
double m_moduleServicesHiRPos
Definition: SCT_FwdRing.h:101
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
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
SCT_FwdModule::mainMountPointRadius
double mainMountPointRadius() const
Definition: SCT_FwdModule.h:63
SCT_FwdRing::m_safety
double m_safety
Definition: SCT_FwdRing.h:81
SCT_FwdRing::m_discRotated
bool m_discRotated
Definition: SCT_FwdRing.h:98
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
SCT_FwdModule::sensorCenterRadius
double sensorCenterRadius() const
Definition: SCT_FwdModule.h:60
SCT_FwdRing::m_endcap
int m_endcap
Definition: SCT_FwdRing.h:76
str
Definition: BTagTrackIpAccessor.cxx:11
SCT_UniqueComponentFactory::m_sqliteReader
GeoModelIO::ReadGeoModel * m_sqliteReader
Definition: SCT_ComponentFactory.h:91
SCT_FwdRing::m_moduleServicesLo
GeoPhysVol * m_moduleServicesLo
Definition: SCT_FwdRing.h:119
SCT_ComponentFactory::getName
const std::string & getName() const
Definition: SCT_ComponentFactory.h:35
SCT_FwdRing::m_thicknessOuter
double m_thicknessOuter
Definition: SCT_FwdRing.h:95
SCT_FwdRing::m_coolingBlockHiSec
std::unique_ptr< SCT_FwdCoolingBlock > m_coolingBlockHiSec
Definition: SCT_FwdRing.h:114
python.SystemOfUnits.degree
tuple degree
Definition: SystemOfUnits.py:106
SCT_FwdRing::m_moduleServicesLoZPos
double m_moduleServicesLoZPos
Definition: SCT_FwdRing.h:104
SCT_ForwardParameters
Definition: SCT_ForwardParameters.h:16
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
SCT_FwdRing::m_thicknessInner
double m_thicknessInner
Definition: SCT_FwdRing.h:94