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);
107 float aWP[4] = {92.90638f, 47.867f, 63.546f, 26.982f};
108 float zWP[4] = {41.f, 22.f, 29.f, 13.f};
109 float wWP[4] = {0.0405f, 0.0405f, 0.1118f, 0.8072f};
111 matmgr.Mixture(
"ALICE3_MAGNET", 29,
"WINDINGPACK", aWP, zWP, dWP, 4, wWP);
112 matmgr.Medium(
"ALICE3_MAGNET", 29,
"WINDINGPACK", 29, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
122 switch (passiveBaseParam.mMagnetLayout) {
124 mInnerWrapInnerRadius = 140.f;
125 mInnerWrapThickness = 1.f;
126 mCoilInnerRadius = 160.f;
127 mCoilThickness = 0.3f;
128 mRestMaterialRadius = 160.3f;
129 mRestMaterialThickness = 6.8f;
130 mOuterWrapInnerRadius = 180.f;
131 mOuterWrapThickness = 3.f;
135 mInnerWrapInnerRadius = 125.f;
136 mInnerWrapThickness = 1.f;
137 mCoilInnerRadius = 145.f;
138 mCoilThickness = 0.3f;
139 mRestMaterialRadius = 145.3f;
140 mRestMaterialThickness = 6.8f;
141 mOuterWrapInnerRadius = 165.f;
142 mOuterWrapThickness = 3.f;
146 mInnerWrapInnerRadius = 140.f;
147 mInnerWrapThickness = 1.f;
148 mCoilInnerRadius = 160.f;
149 mCoilThickness = 0.3f;
150 mRestMaterialRadius = 160.3f;
151 mRestMaterialThickness = 6.8f;
152 mOuterWrapInnerRadius = 200.f;
153 mOuterWrapThickness = 3.f;
157 LOG(fatal) <<
"Unknown detector layout " << passiveBaseParam.mMagnetLayout;
161 bool doCopperStabilizer =
false;
162 bool doWindingPack =
false;
163 switch (passiveBaseParam.mMagType) {
168 doCopperStabilizer =
true;
169 mRestMaterialThickness -= 3.3;
170 mRestMaterialThickness += 2.2;
171 LOG(
debug) <<
"Alice 3 magnet: using Copper Stabilizer with thickness " << mRestMaterialThickness <<
" cm";
174 doWindingPack =
true;
175 LOG(
debug) <<
"Alice 3 magnet: using WindingPack (NbTi+Cu+Al) coil";
179 doWindingPack =
true;
180 mInnerWrapInnerRadius = 140.f;
181 mInnerWrapThickness = 1.0f;
182 mCoilInnerRadius = 160.f;
183 mCoilThickness = 0.3f;
184 mRestMaterialRadius = 160.3f;
185 mRestMaterialThickness = 15.7f;
186 mOuterWrapInnerRadius = 197.f;
187 mOuterWrapThickness = 3.0f;
189 LOG(
debug) <<
"Alice 3 magnet: using Ian Perez Garcia design (ICN-UNAM)";
192 LOG(fatal) <<
"Unknown magnet layout " << passiveBaseParam.mMagType;
196 TGeoManager* geoManager = gGeoManager;
197 TGeoVolume* barrel = geoManager->GetVolume(
"barrel");
199 LOGP(fatal,
"Could not find barrel volume while constructing Alice 3 magnet geometry");
203 auto kMedAl = matmgr.getTGeoMedium(
"ALICE3_MAGNET_ALUMINIUM");
204 auto kMedCu = matmgr.getTGeoMedium(
"ALICE3_MAGNET_COPPER");
205 auto kMedWP = matmgr.getTGeoMedium(
"ALICE3_MAGNET_WINDINGPACK");
206 auto kMedVac = matmgr.getTGeoMedium(
"ALICE3_MAGNET_VACUUM");
209 LOGP(
debug,
"Alice 3 magnet: creating inner wrap with inner radius {} cm and thickness {} cm", mInnerWrapInnerRadius, mInnerWrapThickness);
210 TGeoTube* innerLayer =
new TGeoTube(mInnerWrapInnerRadius, mInnerWrapInnerRadius + mInnerWrapThickness, mZLength / 2);
211 TGeoTube* innerVacuum =
new TGeoTube(mInnerWrapInnerRadius + mInnerWrapThickness, mCoilInnerRadius, mZLength / 2);
213 LOGP(
debug,
"Alice 3 magnet: creating coils layer with inner radius {} cm and thickness {} cm", mCoilInnerRadius, mCoilThickness);
214 TGeoTube* coilsLayer =
new TGeoTube(mCoilInnerRadius, mCoilInnerRadius + mCoilThickness, mZLength / 2);
215 TGeoTube* restMaterial =
new TGeoTube(mRestMaterialRadius, mRestMaterialRadius + mRestMaterialThickness, mZLength / 2);
216 TGeoTube* outerVacuum =
new TGeoTube(mRestMaterialRadius + mRestMaterialThickness, mOuterWrapInnerRadius, mZLength / 2);
218 LOGP(
debug,
"Alice 3 magnet: creating outer wrap with inner radius {} cm and thickness {} cm", mOuterWrapInnerRadius, mOuterWrapThickness);
219 TGeoTube* outerLayer =
new TGeoTube(mOuterWrapInnerRadius, mOuterWrapInnerRadius + mOuterWrapThickness, mZLength / 2);
221 TGeoVolume* innerWrapVol =
new TGeoVolume(
"innerWrap", innerLayer, kMedAl);
222 TGeoVolume* innerVacuumVol =
new TGeoVolume(
"innerVacuum", innerVacuum, kMedVac);
223 TGeoVolume* coilsVol =
new TGeoVolume(
"coils", coilsLayer, doWindingPack ? kMedWP : kMedCu);
224 TGeoVolume* restMaterialVol =
new TGeoVolume(
"restMaterial", restMaterial, doCopperStabilizer ? kMedCu : kMedAl);
225 TGeoVolume* outerVacuumVol =
new TGeoVolume(
"outerVacuum", outerVacuum, kMedVac);
226 TGeoVolume* outerWrapVol =
new TGeoVolume(
"outerWrap", outerLayer, kMedAl);
228 innerWrapVol->SetLineColor(kRed + 2);
229 innerVacuumVol->SetLineColor(kRed + 2);
230 coilsVol->SetLineColor(kRed + 2);
231 restMaterialVol->SetLineColor(kRed + 2);
232 outerVacuumVol->SetLineColor(kRed + 2);
233 outerWrapVol->SetLineColor(kRed + 2);
235 new TGeoVolumeAssembly(
"magnet");
236 auto* magnet = gGeoManager->GetVolume(
"magnet");
237 magnet->AddNode(innerWrapVol, 1,
nullptr);
238 magnet->AddNode(innerVacuumVol, 1,
nullptr);
239 magnet->AddNode(coilsVol, 1,
nullptr);
240 magnet->AddNode(restMaterialVol, 1,
nullptr);
241 magnet->AddNode(outerVacuumVol, 1,
nullptr);
242 magnet->AddNode(outerWrapVol, 1,
nullptr);
244 magnet->SetVisibility(1);
246 barrel->AddNode(magnet, 1,
new TGeoTranslation(0, 30.f, 0));