49 float aCer[2] = {26.981538, 15.9994};
50 float zCer[2] = {13., 8.};
51 float wCer[2] = {0.5294, 0.4706};
55 float aAir[4] = {12.0107, 14.0067, 15.9994, 39.948};
56 float zAir[4] = {6., 7., 8., 18.};
57 float wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
58 float dAir = 1.20479E-3;
59 float dAir1 = 1.20479E-11;
62 float aWater[2] = {1.00794, 15.9994};
63 float zWater[2] = {1., 8.};
64 float wWater[2] = {0.111894, 0.888106};
68 float aSiO2[2] = {28.0855, 15.9990};
69 float zSiO2[2] = {14., 8.};
70 float wSiO2[2] = {0.467, 0.533};
74 float aPolyethylene[2] = {12.01, 1.};
75 float zPolyethylene[2] = {6., 1.};
76 float wPolyethylene[2] = {.33, .67};
79 int nPolyurethane = 4;
80 float aPolyurethane[4] = {1.00794, 14.010, 12.0107, 15.9994};
81 float zPolyurethane[4] = {1.0, 7.0, 6.0, 8.0};
82 float wPolyurethane[4] = {0.017077588, 0.237314387, 0.203327619, 0.542280405};
83 float dPolyurethane = 1.25;
88 float aAl5083[9] = {54.938, 55.845, 63.546, 24.305, 28.086, 65.38, 51.996, 47.867, 26.982};
89 float zAl5083[9] = {25., 26., 29., 12., 14., 30., 24., 22., 13.};
91 float wAl5083[9] = {0.007, 0.004, 0.001, 0.0445, 0.004, 0.0025, 0.0015, 0.0015, 0.934};
92 float dAl5083 = 2.650;
96 float aAlBeMet[2] = {26.982, 9.012};
97 float zAlBeMet[2] = {13., 4.};
98 float wAlBeMet[2] = {0.38, 0.62};
99 float dAlBeMet = 2.071;
101 matmgr.Mixture(
"ALICE3_TRKSERVICES", 66,
"CERAMIC", aCer, zCer, dCer, 2, wCer);
102 matmgr.Mixture(
"ALICE3_TRKSERVICES", 68,
"AIR", aAir, zAir, dAir, 4, wAir);
103 matmgr.Mixture(
"ALICE3_TRKSERVICES", 69,
"POLYETHYLENE", aPolyethylene, zPolyethylene, .95, 2, wPolyethylene);
104 matmgr.Mixture(
"ALICE3_TRKSERVICES", 70,
"POLYURETHANE", aPolyurethane, zPolyurethane, dPolyurethane, nPolyurethane, wPolyurethane);
105 matmgr.Mixture(
"ALICE3_TRKSERVICES", 71,
"SILICONDIOXIDE", aSiO2, zSiO2, dSiO2, 2, wSiO2);
106 matmgr.Mixture(
"ALICE3_TRKSERVICES", 72,
"WATER", aWater, zWater, dWater, 2, wWater);
107 matmgr.Material(
"ALICE3_TRKSERVICES", 67,
"COPPER", 63.546, 29, 8.96, 1.43, 15.1);
108 matmgr.Material(
"ALICE3_TRKSERVICES", 73,
"BERYLLIUM", 9.01, 4., 1.848, 35.3, 36.7);
109 matmgr.Mixture(
"ALICE3_TRKSERVICES", 74,
"ALUMINIUM5083", aAl5083, zAl5083, dAl5083, 9, wAl5083);
110 matmgr.Mixture(
"ALICE3_TRKSERVICES", 75,
"ALUMINIUMBERYLLIUMMETAL", aAlBeMet, zAlBeMet, dAlBeMet, 2, wAlBeMet);
111 matmgr.Material(
"ALICE3_TRKSERVICES", 76,
"CARBONFIBERM55J6K", 12.0107, 6, 1.92, 999, 999);
112 matmgr.Mixture(
"ALICE3_PIPE", 77,
"VACUUM", aAir, zAir, dAir1, 4, wAir);
114 matmgr.Medium(
"ALICE3_TRKSERVICES", 1,
"CERAMIC", 66, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
115 matmgr.Medium(
"ALICE3_TRKSERVICES", 2,
"COPPER", 67, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
116 matmgr.Medium(
"ALICE3_TRKSERVICES", 3,
"AIR", 68, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
117 matmgr.Medium(
"ALICE3_TRKSERVICES", 4,
"POLYETHYLENE", 69, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
118 matmgr.Medium(
"ALICE3_TRKSERVICES", 5,
"POLYURETHANE", 70, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
119 matmgr.Medium(
"ALICE3_TRKSERVICES", 6,
"SILICONDIOXIDE", 71, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
120 matmgr.Medium(
"ALICE3_TRKSERVICES", 7,
"WATER", 72, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
121 matmgr.Medium(
"ALICE3_TRKSERVICES", 8,
"BERYLLIUM", 73, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
122 matmgr.Medium(
"ALICE3_TRKSERVICES", 9,
"ALUMINIUM5083", 74, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
123 matmgr.Medium(
"ALICE3_TRKSERVICES", 10,
"ALUMINIUMBERYLLIUMMETAL", 75, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
124 matmgr.Medium(
"ALICE3_TRKSERVICES", 11,
"CARBONFIBERM55J6K", 76, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
125 matmgr.Medium(
"ALICE3_PIPE", 12,
"VACUUM", 77, 0, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
198 TGeoMedium* medSiO2 = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_SILICONDIOXIDE");
199 TGeoMedium* medPE = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYETHYLENE");
200 TGeoMedium* medCu = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_COPPER");
201 TGeoMedium* medPU = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYURETHANE");
202 TGeoMedium* medH2O = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_WATER");
204 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
206 float siO2FiberThick = 0.5 * 0.212;
207 float peFiberThick = 0.5 * 0.212;
209 float rMinInnerServices = 68.5f;
210 float zLengthInnerServices = 201.f;
211 float translation = (
int)orientation * (149.f + zLengthInnerServices / 2);
213 TGeoTube* outerDisksFiberSIO2 =
new TGeoTube(
"TRK_OUTERDISKS_FIBER_SIO2sh", rMinInnerServices, rMinInnerServices + siO2FiberThick, zLengthInnerServices / 2);
214 TGeoTube* outerDisksFiberPE =
new TGeoTube(
"TRK_OUTERDISKS_FIBER_PEsh", rMinInnerServices + siO2FiberThick, rMinInnerServices + siO2FiberThick + peFiberThick, zLengthInnerServices / 2);
215 rMinInnerServices += siO2FiberThick + peFiberThick;
216 TGeoVolume* outerDisksFiberSIO2Volume =
new TGeoVolume(
"TRK_OUTERDISKS_FIBER_SIO2", outerDisksFiberSIO2, medSiO2);
217 TGeoVolume* outerDisksFiberPEVolume =
new TGeoVolume(
"TRK_OUTERDISKS_FIBER_PE", outerDisksFiberPE, medPE);
218 outerDisksFiberSIO2Volume->SetLineColor(kGray);
219 outerDisksFiberPEVolume->SetLineColor(kGray);
220 auto* combiTrans =
new TGeoCombiTrans(0, 0, translation,
nullptr);
221 motherVolume->AddNode(outerDisksFiberSIO2Volume, 1, combiTrans);
222 motherVolume->AddNode(outerDisksFiberPEVolume, 1, combiTrans);
225 float cuPowerThick = 0.09 * 1.186;
226 float pePowerThick = 0.91 * 1.186;
228 TGeoTube* outerDisksPowerCu =
new TGeoTube(
"TRK_OUTERDISKS_POWER_CUsh", rMinInnerServices, rMinInnerServices + cuPowerThick, zLengthInnerServices / 2);
229 TGeoTube* outerDisksPowerPE =
new TGeoTube(
"TRK_OUTERDISKS_POWER_PEsh", rMinInnerServices + cuPowerThick, rMinInnerServices + cuPowerThick + pePowerThick, zLengthInnerServices / 2);
230 rMinInnerServices += cuPowerThick + pePowerThick;
231 TGeoVolume* outerDisksPowerCuVolume =
new TGeoVolume(
"TRK_OUTERDISKS_POWER_CU", outerDisksPowerCu, medCu);
232 TGeoVolume* outerDisksPowerPEVolume =
new TGeoVolume(
"TRK_OUTERDISKS_POWER_PE", outerDisksPowerPE, medPE);
233 outerDisksPowerCuVolume->SetLineColor(kGray);
234 outerDisksPowerPEVolume->SetLineColor(kGray);
235 motherVolume->AddNode(outerDisksPowerCuVolume, 1, combiTrans);
236 motherVolume->AddNode(outerDisksPowerPEVolume, 1, combiTrans);
239 float puCoolingThick = 0.56 * 0.647;
240 float h2oCoolingThick = 0.44 * 0.647;
242 TGeoTube* outerDisksCoolingPU =
new TGeoTube(
"TRK_OUTERDISKS_COOLING_PUsh", rMinInnerServices, rMinInnerServices + puCoolingThick, zLengthInnerServices / 2);
243 TGeoTube* outerDisksCoolingH2O =
new TGeoTube(
"TRK_OUTERDISKS_COOLING_H2Osh", rMinInnerServices + puCoolingThick, rMinInnerServices + puCoolingThick + h2oCoolingThick, zLengthInnerServices / 2);
245 TGeoVolume* outerDisksCoolingPUVolume =
new TGeoVolume(
"TRK_OUTERDISKS_COOLING_PU", outerDisksCoolingPU, medPU);
246 TGeoVolume* outerDisksCoolingH2OVolume =
new TGeoVolume(
"TRK_OUTERDISKS_COOLING_H2O", outerDisksCoolingH2O, medH2O);
247 outerDisksCoolingPUVolume->SetLineColor(kGray);
248 outerDisksCoolingH2OVolume->SetLineColor(kGray);
249 motherVolume->AddNode(outerDisksCoolingPUVolume, 1, combiTrans);
250 motherVolume->AddNode(outerDisksCoolingH2OVolume, 1, combiTrans);
259 TGeoMedium* medSiO2 = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_SILICONDIOXIDE");
260 TGeoMedium* medPE = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYETHYLENE");
261 TGeoMedium* medCu = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_COPPER");
262 TGeoMedium* medPU = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYURETHANE");
263 TGeoMedium* medH2O = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_WATER");
264 TGeoMedium* medCFiber = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_CARBONFIBERM55J6K");
267 float siO2FiberThick = 0.5 * 0.307;
268 float peFiberThick = 0.5 * 0.307;
269 float puCoolingThick = 0.56 * 0.474;
270 float h2oCoolingThick = 0.44 * 0.474;
271 float cuPowerThick = 0.09 * 1.09;
272 float pePowerThick = 0.91 * 1.09;
273 const float totalThickness = siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick + puCoolingThick + h2oCoolingThick;
276 float rMinMiddleCarbonSupport = 34.8f;
277 float rMaxMiddleCarbonSupport = 35.f;
278 const float zLengthMiddleCarbon = 129.f;
279 TGeoTube* middleBarrelCarbonSupport =
new TGeoTube(
"TRK_MID_CARBONSUPPORTsh", rMinMiddleCarbonSupport, rMaxMiddleCarbonSupport, zLengthMiddleCarbon / 2.);
280 TGeoVolume* middleBarrelCarbonSupportVolume =
new TGeoVolume(
"TRK_MID_CARBONSUPPORT", middleBarrelCarbonSupport, medCFiber);
281 middleBarrelCarbonSupportVolume->SetLineColor(kGray);
282 LOGP(info,
"Creating carbon fiber support for Middle Tracker");
283 motherVolume->AddNode(middleBarrelCarbonSupportVolume, 1,
nullptr);
286 float rMinMiddleServices = 35.f;
287 float rMinMiddleBarrel = rMinMiddleServices;
288 const float zLengthCylinderMiddleServices = 40.5f;
289 const float zLengthMiddleServices = 143.f;
290 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
291 rMinMiddleServices = 35.f;
292 LOGP(info,
"Building services for Middle Tracker rminMiddleServices");
293 TGeoTube* middleBarrelFiberSIO2 =
new TGeoTube(Form(
"TRK_MID_FIBER_SIO2sh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + siO2FiberThick, zLengthCylinderMiddleServices );
294 rMinMiddleServices += siO2FiberThick;
295 TGeoTube* middleBarrelFiberPE =
new TGeoTube(Form(
"TRK_MID_FIBER_PEsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + peFiberThick, zLengthCylinderMiddleServices );
296 rMinMiddleServices += peFiberThick;
297 TGeoVolume* middleBarrelFiberSIO2Volume =
new TGeoVolume(Form(
"TRK_MID_FIBER_SIO2_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelFiberSIO2, medSiO2);
298 TGeoVolume* middleBarrelFiberPEVolume =
new TGeoVolume(Form(
"TRK_MID_FIBER_PE_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelFiberPE, medPE);
299 middleBarrelFiberSIO2Volume->SetLineColor(kGray);
300 middleBarrelFiberPEVolume->SetLineColor(kGray);
301 auto* combiTrans =
new TGeoCombiTrans(0, 0, (
int)orientation * (zLengthMiddleServices - zLengthCylinderMiddleServices),
nullptr);
302 motherVolume->AddNode(middleBarrelFiberSIO2Volume, 1, combiTrans);
303 motherVolume->AddNode(middleBarrelFiberPEVolume, 1, combiTrans);
306 TGeoTube* middleBarrelPowerCu =
new TGeoTube(Form(
"TRK_MID_POWER_CUsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + cuPowerThick, zLengthCylinderMiddleServices );
307 rMinMiddleServices += cuPowerThick;
308 TGeoTube* middleBarrelPowerPE =
new TGeoTube(Form(
"TRK_MID_POWER_PEsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + pePowerThick, zLengthCylinderMiddleServices );
309 rMinMiddleServices += pePowerThick;
310 TGeoVolume* middleBarrelPowerCuVolume =
new TGeoVolume(Form(
"TRK_MID_POWER_CU_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelPowerCu, medCu);
311 TGeoVolume* middleBarrelPowerPEVolume =
new TGeoVolume(Form(
"TRK_MID_POWER_PE_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelPowerPE, medPE);
312 middleBarrelPowerCuVolume->SetLineColor(kGray);
313 middleBarrelPowerPEVolume->SetLineColor(kGray);
314 motherVolume->AddNode(middleBarrelPowerCuVolume, 1, combiTrans);
315 motherVolume->AddNode(middleBarrelPowerPEVolume, 1, combiTrans);
318 TGeoTube* middleBarrelCoolingPU =
new TGeoTube(Form(
"TRK_MID_COOLING_PUsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + puCoolingThick, zLengthCylinderMiddleServices );
319 rMinMiddleServices += puCoolingThick;
320 TGeoTube* middleBarrelCoolingH2O =
new TGeoTube(Form(
"TRK_MID_COOLING_H2Osh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleServices, rMinMiddleServices + h2oCoolingThick, zLengthCylinderMiddleServices );
321 rMinMiddleServices = rMinMiddleServices += h2oCoolingThick;
322 TGeoVolume* middleBarrelCoolingPUVolume =
new TGeoVolume(Form(
"TRK_MID_COOLING_PU_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelCoolingPU, medPU);
323 TGeoVolume* middleBarrelCoolingH2OVolume =
new TGeoVolume(Form(
"TRK_MID_COOLING_H2O_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelCoolingH2O, medH2O);
324 middleBarrelCoolingPUVolume->SetLineColor(kGray);
325 middleBarrelCoolingH2OVolume->SetLineColor(kGray);
326 motherVolume->AddNode(middleBarrelCoolingPUVolume, 1, combiTrans);
327 motherVolume->AddNode(middleBarrelCoolingH2OVolume, 1, combiTrans);
330 const float rMinMiddleBarrelDisk = 5.68f;
331 const float rMaxMiddleBarrelDisk = 35.f;
332 const float zLengthMiddleBarrel = 64.5f;
333 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
334 TGeoTube* middleBarrelConnDiskSIO2 =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_FIBER_SIO2sh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, siO2FiberThick / 2.);
335 TGeoTube* middleBarrelConnDiskPE =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_FIBER_PEsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, peFiberThick / 2.);
336 TGeoVolume* middleBarrelConnDiskSIO2Volume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_FIBER_SIO2_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskSIO2, medSiO2);
337 TGeoVolume* middleBarrelConnDiskPEVolume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_FIBER_PE_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskPE, medPE);
338 middleBarrelConnDiskSIO2Volume->SetLineColor(kGray);
339 middleBarrelConnDiskPEVolume->SetLineColor(kGray);
340 auto* rot =
new TGeoRotation(
"", 0, 0, 180);
341 auto* combiTransSIO2 =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick / 2. + zLengthMiddleBarrel), rot);
342 auto* combiTransPE =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick / 2. + zLengthMiddleBarrel), rot);
343 motherVolume->AddNode(middleBarrelConnDiskSIO2Volume, 1, combiTransSIO2);
344 motherVolume->AddNode(middleBarrelConnDiskPEVolume, 1, combiTransPE);
346 TGeoTube* middleBarrelConnDiskCu =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_POWER_CUsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, cuPowerThick / 2.);
347 TGeoTube* middleBarrelConnDiskPEPower =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_POWER_PEsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, pePowerThick / 2.);
348 TGeoVolume* middleBarrelConnDiskCuVolume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_POWER_CU_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskCu, medCu);
349 TGeoVolume* middleBarrelConnDiskPEPowerVolume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_POWER_PE_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskPEPower, medPE);
350 middleBarrelConnDiskCuVolume->SetLineColor(kGray);
351 middleBarrelConnDiskPEPowerVolume->SetLineColor(kGray);
352 auto* combiTransCu =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick / 2. + zLengthMiddleBarrel), rot);
353 auto* combiTransPEPower =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick / 2. + zLengthMiddleBarrel), rot);
354 motherVolume->AddNode(middleBarrelConnDiskCuVolume, 1, combiTransCu);
355 motherVolume->AddNode(middleBarrelConnDiskPEPowerVolume, 1, combiTransPEPower);
357 TGeoTube* middleBarrelConnDiskPU =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_PUsh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, puCoolingThick / 2.);
358 TGeoTube* middleBarrelConnDiskH2O =
new TGeoTube(Form(
"TRK_MIDBARCONN_DISK_H2Osh_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, h2oCoolingThick / 2.);
359 TGeoVolume* middleBarrelConnDiskPUVolume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_PU_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskPU, medPU);
360 TGeoVolume* middleBarrelConnDiskH2OVolume =
new TGeoVolume(Form(
"TRK_MIDBARCONN_DISK_H2O_%s", orientation == Orientation::kASide ?
"bwd" :
"fwd"), middleBarrelConnDiskH2O, medH2O);
361 middleBarrelConnDiskPUVolume->SetLineColor(kGray);
362 middleBarrelConnDiskH2OVolume->SetLineColor(kGray);
363 auto* combiTransPU =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick + puCoolingThick / 2. + zLengthMiddleBarrel), rot);
364 auto* combiTransH2O =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick + puCoolingThick + h2oCoolingThick / 2. + zLengthMiddleBarrel), rot);
365 motherVolume->AddNode(middleBarrelConnDiskPUVolume, 1, combiTransPU);
366 motherVolume->AddNode(middleBarrelConnDiskH2OVolume, 1, combiTransH2O);
370 float rMaxMiddleServicesBarFwd = 74.5f + siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick + puCoolingThick + h2oCoolingThick;
371 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
373 TGeoTube* middleBarFwdFiberSIO2 =
new TGeoTube(
"TRK_MIDBARFWD_FIBER_SIO2sh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, siO2FiberThick / 2.);
374 TGeoTube* middleBarFwdFiberPE =
new TGeoTube(
"TRK_MIDBARFWD_FIBER_PEsh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, peFiberThick / 2.);
375 TGeoVolume* middleBarFwdFiberSIO2Volume =
new TGeoVolume(
"TRK_MIDBARFWD_FIBER_SIO2", middleBarFwdFiberSIO2, medSiO2);
376 TGeoVolume* middleBarFwdFiberPEVolume =
new TGeoVolume(
"TRK_MIDBARFWD_FIBER_PE", middleBarFwdFiberPE, medPE);
377 middleBarFwdFiberSIO2Volume->SetLineColor(kGray);
378 middleBarFwdFiberPEVolume->SetLineColor(kGray);
379 auto* rot =
new TGeoRotation(
"", 0, 0, 180);
380 auto* combiTransSIO2 =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick / 2. + zLengthMiddleServices), rot);
381 auto* combiTransPE =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick / 2. + zLengthMiddleServices), rot);
382 motherVolume->AddNode(middleBarFwdFiberSIO2Volume, 1, combiTransSIO2);
383 motherVolume->AddNode(middleBarFwdFiberPEVolume, 1, combiTransPE);
386 TGeoTube* middleBarFwdPowerCu =
new TGeoTube(
"TRK_MIDBARFWD_POWER_CUsh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, cuPowerThick / 2.);
387 TGeoTube* middleBarFwdPowerPE =
new TGeoTube(
"TRK_MIDBARFWD_POWER_PEsh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, pePowerThick / 2.);
388 TGeoVolume* middleBarFwdPowerCuVolume =
new TGeoVolume(
"TRK_MIDBARFWD_POWER_CU", middleBarFwdPowerCu, medCu);
389 TGeoVolume* middleBarFwdPowerPEVolume =
new TGeoVolume(
"TRK_MIDBARFWD_POWER_PE", middleBarFwdPowerPE, medPE);
390 middleBarFwdPowerCuVolume->SetLineColor(kGray);
391 middleBarFwdPowerPEVolume->SetLineColor(kGray);
392 auto* combiTransCu =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick / 2. + zLengthMiddleServices), rot);
393 auto* combiTransPEPower =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick / 2. + zLengthMiddleServices), rot);
394 motherVolume->AddNode(middleBarFwdPowerCuVolume, 1, combiTransCu);
395 motherVolume->AddNode(middleBarFwdPowerPEVolume, 1, combiTransPEPower);
398 TGeoTube* middleBarFwdCoolingPU =
new TGeoTube(
"TRK_MIDBARFWD_COOLING_PUsh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, puCoolingThick / 2.);
399 TGeoTube* middleBarFwdCoolingH2O =
new TGeoTube(
"TRK_MIDBARFWD_COOLING_H2Osh", rMinMiddleBarrel, rMaxMiddleServicesBarFwd, h2oCoolingThick / 2.);
400 TGeoVolume* middleBarFwdCoolingPUVolume =
new TGeoVolume(
"TRK_MIDBARFWD_COOLING_PU", middleBarFwdCoolingPU, medPU);
401 TGeoVolume* middleBarFwdCoolingH2OVolume =
new TGeoVolume(
"TRK_MIDBARFWD_COOLING_H2O", middleBarFwdCoolingH2O, medH2O);
402 middleBarFwdCoolingPUVolume->SetLineColor(kGray);
403 middleBarFwdCoolingH2OVolume->SetLineColor(kGray);
404 auto* combiTransCoolingPU =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick + puCoolingThick / 2. + zLengthMiddleServices), rot);
405 auto* combiTransCoolingH2O =
new TGeoCombiTrans(0, 0, (
int)orientation * (siO2FiberThick + peFiberThick + cuPowerThick + pePowerThick + puCoolingThick + h2oCoolingThick / 2. + zLengthMiddleServices), rot);
406 motherVolume->AddNode(middleBarFwdCoolingPUVolume, 1, combiTransCoolingPU);
407 motherVolume->AddNode(middleBarFwdCoolingH2OVolume, 1, combiTransCoolingH2O);
411 const float zLengthMiddleServicesFwd = 350.f - (143.f + totalThickness);
413 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
415 float siO2FiberThick = 0.5 * 0.307;
416 float peFiberThick = 0.5 * 0.307;
417 float rMinMiddleServicesFwd = 74.5f;
419 float translation = (
int)orientation * (143.f + totalThickness + zLengthMiddleServicesFwd / 2);
421 TGeoTube* middleFwdFiberSIO2 =
new TGeoTube(
"TRK_MIDFWD_FIBER_SIO2sh", rMinMiddleServicesFwd, rMinMiddleServicesFwd + siO2FiberThick, zLengthMiddleServicesFwd / 2);
422 TGeoTube* middleFwdFiberPE =
new TGeoTube(
"TRK_MIDFWD_FIBER_PEsh", rMinMiddleServicesFwd + siO2FiberThick, rMinMiddleServicesFwd + siO2FiberThick + peFiberThick, zLengthMiddleServicesFwd / 2);
423 rMinMiddleServicesFwd += siO2FiberThick + peFiberThick;
424 TGeoVolume* middleFwdFiberSIO2Volume =
new TGeoVolume(
"TRK_MIDFWD_FIBER_SIO2", middleFwdFiberSIO2, medSiO2);
425 TGeoVolume* middleFwdFiberPEVolume =
new TGeoVolume(
"TRK_MIDFWD_FIBER_PE", middleFwdFiberPE, medPE);
426 middleFwdFiberSIO2Volume->SetLineColor(kGray);
427 middleFwdFiberPEVolume->SetLineColor(kGray);
428 auto* combiTrans =
new TGeoCombiTrans(0, 0, translation,
nullptr);
429 motherVolume->AddNode(middleFwdFiberSIO2Volume, 1, combiTrans);
430 motherVolume->AddNode(middleFwdFiberPEVolume, 1, combiTrans);
433 float cuPowerThick = 0.09 * 1.09;
434 float pePowerThick = 0.91 * 1.09;
436 TGeoTube* middleFwdPowerCu =
new TGeoTube(
"TRK_MIDFWD_POWER_CUsh", rMinMiddleServicesFwd, rMinMiddleServicesFwd + cuPowerThick, zLengthMiddleServicesFwd / 2);
437 TGeoTube* middleFwdPowerPE =
new TGeoTube(
"TRK_MIDFWD_POWER_PEsh", rMinMiddleServicesFwd + cuPowerThick, rMinMiddleServicesFwd + cuPowerThick + pePowerThick, zLengthMiddleServicesFwd / 2);
438 rMinMiddleServicesFwd += cuPowerThick + pePowerThick;
439 TGeoVolume* middleFwdPowerCuVolume =
new TGeoVolume(
"TRK_MIDFWD_POWER_CU", middleFwdPowerCu, medCu);
440 TGeoVolume* middleFwdPowerPEVolume =
new TGeoVolume(
"TRK_MIDFWD_POWER_PE", middleFwdPowerPE, medPE);
441 middleFwdPowerCuVolume->SetLineColor(kGray);
442 middleFwdPowerPEVolume->SetLineColor(kGray);
443 motherVolume->AddNode(middleFwdPowerCuVolume, 1, combiTrans);
444 motherVolume->AddNode(middleFwdPowerPEVolume, 1, combiTrans);
447 float puCoolingThick = 0.56 * 0.474;
448 float h2oCoolingThick = 0.44 * 0.474;
450 TGeoTube* middleFwdCoolingPU =
new TGeoTube(
"TRK_MIDFWD_COOLING_PUsh", rMinMiddleServicesFwd, rMinMiddleServicesFwd + puCoolingThick, zLengthMiddleServicesFwd / 2);
451 TGeoTube* middleFwdCoolingH2O =
new TGeoTube(
"TRK_MIDFWD_COOLING_H2Osh", rMinMiddleServicesFwd + puCoolingThick, rMinMiddleServicesFwd + puCoolingThick + h2oCoolingThick, zLengthMiddleServicesFwd / 2);
453 TGeoVolume* middleFwdCoolingPUVolume =
new TGeoVolume(
"TRK_MIDFWD_COOLING_PU", middleFwdCoolingPU, medPU);
454 TGeoVolume* middleFwdCoolingH2OVolume =
new TGeoVolume(
"TRK_MIDFWD_COOLING_H2O", middleFwdCoolingH2O, medH2O);
455 middleFwdCoolingPUVolume->SetLineColor(kGray);
456 middleFwdCoolingH2OVolume->SetLineColor(kGray);
457 motherVolume->AddNode(middleFwdCoolingPUVolume, 1, combiTrans);
458 motherVolume->AddNode(middleFwdCoolingH2OVolume, 1, combiTrans);
470 TGeoMedium* medSiO2 = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_SILICONDIOXIDE");
471 TGeoMedium* medPE = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYETHYLENE");
472 TGeoMedium* medCu = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_COPPER");
473 TGeoMedium* medPU = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYURETHANE");
474 TGeoMedium* medH2O = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_WATER");
477 const float siO2FiberThick = 0.5 * 0.269;
478 const float peFiberThick = 0.5 * 0.269;
480 const float zLengthOuterBarrelServices = 350.f;
482 TGeoTube* outerBarrelFiberSIO2 =
new TGeoTube(
"TRK_OUTERBARREL_FIBER_SIO2sh", rMinOuterBarrelServices, rMinOuterBarrelServices + siO2FiberThick, zLengthOuterBarrelServices);
483 TGeoTube* outerBarrelFiberPE =
new TGeoTube(
"TRK_OUTERBARREL_FIBER_PEsh", rMinOuterBarrelServices + siO2FiberThick, rMinOuterBarrelServices + siO2FiberThick + peFiberThick, zLengthOuterBarrelServices);
484 rMinOuterBarrelServices += siO2FiberThick + peFiberThick;
485 TGeoVolume* outerBarrelFiberSIO2Volume =
new TGeoVolume(
"TRK_OUTERBARREL_FIBER_SIO2", outerBarrelFiberSIO2, medSiO2);
486 TGeoVolume* outerBarrelFiberPEVolume =
new TGeoVolume(
"TRK_OUTERBARREL_FIBER_PE", outerBarrelFiberPE, medPE);
487 outerBarrelFiberSIO2Volume->SetLineColor(kGray);
488 outerBarrelFiberPEVolume->SetLineColor(kGray);
489 motherVolume->AddNode(outerBarrelFiberSIO2Volume, 1,
nullptr);
490 motherVolume->AddNode(outerBarrelFiberPEVolume, 1,
nullptr);
493 const float cuPowerThick = 0.09 * 0.430;
494 const float pePowerThick = 0.91 * 0.430;
496 TGeoTube* outerBarrelPowerCu =
new TGeoTube(
"TRK_OUTERBARREL_POWER_CUsh", rMinOuterBarrelServices, rMinOuterBarrelServices + cuPowerThick, zLengthOuterBarrelServices);
497 TGeoTube* outerBarrelPowerPE =
new TGeoTube(
"TRK_OUTERBARREL_POWER_PEsh", rMinOuterBarrelServices + cuPowerThick, rMinOuterBarrelServices + cuPowerThick + pePowerThick, zLengthOuterBarrelServices);
498 rMinOuterBarrelServices += cuPowerThick + pePowerThick;
499 TGeoVolume* outerBarrelPowerCuVolume =
new TGeoVolume(
"TRK_OUTERBARREL_POWER_CU", outerBarrelPowerCu, medCu);
500 TGeoVolume* outerBarrelPowerPEVolume =
new TGeoVolume(
"TRK_OUTERBARREL_POWER_PE", outerBarrelPowerPE, medPE);
501 outerBarrelPowerCuVolume->SetLineColor(kGray);
502 outerBarrelPowerPEVolume->SetLineColor(kGray);
503 motherVolume->AddNode(outerBarrelPowerCuVolume, 1,
nullptr);
504 motherVolume->AddNode(outerBarrelPowerPEVolume, 1,
nullptr);
507 const float puCoolingThick = 0.56 * 1.432;
508 const float h2oCoolingThick = 0.44 * 1.432;
510 TGeoTube* outerBarrelCoolingPU =
new TGeoTube(
"TRK_OUTERBARREL_COOLING_PUsh", rMinOuterBarrelServices, rMinOuterBarrelServices + puCoolingThick, zLengthOuterBarrelServices);
511 TGeoTube* outerBarrelCoolingH2O =
new TGeoTube(
"TRK_OUTERBARREL_COOLING_H2Osh", rMinOuterBarrelServices + puCoolingThick, rMinOuterBarrelServices + puCoolingThick + h2oCoolingThick, zLengthOuterBarrelServices);
513 TGeoVolume* outerBarrelCoolingPUVolume =
new TGeoVolume(
"TRK_OUTERBARREL_COOLING_PU", outerBarrelCoolingPU, medPU);
514 TGeoVolume* outerBarrelCoolingH2OVolume =
new TGeoVolume(
"TRK_OUTERBARREL_COOLING_H2O", outerBarrelCoolingH2O, medH2O);
515 outerBarrelCoolingPUVolume->SetLineColor(kGray);
516 outerBarrelCoolingH2OVolume->SetLineColor(kGray);
517 motherVolume->AddNode(outerBarrelCoolingPUVolume, 1,
nullptr);
518 motherVolume->AddNode(outerBarrelCoolingH2OVolume, 1,
nullptr);
526 TGeoMedium* medSiO2 = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_SILICONDIOXIDE");
527 TGeoMedium* medPE = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYETHYLENE");
528 TGeoMedium* medCu = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_COPPER");
529 TGeoMedium* medPU = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYURETHANE");
530 TGeoMedium* medH2O = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_WATER");
531 TGeoMedium* medCFiber = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_CARBONFIBERM55J6K");
534 const int ITBarrelnFiber = 70;
535 const int ITBarrelnPower = 70;
539 float puCoolingAreaB = 0;
540 float h2oCoolingAreaB = 0;
545 const int ITDisknFiber = 3 * 24;
546 const int ITDisknPower = 3 * 16;
550 float puCoolingAreaD = 0;
551 float h2oCoolingAreaD = 0;
556 float rMinMiddleCarbonSupport = 34.8f;
557 float rMaxMiddleCarbonSupport = 35.f;
558 const float zLengthMiddleCarbon = 129.f;
559 TGeoTube* middleBarrelCarbonSupport =
new TGeoTube(
"TRK_MID_CARBONSUPPORTsh", rMinMiddleCarbonSupport, rMaxMiddleCarbonSupport, zLengthMiddleCarbon / 2.);
560 TGeoVolume* middleBarrelCarbonSupportVolume =
new TGeoVolume(
"TRK_MID_CARBONSUPPORT", middleBarrelCarbonSupport, medCFiber);
561 middleBarrelCarbonSupportVolume->SetLineColor(kGray);
562 LOGP(info,
"Creating carbon fiber support for Middle Tracker");
563 motherVolume->AddNode(middleBarrelCarbonSupportVolume, 1,
nullptr);
566 float rMinMiddleServices = 35.f;
567 float rMinMiddleBarrel = rMinMiddleServices;
568 const float zLengthCylinderMiddleServices = 40.5f;
569 const float zLengthMiddleServices = 143.f;
572 rMinMiddleServices = 35.f;
573 LOGP(info,
"Building services for Middle Tracker rminMiddleServices");
576 const float rMinMiddleBarrelDisk = 5.68f;
577 const float rMaxMiddleBarrelDisk = 35.f;
578 const float zLengthMiddleBarrel = 64.5f;
579 auto orientation = Orientation::kASide;
580 float diskCircumference = rMaxMiddleBarrelDisk * 3.14;
582 double zCur = zLengthMiddleBarrel;
583 double dZ = siO2FiberAreaB / diskCircumference / 2.;
584 TGeoTube* middleBarrelConnDiskSIO2 =
new TGeoTube(
"TRK_MIDBARCONN_DISK_FIBER_SIO2sh", rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, dZ);
585 TGeoVolume* middleBarrelConnDiskSIO2Volume =
new TGeoVolume(
"TRK_MIDBARCONN_DISK_FIBER_SIO2", middleBarrelConnDiskSIO2, medSiO2);
586 middleBarrelConnDiskSIO2Volume->SetLineColor(kGray);
587 auto* rot =
new TGeoRotation(
"", 0, 0, 180);
588 auto* combiTransSIO2 =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ), rot);
591 dZ = peFiberAreaB / diskCircumference / 2.;
592 TGeoTube* middleBarrelConnDiskPE =
new TGeoTube(
"TRK_MIDBARCONN_DISK_FIBER_PEsh", rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, dZ);
593 TGeoVolume* middleBarrelConnDiskPEVolume =
new TGeoVolume(
"TRK_MIDBARCONN_DISK_FIBER_PE", middleBarrelConnDiskPE, medPE);
594 middleBarrelConnDiskPEVolume->SetLineColor(kGray);
595 auto* combiTransPE =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ), rot);
597 motherVolume->AddNode(middleBarrelConnDiskSIO2Volume, 1, combiTransSIO2);
598 motherVolume->AddNode(middleBarrelConnDiskPEVolume, 1, combiTransPE);
601 dZ = cuPowerAreaB / diskCircumference / 2.;
602 TGeoTube* middleBarrelConnDiskCu =
new TGeoTube(
"TRK_MIDBARCONN_DISK_POWER_CUsh", rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, dZ);
603 TGeoVolume* middleBarrelConnDiskCuVolume =
new TGeoVolume(
"TRK_MIDBARCONN_DISK_POWER_CU", middleBarrelConnDiskCu, medCu);
604 middleBarrelConnDiskCuVolume->SetLineColor(kGray);
605 auto* combiTransCu =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ), rot);
608 dZ = pePowerAreaB / diskCircumference / 2.;
609 TGeoTube* middleBarrelConnDiskPEPower =
new TGeoTube(
"TRK_MIDBARCONN_DISK_POWER_PEsh", rMinMiddleBarrelDisk, rMaxMiddleBarrelDisk, dZ);
610 TGeoVolume* middleBarrelConnDiskPEPowerVolume =
new TGeoVolume(
"TRK_MIDBARCONN_DISK_POWER_PE", middleBarrelConnDiskPEPower, medPE);
611 middleBarrelConnDiskPEPowerVolume->SetLineColor(kGray);
612 auto* combiTransPEPower =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ), rot);
613 motherVolume->AddNode(middleBarrelConnDiskCuVolume, 1, combiTransCu);
614 motherVolume->AddNode(middleBarrelConnDiskPEPowerVolume, 1, combiTransPEPower);
616 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
617 for (
int iSide = 0; iSide < 2; iSide++) {
620 if (orientation == Orientation::kCSide) {
626 double rCur = rMinMiddleServices;
627 double dR = siO2FiberAreaD / (3.14 * rCur);
628 TGeoTubeSeg* middleDiskFiberSIO2 =
new TGeoTubeSeg(Form(
"TRK_MLD_FIBER_SIO2sh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
629 TGeoVolume* middleDiskFiberSIO2Volume =
new TGeoVolume(Form(
"TRK_MLD_FIBER_SIO2_%s%d", orLabel.c_str(), iSide), middleDiskFiberSIO2, medSiO2);
630 middleDiskFiberSIO2Volume->SetLineColor(kGray);
633 dR = peFiberAreaD / (3.14 * rCur);
634 TGeoTubeSeg* middleDiskFiberPE =
new TGeoTubeSeg(Form(
"TRK_MLD_FIBER_PEsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
635 TGeoVolume* middleDiskFiberPEVolume =
new TGeoVolume(Form(
"TRK_MLD_FIBER_PE_%s%d", orLabel.c_str(), iSide), middleDiskFiberPE, medPE);
636 middleDiskFiberPEVolume->SetLineColor(kGray);
637 auto* combiTrans =
new TGeoCombiTrans(0, 0, (
int)orientation * (zLengthMiddleServices - zLengthCylinderMiddleServices),
new TGeoRotation(
"", refAngle + iSide * 180., 0, 0));
638 motherVolume->AddNode(middleDiskFiberSIO2Volume, 1, combiTrans);
639 motherVolume->AddNode(middleDiskFiberPEVolume, 1, combiTrans);
643 dR = cuPowerAreaD / (3.14 * rCur);
644 TGeoTubeSeg* middleDiskPowerCu =
new TGeoTubeSeg(Form(
"TRK_MLD_POWER_CUsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
645 TGeoVolume* middleDiskPowerCuVolume =
new TGeoVolume(Form(
"TRK_MLD_POWER_CU_%s%d", orLabel.c_str(), iSide), middleDiskPowerCu, medCu);
646 middleDiskPowerCuVolume->SetLineColor(kGray);
649 dR = pePowerAreaD / (3.14 * rCur);
650 TGeoTubeSeg* middleDiskPowerPE =
new TGeoTubeSeg(Form(
"TRK_MLD_POWER_PEsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
651 TGeoVolume* middleDiskPowerPEVolume =
new TGeoVolume(Form(
"TRK_MLD_POWER_PE_%s%d", orLabel.c_str(), iSide), middleDiskPowerPE, medPE);
652 middleDiskPowerPEVolume->SetLineColor(kGray);
654 motherVolume->AddNode(middleDiskPowerCuVolume, 1, combiTrans);
655 motherVolume->AddNode(middleDiskPowerPEVolume, 1, combiTrans);
657 if (orientation == Orientation::kASide) {
661 dR = siO2FiberAreaB / (3.14 * rCur);
662 TGeoTubeSeg* middleBarrelFiberSIO2 =
new TGeoTubeSeg(Form(
"TRK_MLB_FIBER_SIO2sh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
663 TGeoVolume* middleBarrelFiberSIO2Volume =
new TGeoVolume(Form(
"TRK_MLB_FIBER_SIO2_A%d", iSide), middleBarrelFiberSIO2, medSiO2);
664 middleBarrelFiberSIO2Volume->SetLineColor(kGray);
667 dR = peFiberAreaB / (3.14 * rCur);
668 TGeoTubeSeg* middleBarrelFiberPE =
new TGeoTubeSeg(Form(
"TRK_MLB_FIBER_PEsh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
669 TGeoVolume* middleBarrelFiberPEVolume =
new TGeoVolume(Form(
"TRK_MLB_FIBER_PE_A%d", iSide), middleBarrelFiberPE, medPE);
670 middleBarrelFiberPEVolume->SetLineColor(kGray);
671 auto* combiTrans =
new TGeoCombiTrans(0, 0, (
int)orientation * (zLengthMiddleServices - zLengthCylinderMiddleServices),
new TGeoRotation(
nullptr, refAngle + iSide * 180., 0, 0));
672 motherVolume->AddNode(middleBarrelFiberSIO2Volume, 1, combiTrans);
673 motherVolume->AddNode(middleBarrelFiberPEVolume, 1, combiTrans);
677 dR = cuPowerAreaB / (3.14 * rCur);
678 TGeoTubeSeg* middleBarrelPowerCu =
new TGeoTubeSeg(Form(
"TRK_MLB_POWER_CUsh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
679 TGeoVolume* middleBarrelPowerCuVolume =
new TGeoVolume(Form(
"TRK_MLB_POWER_CU_A%d", iSide), middleBarrelPowerCu, medCu);
680 middleBarrelPowerCuVolume->SetLineColor(kGray);
683 dR = pePowerAreaB / (3.14 * rCur);
684 TGeoTubeSeg* middleBarrelPowerPE =
new TGeoTubeSeg(Form(
"TRK_MLB_POWER_PEsh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
685 TGeoVolume* middleBarrelPowerPEVolume =
new TGeoVolume(Form(
"TRK_MLB_POWER_PE_A%d", iSide), middleBarrelPowerPE, medPE);
686 middleBarrelPowerPEVolume->SetLineColor(kGray);
688 motherVolume->AddNode(middleBarrelPowerCuVolume, 1, combiTrans);
689 motherVolume->AddNode(middleBarrelPowerPEVolume, 1, combiTrans);
699 float rMaxMiddleServicesBarFwd = 74.5f;
700 diskCircumference = rMaxMiddleServicesBarFwd * 3.14;
701 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
704 if (orientation == Orientation::kCSide) {
708 double totalThickness = 0;
709 for (
int iSide = 0; iSide < 2; iSide++) {
711 double zCur = zLengthMiddleServices;
712 double dZ = siO2FiberAreaD / diskCircumference / 2.;
713 totalThickness += 2 * dZ;
714 if (orientation == Orientation::kASide) {
715 dZ += siO2FiberAreaB / diskCircumference / 2.;
717 TGeoTubeSeg* middleBarFwdFiberSIO2 =
new TGeoTubeSeg(Form(
"TRK_MIDBARFWD_FIBER_SIO2sh_%s%d", orLabel.c_str(), iSide), rMinMiddleBarrel, rMaxMiddleServicesBarFwd, dZ, -45, 45);
718 TGeoVolume* middleBarFwdFiberSIO2Volume =
new TGeoVolume(Form(
"TRK_MIDBARFWD_FIBER_SIO2_%s%d", orLabel.c_str(), iSide), middleBarFwdFiberSIO2, medSiO2);
719 auto* rot =
new TGeoRotation(
"", refAngle + iSide * 180., 0, 180.);
720 auto* combiTransSIO2 =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ), rot);
723 dZ = peFiberAreaD / diskCircumference / 2.;
724 totalThickness += 2 * dZ;
725 if (orientation == Orientation::kASide) {
726 dZ += peFiberAreaB / diskCircumference / 2.;
728 TGeoTubeSeg* middleBarFwdFiberPE =
new TGeoTubeSeg(Form(
"TRK_MIDBARFWD_FIBER_PEsh_%s%d", orLabel.c_str(), iSide), rMinMiddleBarrel, rMaxMiddleServicesBarFwd, dZ, -45, 45);
729 TGeoVolume* middleBarFwdFiberPEVolume =
new TGeoVolume(Form(
"TRK_MIDBARFWD_FIBER_PE_%s%d", orLabel.c_str(), iSide), middleBarFwdFiberPE, medPE);
730 middleBarFwdFiberSIO2Volume->SetLineColor(kGray);
731 middleBarFwdFiberPEVolume->SetLineColor(kGray);
732 auto* combiTransPE =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ), rot);
733 motherVolume->AddNode(middleBarFwdFiberSIO2Volume, 1, combiTransSIO2);
734 motherVolume->AddNode(middleBarFwdFiberPEVolume, 1, combiTransPE);
738 dZ = cuPowerAreaD / diskCircumference / 2.;
739 totalThickness += 2 * dZ;
740 if (orientation == Orientation::kASide) {
741 dZ += cuPowerAreaB / diskCircumference / 2.;
743 TGeoTubeSeg* middleBarFwdPowerCu =
new TGeoTubeSeg(Form(
"TRK_MIDBARFWD_POWER_CUsh_%s%d", orLabel.c_str(), iSide), rMinMiddleBarrel, rMaxMiddleServicesBarFwd, dZ, -45, 45);
744 TGeoVolume* middleBarFwdPowerCuVolume =
new TGeoVolume(Form(
"TRK_MIDBARFWD_POWER_CU_%s%d", orLabel.c_str(), iSide), middleBarFwdPowerCu, medCu);
745 auto* combiTransCu =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ), rot);
748 dZ = pePowerAreaD / diskCircumference / 2.;
749 totalThickness += 2 * dZ;
750 if (orientation == Orientation::kASide) {
751 dZ += pePowerAreaB / diskCircumference / 2.;
753 TGeoTubeSeg* middleBarFwdPowerPE =
new TGeoTubeSeg(Form(
"TRK_MIDBARFWD_POWER_PEsh_%s%d", orLabel.c_str(), iSide), rMinMiddleBarrel, rMaxMiddleServicesBarFwd, dZ, -45, 45);
754 TGeoVolume* middleBarFwdPowerPEVolume =
new TGeoVolume(Form(
"TRK_MIDBARFWD_POWER_PE_%s%d", orLabel.c_str(), iSide), middleBarFwdPowerPE, medPE);
755 middleBarFwdPowerCuVolume->SetLineColor(kGray);
756 middleBarFwdPowerPEVolume->SetLineColor(kGray);
757 auto* combiTransPEPower =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ), rot);
758 motherVolume->AddNode(middleBarFwdPowerCuVolume, 1, combiTransCu);
759 motherVolume->AddNode(middleBarFwdPowerPEVolume, 1, combiTransPEPower);
765 float zLengthMiddleServicesFwd = 350.f - (143.f + totalThickness);
767 for (
int iSide = 0; iSide < 2; iSide++) {
769 float rMinMiddleServicesFwd = 74.5f;
771 float translation = (
int)orientation * (143.f + totalThickness + zLengthMiddleServicesFwd / 2);
773 double rCur = rMinMiddleServicesFwd;
774 double dR = siO2FiberAreaD / (3.14 * rCur);
775 if (orientation == Orientation::kASide) {
776 dR += siO2FiberAreaB / (3.14 * rCur);
778 TGeoTubeSeg* middleFwdFiberSIO2 =
new TGeoTubeSeg(Form(
"TRK_MIDFWD_FIBER_SIO2sh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthMiddleServicesFwd / 2, -45, 45);
779 TGeoVolume* middleFwdFiberSIO2Volume =
new TGeoVolume(Form(
"TRK_MIDFWD_FIBER_SIO2_%s%d", orLabel.c_str(), iSide), middleFwdFiberSIO2, medSiO2);
780 middleFwdFiberSIO2Volume->SetLineColor(kGray);
783 dR = peFiberAreaD / (3.14 * rCur);
784 if (orientation == Orientation::kASide) {
785 dR += peFiberAreaB / (3.14 * rCur);
787 TGeoTubeSeg* middleFwdFiberPE =
new TGeoTubeSeg(Form(
"TRK_MIDFWD_FIBER_PEsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthMiddleServicesFwd / 2, -45, 45);
788 TGeoVolume* middleFwdFiberPEVolume =
new TGeoVolume(Form(
"TRK_MIDFWD_FIBER_PE_%s%d", orLabel.c_str(), iSide), middleFwdFiberPE, medPE);
789 middleFwdFiberPEVolume->SetLineColor(kGray);
791 auto* rot =
new TGeoRotation(
"", refAngle + iSide * 180., 0, 0.);
792 auto* combiTrans =
new TGeoCombiTrans(0, 0, translation, rot);
793 motherVolume->AddNode(middleFwdFiberSIO2Volume, 1, combiTrans);
794 motherVolume->AddNode(middleFwdFiberPEVolume, 1, combiTrans);
798 dR = cuPowerAreaD / (3.14 * rCur);
799 if (orientation == Orientation::kASide) {
800 dR += cuPowerAreaB / (3.14 * rCur);
802 TGeoTubeSeg* middleFwdPowerCu =
new TGeoTubeSeg(Form(
"TRK_MIDFWD_POWER_CUsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthMiddleServicesFwd / 2, -45, 45);
803 TGeoVolume* middleFwdPowerCuVolume =
new TGeoVolume(Form(
"TRK_MIDFWD_POWER_CU_%s%d", orLabel.c_str(), iSide), middleFwdPowerCu, medCu);
804 middleFwdPowerCuVolume->SetLineColor(kGray);
807 dR = pePowerAreaD / (3.14 * rCur);
808 if (orientation == Orientation::kASide) {
809 dR += pePowerAreaB / (3.14 * rCur);
811 TGeoTubeSeg* middleFwdPowerPE =
new TGeoTubeSeg(Form(
"TRK_MIDFWD_POWER_PEsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthMiddleServicesFwd / 2, -45, 45);
812 TGeoVolume* middleFwdPowerPEVolume =
new TGeoVolume(Form(
"TRK_MIDFWD_POWER_PE_%s%d", orLabel.c_str(), iSide), middleFwdPowerPE, medPE);
813 middleFwdPowerPEVolume->SetLineColor(kGray);
814 motherVolume->AddNode(middleFwdPowerCuVolume, 1, combiTrans);
815 motherVolume->AddNode(middleFwdPowerPEVolume, 1, combiTrans);
829 TGeoMedium* medSiO2 = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_SILICONDIOXIDE");
830 TGeoMedium* medPE = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYETHYLENE");
831 TGeoMedium* medCu = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_COPPER");
832 TGeoMedium* medPU = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_POLYURETHANE");
833 TGeoMedium* medH2O = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_WATER");
834 TGeoMedium* medCFiber = matmgr.getTGeoMedium(
"ALICE3_TRKSERVICES_CARBONFIBERM55J6K");
837 const int OTDisknFiber = 3 * 51;
838 const int OTDisknPower = 3 * 34;
842 float puCoolingAreaD = 0;
843 float h2oCoolingAreaD = 0;
848 const int OTBarrelnFiber = 460;
849 const int OTBarrelnPower = 306;
853 float puCoolingAreaB = 0;
854 float h2oCoolingAreaB = 0;
858 float rMinOuterServices = 68.5f;
859 float zLengthOuterServices = 201.f;
862 float rMinOuterCarbonSupport = 82.0f;
863 float rMaxOuterCarbonSupport = 82.4f;
864 const float zLengthOuterCarbon = 280.0f;
865 TGeoTube* outerBarrelCarbonSupport =
new TGeoTube(
"TRK_OT_CARBONSUPPORTsh", rMinOuterCarbonSupport, rMaxOuterCarbonSupport, zLengthOuterCarbon / 2.);
866 TGeoVolume* outerBarrelCarbonSupportVolume =
new TGeoVolume(
"TRK_OT_CARBONSUPPORT", outerBarrelCarbonSupport, medCFiber);
867 outerBarrelCarbonSupportVolume->SetLineColor(kGray);
868 LOGP(info,
"Creating carbon fiber support for Outer Tracker");
869 motherVolume->AddNode(outerBarrelCarbonSupportVolume, 1,
nullptr);
871 for (
auto& orientation : {Orientation::kASide, Orientation::kCSide}) {
872 string orLabel =
"A";
874 if (orientation == Orientation::kCSide) {
882 double rMax = rMinOuterServices;
884 double dZ = siO2FiberAreaB / (4 * 3.14 * rMax);
885 TGeoTube* outerBarrelFiberSIO2 =
new TGeoTube(Form(
"TRK_OUTERBARREL_FIBER_SIO2sh_%s", orLabel.c_str()), rMin, rMax, dZ);
886 TGeoVolume* outerBarrelFiberSIO2Volume =
new TGeoVolume(Form(
"TRK_OUTERBARREL_FIBER_SIO2_%s", orLabel.c_str()), outerBarrelFiberSIO2, medSiO2);
887 outerBarrelFiberSIO2Volume->SetLineColor(kGray);
888 auto* combiTrans =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ),
nullptr);
889 motherVolume->AddNode(outerBarrelFiberSIO2Volume, 1, combiTrans);
892 dZ = peFiberAreaB / (4 * 3.14 * rMax);
893 TGeoTube* outerBarrelFiberPE =
new TGeoTube(Form(
"TRK_OUTERBARREL_FIBER_PEsh_%s", orLabel.c_str()), rMin, rMax, dZ);
894 TGeoVolume* outerBarrelFiberPEVolume =
new TGeoVolume(Form(
"TRK_OUTERBARREL_FIBER_PE_%s", orLabel.c_str()), outerBarrelFiberPE, medPE);
895 outerBarrelFiberPEVolume->SetLineColor(kGray);
896 combiTrans =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ),
nullptr);
897 motherVolume->AddNode(outerBarrelFiberPEVolume, 1, combiTrans);
900 dZ = cuPowerAreaB / (4 * 3.14 * rMax);
901 TGeoTube* outerBarrelPowerCu =
new TGeoTube(Form(
"TRK_OUTERBARREL_POWER_CUsh_%s", orLabel.c_str()), rMin, rMax, dZ);
902 TGeoVolume* outerBarrelPowerCuVolume =
new TGeoVolume(Form(
"TRK_OUTERBARREL_POWER_CU_%s", orLabel.c_str()), outerBarrelPowerCu, medCu);
903 outerBarrelFiberSIO2Volume->SetLineColor(kGray);
904 combiTrans =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ),
nullptr);
905 motherVolume->AddNode(outerBarrelPowerCuVolume, 1, combiTrans);
908 dZ = pePowerAreaB / (4 * 3.14 * rMax);
909 TGeoTube* outerBarrelPowerPE =
new TGeoTube(Form(
"TRK_OUTERBARREL_POWER_PEsh_%s", orLabel.c_str()), rMin, rMax, dZ);
910 TGeoVolume* outerBarrelPowerPEVolume =
new TGeoVolume(Form(
"TRK_OUTERBARREL_POWER_PE_%s", orLabel.c_str()), outerBarrelPowerPE, medPE);
911 outerBarrelPowerPEVolume->SetLineColor(kGray);
912 combiTrans =
new TGeoCombiTrans(0, 0, (
int)orientation * (zCur + dZ),
nullptr);
913 motherVolume->AddNode(outerBarrelPowerPEVolume, 1, combiTrans);
915 for (
int iSide = 0; iSide < 2; iSide++) {
917 double rCur = rMinOuterServices;
918 double dR = (siO2FiberAreaD + siO2FiberAreaB) / (3.14 * rCur);
919 TGeoTubeSeg* outerDisksFiberSIO2 =
new TGeoTubeSeg(Form(
"TRK_OUTERDISKS_FIBER_SIO2sh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthOuterServices / 2, -45, 45);
920 TGeoVolume* outerDisksFiberSIO2Volume =
new TGeoVolume(Form(
"TRK_OUTERDISKS_FIBER_SIO2_%s%d", orLabel.c_str(), iSide), outerDisksFiberSIO2, medSiO2);
921 outerDisksFiberSIO2Volume->SetLineColor(kGray);
924 dR = (peFiberAreaD + peFiberAreaB) / (3.14 * rCur);
925 TGeoTubeSeg* outerDisksFiberPE =
new TGeoTubeSeg(Form(
"TRK_OUTERDISKS_FIBER_PEsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthOuterServices / 2, -45, 45);
926 TGeoVolume* outerDisksFiberPEVolume =
new TGeoVolume(Form(
"TRK_OUTERDISKS_FIBER_PE_%s%d", orLabel.c_str(), iSide), outerDisksFiberPE, medPE);
927 outerDisksFiberPEVolume->SetLineColor(kGray);
929 float translation = (
int)orientation * (149.f + zLengthOuterServices / 2);
930 auto* combiTrans =
new TGeoCombiTrans(0, 0, translation,
new TGeoRotation(
"", refAngle + iSide * 180., 0, 0));
931 motherVolume->AddNode(outerDisksFiberSIO2Volume, 1, combiTrans);
932 motherVolume->AddNode(outerDisksFiberPEVolume, 1, combiTrans);
936 dR = (cuPowerAreaD + cuPowerAreaB) / (3.14 * rCur);
937 TGeoTubeSeg* outerDisksPowerCu =
new TGeoTubeSeg(Form(
"TRK_OUTERDISKS_POWER_CUsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthOuterServices / 2, -45, 45);
938 TGeoVolume* outerDisksPowerCuVolume =
new TGeoVolume(Form(
"TRK_OUTERDISKS_POWER_CU_%s%d", orLabel.c_str(), iSide), outerDisksPowerCu, medCu);
939 outerDisksPowerCuVolume->SetLineColor(kGray);
942 dR = (pePowerAreaD + pePowerAreaB) / (3.14 * rCur);
943 TGeoTubeSeg* outerDisksPowerPE =
new TGeoTubeSeg(Form(
"TRK_OUTERDISKS_POWER_PEsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthOuterServices / 2, -45, 45);
944 TGeoVolume* outerDisksPowerPEVolume =
new TGeoVolume(Form(
"TRK_OUTERDISKS_POWER_PE_%s%d", orLabel.c_str(), iSide), outerDisksPowerPE, medPE);
945 outerDisksPowerPEVolume->SetLineColor(kGray);
946 motherVolume->AddNode(outerDisksPowerCuVolume, 1, combiTrans);
947 motherVolume->AddNode(outerDisksPowerPEVolume, 1, combiTrans);