87 ISvcLocator *svcLocator = Gaudi::svcLocator();
89 if (svcLocator->service(
"MessageSvc",
msgSvc,
true )==StatusCode::FAILURE) {
90 throw std::runtime_error(
"Error in LArDetectorConstructionH62003, cannot access MessageSvc");
93 MsgStream
log(
msgSvc,
"LArGeo::LArDetectorConstructionH62003");
95 log <<
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
96 log <<
"+ +" << std::endl;
97 log <<
"+ HELLO from LArGeo::LArDetectorConstructionH62003 +" << std::endl;
98 log <<
"+ +" << std::endl;
99 log <<
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
102 if (svcLocator->service(
"DetectorStore",
detStore,
false )==StatusCode::FAILURE) {
103 throw std::runtime_error(
"Error in LArDetectorConstructionH62003, cannot access DetectorStore");
106 if (StatusCode::SUCCESS !=
detStore->retrieve(materialManager, std::string(
"MATERIALS")))
return nullptr;
110 if (
sc != StatusCode::SUCCESS) {
111 throw std::runtime_error (
"Cannot locate RDBAccessSvc!!");
115 const std::string& detectorKey = larVersion.tag();
116 const std::string& detectorNode = larVersion.node();
124 const GeoMaterial *Air = materialManager->
getMaterial(
"std::Air");
126 throw std::runtime_error(
"Error in LArDetectorConstructionH62003, std::Air is not found.");
128 const GeoMaterial *Lead = materialManager->
getMaterial(
"std::Lead");
130 throw std::runtime_error(
"Error in LArDetectorConstructionH62003, std::Lead is not found.");
132 const GeoMaterial *PStyrene = materialManager->
getMaterial(
"std::Polystyrene");
134 throw std::runtime_error(
"Error in LArDetectorConstructionH62003, std::Polystyrene is not found.");
136 const GeoMaterial *Iron = materialManager->
getMaterial(
"std::Iron");
138 throw std::runtime_error(
"Error in LArDetectorConstructionH62003, std::Iron is not found.");
140 const GeoMaterial *Aluminum = materialManager->
getMaterial(
"std::Aluminium");
142 throw std::runtime_error(
"Error in LArDetectorConstructionH62003, std::Aluminum is not found.");
144 const GeoMaterial *Concrete = materialManager->
getMaterial(
"std::Concrete");
146 throw std::runtime_error(
"Error in LArDetectorConstructionH62003, std::Concrete is not found.");
148 const GeoMaterial *
LAr = materialManager->
getMaterial(
"std::LiquidArgon");
150 throw std::runtime_error(
"Error in LArDetectorConstructionH62003, std::LiquidArgon is not found.");
152 const GeoMaterial *Vac = materialManager->
getMaterial(
"std::Vacuum");
154 throw std::runtime_error(
"Error in LArDetectorConstructionH62003, std::Vacuum is not found.");
157 const std::string RohacellName =
"Rohacell";
158 const double RoDensity = 0.011*
g/
cm3;
159 const GeoElement*
C=materialManager->
getElement(
"Carbon");
160 const GeoElement*
H=materialManager->
getElement(
"Hydrogen");
161 const GeoElement*
O=materialManager->
getElement(
"Oxygen");
162 const GeoElement*
N=materialManager->
getElement(
"Nitrogen");
163 GeoMaterial* Rohacell =
new GeoMaterial(RohacellName, RoDensity);
164 Rohacell->add(C,0.6465);
165 Rohacell->add(H,0.07836);
166 Rohacell->add(O,0.19137);
167 Rohacell->add(
N,0.08377);
172 const std::string SSteelName =
"StainlessSteel";
173 double SSDensity = 7.9*
g/
cm3;
174 const GeoElement* Fe=materialManager->
getElement(
"Iron");
175 const GeoElement* Cr=materialManager->
getElement(
"Chromium");
176 GeoMaterial* StainlessSteel =
new GeoMaterial(SSteelName, SSDensity);
177 StainlessSteel->add(Fe,0.90);
178 StainlessSteel->add(Cr,0.10);
179 StainlessSteel->lock();
183 std::string baseName =
"LAr::TBH62003";
188 double trans = -543.12*
cm;
191 std::string H62003MotherName = baseName +
"::MotherVolume";
192 const GeoBox* H62003MotherShape =
new GeoBox(2.5*
m, 2.5*
m, 30.*
m);
193 const GeoLogVol* H62003MotherLogical =
194 new GeoLogVol(H62003MotherName, H62003MotherShape, Air);
201 unsigned int NH6EP = 0;
206 std::cout <<
"Axis is ON" << std::endl;
211 H6CryostatConstruction cryoConstruction;
212 GeoIntrusivePtr<GeoVFullPhysVol> cryoPhys = cryoConstruction.GetEnvelope();
213 GeoIntrusivePtr<GeoPhysVol> LArPhysical = cryoConstruction.GetLArPhysical();
216 std::string nickname =
"POSITION1";
230 double CryoXPos = 0.0;
231 double CryoYPos = 0.0;
233 if( nickname ==
"POSITION1") {CryoXPos = 1.8*
cm;}
234 if( nickname ==
"POSITION2") {CryoXPos = -1.45*
cm;}
235 if( nickname ==
"POSITION3") {CryoXPos = - 4.7*
cm;}
236 if((nickname ==
"POSITION4L") || (nickname ==
"POSITION4H"))
237 {CryoXPos = -15.5*
cm;}
247 double CryoXRot = -90.0*
deg;
251 GeoAlignableTransform *xf =
253 Translate3D(CryoXPos,
256 *RotateX3D(CryoXRot)));
258 double xrot=0,yrot=0,zrot=0;
259 if(larTBPos->size()!=0) {
260 for (
unsigned int i=0;
i<larTBPos->size();
i++) {
261 if((*larTBPos)[
i]->getString(
"MOVABLE_NAME") ==
"LARCRYO_EC_POS") {
262 if((*larTBPos)[
i]->getString(
"POSITION_NICKNAME")==nickname){
263 if (((*larTBPos)[
i]->getInt(
"POSITION_NICKNUMBER")==0) || ((*larTBPos)[
i]->getInt(
"POSITION_NICKNUMBER")==nicknumber)) {
267 xrot = (*larTBPos)[
i]->getDouble(
"XROT")*
deg;
268 yrot = (*larTBPos)[
i]->getDouble(
"YROT")*
deg;
269 zrot = (*larTBPos)[
i]->getDouble(
"ZROT")*
deg;
293 std::string tubName = baseName +
"::Tub::Envelope";
294 const double tubXPos = -9.0*
cm;
295 const double tubYPos = 1.5*
cm;
296 const double tubZPos = 7.44*
cm;
298 const double tubXRot = 90.0*
deg;
299 const double tubYRot = 1.49*
deg;
301 const double tubThickness = 0.079*
cm;
303 const double tubWidth = 64.75*
cm;
304 const double tubHeighth = 72.75*
cm;
305 const double tubLength = 84.50*
cm;
307 const GeoShape* tubEnvelopeShape =
308 new GeoBox(tubWidth+2*tubThickness,
309 tubHeighth+2*tubThickness,
311 const GeoLogVol* tubEnvelopeLog =
312 new GeoLogVol(tubName,tubEnvelopeShape,
LAr);
314 GeoIntrusivePtr<GeoPhysVol> tubEnvelopePhys =
new GeoPhysVol(tubEnvelopeLog);
319 LArPhysical->add(
new GeoTransform(Translate3D(tubXPos,
322 LArPhysical->add(
new GeoTransform(RotateX3D(tubXRot)));
323 LArPhysical->add(
new GeoTransform(RotateY3D(tubYRot)));
324 LArPhysical->add(tubEnvelopePhys);
327 std::string tubEndName = baseName +
"::Tub::End";
328 const GeoShape* tubEndShape =
329 new GeoBox(tubWidth,tubHeighth,tubThickness);
330 const GeoLogVol* tubEndLog =
331 new GeoLogVol(tubEndName, tubEndShape, StainlessSteel);
332 GeoIntrusivePtr<GeoPhysVol> tubEndPhys =
new GeoPhysVol(tubEndLog);
336 tubEnvelopePhys->add(
new GeoTransform(Translate3D(0.0*
cm,
338 tubLength-tubThickness)));
339 tubEnvelopePhys->add(tubEndPhys);
340 tubEnvelopePhys->add(
new GeoTransform(Translate3D(0.0*
cm,
342 -tubLength+tubThickness)));
343 tubEnvelopePhys->add(tubEndPhys);
346 std::string tubSideName = baseName +
"::Tub::Side";
347 const GeoShape* tubSideShape =
348 new GeoBox(tubHeighth,tubLength,tubThickness);
349 const GeoLogVol* tubSideLog =
350 new GeoLogVol(tubSideName, tubSideShape, StainlessSteel);
351 GeoIntrusivePtr<GeoPhysVol> tubSidePhys =
new GeoPhysVol(tubSideLog);
353 tubEnvelopePhys->add(
new GeoTransform(Translate3D(tubWidth,
356 tubEnvelopePhys->add(
new GeoTransform(RotateX3D(90*
deg)));
357 tubEnvelopePhys->add(
new GeoTransform(RotateY3D(90*
deg)));
358 tubEnvelopePhys->add(tubSidePhys);
359 tubEnvelopePhys->add(
new GeoTransform(Translate3D(-tubWidth,
362 tubEnvelopePhys->add(
new GeoTransform(RotateX3D(90*
deg)));
363 tubEnvelopePhys->add(
new GeoTransform(RotateY3D(90*
deg)));
364 tubEnvelopePhys->add(tubSidePhys);
366 std::string tubBottomName = baseName +
"::Tub::Bottom";
367 const GeoShape* tubBottomShape =
368 new GeoBox(tubWidth,tubLength,tubThickness);
369 const GeoLogVol* tubBottomLog =
370 new GeoLogVol(tubBottomName, tubBottomShape, StainlessSteel);
371 GeoIntrusivePtr<GeoPhysVol> tubBottomPhys =
new GeoPhysVol(tubBottomLog);
372 tubEnvelopePhys->add(
new GeoTransform(Translate3D(0.0*
cm,
375 tubEnvelopePhys->add(
new GeoTransform(RotateX3D(90*
deg)));
376 tubEnvelopePhys->add(tubBottomPhys);
383 bool isPositive(
false);
384 GeoIntrusivePtr<GeoVFullPhysVol> fcalEnvelope = fcalConstruction.GetEnvelope(isPositive);
385 if(fcalEnvelope ==
nullptr)
387 throw std::runtime_error(
"Error getting FCAL envelope");
393 if (fcalMod->size()==0) {
395 if (fcalMod->size()==0) {
396 throw std::runtime_error(
"Error getting FCAL Module parameters from database");
400 tubEnvelopePhys->add(
new GeoIdentifierTag(1));
401 tubEnvelopePhys->add(
new GeoTransform(RotateX3D(2*tubXRot)));
402 tubEnvelopePhys->add(
new GeoTransform(RotateZ3D(2*tubXRot)));
403 tubEnvelopePhys->add(fcalEnvelope);
406 const std::string FCalBeamName = baseName +
"::FCalBeamPipe";
408 const double FCal1ZStart = (*fcalMod)[0]->getDouble(
"STARTPOSITION");
409 const double FCal3ZStart = (*fcalMod)[2]->getDouble(
"STARTPOSITION");
410 const double FCal3Depth = (*fcalMod)[2]->getDouble(
"FULLMODULEDEPTH");
411 const double FCal3Stop = FCal3ZStart + FCal3Depth;
412 const double halfDepth = (FCal3Stop - FCal1ZStart)/2.0;
414 const double innerRadius = 0.0*
cm;
415 const double outerRadius = (*fcalMod)[0]->getDouble(
"INNERMODULERADIUS");
417 GeoTubs *FCalBeamTubs =
418 new GeoTubs(innerRadius, outerRadius,halfDepth,0,360*
deg);
419 GeoLogVol* FCalBeamLog =
new GeoLogVol(FCalBeamName,FCalBeamTubs,Vac);
420 GeoIntrusivePtr<GeoPhysVol> FCalBeamPhys =
new GeoPhysVol(FCalBeamLog);
422 tubEnvelopePhys->add(
new GeoNameTag(FCalBeamName));
423 tubEnvelopePhys->add(FCalBeamPhys);
426 std::string AlPlateName = baseName +
"::AlPlate";
427 const double AlXDim = 15.0*
cm;
428 const double AlYDim = 8.25*
cm;
429 const double AlZDim = 2.54*
cm;
431 const GeoShape *AlPlateBox =
new GeoBox(AlXDim,AlYDim,AlZDim);
432 const GeoShape *AlPlateSlit =
new GeoBox(5.0*
cm,2.75*
cm,AlZDim+0.5*
mm);
435 Translate3D AlSlitOffset(4.5*
cm,-5.5*
cm,0.0*
cm);
437 const GeoShape & AlPlateShape =
438 (AlPlateBox->subtract(*AlPlateSlit<<AlSlitOffset));
440 const GeoLogVol* AlPlateLog =
441 new GeoLogVol(AlPlateName, &AlPlateShape, Aluminum);
443 const double AlTrans = tubLength - (tubThickness + AlZDim);
444 GeoIntrusivePtr<GeoPhysVol> AlPlatePhys =
new GeoPhysVol(AlPlateLog);
447 add(
new GeoTransform(Translate3D(20.0*
cm,
450 tubEnvelopePhys->add(AlPlatePhys);
453 std::string ExcludertubName = baseName +
"::Excluder";
455 const GeoShape* ExcluderTubShape =
461 const GeoShape* ExcluderSlit =
new GeoBox(7.0*
cm, 16.25*
cm, 5.0*
cm);
464 Translate3D ExSlitOffset(6.5*
cm, -2.75*
cm, -11.01*
cm);
466 const GeoShape & ExcluderShape =
467 (ExcluderTubShape->subtract(*ExcluderSlit<<ExSlitOffset));
468 const GeoLogVol* ExcluderTubLog =
469 new GeoLogVol(ExcludertubName, &ExcluderShape, Rohacell);
470 GeoIntrusivePtr<GeoPhysVol> ExcluderTubPhys =
471 new GeoPhysVol(ExcluderTubLog);
474 const double ExTrans = 107.94*
cm;
475 const double ExXPos = 5.5*
cm;
480 LArPhysical->add(
new GeoTransform(Translate3D(tubXPos+ExXPos,
483 LArPhysical->add(
new GeoTransform(RotateX3D(tubXRot)));
484 LArPhysical->add(
new GeoTransform(RotateY3D(tubYRot)));
485 LArPhysical->add(ExcluderTubPhys);
492 if (ScintGeom->size()!=0) {
494 log <<
MSG::DEBUG <<
"LArH62003: Creating beam chambers ..." << std::endl;
498 std::vector<double> v_ScintXDim;
499 std::vector<double> v_ScintYDim;
500 std::vector<double> v_ScintZDim;
502 std::vector<double> v_ScintXPos;
503 std::vector<double> v_ScintYPos;
504 std::vector<double> v_ScintZPos;
508 v_ScintXDim.push_back(63.4*
cm);
509 v_ScintYDim.push_back(63.4*
cm);
510 v_ScintZDim.push_back(0.5*
cm);
511 v_ScintXPos.push_back(0.0*
cm);
512 v_ScintYPos.push_back(5.0*
cm);
514 v_ScintXDim.push_back(145.0*
cm);
515 v_ScintYDim.push_back(145.0*
cm);
516 v_ScintZDim.push_back(1.27*
cm);
517 v_ScintXPos.push_back(0.0*
cm);
518 v_ScintYPos.push_back(-20.0*
cm);
520 v_ScintXDim.push_back(100.0*
cm);
521 v_ScintYDim.push_back(100.0*
cm);
522 v_ScintZDim.push_back(0.5*
cm);
523 v_ScintXPos.push_back(0.0*
cm);
524 v_ScintYPos.push_back(-28.0*
cm);
527 for(
unsigned int i=0;
i < 3;
i++)
529 std::string ScintName = baseName +
"::Scintillator";
538 v_ScintZPos.push_back((*ScintGeom)[
i]->getDouble(
"ZPOS")*
cm);
540 const GeoBox* ScintShape =
541 new GeoBox(v_ScintXDim[
i],v_ScintYDim[
i],v_ScintZDim[
i] );
543 std::ostringstream o;
545 ScintName += o.str();
546 const GeoLogVol* ScintLogical =
547 new GeoLogVol(ScintName,ScintShape,PStyrene);
548 GeoIntrusivePtr<GeoPhysVol> ScintPhysical =
new GeoPhysVol(ScintLogical);
552 add(
new GeoTransform(Translate3D(v_ScintXPos[
i],
555 trans-v_ScintZPos[
i])));
563 if(nickname ==
"POSITION4H")
565 tableHeight = 47.0*
mm;
567 else if( nickname ==
"POSITION4L")
569 tableHeight = -21.0*
mm;
573 tableHeight = 0.0*
mm;
576 std::vector<double> v_TableScintXDim;
577 std::vector<double> v_TableScintYDim;
578 std::vector<double> v_TableScintZDim;
580 std::vector<double> v_TableScintXPos;
581 std::vector<double> v_TableScintYPos;
582 std::vector<double> v_TableScintZPos;
586 v_TableScintXDim.push_back(5.0*
cm);
587 v_TableScintYDim.push_back(5.0*
cm);
588 v_TableScintZDim.push_back(0.5*
cm);
589 v_TableScintXPos.push_back(0.0*
cm);
590 v_TableScintYPos.push_back(0.0*
cm);
592 v_TableScintXDim.push_back(5.0*
cm);
593 v_TableScintYDim.push_back(5.0*
cm);
594 v_TableScintZDim.push_back(0.5*
cm);
595 v_TableScintXPos.push_back(0.0*
cm);
597 v_TableScintYPos.push_back(0.0*
cm);
599 v_TableScintXDim.push_back(3.5*
cm);
600 v_TableScintYDim.push_back(3.5*
cm);
601 v_TableScintZDim.push_back(0.5*
cm);
602 v_TableScintXPos.push_back(0.0*
cm);
604 v_TableScintYPos.push_back(0.0*
cm);
607 for(
unsigned int i=3;
i < 6;
i++)
617 v_TableScintZPos.push_back((*ScintGeom)[
i]->getDouble(
"ZPOS")*
cm);
620 for(
unsigned int i=0;
i < 3;
i++)
622 std::string TableScintName = baseName +
"::TableScintillator";
623 const GeoBox* TableScintShape =
new GeoBox(v_TableScintXDim[
i],
625 v_TableScintZDim[
i] );
627 std::ostringstream o;
629 TableScintName += o.str();
630 const GeoLogVol* TableScintLogical =
631 new GeoLogVol(TableScintName,TableScintShape,PStyrene );
632 GeoIntrusivePtr<GeoPhysVol> TableScintPhysical =
633 new GeoPhysVol( TableScintLogical );
637 add(
new GeoTransform(Translate3D(v_TableScintXPos[
i],
639 v_TableScintYPos[
i]),
641 v_TableScintZPos[
i])));
648 std::string VetoName = baseName +
"::VetoCounter";
649 const double VetoXDim = 31.7*
cm;
650 const double VetoYDim = 31.7*
cm;
651 const double VetoZDim = 2.5*
cm;
653 const double VetoXPos = 0.0*
cm;
654 const double VetoYPos = 0.0*
cm;
655 const double VetoZPos = -472.2*
cm;
657 const GeoShape* VetoBoxShape =
new GeoBox(VetoXDim, VetoYDim, VetoZDim);
658 const GeoShape* VetoHole =
new GeoTube(0.0*
cm, 3.25*
cm,VetoZDim);
660 const GeoShape & VetoShape =
661 VetoBoxShape->subtract(*VetoHole);
663 const GeoLogVol* VetoLog =
new GeoLogVol(VetoName, &VetoShape, PStyrene);
664 GeoIntrusivePtr<GeoPhysVol> VetoPhys =
new GeoPhysVol(VetoLog);
667 add(
new GeoTransform(Translate3D(VetoXPos,
668 tableHeight + VetoYPos,
675 const double MuonCtrXDim = (*ScintGeom)[6]->getDouble(
"XDIM")*
cm;
676 const double MuonCtrYDim = (*ScintGeom)[6]->getDouble(
"YDIM")*
cm;
677 const double MuonCtrZDim = (*ScintGeom)[6]->getDouble(
"ZDIM")*
cm;
679 const double MuonCtrXPos = (*ScintGeom)[6]->getDouble(
"XPOS")*
cm;
680 const double MuonCtrYPos = (*ScintGeom)[6]->getDouble(
"YPOS")*
cm;
681 const double MuonCtrZPos = (*ScintGeom)[6]->getDouble(
"ZPOS")*
cm;
683 std::string MuonCtrName = baseName +
"::MuonCounter";
685 const GeoBox* MuonCtrShape =
new
686 GeoBox(MuonCtrXDim,MuonCtrYDim,MuonCtrZDim);
687 const GeoLogVol* MuonCtrLogical =
688 new GeoLogVol(MuonCtrName,MuonCtrShape,PStyrene);
689 GeoIntrusivePtr<GeoPhysVol> MuonCtrPhysical =
new GeoPhysVol(MuonCtrLogical);
692 add(
new GeoTransform(Translate3D(MuonCtrXPos,
694 trans-MuonCtrZPos)));
701 const double TCScintXDim = (*ScintGeom)[7]->getDouble(
"XDIM")*
cm;
702 const double TCScintYDim = (*ScintGeom)[7]->getDouble(
"YDIM")*
cm;
703 const double TCScintZDim = (*ScintGeom)[7]->getDouble(
"ZDIM")*
cm;
705 const double TCScintXPos = (*ScintGeom)[7]->getDouble(
"XPOS")*
cm;
706 const double TCScintYPos = (*ScintGeom)[7]->getDouble(
"YPOS")*
cm;
707 const double TCScintZPos = (*ScintGeom)[7]->getDouble(
"ZPOS")*
cm;
710 std::string TCScintLogName = baseName +
"::TCScint";
712 const GeoBox *TCScintBox =
713 new GeoBox(TCScintXDim, TCScintYDim, TCScintZDim);
715 const GeoLogVol* TCScintLogical =
716 new GeoLogVol(TCScintLogName,TCScintBox, PStyrene);
717 GeoSerialDenominator *TCScintName =
718 new GeoSerialDenominator(TCScintLogName);
721 const double TCIronXDim = (*ScintGeom)[8]->getDouble(
"XDIM")*
cm;
722 const double TCIronYDim = (*ScintGeom)[8]->getDouble(
"YDIM")*
cm;
723 const double TCIronZDim = (*ScintGeom)[8]->getDouble(
"ZDIM")*
cm;
725 const double TCIronXPos = (*ScintGeom)[8]->getDouble(
"XPOS")*
cm;
726 const double TCIronYPos = (*ScintGeom)[8]->getDouble(
"YPOS")*
cm;
727 const double TCIronZPos = (*ScintGeom)[8]->getDouble(
"ZPOS")*
cm;
730 std::string TCIronLogName = baseName +
"::TCIron";
731 const GeoBox *TCIronBox =
new GeoBox(TCIronXDim, TCIronYDim, TCIronZDim);
733 const GeoLogVol* TCIronLogical =
734 new GeoLogVol(TCIronLogName,TCIronBox, Iron);
735 GeoSerialDenominator *TCIronName =
736 new GeoSerialDenominator(TCIronLogName);
739 for(
int i = 0;
i<6;
i++)
741 GeoIntrusivePtr<GeoPhysVol> TCScintPhysical =
new GeoPhysVol(TCScintLogical);
742 GeoAlignableTransform* TCScintTrans =
743 new GeoAlignableTransform(Translate3D(TCScintXPos,
756 for(
int i = 0;
i<6;
i++)
758 GeoIntrusivePtr<GeoPhysVol> TCIronPhysical =
new GeoPhysVol(TCIronLogical);
759 GeoAlignableTransform* TCIronTrans =
760 new GeoAlignableTransform(Translate3D(TCIronXPos,
763 2*
i*(TCScintZDim+TCIronZDim)
772 const double IronWallXDim = 100.0*
cm;
773 const double IronWallYDim = 100.0*
cm;
774 const double IronWallZDim = 20.0*
cm;
776 const double IronWallXPos = 0.0*
cm;
777 const double IronWallYPos = -28.0*
cm;
778 const double IronWallZPos = -181.0*
cm;
780 const double IronWallSlitXDim = 5.0*
cm;
781 const double IronWallSlitYDim = 40.0*
cm;
782 const double IronWallSlitZDim = 20.0*
cm;
784 const double IronWallSlitXPos = 0.0*
cm;
785 const double IronWallSlitYPos = 21.0*
cm;
786 const double IronWallSlitZPos = 0.0*
cm;
788 std::string IronWallName = baseName +
"::IronWall";
789 const GeoShape* WallShape =
790 new GeoBox(IronWallXDim,IronWallYDim,IronWallZDim);
791 const GeoShape* SlitShape =
792 new GeoBox(IronWallSlitXDim,IronWallSlitYDim,IronWallSlitZDim);
795 SlitOffset(IronWallSlitXPos,IronWallSlitYPos,IronWallSlitZPos);
797 const GeoShape & IronWallShape =
798 (WallShape->subtract(*SlitShape<<SlitOffset));
799 GeoLogVol* IronWallLogical =
800 new GeoLogVol(IronWallName, &IronWallShape, Iron);
801 GeoIntrusivePtr<GeoPhysVol> IronWallPhysical =
new GeoPhysVol(IronWallLogical);
804 add(
new GeoTransform(Translate3D(
807 trans-IronWallZPos)));
813 const double ConSizeX = 130.0*
cm;
814 const double ConSizeY = 120.0*
cm;
815 const double ConSizeZ = 79.3*
cm;
817 const double ConAXPos = 0.0*
cm;
818 const double ConAYPos = 0.0*
cm;
819 const double ConAZPos = 518.0*
cm;
821 const double ConBXPos = 0.0*
cm;
822 const double ConBYPos = 0.0*
cm;
823 const double ConBZPos = 360.0*
cm;
824 std::string ConcreteWallAName = baseName +
"::ConcreteWallA";
825 const GeoBox* ConAShape =
new GeoBox(ConSizeX, ConSizeY, ConSizeZ);
826 const GeoLogVol* ConALogical =
827 new GeoLogVol(ConcreteWallAName,ConAShape,Concrete);
828 GeoIntrusivePtr<GeoPhysVol> ConAPhysical =
new GeoPhysVol(ConALogical);
831 add(
new GeoTransform(Translate3D(ConAXPos,
838 std::string ConcreteWallBName = baseName +
"::ConcreteWallB";
839 const GeoBox* ConBShape =
new GeoBox(ConSizeX, ConSizeY, ConSizeZ);
840 const GeoLogVol* ConBLogical =
841 new GeoLogVol(ConcreteWallBName, ConBShape, Concrete);
842 GeoIntrusivePtr<GeoPhysVol> ConBPhysical =
new GeoPhysVol(ConBLogical);
852 for(
unsigned int i=0;
i < NH6EP;
i++)
855 <<
"The beamline material "
857 <<
" is located at: "