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

#include <GeoPixelLadderServices.h>

Inheritance diagram for GeoPixelLadderServices:
Collaboration diagram for GeoPixelLadderServices:

Public Member Functions

 GeoPixelLadderServices (InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoModelIO::ReadGeoModel *sqliteReader, std::shared_ptr< std::map< std::string, GeoFullPhysVol * >> mapFPV, std::shared_ptr< std::map< std::string, GeoAlignableTransform * >> mapAX, int ladderType)
 
 GeoPixelLadderServices (const GeoPixelLadderServices &)=delete
 
GeoPixelLadderServicesoperator= (const GeoPixelLadderServices &)=delete
 
virtual ~GeoPixelLadderServices ()=default
 
virtual GeoVPhysVol * Build () override
 
const GeoTrf::Vector3D & envelopeCornerA1 ()
 
const GeoTrf::Vector3D & envelopeCornerA2 ()
 
const GeoTrf::Vector3D & envelopeCornerC1 ()
 
const GeoTrf::Vector3D & envelopeCornerC2 ()
 
double referenceX ()
 
double referenceY ()
 
GeoVPhysVol * BuildAlTube ()
 
GeoVPhysVol * BuildOmega ()
 
void BuildGlue (GeoPhysVol *parent)
 
void BuildPigtailAndConnector (GeoPhysVol *parent)
 

Protected Attributes

PixelGeometryManagerm_gmt_mgr
 
InDetMaterialManagerm_mat_mgr
 
InDetDD::PixelDetectorManagerm_DDmgr
 
GeoModelIO::ReadGeoModel * m_sqliteReader
 
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
 
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
 
const double m_epsilon
 

Private Attributes

GeoIntrusivePtr< const GeoLogVol > m_ladderServicesLV {}
 
int m_ladderType
 
GeoTrf::Vector3D m_envelopeCornerA1
 
GeoTrf::Vector3D m_envelopeCornerA2
 
GeoTrf::Vector3D m_envelopeCornerC1
 
GeoTrf::Vector3D m_envelopeCornerC2
 
double m_xOffset
 
double m_yOffset
 

Detailed Description

Definition at line 15 of file GeoPixelLadderServices.h.

Constructor & Destructor Documentation

◆ GeoPixelLadderServices() [1/2]

GeoPixelLadderServices::GeoPixelLadderServices ( InDetDD::PixelDetectorManager ddmgr,
PixelGeometryManager mgr,
GeoModelIO::ReadGeoModel *  sqliteReader,
std::shared_ptr< std::map< std::string, GeoFullPhysVol * >>  mapFPV,
std::shared_ptr< std::map< std::string, GeoAlignableTransform * >>  mapAX,
int  ladderType 
)

Definition at line 26 of file GeoPixelLadderServices.cxx.

32  : GeoVPixelFactory(m_DDmgr, mgr, sqliteReader, mapFPV, mapAX),
33  m_ladderType(ladderType)
34 {
35  //std::cout << "Building GeoPixelLadderServices with ladder type : " << ladderType << std::endl;
36  //
37  // Define the log volume in the constructor, so I do it only once.
38  //
39  // Length and thickness of the Omega are in the db
40  //
41  double halflength =0.5* m_gmt_mgr->PixelLadderLength()+m_epsilon;
42  //
43  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
44  //
45  //const GeoBox* ladderSvcBox = new GeoBox(thickness/2.,width/2.,halflength);
46  // Quick fix - we hardwire the numbers. Need to work out a way to extract this from the database numbers.
47  double safety = 0.01*Gaudi::Units::mm;
48  double xBase = 0;
49 
50  // ConnA: Part to fit Connector
51  // ConnC: Part to fit Cable
52 
53  double xOffsetConnA = xBase + m_gmt_mgr->PixelLadderCableOffsetX() - m_gmt_mgr->PixelLadderServicesX();
54  double xOffsetConnC = xOffsetConnA;
55 
56 
57  //double xMaxConnA = 1.250 * Gaudi::Units::cm + xOffsetConnA + safety;
58  // double xMaxConnC = 1.6575 * Gaudi::Units::cm + xOffsetConnC + safety;
59  // max offset is 12.5mm + 1/2 thickness of cables
60  // double xMaxConnA = 1.5075 * Gaudi::Units::cm + 0.5* 0.15*Gaudi::Units::cm + xOffsetConnA + safety;
61  double xMaxConnA = m_gmt_mgr->PixelConnectorPosX(1) + 0.5*m_gmt_mgr->PixelConnectorWidthX(1) + xOffsetConnA + safety;
62  double xMaxConnC = 1.25 * Gaudi::Units::cm + 0.5* 0.0125*Gaudi::Units::cm + xOffsetConnC + safety;
63  double xMaxOmegaBase = 0.055 * Gaudi::Units::cm + xBase + 1*Gaudi::Units::mm; // The 1 mm is just extra safety.
64  double yWidthConnA = 1.0 * Gaudi::Units::cm;
65  double yWidthConnC = 0.2 * Gaudi::Units::cm;
67  double yPosConnC = yPosConnA;
68  double xCenter = 0;
69  double xWidthOmegaBase = xMaxOmegaBase - xBase;
70  double xWidthConnA = xMaxConnA - xBase;
71  double xWidthConnC = xMaxConnC - xBase;
72  double yWidthOmega = 1.2*Gaudi::Units::cm + m_epsilon;
73 
74  const GeoBox* omegaBaseEnv = new GeoBox(0.5*xWidthOmegaBase, 0.5*yWidthOmega, halflength);
75  const GeoBox* connAEnv = new GeoBox(0.5*xWidthConnA, 0.5*yWidthConnA + safety, halflength);
76  const GeoBox* connCEnv = new GeoBox(0.5*xWidthConnC, 0.5*yWidthConnC + safety, halflength);
77  GeoTrf::Transform3D omegaBaseShift = GeoTrf::Translate3D(xBase + 0.5*xWidthOmegaBase - xCenter, 0., 0.);
78  GeoTrf::Transform3D connAShift = GeoTrf::Translate3D(xBase + 0.5*xWidthConnA - xCenter, yPosConnA, 0.);
79  GeoTrf::Transform3D connCShift = GeoTrf::Translate3D(xBase + 0.5*xWidthConnC - xCenter, yPosConnC, 0.);
80 
81  const GeoShape & ladderSvcShape = ((*omegaBaseEnv) << omegaBaseShift)
82  .add(*connAEnv << connAShift)
83  .add(*connCEnv << connCShift);
84 
85  m_ladderServicesLV = new GeoLogVol("LadderSvc",&ladderSvcShape,air);
86  // store coordinates of corners of envelope.
87  m_envelopeCornerA1 = GeoTrf::Vector3D(xMaxConnA - xCenter, yPosConnA + 0.5* yWidthConnA + safety, 0.);
88  m_envelopeCornerA2 = GeoTrf::Vector3D(xMaxConnA - xCenter, yPosConnA - 0.5* yWidthConnA + safety, 0.);
89  m_envelopeCornerC1 = GeoTrf::Vector3D(xMaxConnC - xCenter, yPosConnC + 0.5* yWidthConnC + safety, 0.);
90  m_envelopeCornerC2 = GeoTrf::Vector3D(xMaxConnC - xCenter, yPosConnC - 0.5* yWidthConnC + safety, 0.);
91 
92 
93  m_xOffset = xBase;
94  m_yOffset = 0;
95 
96 }

◆ GeoPixelLadderServices() [2/2]

GeoPixelLadderServices::GeoPixelLadderServices ( const GeoPixelLadderServices )
delete

◆ ~GeoPixelLadderServices()

virtual GeoPixelLadderServices::~GeoPixelLadderServices ( )
virtualdefault

Member Function Documentation

◆ Build()

GeoVPhysVol * GeoPixelLadderServices::Build ( )
overridevirtual

Implements GeoVPixelFactory.

Definition at line 101 of file GeoPixelLadderServices.cxx.

101  {
102  GeoPhysVol* ladderSvcPhys = new GeoPhysVol(m_ladderServicesLV);
103  //double thickness = m_gmt_mgr->PixelLadderThickness()+m_gmt_mgr->PixelCableThickness();
104  //double thickness = m_gmt_mgr->PixelLadderThickness() + m_gmt_mgr->PixelCableThickness() + 0.25*Gaudi::Units::cm; // plus 0.25 cm New DC3 ???
105  //double thickness = m_gmt_mgr->PixelLadderThickness()+ 6.5; // m_gmt_mgr->PixelCableThickness() was 0.4 cm, plus 0.25 cm New DC3
106  //
107  // The Glue
108  BuildGlue(ladderSvcPhys);
109 
110  // The aluminium tube
111  // Positioned at 0,0,0 relative to parent.
112  ladderSvcPhys->add(this->BuildAlTube());
113 
114  // The carbon-carbon Omega
115  // Positioned at 0,0,0 relative to parent.
116  ladderSvcPhys->add(this->BuildOmega());
117 
118  //
119  // Put the fluid/gaz mixture
120  //
122  double xpos = fluid.posX() + m_xOffset;
123  double ypos = fluid.posY() + m_yOffset;
124  double zpos = fluid.posZ();
125 
126  GeoVPhysVol* fluidPhys = fluid.Build();
127  GeoTransform* xform = new GeoTransform(GeoTrf::Translate3D(xpos,ypos,zpos));
128  ladderSvcPhys->add(xform);
129  ladderSvcPhys->add(fluidPhys);
130 
131  //
132  // Place Pigtail + connector
133  //
134  BuildPigtailAndConnector(ladderSvcPhys);
135 
136 
137  //
138  // Cables
139  //
141  for (int ii = 0; ii < cable.numElements(); ii++) {
142  cable.setElement(ii);
143  GeoVPhysVol* phys = cable.Build();
144  double xpos = m_xOffset + cable.getStackOffset() + m_gmt_mgr->PixelLadderCableOffsetX() - m_gmt_mgr->PixelLadderServicesX();
146  double zpos = cable.zpos();
147  GeoTransform* xform = new GeoTransform(GeoTrf::Translate3D(xpos,ypos,zpos));
148  ladderSvcPhys->add(xform);
149  ladderSvcPhys->add(phys);
150  }
151 
152  return ladderSvcPhys;
153 }

◆ BuildAlTube()

GeoVPhysVol * GeoPixelLadderServices::BuildAlTube ( )

Definition at line 240 of file GeoPixelLadderServices.cxx.

240  {
241 
242  double xOffset = m_xOffset;
243  double yOffset = m_yOffset;
244 
245  /*
246  double xUpperBend = xOffset + 2.7*Gaudi::Units::mm;
247  double yUpperBend = yOffset;
248  double radUpperBend = 2.0*Gaudi::Units::mm;
249  double xLowerBend = xOffset + 0.55;
250  double yLowerBend = yOffset+1.925*Gaudi::Units::mm;
251  double radLowerBend = 0.5*Gaudi::Units::mm;
252  double thick = 0.2*Gaudi::Units::mm;
253  double length = 838*Gaudi::Units::mm;
254  double zOffset = 0;
255  */
256 
257  double xUpperBend = xOffset + m_gmt_mgr->PixelAlTubeUpperBendX();
258  double yUpperBend = yOffset + m_gmt_mgr->PixelAlTubeUpperBendY();
259  double radUpperBend = m_gmt_mgr->PixelAlTubeUpperBendRadius();
260  double xLowerBend = xOffset + m_gmt_mgr->PixelAlTubeLowerBendX();
261  double yLowerBend = yOffset + m_gmt_mgr->PixelAlTubeLowerBendY();
262  double radLowerBend = m_gmt_mgr->PixelAlTubeLowerBendRadius();
263  double thick = m_gmt_mgr->PixelAlTubeWallThickness();
264  double length = m_gmt_mgr->PixelAlTubeLength();
265  double zOffset = 0;
266 
267  double sepX = (xUpperBend - xLowerBend);
268  double sepY = (yUpperBend - yLowerBend);
269  double sep2 = sepX*sepX+sepY*sepY;
270  double sep = sqrt(sep2);
271  double radDist = radUpperBend-radLowerBend;
272  double alpha = atan(-sepY/sepX) - asin(radDist/sep);
273  double upperStraightLength = sqrt(sep2 - radDist*radDist);
274  double xLowerStraight = xLowerBend + (radLowerBend-0.5*thick)*sin(alpha);
275  double yLowerStraight = yLowerBend + (radLowerBend-0.5*thick)*cos(alpha);
276  double xUpperStraight = xUpperBend + (radUpperBend-0.5*thick)*sin(alpha);
277  double yUpperStraight = yUpperBend + (radUpperBend-0.5*thick)*cos(alpha);
278 
279 
280  // Tube sector for upper bend
281  GeoTubs * upperBendShape = new GeoTubs(radUpperBend - thick, radUpperBend, 0.5* length, alpha-0.5*Gaudi::Units::pi, Gaudi::Units::pi - 2*alpha);
282 
283  // Tube sector for lower bend (+y)
284  GeoTubs * lowerBendShapeP = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, 0.5*Gaudi::Units::pi-alpha, 0.5*Gaudi::Units::pi+alpha);
285 
286  // Tube sector for lower bend (-y)
287  GeoTubs * lowerBendShapeM = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, Gaudi::Units::pi, 0.5*Gaudi::Units::pi+alpha);
288 
289  // Lower Straight section
290  GeoBox * lowerStraightBox = new GeoBox(0.5*thick, yLowerBend, 0.5*length);
291 
292  // Upper Straight section (+-y)
293  GeoBox * upperStraightBox = new GeoBox(0.5*thick, 0.5*upperStraightLength, 0.5*length);
294 
295  // Put it all together
296  const GeoShape & alTubeShape =
297  (*lowerStraightBox << GeoTrf::Translate3D(xLowerBend-radLowerBend+0.5*thick,0,zOffset) )
298  .add(*lowerBendShapeP << GeoTrf::Translate3D(xLowerBend,yLowerBend,zOffset) )
299  .add(*upperStraightBox << GeoTrf::Translate3D(0.5*(xLowerStraight+xUpperStraight),0.5*(yLowerStraight+yUpperStraight),zOffset)*GeoTrf::RotateZ3D(0.5*Gaudi::Units::pi-alpha) )
300  .add(*upperBendShape << GeoTrf::Translate3D(xUpperBend,yUpperBend,zOffset) )
301  .add(*upperStraightBox << GeoTrf::Translate3D(0.5*(xLowerStraight+xUpperStraight),-0.5*(yLowerStraight+yUpperStraight),zOffset)*GeoTrf::RotateZ3D(0.5*Gaudi::Units::pi+alpha) )
302  .add(*lowerBendShapeM << GeoTrf::Translate3D(xLowerBend,-yLowerBend,zOffset) );
303 
304  double totVolume =
305  lowerStraightBox->volume()
306  + lowerBendShapeP->volume()
307  + 2*upperStraightBox->volume()
308  + upperBendShape->volume()
309  + lowerBendShapeM->volume();
310 
311 
312  std::string matName = m_gmt_mgr->getMaterialName("AlTube", m_gmt_mgr->GetLD());
313  const GeoMaterial* alMat = m_mat_mgr->getMaterialForVolume(matName,totVolume);
314  GeoLogVol* tubeLV = new GeoLogVol("AlTube",&alTubeShape,alMat);
315  return new GeoPhysVol(tubeLV);
316 
317 
318 }

◆ BuildGlue()

void GeoPixelLadderServices::BuildGlue ( GeoPhysVol *  parent)

Definition at line 320 of file GeoPixelLadderServices.cxx.

320  {
321 
322 
323  int nGlueElements = m_gmt_mgr->PixelNumOmegaGlueElements();
324  for (int i = 0; i < nGlueElements; ++i) {
325  double x1 = m_gmt_mgr->PixelOmegaGlueStartX(i);
326  double thickness = m_gmt_mgr->PixelOmegaGlueThickness(i);
327  double y1 = m_gmt_mgr->PixelOmegaGlueStartY(i);
328  double y2 = m_gmt_mgr->PixelOmegaGlueEndY(i);
330  double zOffset = m_gmt_mgr->PixelOmegaGluePosZ(i);
332 
333  GeoBox * glueShape = new GeoBox(0.5*thickness, 0.5*std::abs(y1-y2), 0.5*length);
334  std::string matName = m_gmt_mgr->getMaterialName("GlueOmegaStave", m_gmt_mgr->GetLD(), typeNum);
335  const GeoMaterial* glueMat = m_mat_mgr->getMaterialForVolume(matName, glueShape->volume());
336  GeoLogVol* glueLV = new GeoLogVol("Glue",glueShape,glueMat);
337  GeoPhysVol* gluePV = new GeoPhysVol(glueLV);
338 
339  GeoTransform * xform = new GeoTransform(GeoTrf::Translate3D(m_xOffset+x1+0.5*thickness, m_yOffset-0.5*(y1+y2), zOffset));
340 
341  parent->add(xform);
342  parent->add(gluePV);
343  }
344 }

◆ BuildOmega()

GeoVPhysVol * GeoPixelLadderServices::BuildOmega ( )

Definition at line 155 of file GeoPixelLadderServices.cxx.

155  {
156 
157  double xOffset = m_xOffset;
158  double yOffset = m_yOffset;
159  /*
160  double xUpperBend = xOffset + 2.9*Gaudi::Units::mm;
161  double yUpperBend = yOffset + 0;
162  double radUpperBend = 2.3*Gaudi::Units::mm;
163  double xLowerBend = xOffset + 0.9;
164  double yLowerBend = yOffset + 3.35*Gaudi::Units::mm;
165  double radLowerBend = 0.8*Gaudi::Units::mm;
166  double yStart= yOffset + (4.675+0.5*2.65)*Gaudi::Units::mm;
167  double yEnd = yOffset -yStart;
168  double thick = 0.3*Gaudi::Units::mm;
169  double length = 816*Gaudi::Units::mm;
170  double zOffset = 0;
171  */
172  double xUpperBend = xOffset + m_gmt_mgr->PixelOmegaUpperBendX();
173  double yUpperBend = yOffset + m_gmt_mgr->PixelOmegaUpperBendY();
174  double radUpperBend = m_gmt_mgr->PixelOmegaUpperBendRadius();
175  double xLowerBend = xOffset + m_gmt_mgr->PixelOmegaLowerBendX();
176  double yLowerBend = yOffset + m_gmt_mgr->PixelOmegaLowerBendY();
177  double radLowerBend = m_gmt_mgr->PixelOmegaLowerBendRadius();
178  double yStart= yOffset + m_gmt_mgr->PixelOmegaStartY();
179  double yEnd = yOffset + m_gmt_mgr->PixelOmegaEndY();
180  double thick = m_gmt_mgr->PixelOmegaWallThickness();
181  double length = m_gmt_mgr->PixelOmegaLength();
182  double zOffset = 0;
183 
184  double sepX = (xUpperBend - xLowerBend);
185  double sepY = (yUpperBend - yLowerBend);
186  double sep2 = sepX*sepX+sepY*sepY;
187  double sep = sqrt(sep2);
188  double radDist = radUpperBend+radLowerBend-thick;
189  double alpha = atan(-sepY/sepX) - asin(radDist/sep);
190  double upperStraightLength = sqrt(sep2 - radDist*radDist);
191  double xLowerStraight = xLowerBend - (radLowerBend-0.5*thick)*sin(alpha);
192  double yLowerStraight = yLowerBend - (radLowerBend-0.5*thick)*cos(alpha);
193  double xUpperStraight = xUpperBend + (radUpperBend-0.5*thick)*sin(alpha);
194  double yUpperStraight = yUpperBend + (radUpperBend-0.5*thick)*cos(alpha);
195 
196 
197  // Tube sector for upper bend
198  GeoTubs * upperBendShape = new GeoTubs(radUpperBend - thick, radUpperBend, 0.5* length, alpha-0.5*Gaudi::Units::pi, Gaudi::Units::pi - 2*alpha);
199 
200  // Tube sector for lower bend (+y)
201  GeoTubs * lowerBendShapeP = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, Gaudi::Units::pi, 0.5*Gaudi::Units::pi-alpha);
202 
203  // Tube sector for lower bend (-y)
204  GeoTubs * lowerBendShapeM = new GeoTubs(radLowerBend - thick, radLowerBend, 0.5* length, 0.5*Gaudi::Units::pi + alpha, 0.5*Gaudi::Units::pi-alpha);
205 
206  // Lower Straight section (+y)
207  GeoBox * lowerStraightBoxP = new GeoBox(0.5*thick, 0.5*(yStart - yLowerBend), 0.5*length);
208 
209  // Lower Straight section (-y)
210  GeoBox * lowerStraightBoxM = new GeoBox(0.5*thick, 0.5*(-yLowerBend - yEnd), 0.5*length);
211 
212  // Upper Straight section (+-y)
213  GeoBox * upperStraightBox = new GeoBox(0.5*thick, 0.5*upperStraightLength, 0.5*length);
214 
215  // Put it all together
216  const GeoShape & omegaShape =
217  (*lowerStraightBoxP << GeoTrf::Translate3D(xLowerBend-radLowerBend+0.5*thick,0.5*(yLowerBend+yStart),zOffset) )
218  .add(*lowerBendShapeP << GeoTrf::Translate3D(xLowerBend,yLowerBend,zOffset) )
219  .add(*upperStraightBox << GeoTrf::Translate3D(0.5*(xLowerStraight+xUpperStraight),0.5*(yLowerStraight+yUpperStraight),zOffset)*GeoTrf::RotateZ3D(0.5*Gaudi::Units::pi-alpha) )
220  .add(*upperBendShape << GeoTrf::Translate3D(xUpperBend,yUpperBend,zOffset) )
221  .add(*upperStraightBox << GeoTrf::Translate3D(0.5*(xLowerStraight+xUpperStraight),-0.5*(yLowerStraight+yUpperStraight),zOffset)*GeoTrf::RotateZ3D(0.5*Gaudi::Units::pi+alpha) )
222  .add(*lowerBendShapeM << GeoTrf::Translate3D(xLowerBend,-yLowerBend,zOffset) )
223  .add(*lowerStraightBoxM << GeoTrf::Translate3D(xLowerBend-radLowerBend+0.5*thick,0.5*(-yLowerBend+yEnd),zOffset) );
224 
225  double totVolume =
226  lowerStraightBoxP->volume()
227  + lowerBendShapeP->volume()
228  + 2*upperStraightBox->volume()
229  + upperBendShape->volume()
230  + lowerBendShapeM->volume()
231  + lowerStraightBoxM->volume();
232 
233  std::string matName = m_gmt_mgr->getMaterialName("Omega", m_gmt_mgr->GetLD());
234  const GeoMaterial* omegaMat = m_mat_mgr->getMaterialForVolume(matName,totVolume);
235  GeoLogVol* omegaLV = new GeoLogVol("Omega",&omegaShape,omegaMat);
236  return new GeoPhysVol(omegaLV);
237 
238 }

◆ BuildPigtailAndConnector()

void GeoPixelLadderServices::BuildPigtailAndConnector ( GeoPhysVol *  parent)

Definition at line 347 of file GeoPixelLadderServices.cxx.

347  {
348 
351 
352  // Pigtail flat section
353  double xPosPigtail = xOffset + m_gmt_mgr->PixelPigtailPosX();
354  double yPosPigtail = yOffset + 0.5*(m_gmt_mgr->PixelPigtailStartY() + m_gmt_mgr->PixelPigtailEndY());
355  double zPosPigtail = m_gmt_mgr->PixelPigtailPosZ();
356  double xWidthPigtail = m_gmt_mgr->PixelPigtailThickness();
357  double yWidthPigtail = std::abs(m_gmt_mgr->PixelPigtailStartY() - m_gmt_mgr->PixelPigtailEndY());
358  double zWidthPigtail = m_gmt_mgr->PixelPigtailFlatWidthZ();
359  std::string matNamePigtail = m_gmt_mgr->getMaterialName("PigtailFlat", m_gmt_mgr->GetLD());
360  GeoBox * pigtailShape = new GeoBox(0.5*xWidthPigtail, 0.5*yWidthPigtail, 0.5*zWidthPigtail);
361  const GeoMaterial* pigtailMat = m_mat_mgr->getMaterialForVolume(matNamePigtail,pigtailShape->volume());
362  GeoLogVol * pigtailLV = new GeoLogVol("PigtailFlat",pigtailShape,pigtailMat);
363  GeoPhysVol * pigtailPhys = new GeoPhysVol(pigtailLV);
364 
365  // Connector
366  int numConn = m_gmt_mgr->PixelNumConnectorElements();
367  std::vector<GeoPhysVol *> connectorPhysVols(numConn);
368  std::vector<GeoTrf::Transform3D> connectorTransforms(numConn);
369  for (int iConn = 0; iConn < numConn; iConn++) {
370  double xPosConnector = xOffset + m_gmt_mgr->PixelConnectorPosX(iConn);
371  double yPosConnector = yOffset + m_gmt_mgr->PixelConnectorPosY(iConn);
372  double zPosConnector = m_gmt_mgr->PixelConnectorPosZ(iConn);
373  double xWidthConnector = m_gmt_mgr->PixelConnectorWidthX(iConn);
374  double yWidthConnector = m_gmt_mgr->PixelConnectorWidthY(iConn);
375  double zWidthConnector = m_gmt_mgr->PixelConnectorWidthZ(iConn);
376  std::string matNameConnector = m_gmt_mgr->getMaterialName("Connector", m_gmt_mgr->GetLD(), iConn);
377  GeoBox * connectorShape = new GeoBox(0.5*xWidthConnector, 0.5*yWidthConnector, 0.5*zWidthConnector);
378  const GeoMaterial* connectorMat = m_mat_mgr->getMaterialForVolume(matNameConnector,connectorShape->volume());
379  GeoLogVol * connectorLV = new GeoLogVol("Connector",connectorShape,connectorMat);
380  connectorPhysVols[iConn] = new GeoPhysVol(connectorLV);
381  connectorTransforms[iConn] = GeoTrf::Translate3D(xPosConnector, yPosConnector, zPosConnector);
382  }
383 
384  for (int iModule = 0; iModule<m_gmt_mgr->PixelNModule(); iModule++) {
385  int moduleEta = m_gmt_mgr->PixelModuleEtaFromIndex(iModule);
386  double zShift = m_gmt_mgr->PixelModuleZPosition(moduleEta);
387 
388  // Place pigtail
389  GeoTransform * xformPigtail = new GeoTransform(GeoTrf::Translate3D(xPosPigtail, yPosPigtail, zShift+zPosPigtail));
390  parent->add(xformPigtail);
391  parent->add(pigtailPhys);
392 
393  // Place connector
394  for (int iConn = 0; iConn < numConn; iConn++) {
395  GeoTransform * xformConnector = new GeoTransform(GeoTrf::TranslateZ3D(zShift)*connectorTransforms[iConn]);
396  parent->add(xformConnector);
397  parent->add(connectorPhysVols[iConn]);
398  }
399  }
400 }

◆ envelopeCornerA1()

const GeoTrf::Vector3D& GeoPixelLadderServices::envelopeCornerA1 ( )
inline

Definition at line 26 of file GeoPixelLadderServices.h.

26 {return m_envelopeCornerA1;}

◆ envelopeCornerA2()

const GeoTrf::Vector3D& GeoPixelLadderServices::envelopeCornerA2 ( )
inline

Definition at line 27 of file GeoPixelLadderServices.h.

27 {return m_envelopeCornerA2;}

◆ envelopeCornerC1()

const GeoTrf::Vector3D& GeoPixelLadderServices::envelopeCornerC1 ( )
inline

Definition at line 28 of file GeoPixelLadderServices.h.

28 {return m_envelopeCornerC1;}

◆ envelopeCornerC2()

const GeoTrf::Vector3D& GeoPixelLadderServices::envelopeCornerC2 ( )
inline

Definition at line 29 of file GeoPixelLadderServices.h.

29 {return m_envelopeCornerC2;}

◆ operator=()

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

◆ referenceX()

double GeoPixelLadderServices::referenceX ( )
inline

Definition at line 30 of file GeoPixelLadderServices.h.

30 {return m_xOffset;}

◆ referenceY()

double GeoPixelLadderServices::referenceY ( )
inline

Definition at line 31 of file GeoPixelLadderServices.h.

31 {return m_yOffset;}

Member Data Documentation

◆ m_DDmgr

InDetDD::PixelDetectorManager* GeoVPixelFactory::m_DDmgr
protectedinherited

Definition at line 45 of file GeoVPixelFactory.h.

◆ m_envelopeCornerA1

GeoTrf::Vector3D GeoPixelLadderServices::m_envelopeCornerA1
private

Definition at line 42 of file GeoPixelLadderServices.h.

◆ m_envelopeCornerA2

GeoTrf::Vector3D GeoPixelLadderServices::m_envelopeCornerA2
private

Definition at line 43 of file GeoPixelLadderServices.h.

◆ m_envelopeCornerC1

GeoTrf::Vector3D GeoPixelLadderServices::m_envelopeCornerC1
private

Definition at line 44 of file GeoPixelLadderServices.h.

◆ m_envelopeCornerC2

GeoTrf::Vector3D GeoPixelLadderServices::m_envelopeCornerC2
private

Definition at line 45 of file GeoPixelLadderServices.h.

◆ m_epsilon

const double GeoVPixelFactory::m_epsilon
protectedinherited

Definition at line 49 of file GeoVPixelFactory.h.

◆ m_gmt_mgr

PixelGeometryManager* GeoVPixelFactory::m_gmt_mgr
protectedinherited

Definition at line 43 of file GeoVPixelFactory.h.

◆ m_ladderServicesLV

GeoIntrusivePtr<const GeoLogVol> GeoPixelLadderServices::m_ladderServicesLV {}
private

Definition at line 39 of file GeoPixelLadderServices.h.

◆ m_ladderType

int GeoPixelLadderServices::m_ladderType
private

Definition at line 40 of file GeoPixelLadderServices.h.

◆ m_mapAX

std::shared_ptr<std::map<std::string, GeoAlignableTransform*> > GeoVPixelFactory::m_mapAX
protectedinherited

Definition at line 48 of file GeoVPixelFactory.h.

◆ m_mapFPV

std::shared_ptr<std::map<std::string, GeoFullPhysVol*> > GeoVPixelFactory::m_mapFPV
protectedinherited

Definition at line 47 of file GeoVPixelFactory.h.

◆ m_mat_mgr

InDetMaterialManager* GeoVPixelFactory::m_mat_mgr
protectedinherited

Definition at line 44 of file GeoVPixelFactory.h.

◆ m_sqliteReader

GeoModelIO::ReadGeoModel* GeoVPixelFactory::m_sqliteReader
protectedinherited

Definition at line 46 of file GeoVPixelFactory.h.

◆ m_xOffset

double GeoPixelLadderServices::m_xOffset
private

Definition at line 47 of file GeoPixelLadderServices.h.

◆ m_yOffset

double GeoPixelLadderServices::m_yOffset
private

Definition at line 48 of file GeoPixelLadderServices.h.


The documentation for this class was generated from the following files:
PixelGeometryManager::PixelPigtailPosX
virtual double PixelPigtailPosX()=0
PixelGeometryManager::PixelLadderCableOffsetY
virtual double PixelLadderCableOffsetY()=0
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
GeoPixelLadderServices::m_envelopeCornerA1
GeoTrf::Vector3D m_envelopeCornerA1
Definition: GeoPixelLadderServices.h:42
PixelGeometryManager::PixelOmegaStartY
virtual double PixelOmegaStartY()=0
PixelGeometryManager::PixelOmegaGlueThickness
virtual double PixelOmegaGlueThickness(int index)=0
GeoPixelFluid
Definition: GeoPixelFluid.h:13
PixelGeometryManager::PixelNumConnectorElements
virtual int PixelNumConnectorElements()=0
PixelGeometryManager::PixelNumOmegaGlueElements
virtual int PixelNumOmegaGlueElements()=0
GeoPixelCable
Definition: GeoPixelCable.h:11
GeoPixelLadderServices::m_ladderType
int m_ladderType
Definition: GeoPixelLadderServices.h:40
PixelGeometryManager::PixelConnectorPosZ
virtual double PixelConnectorPosZ(int index)=0
PixelGeometryManager::PixelPigtailThickness
virtual double PixelPigtailThickness()=0
PixelGeometryManager::PixelLadderServicesY
virtual double PixelLadderServicesY()=0
PixelGeometryManager::PixelOmegaGlueEndY
virtual double PixelOmegaGlueEndY(int index)=0
PixelGeometryManager::PixelLadderServicesX
virtual double PixelLadderServicesX()=0
PixelGeometryManager::PixelOmegaLength
virtual double PixelOmegaLength()=0
PixelGeometryManager::PixelOmegaGlueLength
virtual double PixelOmegaGlueLength(int index)=0
GeoPixelLadderServices::BuildPigtailAndConnector
void BuildPigtailAndConnector(GeoPhysVol *parent)
Definition: GeoPixelLadderServices.cxx:347
PixelGeometryManager::PixelOmegaGlueTypeNum
virtual int PixelOmegaGlueTypeNum(int index)=0
PixelGeometryManager::PixelPigtailStartY
virtual double PixelPigtailStartY()=0
GeoPixelLadderServices::m_envelopeCornerC1
GeoTrf::Vector3D m_envelopeCornerC1
Definition: GeoPixelLadderServices.h:44
GeoPixelLadderServices::BuildAlTube
GeoVPhysVol * BuildAlTube()
Definition: GeoPixelLadderServices.cxx:240
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
GeoVPixelFactory::m_mapAX
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
Definition: GeoVPixelFactory.h:48
GeoVPixelFactory::m_sqliteReader
GeoModelIO::ReadGeoModel * m_sqliteReader
Definition: GeoVPixelFactory.h:46
PixelGeometryManager::PixelPigtailFlatWidthZ
virtual double PixelPigtailFlatWidthZ()=0
GeoVPixelFactory::m_DDmgr
InDetDD::PixelDetectorManager * m_DDmgr
Definition: GeoVPixelFactory.h:45
makeTRTBarrelCans.y1
tuple y1
Definition: makeTRTBarrelCans.py:15
pi
#define pi
Definition: TileMuonFitter.cxx:65
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
GeoVPixelFactory::m_gmt_mgr
PixelGeometryManager * m_gmt_mgr
Definition: GeoVPixelFactory.h:43
PixelGeometryManager::PixelAlTubeLowerBendY
virtual double PixelAlTubeLowerBendY()=0
GeoVPixelFactory::m_mapFPV
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
Definition: GeoVPixelFactory.h:47
PixelGeometryManager::PixelModuleEtaFromIndex
virtual int PixelModuleEtaFromIndex(int index)=0
PixelGeometryManager::PixelOmegaEndY
virtual double PixelOmegaEndY()=0
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
GeoPixelLadderServices::BuildOmega
GeoVPhysVol * BuildOmega()
Definition: GeoPixelLadderServices.cxx:155
PixelGeometryManager::PixelAlTubeUpperBendRadius
virtual double PixelAlTubeUpperBendRadius()=0
GeoPixelLadderServices::m_envelopeCornerC2
GeoTrf::Vector3D m_envelopeCornerC2
Definition: GeoPixelLadderServices.h:45
PixelGeometryManager::PixelOmegaLowerBendRadius
virtual double PixelOmegaLowerBendRadius()=0
lumiFormat.i
int i
Definition: lumiFormat.py:92
PixelGeometryManager::PixelAlTubeUpperBendX
virtual double PixelAlTubeUpperBendX()=0
GeoPixelLadderServices::m_xOffset
double m_xOffset
Definition: GeoPixelLadderServices.h:47
makeTRTBarrelCans.y2
tuple y2
Definition: makeTRTBarrelCans.py:18
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
PixelGeometryManager::PixelConnectorWidthZ
virtual double PixelConnectorWidthZ(int index)=0
InDetMaterialManager::getMaterialForVolume
const GeoMaterial * getMaterialForVolume(const std::string &materialName, double volume, const std::string &newName="")
Create and get material with a density calculated to give weight in predefined weight table.
Definition: InDetMaterialManager.cxx:460
test_pyathena.parent
parent
Definition: test_pyathena.py:15
add
bool add(const std::string &hname, TKey *tobj)
Definition: fastadd.cxx:55
GeoVPixelFactory::GeoVPixelFactory
GeoVPixelFactory(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoModelIO::ReadGeoModel *sqliteReader, std::shared_ptr< std::map< std::string, GeoFullPhysVol * >> mapFPV, std::shared_ptr< std::map< std::string, GeoAlignableTransform * >> mapAX)
Definition: GeoVPixelFactory.cxx:9
PixelGeometryManager::PixelNModule
virtual int PixelNModule()=0
PixelGeometryManager::PixelAlTubeLowerBendRadius
virtual double PixelAlTubeLowerBendRadius()=0
PixelGeometryManager::PixelConnectorPosY
virtual double PixelConnectorPosY(int index)=0
PixelGeometryManager::PixelConnectorPosX
virtual double PixelConnectorPosX(int index)=0
PixelGeometryManager::PixelAlTubeLength
virtual double PixelAlTubeLength()=0
PixelGeometryManager::PixelConnectorWidthX
virtual double PixelConnectorWidthX(int index)=0
PixelGeometryManager::PixelAlTubeUpperBendY
virtual double PixelAlTubeUpperBendY()=0
GeoPixelLadderServices::m_ladderServicesLV
GeoIntrusivePtr< const GeoLogVol > m_ladderServicesLV
Definition: GeoPixelLadderServices.h:39
grepfile.sep
sep
Definition: grepfile.py:38
RCU::Check::typeNum
const int typeNum
Definition: Assert.h:75
PixelGeometryManager::PixelOmegaLowerBendX
virtual double PixelOmegaLowerBendX()=0
PixelGeometryManager::PixelOmegaGluePosZ
virtual double PixelOmegaGluePosZ(int index)=0
GeoVPixelFactory::m_epsilon
const double m_epsilon
Definition: GeoVPixelFactory.h:49
GeoPixelLadderServices::m_envelopeCornerA2
GeoTrf::Vector3D m_envelopeCornerA2
Definition: GeoPixelLadderServices.h:43
PixelGeometryManager::PixelLadderLength
virtual double PixelLadderLength()=0
PixelGeometryManager::PixelOmegaGlueStartY
virtual double PixelOmegaGlueStartY(int index)=0
GeoVPixelFactory::m_mat_mgr
InDetMaterialManager * m_mat_mgr
Definition: GeoVPixelFactory.h:44
PixelGeometryManager::PixelOmegaWallThickness
virtual double PixelOmegaWallThickness()=0
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
PixelGeometryManager::PixelOmegaUpperBendX
virtual double PixelOmegaUpperBendX()=0
PixelGeometryManager::PixelPigtailEndY
virtual double PixelPigtailEndY()=0
PixelGeometryManager::PixelConnectorWidthY
virtual double PixelConnectorWidthY(int index)=0
PixelGeometryManager::PixelPigtailPosZ
virtual double PixelPigtailPosZ()=0
PixelGeometryManager::PixelOmegaUpperBendRadius
virtual double PixelOmegaUpperBendRadius()=0
GeoPixelLadderServices::m_yOffset
double m_yOffset
Definition: GeoPixelLadderServices.h:48
GeoPixelLadderServices::BuildGlue
void BuildGlue(GeoPhysVol *parent)
Definition: GeoPixelLadderServices.cxx:320
PixelGeometryManager::PixelAlTubeWallThickness
virtual double PixelAlTubeWallThickness()=0
PixelGeometryManager::PixelOmegaLowerBendY
virtual double PixelOmegaLowerBendY()=0
PixelGeometryManager::getMaterialName
virtual std::string getMaterialName(const std::string &volumeName, int layerdisk=0, int typenum=0)=0
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
PixelGeometryManager::PixelOmegaGlueStartX
virtual double PixelOmegaGlueStartX(int index)=0
InDetMaterialManager::getMaterial
const GeoMaterial * getMaterial(const std::string &materialName)
Get material. First looks for locally defined material and if not found looks in GeoModel material ma...
Definition: InDetMaterialManager.cxx:96
PixelGeometryManager::PixelAlTubeLowerBendX
virtual double PixelAlTubeLowerBendX()=0
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
PixelGeometryManager::PixelOmegaUpperBendY
virtual double PixelOmegaUpperBendY()=0
PixelGeometryManager::PixelLadderCableOffsetX
virtual double PixelLadderCableOffsetX()=0
PixelGeometryManager::PixelModuleZPosition
virtual double PixelModuleZPosition(int)=0
PixelGeometryManager::GetLD
virtual int GetLD()=0