396 double TCL_BOX_halflength, TCL_BOX_halfwidth, TCL_BOX_halfheight, TCL_BOX_sideThickness, TCL_BOX_topBottomThickness, TCL_BOX_endThickness, TCL_TUBE_halflength, TCL_TUBE_halfapperture, TCL_TUBE_thickness;
403 TCL_BOX_halfheight = 60+TCL_BOX_topBottomThickness;
409 double TCL_CuBlock_halflength, TCL_CuBlock_halfwidth, TCL_CuBlock_halfheight, TCL_CuBlockCylCut_zDepth, TCL_CuBlockCylCut_angle, TCL_CuBlockCylCut_cylR, TCL_CuBlockCylCut_cylHalflength, TCL_CuBlockCylCut_xDepth, TCL_CuBlockCylCut_xShift;
418 TCL_CuBlockCylCut_cylHalflength = TCL_CuBlockCylCut_zDepth/
cos(TCL_CuBlockCylCut_angle);
419 TCL_CuBlockCylCut_xDepth = TCL_CuBlockCylCut_zDepth*
tan(TCL_CuBlockCylCut_angle);
420 TCL_CuBlockCylCut_xShift = -TCL_CuBlock_halfwidth-TCL_CuBlockCylCut_cylR/
cos(TCL_CuBlockCylCut_angle)+TCL_CuBlockCylCut_xDepth;
422 double TCL_CuBeam_halflength, TCL_CuBeam_halfwidth, TCL_CuBeam_halfheight, TCL_Cooling_width;
436 const GeoBox * boxIn =
new GeoBox(TCL_BOX_halfwidth-TCL_BOX_sideThickness, TCL_BOX_halfheight-TCL_BOX_topBottomThickness, TCL_BOX_halflength-TCL_BOX_endThickness);
437 const GeoTube * tubeIn =
new GeoTube(0, TCL_TUBE_halfapperture, TCL_TUBE_halflength+0.5*TCL_BOX_endThickness);
438 GeoTrf::Transform3D moveTubeIn = GeoTrf::Translate3D(0, 0, TCL_BOX_halflength+TCL_TUBE_halflength-0.5*TCL_BOX_endThickness);
439 const GeoShapeShift& tubeIn1 = (*tubeIn)<<moveTubeIn;
440 const GeoShapeShift& tubeIn2 = (*tubeIn)<<moveTubeIn<<rotateY180;
441 const GeoShapeUnion * innerVac0 =
new GeoShapeUnion(boxIn,&tubeIn1);
442 GeoShapeUnion * innerVac =
new GeoShapeUnion(innerVac0,&tubeIn2);
445 const GeoBox * boxFull =
new GeoBox(TCL_BOX_halfwidth, TCL_BOX_halfheight, TCL_BOX_halflength);
446 const GeoTube * tubeOut =
new GeoTube(TCL_TUBE_halfapperture, TCL_TUBE_halfapperture+TCL_TUBE_thickness, TCL_TUBE_halflength);
447 GeoTrf::Transform3D moveTubeOut = GeoTrf::Translate3D(0, 0, TCL_BOX_halflength+TCL_TUBE_halflength);
448 const GeoShapeShift& tubeOut1 = (*tubeOut)<<moveTubeOut;
449 const GeoShapeShift& tubeOut2 = (*tubeOut)<<moveTubeOut<<rotateY180;
450 const GeoShapeUnion * outerSteelFull0 =
new GeoShapeUnion(boxFull,&tubeOut1);
451 const GeoShapeUnion * outerSteelFull =
new GeoShapeUnion(outerSteelFull0,&tubeOut2);
452 GeoShapeSubtraction * outerSteel =
new GeoShapeSubtraction(outerSteelFull,innerVac);
455 const GeoBox * cuBoxFull =
new GeoBox(TCL_CuBlock_halfwidth, TCL_CuBlock_halfheight, TCL_CuBlock_halflength);
456 const GeoTube * cylCut0 =
new GeoTube(0, TCL_CuBlockCylCut_cylR, TCL_CuBlockCylCut_cylHalflength);
458 GeoTrf::Transform3D moveCylCut = GeoTrf::Translate3D(TCL_CuBlockCylCut_xShift, 0, TCL_CuBlock_halflength);
459 const GeoShapeShift& cylCut1 = (*cylCut0)<<rotateCylCut<<moveCylCut;
460 const GeoShapeShift& cylCut2 = (*cylCut0)<<rotateCylCut<<moveCylCut<<rotateX180;
461 const GeoShapeSubtraction * cuBox0 =
new GeoShapeSubtraction(cuBoxFull, &cylCut1);
462 const GeoShapeSubtraction * cuBox1 =
new GeoShapeSubtraction(cuBox0, &cylCut2);
463 GeoTrf::Transform3D moveCuBoxI = GeoTrf::Translate3D(TCLJawDistI+TCL_CuBlock_halfwidth, 0, 0);
464 const GeoShapeShift& cuBoxI = (*cuBox1)<<moveCuBoxI;
465 GeoTrf::Transform3D moveCuBoxO = GeoTrf::Translate3D(+TCLJawDistO+TCL_CuBlock_halfwidth, 0, 0);
466 const GeoShapeShift& cuBoxO = (*cuBox1)<<moveCuBoxO<<rotateY180;
469 const GeoBox * cuBeamFull =
new GeoBox(TCL_CuBeam_halfwidth, TCL_CuBeam_halfheight, TCL_CuBeam_halflength);
470 GeoTrf::Transform3D moveCuBeamI = GeoTrf::Translate3D(TCLJawDistI+2*TCL_CuBlock_halfwidth+TCL_Cooling_width+TCL_CuBeam_halfwidth, 0, 0);
471 const GeoShapeShift& cuBeamI = (*cuBeamFull)<<moveCuBeamI;
472 GeoTrf::Transform3D moveCuBeamO = GeoTrf::Translate3D(+TCLJawDistO+2*TCL_CuBlock_halfwidth+TCL_Cooling_width+TCL_CuBeam_halfwidth, 0, 0);
473 const GeoShapeShift& cuBeamO = (*cuBeamFull)<<moveCuBeamO<<rotateY180;
476 const GeoBox * waterBox =
new GeoBox(0.5*TCL_Cooling_width, TCL_CuBlock_halfheight, TCL_CuBlock_halflength);
477 GeoTrf::Transform3D moveWaterBoxI = GeoTrf::Translate3D(TCLJawDistI+2*TCL_CuBlock_halfwidth+0.5*TCL_Cooling_width, 0, 0);
478 const GeoShapeShift& waterBoxI = (*waterBox)<<moveWaterBoxI;
479 GeoTrf::Transform3D moveWaterBoxO = GeoTrf::Translate3D(+TCLJawDistO+2*TCL_CuBlock_halfwidth+0.5*TCL_Cooling_width, 0, 0);
480 const GeoShapeShift& waterBoxO = (*waterBox)<<moveWaterBoxO<<rotateY180;
484 const GeoLogVol *ringLog =
new GeoLogVol(
name+
"Log", outerSteel,
m_MapMaterials[std::string(
"Steel")]);
485 const GeoLogVol *ringLog2 =
new GeoLogVol(
name+
"Fill", innerVac,
m_MapMaterials[std::string(
"std::Vacuum")]);
487 GeoPhysVol *ringPhys =
new GeoPhysVol(ringLog);
488 GeoPhysVol *ringPhys2 =
new GeoPhysVol(ringLog2);
490 const GeoLogVol *cuBoxLogI =
new GeoLogVol(
name+
"CuBoxI", &cuBoxI,
m_MapMaterials[std::string(tungstenInsteadOfCopper ?
"Tungsten" :
"Copper")]);
491 GeoPhysVol *cuBoxPhysI =
new GeoPhysVol(cuBoxLogI);
492 const GeoLogVol *cuBoxLogO =
new GeoLogVol(
name+
"CuBoxO", &cuBoxO,
m_MapMaterials[std::string(tungstenInsteadOfCopper ?
"Tungsten" :
"Copper")]);
493 GeoPhysVol *cuBoxPhysO =
new GeoPhysVol(cuBoxLogO);
495 const GeoLogVol *cuBeamLogI =
new GeoLogVol(
name+
"CuBeamI", &cuBeamI,
m_MapMaterials[std::string(
"GlidCopAL15")]);
496 GeoPhysVol *cuBeamPhysI =
new GeoPhysVol(cuBeamLogI);
497 const GeoLogVol *cuBeamLogO =
new GeoLogVol(
name+
"CuBeamO", &cuBeamO,
m_MapMaterials[std::string(
"GlidCopAL15")]);
498 GeoPhysVol *cuBeamPhysO =
new GeoPhysVol(cuBeamLogO);
500 const GeoLogVol *waterBoxLogI =
new GeoLogVol(
name+
"waterBoxI", &waterBoxI,
m_MapMaterials[std::string(
"water")]);
501 GeoPhysVol *waterBoxPhysI =
new GeoPhysVol(waterBoxLogI);
502 const GeoLogVol *waterBoxLogO =
new GeoLogVol(
name+
"waterBoxO", &waterBoxO,
m_MapMaterials[std::string(
"water")]);
503 GeoPhysVol *waterBoxPhysO =
new GeoPhysVol(waterBoxLogO);
506 GeoTransform *move =
new GeoTransform(GeoTrf::Translate3D(
x,
y,
z));
509 GeoNameTag *
tag =
new GeoNameTag(
name);
512 fwrPhys->add(ringPhys);
516 tag =
new GeoNameTag(
name+
"Fill");
518 fwrPhys->add(ringPhys2);
521 ringPhys2->add(cuBoxPhysI);
522 ringPhys2->add(cuBoxPhysO);
524 ringPhys2->add(cuBeamPhysI);
525 ringPhys2->add(cuBeamPhysO);
527 ringPhys2->add(waterBoxPhysI);
528 ringPhys2->add(waterBoxPhysO);