45 {
46
47 m_gmt_mgr->msg(MSG::INFO) <<
"Build detailed stave support description : layout "<<
m_gmt_mgr->PixelStaveLayout()<<
endmsg;
48
50 int staveLayout =
m_gmt_mgr->PixelStaveLayout();
51
52
55 double pmThicknessN=pm.ThicknessN_noSvc();
56 double pmThicknessP=pm.ThicknessP();
57 double pmWidth=pm.Width();
58
59
62
63
64 double pmThicknessN3D=-1;
65 double pmThicknessP3D=-1.;
66 double pmWidth3D=-1;
67 double pmShilftLateral3D=0.;
68 double radialShift=0.;
69 double radialShiftThickN=0.;
70 if(staveLayout==5||staveLayout==6||staveLayout==7)
71 {
74
75 pmThicknessN3D=pm3D.ThicknessN();
76 pmThicknessP3D=pm3D.ThicknessP();
77
78 if(pmThicknessP3D>pmThicknessP) radialShift = -(pmThicknessP3D-pmThicknessP);
79 m_gmt_mgr->msg(MSG::INFO)<<
"Si3D/SiPl radial shift : "<<radialShift<<
endmsg;
80
81 pmThicknessN3D=pm3D.ThicknessN()-radialShift;
82 pmThicknessP3D=pm3D.ThicknessP()+radialShift;
83 pmWidth3D=pm3D.Width();
84
85 m_gmt_mgr->msg(MSG::INFO) <<
"Module thicknesses : SiPl P/N "<<pmThicknessP<<
" "<<pmThicknessN<<
" "<<pmWidth<<
86 " SiPl P/N "<<pmThicknessP3D<<" "<<pmThicknessN3D<<" "<<pmWidth3D<<
87 " // "<<pm3D.ThicknessP()<<
" "<<pm3D.ThicknessN()<<
endmsg;
88
89 double MechanicalStaveOffset =
m_gmt_mgr->IBLStaveMechanicalStaveOffset();
90 double MechanicalStaveOffset3D =
m_gmt_mgr->IBLStaveMechanicalStaveOffset(
true);
91 pmShilftLateral3D= -(MechanicalStaveOffset3D-MechanicalStaveOffset);
92
93 radialShiftThickN=fabs(radialShift)+(pmThicknessN3D-pmThicknessN)*.5;
94 }
95
96 int ModuleNumber=
m_gmt_mgr->IBLStaveModuleNumber_AllPlanar();
97 int ModuleNumber_allPlanar=ModuleNumber;
98 double ModuleGap=
m_gmt_mgr->IBLStaveModuleGap();
99 double ModuleLength=pm.Length();
100 double MechanicalStaveEndBlockLength =
m_gmt_mgr->IBLStaveMechanicalStaveEndBlockLength();
101 double totalStaveLength =
m_gmt_mgr->IBLStaveLength();
102 int Module3DNumber= 0;
103 double Module3DLength=0;
104
105
106
107
108
109
110
111 if(staveLayout==5||staveLayout==6||staveLayout==7)
112 {
113
114 bool isModule3D=true;
117 Module3DLength=pm3D.Length();
118
119 if(staveLayout==5||staveLayout==7)
120 {
121 Module3DNumber=(ModuleNumber/4)*2;
122 ModuleNumber=ModuleNumber*0.75;
123 }
124 else if(staveLayout==6)
125 {
126 ModuleNumber=ModuleNumber/2;
127 Module3DNumber=ModuleNumber*2;
128 }
129 }
130
134
135
136
137
138
139
142 double lgEndBlock=2.0*MechanicalStaveEndBlockLength;
143
145 double compStaveLength=lgPlanar+lg3D+lgEndBlock;
146 double lgNAStave=(totalStaveLength-compStaveLength)*0.5;
147
148
149
150
151
152
153 m_gmt_mgr->msg(MSG::INFO) <<
"Module length/gap : "<<ModuleLength<<
" / "<<Module3DLength<<
" "<<ModuleGap<<
" -> Stave length : "<<
m_StaveLength<<
endmsg;
154 m_gmt_mgr->msg(MSG::INFO) <<
" planar/3D/endblock/NonActive lengths : "<<lgPlanar<<
" "<<lg3D<<
" "<<lgEndBlock<<
" "<<lgNAStave<<
endmsg;
155
157
159
160 return nullptr;
161 }
162
163
164
165
166
167
168 double FacePlateThick =
m_gmt_mgr->IBLStaveFacePlateThickness();
169 double FacePlateGreaseThick =
m_gmt_mgr->IBLStaveFacePlateGreaseThickness();
170 if(FacePlateGreaseThick>0.001) FacePlateThick+=FacePlateGreaseThick;
171
172 double MechanicalStaveWidth =
m_gmt_mgr->IBLStaveMechanicalStaveWidth();
174 double MechanicalStaveOffset =
m_gmt_mgr->IBLStaveMechanicalStaveOffset();
175 double StaveModuleOffset =
m_gmt_mgr->IBLStaveMechanicalStaveModuleOffset();
176
177 double TubeOuterDiam =
m_gmt_mgr->IBLStaveTubeOuterDiameter();
178 double TubeInnerDiam =
m_gmt_mgr->IBLStaveTubeInnerDiameter();
179 double TubeMiddlePos =
m_gmt_mgr->IBLStaveTubeMiddlePos();
180
181 double FlexLayerThick =
m_gmt_mgr->IBLStaveFlexLayerThickness();
182 double FlexBaseThick =
m_gmt_mgr->IBLStaveFlexBaseThickness();
183 double FlexWidth =
m_gmt_mgr->IBLStaveFlexWidth();
184 double FlexOffset =
m_gmt_mgr->IBLStaveFlexOffset();
185 double FlexStaveMiddleGap =
m_gmt_mgr->IBLFlexMiddleGap();
186 double FlexEOS_zpos =
m_gmt_mgr->IBLFlexPP0Z(0);
187 double FlexDogLeg_length =
m_gmt_mgr->IBLFlexDoglegLength();
188 double WingWidth =
m_gmt_mgr->IBLStaveFlexWingWidth();
189 double WingThick =
m_gmt_mgr->IBLStaveFlexWingThick();
190 bool bFlexAndWing =
m_gmt_mgr->IBLFlexAndWingDefined();
191
192 bool bFlexConstantThickness = true;
193 if(!bFlexAndWing) bFlexConstantThickness = false;
194
195 double layerRadius =
m_gmt_mgr->PixelLayerRadius();
196
197 double OmegaThick =
m_gmt_mgr->IBLStaveOmegaThickness();
198
199 double FacePlateGlueThick =
m_gmt_mgr->IBLStaveFacePlateGlueThickness();
200 double TubeGlueThick =
m_gmt_mgr->IBLStaveTubeGlueThickness();
201 double OmegaGlueThick =
m_gmt_mgr->IBLStaveOmegaGlueThickness();
202
203 double MaxFlexThickness;
204 if (!bFlexConstantThickness){
205 if(ModuleNumber_allPlanar%2==0)
206 MaxFlexThickness=FlexBaseThick+(ModuleNumber_allPlanar/2-1)*FlexLayerThick;
207 else
208 MaxFlexThickness=FlexBaseThick+((ModuleNumber_allPlanar-1)/2)*FlexLayerThick;
209 }
210 else
211 MaxFlexThickness=FlexBaseThick;
212
213 m_gmt_mgr->msg(MSG::INFO) <<
"Flex thickness (max) : "<<MaxFlexThickness<<
" computed for "<<ModuleNumber_allPlanar<<
" modules "<<
endmsg;
214
215 double halfMecStaveWidth=MechanicalStaveWidth*0.5;
216
217
219 double safetyMarginZ=.001*Gaudi::Units::mm;
220
221
223
224
225 if (FlexWidth<0.001)
226 {
229 FlexWidth = sqrt(xDelta*xDelta+yDelta*yDelta);
230 }
231
232 m_gmt_mgr->msg(MSG::INFO)<<
" MechanicalStaveWidth = "<<MechanicalStaveWidth <<
endmsg;
233 m_gmt_mgr->msg(MSG::INFO)<<
" MechanicalStaveLength = "<<MechanicalStaveLength <<
endmsg;
234 m_gmt_mgr->msg(MSG::INFO)<<
" MechanicalStaveOffset = "<<MechanicalStaveOffset <<
endmsg;
235 m_gmt_mgr->msg(MSG::INFO)<<
" StaveModuleOffset = "<<StaveModuleOffset <<
endmsg;
236 m_gmt_mgr->msg(MSG::INFO)<<
" MechanicalStaveEndBlockLength = "<<MechanicalStaveEndBlockLength <<
endmsg;
237 m_gmt_mgr->msg(MSG::INFO)<<
" FacePlateThick = "<<FacePlateThick <<
endmsg;
238 m_gmt_mgr->msg(MSG::INFO)<<
" TubeOuterDiam = "<< TubeOuterDiam <<
endmsg;
239 m_gmt_mgr->msg(MSG::INFO)<<
" TubeInnerDiam = "<< TubeInnerDiam <<
endmsg;
240 m_gmt_mgr->msg(MSG::INFO)<<
" TubeMiddlePos = "<< TubeMiddlePos <<
endmsg;
241 m_gmt_mgr->msg(MSG::INFO)<<
" FlexBaseThick = "<< FlexBaseThick <<
endmsg;
242 m_gmt_mgr->msg(MSG::INFO)<<
" FlexLayerThick = "<< FlexLayerThick <<
endmsg;
245 m_gmt_mgr->msg(MSG::INFO)<<
" XOffset / ladder = "<< StaveModuleOffset <<
endmsg;
246
247
248 double MiddleSectionLength=MechanicalStaveLength-2.0*MechanicalStaveEndBlockLength;
249
250
251
252
253
254
255
256
257
258
259
260
261
262
268
269 foam1x += xGblOffset;
270 foam2x += xGblOffset;
271 foam3x += xGblOffset;
272 foam4x += xGblOffset;
273 foam5x += xGblOffset;
274
275 double FoamBaseWidth=sqrt((foam5x-foam1x)*(foam5x-foam1x)+(foam5y-foam1y)*(foam5y-foam1y));
276
277
278
279
280
281
282
283
284 double omega1x, omega1y, omega2x, omega2y, omega3x, omega3y;
285 double omega4x, omega4y, omega5x, omega5y;
286 omega1x=omega1y=omega2x=omega2y=omega3x=omega3y=omega4x=omega4y=omega5x=omega5y=0.0;
287
288 omega1x = 0.0; omega1y = -halfMecStaveWidth;
292 omega5x = 0.0; omega5y = halfMecStaveWidth;
293
294 omega1x += xGblOffset;
295 omega2x += xGblOffset;
296 omega3x += xGblOffset;
297 omega4x += xGblOffset;
298 omega5x += xGblOffset;
299
300
301
302
303
304
305
306
307 double plate1x =0.0, plate1y= foam1y;
308 double plate2x =FacePlateThick, plate2y= foam1y;
309 double plate3x =FacePlateThick, plate3y= foam5y;
310 double plate4x =0.0, plate4y= foam5y;
311
312 plate1y=omega1y; plate4y=omega5y;
313
314
315
316
317
318
319
320
321 double seg1x, seg2x, seg1y, seg2y;
322 seg1x=omega3x; seg1y=omega3y;
323 seg2x=omega4x; seg2y=omega4y;
324
325 double vDirX=(seg2x-seg1x), vDirY=(seg2y-seg1y);
326 double invNorm=1.0/sqrt(vDirX*vDirX+vDirY*vDirY);
327 vDirX*=invNorm; vDirY*=invNorm;
328 double vPerpDirX=vDirY, vPerpDirY=-vDirX;
329
333 double flexHalfWidth=FlexWidth*0.5;
334 double wingHalfWidth = WingWidth*.5;
335
336 double flexWingMaxR=0.;
337 double maxFlex1x = foamMidX-(FlexOffset+flexHalfWidth)*vDirX;
338 double maxFlex1y = foamMidY-(FlexOffset+flexHalfWidth)*vDirY;
339 double maxFlex2x = maxFlex1x+MaxFlexThickness*vPerpDirX;
340 double maxFlex2y = maxFlex1y+MaxFlexThickness*vPerpDirY;
341 double maxFlex4x = foamMidX+(-FlexOffset+flexHalfWidth)*vDirX;
342 double maxFlex4y = foamMidY+(-FlexOffset+flexHalfWidth)*vDirY;
343
344
345 double maxFlex4x_wings = foamMidX+(-FlexOffset+flexHalfWidth+2.*wingHalfWidth+.5)*vDirX;
346 double maxFlex4y_wings = foamMidY+(-FlexOffset+flexHalfWidth+2.*wingHalfWidth+.5)*vDirY;
347 double maxFlex3x_wings = maxFlex4x_wings+MaxFlexThickness*vPerpDirX;
348 double maxFlex3y_wings = maxFlex4y_wings+MaxFlexThickness*vPerpDirY;
349
351 wingHalfWidth = WingWidth*.5*.6;
352 maxFlex4x_wings = foamMidX+(-FlexOffset+flexHalfWidth+2.*wingHalfWidth+.5)*vDirX;
353 maxFlex4y_wings = foamMidY+(-FlexOffset+flexHalfWidth+2.*wingHalfWidth+.5)*vDirY;
354 maxFlex3x_wings = maxFlex4x_wings+MaxFlexThickness*vPerpDirX;
355 maxFlex3y_wings = maxFlex4y_wings+MaxFlexThickness*vPerpDirY;
356 }
357
358
359
360
361
362
363
364
365
367 std::vector<double> xShape, yShape;
368 std::vector<int>iShapeExcept;
369
370 double yStaveOffset =
m_gmt_mgr->IBLStaveMechanicalStaveOffset();
371 double plate1y_tmp = std::min(plate1y,-pm.Width()*.5-yStaveOffset);
372 double omega1y_tmp = std::min(omega1y,-pm.Width()*.5-yStaveOffset);
373
374 xShape.push_back(plate1x); yShape.push_back(plate1y_tmp); iShapeExcept.push_back(1);
375 xShape.push_back(omega1x); yShape.push_back(omega1y_tmp); iShapeExcept.push_back(0);
376 xShape.push_back(omega2x); yShape.push_back(omega2y); iShapeExcept.push_back(0);
377 xShape.push_back(omega3x); yShape.push_back(omega3y); iShapeExcept.push_back(0);
378
379 xShape.push_back(maxFlex1x); yShape.push_back(maxFlex1y); iShapeExcept.push_back(0);
380 xShape.push_back(maxFlex2x); yShape.push_back(maxFlex2y); iShapeExcept.push_back(0);
381
382 xShape.push_back(maxFlex3x_wings); yShape.push_back(maxFlex3y_wings); iShapeExcept.push_back(0);
383 xShape.push_back(maxFlex4x_wings); yShape.push_back(maxFlex4y_wings); iShapeExcept.push_back(0);
384
385 if(bFlexAndWing){
386 xShape.push_back(maxFlex4x); yShape.push_back(maxFlex4y); iShapeExcept.push_back(1);
387 flexWingMaxR=sqrt((maxFlex3x_wings+layerRadius)*(maxFlex3x_wings+layerRadius)+maxFlex3y_wings*maxFlex3y_wings);
388 }
389
390 xShape.push_back(omega4x); yShape.push_back(omega4y); iShapeExcept.push_back(0);
391 xShape.push_back(omega5x); yShape.push_back(omega5y); iShapeExcept.push_back(0);
392
393 xShape.push_back(plate4x); yShape.push_back(plate4y); iShapeExcept.push_back(1);
394
395
396
400
401 for(unsigned int iPt=0; iPt<xShape.size(); iPt++)
403
404
405 const GeoMaterial* envelop_material =
m_mat_mgr->getMaterial(
"std::Air");
407 GeoPhysVol * logVolPV = new GeoPhysVol(logVol);
408
409
410
411
412
413
414
415 GeoSimplePolygonBrep * foam_shape = new GeoSimplePolygonBrep(MiddleSectionLength*.5);
416 foam_shape->addVertex(foam1x,foam1y);
417 foam_shape->addVertex(foam2x,foam2y);
418 foam_shape->addVertex(foam3x,foam3y);
419 foam_shape->addVertex(foam4x,foam4y);
420 foam_shape->addVertex(foam5x,foam5y);
421
422 const GeoMaterial* foam_material =
m_mat_mgr->getMaterial(
m_gmt_mgr->getMaterialName(
"CarbonFoam",0,0));
423 GeoNameTag* foam_tag = new GeoNameTag("CarbonFoam");
424 GeoTransform* foam_xform = new GeoTransform(GeoTrf::Transform3D::Identity());
425
426 GeoLogVol * foam_logVol = new GeoLogVol("CarbonFoam",foam_shape,foam_material);
427 GeoPhysVol * foam_logVolPV = new GeoPhysVol(foam_logVol);
428
429
430
431
432
433
434
435 GeoSimplePolygonBrep * omega_shape = new GeoSimplePolygonBrep(MiddleSectionLength*.5);
436 omega_shape->addVertex(omega1x,omega1y);
437 omega_shape->addVertex(omega2x,omega2y);
438 omega_shape->addVertex(omega3x,omega3y);
439 omega_shape->addVertex(omega4x,omega4y);
440 omega_shape->addVertex(omega5x,omega5y);
441 omega_shape->addVertex(foam5x,foam5y);
442 omega_shape->addVertex(foam4x,foam4y);
443 omega_shape->addVertex(foam3x,foam3y);
444 omega_shape->addVertex(foam2x,foam2y);
445 omega_shape->addVertex(foam1x,foam1y);
446
447 GeoLogVol * omega_logVol = nullptr;
448
449 if(OmegaGlueThick<0.0001)
450 {
451 m_gmt_mgr->msg(MSG::INFO)<<
"** OMEGA : without Stycast "<<OmegaGlueThick<<
endmsg;
452 const GeoMaterial* omega_material =
m_mat_mgr->getMaterial(
"pix::Omega_IBL");
453
454 omega_logVol = new GeoLogVol("Omega",omega_shape,omega_material);
455 }
456 else
457 {
458 m_gmt_mgr->msg(MSG::INFO)<<
"** OMEGA : with Stycast "<<OmegaGlueThick<<
endmsg;
459 double omegaVolume = omega_shape->volume();
460 double glueVolume = omegaVolume*(OmegaGlueThick/OmegaThick);
461 const std::string compMatName="OmegaGlue_IBL";
462 const GeoMaterial* omega_material =
m_mat_mgr->getCompositeMaterialForVolume(compMatName,
463 omegaVolume,
464 omegaVolume,"pix::Omega_IBL",
465 glueVolume,"pix::Stycast2850FT");
466 m_gmt_mgr->msg(MSG::INFO)<<
"***> new material : "<<omega_material->getName()<<
" "<<omega_material->getDensity()/(GeoModelKernelUnits::gram/Gaudi::Units::cm3)<<
endmsg;
467 omega_logVol = new GeoLogVol("Omega",omega_shape,omega_material);
468 }
469
470 GeoNameTag* omega_tag = new GeoNameTag("Omega");
471 GeoTransform* omega_xform = new GeoTransform(GeoTrf::Transform3D::Identity());
472
473
474
475
476
477
478 GeoPhysVol * omega_logVolPV = new GeoPhysVol(omega_logVol);
479 logVolPV->add(omega_tag);
480 logVolPV->add(omega_xform);
481 logVolPV->add(omega_logVolPV);
482
483
484
485
486
487
488
489
490 GeoBox * faceplate_shape = new GeoBox(FacePlateThick*0.5,MechanicalStaveWidth*0.5,MiddleSectionLength*.5);
491 GeoTrf::Translate3D faceplate_pos((plate1x+plate2x+plate3x+plate4x)*0.25,(plate1y+plate2y+plate3y+plate4y)*0.25,0.0);
492 GeoTransform* faceplate_xform = new GeoTransform(faceplate_pos);
493
494 std::string faceplateMatName;
495 const GeoMaterial* faceplate_material;
496
497
498 if(FacePlateGlueThick<0.0001)
499 {
500 m_gmt_mgr->msg(MSG::INFO)<<
"** FacePlate : without Stycast "<<FacePlateGlueThick<<
endmsg;
501 faceplateMatName = "pix::FacePlate_IBL";
502 faceplate_material =
m_mat_mgr->getMaterial(faceplateMatName);
503 }
504 else
505 {
506 m_gmt_mgr->msg(MSG::INFO)<<
" ** FacePlate : with Stycast "<<FacePlateGlueThick<<
" grease : "<<FacePlateGreaseThick<<
endmsg;
507
508 double glueVolume = FacePlateGlueThick*MechanicalStaveWidth*MiddleSectionLength;
509 double facePlateVolume = (FacePlateThick-FacePlateGreaseThick)*MechanicalStaveWidth*MiddleSectionLength;
510
511 faceplateMatName="FacePlateGlue_IBL";
512 faceplate_material =
m_mat_mgr->getCompositeMaterialForVolume(faceplateMatName,
513 facePlateVolume,
514 facePlateVolume,"pix::FacePlate_IBL",
515 glueVolume,"pix::Stycast2850FT");
516 m_gmt_mgr->msg(MSG::INFO)<<
"***> new material : "<<faceplate_material->getName()<<
" "<<faceplate_material->getDensity()/(GeoModelKernelUnits::gram/Gaudi::Units::cm3)<<
endmsg;
517 }
518
519
520 GeoLogVol * faceplate_logVol = nullptr;
521 if(FacePlateGreaseThick<0.0001)
522 {
524
525 faceplate_logVol = new GeoLogVol("FacePlate",faceplate_shape,faceplate_material);
526 }
527 else
528 {
530
531 double greaseVolume = FacePlateGreaseThick*MechanicalStaveWidth*MiddleSectionLength;
532 double facePlateVolume = (FacePlateThick-FacePlateGreaseThick)*MechanicalStaveWidth*MiddleSectionLength;
533
534 std::string compMatName="FacePlateGrease_IBL";
535 if(FacePlateGlueThick>0.0001) compMatName="FacePlateGlueGrease_IBL";
536 const GeoMaterial* faceplate_material =
m_mat_mgr->getCompositeMaterialForVolume(compMatName,
537 facePlateVolume+greaseVolume,
538 facePlateVolume,faceplateMatName,
539 greaseVolume,"pix::ThermGrease_IBL");
540 faceplate_logVol = new GeoLogVol("FacePlate",faceplate_shape,faceplate_material);
541 m_gmt_mgr->msg(MSG::INFO)<<
"***> new material : "<<faceplate_material->getName()<<
" "<<faceplate_material->getDensity()/(GeoModelKernelUnits::gram/Gaudi::Units::cm3)<<
endmsg;
542 }
543
544
545
546 GeoPhysVol * faceplate_logVolPV = new GeoPhysVol(faceplate_logVol);
547 GeoNameTag* faceplate_tag = new GeoNameTag("FacePlate");
548 logVolPV->add(faceplate_tag);
549 logVolPV->add(faceplate_xform);
550 logVolPV->add(faceplate_logVolPV);
551
552
553
554
555
556
557
558
559 int ModuleNumber_flex=
m_gmt_mgr->IBLStaveModuleNumber_AllPlanar();
560 double ModuleGap_flex=
m_gmt_mgr->IBLStaveModuleGap();
561 double ModuleLength_flex=pm.Length();
562
563 double ModuleTotLength=ModuleLength_flex+ModuleGap_flex;
564 double ModulePosZ=ModuleTotLength*0.5;
565 int NbModuleRL=ModuleNumber_flex/2;
566 if(ModuleNumber_flex%2==1)
567 {
568 ModulePosZ=0.0;
569 NbModuleRL+=1;
570 }
571 double FlexThicknessRL=FlexBaseThick;
572 double flex_angle=((maxFlex1x-maxFlex4x)*(foam1x-foam5x)+(maxFlex1y-maxFlex4y)*(foam1y-foam5y))/(FlexWidth*FoamBaseWidth);
573 flex_angle=acos(flex_angle);
574 const GeoMaterial* cableflex_material =
m_mat_mgr->getMaterial(
"pix::CableFlex_IBL");
575
576
577 m_gmt_mgr->msg(MSG::INFO)<<
"Flex angle : "<<flex_angle<<
" Flex pos. in Z : ";
578 double EndblockFlexXpos=0.;
579 double EndblockFlexYpos=0.;
580 double EndblockFlexThickness=0.;
581
582 double wingZmin=0., wingZmax=0.;
583 int nbModuleSvc =
m_gmt_mgr->PixelModuleServiceNumber();
584 GeoLogVol * wingflex_logVol = nullptr;
585 double wingFlexPosX = 0.;
586 double wingFlexPosY = 0.;
587
588 for(int iModule=0; iModule<NbModuleRL; iModule++)
589 {
590
591 double flexGapZ=0.;
592
593
594 if(iModule==NbModuleRL-1)
595 {
596 wingZmax=ModulePosZ+ModuleTotLength*0.5;
597 double delta=MiddleSectionLength*0.5-(ModulePosZ+ModuleTotLength*0.5);
598 ModulePosZ+=delta*0.5;
599 ModuleTotLength+=delta;
600
601
602 }
603 else if(iModule==0){
604 flexGapZ = FlexStaveMiddleGap;
605 wingZmin = flexGapZ;
606 }
607
608
609 GeoBox * cableflex_shape =
new GeoBox(FlexThicknessRL*0.5,FlexWidth*0.5,(ModuleTotLength-
m_SafetyMargin-flexGapZ)*.5);
610
611 double flex1x = foamMidX-(FlexOffset+flexHalfWidth)*vDirX;
612 double flex1y = foamMidY-(FlexOffset+flexHalfWidth)*vDirY;
613 double flex2x = flex1x+FlexThicknessRL*vPerpDirX;
614 double flex2y = flex1y+FlexThicknessRL*vPerpDirY;
615 double flex4x = foamMidX+(-FlexOffset+flexHalfWidth)*vDirX;
616 double flex4y = foamMidY+(-FlexOffset+flexHalfWidth)*vDirY;
617 double flex3x = flex4x+FlexThicknessRL*vPerpDirX;
618 double flex3y = flex4y+FlexThicknessRL*vPerpDirY;
619
620
621 std::ostringstream lname;
622 int iFlexModule=(ModuleNumber_flex%2==0)?(iModule+1):iModule;
623 lname << "StaveFlex_"<<iFlexModule;
624 if(!(ModuleNumber_flex%2==1&&iModule==0))lname<<"A";
625
626
627 const GeoMaterial* scaledFlexMaterial=nullptr;
628 if(bFlexAndWing){
629 std::string flexMatName=
m_gmt_mgr->IBLFlexMaterial(iModule+1,
"staveA");
630 scaledFlexMaterial=
m_mat_mgr->getMaterial(flexMatName);
631 }
632
633
634
635
636
637
638
639
640
641 GeoTrf::Translation3D cableflex_pos((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,ModulePosZ+flexGapZ*0.5);
642
643 GeoTransform* cableflex_xform = new GeoTransform(GeoTrf::Transform3D(cableflex_pos*GeoTrf::RotateZ3D(fabs(flex_angle))));
644
645 GeoLogVol * cableflex_logVol = nullptr;
646 if(bFlexAndWing||bFlexConstantThickness)
647 cableflex_logVol= new GeoLogVol(lname.str(),cableflex_shape,scaledFlexMaterial);
648 else
649 cableflex_logVol= new GeoLogVol(lname.str(),cableflex_shape,cableflex_material);
650
651
652 if(nbModuleSvc>0)
653 {
654 std::ostringstream wingName;
655 wingName << "WingFlex";
656
657 if(iModule==0)
658 {
659 WingThick = 0.06;
660 double flex1x_tmp = flex4x;
661 double flex1y_tmp = flex4y;
662 double flex2x_tmp = flex4x+2.*wingHalfWidth*vDirX;
663 double flex2y_tmp = flex4y+2.*wingHalfWidth*vDirY;
664 double flex4x_tmp = flex1x_tmp+WingThick*vPerpDirX;
665 double flex4y_tmp = flex1y_tmp+WingThick*vPerpDirY;
666 double flex3x_tmp = flex2x_tmp+WingThick*vPerpDirX;
667 double flex3y_tmp = flex2y_tmp+WingThick*vPerpDirY;
668
669 maxFlex3x_wings = flex3x_tmp;
670 maxFlex3y_wings = flex3y_tmp;
671 maxFlex4x_wings = flex4x_tmp;
672 maxFlex4y_wings = flex4y_tmp;
673 wingFlexPosX = (flex1x_tmp+flex2x_tmp+flex3x_tmp+flex4x_tmp)*0.25;
674 wingFlexPosY = (flex1y_tmp+flex2y_tmp+flex3y_tmp+flex4y_tmp)*0.25;
675
676 double wingHalfLength = 12.15*.5;
677 GeoBox* wingflex_shape = new GeoBox(WingThick*0.5,wingHalfWidth,wingHalfLength);
678
679
680 const GeoMaterial* wingflex_material=
m_mat_mgr->getMaterialForVolume(
"pix::WingFlexTop",wingflex_shape->volume()) ;
681 wingflex_logVol = new GeoLogVol(wingName.str(),wingflex_shape,wingflex_material);
682 }
683
684
685
686
687 double zPos = (iModule+.5)*ModuleLength_flex+(iModule+.5)*ModuleGap_flex;
688 GeoTrf::Translation3D wingflex_posA(wingFlexPosX, wingFlexPosY , zPos-ModuleLength_flex*.25);
689 GeoTransform* wingflex_xformA = new GeoTransform(GeoTrf::Transform3D(wingflex_posA*GeoTrf::RotateZ3D(fabs(flex_angle))));
690
691 GeoPhysVol * wingflex_logVolPV_1 = new GeoPhysVol(wingflex_logVol);
692 GeoNameTag* wingflex_tag = new GeoNameTag(wingName.str());
693 logVolPV->add(wingflex_tag);
694 logVolPV->add(wingflex_xformA);
695 logVolPV->add(wingflex_logVolPV_1);
696
697 GeoTrf::Translation3D wingflex_posA_2(wingFlexPosX, wingFlexPosY , zPos+ModuleLength_flex*.25);
698 GeoTransform* wingflex_xformA_2 = new GeoTransform(GeoTrf::Transform3D(wingflex_posA_2*GeoTrf::RotateZ3D(fabs(flex_angle))));
699
700 GeoPhysVol * wingflex_logVolPV_2 = new GeoPhysVol(wingflex_logVol);
701 logVolPV->add(wingflex_tag);
702 logVolPV->add(wingflex_xformA_2);
703 logVolPV->add(wingflex_logVolPV_2);
704
705
706
707 GeoTrf::Translation3D wingflex_posC(wingFlexPosX, wingFlexPosY , -zPos-ModuleLength_flex*.25);
708 GeoTransform* wingflex_xformC = new GeoTransform(GeoTrf::Transform3D(wingflex_posC*GeoTrf::RotateZ3D(fabs(flex_angle))));
709
710 GeoPhysVol * wingflex_logVolPV_C1 = new GeoPhysVol(wingflex_logVol);
711 logVolPV->add(wingflex_tag);
712 logVolPV->add(wingflex_xformC);
713 logVolPV->add(wingflex_logVolPV_C1);
714
715 GeoTrf::Translation3D wingflex_posC_2(wingFlexPosX, wingFlexPosY , -zPos+ModuleLength_flex*.25);
716 GeoTransform* wingflex_xformC_2 = new GeoTransform(GeoTrf::Transform3D(wingflex_posC_2*GeoTrf::RotateZ3D(fabs(flex_angle))));
717
718 GeoPhysVol * wingflex_logVolPV_C2 = new GeoPhysVol(wingflex_logVol);
719 logVolPV->add(wingflex_tag);
720 logVolPV->add(wingflex_xformC_2);
721 logVolPV->add(wingflex_logVolPV_C2);
722
723 }
724
725 GeoPhysVol * cableflex_logVolPV = new GeoPhysVol(cableflex_logVol);
726 GeoNameTag* cableflex_tag = new GeoNameTag(lname.str());
727 logVolPV->add(cableflex_tag);
728 logVolPV->add(cableflex_xform);
729 logVolPV->add(cableflex_logVolPV);
730
732 << "(" << cableflex_pos.x() << "," << cableflex_pos.y() << "," << cableflex_pos.z() << ")"
733 << " " << FlexThicknessRL<<" / ";
734
735
736 if((ModuleNumber_flex%2==1&&iModule>0)||ModuleNumber_flex%2==0)
737 {
738 std::ostringstream lname;
739 lname << "StaveFlex_"<<iFlexModule<<"C";
740
741 GeoTrf::Translation3D cableflex_pos2((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,-ModulePosZ-flexGapZ*0.5);
742 GeoTransform* cableflex_xform2 = new GeoTransform(GeoTrf::Transform3D(cableflex_pos2*GeoTrf::RotateZ3D(fabs(flex_angle))));
743 GeoLogVol * cableflex_logVol = nullptr;
744
745 const GeoMaterial* scaledFlexMaterial=nullptr;
746 if(bFlexAndWing){
747 std::string flexMatName=
m_gmt_mgr->IBLFlexMaterial(iModule+1,
"staveC");
748 scaledFlexMaterial=
m_mat_mgr->getMaterial(flexMatName);
749 }
750
751
752
753
754
755
756
757
758 if(bFlexAndWing||bFlexConstantThickness)
759 cableflex_logVol= new GeoLogVol(lname.str(),cableflex_shape,scaledFlexMaterial);
760 else
761 cableflex_logVol= new GeoLogVol(lname.str(),cableflex_shape,cableflex_material);
762 GeoPhysVol * cableflex_logVolPV = new GeoPhysVol(cableflex_logVol);
763 GeoNameTag* cableflex_tag = new GeoNameTag(lname.str());
764 logVolPV->add(cableflex_tag);
765 logVolPV->add(cableflex_xform2);
766 logVolPV->add(cableflex_logVolPV);
767 }
768
769
770 if(iModule==NbModuleRL-1)
771 {
772 EndblockFlexXpos=(flex1x+flex2x+flex3x+flex4x)*0.25;
773 EndblockFlexYpos=(flex1y+flex2y+flex3y+flex4y)*0.25;
774 EndblockFlexThickness=FlexThicknessRL;
775 }
776
777 ModulePosZ+=ModuleTotLength;
778 if(!bFlexConstantThickness)
779 FlexThicknessRL+=FlexLayerThick;
780 }
781
783
784
785
786
787
788
789
790 if(bFlexAndWing&&nbModuleSvc==0)
791 {
792 m_gmt_mgr->msg(MSG::INFO)<<
"Wings : "<< FlexOffset<<
" "<<flexHalfWidth<<
endmsg;
793
795 double flex1x = foamMidX+(wingPos+wingHalfWidth)*vDirX;
796 double flex1y = foamMidY+(wingPos+wingHalfWidth)*vDirY;
797 double flex2x = flex1x+WingThick*vPerpDirX;
798 double flex2y = flex1y+WingThick*vPerpDirY;
799 double flex4x = foamMidX+(wingPos)*vDirX;
800 double flex4y = foamMidY+(wingPos)*vDirY;
801 double flex3x = flex4x+WingThick*vPerpDirX;
802 double flex3y = flex4y+WingThick*vPerpDirY;
803
804 GeoBox* wingflex_shape =
new GeoBox(WingThick*0.5,wingHalfWidth-
m_SafetyMargin,(wingZmax-wingZmin)*.5);
805
806
807 std::ostringstream wingName;
808 wingName << "WingFlex";
809
810
811 GeoTrf::Vector3D wingflex_posA((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,(wingZmax-wingZmin)*.5+FlexStaveMiddleGap);
812 GeoTransform* wingflex_xformA = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.0,0.0,std::abs(flex_angle)),wingflex_posA));
813
814 const GeoMaterial* wingflex_material=
m_mat_mgr->getMaterial(
"pix::WingFlexA");
815 GeoLogVol * wingflex_logVol = new GeoLogVol(wingName.str(),wingflex_shape,wingflex_material);
816
817 GeoPhysVol * wingflex_logVolPV = new GeoPhysVol(wingflex_logVol);
818 GeoNameTag* wingflex_tag = new GeoNameTag(wingName.str());
819 logVolPV->add(wingflex_tag);
820 logVolPV->add(wingflex_xformA);
821 logVolPV->add(wingflex_logVolPV);
822
823 GeoTrf::Vector3D wingflex_posC((flex1x+flex2x+flex3x+flex4x)*0.25,(flex1y+flex2y+flex3y+flex4y)*0.25,-((wingZmax-wingZmin)*.5+FlexStaveMiddleGap));
824 GeoTransform* wingflex_xformC = new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.0,0.0,std::abs(flex_angle)),wingflex_posC));
825 logVolPV->add(wingflex_tag);
826 logVolPV->add(wingflex_xformC);
827 logVolPV->add(wingflex_logVolPV);
828 }
829
830
831
832
833
834
835 const GeoTube* coolingPipe = new GeoTube(0.0,TubeOuterDiam*0.5,MiddleSectionLength*0.5);
836 const GeoTube* coolingPipeInner = new GeoTube(0.0,TubeInnerDiam*0.5,MiddleSectionLength*0.5);
837
838 GeoLogVol * cp_logVol = nullptr;
839
840 if(TubeGlueThick<0.0001)
841 {
842 m_gmt_mgr->msg(MSG::INFO)<<
"** TUBE : without Stycast "<<TubeGlueThick<<
endmsg;
843 const GeoMaterial* cp_material =
m_mat_mgr->getMaterial(
"pix::CoolingPipe_IBL");
844 cp_logVol = new GeoLogVol("CoolingPipe",coolingPipe,cp_material);
845 }
846 else
847 {
848 m_gmt_mgr->msg(MSG::INFO)<<
"** TUBE : with Stycast "<<TubeGlueThick<<
" diam "<<TubeOuterDiam*0.5<<
" "<<TubeInnerDiam*0.5<<
endmsg;
849 double glueVolume = (TubeOuterDiam*0.5+TubeGlueThick)*(TubeOuterDiam*0.5+TubeGlueThick)*
M_PI*MiddleSectionLength;
850 double tubeOuterVolume = TubeOuterDiam*TubeOuterDiam*0.25*
M_PI*MiddleSectionLength;
851 double tubeInnerVolume = TubeInnerDiam*TubeInnerDiam*0.25*
M_PI*MiddleSectionLength;
852
853 const std::string compMatName="CoolingPipeGlue_IBL";
854 const GeoMaterial* cp_material =
m_mat_mgr->getCompositeMaterialForVolume(compMatName,
855 tubeOuterVolume-tubeInnerVolume,
856 tubeOuterVolume-tubeInnerVolume,"pix::CoolingPipe_IBL",
857 glueVolume-tubeOuterVolume,"pix::Stycast2850FT");
858 m_gmt_mgr->msg(MSG::INFO)<<
"***> new material : "<<cp_material->getName()<<
" "<<cp_material->getDensity()/(GeoModelKernelUnits::gram/Gaudi::Units::cm3)<<
endmsg;
859 cp_logVol = new GeoLogVol("CoolingPipe",coolingPipe,cp_material);
860 }
861
862 GeoPhysVol * cp_logPV = new GeoPhysVol(cp_logVol);
863
864
865
866
867
868 GeoNameTag* cp_tag = new GeoNameTag("CoolingPipe");
869 GeoTrf::Translate3D cp_pos(xGblOffset+TubeMiddlePos,0.0,0.0);
870 GeoTransform* cp_xform = new GeoTransform(cp_pos);
871 foam_logVolPV->add(cp_tag);
872 foam_logVolPV->add(cp_xform);
873 foam_logVolPV->add(cp_logPV);
874
875
876 const GeoMaterial* cp_inner_material =
m_mat_mgr->getMaterial(
m_gmt_mgr->getMaterialName(
"CoolingFluid",0,0));
877 GeoLogVol * cp_inner_log = new GeoLogVol("CoolingPipeInner",coolingPipeInner,cp_inner_material);
878 GeoPhysVol * cp_inner_logPV = new GeoPhysVol(cp_inner_log);
879
880 GeoNameTag* cp_inner_tag = new GeoNameTag("CoolingPipeInner");
881 GeoTransform* cp_inner_xform = new GeoTransform(GeoTrf::Transform3D::Identity());
882 cp_logPV->add(cp_inner_tag);
883 cp_logPV->add(cp_inner_xform);
884 cp_logPV->add(cp_inner_logPV);
885
886 logVolPV->add(foam_tag);
887 logVolPV->add(foam_xform);
888 logVolPV->add(foam_logVolPV);
889
890
891
892
893
894
895
896
897
898
899
906
908
910 double doglegFlexLength=FlexDogLeg_length;
911 if(bFlexAndWing)
913
915
916
917
918
919
920
921 GeoSimplePolygonBrep * endblock_shape =
new GeoSimplePolygonBrep(
m_endblockLength*.5+safetyMarginZ);
922 endblock_shape->addVertex(plate1x,plate1y);
923 endblock_shape->addVertex(omega1x,omega1y);
924 endblock_shape->addVertex(omega2x,omega2y);
925 endblock_shape->addVertex(omega3x,omega3y);
926 endblock_shape->addVertex(omega4x,omega4y);
927 endblock_shape->addVertex(omega5x,omega5y);
928 endblock_shape->addVertex(plate4x,plate4y);
929
930 const GeoMaterial* endblock_material_weight =
m_mat_mgr->getMaterialForVolume(
"pix::EndblockA_IBLwght",endblock_shape->volume());
931 GeoLogVol * endblock_logVol = nullptr;
932 GeoLogVol * endblockA_logVol = nullptr;
933 GeoLogVol * endblockC_logVol = nullptr;
934 if(endblock_material_weight){
935 double endblockOmegaOverlap=
m_gmt_mgr->IBLStaveMechanicalStaveEndBlockOmegaOverlap();
936 double omegaStaveVolume = omega_shape->volume();
937 double omegaVolume = omegaStaveVolume*endblockOmegaOverlap/omegaStaveVolume;
938 double endblockVolume = endblock_shape->volume();
939
940 const std::string compMatNameA="EndblockOgA_IBL";
941 const GeoMaterial* endblockA_omega_material =
m_mat_mgr->getCompositeMaterialForVolume(compMatNameA,
942 endblockVolume+omegaVolume,
943 omegaVolume,"pix::Omega_IBL",
944 endblockVolume,"pix::EndblockA_IBLwght");
945
946 endblockA_logVol = new GeoLogVol("EndBlock",endblock_shape,endblockA_omega_material);
948
949 const std::string compMatNameC="EndblockOgC_IBL";
950 const GeoMaterial* endblockC_omega_material =
m_mat_mgr->getCompositeMaterialForVolume(compMatNameC,
951 endblockVolume+omegaVolume,
952 omegaVolume,"pix::Omega_IBL",
953 endblockVolume,"pix::EndblockC_IBLwght");
954 endblockC_logVol = new GeoLogVol("EndBlock",endblock_shape,endblockC_omega_material);
956
957 }
958 else {
959 const GeoMaterial* endblock_material =
m_mat_mgr->getMaterial(
"pix::EndBlock_IBL");
960 endblock_logVol = new GeoLogVol("EndBlock",endblock_shape,endblock_material);
962 }
963
964
965
966
967
968
969
970
971
972
973 const GeoTube* endblock_coolingPipe =
new GeoTube(0.0,TubeOuterDiam*0.5,
m_endblockLength*.5);
974
975 const GeoMaterial* cp_endblock_material =
m_mat_mgr->getMaterial(
"pix::CoolingPipe_IBL");
976 GeoLogVol * cp_endblock_log = new GeoLogVol("EndBlockCoolingPipe",endblock_coolingPipe,cp_endblock_material);
977 GeoPhysVol * cp_endblock_logPV = new GeoPhysVol(cp_endblock_log);
978
979 GeoNameTag* cp_endblock_tag = new GeoNameTag("EndBlockCoolingPipe");
980 GeoTrf::Translate3D cp_endblock_pos(xGblOffset+TubeMiddlePos,0.0,0.0);
981 GeoTransform* cp_endblock_xform = new GeoTransform(cp_endblock_pos);
989 }
990
991 const GeoTube* endblock_coolingPipeInner =
new GeoTube(0.0,TubeInnerDiam*0.5,
m_endblockLength*.5);
992 const GeoMaterial* cp_endblock_inner_material =
m_mat_mgr->getMaterial(
m_gmt_mgr->getMaterialName(
"CoolingFluid",0,0));
993 GeoLogVol * cp_endblock_inner_log = new GeoLogVol("EndBlockCoolingPipeInner",endblock_coolingPipeInner,cp_endblock_inner_material);
994 GeoPhysVol * cp_endblock_inner_logPV = new GeoPhysVol(cp_endblock_inner_log);
995
996 GeoNameTag* cp_endblock_inner_tag = new GeoNameTag("EndBlockCoolingPipeInner");
997 GeoTransform* cp_endblock_inner_xform = new GeoTransform(GeoTrf::Transform3D::Identity());
998 cp_endblock_logPV->add(cp_endblock_inner_tag);
999 cp_endblock_logPV->add(cp_endblock_inner_xform);
1000 cp_endblock_logPV->add(cp_endblock_inner_logPV);
1001
1004
1005 m_gmt_mgr->msg(MSG::INFO)<<
"IBL EOS : mechanical stave length : "<<MechanicalStaveLength*0.5<<
endmsg;
1010
1011
1012
1013
1014
1015
1017
1018 const GeoMaterial* scaledFlexMaterial=nullptr;
1019 if(bFlexAndWing){
1020 std::string flexMatName=
m_gmt_mgr->IBLFlexMaterial(1,
"doglegA");
1021 scaledFlexMaterial=
m_mat_mgr->getMaterial(flexMatName);
1022 }
1023
1024
1025
1026
1027
1028
1029
1030 else{
1031 scaledFlexMaterial=
m_mat_mgr->getMaterial(
"pix::CableFlex_IBL");
1032 }
1033
1034
1035 std::ostringstream lname;
1036 lname << "SrvEndblockFlex";
1037
1038
1039
1040 GeoTrf::Vector3D cableflex_pos(EndblockFlexXpos,EndblockFlexYpos,0.);
1041 m_endblockFlexTrf =
new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0.0,0.0, std::abs(flex_angle)),cableflex_pos));
1042 GeoLogVol * cableflex_logVol = new GeoLogVol(lname.str(),cableflex_shape,scaledFlexMaterial);
1044
1045 m_gmt_mgr->msg(MSG::INFO)<<
"Flex half thickness srv : "<<EndblockFlexThickness<<
endmsg;
1046
1047
1048
1049
1053
1054 if(bFlexAndWing){
1055
1056 const GeoTube* service_coolingPipe =
new GeoTube(0.0,TubeOuterDiam*0.5,
m_endblockSrvLength*.5+doglegFlexLength*.5-2*safetyMarginZ);
1057
1058 const GeoMaterial* cp_service_material =
m_mat_mgr->getMaterial(
"pix::CoolingPipe_IBL");
1059 GeoLogVol * cp_service_log = new GeoLogVol("SrvCoolingPipe",service_coolingPipe,cp_service_material);
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072 const GeoTube* service_coolingPipeInner =
new GeoTube(0.0,TubeInnerDiam*0.5,
m_endblockSrvLength*.5+doglegFlexLength*.5-2*safetyMarginZ);
1073 const GeoMaterial* cp_service_inner_material =
m_mat_mgr->getMaterial(
m_gmt_mgr->getMaterialName(
"CoolingFluid",0,0));
1074 GeoLogVol * cp_service_inner_log = new GeoLogVol("SrvCoolingPipeInner",service_coolingPipeInner,cp_service_inner_material);
1075 GeoPhysVol * cp_service_inner_logPV = new GeoPhysVol(cp_service_inner_log);
1076
1077 GeoNameTag* cp_service_inner_tag = new GeoNameTag("SrvCoolingPipeInner");
1078 GeoTransform* cp_service_inner_xform = new GeoTransform(GeoTrf::Transform3D::Identity());
1082
1085
1088 }
1089
1090
1091
1092
1093
1094
1096 pmThicknessN3D,pmThicknessP3D,pmShilftLateral3D);
1097
1102 }
1103
1104 if(bFlexAndWing){
1107 }
1109
1111
1112
1113
1114 return logVolPV;
1115
1116}
double m_OmegaMidStaveThick
double m_MidStaveSidePointY
GeoNodePtr< GeoTransform > m_serviceCoolPipeTrfC
void GetSurroundingConvexShape(std::vector< double > &xPoint, std::vector< double > &yPoint, std::vector< int > iExcept=std::vector< int >())
GeoPhysVol * m_endblockCPhysVol
GeoNodePtr< GeoTransform > m_endblockFlexTrf
GeoNodePtr< GeoSimplePolygonBrep > m_basicStaveEnvelopShape
double m_endblockSrvLength
double m_OmegaEndStavePointX
virtual void computeStaveEnvelopTransformAndSize(double moduleThickN, double moduleThickP, double moduleWidth, double moduleThickN3D, double moduleThickP3D, double moduleWidth3D) override
GeoPhysVol * m_endblockFlexPhysVol
void ComputeStaveExternalShape()
GeoNodePtr< GeoTransform > m_serviceCoolPipeTrfA
void RemoveCoincidentAndColinearPointsFromShape(std::vector< double > &xPoint, std::vector< double > &yPoint)
double m_OmegaEndStaveThick
double m_OmegaEndStavePointY
GeoPhysVol * m_serviceCoolPipePhysVol
double m_MidStaveSidePointX
GeoPhysVol * m_endblockAPhysVol
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
GeoModelIO::ReadGeoModel * m_sqliteReader
InDetDD::PixelDetectorManager * m_DDmgr
InDetMaterialManager * m_mat_mgr