81 float aAir[4] = {12.0107, 14.0067, 15.9994, 39.948};
82 float zAir[4] = {6., 7., 8., 18.};
83 float wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
84 float dAir = 1.20479E-3;
85 float dAir1 = 1.20479E-11;
87 float epsil, stmin, tmaxfd, deemax, stemax;
94 matmgr.Mixture(
"ALICE3_MAGNET", 1,
"VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
95 matmgr.Material(
"ALICE3_MAGNET", 9,
"ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
96 matmgr.Material(
"ALICE3_MAGNET", 19,
"COPPER$", 63.55, 29., 8.96, 1.436, 15.1);
98 matmgr.Medium(
"ALICE3_MAGNET", 1,
"VACUUM", 1, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
99 matmgr.Medium(
"ALICE3_MAGNET", 9,
"ALUMINIUM", 9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
100 matmgr.Medium(
"ALICE3_MAGNET", 19,
"COPPER", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
110 if (doCopperStabilizer) {
111 mRestMaterialThickness -= 3.3;
112 mRestMaterialThickness += 2.2;
113 LOG(
debug) <<
"Alice 3 magnet: using Copper Stabilizer with thickness " << mRestMaterialThickness <<
" cm";
116 TGeoManager* geoManager = gGeoManager;
117 TGeoVolume* barrel = geoManager->GetVolume(
"barrel");
119 LOGP(fatal,
"Could not find barrel volume while constructing Alice 3 magnet geometry");
123 auto kMedAl = matmgr.getTGeoMedium(
"ALICE3_MAGNET_ALUMINIUM");
124 auto kMedCu = matmgr.getTGeoMedium(
"ALICE3_MAGNET_COPPER");
125 auto kMedVac = matmgr.getTGeoMedium(
"ALICE3_MAGNET_VACUUM");
128 LOGP(
debug,
"Alice 3 magnet: creating inner wrap with inner radius {} cm and thickness {} cm", mInnerWrapInnerRadius, mInnerWrapThickness);
129 TGeoTube* innerLayer =
new TGeoTube(mInnerWrapInnerRadius, mInnerWrapInnerRadius + mInnerWrapThickness, mZLength / 2);
130 TGeoTube* innerVacuum =
new TGeoTube(mInnerWrapInnerRadius + mInnerWrapThickness, mCoilInnerRadius, mZLength / 2);
132 LOGP(
debug,
"Alice 3 magnet: creating coils layer with inner radius {} cm and thickness {} cm", mCoilInnerRadius, mCoilThickness);
133 TGeoTube* coilsLayer =
new TGeoTube(mCoilInnerRadius, mCoilInnerRadius + mCoilThickness, mZLength / 2);
134 TGeoTube* restMaterial =
new TGeoTube(mRestMaterialRadius, mRestMaterialRadius + mRestMaterialThickness, mZLength / 2);
135 TGeoTube* outerVacuum =
new TGeoTube(mRestMaterialRadius + mRestMaterialThickness, mOuterWrapInnerRadius, mZLength / 2);
137 LOGP(
debug,
"Alice 3 magnet: creating outer wrap with inner radius {} cm and thickness {} cm", mOuterWrapInnerRadius, mOuterWrapThickness);
138 TGeoTube* outerLayer =
new TGeoTube(mOuterWrapInnerRadius, mOuterWrapInnerRadius + mOuterWrapThickness, mZLength / 2);
140 TGeoVolume* innerWrapVol =
new TGeoVolume(
"innerWrap", innerLayer, kMedAl);
141 TGeoVolume* innerVacuumVol =
new TGeoVolume(
"innerVacuum", innerVacuum, kMedVac);
142 TGeoVolume* coilsVol =
new TGeoVolume(
"coils", coilsLayer, kMedCu);
143 TGeoVolume* restMaterialVol =
new TGeoVolume(
"restMaterial", restMaterial, doCopperStabilizer ? kMedCu : kMedAl);
144 TGeoVolume* outerVacuumVol =
new TGeoVolume(
"outerVacuum", outerVacuum, kMedVac);
145 TGeoVolume* outerWrapVol =
new TGeoVolume(
"outerWrap", outerLayer, kMedAl);
147 innerWrapVol->SetLineColor(kRed + 2);
148 innerVacuumVol->SetLineColor(kRed + 2);
149 coilsVol->SetLineColor(kRed + 2);
150 restMaterialVol->SetLineColor(kRed + 2);
151 outerVacuumVol->SetLineColor(kRed + 2);
152 outerWrapVol->SetLineColor(kRed + 2);
154 new TGeoVolumeAssembly(
"magnet");
155 auto* magnet = gGeoManager->GetVolume(
"magnet");
156 magnet->AddNode(innerWrapVol, 1,
nullptr);
157 magnet->AddNode(innerVacuumVol, 1,
nullptr);
158 magnet->AddNode(coilsVol, 1,
nullptr);
159 magnet->AddNode(restMaterialVol, 1,
nullptr);
160 magnet->AddNode(outerVacuumVol, 1,
nullptr);
161 magnet->AddNode(outerWrapVol, 1,
nullptr);
163 magnet->SetVisibility(1);
165 barrel->AddNode(magnet, 1,
new TGeoTranslation(0, 30.f, 0));