56 float aCer[2] = {26.981538, 15.9994};
57 float zCer[2] = {13., 8.};
58 float wCer[2] = {0.5294, 0.4706};
62 float aAir[4] = {12.0107, 14.0067, 15.9994, 39.948};
63 float zAir[4] = {6., 7., 8., 18.};
64 float wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
65 float dAir = 1.20479E-3;
68 float aWater[2] = {1.00794, 15.9994};
69 float zWater[2] = {1., 8.};
70 float wWater[2] = {0.111894, 0.888106};
74 float aSiO2[2] = {28.0855, 15.9990};
75 float zSiO2[2] = {14., 8.};
76 float wSiO2[2] = {0.467, 0.533};
80 float aPolyethylene[2] = {12.01, 1.};
81 float zPolyethylene[2] = {6., 1.};
82 float wPolyethylene[2] = {.33, .67};
85 int nPolyurethane = 4;
86 float aPolyurethane[4] = {1.00794, 14.010, 12.0107, 15.9994};
87 float zPolyurethane[4] = {1.0, 7.0, 6.0, 8.0};
88 float wPolyurethane[4] = {0.017077588, 0.237314387, 0.203327619, 0.542280405};
89 float dPolyurethane = 1.25;
94 float aAl5083[9] = {54.938, 55.845, 63.546, 24.305, 28.086, 65.38, 51.996, 47.867, 26.982};
95 float zAl5083[9] = {25., 26., 29., 12., 14., 30., 24., 22., 13.};
97 float wAl5083[9] = {0.007, 0.004, 0.001, 0.0445, 0.004, 0.0025, 0.0015, 0.0015, 0.934};
98 float dAl5083 = 2.650;
102 float aAlBeMet[2] = {26.982, 9.012};
103 float zAlBeMet[2] = {13., 4.};
104 float wAlBeMet[2] = {0.38, 0.62};
105 float dAlBeMet = 2.071;
107 matmgr.Mixture(
"ALICE3_TRKSERVICES", 66,
"CERAMIC", aCer, zCer, dCer, 2, wCer);
108 matmgr.Mixture(
"ALICE3_TRKSERVICES", 68,
"AIR", aAir, zAir, dAir, 4, wAir);
109 matmgr.Mixture(
"ALICE3_TRKSERVICES", 69,
"POLYETHYLENE", aPolyethylene, zPolyethylene, .95, 2, wPolyethylene);
110 matmgr.Mixture(
"ALICE3_TRKSERVICES", 70,
"POLYURETHANE", aPolyurethane, zPolyurethane, dPolyurethane, nPolyurethane, wPolyurethane);
111 matmgr.Mixture(
"ALICE3_TRKSERVICES", 71,
"SILICONDIOXIDE", aSiO2, zSiO2, dSiO2, 2, wSiO2);
112 matmgr.Mixture(
"ALICE3_TRKSERVICES", 72,
"WATER", aWater, zWater, dWater, 2, wWater);
113 matmgr.Material(
"ALICE3_TRKSERVICES", 67,
"COPPER", 63.546, 29, 8.96, 1.43, 15.1);
114 matmgr.Material(
"ALICE3_TRKSERVICES", 73,
"BERYLLIUM", 9.01, 4., 1.848, 35.3, 36.7);
115 matmgr.Mixture(
"ALICE3_TRKSERVICES", 74,
"ALUMINIUM5083", aAl5083, zAl5083, dAl5083, 9, wAl5083);
116 matmgr.Mixture(
"ALICE3_TRKSERVICES", 75,
"ALUMINIUMBERYLLIUMMETAL", aAlBeMet, zAlBeMet, dAlBeMet, 2, wAlBeMet);
117 matmgr.Material(
"ALICE3_TRKSERVICES", 76,
"CARBONFIBERM55J6K", 12.0107, 6, 1.92, 999, 999);
119 matmgr.Medium(
"ALICE3_TRKSERVICES", 1,
"CERAMIC", 66, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
120 matmgr.Medium(
"ALICE3_TRKSERVICES", 2,
"COPPER", 67, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
121 matmgr.Medium(
"ALICE3_TRKSERVICES", 3,
"AIR", 68, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
122 matmgr.Medium(
"ALICE3_TRKSERVICES", 4,
"POLYETHYLENE", 69, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
123 matmgr.Medium(
"ALICE3_TRKSERVICES", 5,
"POLYURETHANE", 70, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
124 matmgr.Medium(
"ALICE3_TRKSERVICES", 6,
"SILICONDIOXIDE", 71, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
125 matmgr.Medium(
"ALICE3_TRKSERVICES", 7,
"WATER", 72, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
126 matmgr.Medium(
"ALICE3_TRKSERVICES", 8,
"BERYLLIUM", 73, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
127 matmgr.Medium(
"ALICE3_TRKSERVICES", 9,
"ALUMINIUM5083", 74, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
128 matmgr.Medium(
"ALICE3_TRKSERVICES", 10,
"ALUMINIUMBERYLLIUMMETAL", 75, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
129 matmgr.Medium(
"ALICE3_TRKSERVICES", 11,
"CARBONFIBERM55J6K", 76, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
187 TGeoMedium* medSiO2 = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_SILICONDIOXIDE");
188 TGeoMedium* medPE = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYETHYLENE");
189 TGeoMedium* medCu = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_COPPER");
190 TGeoMedium* medPU = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYURETHANE");
191 TGeoMedium* medH2O = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_WATER");
193 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
195 float siO2FiberThick = 0.5 * 0.212;
196 float peFiberThick = 0.5 * 0.212;
198 float rMinInnerServices = 68.5f;
199 float zLengthInnerServices = 201.f;
200 float translation = (
int)orientation * (149.f + zLengthInnerServices / 2);
202 TGeoTube* outerDisksFiberSIO2 =
new TGeoTube(
"TRK_OUTERDISKS_FIBER_SIO2sh", rMinInnerServices, rMinInnerServices + siO2FiberThick, zLengthInnerServices / 2);
203 TGeoTube* outerDisksFiberPE =
new TGeoTube(
"TRK_OUTERDISKS_FIBER_PEsh", rMinInnerServices + siO2FiberThick, rMinInnerServices + siO2FiberThick + peFiberThick, zLengthInnerServices / 2);
204 rMinInnerServices += siO2FiberThick + peFiberThick;
205 TGeoVolume* outerDisksFiberSIO2Volume =
new TGeoVolume(
"TRK_OUTERDISKS_FIBER_SIO2", outerDisksFiberSIO2, medSiO2);
206 TGeoVolume* outerDisksFiberPEVolume =
new TGeoVolume(
"TRK_OUTERDISKS_FIBER_PE", outerDisksFiberPE, medPE);
207 outerDisksFiberSIO2Volume->SetLineColor(kGray);
208 outerDisksFiberPEVolume->SetLineColor(kGray);
209 auto* combiTrans =
new TGeoCombiTrans(0, 0, translation,
nullptr);
210 motherVolume->AddNode(outerDisksFiberSIO2Volume, 1, combiTrans);
211 motherVolume->AddNode(outerDisksFiberPEVolume, 1, combiTrans);
214 float cuPowerThick = 0.09 * 1.186;
215 float pePowerThick = 0.91 * 1.186;
217 TGeoTube* outerDisksPowerCu =
new TGeoTube(
"TRK_OUTERDISKS_POWER_CUsh", rMinInnerServices, rMinInnerServices + cuPowerThick, zLengthInnerServices / 2);
218 TGeoTube* outerDisksPowerPE =
new TGeoTube(
"TRK_OUTERDISKS_POWER_PEsh", rMinInnerServices + cuPowerThick, rMinInnerServices + cuPowerThick + pePowerThick, zLengthInnerServices / 2);
219 rMinInnerServices += cuPowerThick + pePowerThick;
220 TGeoVolume* outerDisksPowerCuVolume =
new TGeoVolume(
"TRK_OUTERDISKS_POWER_CU", outerDisksPowerCu, medCu);
221 TGeoVolume* outerDisksPowerPEVolume =
new TGeoVolume(
"TRK_OUTERDISKS_POWER_PE", outerDisksPowerPE, medPE);
222 outerDisksPowerCuVolume->SetLineColor(kGray);
223 outerDisksPowerPEVolume->SetLineColor(kGray);
224 motherVolume->AddNode(outerDisksPowerCuVolume, 1, combiTrans);
225 motherVolume->AddNode(outerDisksPowerPEVolume, 1, combiTrans);
228 float puCoolingThick = 0.56 * 0.647;
229 float h2oCoolingThick = 0.44 * 0.647;
231 TGeoTube* outerDisksCoolingPU =
new TGeoTube(
"TRK_OUTERDISKS_COOLING_PUsh", rMinInnerServices, rMinInnerServices + puCoolingThick, zLengthInnerServices / 2);
232 TGeoTube* outerDisksCoolingH2O =
new TGeoTube(
"TRK_OUTERDISKS_COOLING_H2Osh", rMinInnerServices + puCoolingThick, rMinInnerServices + puCoolingThick + h2oCoolingThick, zLengthInnerServices / 2);
234 TGeoVolume* outerDisksCoolingPUVolume =
new TGeoVolume(
"TRK_OUTERDISKS_COOLING_PU", outerDisksCoolingPU, medPU);
235 TGeoVolume* outerDisksCoolingH2OVolume =
new TGeoVolume(
"TRK_OUTERDISKS_COOLING_H2O", outerDisksCoolingH2O, medH2O);
236 outerDisksCoolingPUVolume->SetLineColor(kGray);
237 outerDisksCoolingH2OVolume->SetLineColor(kGray);
238 motherVolume->AddNode(outerDisksCoolingPUVolume, 1, combiTrans);
239 motherVolume->AddNode(outerDisksCoolingH2OVolume, 1, combiTrans);
248 TGeoMedium* medSiO2 = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_SILICONDIOXIDE");
249 TGeoMedium* medPE = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYETHYLENE");
250 TGeoMedium* medCu = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_COPPER");
251 TGeoMedium* medPU = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYURETHANE");
252 TGeoMedium* medH2O = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_WATER");
253 TGeoMedium* medCFiber = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_CARBONFIBERM55J6K");
256 float siO2FiberThick = 0.5 * 0.307;
257 float peFiberThick = 0.5 * 0.307;
258 float puCoolingThick = 0.56 * 0.474;
259 float h2oCoolingThick = 0.44 * 0.474;
260 float cuPowerThick = 0.09 * 1.09;
261 float pePowerThick = 0.91 * 1.09;
262 const float totalThickness = siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick + puCoolingThick + h2oCoolingThick;
265 float rMinMiddleCarbonSupport = 34.8f;
266 float rMaxMiddleCarbonSupport = 35.f;
267 const float zLengthMiddleCarbon = 62.f;
268 TGeoTube* middleBarrelCarbonSupport =
new TGeoTube(
"TRK_MID_CARBONSUPPORTsh", rMinMiddleCarbonSupport, rMaxMiddleCarbonSupport, zLengthMiddleCarbon);
269 TGeoVolume* middleBarrelCarbonSupportVolume =
new TGeoVolume(
"TRK_MID_CARBONSUPPORT", middleBarrelCarbonSupport, medCFiber);
270 middleBarrelCarbonSupportVolume->SetLineColor(kGray);
271 LOGP(info,
"Creating carbon fiber support for Middle Tracker");
272 motherVolume->AddNode(middleBarrelCarbonSupportVolume, 1,
nullptr);
275 float rMinMiddleServices = 35.f;
276 float rMinMiddleBarrel = rMinMiddleServices;
277 const float zLengthCylinderMiddleServices = 40.5f;
278 const float zLengthMiddleServices = 143.f;
279 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
280 rMinMiddleServices = 35.f;
281 LOGP(info,
"Building services for Middle Tracker rminMiddleServices");
282 TGeoTube* middleBarrelFiberSIO2 =
new TGeoTube(Form(
"TRK_MID_FIBER_SIO2sh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + siO2FiberThick, zLengthCylinderMiddleServices );
283 rMinMiddleServices += siO2FiberThick;
284 TGeoTube* middleBarrelFiberPE =
new TGeoTube(Form(
"TRK_MID_FIBER_PEsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + peFiberThick, zLengthCylinderMiddleServices );
285 rMinMiddleServices += peFiberThick;
286 TGeoVolume* middleBarrelFiberSIO2Volume =
new TGeoVolume(Form(
"TRK_MID_FIBER_SIO2_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelFiberSIO2, medSiO2);
287 TGeoVolume* middleBarrelFiberPEVolume =
new TGeoVolume(Form(
"TRK_MID_FIBER_PE_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelFiberPE, medPE);
288 middleBarrelFiberSIO2Volume->SetLineColor(kGray);
289 middleBarrelFiberPEVolume->SetLineColor(kGray);
290 auto* combiTrans =
new TGeoCombiTrans(0, 0, (
int)orientation * (zLengthMiddleServices - zLengthCylinderMiddleServices),
nullptr);
291 motherVolume->AddNode(middleBarrelFiberSIO2Volume, 1, combiTrans);
292 motherVolume->AddNode(middleBarrelFiberPEVolume, 1, combiTrans);
295 TGeoTube* middleBarrelPowerCu =
new TGeoTube(Form(
"TRK_MID_POWER_CUsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + cuPowerThick, zLengthCylinderMiddleServices );
296 rMinMiddleServices += cuPowerThick;
297 TGeoTube* middleBarrelPowerPE =
new TGeoTube(Form(
"TRK_MID_POWER_PEsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + pePowerThick, zLengthCylinderMiddleServices );
298 rMinMiddleServices += pePowerThick;
299 TGeoVolume* middleBarrelPowerCuVolume =
new TGeoVolume(Form(
"TRK_MID_POWER_CU_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelPowerCu, medCu);
300 TGeoVolume* middleBarrelPowerPEVolume =
new TGeoVolume(Form(
"TRK_MID_POWER_PE_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelPowerPE, medPE);
301 middleBarrelPowerCuVolume->SetLineColor(kGray);
302 middleBarrelPowerPEVolume->SetLineColor(kGray);
303 motherVolume->AddNode(middleBarrelPowerCuVolume, 1, combiTrans);
304 motherVolume->AddNode(middleBarrelPowerPEVolume, 1, combiTrans);
307 TGeoTube* middleBarrelCoolingPU =
new TGeoTube(Form(
"TRK_MID_COOLING_PUsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + puCoolingThick, zLengthCylinderMiddleServices );
308 rMinMiddleServices += puCoolingThick;
309 TGeoTube* middleBarrelCoolingH2O =
new TGeoTube(Form(
"TRK_MID_COOLING_H2Osh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + h2oCoolingThick, zLengthCylinderMiddleServices );
310 rMinMiddleServices = rMinMiddleServices += h2oCoolingThick;
311 TGeoVolume* middleBarrelCoolingPUVolume =
new TGeoVolume(Form(
"TRK_MID_COOLING_PU_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelCoolingPU, medPU);
312 TGeoVolume* middleBarrelCoolingH2OVolume =
new TGeoVolume(Form(
"TRK_MID_COOLING_H2O_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelCoolingH2O, medH2O);
313 middleBarrelCoolingPUVolume->SetLineColor(kGray);
314 middleBarrelCoolingH2OVolume->SetLineColor(kGray);
315 motherVolume->AddNode(middleBarrelCoolingPUVolume, 1, combiTrans);
316 motherVolume->AddNode(middleBarrelCoolingH2OVolume, 1, combiTrans);
319 const float rMinMiddleBarrelDisk = 5.68f;
320 const float rMaxMiddleBarrelDisk = 35.f;
321 const float zLengthMiddleBarrel = 62.f;
322 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
323 TGeoTube* middleBarrelConnDiskSIO2 =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_SIO2sh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, siO2FiberThick);
324 TGeoTube* middleBarrelConnDiskPE =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_PEsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, peFiberThick);
325 TGeoVolume* middleBarrelConnDiskSIO2Volume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_SIO2_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskSIO2, medSiO2);
326 TGeoVolume* middleBarrelConnDiskPEVolume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_PE_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskPE, medPE);
327 middleBarrelConnDiskSIO2Volume->SetLineColor(kGray);
328 middleBarrelConnDiskPEVolume->SetLineColor(kGray);
329 auto* rot =
new TGeoRotation(
"", 0, 0, 180);
330 auto* combiTransSIO2 =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick / 2 + zLengthMiddleBarrel), rot);
331 auto* combiTransPE =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick / 2 + zLengthMiddleBarrel), rot);
332 motherVolume->AddNode(middleBarrelConnDiskSIO2Volume, 1, combiTransSIO2);
333 motherVolume->AddNode(middleBarrelConnDiskPEVolume, 1, combiTransPE);
335 TGeoTube* middleBarrelConnDiskCu =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_CUsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, cuPowerThick);
336 TGeoTube* middleBarrelConnDiskPEPower =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_PEsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, pePowerThick);
337 TGeoVolume* middleBarrelConnDiskCuVolume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_CU_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskCu, medCu);
338 TGeoVolume* middleBarrelConnDiskPEPowerVolume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_PE_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskPEPower, medPE);
339 middleBarrelConnDiskCuVolume->SetLineColor(kGray);
340 middleBarrelConnDiskPEPowerVolume->SetLineColor(kGray);
341 auto* combiTransCu =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick / 2 + zLengthMiddleBarrel), rot);
342 auto* combiTransPEPower =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick / 2 + zLengthMiddleBarrel), rot);
343 motherVolume->AddNode(middleBarrelConnDiskCuVolume, 1, combiTransCu);
344 motherVolume->AddNode(middleBarrelConnDiskPEPowerVolume, 1, combiTransPEPower);
346 TGeoTube* middleBarrelConnDiskPU =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_PUsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, puCoolingThick);
347 TGeoTube* middleBarrelConnDiskH2O =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_H2Osh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, h2oCoolingThick);
348 TGeoVolume* middleBarrelConnDiskPUVolume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_PU_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskPU, medPU);
349 TGeoVolume* middleBarrelConnDiskH2OVolume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_H2O_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskH2O, medH2O);
350 middleBarrelConnDiskPUVolume->SetLineColor(kGray);
351 middleBarrelConnDiskH2OVolume->SetLineColor(kGray);
352 motherVolume->AddNode(middleBarrelConnDiskPUVolume, 1, combiTransCu);
353 motherVolume->AddNode(middleBarrelConnDiskH2OVolume, 1, combiTransPEPower);
357 float rMaxMiddleServicesBarFwd = 74.5f + siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick + puCoolingThick + h2oCoolingThick;
358 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
360 TGeoTube* middleBarFwdFiberSIO2 =
new TGeoTube(
"TRK_MIDBARFWD_FIBER_SIO2sh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, siO2FiberThick);
361 TGeoTube* middleBarFwdFiberPE =
new TGeoTube(
"TRK_MIDBARFWD_FIBER_PEsh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, peFiberThick);
362 TGeoVolume* middleBarFwdFiberSIO2Volume =
new TGeoVolume(
"TRK_MIDBARFWD_FIBER_SIO2", middleBarFwdFiberSIO2, medSiO2);
363 TGeoVolume* middleBarFwdFiberPEVolume =
new TGeoVolume(
"TRK_MIDBARFWD_FIBER_PE", middleBarFwdFiberPE, medPE);
364 middleBarFwdFiberSIO2Volume->SetLineColor(kGray);
365 middleBarFwdFiberPEVolume->SetLineColor(kGray);
366 auto* rot =
new TGeoRotation(
"", 0, 0, 180);
367 auto* combiTransSIO2 =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick / 2 + zLengthMiddleServices), rot);
368 auto* combiTransPE =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick / 2 + zLengthMiddleServices), rot);
369 motherVolume->AddNode(middleBarFwdFiberSIO2Volume, 1, combiTransSIO2);
370 motherVolume->AddNode(middleBarFwdFiberPEVolume, 1, combiTransPE);
373 TGeoTube* middleBarFwdPowerCu =
new TGeoTube(
"TRK_MIDBARFWD_POWER_CUsh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, cuPowerThick);
374 TGeoTube* middleBarFwdPowerPE =
new TGeoTube(
"TRK_MIDBARFWD_POWER_PEsh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, pePowerThick);
375 TGeoVolume* middleBarFwdPowerCuVolume =
new TGeoVolume(
"TRK_MIDBARFWD_POWER_CU", middleBarFwdPowerCu, medCu);
376 TGeoVolume* middleBarFwdPowerPEVolume =
new TGeoVolume(
"TRK_MIDBARFWD_POWER_PE", middleBarFwdPowerPE, medPE);
377 middleBarFwdPowerCuVolume->SetLineColor(kGray);
378 middleBarFwdPowerPEVolume->SetLineColor(kGray);
379 auto* combiTransCu =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick / 2 + zLengthMiddleServices), rot);
380 auto* combiTransPEPower =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick / 2 + zLengthMiddleServices), rot);
381 motherVolume->AddNode(middleBarFwdPowerCuVolume, 1, combiTransCu);
382 motherVolume->AddNode(middleBarFwdPowerPEVolume, 1, combiTransPEPower);
385 TGeoTube* middleBarFwdCoolingPU =
new TGeoTube(
"TRK_MIDBARFWD_COOLING_PUsh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, puCoolingThick);
386 TGeoTube* middleBarFwdCoolingH2O =
new TGeoTube(
"TRK_MIDBARFWD_COOLING_H2Osh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, h2oCoolingThick);
387 TGeoVolume* middleBarFwdCoolingPUVolume =
new TGeoVolume(
"TRK_MIDBARFWD_COOLING_PU", middleBarFwdCoolingPU, medPU);
388 TGeoVolume* middleBarFwdCoolingH2OVolume =
new TGeoVolume(
"TRK_MIDBARFWD_COOLING_H2O", middleBarFwdCoolingH2O, medH2O);
389 middleBarFwdCoolingPUVolume->SetLineColor(kGray);
390 middleBarFwdCoolingH2OVolume->SetLineColor(kGray);
391 auto* combiTransCoolingPU =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick + puCoolingThick / 2 + zLengthMiddleServices), rot);
392 auto* combiTransCoolingH2O =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick + puCoolingThick + h2oCoolingThick / 2 + zLengthMiddleServices), rot);
393 motherVolume->AddNode(middleBarFwdCoolingPUVolume, 1, combiTransCoolingPU);
394 motherVolume->AddNode(middleBarFwdCoolingH2OVolume, 1, combiTransCoolingH2O);
398 const float zLengthMiddleServicesFwd = 350.f - (143.f + totalThickness);
400 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
402 float siO2FiberThick = 0.5 * 0.307;
403 float peFiberThick = 0.5 * 0.307;
404 float rMinMiddleServicesFwd = 74.5f;
406 float translation = (
int)orientation * (143.f + totalThickness + zLengthMiddleServicesFwd / 2);
408 TGeoTube* middleFwdFiberSIO2 =
new TGeoTube(
"TRK_MIDFWD_FIBER_SIO2sh", rMinMiddleServicesFwd, rMinMiddleServicesFwd + siO2FiberThick, zLengthMiddleServicesFwd / 2);
409 TGeoTube* middleFwdFiberPE =
new TGeoTube(
"TRK_MIDFWD_FIBER_PEsh", rMinMiddleServicesFwd + siO2FiberThick, rMinMiddleServicesFwd + siO2FiberThick + peFiberThick, zLengthMiddleServicesFwd / 2);
410 rMinMiddleServicesFwd += siO2FiberThick + peFiberThick;
411 TGeoVolume* middleFwdFiberSIO2Volume =
new TGeoVolume(
"TRK_MIDFWD_FIBER_SIO2", middleFwdFiberSIO2, medSiO2);
412 TGeoVolume* middleFwdFiberPEVolume =
new TGeoVolume(
"TRK_MIDFWD_FIBER_PE", middleFwdFiberPE, medPE);
413 middleFwdFiberSIO2Volume->SetLineColor(kGray);
414 middleFwdFiberPEVolume->SetLineColor(kGray);
415 auto* combiTrans =
new TGeoCombiTrans(0, 0, translation,
nullptr);
416 motherVolume->AddNode(middleFwdFiberSIO2Volume, 1, combiTrans);
417 motherVolume->AddNode(middleFwdFiberPEVolume, 1, combiTrans);
420 float cuPowerThick = 0.09 * 1.09;
421 float pePowerThick = 0.91 * 1.09;
423 TGeoTube* middleFwdPowerCu =
new TGeoTube(
"TRK_MIDFWD_POWER_CUsh", rMinMiddleServicesFwd, rMinMiddleServicesFwd + cuPowerThick, zLengthMiddleServicesFwd / 2);
424 TGeoTube* middleFwdPowerPE =
new TGeoTube(
"TRK_MIDFWD_POWER_PEsh", rMinMiddleServicesFwd + cuPowerThick, rMinMiddleServicesFwd + cuPowerThick + pePowerThick, zLengthMiddleServicesFwd / 2);
425 rMinMiddleServicesFwd += cuPowerThick + pePowerThick;
426 TGeoVolume* middleFwdPowerCuVolume =
new TGeoVolume(
"TRK_MIDFWD_POWER_CU", middleFwdPowerCu, medCu);
427 TGeoVolume* middleFwdPowerPEVolume =
new TGeoVolume(
"TRK_MIDFWD_POWER_PE", middleFwdPowerPE, medPE);
428 middleFwdPowerCuVolume->SetLineColor(kGray);
429 middleFwdPowerPEVolume->SetLineColor(kGray);
430 motherVolume->AddNode(middleFwdPowerCuVolume, 1, combiTrans);
431 motherVolume->AddNode(middleFwdPowerPEVolume, 1, combiTrans);
434 float puCoolingThick = 0.56 * 0.474;
435 float h2oCoolingThick = 0.44 * 0.474;
437 TGeoTube* middleFwdCoolingPU =
new TGeoTube(
"TRK_MIDFWD_COOLING_PUsh", rMinMiddleServicesFwd, rMinMiddleServicesFwd + puCoolingThick, zLengthMiddleServicesFwd / 2);
438 TGeoTube* middleFwdCoolingH2O =
new TGeoTube(
"TRK_MIDFWD_COOLING_H2Osh", rMinMiddleServicesFwd + puCoolingThick, rMinMiddleServicesFwd + puCoolingThick + h2oCoolingThick, zLengthMiddleServicesFwd / 2);
440 TGeoVolume* middleFwdCoolingPUVolume =
new TGeoVolume(
"TRK_MIDFWD_COOLING_PU", middleFwdCoolingPU, medPU);
441 TGeoVolume* middleFwdCoolingH2OVolume =
new TGeoVolume(
"TRK_MIDFWD_COOLING_H2O", middleFwdCoolingH2O, medH2O);
442 middleFwdCoolingPUVolume->SetLineColor(kGray);
443 middleFwdCoolingH2OVolume->SetLineColor(kGray);
444 motherVolume->AddNode(middleFwdCoolingPUVolume, 1, combiTrans);
445 motherVolume->AddNode(middleFwdCoolingH2OVolume, 1, combiTrans);
453 TGeoMedium* medSiO2 = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_SILICONDIOXIDE");
454 TGeoMedium* medPE = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYETHYLENE");
455 TGeoMedium* medCu = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_COPPER");
456 TGeoMedium* medPU = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYURETHANE");
457 TGeoMedium* medH2O = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_WATER");
460 const float siO2FiberThick = 0.5 * 0.269;
461 const float peFiberThick = 0.5 * 0.269;
463 const float zLengthOuterBarrelServices = 350.f;
465 TGeoTube* outerBarrelFiberSIO2 =
new TGeoTube(
"TRK_OUTERBARREL_FIBER_SIO2sh", rMinOuterBarrelServices, rMinOuterBarrelServices + siO2FiberThick, zLengthOuterBarrelServices);
466 TGeoTube* outerBarrelFiberPE =
new TGeoTube(
"TRK_OUTERBARREL_FIBER_PEsh", rMinOuterBarrelServices + siO2FiberThick, rMinOuterBarrelServices + siO2FiberThick + peFiberThick, zLengthOuterBarrelServices);
467 rMinOuterBarrelServices += siO2FiberThick + peFiberThick;
468 TGeoVolume* outerBarrelFiberSIO2Volume =
new TGeoVolume(
"TRK_OUTERBARREL_FIBER_SIO2", outerBarrelFiberSIO2, medSiO2);
469 TGeoVolume* outerBarrelFiberPEVolume =
new TGeoVolume(
"TRK_OUTERBARREL_FIBER_PE", outerBarrelFiberPE, medPE);
470 outerBarrelFiberSIO2Volume->SetLineColor(kGray);
471 outerBarrelFiberPEVolume->SetLineColor(kGray);
472 motherVolume->AddNode(outerBarrelFiberSIO2Volume, 1,
nullptr);
473 motherVolume->AddNode(outerBarrelFiberPEVolume, 1,
nullptr);
476 const float cuPowerThick = 0.09 * 0.430;
477 const float pePowerThick = 0.91 * 0.430;
479 TGeoTube* outerBarrelPowerCu =
new TGeoTube(
"TRK_OUTERBARREL_POWER_CUsh", rMinOuterBarrelServices, rMinOuterBarrelServices + cuPowerThick, zLengthOuterBarrelServices);
480 TGeoTube* outerBarrelPowerPE =
new TGeoTube(
"TRK_OUTERBARREL_POWER_PEsh", rMinOuterBarrelServices + cuPowerThick, rMinOuterBarrelServices + cuPowerThick + pePowerThick, zLengthOuterBarrelServices);
481 rMinOuterBarrelServices += cuPowerThick + pePowerThick;
482 TGeoVolume* outerBarrelPowerCuVolume =
new TGeoVolume(
"TRK_OUTERBARREL_POWER_CU", outerBarrelPowerCu, medCu);
483 TGeoVolume* outerBarrelPowerPEVolume =
new TGeoVolume(
"TRK_OUTERBARREL_POWER_PE", outerBarrelPowerPE, medPE);
484 outerBarrelPowerCuVolume->SetLineColor(kGray);
485 outerBarrelPowerPEVolume->SetLineColor(kGray);
486 motherVolume->AddNode(outerBarrelPowerCuVolume, 1,
nullptr);
487 motherVolume->AddNode(outerBarrelPowerPEVolume, 1,
nullptr);
490 const float puCoolingThick = 0.56 * 1.432;
491 const float h2oCoolingThick = 0.44 * 1.432;
493 TGeoTube* outerBarrelCoolingPU =
new TGeoTube(
"TRK_OUTERBARREL_COOLING_PUsh", rMinOuterBarrelServices, rMinOuterBarrelServices + puCoolingThick, zLengthOuterBarrelServices);
494 TGeoTube* outerBarrelCoolingH2O =
new TGeoTube(
"TRK_OUTERBARREL_COOLING_H2Osh", rMinOuterBarrelServices + puCoolingThick, rMinOuterBarrelServices + puCoolingThick + h2oCoolingThick, zLengthOuterBarrelServices);
496 TGeoVolume* outerBarrelCoolingPUVolume =
new TGeoVolume(
"TRK_OUTERBARREL_COOLING_PU", outerBarrelCoolingPU, medPU);
497 TGeoVolume* outerBarrelCoolingH2OVolume =
new TGeoVolume(
"TRK_OUTERBARREL_COOLING_H2O", outerBarrelCoolingH2O, medH2O);
498 outerBarrelCoolingPUVolume->SetLineColor(kGray);
499 outerBarrelCoolingH2OVolume->SetLineColor(kGray);
500 motherVolume->AddNode(outerBarrelCoolingPUVolume, 1,
nullptr);
501 motherVolume->AddNode(outerBarrelCoolingH2OVolume, 1,
nullptr);