327 mHitsPerSectorCollection[
i]->clear();
338 ConstructTPCGeometry();
341void Detector::CreateMaterials()
351 const auto& gasParam = ParameterGas::Instance();
365 const Double_t pressure = gasParam.Pressure;
366 const Double_t temperature = gasParam.Temperature + 273.15;
369 const Double_t
t1 = 293.15;
370 const Double_t
p1 = 1013.25;
373 Double_t ptCorr = 1.;
374 if (TMath::Abs(temperature - 293.15) > 10. || TMath::Abs(pressure - 1000.) > 200.) {
377 ptCorr = (pressure *
t1) / (
p1 * temperature);
379 LOG(info) <<
"Setting gas density correction to: " << ptCorr;
429 TString names[6] = {
"Ne",
"Ar",
"CO2",
"N",
"CF4",
"CH4"};
434 Float_t comp[6] = {90. / 105., 0., 10. / 105., 5. / 105., 0., 0.};
465 wmol[3] = 2. * 14.0067;
470 for (Int_t
i = 0;
i < 6;
i++) {
471 wtot += *(comp +
i) * wmol[
i];
473 wmat[0] = comp[0] * amat[0] / wtot;
474 wmat[1] = comp[1] * amat[1] / wtot;
475 wmat[2] = (comp[2] * amat[2] + comp[4] * amat[2] + comp[5] * amat[2]) / wtot;
476 wmat[3] = comp[2] * amat[3] * 2. / wtot;
477 wmat[4] = comp[3] * amat[4] * 2. / wtot;
478 wmat[5] = comp[4] * amat[5] * 4. / wtot;
479 wmat[6] = comp[5] * amat[6] * 4. / wtot;
483 Float_t dens[6] = {0.839e-3, 1.661e-3, 1.842e-3, 1.165e-3, 3.466e-3, 0.668e-3};
486 for (Int_t
i = 0;
i < 6;
i++) {
487 density += comp[
i] * dens[
i];
493 for (Int_t
i = 0;
i < 6;
i++) {
502 TString gname1, gname2, gname3;
503 gname1 = gname +
"-1";
504 gname2 = gname +
"-2";
505 gname3 = gname +
"-3";
509 Float_t amat1[6], zmat1[6], wmat1[6];
511 for (Int_t
i = 0;
i < 7;
i++) {
513 zmat1[cnt] = zmat[
i];
514 amat1[cnt] = amat[
i];
515 wmat1[cnt] = wmat[
i];
918 o2::base::Detector::Medium(kAir,
"Air", 11, 0, iSXFLD, sXMGMX, 10., 999., .1, .01, .1);
919 o2::base::Detector::Medium(kDriftGas1,
"DriftGas1", 12, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
920 o2::base::Detector::Medium(kDriftGas2,
"DriftGas2", 13, 1, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
921 o2::base::Detector::Medium(kCO2,
"CO2", 10, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
922 o2::base::Detector::Medium(kDriftGas3,
"DriftGas3", 40, 1, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
927 o2::base::Detector::Medium(kAl,
"Al", 23, 0, iSXFLD, sXMGMX, 10., 999., .1, .0005, .001);
928 o2::base::Detector::Medium(kKevlar,
"Kevlar", 14, 0, iSXFLD, sXMGMX, 10., 999., .1, .0005, .001);
929 o2::base::Detector::Medium(kNomex,
"Nomex", 15, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
930 o2::base::Detector::Medium(kMakrolon,
"Makrolon", 16, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
931 o2::base::Detector::Medium(kMylar,
"Mylar", 18, 0, iSXFLD, sXMGMX, 10., 999., .1, .0005, .001);
932 o2::base::Detector::Medium(kTedlar,
"Tedlar", 17, 0, iSXFLD, sXMGMX, 10., 999., .1, .0005, .001);
934 o2::base::Detector::Medium(kPrepreg1,
"Prepreg1", 19, 0, iSXFLD, sXMGMX, 10., 999., .1, .0005, .001);
935 o2::base::Detector::Medium(kPrepreg2,
"Prepreg2", 20, 0, iSXFLD, sXMGMX, 10., 999., .1, .0005, .001);
936 o2::base::Detector::Medium(kPrepreg3,
"Prepreg3", 21, 0, iSXFLD, sXMGMX, 10., 999., .1, .0005, .001);
937 o2::base::Detector::Medium(kEpoxy,
"Epoxy", 26, 0, iSXFLD, sXMGMX, 10., 999., .1, .0005, .001);
939 o2::base::Detector::Medium(kCu,
"Cu", 25, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
940 o2::base::Detector::Medium(kSi,
"Si", 24, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
941 o2::base::Detector::Medium(kG10,
"G10", 22, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
942 o2::base::Detector::Medium(kPlexiglas,
"Plexiglas", 27, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
943 o2::base::Detector::Medium(kSteel,
"Steel", 29, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
944 o2::base::Detector::Medium(kPeek,
"Peek", 30, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
945 o2::base::Detector::Medium(kAlumina,
"Alumina", 31, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
946 o2::base::Detector::Medium(kWater,
"Water", 32, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
947 o2::base::Detector::Medium(kBrass,
"Brass", 33, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
948 o2::base::Detector::Medium(kEpoxyfm,
"Epoxyfm", 34, 0, iSXFLD, sXMGMX, 10., 999., .1, .0005, .001);
949 o2::base::Detector::Medium(kEpoxy1,
"Epoxy1", 35, 0, iSXFLD, sXMGMX, 10., 999., .1, .0005, .001);
950 o2::base::Detector::Medium(kAlumina1,
"Alumina1", 36, 0, iSXFLD, sXMGMX, 10., 999., .1, .001, .001);
953void Detector::ConstructTPCGeometry()
987 auto* tpc =
new TGeoPcon(0., 360., 30);
989 tpc->DefineSection(0, -289.6, 77., 278.);
990 tpc->DefineSection(1, -262.1, 77., 278.);
992 tpc->DefineSection(2, -262.1, 83.1, 278.);
993 tpc->DefineSection(3, -260., 83.1, 278.);
995 tpc->DefineSection(4, -260., 70., 278.);
996 tpc->DefineSection(5, -259.6, 70., 278.);
998 tpc->DefineSection(6, -259.6, 68.1, 278.);
999 tpc->DefineSection(7, -253.6, 68.1, 278.);
1001 tpc->DefineSection(8, -253.6, 67.88, 278.);
1002 tpc->DefineSection(9, -74.0, 60.68, 278.);
1004 tpc->DefineSection(10, -74.0, 60.1, 278.);
1005 tpc->DefineSection(11, -73.3, 60.1, 278.);
1007 tpc->DefineSection(12, -73.3, 56.9, 278.);
1008 tpc->DefineSection(13, -68.5, 56.9, 278.);
1010 tpc->DefineSection(14, -68.5, 60., 278.);
1011 tpc->DefineSection(15, -64.7, 60., 278.);
1013 tpc->DefineSection(16, -64.7, 56.9, 278.);
1014 tpc->DefineSection(17, 73.3, 56.9, 278.);
1016 tpc->DefineSection(18, 73.3, 60.1, 278.);
1017 tpc->DefineSection(19, 74.0, 60.1, 278.);
1019 tpc->DefineSection(20, 74.0, 60.68, 278.);
1020 tpc->DefineSection(21, 253.6, 65.38, 278.);
1022 tpc->DefineSection(22, 253.6, 65.6, 278.);
1023 tpc->DefineSection(23, 259.6, 65.6, 278.);
1025 tpc->DefineSection(24, 259.6, 70.0, 278.);
1026 tpc->DefineSection(25, 260., 70.0, 278.);
1028 tpc->DefineSection(26, 260., 83.1, 278.);
1029 tpc->DefineSection(27, 262.1, 83.1, 278.);
1031 tpc->DefineSection(28, 262.1, 77., 278);
1032 tpc->DefineSection(29, 289.6, 77., 278.);
1034 TGeoMedium*
m1 = gGeoManager->GetMedium(
"TPC_Air");
1035 auto*
v1 =
new TGeoVolume(
"TPC_M", tpc, m1);
1040 auto* dvol =
new TGeoPcon(0., 360., 6);
1041 dvol->DefineSection(0, -260., 74.5, 264.4);
1042 dvol->DefineSection(1, -253.6, 74.5, 264.4);
1044 dvol->DefineSection(2, -253.6, 76.6774, 258.);
1045 dvol->DefineSection(3, 253.6, 76.6774, 258.);
1047 dvol->DefineSection(4, 253.6, 74.5, 264.4);
1048 dvol->DefineSection(5, 260., 74.5, 264.4);
1050 TGeoMedium*
m5 = gGeoManager->GetMedium(
"TPC_DriftGas2");
1051 auto* v9 =
new TGeoVolume(
"TPC_Drift", dvol, m5);
1057 auto* tpco =
new TGeoPcon(0., 360., 6);
1059 tpco->DefineSection(0, -256.6, 264.8, 278.);
1060 tpco->DefineSection(1, -253.6, 264.8, 278.);
1062 tpco->DefineSection(2, -253.6, 258., 278.);
1063 tpco->DefineSection(3, 250.6, 258., 278.);
1065 tpco->DefineSection(4, 250.6, 258., 275.5);
1066 tpco->DefineSection(5, 253.6, 258., 275.5);
1068 TGeoMedium*
m2 = gGeoManager->GetMedium(
"TPC_CO2");
1069 auto*
v2 =
new TGeoVolume(
"TPC_OI", tpco, m2);
1071 TGeoRotation* segrot;
1075 auto* tocv =
new TGeoPcon(0., 360., 6);
1077 tocv->DefineSection(0, -256.6, 264.8, 278.);
1078 tocv->DefineSection(1, -253.6, 264.8, 278.);
1080 tocv->DefineSection(2, -253.6, 274.8124, 278.);
1081 tocv->DefineSection(3, 247.6, 274.8124, 278.);
1083 tocv->DefineSection(4, 247.6, 270.4, 278.);
1084 tocv->DefineSection(5, 250.6, 270.4, 278.);
1086 TGeoMedium*
m3 = gGeoManager->GetMedium(
"TPC_Al");
1087 auto*
v3 =
new TGeoVolume(
"TPC_OCV", tocv, m3);
1089 auto* to1 =
new TGeoTubeSeg(274.8174, 277.995, 252.1, 0., 59.9);
1090 auto* to2 =
new TGeoTubeSeg(274.8274, 277.985, 252.1, 0., 59.9);
1091 auto* to3 =
new TGeoTubeSeg(274.8312, 277.9812, 252.1, 0., 59.9);
1092 auto* to4 =
new TGeoTubeSeg(274.9062, 277.9062, 252.1, 0., 59.9);
1093 auto* tog5 =
new TGeoTubeSeg(274.8174, 277.995, 252.1, 59.9, 60.);
1095 TGeoMedium* sm1 = gGeoManager->GetMedium(
"TPC_Epoxy");
1096 TGeoMedium* sm2 = gGeoManager->GetMedium(
"TPC_Tedlar");
1097 TGeoMedium* sm3 = gGeoManager->GetMedium(
"TPC_Prepreg2");
1098 TGeoMedium* sm4 = gGeoManager->GetMedium(
"TPC_Nomex");
1100 TGeoMedium* smep = gGeoManager->GetMedium(
"TPC_Epoxy1");
1102 auto* tov1 =
new TGeoVolume(
"TPC_OCV1", to1, sm1);
1103 auto* tov2 =
new TGeoVolume(
"TPC_OCV2", to2, sm2);
1104 auto* tov3 =
new TGeoVolume(
"TPC_OCV3", to3, sm3);
1105 auto* tov4 =
new TGeoVolume(
"TPC_OCV4", to4, sm4);
1106 auto* togv5 =
new TGeoVolume(
"TPC_OCVG5", tog5, sm1);
1108 TGeoMedium* mhs = gGeoManager->GetMedium(
"TPC_Steel");
1109 TGeoMedium* m12 = gGeoManager->GetMedium(
"TPC_Water");
1115 auto* tofc =
new TGeoPcon(0., 360., 6);
1117 tofc->DefineSection(0, -253.6, 258., 269.6);
1118 tofc->DefineSection(1, -250.6, 258., 269.6);
1120 tofc->DefineSection(2, -250.6, 258., 260.0676);
1121 tofc->DefineSection(3, 250.6, 258., 260.0676);
1123 tofc->DefineSection(4, 250.6, 258., 275.5);
1124 tofc->DefineSection(5, 253.6, 258., 275.5);
1126 auto* v4 =
new TGeoVolume(
"TPC_TOFC", tofc, m3);
1128 auto* tf1 =
new TGeoTubeSeg(258.0, 260.0676, 252.1, 0., 59.9);
1129 auto* tf2 =
new TGeoTubeSeg(258.0038, 260.0638, 252.1, 0., 59.9);
1130 auto* tf3 =
new TGeoTubeSeg(258.0338, 260.0338, 252.1, 0., 59.9);
1131 auto* tfg4 =
new TGeoTubeSeg(258.0, 260.0676, 252.1, 59.9, 60.);
1133 TGeoMedium* sm5 = gGeoManager->GetMedium(
"TPC_Prepreg3");
1135 auto* tf1v =
new TGeoVolume(
"TPC_OFC1", tf1, sm2);
1136 auto* tf2v =
new TGeoVolume(
"TPC_OFC2", tf2, sm5);
1137 auto* tf3v =
new TGeoVolume(
"TPC_OFC3", tf3, sm4);
1138 auto* tfg4v =
new TGeoVolume(
"TPC_OFCG4", tfg4, smep);
1142 tov1->AddNode(tov2, 1);
1143 tov2->AddNode(tov3, 1);
1144 tov3->AddNode(tov4, 1);
1146 tf1v->AddNode(tf2v, 1);
1147 tf2v->AddNode(tf3v, 1);
1149 auto* t200 =
new TGeoVolumeAssembly(
"TPC_OCVSEG");
1150 auto* t300 =
new TGeoVolumeAssembly(
"TPC_OFCSEG");
1155 t200->AddNode(tov1, 1);
1156 t200->AddNode(togv5, 1);
1157 t300->AddNode(tf1v, 1);
1158 t300->AddNode(tfg4v, 1);
1160 segrot =
new TGeoRotation();
1161 segrot->RotateZ(60.);
1162 t200->AddNode(tov1, 2, segrot);
1163 t200->AddNode(togv5, 2, segrot);
1164 t300->AddNode(tf1v, 2, segrot);
1165 t300->AddNode(tfg4v, 2, segrot);
1167 segrot =
new TGeoRotation();
1168 segrot->RotateZ(120.);
1169 t200->AddNode(tov1, 3, segrot);
1170 t200->AddNode(togv5, 3, segrot);
1171 t300->AddNode(tf1v, 3, segrot);
1172 t300->AddNode(tfg4v, 3, segrot);
1174 segrot =
new TGeoRotation();
1175 segrot->RotateZ(180.);
1176 t200->AddNode(tov1, 4, segrot);
1177 t200->AddNode(togv5, 4, segrot);
1178 t300->AddNode(tf1v, 4, segrot);
1179 t300->AddNode(tfg4v, 4, segrot);
1181 segrot =
new TGeoRotation();
1182 segrot->RotateZ(240.);
1183 t200->AddNode(tov1, 5, segrot);
1184 t200->AddNode(togv5, 5, segrot);
1185 t300->AddNode(tf1v, 5, segrot);
1186 t300->AddNode(tfg4v, 5, segrot);
1188 segrot =
new TGeoRotation();
1189 segrot->RotateZ(300.);
1190 t200->AddNode(tov1, 6, segrot);
1191 t200->AddNode(togv5, 6, segrot);
1192 t300->AddNode(tf1v, 6, segrot);
1193 t300->AddNode(tfg4v, 6, segrot);
1195 v3->AddNode(t200, 1,
new TGeoTranslation(0., 0., -1.5));
1196 v4->AddNode(t300, 1);
1205 auto* ogri =
new TGeoTube(257.985, 258., 0.6);
1206 auto* ogro =
new TGeoTube(260.0676, 260.0826, 0.6);
1208 auto* ogriv =
new TGeoVolume(
"TPC_OGRI", ogri, m3);
1209 auto* ogrov =
new TGeoVolume(
"TPC_OGRO", ogro, m3);
1211 for (Int_t
i = 0;
i < 24;
i++) {
1212 v9->AddNode(ogriv, (
i + 1),
new TGeoTranslation(0., 0., (
i + 1) * 10));
1213 v9->AddNode(ogriv, (
i + 25),
new TGeoTranslation(0., 0., -(
i + 1) * 10));
1214 v2->AddNode(ogrov, (
i + 1),
new TGeoTranslation(0., 0., (
i + 1) * 10));
1215 v2->AddNode(ogrov, (
i + 25),
new TGeoTranslation(0., 0., -(
i + 1) * 10));
1222 auto* tpci =
new TGeoPcon(0., 360., 4);
1224 tpci->DefineSection(0, -253.6, 68.4, 76.6774);
1225 tpci->DefineSection(1, -74.0, 61.2, 76.6774);
1227 tpci->DefineSection(2, 74.0, 61.2, 76.6774);
1229 tpci->DefineSection(3, 253.6, 65.9, 76.6774);
1231 auto* v5 =
new TGeoVolume(
"TPC_INI", tpci, m2);
1235 auto* tif1 =
new TGeoTube(69.9, 76.6774, 1.5);
1236 auto* v6 =
new TGeoVolume(
"TPC_IFC1", tif1, m3);
1241 auto* tcms =
new TGeoPcon(0., 360., 10);
1243 tcms->DefineSection(0, -259.1, 68.1, 74.2);
1244 tcms->DefineSection(1, -253.6, 68.1, 74.2);
1246 tcms->DefineSection(2, -253.6, 68.1, 68.4);
1247 tcms->DefineSection(3, -74.0, 60.9, 61.2);
1249 tcms->DefineSection(4, -74.0, 60.1, 61.2);
1250 tcms->DefineSection(5, -73.3, 60.1, 61.2);
1252 tcms->DefineSection(6, -73.3, 56.9, 61.2);
1253 tcms->DefineSection(7, -73.0, 56.9, 61.2);
1255 tcms->DefineSection(8, -73.0, 56.9, 58.8);
1256 tcms->DefineSection(9, -71.3, 56.9, 58.8);
1258 auto* v7 =
new TGeoVolume(
"TPC_ICVM", tcms, m3);
1263 auto* thsm =
new TGeoCone(89.8, 67.88, 68.1, 60.68, 60.9);
1264 auto* thsmw =
new TGeoCone(89.8, 67.94, 68.04, 60.74, 60.84);
1265 auto* hvsm =
new TGeoVolume(
"TPC_HSM", thsm, mhs);
1266 auto* hvsmw =
new TGeoVolume(
"TPC_HSMW", thsmw, m12);
1268 hvsm->AddNode(hvsmw, 1);
1272 auto* tcss =
new TGeoPcon(0., 360., 10);
1274 tcss->DefineSection(0, 71.3, 56.9, 58.8);
1275 tcss->DefineSection(1, 73.0, 56.9, 58.8);
1277 tcss->DefineSection(2, 73.0, 56.9, 61.2);
1278 tcss->DefineSection(3, 73.3, 56.9, 61.2);
1280 tcss->DefineSection(4, 73.3, 60.1, 61.2);
1281 tcss->DefineSection(5, 74.0, 60.1, 61.2);
1283 tcss->DefineSection(6, 74.0, 60.9, 61.2);
1284 tcss->DefineSection(7, 253.6, 65.6, 65.9);
1286 tcss->DefineSection(8, 253.6, 65.6, 74.2);
1287 tcss->DefineSection(9, 258.1, 65.6, 74.2);
1289 auto* v8 =
new TGeoVolume(
"TPC_ICVS", tcss, m3);
1293 auto* thss =
new TGeoCone(89.8, 60.68, 60.9, 65.38, 65.6);
1294 auto* thssw =
new TGeoCone(89.8, 60.74, 60.84, 65.44, 65.54);
1295 auto* hvss =
new TGeoVolume(
"TPC_HSS", thss, mhs);
1296 auto* hvssw =
new TGeoVolume(
"TPC_HSSW", thssw, m12);
1298 hvss->AddNode(hvssw, 1);
1304 auto*
t1 =
new TGeoTube(76.6774, 78.845, 0.75);
1305 auto* tv1 =
new TGeoVolume(
"TPC_IFC2",
t1, m3);
1310 auto* t2 =
new TGeoTubeSeg(76.6774, 78.845, 74.175, 350., 109.4);
1311 auto* t3 =
new TGeoTubeSeg(76.6812, 78.8412, 74.175, 350., 109.4);
1312 auto* t4 =
new TGeoTubeSeg(76.7312, 78.7912, 74.175, 350., 109.4);
1313 auto* t5 =
new TGeoTubeSeg(76.7612, 78.7612, 74.175, 350., 109.4);
1314 auto* tepox1 =
new TGeoTubeSeg(76.6774, 78.845, 74.175, 109.4, 110.);
1315 auto* tpr1 =
new TGeoTubeSeg(78.845, 78.885, 74.175, 109., 111.);
1318 auto* tv2 =
new TGeoVolume(
"TPC_IFC3", t2, sm2);
1319 auto* tv3 =
new TGeoVolume(
"TPC_IFC4", t3, sm3);
1320 auto* tv4 =
new TGeoVolume(
"TPC_IFC5", t4, sm5);
1321 auto* tv5 =
new TGeoVolume(
"TPC_IFC6", t5, sm4);
1322 auto* tvep1 =
new TGeoVolume(
"TPC_IFEPOX1", tepox1, smep);
1323 auto* tvpr1 =
new TGeoVolume(
"TPC_PRSTR1", tpr1, sm2);
1329 auto* t6 =
new TGeoTubeSeg(76.6774, 78.795, 5., 350., 109.4);
1330 auto* t7 =
new TGeoTubeSeg(76.6812, 78.7912, 5., 350., 109.4);
1331 auto* t8 =
new TGeoTubeSeg(76.7062, 78.7662, 5., 350., 109.4);
1332 auto* t9 =
new TGeoTubeSeg(76.7362, 78.7362, 5., 350., 109.4);
1333 auto* tepox2 =
new TGeoTubeSeg(76.6774, 78.795, 5., 109.4, 110.);
1334 auto* tpr2 =
new TGeoTubeSeg(78.795, 78.835, 5., 109., 111.);
1336 auto* tv6 =
new TGeoVolume(
"TPC_IFC7", t6, sm2);
1337 auto* tv7 =
new TGeoVolume(
"TPC_IFC8", t7, sm3);
1338 auto* tv8 =
new TGeoVolume(
"TPC_IFC9", t8, sm5);
1339 auto* tv9 =
new TGeoVolume(
"TPC_IFC10", t9, sm4);
1340 auto* tvep2 =
new TGeoVolume(
"TPC_IFEPOX2", tepox2, smep);
1341 auto* tvpr2 =
new TGeoVolume(
"TPC_PRSTR2", tpr2, sm2);
1346 auto* t10 =
new TGeoTubeSeg(76.6774, 78.785, 93.75, 350., 109.4);
1347 auto* t11 =
new TGeoTubeSeg(76.6812, 78.7812, 93.75, 350., 109.4);
1348 auto* t12 =
new TGeoTubeSeg(76.7312, 78.7312, 93.75, 350., 109.4);
1349 auto* tepox3 =
new TGeoTubeSeg(76.6774, 78.785, 93.75, 109.4, 110.);
1350 auto* tpr3 =
new TGeoTubeSeg(78.785, 78.825, 93.75, 109., 111.);
1352 auto* tv10 =
new TGeoVolume(
"TPC_IFC11", t10, sm2);
1353 auto* tv11 =
new TGeoVolume(
"TPC_IFC12", t11, sm5);
1354 auto* tv12 =
new TGeoVolume(
"TPC_IFC13", t12, sm4);
1355 auto* tvep3 =
new TGeoVolume(
"TPC_IFEPOX3", tepox3, smep);
1356 auto* tvpr3 =
new TGeoVolume(
"TPC_PRSTR3", tpr3, sm2);
1360 tv2->AddNode(tv3, 1);
1361 tv3->AddNode(tv4, 1);
1362 tv4->AddNode(tv5, 1);
1366 tv6->AddNode(tv7, 1);
1367 tv7->AddNode(tv8, 1);
1368 tv8->AddNode(tv9, 1);
1372 tv10->AddNode(tv11, 1);
1373 tv11->AddNode(tv12, 1);
1375 auto* tv100 =
new TGeoVolumeAssembly(
"TPC_IFC");
1381 tv100->AddNode(tv10, 1);
1382 tv100->AddNode(tvep3, 1);
1383 tv100->AddNode(tvpr3, 1);
1385 tv100->AddNode(tv6, 1,
new TGeoTranslation(0., 0., -98.75));
1386 tv100->AddNode(tv6, 2,
new TGeoTranslation(0., 0., 98.75));
1387 tv100->AddNode(tvep2, 1,
new TGeoTranslation(0., 0., -98.75));
1388 tv100->AddNode(tvep2, 2,
new TGeoTranslation(0., 0., 98.75));
1389 tv100->AddNode(tvpr2, 1,
new TGeoTranslation(0., 0., -98.75));
1390 tv100->AddNode(tvpr2, 2,
new TGeoTranslation(0., 0., 98.75));
1392 tv100->AddNode(tv2, 1,
new TGeoTranslation(0., 0., -177.925));
1393 tv100->AddNode(tv2, 2,
new TGeoTranslation(0., 0., 177.925));
1394 tv100->AddNode(tvep1, 1,
new TGeoTranslation(0., 0., -177.925));
1395 tv100->AddNode(tvep1, 2,
new TGeoTranslation(0., 0., 177.925));
1396 tv100->AddNode(tvpr1, 1,
new TGeoTranslation(0., 0., -177.925));
1397 tv100->AddNode(tvpr1, 2,
new TGeoTranslation(0., 0., 177.925));
1401 segrot =
new TGeoRotation();
1402 segrot->RotateZ(120.);
1405 tv100->AddNode(tv10, 2, segrot);
1406 tv100->AddNode(tvep3, 2, segrot);
1407 tv100->AddNode(tvpr3, 2, segrot);
1409 tv100->AddNode(tv6, 3,
new TGeoCombiTrans(0., 0., -98.75, segrot));
1410 tv100->AddNode(tv6, 4,
new TGeoCombiTrans(0., 0., 98.75, segrot));
1411 tv100->AddNode(tvep2, 3,
new TGeoCombiTrans(0., 0., -98.75, segrot));
1412 tv100->AddNode(tvep2, 4,
new TGeoCombiTrans(0., 0., 98.75, segrot));
1413 tv100->AddNode(tvpr2, 3,
new TGeoCombiTrans(0., 0., -98.75, segrot));
1414 tv100->AddNode(tvpr2, 4,
new TGeoCombiTrans(0., 0., 98.75, segrot));
1416 tv100->AddNode(tv2, 3,
new TGeoCombiTrans(0., 0., -177.925, segrot));
1417 tv100->AddNode(tv2, 4,
new TGeoCombiTrans(0., 0., 177.925, segrot));
1418 tv100->AddNode(tvep1, 3,
new TGeoCombiTrans(0., 0., -177.925, segrot));
1419 tv100->AddNode(tvep1, 4,
new TGeoCombiTrans(0., 0., 177.925, segrot));
1420 tv100->AddNode(tvpr1, 3,
new TGeoCombiTrans(0., 0., -177.925, segrot));
1421 tv100->AddNode(tvpr1, 4,
new TGeoCombiTrans(0., 0., 177.925, segrot));
1425 segrot =
new TGeoRotation();
1426 segrot->RotateZ(240.);
1429 tv100->AddNode(tv10, 3, segrot);
1430 tv100->AddNode(tvep3, 3, segrot);
1431 tv100->AddNode(tvpr3, 3, segrot);
1433 tv100->AddNode(tv6, 5,
new TGeoCombiTrans(0., 0., -98.75, segrot));
1434 tv100->AddNode(tv6, 6,
new TGeoCombiTrans(0., 0., 98.75, segrot));
1435 tv100->AddNode(tvep2, 5,
new TGeoCombiTrans(0., 0., -98.75, segrot));
1436 tv100->AddNode(tvep2, 6,
new TGeoCombiTrans(0., 0., 98.75, segrot));
1437 tv100->AddNode(tvpr2, 5,
new TGeoCombiTrans(0., 0., -98.75, segrot));
1438 tv100->AddNode(tvpr2, 6,
new TGeoCombiTrans(0., 0., 98.75, segrot));
1440 tv100->AddNode(tv2, 5,
new TGeoCombiTrans(0., 0., -177.925, segrot));
1441 tv100->AddNode(tv2, 6,
new TGeoCombiTrans(0., 0., 177.925, segrot));
1442 tv100->AddNode(tvep1, 5,
new TGeoCombiTrans(0., 0., -177.925, segrot));
1443 tv100->AddNode(tvep1, 6,
new TGeoCombiTrans(0., 0., 177.925, segrot));
1444 tv100->AddNode(tvpr1, 5,
new TGeoCombiTrans(0., 0., -177.925, segrot));
1445 tv100->AddNode(tvpr1, 6,
new TGeoCombiTrans(0., 0., 177.925, segrot));
1447 tv100->AddNode(tv1, 1,
new TGeoTranslation(0., 0., -252.85));
1448 tv100->AddNode(tv1, 2,
new TGeoTranslation(0., 0., 252.85));
1450 v5->AddNode(v6, 1,
new TGeoTranslation(0., 0., -252.1));
1451 v5->AddNode(v6, 2,
new TGeoTranslation(0., 0., 252.1));
1455 v1->AddNode(hvsm, 1,
new TGeoTranslation(0., 0., -163.8));
1456 v1->AddNode(hvss, 1,
new TGeoTranslation(0., 0., 163.8));
1457 v9->AddNode(tv100, 1);
1462 auto* igro =
new TGeoTube(76.6624, 76.6774, 0.6);
1463 auto* igrio =
new TGeoTube(78.845, 78.86, 0.6);
1464 auto* igrim =
new TGeoTube(78.795, 78.81, 0.6);
1465 auto* igric =
new TGeoTube(78.785, 78.8, 0.6);
1469 auto* igrov =
new TGeoVolume(
"TPC_IGR1", igro, m3);
1470 auto* igriov =
new TGeoVolume(
"TPC_IGR2", igrio, m3);
1471 auto* igrimv =
new TGeoVolume(
"TPC_IGR3", igrim, m3);
1472 auto* igricv =
new TGeoVolume(
"TPC_IGR4", igric, m3);
1476 for (Int_t
i = 0;
i < 24;
i++) {
1477 v5->AddNode(igrov, (
i + 1),
new TGeoTranslation(0., 0., (
i + 1) * 10));
1478 v5->AddNode(igrov, (
i + 25),
new TGeoTranslation(0., 0., -(
i + 1) * 10));
1483 for (Int_t
i = 0;
i < 9;
i++) {
1484 v9->AddNode(igricv, (
i + 1),
new TGeoTranslation(0., 0., (
i + 1) * 10));
1485 v9->AddNode(igricv, (
i + 10),
new TGeoTranslation(0., 0., -(
i + 1) * 10));
1487 v9->AddNode(igrimv, 1,
new TGeoTranslation(0., 0., 100.));
1488 v9->AddNode(igrimv, 2,
new TGeoTranslation(0., 0., -100.));
1490 for (Int_t
i = 0;
i < 13;
i++) {
1491 v9->AddNode(igriov,
i + 1,
new TGeoTranslation(0., 0., 100 + (
i + 1) * 10));
1492 v9->AddNode(igriov,
i + 14,
new TGeoTranslation(0., 0., -(100 + (
i + 1) * 10)));
1499 auto* cfl =
new TGeoPcon(0., 360., 6);
1500 cfl->DefineSection(0, -71.1, 59.7, 61.2);
1501 cfl->DefineSection(1, -68.6, 59.7, 61.2);
1503 cfl->DefineSection(2, -68.6, 60.6124, 61.2);
1504 cfl->DefineSection(3, 68.6, 60.6124, 61.2);
1506 cfl->DefineSection(4, 68.6, 59.7, 61.2);
1507 cfl->DefineSection(5, 71.1, 59.7, 61.2);
1509 auto* cflv =
new TGeoVolume(
"TPC_CDR", cfl, m3);
1511 auto* cd1 =
new TGeoTubeSeg(60.6224, 61.19, 69.8, 0.05, 119.95);
1512 auto* cd2 =
new TGeoTubeSeg(60.6262, 61.1862, 69.8, 0.05, 119.95);
1513 auto* cd3 =
new TGeoTubeSeg(60.6462, 61.1662, 69.8, 0.05, 119.95);
1514 auto* cd4 =
new TGeoTubeSeg(60.6562, 61.1562, 69.8, 0.05, 119.95);
1515 auto* tepox4 =
new TGeoTubeSeg(60.6224, 61.19, 69.8, 359.95, 0.05);
1517 TGeoMedium* sm6 = gGeoManager->GetMedium(
"TPC_Prepreg1");
1518 TGeoMedium* sm8 = gGeoManager->GetMedium(
"TPC_Epoxyfm");
1519 auto* cd1v =
new TGeoVolume(
"TPC_CDR1", cd1, sm2);
1520 auto* cd2v =
new TGeoVolume(
"TPC_CDR2", cd2, sm6);
1521 auto* cd3v =
new TGeoVolume(
"TPC_CDR3", cd3, sm8);
1522 auto* cd4v =
new TGeoVolume(
"TPC_CDR4", cd4, sm4);
1523 auto* tvep4 =
new TGeoVolume(
"TPC_IFEPOX4", tepox4, smep);
1527 auto* cdjl =
new TGeoTubeSeg(60.6562, 60.6762, 69.8, 0., 1.0);
1528 auto* cdju =
new TGeoTubeSeg(61.1362, 61.1562, 69.8, 0., 1.0);
1530 auto* cdjlv =
new TGeoVolume(
"TPC_CDJL", cdjl, sm6);
1531 auto* cdjuv =
new TGeoVolume(
"TPC_CDJU", cdju, sm6);
1535 auto* cs =
new TGeoTube(56.9, 61.2, 0.1);
1536 TGeoMedium* sm7 = gGeoManager->GetMedium(
"TPC_Mylar");
1537 auto* csv =
new TGeoVolume(
"TPC_CDRS", cs, sm7);
1538 v1->AddNode(csv, 1,
new TGeoTranslation(0., 0., -71.2));
1539 v1->AddNode(csv, 2,
new TGeoTranslation(0., 0., 71.2));
1542 auto* se =
new TGeoPcon(0., 360., 6);
1543 se->DefineSection(0, -72.8, 59.7, 61.2);
1544 se->DefineSection(1, -72.3, 59.7, 61.2);
1546 se->DefineSection(2, -72.3, 58.85, 61.2);
1547 se->DefineSection(3, -71.6, 58.85, 61.2);
1549 se->DefineSection(4, -71.6, 59.7, 61.2);
1550 se->DefineSection(5, -71.3, 59.7, 61.2);
1552 auto* sev =
new TGeoVolume(
"TPC_CDCE", se, m3);
1554 auto* si =
new TGeoTube(56.9, 58.8, 1.);
1555 auto* siv =
new TGeoVolume(
"TPC_CDCI", si, m3);
1559 auto*
ref =
new TGeoRotation(
"ref", 90., 0., 90., 90., 180., 0.);
1561 cd1v->AddNode(cd2v, 1);
1562 cd2v->AddNode(cd3v, 1);
1563 cd3v->AddNode(cd4v, 1);
1567 segrot =
new TGeoRotation();
1568 segrot->RotateZ(0.05);
1569 cd4v->AddNode(cdjlv, 1, segrot);
1570 cd4v->AddNode(cdjuv, 1, segrot);
1571 segrot =
new TGeoRotation();
1572 segrot->RotateZ(118.95);
1573 cd4v->AddNode(cdjlv, 2, segrot);
1574 cd4v->AddNode(cdjuv, 2, segrot);
1579 segrot =
new TGeoRotation();
1580 segrot->RotateZ(4.6);
1581 cflv->AddNode(cd1v, 1, segrot);
1582 cflv->AddNode(tvep4, 1, segrot);
1584 segrot =
new TGeoRotation();
1585 segrot->RotateZ(124.6);
1586 cflv->AddNode(cd1v, 2, segrot);
1587 cflv->AddNode(tvep4, 2, segrot);
1589 segrot =
new TGeoRotation();
1590 segrot->RotateZ(244.6);
1591 cflv->AddNode(cd1v, 3, segrot);
1592 cflv->AddNode(tvep4, 3, segrot);
1596 auto* hstr =
new TGeoTubeSeg(60.6124, 60.6224, 68.5, 0., 1.25);
1597 auto* hstrv =
new TGeoVolume(
"TPC_HSTR", hstr, m1);
1598 for (Int_t
i = 0;
i < 144;
i++) {
1599 Double_t
alpha = 1.25 +
i * 2.5;
1600 segrot =
new TGeoRotation();
1601 segrot->RotateZ(
alpha);
1602 cflv->AddNode(hstrv,
i + 1, segrot);
1605 v1->AddNode(siv, 1,
new TGeoTranslation(0., 0., -69.9));
1606 v1->AddNode(siv, 2,
new TGeoTranslation(0., 0., 69.9));
1607 v1->AddNode(sev, 1);
1608 v1->AddNode(sev, 2,
ref);
1609 v1->AddNode(cflv, 1);
1613 auto* ih =
new TGeoTube(81.05, 84.05, 0.3);
1614 auto* oh =
new TGeoTube(250., 256., 0.5);
1615 auto* mem =
new TGeoTube(84.05, 250., 0.00115);
1618 TGeoMedium*
m4 = gGeoManager->GetMedium(
"TPC_G10");
1620 auto* ihv =
new TGeoVolume(
"TPC_IHVH", ih, m3);
1621 auto* ohv =
new TGeoVolume(
"TPC_OHVH", oh, m3);
1623 auto* memv =
new TGeoVolume(
"TPC_HV", mem, sm7);
1625 auto*
cm =
new TGeoVolumeAssembly(
"TPC_HVMEM");
1626 cm->AddNode(ihv, 1);
1627 cm->AddNode(ohv, 1);
1628 cm->AddNode(memv, 1);
1635 Double_t openingAngle = 10. * TMath::DegToRad();
1636 Double_t thick = 1.5;
1637 Double_t shift = thick / TMath::Sin(openingAngle);
1639 Double_t lowEdge = 86.3;
1640 Double_t upEdge = 240.4;
1642 new TGeoTubeSeg(
"tpc_ssec", 74.5, 264.4, 3., 0., 20.);
1644 auto* tpc_hole =
new TGeoPgon(
"tpc_hole", 0., 20., 1, 4);
1646 tpc_hole->DefineSection(0, -3.5, lowEdge - shift, upEdge - shift);
1647 tpc_hole->DefineSection(1, -1.5, lowEdge - shift, upEdge - shift);
1649 tpc_hole->DefineSection(2, -1.5, lowEdge - shift, upEdge + 3. - shift);
1650 tpc_hole->DefineSection(3, 3.5, lowEdge - shift, upEdge + 3. - shift);
1652 Double_t ys = shift * TMath::Sin(openingAngle);
1653 Double_t xs = shift * TMath::Cos(openingAngle);
1654 auto* tr =
new TGeoTranslation(
"tr", xs, ys, 0.);
1655 tr->RegisterYourself();
1656 auto*
chamber =
new TGeoCompositeShape(
"tpc_ssec-tpc_hole:tr");
1657 auto* sv =
new TGeoVolume(
"TPC_WSEG", chamber, m3);
1658 auto* bar =
new TGeoPgon(
"bar", 0., 20., 1, 2);
1659 bar->DefineSection(0, -3., 131.5 - shift, 136.5 - shift);
1660 bar->DefineSection(1, 1.5, 131.5 - shift, 136.5 - shift);
1661 auto* barv =
new TGeoVolume(
"TPC_WBAR", bar, m3);
1662 auto* ch =
new TGeoVolumeAssembly(
"TPC_WCH");
1665 ch->AddNode(barv, 1, tr);
1671 TGeoMedium* m6 = gGeoManager->GetMedium(
"TPC_Makrolon");
1673 auto* ibody =
new TGeoTrd1(13.8742, 21.3328, 4.29, 21.15);
1674 auto* ibdv =
new TGeoVolume(
"TPC_IROCB", ibody, m3);
1676 auto* emp =
new TGeoTrd1(12.3742, 19.8328, 4.05, 19.65);
1677 auto* empv =
new TGeoVolume(
"TPC_IROCE", emp, m1);
1678 ibdv->AddNode(empv, 1,
new TGeoTranslation(0., -0.24, 0.));
1680 Double_t tga = (19.8328 - 12.3742) / 39.3;
1681 Double_t xmin, xmax;
1683 xmin = 9.65 * tga + 12.3742;
1684 xmax = 10.05 * tga + 12.3742;
1686 auto* ib1 =
new TGeoTrd1(xmin, xmax, 2.06, 0.2);
1687 auto* ib1v =
new TGeoVolume(
"TPC_IRB1", ib1, m3);
1688 empv->AddNode(ib1v, 1,
new TGeoTranslation(
"tt1", 0., 1.99, -9.8));
1690 xmin = 19.5 * tga + 12.3742;
1691 xmax = 19.9 * tga + 12.3742;
1693 auto* ib2 =
new TGeoTrd1(xmin, xmax, 2.06, 0.2);
1694 auto* ib2v =
new TGeoVolume(
"TPC_TRB2", ib2, m3);
1695 empv->AddNode(ib2v, 1,
new TGeoTranslation(0., 1.99, 0.05));
1697 xmin = 29.35 * tga + 12.3742;
1698 xmax = 29.75 * tga + 12.3742;
1700 auto* ib3 =
new TGeoTrd1(xmin, xmax, 2.06, 0.2);
1701 auto* ib3v =
new TGeoVolume(
"TPC_IRB3", ib3, m3);
1702 empv->AddNode(ib3v, 1,
new TGeoTranslation(0., 1.99, 9.9));
1706 auto* conn =
new TGeoBBox(0.4, 0.24, 1.937);
1707 auto* connv =
new TGeoVolume(
"TPC_RCCON", conn, m6);
1709 auto* connb =
new TGeoBBox(0.5, 0.25, 2.375);
1710 auto* connbv =
new TGeoVolume(
"TPC_RCCONB", connb, m6);
1714 auto* icsb =
new TGeoTrd1(14.5974, 23.3521, 0.25, 24.825);
1715 auto* icsbv =
new TGeoVolume(
"TPC_ISB", icsb, m4);
1719 TString fileName(gSystem->Getenv(
"VMCWORKDIR"));
1720 fileName +=
"/Detectors/Geometry/TPC/conn_iroc.dat";
1722 in.open(fileName.Data(), ios_base::in);
1723 if (!in.is_open()) {
1724 LOG(fatal) <<
"Cannot open input file : " << fileName.Data();
1726 for (Int_t
i = 0;
i < 132;
i++) {
1728 in >> ang >>
x >>
z;
1735 auto* rrr =
new TGeoRotation();
1738 ibdv->AddNode(connv,
i + 1,
new TGeoCombiTrans(
x, 4.05,
z, rrr));
1739 icsbv->AddNode(connbv,
i + 1,
new TGeoCombiTrans(
x, 0.,
z + 1.725, rrr));
1744 new TGeoTrd1(
"icap", 14.5974, 23.3521, 1.19, 24.825);
1746 new TGeoTrd1(
"ihole", 13.8742, 21.3328, 1.2, 21.15);
1747 auto* tr1 =
new TGeoTranslation(
"tr1", 0., 0., 1.725);
1748 tr1->RegisterYourself();
1749 auto* ic =
new TGeoCompositeShape(
"icap-ihole:tr1");
1750 auto* icv =
new TGeoVolume(
"TPC_IRCAP", ic, m3);
1754 auto* icpp =
new TGeoTrd1(14.5974, 23.3521, 0.16, 24.825);
1755 auto* icppv =
new TGeoVolume(
"TPC_IPP", icpp, m4);
1759 new TGeoTrd1(
"igem", 14.5974, 23.3521, 0.1, 24.825);
1760 new TGeoTrd1(
"igemh", 14.5974 - .5, 23.3521 - .5, 0.11, 24.825 - .5);
1761 auto* icgem =
new TGeoCompositeShape(
"igem-igemh");
1762 auto* icgemv =
new TGeoVolume(
"TPC_ICGEM", icgem, m4);
1766 auto* iroc =
new TGeoVolumeAssembly(
"TPC_IROC");
1768 iroc->AddNode(ibdv, 1);
1769 iroc->AddNode(icv, 1,
new TGeoTranslation(0., 3.1, -1.725));
1770 iroc->AddNode(icsbv, 1,
new TGeoTranslation(0., 4.54, -1.725));
1771 iroc->AddNode(icppv, 1,
new TGeoTranslation(0., 4.95, -1.725));
1772 iroc->AddNode(icgemv, 1,
new TGeoTranslation(0., 5.21, -1.725));
1776 auto* obody =
new TGeoTrd1(22.2938, 40.5084, 4.29, 51.65);
1777 auto* obdv =
new TGeoVolume(
"TPC_OROCB", obody, m3);
1778 auto* oemp =
new TGeoTrd1(20.7938, 39.0084, 3.89, 50.15);
1779 auto* oempv =
new TGeoVolume(
"TPC_OROCE", oemp, m1);
1780 obdv->AddNode(oempv, 1,
new TGeoTranslation(0., -0.4, 0.));
1784 tga = (39.0084 - 20.7938) / 100.3;
1785 xmin = tga * 14.2 + 20.7938;
1786 xmax = tga * 14.6 + 20.7938;
1787 auto* ob1 =
new TGeoTrd1(xmin, xmax, 2.94, 0.2);
1788 auto* ob1v =
new TGeoVolume(
"TPC_ORB1", ob1, m3);
1790 xmin = 30.4 * tga + 20.7938;
1791 xmax = 32.1 * tga + 20.7938;
1792 auto* ob2 =
new TGeoTrd1(xmin, xmax, 2.94, 1.05);
1793 auto* ob2v =
new TGeoVolume(
"TPC_ORB2", ob2, m3);
1795 xmin = 51.5 * tga + 20.7938;
1796 xmax = 51.9 * tga + 20.7938;
1797 auto* ob3 =
new TGeoTrd1(xmin, xmax, 2.94, 0.2);
1798 auto* ob3v =
new TGeoVolume(
"TPC_ORB3", ob3, m3);
1800 xmin = 68.5 * tga + 20.7938;
1801 xmax = 70.6 * tga + 20.7938;
1802 auto* ob4 =
new TGeoTrd1(xmin, xmax, 2.94, 1.05);
1803 auto* ob4v =
new TGeoVolume(
"TPC_ORB4", ob4, m3);
1805 xmin = 89.9 * tga + 20.7938;
1806 xmax = 90.3 * tga + 20.7938;
1807 auto* ob5 =
new TGeoTrd1(xmin, xmax, 2.94, 0.2);
1808 auto* ob5v =
new TGeoVolume(
"TPC_ORB5", ob5, m3);
1810 oempv->AddNode(ob1v, 1,
new TGeoTranslation(0., 0.59, -35.75));
1811 oempv->AddNode(ob2v, 1,
new TGeoTranslation(0., 0.59, -18.7));
1812 oempv->AddNode(ob3v, 1,
new TGeoTranslation(0., 0.59, 1.55));
1813 oempv->AddNode(ob4v, 1,
new TGeoTranslation(0., 0.59, 19.4));
1814 oempv->AddNode(ob5v, 1,
new TGeoTranslation(0., 0.59, 39.95));
1818 auto* conno =
new TGeoBBox(0.4, 0.4, 1.937);
1819 auto* connov =
new TGeoVolume(
"TPC_RCCONO", conno, m6);
1821 auto* connob =
new TGeoBBox(0.5, 0.25, 2.375);
1822 auto* connobv =
new TGeoVolume(
"TPC_RCCONOB", connob, m6);
1826 new TGeoTrd1(
"ocap", 23.3875, 43.524, 1.19, 57.1);
1827 new TGeoTrd1(
"ohole", 22.2938, 40.5084, 1.19, 51.65);
1828 auto* tr5 =
new TGeoTranslation(
"tr5", 0., 0., -2.15);
1829 tr5->RegisterYourself();
1830 auto* oc =
new TGeoCompositeShape(
"ocap-ohole:tr5");
1831 auto* ocv =
new TGeoVolume(
"TPC_ORCAP", oc, m3);
1835 auto* osb =
new TGeoTrd1(23.3874, 43.524, 0.25, 57.1);
1836 auto* osbv =
new TGeoVolume(
"TPC_OSB", osb, m4);
1840 auto* opp =
new TGeoTrd1(23.3874, 43.524, 0.16, 57.1);
1841 auto* oppv =
new TGeoVolume(
"TPC_OPP", opp, m4);
1845 new TGeoTrd1(
"ogem", 23.3874, 43.524, 0.1, 57.1);
1849 new TGeoTrd1(
"ogemh1", 22.548, 28.579, 0.1, 17.625);
1850 new TGeoTrd1(
"ogemh2", 28.949, 35.297, 0.1, 18.45);
1851 new TGeoTrd1(
"ogemh3", 35.667, 42.332, 0.1, 19.425);
1853 auto* tr2 =
new TGeoTranslation(
"tr2", 0., 0., 18.125 - 57.1);
1854 auto* tr3 =
new TGeoTranslation(
"tr3", 0., 0., 55.2 - 57.1);
1855 auto* tr4 =
new TGeoTranslation(
"tr4", 0., 0., 94.175 - 57.1);
1856 tr2->RegisterYourself();
1857 tr3->RegisterYourself();
1858 tr4->RegisterYourself();
1859 auto* ocgem =
new TGeoCompositeShape(
"ogem-ogemh1:tr2-ogemh2:tr3-ogemh3:tr4");
1860 auto* ocgemv =
new TGeoVolume(
"TPC_OCGEM", ocgem, m4);
1864 fileName = gSystem->Getenv(
"VMCWORKDIR");
1865 fileName +=
"/Detectors/Geometry/TPC/conn_oroc.dat";
1866 in.open(fileName.Data(), ios_base::in);
1867 if (!in.is_open()) {
1868 LOG(fatal) <<
"Cannot open input file : " << fileName.Data();
1870 for (Int_t
i = 0;
i < 232;
i++) {
1872 in >> ang >>
x >>
z;
1878 auto* rrr =
new TGeoRotation();
1880 obdv->AddNode(connov,
i + 1,
new TGeoCombiTrans(
x, 3.89,
z, rrr));
1881 osbv->AddNode(connobv,
i + 1,
new TGeoCombiTrans(
x, 0.,
z - 2.15, rrr));
1885 auto* oroc =
new TGeoVolumeAssembly(
"TPC_OROC");
1887 oroc->AddNode(obdv, 1);
1888 oroc->AddNode(ocv, 1,
new TGeoTranslation(0., 3.1, 2.15));
1889 oroc->AddNode(osbv, 1,
new TGeoTranslation(0., 4.54, 2.15));
1890 oroc->AddNode(oppv, 1,
new TGeoTranslation(0., 4.95, 2.15));
1891 oroc->AddNode(ocgemv, 1,
new TGeoTranslation(0., 5.21, 2.15));
1895 auto* secta =
new TGeoVolumeAssembly(
"TPC_SECT");
1896 auto* sectc =
new TGeoVolumeAssembly(
"TPC_SECT");
1897 TGeoRotation rot1(
"rot1", 90., 90., 0.);
1898 TGeoRotation rot2(
"rot2");
1900 auto* rot =
new TGeoRotation(
"rot");
1907 x0 = 110.2 * TMath::Cos(openingAngle);
1908 y0 = 110.2 * TMath::Sin(openingAngle);
1909 auto* combi1a =
new TGeoCombiTrans(
"combi1",
x0,
y0, 1.09, rot);
1910 auto* combi1c =
new TGeoCombiTrans(
"combi1",
x0,
y0, 1.09, rot);
1911 x0 = 188.45 * TMath::Cos(openingAngle);
1912 y0 = 188.45 * TMath::Sin(openingAngle);
1913 auto* combi2a =
new TGeoCombiTrans(
"combi2",
x0,
y0, 1.09, rot);
1914 auto* combi2c =
new TGeoCombiTrans(
"combi2",
x0,
y0, 1.09, rot);
1919 secta->AddNode(ch, 1);
1920 secta->AddNode(iroc, 1, combi1a);
1921 secta->AddNode(oroc, 1, combi2a);
1925 sectc->AddNode(ch, 1);
1926 sectc->AddNode(iroc, 1, combi1c);
1927 sectc->AddNode(oroc, 1, combi2c);
1931 auto* wheela =
new TGeoVolumeAssembly(
"TPC_ENDCAP");
1932 auto* wheelc =
new TGeoVolumeAssembly(
"TPC_ENDCAP");
1934 for (Int_t
i = 0;
i < 18;
i++) {
1935 Double_t
phi = (20. *
i);
1936 auto* rwh =
new TGeoRotation();
1938 wheela->AddNode(secta,
i + 1, rwh);
1939 wheelc->AddNode(sectc,
i + 1, rwh);
1943 auto* combi3 =
new TGeoCombiTrans(
"combi3", 0., 0., 256.6,
ref);
1944 v9->AddNode(wheela, 1, combi3);
1945 v9->AddNode(wheelc, 2,
new TGeoTranslation(0., 0., -256.6));
1949 auto*
sw =
new TGeoPgon(0., 20., 1, 2);
1950 sw->DefineSection(0, -4., 80.5, 251.75);
1951 sw->DefineSection(1, 4., 80.5, 251.75);
1952 auto* swv =
new TGeoVolume(
"TPC_SWSEG",
sw, m3);
1955 shift = thick / TMath::Sin(openingAngle);
1956 auto* sh =
new TGeoPgon(0., 20., 1, 2);
1957 sh->DefineSection(0, -4., 81.5 - shift, 250.75 - shift);
1958 sh->DefineSection(1, 4., 81.5 - shift, 250.75 - shift);
1959 auto* shv =
new TGeoVolume(
"TPC_SWS1", sh, m1);
1961 TGeoMedium* m9 = gGeoManager->GetMedium(
"TPC_Si");
1962 auto* el =
new TGeoPgon(0., 20., 1, 2);
1963 el->DefineSection(0, -1.872, 81.5 - shift, 250.75 - shift);
1964 el->DefineSection(1, 1.872, 81.5 - shift, 250.75 - shift);
1965 auto* elv =
new TGeoVolume(
"TPC_ELEC", el, m9);
1967 shv->AddNode(elv, 1);
1970 ys = shift * TMath::Sin(openingAngle);
1971 xs = shift * TMath::Cos(openingAngle);
1972 swv->AddNode(shv, 1,
new TGeoTranslation(xs, ys, 0.));
1974 auto* co =
new TGeoPgon(0., 20., 1, 2);
1975 co->DefineSection(0, -0.5, 77., 255.25);
1976 co->DefineSection(1, 0.5, 77., 255.25);
1977 auto* cov =
new TGeoVolume(
"TPC_SWC1", co, m3);
1979 auto* coh =
new TGeoPgon(0., 20., 1, 2);
1980 shift = 4. / TMath::Sin(openingAngle);
1981 coh->DefineSection(0, -0.5, 85. - shift, 247.25 - shift);
1982 coh->DefineSection(1, 0.5, 85. - shift, 247.25 - shift);
1984 auto* cohv =
new TGeoVolume(
"TPC_SWC2", coh, m1);
1986 ys = shift * TMath::Sin(openingAngle);
1987 xs = shift * TMath::Cos(openingAngle);
1988 cov->AddNode(cohv, 1,
new TGeoTranslation(xs, ys, 0.));
1992 auto* swhs =
new TGeoVolumeAssembly(
"TPC_SSWSEC");
1993 swhs->AddNode(swv, 1);
1994 swhs->AddNode(cov, 1,
new TGeoTranslation(0., 0., -4.5));
1995 swhs->AddNode(cov, 2,
new TGeoTranslation(0., 0., 4.5));
1999 TGeoRotation* rsw[18];
2000 auto* swheel =
new TGeoVolumeAssembly(
"TPC_SSWHEEL");
2001 for (Int_t
i = 0;
i < 18;
i++) {
2002 Double_t
phi = (20. *
i);
2003 rsw[
i] =
new TGeoRotation();
2004 rsw[
i]->RotateZ(phi);
2005 swheel->AddNode(swhs,
i + 1, rsw[
i]);
2007 v1->AddNode(swheel, 1,
new TGeoTranslation(0., 0., -284.6));
2008 v1->AddNode(swheel, 2,
new TGeoTranslation(0., 0., 284.6));
2013 Int_t totrows = 159;
2017 gGeoManager->Volume(
"TPC_Strip",
"PGON",
m5->GetId(), upar);
2018 upar =
new Double_t[10];
2029 Double_t rlow = 85.225;
2032 upar[6] = rlow + .01;
2036 gGeoManager->Node(
"TPC_Strip", 1,
"TPC_Drift", 0., 0., 124.82, 0, kTRUE, upar, 10);
2037 gGeoManager->Node(
"TPC_Strip", totrows + 1,
"TPC_Drift", 0., 0., -124.82, 0, kTRUE, upar, 10);
2071 TGeoMedium* m7 = gGeoManager->GetMedium(
"TPC_Cu");
2072 TGeoMedium* m10 = gGeoManager->GetMedium(
"TPC_Alumina");
2073 TGeoMedium* m11 = gGeoManager->GetMedium(
"TPC_Peek");
2074 TGeoMedium* m13 = gGeoManager->GetMedium(
"TPC_Brass");
2075 TGeoMedium* m14 = gGeoManager->GetMedium(
"TPC_Alumina1");
2083 auto* rod =
new TGeoPcon(
"rod", 0., 360., 6);
2084 rod->DefineSection(0, -10.43, 1.92, 2.08);
2085 rod->DefineSection(1, -9.75, 1.92, 2.08);
2087 rod->DefineSection(2, -9.75, 1.8, 2.2);
2088 rod->DefineSection(3, 9.75, 1.8, 2.2);
2090 rod->DefineSection(4, 9.75, 1.92, 2.08);
2091 rod->DefineSection(5, 10.43, 1.92, 2.08);
2093 auto* mrodl =
new TGeoVolume(
"TPC_mrodl", rod, m6);
2097 auto* rod1 =
new TGeoPcon(
"rod1", 0., 360., 6);
2098 rod1->DefineSection(0, -8.93, 1.92, 2.08);
2099 rod1->DefineSection(1, -8.25, 1.92, 2.08);
2101 rod1->DefineSection(2, -8.25, 1.8, 2.2);
2102 rod1->DefineSection(3, 8.25, 1.8, 2.2);
2104 rod1->DefineSection(4, 8.25, 1.92, 2.08);
2105 rod1->DefineSection(5, 8.93, 1.92, 2.08);
2107 auto* mrods =
new TGeoVolume(
"TPC_mrods", rod1, m6);
2114 new TGeoTube(
"hhole", 0., 0.3, 0.3);
2119 auto* rhole =
new TGeoRotation();
2120 rhole->RotateX(90.);
2121 TGeoCombiTrans* transf[13];
2123 for (Int_t
i = 0;
i < 13;
i++) {
2124 snprintf(
name, 30,
"transf%d",
i);
2125 transf[
i] =
new TGeoCombiTrans(
name, 0., -2., -9. +
i * 1.5, rhole);
2126 transf[
i]->RegisterYourself();
2129 TString operl(
"hhole:transf0");
2130 for (Int_t
i = 1;
i < 13;
i++) {
2131 snprintf(
name, 30,
"+hhole:transf%d",
i);
2135 TString opers(
"hhole:transf1");
2136 for (Int_t
i = 2;
i < 12;
i++) {
2137 snprintf(
name, 30,
"+hhole:transf%d",
i);
2141 new TGeoCompositeShape(
"hlv", operl.Data());
2142 new TGeoCompositeShape(
"hsv", opers.Data());
2144 auto* rodl =
new TGeoCompositeShape(
"rodl",
"rod-hlv");
2145 auto* rods =
new TGeoCompositeShape(
"rods",
"rod1-hsv");
2147 auto* rodlv =
new TGeoVolume(
"TPC_rodl", rodl, m6);
2148 auto* rodsv =
new TGeoVolume(
"TPC_rods", rods, m6);
2151 auto* bcon =
new TGeoTube(0., 0.3, 0.3);
2152 auto* bconv =
new TGeoVolume(
"TPC_bcon", bcon, m13);
2156 new TGeoBBox(
"hk1", 0.625, 0.015, 0.75);
2157 new TGeoBBox(
"hk2", 0.625, 0.015, 0.15);
2158 auto* tr21 =
new TGeoTranslation(
"tr21", 0., -0.03, -0.6);
2159 auto* tr12 =
new TGeoTranslation(
"tr12", 0., -0.03, 0.6);
2160 tr21->RegisterYourself();
2161 tr12->RegisterYourself();
2163 auto* hook =
new TGeoCompositeShape(
"hook",
"hk1+hk2:tr21+hk2:tr12");
2164 auto* hookv =
new TGeoVolume(
"TPC_hook", hook, m13);
2171 auto* spart =
new TGeoVolumeAssembly(
"TPC_spart");
2173 spart->AddNode(rodsv, 1);
2174 for (Int_t
i = 1;
i < 12;
i++) {
2175 spart->AddNode(bconv,
i, transf[
i]);
2177 for (Int_t
i = 0;
i < 11;
i++) {
2178 spart->AddNode(hookv,
i + 1,
new TGeoTranslation(0., -2.315, -7.5 +
i * 1.5));
2183 auto* lpart =
new TGeoVolumeAssembly(
"TPC_lpart");
2185 lpart->AddNode(rodlv, 1);
2186 for (Int_t
i = 0;
i < 13;
i++) {
2187 lpart->AddNode(bconv,
i + 12, transf[
i]);
2189 for (Int_t
i = 0;
i < 13;
i++) {
2190 lpart->AddNode(hookv,
i + 12,
new TGeoTranslation(0., -2.315, -9. +
i * 1.5));
2195 new TGeoTube(
"ring1", 2.1075, 2.235, 0.53);
2196 new TGeoTube(
"ring2", 1.7925, 1.89, 0.43);
2197 new TGeoTube(
"ring3", 1.89, 2.1075, 0.05);
2198 auto* ring =
new TGeoCompositeShape(
"ring",
"ring1+ring2+ring3");
2199 auto* ringv =
new TGeoVolume(
"TPC_ring", ring, m3);
2203 auto* tpcrrod =
new TGeoVolumeAssembly(
"TPC_rrod");
2204 auto* tpcmrod =
new TGeoVolumeAssembly(
"TPC_mrod");
2206 for (Int_t
i = 0;
i < 11;
i++) {
2207 tpcrrod->AddNode(ringv,
i + 1,
new TGeoTranslation(0., 0., -105. +
i * 21));
2208 tpcmrod->AddNode(ringv,
i + 12,
new TGeoTranslation(0., 0., -105. +
i * 21));
2210 for (Int_t
i = 0;
i < 10;
i++) {
2211 tpcrrod->AddNode(lpart,
i + 1,
new TGeoTranslation(0., 0., -94.5 +
i * 21));
2212 tpcmrod->AddNode(mrodl,
i + 1,
new TGeoTranslation(0., 0., -94.5 +
i * 21));
2217 auto* tpcrp =
new TGeoPcon(0., 360., 6);
2219 tpcrp->DefineSection(0, 123.05, 1.89, 2.1075);
2220 tpcrp->DefineSection(1, 123.59, 1.89, 2.1075);
2222 tpcrp->DefineSection(2, 123.59, 1.8, 2.2);
2223 tpcrp->DefineSection(3, 127., 1.8, 2.2);
2225 tpcrp->DefineSection(4, 127., 0., 2.2);
2226 tpcrp->DefineSection(5, 127.5, 0., 2.2);
2228 auto* tpcrpv =
new TGeoVolume(
"TPC_RP", tpcrp, m6);
2232 tpcrrod->AddNode(spart, 1,
new TGeoTranslation(0., 0., -114.));
2233 tpcrrod->AddNode(spart, 2,
new TGeoTranslation(0., 0., 114.));
2234 tpcrrod->AddNode(ringv, 23,
new TGeoTranslation(0., 0., -123.));
2235 tpcrrod->AddNode(ringv, 24,
new TGeoTranslation(0., 0., 123.));
2236 tpcrrod->AddNode(tpcrpv, 1);
2238 tpcmrod->AddNode(mrods, 1,
new TGeoTranslation(0., 0., -114.));
2239 tpcmrod->AddNode(mrods, 2,
new TGeoTranslation(0., 0., 114.));
2240 tpcmrod->AddNode(ringv, 25,
new TGeoTranslation(0., 0., -123.));
2241 tpcmrod->AddNode(ringv, 26,
new TGeoTranslation(0., 0., 123.));
2242 tpcmrod->AddNode(tpcrpv, 2);
2249 auto* hvr =
new TGeoTube(0., 1.465, 123.);
2250 auto* hvc =
new TGeoTube(0., 0.29, 123.);
2252 auto* hvrv =
new TGeoVolume(
"TPC_HV_Rod", hvr, m6);
2253 auto* hvcv =
new TGeoVolume(
"TPC_HV_Cable", hvc, m7);
2254 hvrv->AddNode(hvcv, 1);
2258 auto* cr =
new TGeoTube(0., 0.45, 123.);
2259 auto* cw =
new TGeoTube(0., 0.15, 123.);
2260 auto* crv =
new TGeoVolume(
"TPC_CR", cr, m10);
2261 auto* cwv =
new TGeoVolume(
"TPC_W", cw, m12);
2265 crv->AddNode(cwv, 1);
2269 auto* pr =
new TGeoTube(0.2, 0.35, 123.);
2270 auto* prv =
new TGeoVolume(
"TPC_PR", pr, m11);
2274 new TGeoTube(
"tub", 0., 1.7, 0.025);
2278 Double_t
n[3],
p[3];
2279 Double_t
slope = TMath::Tan(22. * TMath::DegToRad());
2280 Double_t intp = 1.245;
2291 norm = TMath::Sqrt(
n[0] *
n[0] +
n[1] *
n[1]);
2304 norm = TMath::Sqrt(
n[0] *
n[0] +
n[1] *
n[1]);
2311 new TGeoTube(
"h1", 0., 0.5, 0.025);
2312 new TGeoTube(
"h2", 0., 0.35, 0.025);
2314 auto* ttr11 =
new TGeoTranslation(
"ttr11", -0.866, 0.5, 0.);
2315 auto* ttr22 =
new TGeoTranslation(
"ttr22", 0.866, 0.5, 0.);
2316 ttr11->RegisterYourself();
2317 ttr22->RegisterYourself();
2319 new TGeoBBox(
"elcon", 0.72, 0.005, 0.3);
2320 auto* crr1 =
new TGeoRotation();
2321 crr1->RotateZ(-22.);
2322 auto* ctr1 =
new TGeoCombiTrans(
"ctr1", -0.36011, -1.09951, -0.325, crr1);
2323 ctr1->RegisterYourself();
2324 auto* cs1 =
new TGeoCompositeShape(
"cs1",
"(((((tub-h1:ttr11)-h1:ttr22)-(sp1:sp1_tr))-(sp2:sp2_tr))-h2)+elcon:ctr1");
2326 auto* csvv =
new TGeoVolume(
"TPC_RR_CU", cs1, m7);
2331 auto* rrod =
new TGeoVolumeAssembly(
"TPC_RRIN");
2333 rrod->AddNode(crv, 1, ttr11);
2334 rrod->AddNode(crv, 2, ttr22);
2335 rrod->AddNode(prv, 1);
2337 for (Int_t
i = 0;
i < 165;
i++) {
2338 rrod->AddNode(csvv,
i + 1,
new TGeoTranslation(0., 0., -122.675 +
i * 1.5));
2341 auto*
res =
new TGeoTube(0., 0.15, 0.5);
2342 auto* resv =
new TGeoVolume(
"TPC_RES",
res, m14);
2343 auto* ress =
new TGeoVolumeAssembly(
"TPC_RES_CH");
2344 ress->AddNode(resv, 1,
new TGeoTranslation(0.2, 0., 0.));
2345 ress->AddNode(resv, 2,
new TGeoTranslation(-0.2, 0., 0.));
2347 auto* crr2 =
new TGeoRotation();
2349 auto* crr3 =
new TGeoRotation();
2350 crr3->RotateY(-30.);
2352 for (Int_t
i = 0;
i < 164;
i += 2) {
2353 rrod->AddNode(ress,
i + 1,
new TGeoCombiTrans(0., 1.2, -121.925 +
i * 1.5, crr2));
2354 rrod->AddNode(ress,
i + 2,
new TGeoCombiTrans(0., 1.2, -121.925 + (
i + 1) * 1.5, crr3));
2357 tpcrrod->AddNode(rrod, 1,
new TGeoCombiTrans(0., 0., 0.5, crr1));
2362 Double_t shift1[3] = {0.0, -0.175, 0.0};
2364 new TGeoBBox(
"tpcihs1", 4.7, 0.66, 2.35);
2365 new TGeoBBox(
"tpcihs2", 4.7, 0.485, 1.0, shift1);
2366 new TGeoBBox(
"tpcihs3", 1.5, 0.485, 2.35, shift1);
2367 new TGeoTube(
"tpcihs4", 0.0, 2.38, 0.1);
2369 Double_t pointstrap[16];
2370 pointstrap[0] = 0.0;
2371 pointstrap[1] = 0.0;
2372 pointstrap[2] = 0.0;
2373 pointstrap[3] = 1.08;
2374 pointstrap[4] = 2.3;
2375 pointstrap[5] = 1.08;
2376 pointstrap[6] = 3.38;
2377 pointstrap[7] = 0.0;
2378 pointstrap[8] = 0.0;
2379 pointstrap[9] = 0.0;
2380 pointstrap[10] = 0.0;
2381 pointstrap[11] = 1.08;
2382 pointstrap[12] = 2.3;
2383 pointstrap[13] = 1.08;
2384 pointstrap[14] = 3.38;
2385 pointstrap[15] = 0.0;
2387 auto* tpcihs5 =
new TGeoArb8(
"tpcihs5", 0.6, pointstrap);
2404 auto* trans2 =
new TGeoTranslation(
"trans2", 0.0, 2.84, 2.25);
2405 trans2->RegisterYourself();
2406 auto* trans3 =
new TGeoTranslation(
"trans3", 0.0, 2.84, -2.25);
2407 trans3->RegisterYourself();
2411 new TGeoCompositeShape(
"tpcihs6",
"tpcihs1-(tpcihs2+tpcihs3)-(tpcihs4:trans2)-(tpcihs4:trans3)-(cutil1:cutil1_tr)");
2415 auto* tpcihss =
new TGeoVolume(
"TPC_IHSS", tpcihs6, m6);
2416 auto* tpcihst =
new TGeoVolume(
"TPC_IHSTR", tpcihs5, m6);
2418 auto* rot111 =
new TGeoRotation();
2419 rot111->RotateY(180.0);
2421 auto* tpcihs =
new TGeoVolumeAssembly(
"TPC_IHS");
2422 tpcihs->AddNode(tpcihss, 1);
2423 tpcihs->AddNode(tpcihst, 1,
new TGeoTranslation(-4.7, 0.66, 0.0));
2424 tpcihs->AddNode(tpcihst, 2,
new TGeoCombiTrans(4.7, 0.66, 0.0, rot111));
2428 new TGeoBBox(
"tpcirh1", 4.7, 1.33, 0.5);
2432 new TGeoBBox(
"tpcirh2", 1.05, 0.8, 0.5, shift1);
2436 new TGeoBBox(
"tpcirh3", 1.05, 0.8, 0.5, shift1);
2440 new TGeoBBox(
"tpcirh4", 1.9, 0.25, 0.5, shift1);
2441 new TGeoTube(
"tpcirh5", 0, 1.9, 5);
2443 auto* trans4 =
new TGeoTranslation(
"trans4", 0, 0.83, 0.0);
2444 trans4->RegisterYourself();
2446 auto* tpcirh6 =
new TGeoCompositeShape(
"tpcirh6",
"tpcirh1-tpcirh2-tpcirh3-(tpcirh5:trans4)-tpcirh4");
2450 auto* tpcirh =
new TGeoVolume(
"TPC_IRH", tpcirh6, m6);
2454 TGeoVolume* tpciclamp =
new TGeoVolumeAssembly(
"TPC_ICLP");
2455 tpciclamp->AddNode(tpcihs, 1);
2456 tpciclamp->AddNode(tpcirh, 1,
new TGeoTranslation(0, 1.99, 1.1));
2457 tpciclamp->AddNode(tpcirh, 2,
new TGeoTranslation(0, 1.99, -1.1));
2461 auto* inplug =
new TGeoPcon(
"inplug", 0.0, 360.0, 13);
2463 inplug->DefineSection(0, 0.3, 0.0, 2.2);
2464 inplug->DefineSection(1, 0.6, 0.0, 2.2);
2466 inplug->DefineSection(2, 0.6, 0.0, 1.75);
2467 inplug->DefineSection(3, 0.7, 0.0, 1.75);
2469 inplug->DefineSection(4, 0.7, 1.55, 1.75);
2470 inplug->DefineSection(5, 1.6, 1.55, 1.75);
2472 inplug->DefineSection(6, 1.6, 1.55, 2.2);
2473 inplug->DefineSection(7, 1.875, 1.55, 2.2);
2475 inplug->DefineSection(8, 2.47, 1.75, 2.2);
2477 inplug->DefineSection(9, 2.47, 1.75, 2.08);
2478 inplug->DefineSection(10, 2.57, 1.8, 2.08);
2480 inplug->DefineSection(11, 2.57, 1.92, 2.08);
2481 inplug->DefineSection(12, 2.95, 1.92, 2.08);
2487 new TGeoBBox(
"pcuti", 1.5, 0.11, 1.075, shift1);
2489 auto* inplleft =
new TGeoCompositeShape(
"inplleft",
"inplug-pcuti");
2490 auto* tpcinlplug =
new TGeoVolume(
"TPC_INPLL", inplleft, m6);
2494 TGeoVolume* tpcihpl =
new TGeoVolumeAssembly(
"TPC_IHPL");
2495 tpcihpl->AddNode(tpcinlplug, 1);
2496 tpcihpl->AddNode(tpcinlplug, 2,
ref);
2497 tpcihpl->AddNode(tpciclamp, 1,
new TGeoTranslation(0.0, -2.765, 0.0));
2503 pointstrap[0] = 0.0;
2504 pointstrap[1] = 0.0;
2505 pointstrap[2] = 0.0;
2506 pointstrap[3] = 2.8;
2507 pointstrap[4] = 3.1;
2508 pointstrap[5] = 2.8 - 3.1 * TMath::Tan(15. * TMath::DegToRad());
2509 pointstrap[6] = 3.1;
2510 pointstrap[7] = 0.0;
2511 pointstrap[8] = 0.0;
2512 pointstrap[9] = 0.0;
2513 pointstrap[10] = 0.0;
2514 pointstrap[11] = 2.8;
2515 pointstrap[12] = 3.1;
2516 pointstrap[13] = 2.8 - 3.1 * TMath::Tan(15. * TMath::DegToRad());
2517 pointstrap[14] = 3.1;
2518 pointstrap[15] = 0.0;
2520 auto* tpcomh1 =
new TGeoArb8(
"tpcomh1", 1.05, pointstrap);
2521 auto* tpcomh2 =
new TGeoBBox(
"tpcomh2", 0.8, 1.4, 6);
2523 auto* tpcomh1v =
new TGeoVolume(
"TPC_OMH1", tpcomh1, m7);
2524 auto* tpcomh2v =
new TGeoVolume(
"TPC_OMH2", tpcomh2, m7);
2526 TGeoVolume* tpcomh3v =
new TGeoVolumeAssembly(
"TPC_OMH3");
2527 tpcomh3v->AddNode(tpcomh1v, 1,
new TGeoTranslation(0.8, -1.4, 4.95));
2528 tpcomh3v->AddNode(tpcomh1v, 2,
new TGeoTranslation(0.8, -1.4, -4.95));
2529 tpcomh3v->AddNode(tpcomh2v, 1);
2535 new TGeoBBox(
"tpcomh3", 1.65, 1.15, 3.4);
2536 auto* tpcomh4 =
new TGeoBBox(
"tpcomh4", 0.75, 0.7, 3.4, shift1);
2545 n[1] = -1.0 * TMath::Tan(30. * TMath::DegToRad());
2557 n[1] = -1.0 * TMath::Tan(30. * TMath::DegToRad());
2568 n[0] = 1.0 * TMath::Tan(75. * TMath::DegToRad());
2580 n[0] = 1.0 * TMath::Tan(75 * TMath::DegToRad());
2593 n[1] = -1.0 * TMath::Tan(20. * TMath::DegToRad());
2598 auto* tpcomh5 =
new TGeoCompositeShape(
"tpcomh5",
"tpcomh3-(cutomh1:cutomh1_tr)-(cutomh2:cutomh2_tr)-(cutomh3:cutomh3_tr)-(cutomh4:cutomh4_tr)-(cutomh5:cutomh5_tr)");
2600 auto* tpcomh5v =
new TGeoVolume(
"TPC_OMH5", tpcomh5, m6);
2601 auto* tpcomh4v =
new TGeoVolume(
"TPC_OMH6", tpcomh4, m6);
2603 auto* tpcomh7v =
new TGeoVolumeAssembly(
"TPC_OMH7");
2604 tpcomh7v->AddNode(tpcomh5v, 1);
2605 tpcomh7v->AddNode(tpcomh4v, 1);
2609 auto* tpcomh =
new TGeoVolumeAssembly(
"TPC_OMH");
2610 tpcomh->AddNode(tpcomh3v, 1,
new TGeoTranslation(1.5, 0., 0.));
2611 tpcomh->AddNode(tpcomh3v, 2,
new TGeoCombiTrans(-1.5, 0., 0., rot111));
2612 tpcomh->AddNode(tpcomh7v, 1,
new TGeoTranslation(0.65 + 1.5, 2.55, 0.0));
2613 tpcomh->AddNode(tpcomh7v, 2,
new TGeoCombiTrans(-0.65 - 1.5, 2.55, 0.0, rot111));
2617 new TGeoBBox(
"tpcohs1", 3.8, 0.675, 2.35);
2623 new TGeoBBox(
"tpcohs2", 1.5, 0.5, 2.35, shift1);
2624 new TGeoBBox(
"tpcohs3", 3.8, 0.5, 0.85, shift1);
2630 auto* tpcohs4 =
new TGeoBBox(
"tpsohs4", 3.1, 0.5, 0.7, shift1);
2632 auto* tpcohs4v =
new TGeoVolume(
"TPC_OHS4", tpcohs4, m6);
2644 auto* tpcohs5 =
new TGeoCompositeShape(
"tpcohs5",
"tpcohs1-tpcohs2-tpcohs3-(cutohs1:cutohs1_tr)");
2645 auto* tpcohs5v =
new TGeoVolume(
"TPC_OHS5", tpcohs5, m6);
2647 auto* tpcohs =
new TGeoVolumeAssembly(
"TPC_OHS");
2648 tpcohs->AddNode(tpcohs5v, 1);
2649 tpcohs->AddNode(tpcohs4v, 1);
2656 new TGeoBBox(
"tpcorh1", 3.1, 1.825, 0.55);
2662 new TGeoBBox(
"tpcorh2", 0.5, 2.75, 1.1, shift1);
2668 new TGeoBBox(
"tpcorh3", 0.5, 2.75, 1.1, shift1);
2674 new TGeoBBox(
"tpcorh4", 3.9, 2.75, 0.5, shift1);
2680 new TGeoBBox(
"tpcorh5", 1.95, 0.5, 1.1, shift1);
2686 new TGeoBBox(
"tpcorh6", 2.4, 0.5, 0.6, shift1);
2688 new TGeoTube(
"tpcorh7", 0, 1.95, 0.85);
2689 new TGeoTube(
"tpcorh8", 0, 2.4, 0.6);
2691 auto* trans33 =
new TGeoTranslation(
"trans33", 0.0, 0.0, 0.55);
2692 trans33->RegisterYourself();
2695 new TGeoCompositeShape(
"tpcorh9",
"tpcorh1-tpcorh2-tpcorh3-tpcorh4-tpcorh5-tpcorh6-(tpcorh8:trans33)-tpcorh7");
2697 auto* tpcorh9v =
new TGeoVolume(
"TPC_ORH", tpcorh9, m6);
2701 auto* tpcorh =
new TGeoVolumeAssembly(
"TPC_ORH2");
2703 tpcorh->AddNode(tpcorh9v, 1,
new TGeoTranslation(0.0, 0.0, 1.25));
2704 tpcorh->AddNode(tpcorh9v, 2,
new TGeoCombiTrans(0.0, 0.0, -1.25, rot111));
2708 auto* outplug =
new TGeoPcon(
"outplug", 0.0, 360.0, 13);
2710 outplug->DefineSection(0, 0.5, 0.0, 2.2);
2711 outplug->DefineSection(1, 0.7, 0.0, 2.2);
2712 outplug->DefineSection(2, 0.7, 1.55, 2.2);
2713 outplug->DefineSection(3, 0.8, 1.55, 2.2);
2714 outplug->DefineSection(4, 0.8, 1.55, 1.75);
2715 outplug->DefineSection(5, 1.2, 1.55, 1.75);
2716 outplug->DefineSection(6, 1.2, 1.55, 2.2);
2717 outplug->DefineSection(7, 1.875, 1.55, 2.2);
2718 outplug->DefineSection(8, 2.47, 1.75, 2.2);
2719 outplug->DefineSection(9, 2.47, 1.75, 2.08);
2720 outplug->DefineSection(10, 2.57, 1.8, 2.08);
2721 outplug->DefineSection(11, 2.57, 1.92, 2.08);
2722 outplug->DefineSection(12, 2.95, 1.92, 2.08);
2728 new TGeoBBox(
"cutout", 2.5, 0.11, 1.01, shift1);
2731 auto* outplleft =
new TGeoCompositeShape(
"outplleft",
"outplug-cutout");
2732 auto* outplleftv =
new TGeoVolume(
"TPC_OPLL", outplleft, m6);
2737 auto* tpcohpl =
new TGeoVolumeAssembly(
"TPC_OHPL");
2739 tpcohpl->AddNode(outplleftv, 1);
2740 tpcohpl->AddNode(outplleftv, 2,
ref);
2741 tpcohpl->AddNode(tpcorh, 1);
2742 tpcohpl->AddNode(tpcohs, 1,
new TGeoTranslation(0.0, 3.925, 0));
2748 pointstrap[0] = 0.0;
2749 pointstrap[1] = 0.0;
2750 pointstrap[2] = 0.0;
2751 pointstrap[3] = 2.8;
2752 pointstrap[4] = 3.1;
2753 pointstrap[5] = 1.96;
2754 pointstrap[6] = 3.1;
2755 pointstrap[7] = 0.0;
2756 pointstrap[8] = 0.0;
2757 pointstrap[9] = 0.0;
2758 pointstrap[10] = 0.0;
2759 pointstrap[11] = 2.8;
2760 pointstrap[12] = 3.1;
2761 pointstrap[13] = 1.96;
2762 pointstrap[14] = 3.1;
2763 pointstrap[15] = 0.0;
2765 auto* tpcmmh1 =
new TGeoArb8(
"tpcmmh1", 1.75, pointstrap);
2766 auto* tpcmmh2 =
new TGeoBBox(
"tpcmmh2", 0.8, 1.4, 12.5);
2768 auto* tpcmmh1v =
new TGeoVolume(
"TPC_MMH1", tpcmmh1, m6);
2769 auto* tpcmmh2v =
new TGeoVolume(
"TPC_MMH2", tpcmmh2, m6);
2771 auto* tpcmmhs =
new TGeoVolumeAssembly(
"TPC_MMHS");
2772 tpcmmhs->AddNode(tpcmmh1v, 1,
new TGeoTranslation(0.8, -1.4, 10.75));
2773 tpcmmhs->AddNode(tpcmmh1v, 2,
new TGeoTranslation(0.8, -1.4, -10.75));
2774 tpcmmhs->AddNode(tpcmmh2v, 1);
2782 new TGeoBBox(
"tpcmmhc1", 1.65, 1.85, 8.9);
2783 new TGeoBBox(
"tpcmmhc2", 0.9, 0.7, 8.9, shift1);
2793 n[2] = 8.0 * TMath::Tan(13. * TMath::DegToRad());
2803 n[2] = -8.0 * TMath::Tan(13. * TMath::DegToRad());
2813 n[2] = 6.1 * TMath::Tan(20. * TMath::DegToRad());
2823 n[2] = -6.1 * TMath::Tan(20 * TMath::DegToRad());
2831 n[0] = 2.4 * TMath::Tan(30 * TMath::DegToRad());
2841 n[0] = 2.4 * TMath::Tan(30 * TMath::DegToRad());
2848 new TGeoCompositeShape(
"TPC_MMHC",
"tpcmmhc1-tpcmmhc2-(cutmmh1:cutmmh1_tr)-(cutmmh2:cutmmh2_tr)-(cutmmh3:cutmmh3_tr)-(cutmmh4:cutmmh4_tr)-(cutmmh5:cutmmh5_tr)-(cutmmh6:cutmmh6_tr)");
2850 auto* tpcmmhcv =
new TGeoVolume(
"TPC_MMHC", tpcmmhc, m6);
2852 TGeoVolume* tpcmmh =
new TGeoVolumeAssembly(
"TPC_MMH");
2854 tpcmmh->AddNode(tpcmmhcv, 1,
new TGeoTranslation(0.65 + 1.5, 1.85, 0.0));
2855 tpcmmh->AddNode(tpcmmhcv, 2,
new TGeoCombiTrans(-0.65 - 1.5, 1.85, 0.0, rot111));
2856 tpcmmh->AddNode(tpcmmhs, 1,
new TGeoTranslation(1.5, 0.0, 0.0));
2857 tpcmmh->AddNode(tpcmmhs, 2,
new TGeoCombiTrans(-1.5, 0.0, 0.0, rot111));
2867 auto* gres1 =
new TGeoTube(0., 0.375, 125.);
2869 auto* vgres1 =
new TGeoVolume(
"TPC_GRES1", gres1, m14);
2874 xrc = 79.3 * TMath::Cos(350. * TMath::DegToRad());
2875 yrc = 79.3 * TMath::Sin(350. * TMath::DegToRad());
2877 v9->AddNode(vgres1, 1,
new TGeoTranslation(xrc, yrc, 126.9));
2878 v9->AddNode(vgres1, 2,
new TGeoTranslation(xrc, yrc, -126.9));
2880 xrc = 79.3 * TMath::Cos(190. * TMath::DegToRad());
2881 yrc = 79.3 * TMath::Sin(190. * TMath::DegToRad());
2883 v9->AddNode(vgres1, 3,
new TGeoTranslation(xrc, yrc, 126.9));
2884 v9->AddNode(vgres1, 4,
new TGeoTranslation(xrc, yrc, -126.9));
2886 TGeoRotation refl(
"refl", 90., 0., 90., 90., 180., 0.);
2887 TGeoRotation rotrod(
"rotrod");
2889 TGeoRotation* rotpos[2];
2891 TGeoRotation* rotrod1[2];
2895 auto* clampi1 =
new TGeoBBox(
"clampi1", 0.2, 3.1, 0.8);
2896 auto* clampi1v =
new TGeoVolume(
"TPC_clampi1v", clampi1, m6);
2898 pointstrap[0] = 0.49;
2899 pointstrap[1] = 0.375;
2901 pointstrap[2] = 0.49;
2902 pointstrap[3] = -0.375;
2904 pointstrap[4] = -0.49;
2905 pointstrap[5] = -0.375;
2907 pointstrap[6] = -0.49;
2908 pointstrap[7] = 1.225;
2910 pointstrap[8] = 0.49;
2911 pointstrap[9] = 0.375;
2913 pointstrap[10] = 0.49;
2914 pointstrap[11] = -0.375;
2916 pointstrap[12] = -0.49;
2917 pointstrap[13] = -0.375;
2919 pointstrap[14] = -0.49;
2920 pointstrap[15] = 1.225;
2922 auto* clitrap =
new TGeoArb8(
"clitrap", 0.25, pointstrap);
2923 auto* clitrapv =
new TGeoVolume(
"TPC_clitrapv", clitrap, m6);
2925 auto* clamprot =
new TGeoRotation();
2926 clamprot->RotateX(180.);
2928 new TGeoBBox(
"clibox", 1.125, 3.1, .1);
2929 new TGeoTube(
"clitub", 0., 2.2, 0.1);
2933 auto* clitr1 =
new TGeoTranslation(
"clitr1", 1.125, 0., 0.);
2934 clitr1->RegisterYourself();
2935 auto* clihold =
new TGeoCompositeShape(
"clihold",
"clibox-clitub:clitr1");
2936 auto* cliholdv =
new TGeoVolume(
"TPC_cliholdv", clihold, m6);
2940 TGeoVolume* iclamp =
new TGeoVolumeAssembly(
"TPC_iclamp");
2942 iclamp->AddNode(clampi1v, 1);
2943 iclamp->AddNode(clitrapv, 1,
new TGeoTranslation(0.69, -2.725, 0.35));
2944 iclamp->AddNode(clitrapv, 2,
new TGeoTranslation(0.69, -2.725, -0.35));
2945 iclamp->AddNode(clitrapv, 3,
new TGeoCombiTrans(0.69, 2.725, 0.35, clamprot));
2946 iclamp->AddNode(clitrapv, 4,
new TGeoCombiTrans(0.69, 2.725, -0.35, clamprot));
2947 iclamp->AddNode(cliholdv, 1,
new TGeoTranslation(1.325, 0., 0.));
2951 auto* clampo1 =
new TGeoBBox(
"clampo1", 0.25, 3.1, 1.);
2952 auto* clampo2 =
new TGeoBBox(
"clampo2", 0.4, 0.85, 1.);
2954 auto* clampo1v =
new TGeoVolume(
"TPC_clampo1v", clampo1, m6);
2955 auto* clampo2v =
new TGeoVolume(
"TPC_clampo2v", clampo2, m6);
2957 auto* oclamp =
new TGeoVolumeAssembly(
"TPC_oclamp");
2959 oclamp->AddNode(clampo1v, 1);
2961 oclamp->AddNode(clampo2v, 1,
new TGeoTranslation(0.65, -2.25, 0));
2962 oclamp->AddNode(clampo2v, 2,
new TGeoTranslation(0.65, 2.25, 0));
2965 pointstrap[0] = 0.375;
2966 pointstrap[1] = 0.75;
2967 pointstrap[2] = 0.375;
2968 pointstrap[3] = -0.35;
2969 pointstrap[4] = -0.375;
2970 pointstrap[5] = -0.35;
2971 pointstrap[6] = -0.375;
2972 pointstrap[7] = 0.35;
2974 pointstrap[8] = 0.375;
2975 pointstrap[9] = 0.75;
2976 pointstrap[10] = 0.375;
2977 pointstrap[11] = -0.35;
2978 pointstrap[12] = -0.375;
2979 pointstrap[13] = -0.35;
2980 pointstrap[14] = -0.375;
2981 pointstrap[15] = 0.35;
2983 auto* clotrap =
new TGeoArb8(
"clotrap", 0.25, pointstrap);
2984 auto* clotrapv =
new TGeoVolume(
"TPC_clotrapv", clotrap, m6);
2986 oclamp->AddNode(clotrapv, 1,
new TGeoTranslation(-0.625, -2.75, 0.35));
2987 oclamp->AddNode(clotrapv, 2,
new TGeoTranslation(-0.625, -2.75, -0.35));
2988 oclamp->AddNode(clotrapv, 3,
new TGeoCombiTrans(-0.625, 2.75, 0.35, clamprot));
2989 oclamp->AddNode(clotrapv, 4,
new TGeoCombiTrans(-0.625, 2.75, -0.35, clamprot));
2991 auto* clampo3 =
new TGeoBBox(
"clampo3", 1.6, 0.45, .1);
2992 auto* clampo3v =
new TGeoVolume(
"TPC_clampo3v", clampo3, m6);
2994 oclamp->AddNode(clampo3v, 1,
new TGeoTranslation(-1.85, 2.625, 0.));
2995 oclamp->AddNode(clampo3v, 2,
new TGeoTranslation(-1.85, -2.625, 0));
2997 auto* clampo4 =
new TGeoTubeSeg(
"clampo4", 2.2, 3.1, 0.1, 90., 270.);
2998 auto* clampo4v =
new TGeoVolume(
"TPC_clampo4v", clampo4, m6);
3000 oclamp->AddNode(clampo4v, 1,
new TGeoTranslation(-3.45, 0., 0.));
3004 TGeoRotation rot102(
"rot102");
3005 rot102.RotateY(-90.);
3007 for (Int_t
i = 0;
i < 18;
i++) {
3010 angle = TMath::DegToRad() * 20. * (Double_t)
i;
3016 auto* rot12 =
new TGeoRotation();
3017 rot12->RotateZ(-90.0 +
i * 20.);
3018 v9->AddNode(tpcihpl,
i + 1,
new TGeoCombiTrans(
x,
y, 0., rot12));
3021 rotrod.RotateZ(-90. +
i * 20.);
3022 rotrod1[0] =
new TGeoRotation();
3023 rotpos[0] =
new TGeoRotation();
3025 rotrod1[0]->RotateZ(90. +
i * 20.);
3026 *rotpos[0] = refl * rotrod;
3027 v9->AddNode(tpcrrod, 1,
new TGeoCombiTrans(
x,
y,
z, rotrod1[0]));
3028 v9->AddNode(tpcrrod, 2,
new TGeoCombiTrans(
x,
y, -
z, rotpos[0]));
3030 v9->AddNode(tpcmrod,
i + 1,
new TGeoTranslation(
x,
y,
z));
3031 v9->AddNode(tpcmrod,
i + 19,
new TGeoCombiTrans(
x,
y, -
z,
ref));
3039 rot12 =
new TGeoRotation();
3040 rot12->RotateZ(
i * 20.);
3043 v9->AddNode(iclamp, 7 *
i + 1,
new TGeoCombiTrans(
x,
y, 5.25, rot12));
3044 v9->AddNode(iclamp, 7 *
i + 2,
new TGeoCombiTrans(
x,
y, 38.25, rot12));
3045 v9->AddNode(iclamp, 7 *
i + 3,
new TGeoCombiTrans(
x,
y, 80.25, rot12));
3046 v9->AddNode(iclamp, 7 *
i + 4,
new TGeoCombiTrans(
x,
y, 122.25, rot12));
3047 v9->AddNode(iclamp, 7 *
i + 5,
new TGeoCombiTrans(
x,
y, 164.25, rot12));
3048 v9->AddNode(iclamp, 7 *
i + 6,
new TGeoCombiTrans(
x,
y, 206.25, rot12));
3049 v9->AddNode(iclamp, 7 *
i + 7,
new TGeoCombiTrans(
x,
y, 246.75, rot12));
3051 v9->AddNode(iclamp, 7 *
i + 127,
new TGeoCombiTrans(
x,
y, -5.25, rot12));
3052 v9->AddNode(iclamp, 7 *
i + 128,
new TGeoCombiTrans(
x,
y, -38.25, rot12));
3053 v9->AddNode(iclamp, 7 *
i + 129,
new TGeoCombiTrans(
x,
y, -80.25, rot12));
3054 v9->AddNode(iclamp, 7 *
i + 130,
new TGeoCombiTrans(
x,
y, -122.25, rot12));
3055 v9->AddNode(iclamp, 7 *
i + 131,
new TGeoCombiTrans(
x,
y, -164.25, rot12));
3056 v9->AddNode(iclamp, 7 *
i + 132,
new TGeoCombiTrans(
x,
y, -206.25, rot12));
3057 v9->AddNode(iclamp, 7 *
i + 133,
new TGeoCombiTrans(
x,
y, -246.75, rot12));
3069 auto* rot33 =
new TGeoRotation();
3070 rot33->RotateZ(-90 +
i * 20.);
3072 v9->AddNode(tpcohpl,
i + 1,
new TGeoCombiTrans(
x,
y, 0., rot33));
3074 Double_t xxx = 256.297 * TMath::Cos((
i * 20. + 10.) * TMath::DegToRad());
3075 Double_t yyy = 256.297 * TMath::Sin((
i * 20. + 10.) * TMath::DegToRad());
3077 TGeoRotation rot101(
"rot101");
3078 rot101.RotateZ(90. +
i * 20. + 10.);
3079 auto* rot103 =
new TGeoRotation(
"rot103");
3080 *rot103 = rot101 * rot102;
3082 auto* trh100 =
new TGeoCombiTrans(xxx, yyy, 0., rot103);
3086 v9->AddNode(tpcmmh, 1, trh100);
3089 v9->AddNode(tpcomh,
i + 1, trh100);
3094 rotrod.RotateZ(90. +
i * 20.);
3095 rotrod1[1] =
new TGeoRotation();
3096 rotpos[1] =
new TGeoRotation();
3097 rotrod1[1]->RotateZ(90. +
i * 20.);
3098 *rotpos[1] = refl * rotrod;
3099 v9->AddNode(tpcrrod, 3,
new TGeoCombiTrans(
x,
y,
z, rotrod1[1]));
3100 v9->AddNode(tpcrrod, 4,
new TGeoCombiTrans(
x,
y, -
z, rotpos[1]));
3102 v9->AddNode(tpcmrod,
i + 37,
new TGeoTranslation(
x,
y,
z));
3103 v9->AddNode(tpcmrod,
i + 55,
new TGeoCombiTrans(
x,
y, -
z,
ref));
3106 v9->AddNode(hvrv, 1,
new TGeoTranslation(
x,
y,
z + 0.7));
3114 rot12 =
new TGeoRotation();
3115 rot12->RotateZ(
i * 20.);
3118 v9->AddNode(oclamp, 7 *
i + 1,
new TGeoCombiTrans(
x,
y, 5.25, rot12));
3119 v9->AddNode(oclamp, 7 *
i + 2,
new TGeoCombiTrans(
x,
y, 38.25, rot12));
3120 v9->AddNode(oclamp, 7 *
i + 3,
new TGeoCombiTrans(
x,
y, 80.25, rot12));
3121 v9->AddNode(oclamp, 7 *
i + 4,
new TGeoCombiTrans(
x,
y, 122.25, rot12));
3122 v9->AddNode(oclamp, 7 *
i + 5,
new TGeoCombiTrans(
x,
y, 164.25, rot12));
3123 v9->AddNode(oclamp, 7 *
i + 6,
new TGeoCombiTrans(
x,
y, 206.25, rot12));
3124 v9->AddNode(oclamp, 7 *
i + 7,
new TGeoCombiTrans(
x,
y, 246.75, rot12));
3126 v9->AddNode(oclamp, 7 *
i + 127,
new TGeoCombiTrans(
x,
y, -5.25, rot12));
3127 v9->AddNode(oclamp, 7 *
i + 128,
new TGeoCombiTrans(
x,
y, -38.25, rot12));
3128 v9->AddNode(oclamp, 7 *
i + 129,
new TGeoCombiTrans(
x,
y, -80.25, rot12));
3129 v9->AddNode(oclamp, 7 *
i + 130,
new TGeoCombiTrans(
x,
y, -122.25, rot12));
3130 v9->AddNode(oclamp, 7 *
i + 131,
new TGeoCombiTrans(
x,
y, -164.25, rot12));
3131 v9->AddNode(oclamp, 7 *
i + 132,
new TGeoCombiTrans(
x,
y, -206.25, rot12));
3132 v9->AddNode(oclamp, 7 *
i + 133,
new TGeoCombiTrans(
x,
y, -246.75, rot12));
3136 TGeoVolume* alice = gGeoManager->GetVolume(
"barrel");
3137 alice->AddNode(
v1, 1,
new TGeoTranslation(0., 30., 0.));
3141void Detector::LoadGeometryFromFile()
3144 if (mGeoFileName.IsNull()) {
3145 LOG(fatal) <<
"TPC geometry file name not set";
3149 TFile* fGeoFile = TFile::Open(mGeoFileName);
3150 if (!fGeoFile || !fGeoFile->IsOpen() || fGeoFile->IsZombie()) {
3151 LOG(fatal) <<
"Could not open TPC geometry file '" << mGeoFileName <<
"'";
3155 TGeoVolume* tpcVolume =
dynamic_cast<TGeoVolume*
>(fGeoFile->Get(
"TPC_M"));
3157 LOG(fatal) <<
"Could not retrieve TPC geometry from file '" << mGeoFileName <<
"'";
3161 LOG(info) <<
"Loaded TPC geometry from file '" << mGeoFileName <<
"'";
3162 TGeoVolume* alice = gGeoManager->GetVolume(
"barrel");
3163 alice->AddNode(tpcVolume, 1,
new TGeoTranslation(0., 30., 0.));
3166void Detector::defineSensitiveVolumes()
3168 TGeoManager* geoManager = gGeoManager;
3169 TGeoVolume*
v =
nullptr;
3173 const Int_t nSensitive = 1;
3174 const char* volumeNames[nSensitive] = {
"TPC_Drift"};
3177 for (Int_t ivol = 0; ivol < nSensitive; ++ivol) {
3178 TString volumeName = volumeNames[ivol];
3179 v = geoManager->GetVolume(volumeName.Data());
3181 LOG(error) <<
"Could not find volume '" << volumeName <<
"'";
3186 AddSensitiveVolume(
v);
3190 auto vmc = TVirtualMC::GetMC();
3191 if (strcmp(vmc->GetName(),
"TFluka") == 0) {
3192 LOG(info) <<
"Setting special FLUKA parameters for TPC Driftgas";
3194 Int_t
index = mgr.getMediumID(
"TPC", kDriftGas2);
3195 vmc->Gstpar(
index,
"PRIMIO_E", 20.77);
3196 vmc->Gstpar(
index,
"PRIMIO_N", 14.35);
3197 vmc->Gstpar(
index,
"LOSS", 14);
3198 vmc->Gstpar(
index,
"STRA", 4);
3204 static thread_local Double_t
n = 0;
3205 static thread_local Double_t c1 = 0;
3206 static thread_local Double_t c2 = 0;
3207 static thread_local Double_t b1 = 0;
3208 static thread_local Double_t b2 = 0;
3212 }
else if (k >= 0.4 && k < 4) {
3213 n = 1. / k + (k - 0.4) / k / 3.6;
3214 }
else if (k >= 4.) {
3215 n = 1. / TMath::Sqrt(k);
3219 c1 = (k < 0.4) ? 0 : b1 * (TMath::Log(b1) - 1.) / 2.;
3220 c2 = b2 * (TMath::Log(b2) - 1.) / 2.;
3225 Double_t nu1 = gRandom->Rndm();
3226 Double_t nu2 = gRandom->Rndm();
3227 Double_t w1 = c1 + TMath::Log(nu1);
3228 Double_t w2 = c2 + TMath::Log(nu2);
3229 y =
n * (b1 * w2 - b2 * w1);
3234 if (TMath::Log(
y) >=
x) {
3238 return TMath::Exp(
x);
3245 name.Form(
"%sHitsShiftedSector%d", GetName(), probe);
3246 return std::string(
name.Data());
3248 return std::string();