83{
84 (*m_log) << MSG::DEBUG <<
" TileGeoSectionBuilder::fillSection ModuleNcp= "<<ModuleNcp<<
endmsg;
85
86 double tan_delta_phi_2 = std::tan(delta_phi/2*Gaudi::Units::deg);
87
88
89
90
94 const GeoMaterial* matAluminium{nullptr};
95
96
97
98
99 double dX1 =0., dX2 =0., dY1 =0., dY2 =0., dZ1 =0., dZ2 =0.;
100 std::string volname ="";
101
102
103 float PosXcut =0., PosYcut =0., PosY =0., Rmore =0.;
104 float Radius =0., YcorA =0., YcorB =0., lenPla =0., Blia =0.;
105
106
107 float phi = (
double(ModuleNcp-1) + 0.5)*delta_phi;
108
109
110 int SideFl = 1;
111 if (ModuleNcp>=35 && ModuleNcp<=37) SideFl = -1;
112
113 GeoTrf::Transform3D TransCut2(GeoTrf::Transform3D::Identity());
114 GeoTrf::Transform3D TransCutL(GeoTrf::Transform3D::Identity());
115 GeoTrf::Transform3D TransCutR(GeoTrf::Transform3D::Identity());
116
117 GeoIntrusivePtr<const GeoShapeUnion> CutA{nullptr};
118 GeoIntrusivePtr<GeoShape> CutB{nullptr};
119
120
121 if (sec_number==2 &&
m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62))) {
122 volname =
"CutB";
m_dbManager->SetCurrentCuts(volname);
125 Rmore = 0.8*Gaudi::Units::cm;
126
127
133
134 checking(
"CutB1",
false, 1, dX1,dX2,dY1,dY2,dZ1);
135 GeoTrd* CutB1 = new GeoTrd(dX1,dX2,dY1,dY2,dZ1);
136
137 CutB = CutB1;
138
139
140 volname =
"Cut1up";
m_dbManager->SetCurrentCuts(volname);
142
148
149 checking(
"Cut1up",
false, 1, dX1,dX2,dY1,dY2,dZ1);
150 GeoTrd* Cut1up = new GeoTrd(dX1,dX2,dY1,dY2,dZ1);
151
152 volname =
"Cut2down";
m_dbManager->SetCurrentCuts(volname);
158
159 checking(
"Cut2down",
false, 1, dX1,dX2,dY1,dY2,dZ2);
160 GeoTrd* Cut1down = new GeoTrd(dX1,dX2,dY1,dY2,dZ2);
161
162 GeoTrf::Translate3D yPosA(0.,0.,-dZ1-dZ2);
163
164 const GeoShapeUnion& CutA1 = Cut1up->add(*Cut1down<<yPosA);
165 CutA = &CutA1;
166
168
169 if (ModuleNcp==35||ModuleNcp==62) { YcorA = 5*Gaudi::Units::cm; YcorB = 5*Gaudi::Units::cm; lenPla =0.8*Gaudi::Units::cm, Blia = 17.4*Gaudi::Units::cm;}
170 if (ModuleNcp==36||ModuleNcp==61) { YcorA = 6.5*Gaudi::Units::cm; YcorB = 6*Gaudi::Units::cm; lenPla =1.7*Gaudi::Units::cm; Blia = 16.9*Gaudi::Units::cm;}
171 if (ModuleNcp==37||ModuleNcp==60) { YcorA = 8*Gaudi::Units::cm; YcorB = 9*Gaudi::Units::cm; lenPla =2.8*Gaudi::Units::cm; Blia = 16.4*Gaudi::Units::cm;}
172
173 TransCut2 = GeoTrf::TranslateZ3D(-Radius)
174 * GeoTrf::RotateX3D((90-
phi)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg)
175 * GeoTrf::Translate3D(0.1*Gaudi::Units::cm,SideFl*17.5*Gaudi::Units::cm,-PosY+YcorA);
176
177
178
179 if (neg) {
180 GeoTrf::Vector3D ptTmp = TransCut2*GeoTrf::Vector3D(0.,0.,0.);
181 TransCut2 = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*Gaudi::Units::deg)*TransCut2;
182 }
183
184 if (ModuleNcp>=60 && ModuleNcp<=62) {
185 TransCutL = GeoTrf::TranslateZ3D(-Radius)
186 * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(
phi*Gaudi::Units::deg)
187 * GeoTrf::Translate3D(-1.4*Gaudi::Units::cm,PosYcut+YcorB,-PosXcut-Blia);
188
189
190 if (neg) {
191 GeoTrf::Vector3D ptTmp = TransCutL*GeoTrf::Vector3D(0.,0.,0.);
192 TransCutL = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*Gaudi::Units::deg)*TransCutL;
193 }
194
195 } else if (ModuleNcp>=35 && ModuleNcp<=37) {
196 TransCutR = GeoTrf::TranslateZ3D(-Radius)
197 * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(
phi*Gaudi::Units::deg)
198 * GeoTrf::Translate3D(-1.4*Gaudi::Units::cm,PosYcut+YcorB,PosXcut+Blia)
199 * GeoTrf::RotateY3D(180*Gaudi::Units::deg);
200
201 if (neg) {
202 GeoTrf::Vector3D ptTmp = TransCutR*GeoTrf::Vector3D(0.,0.,0.);
203 TransCutR = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*Gaudi::Units::deg)*TransCutR;
204 }
205 }
206
207 if (
m_log->level()<=MSG::DEBUG)
208 (*m_log) << MSG::DEBUG <<
" _fillSection: CutA and CutB Ok"<<
endmsg;
209 }
210
211
212
214 double thicknessGirderMother = 0.0;
215 double specialModuleZShift = 0.0;
216
218
220
221 if ((Id4 == 7) && (sec_number == 3))
223
224 double heightGirderMother = (tile_rmax -
m_dbManager->TILBrmax())*Gaudi::Units::cm;
225 double dy1GirderMother =
m_dbManager->TILBrmax() * tan_delta_phi_2 * Gaudi::Units::cm;
226 double dy2GirderMother = tile_rmax * tan_delta_phi_2 * Gaudi::Units::cm;
227
228
229
230
231 if ((Id4 == 7) && (sec_number == 3)) {
233 }
234
236 thicknessGirderMother/2,thicknessGirderMother/2,dy1GirderMother,dy2GirderMother,heightGirderMother/2);
237
238 GeoTrd* girderMother = new GeoTrd(thicknessGirderMother/2,
239 thicknessGirderMother/2,
240 dy1GirderMother,
241 dy2GirderMother,
242 heightGirderMother/2);
243
244 GeoLogVol* lvGirderMother = new GeoLogVol("GirderMother",girderMother,matAir);
245 PVLink pvGirderMother = new GeoPhysVol(lvGirderMother);
246
248 tile_rmax,
250 tan_delta_phi_2,
251 thicknessGirderMother*(1./Gaudi::Units::cm));
252
253 GeoTransform* tfGirderMother{nullptr};
254
255 if (sec_number==3)
256 tfGirderMother =
new GeoTransform(GeoTrf::Translate3D((
m_dbManager->TILBdzend()-
m_dbManager->TILBdzend2())*Gaudi::Units::cm/2, 0.,
258 else
259 tfGirderMother =
new GeoTransform(GeoTrf::Translate3D((
m_dbManager->TILBdzend()-
m_dbManager->TILBdzend2())*Gaudi::Units::cm/2, 0.,
260 (
m_dbManager->TILBrmax()-rminb)*Gaudi::Units::cm/2));
261
262 mother->add(tfGirderMother);
263 mother->add(pvGirderMother);
264
265 if (
m_log->level()<=MSG::DEBUG)
266 (*m_log) << MSG::DEBUG <<
" _fillSection: GirderMother Ok "<<
endmsg;
267
268 }
269
270
271 double thicknessFrontPlate, heightFrontPlate, dy1FrontPlate, dy2FrontPlate;
272 double rless =.150;
273 int NbPeriod =0;
274
276 if (sec_number==3) {
277
278 thicknessFrontPlate = (
m_dbManager->TILBdzmodul() - zlen_itc2)*Gaudi::Units::cm;
279
280 if (thicknessFrontPlate > rless) {
281 heightFrontPlate =
m_dbManager->TILBdrfront()*Gaudi::Units::cm;
282 dy1FrontPlate = (rminb*tan_delta_phi_2 -
m_dbManager->TILBphigap()/2)*Gaudi::Units::cm;
284
285 if (
m_log->level()<=MSG::DEBUG)
286 (*m_log) << MSG::DEBUG <<" FrontPlateSh dX1,dX2= "<<thicknessFrontPlate/2<<", "<<thicknessFrontPlate/2
287 <<" dY1,dY2= "<<dy1FrontPlate<<" "<<dy2FrontPlate<<" dZ= "<<heightFrontPlate/2
289
290 GeoTrd* frontPlateSh = new GeoTrd(thicknessFrontPlate/2,
291 thicknessFrontPlate/2,
292 dy1FrontPlate,
293 dy2FrontPlate,
294 heightFrontPlate/2);
295
296 GeoLogVol* lvFrontPlateSh = new GeoLogVol("FrontPlateSh",frontPlateSh,matIron);
297 PVLink pvFrontPlateSh = new GeoPhysVol(lvFrontPlateSh);
298 GeoTransform* tfFrontPlateSh = new GeoTransform(GeoTrf::Translate3D(
299 -
m_dbManager->TILBdzmodul()/2*Gaudi::Units::cm+thicknessFrontPlate/2, 0.,
300 (rminb - tile_rmax)/2*Gaudi::Units::cm));
301
302 mother->add(tfFrontPlateSh);
303 mother->add(pvFrontPlateSh);
304
305 } else {
306 if (
m_log->level()<=MSG::DEBUG)
307 (*m_log) << MSG::DEBUG <<
" FrontPlateSh was lost "<<
endmsg;
308 }
309
310 }
else if (sec_number==2 && (
m_dbManager->BoolCuts() &&
311 ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) )) {
312
313 std::string volname ="";
314 double dXCutA = 0, dXCutB = 0;
315
316 volname =
"Cut1up";
m_dbManager->SetCurrentCuts(volname);
318
319 volname =
"CutB";
m_dbManager->SetCurrentCuts(volname);
321
323 heightFrontPlate =
m_dbManager->TILBdrfront()*Gaudi::Units::cm;
324 dy1FrontPlate = (rminb*tan_delta_phi_2 -
m_dbManager->TILBphigap()/2)*Gaudi::Units::cm;
326
327 GeoTrd* frontPlate = new GeoTrd(thicknessFrontPlate/2 -(dXCutA+dXCutB),
328 thicknessFrontPlate/2 -(dXCutA+dXCutB),
329 dy1FrontPlate,
330 dy2FrontPlate,
331 heightFrontPlate/2);
332
333
334
335
336
337
338
339
340
341
342
343 GeoLogVol* lvFrontPlate = new GeoLogVol("FrontPlate",frontPlate,matIron);
344 PVLink pvFrontPlate = new GeoPhysVol(lvFrontPlate);
345 GeoTransform* tfFrontPlate = new GeoTransform(GeoTrf::Translate3D(
348
349 mother->add(tfFrontPlate);
350 mother->add(pvFrontPlate);
351
352 if (
m_log->level()<=MSG::DEBUG)
353 (*m_log) << MSG::DEBUG<<
" _fillSection: FrontPlate Cut Ok "<<
endmsg;
354
355 } else {
356
358 heightFrontPlate =
m_dbManager->TILBdrfront()*Gaudi::Units::cm;
359 dy1FrontPlate = (rminb*tan_delta_phi_2 -
m_dbManager->TILBphigap()/2)*Gaudi::Units::cm;
361
362 GeoTrd* frontPlate = new GeoTrd(thicknessFrontPlate/2,
363 thicknessFrontPlate/2,
364 dy1FrontPlate,
365 dy2FrontPlate,
366 heightFrontPlate/2);
367
368 GeoLogVol* lvFrontPlate = new GeoLogVol("FrontPlate",frontPlate,matIron);
369 PVLink pvFrontPlate = new GeoPhysVol(lvFrontPlate);
370 GeoTransform* tfFrontPlate = new GeoTransform(GeoTrf::Translate3D(
373
374 mother->add(tfFrontPlate);
375 mother->add(pvFrontPlate);
376 }
377 }
378
379
380 double dy1EndPlate, dy2EndPlate, thicknessEndPlate, heightEndPlate;
381
382
383 double heightEPHole =
m_dbManager->TILBflangex()*Gaudi::Units::cm;
384 double dyEPHole =
m_dbManager->TILBflangex()*Gaudi::Units::cm/2;
385
386
387 GeoTrf::Transform3D cutOutTransformation(GeoTrf::Transform3D::Identity());
388
389 GeoIntrusivePtr<GeoTransform> tfEndPlateSh{nullptr};
390
393
394
395 dy1EndPlate = rminb * tan_delta_phi_2 * Gaudi::Units::cm;
396 dy2EndPlate =
m_dbManager->TILBrmax() * tan_delta_phi_2 * Gaudi::Units::cm;
397 thicknessEndPlate =
m_dbManager->TILBdzend1() * Gaudi::Units::cm;
398 heightEndPlate = (
m_dbManager->TILBrmax() - rminb) * Gaudi::Units::cm;
399
400
401
402
403 GeoTrd* endPlateSh = new GeoTrd(thicknessEndPlate/2,
404 thicknessEndPlate/2,
405 dy1EndPlate,
406 dy2EndPlate,
407 heightEndPlate/2);
408 GeoLogVol* lvEndPlateSh{nullptr};
409
410
411 if (sec_number==2 && ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) ) {
412
413
414
415
416 GeoTrd* endPlateShCut = new GeoTrd(thicknessEndPlate,
417 thicknessEndPlate,
418 heightEndPlate/2.,
419 heightEndPlate/2.,
420 dy2EndPlate);
421
422
423 double rotationAngle ;
424 double shiftCutPlate ;
425 int rotationSign = 1;
426 if (ModuleNcp > 50) rotationSign *= -1;
427 if ( neg ) rotationSign *= -1;
428
429
430 if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) ) {
431 rotationAngle = (180.0 - 25.3125 )* Gaudi::Units::deg ;
432 shiftCutPlate = 38.7 * Gaudi::Units::mm;
433
434 cutOutTransformation =
435 GeoTrf::Translate3D(0,0, -heightEndPlate/2.) *
436 GeoTrf::RotateX3D( 90 * Gaudi::Units::deg ) *
437 GeoTrf::Translate3D(0.,0., -rotationSign * (dy2EndPlate + shiftCutPlate ) ) *
438 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
439
440 const GeoShape & endPlateShCutted3760 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;
441 lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3760) , matIron);
442
443 } else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) ) {
444 rotationAngle = - ( 116.4832 - 90. )* Gaudi::Units::deg ;
445 shiftCutPlate = ( (
m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1448.4 * Gaudi::Units::mm);
446
447 cutOutTransformation =
448 GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
449 GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate + 0.5*dy2EndPlate*(1.- std::cos(rotationAngle*Gaudi::Units::rad))) ) *
450 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
451
452 const GeoShape & endPlateShCutted3661 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;
453 lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3661) , matIron);
454
455 } else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) ) {
456 rotationAngle = - ( 104.0625 - 90.0 )* Gaudi::Units::deg ;
457 shiftCutPlate = ( (
m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1534.6 * Gaudi::Units::mm);
458
459 cutOutTransformation =
460 GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
461 GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) *
462 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
463
464 const GeoShape & endPlateShCutted3562 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;
465 lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3562) , matIron);
466
467 } else {
468
469
470
471 (*m_log) << MSG::ERROR <<
" TileGeoSectionBuilder::fillSection . Wrong Module in cut-out region. ModuleNcp= "<<ModuleNcp<<
endmsg;
472 lvEndPlateSh = new GeoLogVol("EndPlateSh", endPlateSh , matIron);
473 }
474
475 } else {
476 lvEndPlateSh = new GeoLogVol("EndPlateSh", endPlateSh , matIron);
477 }
478
479
480
481
482
483
484
485 PVLink pvEndPlateSh = new GeoPhysVol(lvEndPlateSh);
486
487 tfEndPlateSh = new GeoTransform(GeoTrf::Translate3D(
488 specialModuleZShift +
490 (
m_dbManager->TILBrmax() - tile_rmax)*Gaudi::Units::cm/2));
491
492 mother->add(tfEndPlateSh);
493 mother->add(pvEndPlateSh);
494
495 if (
m_log->level()<=MSG::DEBUG)
496 (*m_log) << MSG::DEBUG <<
" _fillSection: ext.barrel EndPlateSh Ok "<<
endmsg;
497
498 } else {
499
500 dy1EndPlate = rminb * tan_delta_phi_2 * Gaudi::Units::cm;
501 dy2EndPlate = tile_rmax * tan_delta_phi_2 * Gaudi::Units::cm;
502 thicknessEndPlate =
m_dbManager->TILBdzend1() * Gaudi::Units::cm;
503 heightEndPlate = (tile_rmax-rminb)*Gaudi::Units::cm;
504
505 GeoTrd* endPlate1 = new GeoTrd(thicknessEndPlate/2,
506 thicknessEndPlate/2,
507 dy1EndPlate,
508 dy2EndPlate,
509 heightEndPlate/2);
510
511 GeoLogVol* lvEndPlate1 = new GeoLogVol("EndPlate1",endPlate1,matIron);
512 PVLink pvEndPlate1 = new GeoPhysVol(lvEndPlate1);
513
514
516 GeoTrd* epHole1 = new GeoTrd (thicknessEndPlate/2,
517 thicknessEndPlate/2,
518 dyEPHole,
519 dyEPHole,
520 heightEPHole/2);
521
522 GeoLogVol* lvEPHole1 = new GeoLogVol("EPHole1",epHole1,matAir);
523 PVLink pvEPHole1 = new GeoPhysVol(lvEPHole1);
524 GeoTransform* tfEPHole1 = new GeoTransform(GeoTrf::Translate3D(0.,0.,
525 (
m_dbManager->TILBflangey()-(tile_rmax + rminb)/2)*Gaudi::Units::cm));
526 pvEndPlate1->add(tfEPHole1);
527 pvEndPlate1->add(pvEPHole1);
528 }
529
530 GeoTransform* tfEndPlate1 = new GeoTransform(GeoTrf::Translate3D(
532 mother->add(tfEndPlate1);
533 mother->add(pvEndPlate1);
534
535 if (
m_log->level()<=MSG::DEBUG)
536 (*m_log) << MSG::DEBUG <<
" _fillSection: Ordinary EndPlateSh Ok "<<
endmsg;
537 }
538 }
539
540
541 GeoIntrusivePtr<GeoTransform> tfEndPlate2{nullptr};
542
544
545 double radShift =lenPla;
546 double rminbT=rminb + radShift;
547
548 dy1EndPlate = rminb * tan_delta_phi_2 * Gaudi::Units::cm;
549 dy2EndPlate = tile_rmax * tan_delta_phi_2 * Gaudi::Units::cm;
550 thicknessEndPlate =
m_dbManager->TILBdzend2() * Gaudi::Units::cm;
551 heightEndPlate = (tile_rmax-rminb) * Gaudi::Units::cm;
552
553
554 GeoLogVol* lvEndPlate2{nullptr};
555 GeoTrd* endPlate2 = new GeoTrd(thicknessEndPlate/2,
556 thicknessEndPlate/2,
557 dy1EndPlate,
558 dy2EndPlate,
559 heightEndPlate/2);
560
561 tfEndPlate2 = new GeoTransform(GeoTrf::Translate3D(
563
564 if (sec_number==2 && ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) ) {
565
566 GeoTrd* endPlate2Cut = new GeoTrd(thicknessEndPlate,
567 thicknessEndPlate,
568 heightEndPlate/2.,
569 heightEndPlate/2.,
570 dy2EndPlate);
571 double rotationAngle ;
572 double shiftCutPlate ;
573 int rotationSign = 1;
574 if (ModuleNcp > 50) rotationSign *= -1;
575 if ( neg ) rotationSign *= -1;
576
577 if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) ) {
578 rotationAngle = - ( 115.3125 - 90.0 )* Gaudi::Units::deg ;
579 shiftCutPlate = ( (
m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1364.0 * Gaudi::Units::mm);
580
581 cutOutTransformation =
582 GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
583 GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) *
584 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
585
586 const GeoShape & endPlate2Cutted3760 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;
587 lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3760) , matIron);
588
589 } else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) ) {
590 rotationAngle = - ( 109.6875 - 90.0 )* Gaudi::Units::deg ;
591 shiftCutPlate = ( (
m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1464.0 * Gaudi::Units::mm);
592
593 cutOutTransformation =
594 GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
595 GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) *
596 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
597
598 const GeoShape & endPlate2Cutted3661 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;
599 lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3661) , matIron);
600
601 } else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) ) {
602 rotationAngle = - ( 104.0625 - 90.0 )* Gaudi::Units::deg ;
603 shiftCutPlate = ( (
m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - ( 1915.0 -385.0 )* Gaudi::Units::mm);
604
605 cutOutTransformation =
606 GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
607 GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) *
608 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
609
610 const GeoShape & endPlate2Cutted3562 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;
611 lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3562) , matIron);
612 }
613
614
615
616
617
618
619
620
621
622 } else {
623 lvEndPlate2 = new GeoLogVol("EndPlate2",endPlate2,matIron);
624 }
625
626 PVLink pvEndPlate2 = new GeoPhysVol(lvEndPlate2);
627
628
630 dyEPHole =
m_dbManager->TILBflangex()*Gaudi::Units::cm/2;
631
632 GeoTrd* epHole2 = new GeoTrd (thicknessEndPlate/2,
633 thicknessEndPlate/2,
634 dyEPHole,
635 dyEPHole,
636 heightEPHole/2);
637
638 GeoLogVol* lvEPHole2 = new GeoLogVol("EPHole2",epHole2,matAir);
639 PVLink pvEPHole2 = new GeoPhysVol(lvEPHole2);
640 GeoTransform* tfEPHole2 = new GeoTransform(GeoTrf::Translate3D(0.,0.,
641 (
m_dbManager->TILBflangey()-(tile_rmax + rminbT)/2)*Gaudi::Units::cm));
642 pvEndPlate2->add(tfEPHole2);
643 pvEndPlate2->add(pvEPHole2);
644 }
645
646 mother->add(tfEndPlate2);
647 mother->add(pvEndPlate2);
648
649 if (
m_log->level()<=MSG::DEBUG)
650 (*m_log) << MSG::DEBUG <<
" _fillSection: EndPlate2 Ok "<<
endmsg;
651
652 }
653
654
657 double dy1Absorber = (
m_dbManager->TILBrmin()*tan_delta_phi_2 -
m_dbManager->TILBphigap()/2)*Gaudi::Units::cm;
658 double dy2Absorber = (
m_dbManager->TILBrmax()*tan_delta_phi_2 -
m_dbManager->TILBphigap()/2)*Gaudi::Units::cm;
659
661 thicknessAbsorber/2,thicknessAbsorber/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
662
663
664 double thicknessPeriod =0, thicknessAbsorber1 =0, thicknessAbsorber2 =0, thicknessAbsorber3 =0;
665 double PosAbsor1 =0, PosAbsor2 =0, PosAbsor3 =0;
666 int nA1 =32, nA2 = 0, nA3 =16;
667
668 GeoTrd *absorber{nullptr}, *absorber1{nullptr}, *absorber3{nullptr};
669 GeoLogVol *lvAbsorber{nullptr}, *lvAbsorber1{nullptr}, *lvAbsorber3{nullptr};
670 PVLink pvAbsorber{nullptr}, pvAbsorber1{nullptr}, pvAbsorber3{nullptr},
671 pvTmp_Absorber1{nullptr}, pvTmp_Absorber3{nullptr};
672
673
674 switch (sec_number) {
675 case 2:
676 {
677
678 thicknessPeriod = 2.*(
m_dbManager->TILBdzmast() +
m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm;
679
680
682
683 thicknessAbsorber1 = nA1*thicknessPeriod;
684 PosAbsor1 = thicknessAbsorber/2 - thicknessAbsorber1/2;
685
686 thicknessAbsorber2 = nA2*thicknessPeriod;
687 PosAbsor2 = thicknessAbsorber/2 - thicknessAbsorber1 - thicknessAbsorber2/2;
688
689 thicknessAbsorber3 = nA3*thicknessPeriod;
690 PosAbsor3 = thicknessAbsorber/2 - thicknessAbsorber1 - thicknessAbsorber2 - thicknessAbsorber3/2;
691
692 if (
m_log->level()<=MSG::DEBUG)
693 (*m_log) << MSG::DEBUG <<" Number of periods per Module: N= "<<nA1+nA2+nA3
694 << " Middle absorber, numbers of periods = "<<nA2
696
697
698 absorber1 = new GeoTrd(thicknessAbsorber1/2, thicknessAbsorber1/2,
699 dy1Absorber, dy2Absorber,
700 heightAbsorber/2);
701
702 lvAbsorber1 = new GeoLogVol("Absorber",absorber1,matIron);
703 pvAbsorber1 = new GeoPhysVol(lvAbsorber1);
704
705
706 absorber = new GeoTrd(thicknessAbsorber2/2, thicknessAbsorber2/2,
707 dy1Absorber, dy2Absorber,
708 heightAbsorber/2);
709
710 lvAbsorber = new GeoLogVol("Absorber",absorber,matIron);
711 pvAbsorber = new GeoPhysVol(lvAbsorber);
712
713
714
715 absorber3 = new GeoTrd(thicknessAbsorber3/2, thicknessAbsorber3/2,
716 dy1Absorber, dy2Absorber,
717 heightAbsorber/2);
718
719 lvAbsorber3 = new GeoLogVol("Absorber",absorber3,matIron);
720 pvAbsorber3 = new GeoPhysVol(lvAbsorber3);
721
722
723 if (
m_log->level()<=MSG::DEBUG)
724 (*m_log) << MSG::DEBUG <<
" _fillSection: Ex.Barrel pvAbsorber 1,3 Ok "<<
endmsg;
725
726 break;
727 }
728 default:
729 {
730 absorber = new GeoTrd(thicknessAbsorber/2, thicknessAbsorber/2,
731 dy1Absorber, dy2Absorber,
732 heightAbsorber/2);
733
735 lvAbsorber = new GeoLogVol("Absorber",absorber,matIron);
736 } else {
737
738 lvAbsorber = new GeoLogVol("Absorber",absorber,matAir);
739 }
740 pvAbsorber = new GeoPhysVol(lvAbsorber);
741
742 if (
m_log->level()<=MSG::DEBUG) {
744 (*m_log) << MSG::DEBUG <<
" _fillSection: default pvAbsorber Ok "<<
endmsg;
745 } else {
746 (*m_log) << MSG::DEBUG <<
" _fillSection: special pvAbsorber made from Air Ok "<<
endmsg;
747 }
748 }
749
750 break;
751 }
752 }
753
754 double thicknessAbsorberChild;
755 Variable periodInd;
756
758 GeoLogVol* lvPeriod{nullptr};
759 PVLink pvPeriod{nullptr};
760 GeoTransform* tfPeriod{nullptr};
761 GeoSerialTransformer* stPeriod{nullptr};
762
763 GeoTrd* absorberChild{nullptr};
764 GeoLogVol* lvAbsorberChild{nullptr};
765 PVLink pvAbsorberChild{nullptr};
766 GeoTransform* tfAbsorberChild{nullptr};
767
768
769 switch (sec_number) {
770 case 1:
771 {
772
773
774
775
776
777 thicknessPeriod = 2.*(
m_dbManager->TILBdzmast() +
m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm;
778 MLOG(
DEBUG) <<
"BARREL Section -- m_dbManager->TILBdzmast(): " <<
m_dbManager->TILBdzmast() <<
", m_dbManager->TILBdzspac(): " <<
m_dbManager->TILBdzspac()
779 <<
", dzglue: " << dzglue <<
" ==> thicknessPeriod: " << thicknessPeriod <<
endmsg;
780
783
785 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
786
787 period =
new GeoTrd(thicknessPeriod/2,
788 thicknessPeriod/2,
789 dy1Absorber,
790 dy2Absorber,
791 heightAbsorber/2);
792
793 lvPeriod = new GeoLogVol("Period",period,matIron);
794 pvPeriod = new GeoPhysVol(lvPeriod);
795
797 thicknessPeriod*(1./Gaudi::Units::cm),
798 dzglue,
799 tan_delta_phi_2,
800 1);
801
802
803 thicknessAbsorberChild = thicknessPeriod*(
m_dbManager->TILBnperiod()-1);
804 absorberChild = new GeoTrd(thicknessAbsorberChild/2,
805 thicknessAbsorberChild/2,
806 dy1Absorber,
807 dy2Absorber,
808 heightAbsorber/2);
809 lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir);
810 pvAbsorberChild = new GeoPhysVol(lvAbsorberChild);
811
812
813 GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
814 TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
816 (thicknessAbsorberChild - thicknessAbsorber)/2);
817
818 stPeriod = new GeoSerialTransformer(pvPeriod,
819 &xfReplica1,
821
822 pvAbsorberChild->add(new GeoSerialIdentifier(0));
823 pvAbsorberChild->add(stPeriod);
824
825
826 tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
827 pvAbsorber->add(tfAbsorberChild);
828 pvAbsorber->add(pvAbsorberChild);
829
830
831 thicknessPeriod = (
m_dbManager->TILBdzmast() + 2.*
m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm;
832
834 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
835
836 period =
new GeoTrd(thicknessPeriod/2,
837 thicknessPeriod/2,
838 dy1Absorber,
839 dy2Absorber,
840 heightAbsorber/2);
841 lvPeriod = new GeoLogVol("Period",period,matIron);
842 pvPeriod = new GeoPhysVol(lvPeriod);
843
845 thicknessPeriod*(1./Gaudi::Units::cm),
846 dzglue,
847 tan_delta_phi_2,
848 2);
849
850
851 thicknessAbsorberChild = thicknessPeriod;
852 absorberChild = new GeoTrd(thicknessAbsorberChild/2,
853 thicknessAbsorberChild/2,
854 dy1Absorber,
855 dy2Absorber,
856 heightAbsorber/2);
857 lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir);
858 pvAbsorberChild = new GeoPhysVol(lvAbsorberChild);
859
861 (-thicknessAbsorberChild + thicknessAbsorber)/2);
862
863
864 tfPeriod = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
865
866 pvAbsorberChild->add(
new GeoIdentifierTag(
m_dbManager->TILBnperiod()-1));
867 pvAbsorberChild->add(tfPeriod);
868 pvAbsorberChild->add(pvPeriod);
869
870
871 tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
872 pvAbsorber->add(tfAbsorberChild);
873 pvAbsorber->add(pvAbsorberChild);
874
875 break;
876 }
877 case 2:
878 {
879
880 thicknessPeriod = 2. * (
m_dbManager->TILBdzmast() +
m_dbManager->TILBdzspac() + 2.*dzglue) * Gaudi::Units::cm;
881 MLOG(
DEBUG) <<
"EXTENDED BARREL Section -- m_dbManager->TILBdzmast(): " <<
m_dbManager->TILBdzmast() <<
", m_dbManager->TILBdzspac(): " <<
m_dbManager->TILBdzspac()
882 <<
", dzglue: " << dzglue <<
" ==> thicknessPeriod: " << thicknessPeriod <<
endmsg;
883
885 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
886
887 period =
new GeoTrd(thicknessPeriod/2,
888 thicknessPeriod/2,
889 dy1Absorber,
890 dy2Absorber,
891 heightAbsorber/2);
892 lvPeriod = new GeoLogVol("Period",period,matIron);
893 pvPeriod = new GeoPhysVol(lvPeriod);
894
896
898 thicknessPeriod*(1./Gaudi::Units::cm),
899 dzglue,
900 tan_delta_phi_2,
901 1);
902
903
904
905
906 GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber1)/2;
907 TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
909 (-thicknessAbsorber+thicknessAbsorber1)/2.);
910
911 stPeriod = new GeoSerialTransformer(pvPeriod,&xfReplica1,nA1);
912
913 pvAbsorber1->add(new GeoSerialIdentifier(0));
914 pvAbsorber1->add(stPeriod);
915
916
918 if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) {
919
920 GeoCutVolAction action1(*CutA, TransCut2);
921 pvAbsorber1->apply(&action1);
922 pvTmp_Absorber1 = action1.getPV();
923
924 if (
m_log->level()<=MSG::DEBUG)
925 (*m_log) << MSG::DEBUG <<
" _fillSection: CutA Ok "<<
endmsg;
926 }
927 }
928 if (
m_log->level()<=MSG::DEBUG)
929 (*m_log) << MSG::DEBUG <<
" _fillSection: Absorber1 Ok "<<
endmsg;
930
931
932 GENFUNCTION periodPos2 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber2)/2;
933 TRANSFUNCTION xfReplica2 = Pow(GeoTrf::TranslateX3D(1.),periodPos2);
935 (-thicknessAbsorber+thicknessAbsorber2)/2.+thicknessAbsorber1);
936
937 stPeriod = new GeoSerialTransformer(pvPeriod,&xfReplica2,nA2);
938
939 pvAbsorber->add(new GeoSerialIdentifier(nA1));
940 pvAbsorber->add(stPeriod);
941
942 if (
m_log->level()<=MSG::DEBUG)
943 (*m_log) << MSG::DEBUG <<
" _fillSection: pvAbsorber Ok "<<
endmsg;
944
945
946
947 GENFUNCTION periodPos3 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber3)/2;
948 TRANSFUNCTION xfReplica3 = Pow(GeoTrf::TranslateX3D(1.),periodPos3);
950 (-thicknessAbsorber+thicknessAbsorber3)/2.+thicknessAbsorber2+thicknessAbsorber1);
951
952 stPeriod = new GeoSerialTransformer(pvPeriod,&xfReplica3,nA3);
953
954 pvAbsorber3->add(new GeoSerialIdentifier(nA1+nA2));
955 pvAbsorber3->add(stPeriod);
956
958 if (ModuleNcp>=60 && ModuleNcp<=62) {
959
960
961 GeoCutVolAction action2(*CutB, TransCutL);
962 pvAbsorber3->apply(&action2);
963 pvTmp_Absorber3 = action2.getPV();
964 if (
m_log->level()<=MSG::DEBUG)
965 (*m_log) << MSG::DEBUG <<
" _fillSection: CutB L Ok "<<
endmsg;
966
967 } else if (ModuleNcp>=35 && ModuleNcp<=37) {
968
969
970 GeoCutVolAction action3(*CutB, TransCutR);
971 pvAbsorber3->apply(&action3);
972 pvTmp_Absorber3 = action3.getPV();
973 if (
m_log->level()<=MSG::DEBUG)
974 (*m_log) << MSG::DEBUG <<
" _fillSection: CutB R Ok "<<
endmsg;
975 }
976 }
977 if (
m_log->level()<=MSG::DEBUG) {
978 (*m_log) << MSG::DEBUG <<
" _fillSection: Absorber3 Ok "<<
endmsg;
979 }
980
981 break;
982 }
983 case 3:
984 {
985
986
988
989
990
991
992 thicknessPeriod = 2.*(
m_dbManager->TILBdzmast() +
m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm;
993 MLOG(
DEBUG) <<
"PLUG Section 1 -- m_dbManager->TILBdzmast(): " <<
m_dbManager->TILBdzmast() <<
", m_dbManager->TILBdzspac(): " <<
m_dbManager->TILBdzspac()
994 <<
", dzglue: " << dzglue <<
" ==> thicknessPeriod: " << thicknessPeriod <<
endmsg;
995
996 checking(
"Period 3 (ITC1 special)",
true, 4,
997 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
998
999 period =
new GeoTrd(thicknessPeriod/2,
1000 thicknessPeriod/2,
1001 dy1Absorber,
1002 dy2Absorber,
1003 heightAbsorber/2);
1004 lvPeriod = new GeoLogVol("Period",period,matIron);
1005 pvPeriod = new GeoPhysVol(lvPeriod);
1006
1008 thicknessPeriod*(1./Gaudi::Units::cm),
1009 dzglue,
1010 tan_delta_phi_2,
1011 1);
1012
1013 thicknessAbsorberChild = thicknessPeriod*(
m_dbManager->TILBnperiod()-1);
1014
1015 absorberChild = new GeoTrd(thicknessAbsorberChild/2,
1016 thicknessAbsorberChild/2,
1017 dy1Absorber,
1018 dy2Absorber,
1019 heightAbsorber/2);
1020 lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir);
1021 pvAbsorberChild = new GeoPhysVol(lvAbsorberChild);
1022
1023
1024 GENFUNCTION periodPosITC1sp = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
1025 TRANSFUNCTION xfReplicaITC1sp = Pow(GeoTrf::TranslateX3D(1.),periodPosITC1sp);
1027 (thicknessAbsorberChild - thicknessAbsorber)/2);
1028
1029 stPeriod = new GeoSerialTransformer(pvPeriod,
1030 &xfReplicaITC1sp,
1032
1033 pvAbsorberChild->add(new GeoSerialIdentifier(0));
1034 pvAbsorberChild->add(stPeriod);
1035
1036
1037 tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
1038 pvAbsorber->add(tfAbsorberChild);
1039 pvAbsorber->add(pvAbsorberChild);
1040
1041
1042
1043 thicknessPeriod =
m_dbManager->TILBdzspac()*Gaudi::Units::cm;
1044
1045 checking(
"Period 5 (ITC1 special)",
true, 4,
1046 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
1047
1048 period =
new GeoTrd(thicknessPeriod/2,
1049 thicknessPeriod/2,
1050 dy1Absorber,
1051 dy2Absorber,
1052 heightAbsorber/2);
1053 lvPeriod = new GeoLogVol("Period",period,matIron);
1054 pvPeriod = new GeoPhysVol(lvPeriod);
1055
1057 thicknessPeriod*(1./Gaudi::Units::cm),
1058 dzglue,
1059 tan_delta_phi_2,
1060 4);
1061
1062 thicknessAbsorberChild = thicknessPeriod;
1063 absorberChild = new GeoTrd(thicknessAbsorberChild/2,
1064 thicknessAbsorberChild/2,
1065 dy1Absorber,
1066 dy2Absorber,
1067 heightAbsorber/2);
1068 lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir);
1069 pvAbsorberChild = new GeoPhysVol(lvAbsorberChild);
1070
1072 (-thicknessAbsorberChild + thicknessAbsorber)/2);
1073
1074
1075 tfPeriod = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
1076 pvAbsorberChild->add(
new GeoIdentifierTag(
m_dbManager->TILBnperiod()-1));
1077 pvAbsorberChild->add(tfPeriod);
1078 pvAbsorberChild->add(pvPeriod);
1079
1080
1081 tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
1082 pvAbsorber->add(tfAbsorberChild);
1083 pvAbsorber->add(pvAbsorberChild);
1084
1085 if (
m_log->level()<=MSG::DEBUG)
1086 (*m_log) << MSG::DEBUG <<
" _fillSection: Absorber (ITC plug special) Ok "<<
endmsg;
1087
1088 } else {
1089 thicknessPeriod = 2.*(
m_dbManager->TILBdzmast() +
m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm;
1090
1092 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
1093
1094 period =
new GeoTrd(thicknessPeriod/2,
1095 thicknessPeriod/2,
1096 dy1Absorber,
1097 dy2Absorber,
1098 heightAbsorber/2);
1099 lvPeriod = new GeoLogVol("Period",period,matIron);
1100 pvPeriod = new GeoPhysVol(lvPeriod);
1101
1103 thicknessPeriod*(1./Gaudi::Units::cm),
1104 dzglue,
1105 tan_delta_phi_2,
1106 3);
1107
1108
1109 GENFUNCTION periodPos3 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber)/2;
1110 TRANSFUNCTION xfReplica3 = Pow(GeoTrf::TranslateX3D(1.),periodPos3);
1112
1113
1114
1115
1116
1118
1119 if (
m_log->level()<=MSG::DEBUG)
1120 (*m_log) << MSG::DEBUG <<
" SCNTitem= "<<
m_dbManager->SCNTitem()<<
" NbPeriod= "<<NbPeriod<<
endmsg;
1121 stPeriod = new GeoSerialTransformer(pvPeriod,
1122 &xfReplica3,
1123 NbPeriod);
1124
1125 pvAbsorber->add(new GeoSerialIdentifier(0));
1126 pvAbsorber->add(stPeriod);
1127 if (
m_log->level()<=MSG::DEBUG)
1128 (*m_log) << MSG::DEBUG <<
" _fillSection: Absorber (case 3) Ok "<<
endmsg;
1129 }
1130 break;
1131 }
1132 case 4:
1133 {
1134
1135
1136
1137
1138
1139 thicknessPeriod = 2.*(
m_dbManager->TILBdzmast() +
m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm;
1140 MLOG(
DEBUG) <<
"PLUG Section 2 -- m_dbManager->TILBdzmast(): " <<
m_dbManager->TILBdzmast() <<
", m_dbManager->TILBdzspac(): " <<
m_dbManager->TILBdzspac()
1141 <<
", dzglue: " << dzglue <<
" ==> thicknessPeriod: " << thicknessPeriod <<
endmsg;
1142
1144 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
1145
1146 period =
new GeoTrd(thicknessPeriod/2,
1147 thicknessPeriod/2,
1148 dy1Absorber,
1149 dy2Absorber,
1150 heightAbsorber/2);
1151 lvPeriod = new GeoLogVol("Period",period,matIron);
1152 pvPeriod = new GeoPhysVol(lvPeriod);
1153
1155 thicknessPeriod*(1./Gaudi::Units::cm),
1156 dzglue,
1157 tan_delta_phi_2,
1158 1);
1159
1160
1161 thicknessAbsorberChild = thicknessPeriod*(
m_dbManager->TILBnperiod()-1);
1162 absorberChild = new GeoTrd(thicknessAbsorberChild/2,
1163 thicknessAbsorberChild/2,
1164 dy1Absorber,
1165 dy2Absorber,
1166 heightAbsorber/2);
1167 lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir);
1168 pvAbsorberChild = new GeoPhysVol(lvAbsorberChild);
1169
1170
1171 GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
1172 TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
1174 (thicknessAbsorberChild - thicknessAbsorber)/2);
1175
1176 stPeriod = new GeoSerialTransformer(pvPeriod,
1177 &xfReplica1,
1179
1180 pvAbsorberChild->add(new GeoSerialIdentifier(0));
1181 pvAbsorberChild->add(stPeriod);
1182
1183
1184 tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
1185 pvAbsorber->add(tfAbsorberChild);
1186 pvAbsorber->add(pvAbsorberChild);
1187
1188
1189 thicknessPeriod =
m_dbManager->TILBdzspac()*Gaudi::Units::cm;
1190
1192 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
1193
1194 period =
new GeoTrd(thicknessPeriod/2,
1195 thicknessPeriod/2,
1196 dy1Absorber,
1197 dy2Absorber,
1198 heightAbsorber/2);
1199 lvPeriod = new GeoLogVol("Period",period,matIron);
1200 pvPeriod = new GeoPhysVol(lvPeriod);
1201
1203 thicknessPeriod*(1./Gaudi::Units::cm),
1204 dzglue,
1205 tan_delta_phi_2,
1206 4);
1207
1208 thicknessAbsorberChild = thicknessPeriod;
1209 absorberChild = new GeoTrd(thicknessAbsorberChild/2,
1210 thicknessAbsorberChild/2,
1211 dy1Absorber,
1212 dy2Absorber,
1213 heightAbsorber/2);
1214 lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir);
1215 pvAbsorberChild = new GeoPhysVol(lvAbsorberChild);
1216
1218 (-thicknessAbsorberChild + thicknessAbsorber)/2);
1219
1220
1221 tfPeriod = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
1222 pvAbsorberChild->add(
new GeoIdentifierTag(
m_dbManager->TILBnperiod()-1));
1223 pvAbsorberChild->add(tfPeriod);
1224 pvAbsorberChild->add(pvPeriod);
1225
1226
1227 tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
1228 pvAbsorber->add(tfAbsorberChild);
1229 pvAbsorber->add(pvAbsorberChild);
1230
1231 if (
m_log->level()<=MSG::DEBUG)
1232 (*m_log) << MSG::DEBUG <<
" _fillSection: Absorber (case 4) Ok "<<
endmsg;
1233 break;
1234 }
1235 default:
1236 {
1237
1238
1241
1244
1245 } else {
1246 (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::fillSection: Unexpected section = "
1248 return;
1249 }
1250
1251 thicknessPeriod = thicknessAbsorber;
1252 MLOG(
DEBUG) <<
"DEFAULT Section -- thicknessAbsorber: " << thicknessAbsorber <<
" ==> thicknessPeriod: " << thicknessPeriod <<
endmsg;
1253
1255 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
1256
1257 double dy1Period =
m_dbManager->TILBflangex()/2.*Gaudi::Units::cm;
1258 double dy2Period =
m_dbManager->TILBflangey()/2.*Gaudi::Units::cm;
1259 if (dy1Period <= 0.0 || dy2Period <= 0.0 || dy1Period > dy1Absorber || dy2Period > dy2Absorber || dy1Period >= dy2Period ) {
1260 dy1Period = dy1Absorber;
1261 dy2Period = dy2Absorber;
1262 }
1263
1264 period =
new GeoTrd(thicknessPeriod/2,
1265 thicknessPeriod/2,
1266 dy1Period,
1267 dy2Period,
1268 heightAbsorber/2);
1270 lvPeriod = new GeoLogVol("Period",period,matAluminium);
1271 pvPeriod = new GeoPhysVol(lvPeriod);
1272
1274 thicknessPeriod*(1./Gaudi::Units::cm),
1275 dzglue,
1276 tan_delta_phi_2,
1277 5, period);
1278
1280
1281
1282 tfPeriod = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
1283 pvAbsorber->add(new GeoIdentifierTag(0));
1284 pvAbsorber->add(tfPeriod);
1285 pvAbsorber->add(pvPeriod);
1286
1287 if (
m_log->level()<=MSG::DEBUG)
1288 (*m_log) << MSG::DEBUG <<
" _fillSection: Absorber (case default) Ok "<<
endmsg;
1289 break;
1290 }
1291 }
1292
1293
1294 GeoTransform *tfAbsorber{nullptr}, *tfAbsorber1{nullptr}, *tfAbsorber3{nullptr};
1295
1297 double dZAbsorber = (
m_dbManager->TILBrmax() - tile_rmax);
1298
1299 if (sec_number==3) {
1300
1301 tfAbsorber = new GeoTransform(GeoTrf::Translate3D( specialModuleZShift + dXAbsorber*Gaudi::Units::cm/2, 0., dZAbsorber*Gaudi::Units::cm/2));
1302 mother->add(tfAbsorber);
1303 mother->add(pvAbsorber);
1304
1305 } else if (sec_number==2) {
1306 if (
m_log->level()<=MSG::DEBUG)
1307 (*m_log) << MSG::DEBUG <<
" _fillsection Ex.barrel in "<<
endmsg;
1308
1309 tfAbsorber1 = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2 - PosAbsor1, 0.,
1310 (dZAbsorber +
m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2));
1311 mother->add(tfAbsorber1);
1312 if (
m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) {
1313 mother->add(pvTmp_Absorber1);
1314 } else {
1315 mother->add(pvAbsorber1);
1316 }
1317
1318 if (
m_log->level()<=MSG::DEBUG)
1319 (*m_log) << MSG::DEBUG <<
" _fillsection ext.barrel pvAbsorber1 Ok"<<
endmsg;
1320
1321 tfAbsorber = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2 - PosAbsor2, 0.,
1322 (dZAbsorber +
m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2));
1323 mother->add(tfAbsorber);
1324 mother->add(pvAbsorber);
1325
1326 if (
m_log->level()<=MSG::DEBUG)
1327 (*m_log) << MSG::DEBUG <<
" _fillsection ext.barrel pvAbsorber Ok"<<
endmsg;
1328
1329 tfAbsorber3 = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2 - PosAbsor3, 0.,
1330 (dZAbsorber +
m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2));
1331 mother->add(tfAbsorber3);
1332 if (
m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) {
1333 mother->add(pvTmp_Absorber3);
1334 } else {
1335 mother->add(pvAbsorber3);
1336 }
1337
1338 if (
m_log->level()<=MSG::DEBUG)
1339 (*m_log) << MSG::DEBUG <<
" _fillsection ext.barrel pvAbsorber3 Ok"<<
endmsg;
1340
1341 } else {
1342 tfAbsorber = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2, 0.,
1343 (dZAbsorber +
m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2));
1344 mother->add(tfAbsorber);
1345 mother->add(pvAbsorber);
1346 if (
m_log->level()<=MSG::DEBUG)
1347 (*m_log) << MSG::DEBUG <<
" _fillsection other pvAbsorber Ok"<<
endmsg;
1348 }
1349
1350
1351}
Scalar phi() const
phi method
void fillPeriod(PVLink &mother, double thickness, double dzglue, double tan_delta_phi_2, int period_type, GeoTrd *period=nullptr)
Period parameters are the following:
void fillGirder(PVLink &mother, double tile_rmax, double tilb_rmax, double tan_delta_phi_2, double thickness)
Girder parameters are the following:
void checktransfunc(double absorber, double period, int np, double center)