868 std::string
name =
"LAr::Barrel::SignalFT::";
877 GeoShape* wflange =
new GeoTube(0., wflange_R, wflange_height/2);
878 GeoLogVol* wflangeLV =
new GeoLogVol(
name +
"WarmFlange", wflange, wflange_mat);
879 GeoPhysVol* wflangePV =
new GeoPhysVol(wflangeLV);
886 const double bellow_Rinner = bellow_Router - bellow_wall;
887 GeoShape* bellow =
new GeoTube(bellow_Rinner, bellow_Router, bellow_height/2);
888 GeoLogVol* bellowLV =
new GeoLogVol(
name +
"Bellow", bellow, bellow_mat);
889 GeoPhysVol* bellowPV =
new GeoPhysVol(bellowLV);
893 GeoShape* vcables =
new GeoTube(0., bellow_Rinner, bellow_height/2);
894 GeoLogVol* vcablesLV =
new GeoLogVol(
name +
"VacuumCables", vcables, vcables_mat);
895 GeoPhysVol* vcablesPV =
new GeoPhysVol(vcablesLV);
900 GeoShape* cflange =
new GeoTube(0., cflange_Router, cflange_height/2);
901 GeoLogVol* cflangeLV =
new GeoLogVol(
name +
"ColdFlange", cflange, cflange_mat);
902 GeoPhysVol* cflangePV =
new GeoPhysVol(cflangeLV);
904 const double coldbox1_Router = cflange_Router;
911 const double barrel_dist_from_outer_warm_wall_to_inner_cold_wall =
913 const double coldbox3_height =
914 barrel_dist_from_outer_warm_wall_to_inner_cold_wall
915 - bellow_height - coldbox1_height - coldbox2_height;
917 const GeoMaterial* coldbox_mat = iron;
918 GeoShape* coldbox1 =
new GeoTube(coldbox1_Router - coldbox1_wall, coldbox1_Router, coldbox1_height/2);
919 GeoShape* coldbox11 =
new GeoTube(0., coldbox1_Router, coldbox1_height/2);
920 GeoLogVol* coldbox1LV =
new GeoLogVol(
name +
"ColdBox1", coldbox1, coldbox_mat);
921 GeoPhysVol* coldbox1PV =
new GeoPhysVol(coldbox1LV);
922 GeoShape* coldbox21 =
new GeoTube(0., coldbox1_Router, coldbox2_height/2);
923 GeoShape* coldbox22 =
new GeoTube(0., hole_r, coldbox2_height);
924 const GeoShape& coldbox2 = coldbox21->subtract((*coldbox22) << GeoTrf::TranslateY3D(hole_shift));
925 GeoLogVol* coldbox2LV =
new GeoLogVol(
name +
"ColdBox2", &coldbox2, coldbox_mat);
926 GeoPhysVol* coldbox2PV =
new GeoPhysVol(coldbox2LV);
927 GeoShape* coldbox3 =
new GeoTube(hole_r, coldbox3_Router, coldbox3_height/2);
928 GeoShape* coldbox31 =
new GeoTube(0., coldbox3_Router, coldbox3_height/2);
929 GeoLogVol* coldbox3LV =
new GeoLogVol(
name +
"ColdBox3", coldbox3, coldbox_mat);
930 GeoPhysVol* coldbox3PV =
new GeoPhysVol(coldbox3LV);
932 GeoTrf::TranslateZ3D bellow_pos(-wflange_height/2 - bellow_height/2);
933 GeoTrf::TranslateZ3D cflange_pos(-wflange_height/2 - bellow_height - cflange_height/2);
934 GeoTrf::TranslateZ3D coldbox1_pos(-wflange_height/2 - bellow_height - cflange_height - coldbox1_height/2);
935 GeoTrf::TranslateZ3D coldbox2_pos(-wflange_height/2 - bellow_height - cflange_height - coldbox1_height - coldbox2_height/2);
936 GeoTrf::Translate3D coldbox2hole_pos(
938 -wflange_height/2 - bellow_height - cflange_height - coldbox1_height - coldbox2_height/2
940 GeoTrf::Translate3D coldbox3_pos(
942 -wflange_height/2 - bellow_height - cflange_height - coldbox1_height - coldbox2_height - coldbox3_height/2
945 const GeoShape& FTenvelope = wflange->add(
946 (*bellow) << bellow_pos
948 (*cflange) << cflange_pos
950 (*coldbox11) << coldbox1_pos
952 (*coldbox21) << coldbox2_pos
954 (*coldbox31) << coldbox3_pos
957 GeoLogVol* FTLV =
new GeoLogVol(
name +
"Envelope",
961 GeoPhysVol* FTPV =
new GeoPhysVol(FTLV);
963 FTPV->add(wflangePV);
964 GeoTransform *bellow_trf =
new GeoTransform(bellow_pos);
965 FTPV->add(bellow_trf);
967 FTPV->add(bellow_trf);
968 FTPV->add(vcablesPV);
969 GeoTransform *cflange_trf =
new GeoTransform(cflange_pos);
970 FTPV->add(cflange_trf);
971 FTPV->add(cflangePV);
972 GeoTransform *coldbox1_trf =
new GeoTransform(coldbox1_pos);
973 FTPV->add(coldbox1_trf);
974 FTPV->add(coldbox1PV);
975 GeoTransform *coldbox2_trf =
new GeoTransform(coldbox2_pos);
976 FTPV->add(coldbox2_trf);
977 FTPV->add(coldbox2PV);
978 GeoTransform *coldbox3_trf =
new GeoTransform(coldbox3_pos);
979 FTPV->add(coldbox3_trf);
980 FTPV->add(coldbox3PV);
983 GeoShape* lar1 =
new GeoTube(0., coldbox1_Router - coldbox1_wall, coldbox1_height/2);
984 GeoShape* lar2 =
new GeoTube(0., hole_r, coldbox1_height);
985 const GeoShape& lar = lar1->subtract((*lar2) << GeoTrf::TranslateY3D(hole_shift));
986 GeoLogVol* larLV =
new GeoLogVol(
name +
"LAr", &lar, lar_mat);
987 GeoPhysVol* larPV =
new GeoPhysVol(larLV);
988 FTPV->add(coldbox1_trf);
993 const double pth = (coldbox1_height + coldbox2_height + coldbox3_height) / 2;
994 GeoTransform *pigtail_trf =
new GeoTransform(
995 GeoTrf::Translate3D(0, hole_shift,
996 -wflange_height/2 - bellow_height - cflange_height - pth
998 GeoShape* pigtail =
new GeoTube(0., hole_r, pth);
999 GeoLogVol* pigtailLV =
new GeoLogVol(
name +
"Pigtail", pigtail, pigtail_mat);
1000 GeoPhysVol* pigtailPV =
new GeoPhysVol(pigtailLV);
1001 FTPV->add(pigtail_trf);
1002 FTPV->add(pigtailPV);
1008 GeoShape* ocable =
new GeoTube(0., ocable_R, ocable_len / 2);
1009 GeoLogVol* ocableLV =
new GeoLogVol(
"LAr::Barrel::FTCables", ocable, ocable_mat);
1010 GeoPhysVol* ocablePV =
new GeoPhysVol(ocableLV);
1015 const double r2 =
r0 + wflange_height/2 + ocable_len/2;
1017 const int NCrates = 16;
1020 auto put1 = [&envelope](GeoPhysVol *
object,
double r,
double phi,
double z)
1022 envelope->add(
new GeoTransform(
1030 envelope->add(
object);
1033 auto put = [&put1, &FTPV, &ocablePV,
r0,
r2](
double phi,
double z)
1036 put1(ocablePV, r2,
phi,
z);
1039 for(
int i = 0;
i < 16; ++
i){
1041 put(
phi - dphi, z_pos);
1042 put(
phi + dphi, z_pos);
1043 put(
phi - dphi, -z_pos);
1044 put(
phi + dphi, -z_pos);