295 std::vector<double> zplane, rmin, rmax;
297 std::string id1 = id;
298 if(
id.starts_with(
"FrontSupportMother")) id1 =
"FrontSupportMother";
299 else if(
id.starts_with(
"BackSupportMother")) id1 =
"BackSupportMother";
300 else if(
id.
find(
"Stretchers") != std::string::npos) id1 =
"Stretchers";
301 else if(
id ==
"FrontMiddleRing::LowerHole") id1 =
"FrontMiddleRing::LH";
302 else if(
id ==
"FrontMiddleRing::LowerGTen") id1 =
"FrontMiddleRing::LGT";
303 else if(
id ==
"FrontMiddleRing::UpperHole") id1 =
"FrontMiddleRing::UH";
304 else if(
id ==
"FrontMiddleRing::UpperGTen") id1 =
"FrontMiddleRing::UGT";
305 else if(
id ==
"BackMiddleRing::LowerHole") id1 =
"BackMiddleRing::LH";
306 else if(
id ==
"BackMiddleRing::LowerGTen") id1 =
"BackMiddleRing::LGT";
307 else if(
id ==
"BackMiddleRing::UpperHole") id1 =
"BackMiddleRing::UH";
308 else if(
id ==
"BackMiddleRing::UpperGTen") id1 =
"BackMiddleRing::UGT";
310 std::map<int, unsigned int> pcone;
313 for(
unsigned int i = 0; i <
m_DB_pcons->size(); ++ i){
314 const std::string&
object = (*m_DB_pcons)[i]->getString(
"PCONNAME");
316 int key = (*m_DB_pcons)[i]->getInt(
"NZPLANE");
317 if(pcone.find(key) != pcone.end()){
323 if(key >= 0) ++ nzplanes;
324 else R0 = (*m_DB_pcons)[i]->getDouble(
"RMIN")*Gaudi::Units::mm;
328 zplane.resize(nzplanes); rmin.resize(nzplanes); rmax.resize(nzplanes);
329 for(
int n = 0; n < nzplanes; ++ n){
330 zplane[n] = (*m_DB_pcons)[pcone[n]]->getDouble(
"ZPOS")*Gaudi::Units::mm;
331 rmin[n] = R0 + (*m_DB_pcons)[pcone[n]]->getDouble(
"RMIN")*Gaudi::Units::mm;
332 rmax[n] = R0 + (*m_DB_pcons)[pcone[n]]->getDouble(
"RMAX")*Gaudi::Units::mm;
334 if(id1 ==
"FrontSupportMother"){
335 if(
id.
find(
"Inner") != std::string::npos){
336 zplane.resize(2); rmin.resize(2); rmax.resize(2);
340 }
else if(
id.
find(
"Outer") != std::string::npos){
346 if(id1 ==
"BackSupportMother"){
347 if(
id.
find(
"Inner") != std::string::npos){
348 zplane.resize(2); rmin.resize(2); rmax.resize(2);
352 }
else if(
id.
find(
"Outer") != std::string::npos){
358 if(id1 ==
"Stretchers"){
359 if(
id ==
"WideStretchers"){
360 double dfiWS = 360./3./256.*24.*Gaudi::Units::deg;
364 if(
id ==
"NarrowStretchers"){
366 double dfiNS = lengthNS / rmax[0] * Gaudi::Units::rad;
373std::cout <<
"!!!! " <<
id <<
":" << std::endl;
374for(
int i = 0; i < nzplanes; ++ i){
375 std::cout <<
"\t" << i <<
" " << zplane[i] <<
" " << rmin[i] <<
" " << rmax[i] << std::endl;
379 if(
id.starts_with(
"FrontSupportMother")){
380 zplane.resize(6); rmin.resize(6); rmax.resize(6);
381 zplane[0] = 0. *Gaudi::Units::mm; rmin[0] = 292.*Gaudi::Units::mm-1.*Gaudi::Units::mm; rmax[0] = 2077.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
382 zplane[1] = 61. *Gaudi::Units::mm; rmin[1] = 292.*Gaudi::Units::mm-1.*Gaudi::Units::mm; rmax[1] = 2077.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
383 zplane[2] = 61. *Gaudi::Units::mm; rmin[2] = 2023.*Gaudi::Units::mm-7.*Gaudi::Units::mm; rmax[2] = 2077.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
384 zplane[3] = 72.3*Gaudi::Units::mm; rmin[3] = 2023.*Gaudi::Units::mm-7.*Gaudi::Units::mm; rmax[3] = 2077.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
385 zplane[4] = 124.2*Gaudi::Units::mm; rmin[4] = 2051.*Gaudi::Units::mm-7.*Gaudi::Units::mm; rmax[4] = 2077.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
386 zplane[5] = 153. *Gaudi::Units::mm; rmin[5] = 2051.*Gaudi::Units::mm-7.*Gaudi::Units::mm; rmax[5] = 2077.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
387 if(
id ==
"FrontSupportMother::Outer"){
388 rmin[0] = 603.*Gaudi::Units::mm-1.*Gaudi::Units::mm;
389 rmin[1] = 603.*Gaudi::Units::mm-1.*Gaudi::Units::mm;
391 if(
id ==
"FrontSupportMother::Inner"){
392 zplane.resize(2); rmin.resize(2); rmax.resize(2);
393 rmax[0] = 614.*Gaudi::Units::mm;
394 rmax[1] = 614.*Gaudi::Units::mm;
396 }
else if(
id.starts_with(
"BackSupportMother")){
397 zplane.resize(4); rmin.resize(4); rmax.resize(4);
398 zplane[0] = 0.001*Gaudi::Units::mm; rmin[0] = 333.*Gaudi::Units::mm-1.*Gaudi::Units::mm; rmax[0] = 2077.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
399 zplane[1] = 55. *Gaudi::Units::mm; rmin[1] = 333.*Gaudi::Units::mm-1.*Gaudi::Units::mm; rmax[1] = 2077.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
400 zplane[2] = 55. *Gaudi::Units::mm; rmin[2] = 2051.*Gaudi::Units::mm-7.*Gaudi::Units::mm; rmax[2] = 2077.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
401 zplane[3] = 147. *Gaudi::Units::mm; rmin[3] = 2051.*Gaudi::Units::mm-7.*Gaudi::Units::mm; rmax[3] = 2077.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
402 if(
id ==
"BackSupportMother::Outer"){
403 rmin[0] = 687.*Gaudi::Units::mm-1.*Gaudi::Units::mm;
404 rmin[1] = 687.*Gaudi::Units::mm-1.*Gaudi::Units::mm;
406 if(
id ==
"BackSupportMother::Inner"){
407 zplane.resize(2); rmin.resize(2); rmax.resize(2);
408 rmax[0] = 699.*Gaudi::Units::mm;
409 rmax[1] = 699.*Gaudi::Units::mm;
411 }
else if(
id ==
"WideStretchers" ||
id ==
"NarrowStretchers"){
412 double dzS = 165.*Gaudi::Units::mm;
413 double dznotch = 10.*Gaudi::Units::mm;
414 double drnotch = 6.5*Gaudi::Units::mm;
415 double rmaxS = (2077. - 7.)*Gaudi::Units::mm;
416 double rminS = rmaxS - 26.*Gaudi::Units::mm;
417 double rmidS = rminS + drnotch;
418 zplane.resize(6); rmin.resize(6); rmax.resize(6);
419 zplane[0] = -dzS ; rmin[0] = rminS; rmax[0] = rmaxS;
420 zplane[1] = -dznotch; rmin[1] = rminS; rmax[1] = rmaxS;
421 zplane[2] = -dznotch; rmin[2] = rmidS; rmax[2] = rmaxS;
422 zplane[3] = dznotch; rmin[3] = rmidS; rmax[3] = rmaxS;
423 zplane[4] = dznotch; rmin[4] = rminS; rmax[4] = rmaxS;
424 zplane[5] = dzS ; rmin[5] = rminS; rmax[5] = rmaxS;
425 if(
id ==
"WideStretchers"){
426 double dfiWS = 360./3./256.*24.*Gaudi::Units::deg;
430 if(
id ==
"NarrowStretchers"){
431 double lengthNS = 200.*Gaudi::Units::mm;
432 double dfiNS = lengthNS / rmaxS * Gaudi::Units::rad;
436 }
else if(
id ==
"OuterSupportMother"){
437 double dzS = 165.*Gaudi::Units::mm;
438 double rmaxS = (2077. - 7.)*Gaudi::Units::mm;
439 double rminOTB = (2034. + 2.)*Gaudi::Units::mm;
440 double rmaxOTB = rminOTB + 3.*Gaudi::Units::mm;
441 double dzOTB = 201.*Gaudi::Units::mm;
442 zplane.resize(6); rmin.resize(6); rmax.resize(6);
443 zplane[0] = -dzOTB ; rmin[0] = rminOTB; rmax[0] = rmaxOTB;
444 zplane[1] = -dzS; rmin[1] = rminOTB; rmax[1] = rmaxOTB;
445 zplane[2] = -dzS; rmin[2] = rminOTB; rmax[2] = rmaxS;
446 zplane[3] = dzS; rmin[3] = rminOTB; rmax[3] = rmaxS;
447 zplane[4] = dzS; rmin[4] = rminOTB; rmax[4] = rmaxOTB;
448 zplane[5] = dzOTB ; rmin[5] = rminOTB; rmax[5] = rmaxOTB;
449 }
else if(
id ==
"FrontMiddleRing"){
450 double r0 =614.*Gaudi::Units::mm-2.*Gaudi::Units::mm ;
451 zplane.resize(4); rmin.resize(4); rmax.resize(4);
452 zplane[0] = 0. *Gaudi::Units::mm; rmin[0] = r0 - 57.*Gaudi::Units::mm; rmax[0] = r0 + 57.*Gaudi::Units::mm;
453 zplane[1] = 27.5*Gaudi::Units::mm; rmin[1] = r0 - 57.*Gaudi::Units::mm; rmax[1] = r0 + 57.*Gaudi::Units::mm;
454 zplane[2] = 27.5*Gaudi::Units::mm; rmin[2] = r0 - 40.*Gaudi::Units::mm; rmax[2] = r0 + 40.*Gaudi::Units::mm;
455 zplane[3] = 59. *Gaudi::Units::mm; rmin[3] = r0 - 40.*Gaudi::Units::mm; rmax[3] = r0 + 40.*Gaudi::Units::mm;
456 }
else if(
id ==
"FrontMiddleRing::LowerHole"){
457 double r0 = 614.*Gaudi::Units::mm-2.*Gaudi::Units::mm;
458 zplane.resize(6); rmin.resize(6); rmax.resize(6);
459 zplane[0] = 23. *Gaudi::Units::mm; rmin[0] = r0 - 28.3*Gaudi::Units::mm; rmax[0] = r0 - 8.*Gaudi::Units::mm;
460 zplane[1] = 27.5*Gaudi::Units::mm; rmin[1] = r0 - 28.3*Gaudi::Units::mm; rmax[1] = r0 - 8.*Gaudi::Units::mm;
461 zplane[2] = 27.5*Gaudi::Units::mm; rmin[2] = r0 - 40. *Gaudi::Units::mm; rmax[2] = r0 - 8.*Gaudi::Units::mm;
462 zplane[3] = 48.5*Gaudi::Units::mm; rmin[3] = r0 - 40. *Gaudi::Units::mm; rmax[3] = r0 - 8.*Gaudi::Units::mm;
463 zplane[4] = 48.5*Gaudi::Units::mm; rmin[4] = r0 - 28.3*Gaudi::Units::mm; rmax[4] = r0 - 8.*Gaudi::Units::mm;
464 zplane[5] = 53. *Gaudi::Units::mm; rmin[5] = r0 - 28.3*Gaudi::Units::mm; rmax[5] = r0 - 8.*Gaudi::Units::mm;
465 }
else if(
id ==
"FrontMiddleRing::LowerGTen"){
466 double r0 = 614.*Gaudi::Units::mm - 2.*Gaudi::Units::mm;
467 zplane.resize(6); rmin.resize(6); rmax.resize(6);
468 zplane[0] = 23.*Gaudi::Units::mm; rmin[0] = r0 - 28.*Gaudi::Units::mm; rmax[0] = r0 - 8.*Gaudi::Units::mm;
469 zplane[1] = 28.*Gaudi::Units::mm; rmin[1] = r0 - 28.*Gaudi::Units::mm; rmax[1] = r0 - 8.*Gaudi::Units::mm;
470 zplane[2] = 28.*Gaudi::Units::mm; rmin[2] = r0 - 40.*Gaudi::Units::mm; rmax[2] = r0 - 8.*Gaudi::Units::mm;
471 zplane[3] = 48.*Gaudi::Units::mm; rmin[3] = r0 - 40.*Gaudi::Units::mm; rmax[3] = r0 - 8.*Gaudi::Units::mm;
472 zplane[4] = 48.*Gaudi::Units::mm; rmin[4] = r0 - 28.*Gaudi::Units::mm; rmax[4] = r0 - 8.*Gaudi::Units::mm;
473 zplane[5] = 53.*Gaudi::Units::mm; rmin[5] = r0 - 28.*Gaudi::Units::mm; rmax[5] = r0 - 8.*Gaudi::Units::mm;
474 }
else if(
id ==
"FrontMiddleRing::UpperHole"){
475 double r0 =614.*Gaudi::Units::mm-2.*Gaudi::Units::mm ;
476 zplane.resize(6); rmin.resize(6); rmax.resize(6);
477 zplane[0] = 23. *Gaudi::Units::mm; rmin[0] = r0 + 8.*Gaudi::Units::mm; rmax[0] = r0 + 28.3*Gaudi::Units::mm;
478 zplane[1] = 27.5*Gaudi::Units::mm; rmin[1] = r0 + 8.*Gaudi::Units::mm; rmax[1] = r0 + 28.3*Gaudi::Units::mm;
479 zplane[2] = 27.5*Gaudi::Units::mm; rmin[2] = r0 + 8.*Gaudi::Units::mm; rmax[2] = r0 + 40. *Gaudi::Units::mm;
480 zplane[3] = 48.5*Gaudi::Units::mm; rmin[3] = r0 + 8.*Gaudi::Units::mm; rmax[3] = r0 + 40. *Gaudi::Units::mm;
481 zplane[4] = 48.5*Gaudi::Units::mm; rmin[4] = r0 + 8.*Gaudi::Units::mm; rmax[4] = r0 + 28.3*Gaudi::Units::mm;
482 zplane[5] = 53. *Gaudi::Units::mm; rmin[5] = r0 + 8.*Gaudi::Units::mm; rmax[5] = r0 + 28.3*Gaudi::Units::mm;
483 }
else if(
id ==
"FrontMiddleRing::UpperGTen"){
484 double r0 =614.*Gaudi::Units::mm-2.*Gaudi::Units::mm ;
485 zplane.resize(6); rmin.resize(6); rmax.resize(6);
486 zplane[0] = 23.*Gaudi::Units::mm; rmin[0] = r0 + 8.*Gaudi::Units::mm; rmax[0] = r0 + 28.*Gaudi::Units::mm;
487 zplane[1] = 28.*Gaudi::Units::mm; rmin[1] = r0 + 8.*Gaudi::Units::mm; rmax[1] = r0 + 28.*Gaudi::Units::mm;
488 zplane[2] = 28.*Gaudi::Units::mm; rmin[2] = r0 + 8.*Gaudi::Units::mm; rmax[2] = r0 + 40.*Gaudi::Units::mm;
489 zplane[3] = 48.*Gaudi::Units::mm; rmin[3] = r0 + 8.*Gaudi::Units::mm; rmax[3] = r0 + 40.*Gaudi::Units::mm;
490 zplane[4] = 48.*Gaudi::Units::mm; rmin[4] = r0 + 8.*Gaudi::Units::mm; rmax[4] = r0 + 28.*Gaudi::Units::mm;
491 zplane[5] = 53.*Gaudi::Units::mm; rmin[5] = r0 + 8.*Gaudi::Units::mm; rmax[5] = r0 + 28.*Gaudi::Units::mm;
492 }
else if(
id ==
"FrontInnerRing"){
493 double r0 = 335.5*Gaudi::Units::mm-1.*Gaudi::Units::mm;
494 zplane.resize(5); rmin.resize(5); rmax.resize(5);
495 zplane[0] = 0. *Gaudi::Units::mm; rmin[0] = r0 - 22.5*Gaudi::Units::mm; rmax[0] = r0 + 51.5*Gaudi::Units::mm;
496 zplane[1] = 6. *Gaudi::Units::mm; rmin[1] = r0 - 28.5*Gaudi::Units::mm; rmax[1] = r0 + 51.5*Gaudi::Units::mm;
497 zplane[2] = 27.5*Gaudi::Units::mm; rmin[2] = r0 - 28.5*Gaudi::Units::mm; rmax[2] = r0 + 51.5*Gaudi::Units::mm;
498 zplane[3] = 27.5*Gaudi::Units::mm; rmin[3] = r0 - 43.5*Gaudi::Units::mm; rmax[3] = r0 + 40.5*Gaudi::Units::mm;
499 zplane[4] = 59. *Gaudi::Units::mm; rmin[4] = r0 - 43.5*Gaudi::Units::mm; rmax[4] = r0 + 40.5*Gaudi::Units::mm;
500 }
else if(
id ==
"FrontInnerRing::Hole"){
501 double r0 = 335.5*Gaudi::Units::mm-1.*Gaudi::Units::mm;
502 zplane.resize(6); rmin.resize(6); rmax.resize(6);
503 zplane[0] = 23. *Gaudi::Units::mm; rmin[0] = r0 + 6.5*Gaudi::Units::mm; rmax[0] = r0 + 29.5*Gaudi::Units::mm;
504 zplane[1] = 27.5*Gaudi::Units::mm; rmin[1] = r0 + 6.5*Gaudi::Units::mm; rmax[1] = r0 + 29.5*Gaudi::Units::mm;
505 zplane[2] = 27.5*Gaudi::Units::mm; rmin[2] = r0 + 6.5*Gaudi::Units::mm; rmax[2] = r0 + 40.5*Gaudi::Units::mm;
506 zplane[3] = 48.5*Gaudi::Units::mm; rmin[3] = r0 + 6.5*Gaudi::Units::mm; rmax[3] = r0 + 40.5*Gaudi::Units::mm;
507 zplane[4] = 48.5*Gaudi::Units::mm; rmin[4] = r0 + 6.5*Gaudi::Units::mm; rmax[4] = r0 + 29.5*Gaudi::Units::mm;
508 zplane[5] = 53. *Gaudi::Units::mm; rmin[5] = r0 + 6.5*Gaudi::Units::mm; rmax[5] = r0 + 29.5*Gaudi::Units::mm;
509 }
else if(
id ==
"FrontInnerRing::GTen"){
510 double r0 = 335.5*Gaudi::Units::mm-1.*Gaudi::Units::mm;
511 zplane.resize(6); rmin.resize(6); rmax.resize(6);
512 zplane[0] = 23.*Gaudi::Units::mm; rmin[0] = r0 + 8.5*Gaudi::Units::mm; rmax[0] = r0 + 28.5*Gaudi::Units::mm;
513 zplane[1] = 28.*Gaudi::Units::mm; rmin[1] = r0 + 8.5*Gaudi::Units::mm; rmax[1] = r0 + 28.5*Gaudi::Units::mm;
514 zplane[2] = 28.*Gaudi::Units::mm; rmin[2] = r0 + 8.5*Gaudi::Units::mm; rmax[2] = r0 + 40.5*Gaudi::Units::mm;
515 zplane[3] = 48.*Gaudi::Units::mm; rmin[3] = r0 + 8.5*Gaudi::Units::mm; rmax[3] = r0 + 40.5*Gaudi::Units::mm;
516 zplane[4] = 48.*Gaudi::Units::mm; rmin[4] = r0 + 8.5*Gaudi::Units::mm; rmax[4] = r0 + 28.5*Gaudi::Units::mm;
517 zplane[5] = 53.*Gaudi::Units::mm; rmin[5] = r0 + 8.5*Gaudi::Units::mm; rmax[5] = r0 + 28.5*Gaudi::Units::mm;
518 }
else if(
id ==
"BackMiddleRing"){
519 double r0 = 699.*Gaudi::Units::mm-2.5*Gaudi::Units::mm;
520 zplane.resize(4); rmin.resize(4); rmax.resize(4);
521 zplane[0] = 0. *Gaudi::Units::mm; rmin[0] = r0 - 57.*Gaudi::Units::mm; rmax[0] = r0 + 57.*Gaudi::Units::mm;
522 zplane[1] = 21. *Gaudi::Units::mm; rmin[1] = r0 - 57.*Gaudi::Units::mm; rmax[1] = r0 + 57.*Gaudi::Units::mm;
523 zplane[2] = 21. *Gaudi::Units::mm; rmin[2] = r0 - 40.*Gaudi::Units::mm; rmax[2] = r0 + 40.*Gaudi::Units::mm;
524 zplane[3] = 52.5*Gaudi::Units::mm; rmin[3] = r0 - 40.*Gaudi::Units::mm; rmax[3] = r0 + 40.*Gaudi::Units::mm;
525 }
else if(
id ==
"BackMiddleRing::LowerHole"){
526 double r0 = 699.*Gaudi::Units::mm-2.5*Gaudi::Units::mm;
527 zplane.resize(6); rmin.resize(6); rmax.resize(6);
528 zplane[0] = 16.5*Gaudi::Units::mm; rmin[0] = r0 - 28.3*Gaudi::Units::mm; rmax[0] = r0 - 8.*Gaudi::Units::mm;
529 zplane[1] = 21. *Gaudi::Units::mm; rmin[1] = r0 - 28.3*Gaudi::Units::mm; rmax[1] = r0 - 8.*Gaudi::Units::mm;
530 zplane[2] = 21. *Gaudi::Units::mm; rmin[2] = r0 - 40. *Gaudi::Units::mm; rmax[2] = r0 - 8.*Gaudi::Units::mm;
531 zplane[3] = 42. *Gaudi::Units::mm; rmin[3] = r0 - 40. *Gaudi::Units::mm; rmax[3] = r0 - 8.*Gaudi::Units::mm;
532 zplane[4] = 42. *Gaudi::Units::mm; rmin[4] = r0 - 28.3*Gaudi::Units::mm; rmax[4] = r0 - 8.*Gaudi::Units::mm;
534 zplane[5] = 46.5*Gaudi::Units::mm; rmin[5] = r0 - 28.3*Gaudi::Units::mm; rmax[5] = r0 - 8.*Gaudi::Units::mm;
535 }
else if(
id ==
"BackMiddleRing::LowerGTen"){
536 double r0 = 699.*Gaudi::Units::mm-2.5*Gaudi::Units::mm;
537 zplane.resize(6); rmin.resize(6); rmax.resize(6);
538 zplane[0] = 16.5*Gaudi::Units::mm; rmin[0] = r0 - 28.*Gaudi::Units::mm; rmax[0] = r0 - 8.*Gaudi::Units::mm;
539 zplane[1] = 21.5*Gaudi::Units::mm; rmin[1] = r0 - 28.*Gaudi::Units::mm; rmax[1] = r0 - 8.*Gaudi::Units::mm;
540 zplane[2] = 21.5*Gaudi::Units::mm; rmin[2] = r0 - 40.*Gaudi::Units::mm; rmax[2] = r0 - 8.*Gaudi::Units::mm;
541 zplane[3] = 41.5*Gaudi::Units::mm; rmin[3] = r0 - 40.*Gaudi::Units::mm; rmax[3] = r0 - 8.*Gaudi::Units::mm;
542 zplane[4] = 41.5*Gaudi::Units::mm; rmin[4] = r0 - 28.*Gaudi::Units::mm; rmax[4] = r0 - 8.*Gaudi::Units::mm;
543 zplane[5] = 46.5*Gaudi::Units::mm; rmin[5] = r0 - 28.*Gaudi::Units::mm; rmax[5] = r0 - 8.*Gaudi::Units::mm;
544 }
else if(
id ==
"BackMiddleRing::UpperHole"){
545 double r0 = 699.*Gaudi::Units::mm-2.5*Gaudi::Units::mm;
546 zplane.resize(6); rmin.resize(6); rmax.resize(6);
547 zplane[0] = 16.5*Gaudi::Units::mm; rmin[0] = r0 + 8.*Gaudi::Units::mm; rmax[0] = r0 + 28.3*Gaudi::Units::mm;
548 zplane[1] = 21. *Gaudi::Units::mm; rmin[1] = r0 + 8.*Gaudi::Units::mm; rmax[1] = r0 + 28.3*Gaudi::Units::mm;
549 zplane[2] = 21. *Gaudi::Units::mm; rmin[2] = r0 + 8.*Gaudi::Units::mm; rmax[2] = r0 + 40. *Gaudi::Units::mm;
550 zplane[3] = 42. *Gaudi::Units::mm; rmin[3] = r0 + 8.*Gaudi::Units::mm; rmax[3] = r0 + 40. *Gaudi::Units::mm;
551 zplane[4] = 42. *Gaudi::Units::mm; rmin[4] = r0 + 8.*Gaudi::Units::mm; rmax[4] = r0 + 28.3*Gaudi::Units::mm;
552 zplane[5] = 46.5*Gaudi::Units::mm; rmin[5] = r0 + 8.*Gaudi::Units::mm; rmax[5] = r0 + 28.3*Gaudi::Units::mm;
553 }
else if(
id ==
"BackMiddleRing::UpperGTen"){
554 double r0 = 699.*Gaudi::Units::mm-2.5*Gaudi::Units::mm;
555 zplane.resize(6); rmin.resize(6); rmax.resize(6);
556 zplane[0] = 16.5*Gaudi::Units::mm; rmin[0] = r0 + 8.*Gaudi::Units::mm; rmax[0] = r0 + 28.*Gaudi::Units::mm;
557 zplane[1] = 21.5*Gaudi::Units::mm; rmin[1] = r0 + 8.*Gaudi::Units::mm; rmax[1] = r0 + 28.*Gaudi::Units::mm;
558 zplane[2] = 21.5*Gaudi::Units::mm; rmin[2] = r0 + 8.*Gaudi::Units::mm; rmax[2] = r0 + 40.*Gaudi::Units::mm;
559 zplane[3] = 41.5*Gaudi::Units::mm; rmin[3] = r0 + 8.*Gaudi::Units::mm; rmax[3] = r0 + 40.*Gaudi::Units::mm;
560 zplane[4] = 41.5*Gaudi::Units::mm; rmin[4] = r0 + 8.*Gaudi::Units::mm; rmax[4] = r0 + 28.*Gaudi::Units::mm;
561 zplane[5] = 46.5*Gaudi::Units::mm; rmin[5] = r0 + 8.*Gaudi::Units::mm; rmax[5] = r0 + 28.*Gaudi::Units::mm;
562 }
else if(
id ==
"BackInnerRing"){
563 double r0 =357.5*Gaudi::Units::mm-1.*Gaudi::Units::mm;
564 zplane.resize(4); rmin.resize(4); rmax.resize(4);
565 zplane[0] = 0. *Gaudi::Units::mm; rmin[0] = r0 - 22.5*Gaudi::Units::mm; rmax[0] = r0 + 53.5*Gaudi::Units::mm;
566 zplane[1] = 22.5*Gaudi::Units::mm; rmin[1] = r0 - 22.5*Gaudi::Units::mm; rmax[1] = r0 + 53.5*Gaudi::Units::mm;
567 zplane[2] = 22.5*Gaudi::Units::mm; rmin[2] = r0 - 24.5*Gaudi::Units::mm; rmax[2] = r0 + 40.5*Gaudi::Units::mm;
568 zplane[3] = 54. *Gaudi::Units::mm; rmin[3] = r0 - 24.5*Gaudi::Units::mm; rmax[3] = r0 + 40.5*Gaudi::Units::mm;
569 }
else if(
id ==
"BackInnerRing::Hole"){
570 double r0 =357.5*Gaudi::Units::mm-1.*Gaudi::Units::mm;
571 zplane.resize(6); rmin.resize(6); rmax.resize(6);
572 zplane[0] = 18. *Gaudi::Units::mm; rmin[0] = r0 + 6.5*Gaudi::Units::mm; rmax[0] = r0 + 29.5*Gaudi::Units::mm;
573 zplane[1] = 22.5*Gaudi::Units::mm; rmin[1] = r0 + 6.5*Gaudi::Units::mm; rmax[1] = r0 + 29.5*Gaudi::Units::mm;
574 zplane[2] = 22.5*Gaudi::Units::mm; rmin[2] = r0 + 6.5*Gaudi::Units::mm; rmax[2] = r0 + 40.5*Gaudi::Units::mm;
575 zplane[3] = 43.5*Gaudi::Units::mm; rmin[3] = r0 + 6.5*Gaudi::Units::mm; rmax[3] = r0 + 40.5*Gaudi::Units::mm;
576 zplane[4] = 43.5*Gaudi::Units::mm; rmin[4] = r0 + 6.5*Gaudi::Units::mm; rmax[4] = r0 + 29.5*Gaudi::Units::mm;
577 zplane[5] = 48. *Gaudi::Units::mm; rmin[5] = r0 + 6.5*Gaudi::Units::mm; rmax[5] = r0 + 29.5*Gaudi::Units::mm;
578 }
else if(
id ==
"BackInnerRing::GTen"){
579 double r0 =357.5*Gaudi::Units::mm-1.*Gaudi::Units::mm;
580 zplane.resize(6); rmin.resize(6); rmax.resize(6);
581 zplane[0] = 18.*Gaudi::Units::mm; rmin[0] = r0 + 8.5*Gaudi::Units::mm; rmax[0] = r0 + 28.5*Gaudi::Units::mm;
582 zplane[1] = 23.*Gaudi::Units::mm; rmin[1] = r0 + 8.5*Gaudi::Units::mm; rmax[1] = r0 + 28.5*Gaudi::Units::mm;
583 zplane[2] = 23.*Gaudi::Units::mm; rmin[2] = r0 + 8.5*Gaudi::Units::mm; rmax[2] = r0 + 40.5*Gaudi::Units::mm;
584 zplane[3] = 43.*Gaudi::Units::mm; rmin[3] = r0 + 8.5*Gaudi::Units::mm; rmax[3] = r0 + 40.5*Gaudi::Units::mm;
585 zplane[4] = 43.*Gaudi::Units::mm; rmin[4] = r0 + 8.5*Gaudi::Units::mm; rmax[4] = r0 + 28.5*Gaudi::Units::mm;
586 zplane[5] = 48.*Gaudi::Units::mm; rmin[5] = r0 + 8.5*Gaudi::Units::mm; rmax[5] = r0 + 28.5*Gaudi::Units::mm;
587 }
else if(
id ==
"FrontOuterRing"){
588 double r0 = 1961.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
589 zplane.resize(7); rmin.resize(7); rmax.resize(7);
590 zplane[0] = 0. *Gaudi::Units::mm; rmin[0] = r0 + 0.*Gaudi::Units::mm; rmax[0] = r0 + 111.*Gaudi::Units::mm;
591 zplane[1] = 5. *Gaudi::Units::mm; rmin[1] = r0 + 0.*Gaudi::Units::mm; rmax[1] = r0 + 116.*Gaudi::Units::mm;
592 zplane[2] = 20. *Gaudi::Units::mm; rmin[2] = r0 + 0.*Gaudi::Units::mm; rmax[2] = r0 + 116.*Gaudi::Units::mm;
593 zplane[3] = 20. *Gaudi::Units::mm; rmin[3] = r0 + 62.*Gaudi::Units::mm; rmax[3] = r0 + 116.*Gaudi::Units::mm;
594 zplane[4] = 63.3*Gaudi::Units::mm; rmin[4] = r0 + 62.*Gaudi::Units::mm; rmax[4] = r0 + 116.*Gaudi::Units::mm;
595 zplane[5] = 115.2*Gaudi::Units::mm; rmin[5] = r0 + 90.*Gaudi::Units::mm; rmax[5] = r0 + 116.*Gaudi::Units::mm;
596 zplane[6] = 144. *Gaudi::Units::mm; rmin[6] = r0 + 90.*Gaudi::Units::mm; rmax[6] = r0 + 116.*Gaudi::Units::mm;
597 }
else if(
id ==
"FrontOuterLongBar"){
598 zplane.resize(4); rmin.resize(4); rmax.resize(4);
599 zplane[0] = 0.*Gaudi::Units::mm; rmin[0] = 1969.7*Gaudi::Units::mm; rmax[0] = 2016.*Gaudi::Units::mm;
600 zplane[1] = 1.*Gaudi::Units::mm; rmin[1] = 1969.7*Gaudi::Units::mm; rmax[1] = 2016.*Gaudi::Units::mm;
601 zplane[2] = 1.*Gaudi::Units::mm; rmin[2] = 652. *Gaudi::Units::mm; rmax[2] = 2016.*Gaudi::Units::mm;
602 zplane[3] = 21.*Gaudi::Units::mm; rmin[3] = 652. *Gaudi::Units::mm; rmax[3] = 2016.*Gaudi::Units::mm;
604 }
else if(
id ==
"BackOuterRing"){
605 double r0 = 1961.*Gaudi::Units::mm-7.*Gaudi::Units::mm;
606 zplane.resize(7); rmin.resize(7); rmax.resize(7);
607 zplane[0] = 0.*Gaudi::Units::mm; rmin[0] = r0 + 0.*Gaudi::Units::mm; rmax[0] = r0 + 111.*Gaudi::Units::mm;
608 zplane[1] = 5.*Gaudi::Units::mm; rmin[1] = r0 + 0.*Gaudi::Units::mm; rmax[1] = r0 + 116.*Gaudi::Units::mm;
609 zplane[2] = 15.*Gaudi::Units::mm; rmin[2] = r0 + 0.*Gaudi::Units::mm; rmax[2] = r0 + 116.*Gaudi::Units::mm;
610 zplane[3] = 15.*Gaudi::Units::mm; rmin[3] = r0 + 62.*Gaudi::Units::mm; rmax[3] = r0 + 116.*Gaudi::Units::mm;
611 zplane[4] = 41.*Gaudi::Units::mm; rmin[4] = r0 + 62.*Gaudi::Units::mm; rmax[4] = r0 + 116.*Gaudi::Units::mm;
612 zplane[5] = 41.*Gaudi::Units::mm; rmin[5] = r0 + 90.*Gaudi::Units::mm; rmax[5] = r0 + 116.*Gaudi::Units::mm;
613 zplane[6] = 139.*Gaudi::Units::mm; rmin[6] = r0 + 90.*Gaudi::Units::mm; rmax[6] = r0 + 116.*Gaudi::Units::mm;
614 }
else if(
id ==
"BackOuterLongBar"){
615 zplane.resize(4); rmin.resize(4); rmax.resize(4);
616 zplane[0] = 0.*Gaudi::Units::mm; rmin[0] = 1969.7*Gaudi::Units::mm; rmax[0] = 2016.*Gaudi::Units::mm;
617 zplane[1] = 1.*Gaudi::Units::mm; rmin[1] = 1969.7*Gaudi::Units::mm; rmax[1] = 2016.*Gaudi::Units::mm;
618 zplane[2] = 1.*Gaudi::Units::mm; rmin[2] = 736.5*Gaudi::Units::mm; rmax[2] = 2016.*Gaudi::Units::mm;
619 zplane[3] = 21.*Gaudi::Units::mm; rmin[3] = 736.5*Gaudi::Units::mm; rmax[3] = 2016.*Gaudi::Units::mm;
621 throw std::runtime_error(
"EMECSupportConstruction: wrong Pcone id");
626 GeoPcon* shape =
new GeoPcon(phi_start, phi_size);
627 for(
size_t i = 0; i < zplane.size(); ++ i){
628 shape->addPlane(zplane[i], rmin[i], rmax[i]);
679 const double coldContraction=(*m_DB_ColdContraction)[0]->getDouble(
"ABSORBERCONTRACTION");
680 const double electrodeInvColdContraction=(*m_DB_ColdContraction)[0]->getDouble(
"ELECTRODEINVCONTRACTION");
681 const double leadThicknessOuter=(*m_DB_EmecFan)[0]->getDouble(
"LEADTHICKNESSOUTER")*Gaudi::Units::mm;
682 const double steelThickness=(*m_DB_EmecFan)[0]->getDouble(
"STEELTHICKNESS")*Gaudi::Units::mm;
683 const double glueThickness=(*m_DB_EmecFan)[0]->getDouble(
"GLUETHICKNESS")*Gaudi::Units::mm;
684 const double electrodeTotalThickness=(*m_DB_EmecFan)[0]->getDouble(
"ELECTRODETOTALTHICKNESS")*Gaudi::Units::mm;
686 const double outerAbsorberDy=(leadThicknessOuter/2+steelThickness+glueThickness)*coldContraction;
687 const double electrodeDy=electrodeTotalThickness/2/electrodeInvColdContraction;
689 std::string
id =
"FrontOuterBarrettes";
699 GeoLogVol *logicalFOB =
new GeoLogVol(name, shapeFOB,
m_LAr);
700 GeoIntrusivePtr<GeoPhysVol>physFOB =
new GeoPhysVol(logicalFOB);
701 motherPhysical->add(
new GeoTransform(GeoTrf::TranslateZ3D(zposFOB)));
702 motherPhysical->add(physFOB);
704 const int number_of_modules = 8;
705 const double moduldfi = Gaudi::Units::twopi / number_of_modules;
706 const int nofabs = (*m_DB_EmecWheelParameters)[1]->getInt(
"NABS");
707 const int nofdiv = nofabs / number_of_modules;
708 const double dfi = Gaudi::Units::twopi / nofabs;
710 name =
m_BaseName +
"FrontOuterBarrette::Module::Phidiv";
711 GeoTubs *shapeFOBMP =
new GeoTubs(rminFOB, rmaxFOB, dzFOB, -dfi/4., dfi);
712 GeoLogVol *logicalFOBMP =
new GeoLogVol(name, shapeFOBMP,
m_LAr);
713 GeoIntrusivePtr<GeoPhysVol>physFOBMP =
new GeoPhysVol(logicalFOBMP);
716 name =
m_BaseName +
"FrontOuterBarrette::Abs";
720 assert(rmn + dr > rminFOB && rmn + dr + dx*2 < rmaxFOB);
722 const double r0A = rmn + dr + dx;
723 GeoBox *shapeFOBA =
new GeoBox(dx, outerAbsorberDy, dzFOB);
724 GeoLogVol *logicalFOBA =
new GeoLogVol(name, shapeFOBA,
m_G10FeOuter);
725 GeoIntrusivePtr<GeoPhysVol>physFOBA =
new GeoPhysVol(logicalFOBA);
726 physFOBMP->add(
new GeoTransform(GeoTrf::TranslateX3D(r0A)));
727 physFOBMP->add(physFOBA);
729 name =
m_BaseName +
"FrontOuterBarrette::Ele";
732 assert(rmn + dr > rminFOB && rmn + dr + dx*2 < rmaxFOB);
734 const double r0E = rmn + dr + dx;
735 double x0 = r0E * cos(dfi/2.);
736 double y0 = r0E * sin(dfi/2.);
737 GeoBox *shapeFOBE =
new GeoBox(dx, electrodeDy, dzFOB);
738 GeoLogVol *logicalFOBE =
new GeoLogVol(name, shapeFOBE,
m_Kapton_Cu);
739 GeoIntrusivePtr<GeoPhysVol>physFOBE =
new GeoPhysVol(logicalFOBE);
740 physFOBMP->add(
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(dfi/2.))));
741 physFOBMP->add(physFOBE);
744 name =
m_BaseName +
"FrontOuterBarrette::Module::Phidiv";
745 for(
int i = 0; i < nofdiv - 1; ++ i){
747 physFOB->add(
new GeoIdentifierTag(i));
748 physFOB->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
749 physFOB->add(physFOBMP);
751 name =
m_BaseName +
"FrontOuterBarrette::Abs";
752 double fi =
m_PhiStart + dfi/2.+ (nofdiv-1) * dfi;
755 physFOB->add(
new GeoIdentifierTag(nofdiv-1));
756 physFOB->add(
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(fi))));
757 physFOB->add(physFOBA);
761 name =
m_BaseName +
"FrontOuterBarrette::Module";
762 GeoTubs *shapeFOBM =
new GeoTubs(rminFOB, rmaxFOB, dzFOB, -dfi/4., moduldfi);
763 GeoLogVol *logicalFOBM =
new GeoLogVol(name, shapeFOBM,
m_LAr);
764 GeoIntrusivePtr<GeoPhysVol>physFOBM =
new GeoPhysVol(logicalFOBM);
766 name =
m_BaseName +
"FrontOuterBarrette::Module::Phidiv";
767 for(
int i = 0; i < nofdiv; ++ i){
769 physFOBM->add(
new GeoIdentifierTag(i));
770 physFOBM->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
771 physFOBM->add(physFOBMP);
774 name =
m_BaseName +
"FrontOuterBarrette::Module";
775 for(
int i = 0; i < number_of_modules; ++ i){
776 double fi = dfi/2.+ i * moduldfi;
777 physFOB->add(
new GeoIdentifierTag(i));
778 physFOB->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
779 physFOB->add(physFOBM);
787 const double coldContraction=(*m_DB_ColdContraction)[0]->getDouble(
"ABSORBERCONTRACTION");
788 const double electrodeInvColdContraction=(*m_DB_ColdContraction)[0]->getDouble(
"ELECTRODEINVCONTRACTION");
789 const double leadThicknessInner=(*m_DB_EmecFan)[0]->getDouble(
"LEADTHICKNESSINNER")*Gaudi::Units::mm;
790 const double steelThickness=(*m_DB_EmecFan)[0]->getDouble(
"STEELTHICKNESS")*Gaudi::Units::mm;
791 const double glueThickness=(*m_DB_EmecFan)[0]->getDouble(
"GLUETHICKNESS")*Gaudi::Units::mm;
792 const double electrodeTotalThickness=(*m_DB_EmecFan)[0]->getDouble(
"ELECTRODETOTALTHICKNESS")*Gaudi::Units::mm;
794 const double innerAbsorberDy=(leadThicknessInner/2+steelThickness+glueThickness)*coldContraction;
795 const double electrodeDy=electrodeTotalThickness/2/electrodeInvColdContraction;
797 std::string
id =
"FrontInnerBarrettes";
808 GeoLogVol *logicalFIB =
new GeoLogVol(name, shapeFIB,
m_LAr);
809 GeoIntrusivePtr<GeoPhysVol>physFIB =
new GeoPhysVol(logicalFIB);
810 motherPhysical->add(
new GeoTransform(GeoTrf::TranslateZ3D(zposFIB)));
811 motherPhysical->add(physFIB);
813 const int number_of_modules = 8;
814 const double moduldfi = Gaudi::Units::twopi / number_of_modules;
815 const int nofabs = (*m_DB_EmecWheelParameters)[0]->getInt(
"NABS");
816 const int nofdiv = nofabs / number_of_modules;
817 const double dfi = Gaudi::Units::twopi / nofabs;
819 name =
m_BaseName +
"FrontInnerBarrette::Module::Phidiv";
820 GeoTubs *shapeFIBMP =
new GeoTubs(rminFIB,rmaxFIB,dzFIB, -dfi/4., dfi);
821 GeoLogVol *logicalFIBMP =
new GeoLogVol(name, shapeFIBMP,
m_LAr);
822 GeoIntrusivePtr<GeoPhysVol>physFIBMP =
new GeoPhysVol(logicalFIBMP);
824 name =
m_BaseName +
"FrontInnerBarrette::Abs";
828 assert(rmn + dr > rminFIB && rmn + dr + dx*2 < rmaxFIB);
830 const double r0A = rmn + dr + dx;
831 GeoBox *shapeFIBA =
new GeoBox(dx, innerAbsorberDy, dzFIB);
832 GeoLogVol *logicalFIBA =
new GeoLogVol(name, shapeFIBA,
m_G10FeInner);
833 GeoIntrusivePtr<GeoPhysVol>physFIBA =
new GeoPhysVol(logicalFIBA);
834 physFIBMP->add(
new GeoTransform(GeoTrf::TranslateX3D(r0A)));
835 physFIBMP->add(physFIBA);
837 name =
m_BaseName +
"FrontInnerBarrette::Ele";
840 assert(rmn + dr > rminFIB && rmn + dr + dx*2 < rmaxFIB);
842 const double r0E = rmn + dr + dx;
843 double x0 = r0E * cos(dfi/2.);
844 double y0 = r0E * sin(dfi/2.);
845 GeoBox *shapeFIBE =
new GeoBox(dx, electrodeDy, dzFIB);
846 GeoLogVol *logicalFIBE =
new GeoLogVol(name, shapeFIBE,
m_Kapton_Cu);
847 GeoIntrusivePtr<GeoPhysVol>physFIBE =
new GeoPhysVol(logicalFIBE);
848 physFIBMP->add(
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(dfi/2.))));
849 physFIBMP->add(physFIBE);
852 name =
m_BaseName +
"FrontInnerBarrette::Phidiv";
853 for(
int i = 0; i < nofdiv - 1; ++ i){
855 physFIB->add(
new GeoIdentifierTag(i));
856 physFIB->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
857 physFIB->add(physFIBMP);
859 name =
m_BaseName +
"FrontInnerBarrette::Abs";
860 double fi =
m_PhiStart + dfi/2.+ (nofdiv-1) * dfi;
863 physFIB->add(
new GeoIdentifierTag(nofdiv-1));
864 physFIB->add(
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(fi))));
865 physFIB->add(physFIBA);
869 name =
m_BaseName +
"FrontInnerBarrette::Module";
870 GeoTubs *shapeFIBM =
new GeoTubs(rminFIB, rmaxFIB, dzFIB, -dfi/4., moduldfi);
871 GeoLogVol *logicalFIBM =
new GeoLogVol(name, shapeFIBM,
m_LAr);
872 GeoIntrusivePtr<GeoPhysVol>physFIBM =
new GeoPhysVol(logicalFIBM);
873 name =
m_BaseName +
"FrontInnerBarrette::Module::Phidiv";
874 for(
int i = 0; i < nofdiv; ++ i){
876 physFIBM->add(
new GeoIdentifierTag(i));
877 physFIBM->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
878 physFIBM->add(physFIBMP);
881 name =
m_BaseName +
"FrontInnerBarrette::Module";
882 for(
int i = 0; i < number_of_modules; ++ i){
883 double fi = dfi/2.+ i * moduldfi;
884 physFIB->add(
new GeoIdentifierTag(i));
885 physFIB->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
886 physFIB->add(physFIBM);
895 const double coldContraction=(*m_DB_ColdContraction)[0]->getDouble(
"ABSORBERCONTRACTION");
896 const double electrodeInvColdContraction=(*m_DB_ColdContraction)[0]->getDouble(
"ELECTRODEINVCONTRACTION");
897 const double leadThicknessOuter=(*m_DB_EmecFan)[0]->getDouble(
"LEADTHICKNESSOUTER")*Gaudi::Units::mm;
898 const double steelThickness=(*m_DB_EmecFan)[0]->getDouble(
"STEELTHICKNESS")*Gaudi::Units::mm;
899 const double glueThickness=(*m_DB_EmecFan)[0]->getDouble(
"GLUETHICKNESS")*Gaudi::Units::mm;
900 const double electrodeTotalThickness=(*m_DB_EmecFan)[0]->getDouble(
"ELECTRODETOTALTHICKNESS")*Gaudi::Units::mm;
902 const double outerAbsorberDy=(leadThicknessOuter/2+steelThickness+glueThickness)*coldContraction;
903 const double electrodeDy=electrodeTotalThickness/2/electrodeInvColdContraction;
905 const std::string
id =
"BackOuterBarrettes";
912 std::string name = baseName + id;
919 GeoLogVol *logicalBOB =
new GeoLogVol(name, shapeBOB,
m_LAr);
920 GeoIntrusivePtr<GeoPhysVol>physBOB =
new GeoPhysVol(logicalBOB);
921 motherPhysical->add(
new GeoTransform(GeoTrf::TranslateZ3D(zposBOB)));
922 motherPhysical->add(physBOB);
924 const int number_of_modules = 8;
925 const double moduldfi = Gaudi::Units::twopi / number_of_modules;
926 int nofabs = (*m_DB_EmecWheelParameters)[1]->getInt(
"NABS");
927 int nofdiv = nofabs / number_of_modules;
928 double dfi = Gaudi::Units::twopi / nofabs;
930 name = baseName +
"BackOuterBarrette::Module::Phidiv";
931 GeoTubs *shapeBOBMP =
new GeoTubs(rminBOB, rmaxBOB, dzBOB, -dfi/4., dfi);
932 GeoLogVol *logicalBOBMP =
new GeoLogVol(name, shapeBOBMP,
m_LAr);
933 GeoIntrusivePtr<GeoPhysVol>physBOBMP =
new GeoPhysVol(logicalBOBMP);
935 name = baseName +
"BackOuterBarrette::Abs";
939 assert(rmn + dr > rminBOB && rmn + dr + dx * 2 < rmaxBOB);
941 const double r0A = rmn + dr + dx;
942 GeoBox *shapeBOBA =
new GeoBox(dx, outerAbsorberDy, dzBOB);
943 GeoLogVol *logicalBOBA =
new GeoLogVol(name, shapeBOBA,
m_G10FeOuter);
944 GeoIntrusivePtr<GeoPhysVol>physBOBA =
new GeoPhysVol(logicalBOBA);
945 physBOBMP->add(
new GeoTransform(GeoTrf::TranslateX3D(r0A)));
946 physBOBMP->add(physBOBA);
948 name = baseName +
"BackOuterBarrette::Ele";
951 assert(rmn + dr > rminBOB && rmn + dr + dx*2 < rmaxBOB);
953 double r0E = rmn + dr + dx;
954 double y0 = r0E * sin(dfi/2.);
955 double x0 = r0E * cos(dfi/2.);
956 GeoBox *shapeBOBE =
new GeoBox(dx, electrodeDy, dzBOB);
957 GeoLogVol *logicalBOBE =
new GeoLogVol(name, shapeBOBE,
m_Kapton_Cu);
958 GeoIntrusivePtr<GeoPhysVol>physBOBE =
new GeoPhysVol(logicalBOBE);
959 physBOBMP->add(
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(dfi/2.))));
960 physBOBMP->add(physBOBE);
964 name = baseName +
"BackOuterBarrette::Module::Phidiv";
965 for(
int i = 0; i < nofdiv - 1; ++ i){
967 physBOB->add(
new GeoIdentifierTag(i));
968 physBOB->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
969 physBOB->add(physBOBMP);
971 name = baseName +
"BackOuterBarrette::Abs";
972 double fi =
m_PhiStart + dfi/2.+ (nofdiv - 1) * dfi;
975 physBOB->add(
new GeoIdentifierTag(nofdiv - 1));
976 physBOB->add(
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0,y0,0.)*GeoTrf::RotateZ3D(fi))));
977 physBOB->add(physBOBA);
981 name =
m_BaseName +
"BackOuterBarrette::Module";
982 GeoTubs *shapeBOBM =
new GeoTubs(rminBOB, rmaxBOB, dzBOB, -dfi/4.,moduldfi);
983 GeoLogVol *logicalBOBM =
new GeoLogVol(name, shapeBOBM,
m_LAr);
984 GeoIntrusivePtr<GeoPhysVol>physBOBM =
new GeoPhysVol(logicalBOBM);
986 name = baseName +
"BackOuterBarrette::Module::Phidiv";
987 for(
int i = 0; i < nofdiv; ++ i){
989 physBOBM->add(
new GeoIdentifierTag(i));
990 physBOBM->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
991 physBOBM->add(physBOBMP);
994 name = baseName +
"BackOuterBarrette::Module";
995 for(
int i = 0; i < number_of_modules; ++ i){
996 double fi = dfi/2.+ i * moduldfi;
997 physBOB->add(
new GeoIdentifierTag(i));
998 physBOB->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
999 physBOB->add(physBOBM);
1006 const double coldContraction=(*m_DB_ColdContraction)[0]->getDouble(
"ABSORBERCONTRACTION");
1007 const double electrodeInvColdContraction=(*m_DB_ColdContraction)[0]->getDouble(
"ELECTRODEINVCONTRACTION");
1008 const double leadThicknessInner=(*m_DB_EmecFan)[0]->getDouble(
"LEADTHICKNESSINNER")*Gaudi::Units::mm;
1009 const double steelThickness=(*m_DB_EmecFan)[0]->getDouble(
"STEELTHICKNESS")*Gaudi::Units::mm;
1010 const double glueThickness=(*m_DB_EmecFan)[0]->getDouble(
"GLUETHICKNESS")*Gaudi::Units::mm;
1011 const double electrodeTotalThickness=(*m_DB_EmecFan)[0]->getDouble(
"ELECTRODETOTALTHICKNESS")*Gaudi::Units::mm;
1013 const double innerAbsorberDy=(leadThicknessInner/2+steelThickness+glueThickness)*coldContraction;
1014 const double electrodeDy=electrodeTotalThickness/2/electrodeInvColdContraction;
1018 std::string
id =
"BackInnerBarrettes";
1029 GeoLogVol *logicalBIB =
new GeoLogVol(name, shapeBIB,
m_LAr);
1030 GeoIntrusivePtr<GeoPhysVol>physBIB =
new GeoPhysVol(logicalBIB);
1031 motherPhysical->add(
new GeoTransform(GeoTrf::TranslateZ3D(zposBIB)));
1032 motherPhysical->add(physBIB);
1034 const int number_of_modules = 8;
1035 const double moduldfi = Gaudi::Units::twopi / number_of_modules;
1036 const int nofabs = (*m_DB_EmecWheelParameters)[0]->getInt(
"NABS");
1037 const int nofdiv = nofabs / number_of_modules;
1038 const double dfi = Gaudi::Units::twopi / nofabs;
1040 name =
m_BaseName +
"BackInnerBarrette::Module::Phidiv";
1041 GeoTubs *shapeBIBMP =
new GeoTubs(rminBIB, rmaxBIB, dzBIB, -dfi/4., dfi);
1042 GeoLogVol *logicalBIBMP =
new GeoLogVol(name, shapeBIBMP,
m_LAr);
1043 GeoIntrusivePtr<GeoPhysVol>physBIBMP =
new GeoPhysVol(logicalBIBMP);
1046 id =
"BackInnerBarrette::Abs";
1052 assert(rmn+dr>rminBIB && rmn+dr+dx*2.<rmaxBIB);
1053 const double r0A = rmn + dr + dx;
1054 GeoBox *shapeBIBA =
new GeoBox(dx, innerAbsorberDy, dzBIB);
1055 GeoLogVol *logicalBIBA =
new GeoLogVol(name, shapeBIBA,
m_G10FeInner);
1056 GeoIntrusivePtr<GeoPhysVol>physBIBA =
new GeoPhysVol(logicalBIBA);
1057 physBIBMP->add(
new GeoTransform(GeoTrf::TranslateX3D(r0A)));
1058 physBIBMP->add(physBIBA);
1060 id =
"BackInnerBarrette::Ele";
1064 assert(rmn + dr > rminBIB && rmn + dr + dx * 2. < rmaxBIB);
1066 const double r0E = rmn + dr + dx;
1067 double y0 = r0E * sin(dfi * 0.5);
1068 double x0 = r0E * cos(dfi * 0.5);
1069 GeoBox *shapeBIBE =
new GeoBox(dx, electrodeDy, dzBIB);
1070 GeoLogVol *logicalBIBE =
new GeoLogVol(name, shapeBIBE,
m_Kapton_Cu);
1071 GeoIntrusivePtr<GeoPhysVol>physBIBE =
new GeoPhysVol(logicalBIBE);
1072 physBIBMP->add(
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0, y0, 0.)*GeoTrf::RotateZ3D(dfi*0.5))));
1073 physBIBMP->add(physBIBE);
1088 name =
m_BaseName +
"BackInnerBarrette::Module::Phidiv";
1089 for(
int i = 0; i < nofdiv - 1; ++ i){
1091 physBIB->add(
new GeoIdentifierTag(i));
1092 physBIB->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
1093 physBIB->add(physBIBMP);
1095 name =
m_BaseName +
"BackInnerBarrette::Abs";
1096 double fi =
m_PhiStart + dfi/2.+ (nofdiv - 1) * dfi;
1099 physBIB->add(
new GeoIdentifierTag(nofdiv - 1));
1100 physBIB->add(
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(x0, y0, 0.)*GeoTrf::RotateZ3D(fi))));
1101 physBIB->add(physBIBA);
1105 name =
m_BaseName +
"BackInnerBarrette::Module";
1106 GeoTubs *shapeBIBM =
new GeoTubs(rminBIB, rmaxBIB, dzBIB, -dfi/4., moduldfi);
1107 GeoLogVol *logicalBIBM =
new GeoLogVol(name, shapeBIBM,
m_LAr);
1108 GeoIntrusivePtr<GeoPhysVol>physBIBM =
new GeoPhysVol(logicalBIBM);
1110 name =
m_BaseName +
"BackInnerBarrette::Module::Phidiv";
1111 for(
int i = 0; i < nofdiv; ++ i){
1112 double fi = dfi * i;
1113 physBIBM->add(
new GeoIdentifierTag(i));
1114 physBIBM->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
1115 physBIBM->add(physBIBMP);
1118 name =
m_BaseName +
"BackInnerBarrette::Module";
1119 for(
int i = 0; i < number_of_modules; ++ i){
1120 double fi = dfi*0.5 + i * moduldfi;
1121 physBIB->add(
new GeoIdentifierTag(i));
1122 physBIB->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
1123 physBIB->add(physBIBM);
1212 std::string
id =
"InnerAluCone";
1217 double dz = 0.5 * (*m_DB_mn)[0]->getDouble(
"ACTIVELENGTH")*Gaudi::Units::mm;
1219 dz += (*m_DB_mn)[0]->getDouble(
"STRAIGHTSTARTSECTION")*Gaudi::Units::mm;
1222 dz += 2.*Gaudi::Units::mm;
1229 const double talpha = (r2min - r1min)*0.5/dz;
1230 const double calpha = 2.*dz/sqrt(
pow(2.*dz,2.)+
pow(r2min-r1min,2.));
1231 const double inv_calpha = 1. / calpha;
1232 const double alpha = atan(talpha);
1235 double r1max =
pow(barthick/2.,2.)+
pow(r1min+(surfthick+barthick)*inv_calpha,2.);
1236 r1max = sqrt(r1max)+surfthick*inv_calpha;
1237 double r2max = r2min+(r1max-r1min);
1239 GeoCons* shapeIAC =
new GeoCons ( r1min ,r2min,
1243 GeoLogVol* logicalIAC =
new GeoLogVol (name0, shapeIAC,
m_LAr);
1244 GeoIntrusivePtr<GeoPhysVol> physIAC =
new GeoPhysVol(logicalIAC);
1250 std::string name = name0 +
"::InnerShell";
1251 GeoCons* shapeIACIS =
new GeoCons(
1253 r1min+surfthick*inv_calpha, r2min+surfthick*inv_calpha,
1255 GeoLogVol* logicalIACIS =
new GeoLogVol (name,shapeIACIS,
m_Alu);
1256 GeoIntrusivePtr<GeoPhysVol> physIACIS =
new GeoPhysVol(logicalIACIS);
1257 physIAC->add(physIACIS);
1259 name = name0 +
"::OuterShell";
1262 GeoCons* shapeIACOS =
new GeoCons (
1263 r1max-surfthick*inv_calpha, r2max-surfthick*inv_calpha,
1266 GeoLogVol* logicalIACOS =
new GeoLogVol (name,shapeIACOS,
m_Alu);
1267 GeoIntrusivePtr<GeoPhysVol> physIACOS =
new GeoPhysVol(logicalIACOS);
1268 physIAC->add(physIACOS);
1270 name = name0 +
"::Phidiv";
1273 const int nofmodul = 8;
1274 const double moduldphi = Gaudi::Units::twopi / nofmodul;
1275 GeoCons* shapeIACP =
new GeoCons(
1276 r1min+surfthick*inv_calpha,r2min+surfthick*inv_calpha,
1277 r1max-surfthick*inv_calpha,r2max-surfthick*inv_calpha,
1278 dz, -moduldphi/2.,moduldphi);
1279 GeoLogVol* logicalIACP =
new GeoLogVol (name,shapeIACP,
m_LAr);
1280 GeoIntrusivePtr<GeoPhysVol> physIACP =
new GeoPhysVol(logicalIACP);
1282 name = name0 +
"::AluBar";
1285 GeoPara* shapeIACAB =
new GeoPara(
1286 barthick/2.*inv_calpha,barthick/2.,dz,
1288 GeoLogVol* logicalIACAB=
new GeoLogVol (name,shapeIACAB,
m_Alu);
1289 GeoIntrusivePtr<GeoPhysVol> physIACAB=
new GeoPhysVol(logicalIACAB);
1291 const double dphi = Gaudi::Units::twopi / 256.;
1293 const double phi[9]={-15.,-11.,-7.5,-4.,0.,4.,7.5,11.,15.};
1294 const double r0=r1min+(surfthick+barthick/2.)*inv_calpha+dz*talpha;
1296 for(
int i = 0; i < nbar; ++ i){
1297 double fi=
phi[i]*dphi;
1300 physIACP->add(
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(r0*cfi,r0*sfi,0.)*GeoTrf::RotateZ3D(fi))));
1301 physIACP->add(physIACAB);
1304 name = name0 +
"::Phidiv";
1305 for(
int i=0;i<nofmodul;i++){
1306 double fi=(i+0.5)*moduldphi;
1307 physIAC->add(
new GeoIdentifierTag(i));
1308 physIAC->add(
new GeoTransform(GeoTrf::RotateZ3D(fi)));
1309 physIAC->add(physIACP);
1765 std::string
id =
"FrontBoard";
1767 std::string idx =
id +
"I";
1775 double phi_start = -0.5 * phi_size;
1776 GeoTubs *bi_shape =
new GeoTubs(rmin, rmax, dz_boards, phi_start, phi_size);
1777 GeoLogVol *bi_l =
new GeoLogVol(name, bi_shape,
m_Gten);
1778 GeoIntrusivePtr<GeoPhysVol>bi_phys =
new GeoPhysVol(bi_l);
1786 GeoTubs *bm_shape =
new GeoTubs(rmin, rmax, dz_boards, phi_start, phi_size);
1787 GeoLogVol *bm_l =
new GeoLogVol(name, bm_shape,
m_Gten);
1788 GeoIntrusivePtr<GeoPhysVol>bm_phys =
new GeoPhysVol(bm_l);
1795 GeoTubs *bo_shape =
new GeoTubs(rmin, rmax, dz_boards, phi_start, phi_size);
1796 GeoLogVol *bo_l =
new GeoLogVol(name, bo_shape,
m_Gten);
1797 GeoIntrusivePtr<GeoPhysVol>bo_phys =
new GeoPhysVol(bo_l);
1801 double z_mb = z_boards - dz_boards;
1802 std::string mb_n[5] = {
"F1",
"F2",
"F3",
"F4",
"F5" };
1803 const double mb_dy[5] = { 74., 57., 57., 60., 44. };
1804 const double mb_dx[5] = { 38.5, 60., 138.5, 100., 165. };
1805 const double mb_dz_cu[5] = { .1, .15, .15, .15, .2 };
1807 double mb_r[5] = { (1739.-5.) , (1640.-5.), (1400.-4.), (1140. - 4.), (835.-1.)};
1808 double mb_dz[5] = { 1.4, 1.1, 1.25, 1.1, 1.25 };
1810 GeoIntrusivePtr<GeoPhysVol>mb_p[5];
1811 for(
int i = 0; i < 5; ++ i){
1812 idx =
id +
"::" + mb_n[i];
1817 GeoBox *mb_s =
new GeoBox(dx, dy, mb_dz[i]);
1818 GeoLogVol *mb_l =
new GeoLogVol(name, mb_s,
m_Gten);
1819 mb_p[i] =
new GeoPhysVol(mb_l);
1822 std::ostringstream tmp;
1823 tmp <<
"Cu" << (i + 1) <<
"z";
1825 GeoBox *cu =
new GeoBox(dx, dy, dz1);
1826 GeoLogVol *cul =
new GeoLogVol(name, cu,
m_Copper);
1827 GeoIntrusivePtr<GeoPhysVol>cup =
new GeoPhysVol(cul);
1828 mb_p[i]->add(
new GeoTransform(GeoTrf::TranslateZ3D(dz1 - mb_dz[i])));
1832 tmp <<
"R" << (i + 1);
1838 idx =
id +
"::Outer";
1844 GeoTubs *oc_s =
new GeoTubs(rmin, rmax, dz_oc, phi_start, phi_size);
1845 GeoLogVol *oc_l =
new GeoLogVol(name, oc_s,
m_Cable);
1846 GeoIntrusivePtr<GeoPhysVol>oc_p =
new GeoPhysVol(oc_l);
1847 double z_oc = z_boards - dz_boards - dz_oc;
1849 idx =
id +
"::SideOuter";
1855 GeoTubs *soc_s =
new GeoTubs(rmin, rmax, dz_soc, -0.5 * dphi_sc, dphi_sc);
1856 GeoLogVol *soc_l =
new GeoLogVol(name, soc_s,
m_Cable);
1857 GeoIntrusivePtr<GeoPhysVol>soc_p =
new GeoPhysVol(soc_l);
1861 const int number_of_sectors =
m_isModule? 4: 32;
1862 for(
int i = 0; i < number_of_sectors; ++ i){
1865 GeoIdentifierTag* iTag =
new GeoIdentifierTag(i);
1866 GeoTransform* xf =
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(0., 0., z_boards)*GeoTrf::Transform3D(GeoTrf::RotateZ3D(
phi))));
1867 GeoTransform* xf1 =
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(0., 0., z_oc)*GeoTrf::RotateZ3D(
phi)));
1869 motherPhysical->add(iTag);
1870 motherPhysical->add(xf);
1871 motherPhysical->add(bi_phys);
1873 motherPhysical->add(iTag);
1874 motherPhysical->add(xf);
1875 motherPhysical->add(bm_phys);
1877 motherPhysical->add(iTag);
1878 motherPhysical->add(xf);
1879 motherPhysical->add(bo_phys);
1881 motherPhysical->add(iTag);
1882 motherPhysical->add(xf1);
1883 motherPhysical->add(oc_p);
1885 for(
int j = 0; j < 5; ++ j){
1886 GeoTransform* xf2 =
new GeoTransform(
1887 GeoTrf::Transform3D(GeoTrf::RotateZ3D(
phi)*GeoTrf::Translate3D(mb_r[j], 0., z_mb - mb_dz[j])));
1888 motherPhysical->add(iTag);
1889 motherPhysical->add(xf2);
1890 motherPhysical->add(mb_p[j]);
1893 GeoTransform* xf3 =
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(0., 0., z_soc)*GeoTrf::RotateZ3D(
m_Position + (i - 2) * phi_size + 0.5 * dphi_sc)));;
1895 GeoTransform* xf4 =
new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translate3D(0., 0., z_soc)*GeoTrf::RotateZ3D(
m_Position + (i - 1) * phi_size - 0.5 * dphi_sc)));
1897 motherPhysical->add(
new GeoIdentifierTag(i * 2));
1898 motherPhysical->add(xf3);
1899 motherPhysical->add(soc_p);
1901 motherPhysical->add(
new GeoIdentifierTag(i * 2 + 1));
1902 motherPhysical->add(xf4);
1903 motherPhysical->add(soc_p);