67 float aAir[4] = {12.0107, 14.0067, 15.9994, 39.948};
68 float zAir[4] = {6., 7., 8., 18.};
69 float wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
70 float dAir = 1.20479E-3;
71 float dAir1 = 1.20479E-11;
73 float epsil, stmin, tmaxfd, deemax, stemax;
80 matmgr.Mixture(
"ALICE3_MAGNET", 1,
"VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
81 matmgr.Material(
"ALICE3_MAGNET", 9,
"ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
82 matmgr.Material(
"ALICE3_MAGNET", 19,
"COPPER$", 63.55, 29., 8.96, 1.436, 15.1);
84 matmgr.Medium(
"ALICE3_MAGNET", 1,
"VACUUM", 1, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
85 matmgr.Medium(
"ALICE3_MAGNET", 9,
"ALUMINIUM", 9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
86 matmgr.Medium(
"ALICE3_MAGNET", 19,
"COPPER", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
93 TGeoManager* geoManager = gGeoManager;
94 TGeoVolume* barrel = geoManager->GetVolume(
"barrel");
96 LOGP(fatal,
"Could not find barrel volume while constructing Alice 3 magnet geometry");
100 auto kMedAl = matmgr.getTGeoMedium(
"ALICE3_MAGNET_ALUMINIUM");
101 auto kMedCu = matmgr.getTGeoMedium(
"ALICE3_MAGNET_COPPER");
102 auto kMedVac = matmgr.getTGeoMedium(
"ALICE3_MAGNET_VACUUM");
105 LOGP(
debug,
"Alice 3 magnet: creating inner wrap with inner radius {} and thickness {}", mInnerWrapInnerRadius, mInnerWrapThickness);
106 TGeoTube* innerLayer =
new TGeoTube(mInnerWrapInnerRadius, mInnerWrapInnerRadius + mInnerWrapThickness, mZLength / 2);
107 TGeoTube* innerVacuum =
new TGeoTube(mInnerWrapInnerRadius + mInnerWrapThickness, mCoilInnerRadius, mZLength / 2);
109 LOGP(
debug,
"Alice 3 magnet: creating coils layer with inner radius {} and thickness {}", mCoilInnerRadius, mCoilThickness);
110 TGeoTube* coilsLayer =
new TGeoTube(mCoilInnerRadius, mCoilInnerRadius + mCoilThickness, mZLength / 2);
111 TGeoTube* restMaterial =
new TGeoTube(mRestMaterialRadius, mRestMaterialRadius + mRestMaterialThickness, mZLength / 2);
112 TGeoTube* outerVacuum =
new TGeoTube(mRestMaterialRadius + mRestMaterialThickness, mOuterWrapInnerRadius, mZLength / 2);
114 LOGP(
debug,
"Alice 3 magnet: creating outer wrap with inner radius {} and thickness {}", mOuterWrapInnerRadius, mOuterWrapThickness);
115 TGeoTube* outerLayer =
new TGeoTube(mOuterWrapInnerRadius, mOuterWrapInnerRadius + mOuterWrapThickness, mZLength / 2);
117 TGeoVolume* innerWrapVol =
new TGeoVolume(
"innerWrap", innerLayer, kMedAl);
118 TGeoVolume* innerVacuumVol =
new TGeoVolume(
"innerVacuum", innerVacuum, kMedVac);
119 TGeoVolume* coilsVol =
new TGeoVolume(
"coils", coilsLayer, kMedCu);
120 TGeoVolume* restMaterialVol =
new TGeoVolume(
"restMaterial", restMaterial, kMedAl);
121 TGeoVolume* outerVacuumVol =
new TGeoVolume(
"outerVacuum", outerVacuum, kMedVac);
122 TGeoVolume* outerWrapVol =
new TGeoVolume(
"outerWrap", outerLayer, kMedAl);
124 innerWrapVol->SetLineColor(kRed + 2);
125 innerVacuumVol->SetLineColor(kRed + 2);
126 coilsVol->SetLineColor(kRed + 2);
127 restMaterialVol->SetLineColor(kRed + 2);
128 outerVacuumVol->SetLineColor(kRed + 2);
129 outerWrapVol->SetLineColor(kRed + 2);
131 new TGeoVolumeAssembly(
"magnet");
132 auto* magnet = gGeoManager->GetVolume(
"magnet");
133 magnet->AddNode(innerWrapVol, 1,
nullptr);
134 magnet->AddNode(innerVacuumVol, 1,
nullptr);
135 magnet->AddNode(coilsVol, 1,
nullptr);
136 magnet->AddNode(restMaterialVol, 1,
nullptr);
137 magnet->AddNode(outerVacuumVol, 1,
nullptr);
138 magnet->AddNode(outerWrapVol, 1,
nullptr);
140 magnet->SetVisibility(1);
142 barrel->AddNode(magnet, 1,
new TGeoTranslation(0, 30.f, 0));