@@ -86,6 +86,26 @@ void Detector::createMaterials()
8686
8787 o2::base::Detector::Mixture (1 , " POLYSTYRENE" , aPolys, zPolys, dPolys, 2 , wPolys);
8888 o2::base::Detector::Medium (1 , " POLYSTYRENE" , 1 , 0 , ifield, fieldm, tmaxfdPolys, stemaxPolys, deemaxPolys, epsilPolys, stminPolys);
89+
90+ // Iron (pure Fe) - cryostat walls (Steel variant)
91+ float aIron = 55.845 ;
92+ float zIron = 26 .;
93+ float dIron = 7.874 ;
94+ o2::base::Detector::Material (2 , " IRON" , aIron, zIron, dIron, 0 ., 0 .);
95+ o2::base::Detector::Medium (2 , " IRON" , 2 , 0 , ifield, fieldm, tmaxfdPolys, stemaxPolys, deemaxPolys, epsilPolys, stminPolys);
96+
97+ // WindingPack - superconducting coil (NbTi + Cu + Al)
98+ // Mass fractions: NbTi=8.10%, Cu=11.18%, Al=80.72%, density=2.96 g/cm3 (Arnaud report v0.2)
99+ float aWP[4 ] = {92.90638 , 47.867 , 63.546 , 26.982 };
100+ float zWP[4 ] = {41 ., 22 ., 29 ., 13 .};
101+ float wWP[4 ] = {0.0405 , 0.0405 , 0.1118 , 0.8072 };
102+ float dWP = 2.96 ;
103+ o2::base::Detector::Mixture (3 , " WINDINGPACK" , aWP, zWP, dWP, 4 , wWP);
104+ o2::base::Detector::Medium (3 , " WINDINGPACK" , 3 , 0 , ifield, fieldm, tmaxfdPolys, stemaxPolys, deemaxPolys, epsilPolys, stminPolys);
105+
106+ // Vacuum - thermal insulation gaps
107+ o2::base::Detector::Material (4 , " VACUUM" , 1e-16 , 1e-16 , 1e-16 , 0 ., 0 .);
108+ o2::base::Detector::Medium (4 , " VACUUM" , 4 , 0 , ifield, fieldm, tmaxfdPolys, stemaxPolys, deemaxPolys, epsilPolys, stminPolys);
89109}
90110
91111void Detector::InitializeO2Detector ()
@@ -140,6 +160,46 @@ void Detector::createGeometry()
140160 for (auto & layer : mLayers ) {
141161 layer.createLayer (vMID);
142162 }
163+
164+ // Superconducting magnet/cryostat geometry
165+ // Port of GEANT4 simulation by Ian Perez Garcia (ICN-UNAM)
166+ // Reference: github.com/IanPG/MID-Geometry-Studies
167+ // Aluminium walls variant: 11 cm total, Rmin=140 cm, Rmax=200 cm, half-length=400 cm
168+ const float kRmin = 140 .0f ;
169+ const float kRmax = 200 .0f ;
170+ const float kHalfLen = 400 .0f ;
171+ const float kWallInner = 2 .5f ;
172+ const float kWallOuter = 1 .5f ;
173+ const float kCoilInner = 160 .0f ;
174+ const float kCoilThick = 4 .8f ;
175+ const float kMLI = 0 .2f ;
176+ const float kSupport = 2 .0f ;
177+
178+ const float kR1 = kRmin + kWallInner ;
179+ const float kR2 = kCoilInner ;
180+ const float kR3 = kCoilInner + kCoilThick ;
181+ const float kR4 = kR3 + kMLI ;
182+ const float kR5 = kR4 + kSupport ;
183+ const float kR6 = kRmax - kWallOuter ;
184+
185+ auto * magnetMother = new TGeoVolume (" MI3MagnetMother" ,
186+ new TGeoTube (" MI3MagnetMother_S" , kRmin , kRmax , kHalfLen ),
187+ gGeoManager ->GetMedium (" MI3_POLYSTYRENE" ));
188+ gGeoManager ->GetTopVolume ()->AddNode (magnetMother, 1 , new TGeoTranslation (0 ., 0 ., -1155 .));
189+
190+ magnetMother->AddNode (new TGeoVolumeAssembly (" MI3InnerWall" ), 1 , nullptr );
191+
192+ magnetMother->AddNode (new TGeoVolumeAssembly (" MI3VacGap1" ), 1 , nullptr );
193+
194+ magnetMother->AddNode (new TGeoVolumeAssembly (" MI3Coil" ), 1 , nullptr );
195+
196+ magnetMother->AddNode (new TGeoVolumeAssembly (" MI3MLI" ), 1 , nullptr );
197+
198+ magnetMother->AddNode (new TGeoVolumeAssembly (" MI3CoilSupport" ), 1 , nullptr );
199+
200+ magnetMother->AddNode (new TGeoVolumeAssembly (" MI3VacGap2" ), 1 , nullptr );
201+
202+ magnetMother->AddNode (new TGeoVolumeAssembly (" MI3OuterWall" ), 1 , nullptr );
143203}
144204
145205void Detector::Reset ()
0 commit comments