]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STRUCT/AliMAG.cxx
//
[u/mrichter/AliRoot.git] / STRUCT / AliMAG.cxx
index ad8178ffcef0cbbc48ba9e08aab8c2a4d429555d..3d39a10e4b3ecf17645816b876eff8d83a3ae611 100644 (file)
 <a href="mailto:andreas.morsch@cern.ch">Andreas Morsch</a>.
 </font>
 <pre>
+
 */
 //End_Html
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
  
+#include <TGeoCompositeShape.h>
+#include <TGeoGlobalMagField.h>
+#include <TGeoManager.h>
+#include <TGeoMatrix.h>
+#include <TGeoMedium.h>
+#include <TGeoPgon.h>
+#include <TGeoVolume.h>
+#include <TGeoXtru.h>
 #include <TVirtualMC.h>
 
 #include "AliMAG.h"
@@ -63,9 +72,9 @@ AliMAG::AliMAG(const char *name, const char *title)
   */
   //End_Html
   
-  SetMarkerColor(7);
-  SetMarkerStyle(2);
-  SetMarkerSize(0.4);
+  //PH  SetMarkerColor(7);
+  //PH  SetMarkerStyle(2);
+  //PH  SetMarkerSize(0.4);
 }
 
 //_____________________________________________________________________________
@@ -79,146 +88,255 @@ void AliMAG::CreateGeometry()
     <img src="picts/mag.gif">
   */
   //End_Html
+    
   //Begin_Html
   /*
     <img src="picts/tree_mag.gif">
-  */
+    <br> Dimensions taken from drawing: ALIL3___00010
   //End_Html
-  
-  Int_t *idtmed = fIdtmed->GetArray()-299;
-  
-  Float_t dpar[13];
-  Int_t idrotm[399];
-  Float_t par[10];
-  
-  // ANGLE POLAIRE MAXIMUM 
-  
-  //  Define Mother 
-  
-  par[0] = 22.5;
-  par[1] = 360.;
-  par[2] = 8.;
-  par[3] = 2.;
-  par[4] = -600.;
-  par[5] = 580.;
-  par[6] = 790.;
-  par[7] = 600.;
-  par[8] = 580.;
-  par[9] = 790.;
-  gMC->Gsvolu("L3MO", "PGON", idtmed[334], par, 10);
-  gMC->Gspos("L3MO", 1, "ALIC", 0., -30., 0., 0, "ONLY");
-  
-  // Define coils 
-  
-  par[5] = 585.;
-  par[6] = 690.;
-  par[8] = 585.;
-  par[9] = 690.;
-  gMC->Gsvolu("L3CO", "PGON", idtmed[328], par, 10);
-  gMC->Gspos("L3CO", 1, "L3MO", 0., 0., 0., 0, "ONLY");
-  
-  par[5] = 580.;
-  par[6] = 585.;
-  par[8] = 580.;
-  par[9] = 585.;
-  gMC->Gsvolu("L3C1", "PGON", idtmed[308], par, 10);
-  gMC->Gspos("L3C1", 1, "L3MO", 0., 0., 0., 0, "ONLY");
-  
-  // Define yoke 
-  
-  par[5] = 690.;
-  par[6] = 790.;
-  par[8] = 690.;
-  par[9] = 790.;
-  gMC->Gsvolu("L3YO", "PGON", idtmed[329], par, 10);
-  gMC->Gspos("L3YO", 1, "L3MO", 0., 0., 0., 0, "ONLY");
-  
-  // Define the return yoke of L3 (DOOR) 
-  
-  par[4] = 600.;
-  par[5] = 0.;
-  par[6] = 790.;
-  par[7] = 700.;
-  par[8] = par[5];
-  par[9] = par[6];
-  gMC->Gsvolu("L3DO", "PGON", idtmed[334], par, 10);
-  gMC->Gsvolu("L3DX", "PGON", idtmed[334], par, 10);
-  
-  par[4] = 610.;
-  par[5] = 0.;
-  par[6] = 790.;
-  par[7] = 700.;
-  par[8] = par[5];
-  par[9] = par[6];
-  gMC->Gsvolu("L3FR", "PGON", idtmed[329], par, 10);
-  gMC->Gsvolu("L3FX", "PGON", idtmed[329], par, 10);
-  
-  // INNER LAYER 
-  
-  par[4] = 600.;
-  par[7] = 610.;
-  gMC->Gsvolu("L3IR", "PGON", idtmed[309], par, 10);
-  gMC->Gsvolu("L3IX", "PGON", idtmed[309], par, 10);
-  
-  //     DOOR OPENING 
-  
-  dpar[0] = 22.5;
-  dpar[1] = 360;
-  dpar[2] = 8.;
-  dpar[3] = 3.;
-  dpar[4] = 610.;
-  dpar[5] = 0.;
-  dpar[6] = 163.5;
-  dpar[7] = 670.;
-  dpar[8] = dpar[5];
-  dpar[9] = dpar[6];
-  dpar[10] = 700.;
-  dpar[11] = dpar[5];
-  dpar[12] = dpar[6] + 50.;
-  gMC->Gsvolu("L3O1", "PGON", idtmed[314], dpar, 13);
-  gMC->Gsvolu("L3O3", "PGON", idtmed[314], dpar, 13);
-  par[4] = 600.;
-  par[5] = 0.;
-  par[6] = 163.5;
-  par[7] = 610.;
-  par[8] = 0.;
-  par[9] = 163.5;
-  gMC->Gsvolu("L3O2", "PGON", idtmed[314], par, 10);
-  gMC->Gsvolu("L3O4", "PGON", idtmed[314], par, 10);
-  
-  //     THE DOOR OPENING HAS TO BE PLACED WITH 'MANY' SINCE THE REGION 
-  //     WILL CONTAIN A MUON CHAMBER, BEAM PIPE AND BEAM SHIELD 
-  //     PLACED WITH 'ONLY'. 
-  
-  AliMatrix(idrotm[300], 90., 0., 90., 90., 180., 0.);
+  */
+// Octagon
+    const Int_t   kNSides              =    8;
+    const Float_t kStartAngle          =   22.5; // deg
+    const Float_t kFullAngle           =  360.0; // deg
+//  Mother volume 
+    const Float_t kRBMotherInner       = 600.00; // cm
+    const Float_t kRBMotherOuter       = 790.50; // cm
+    const Float_t kLBMother            = 706.00; // cm
+// Yoke     
+    const Float_t kRYokeInner          = 703.50; // cm
+    const Float_t kRYokeOuter          = 790.50; // cm
+    const Float_t kLYoke               = 620.00; // cm
+// Coil
+    const Float_t kRCoilInner          = 593.00; // cm
+    const Float_t kRCoilOuter          = 682.00; // cm
+    const Float_t kLCoil               = 588.00; // cm
+// Cooling
+    const Float_t kRCoolingOuter       = 1.70; // cm
+    const Float_t kRCoolingInner       = 1.00; // cm
+// Thermal Shield    
+    const Float_t kRThermalShieldInner = 566.00; // cm
+    const Float_t kRThermalShieldOuter = 571.00; // cm
+// Crown    
+    const Float_t kRCrownInner         = 600.00; // cm    
+    const Float_t kRCrownOuter         = 785.50; // cm
+    const Float_t kLCrown1             = 605.00; // cm
+    const Float_t kLCrown2             = 620.00; // cm
+    const Float_t kLCrown3             = 706.00; // cm
+// Door
+    const Float_t kRDoorOuter          = 600.00; // cm
+    const Float_t kRPlugInner          = 183.50; // cm
+    const Float_t kLDoor1              = 615.50; // cm
+    const Float_t kLDoor2              = 714.60; // cm
+//
+    const Float_t kDegRad              = TMath::Pi()/180.;
+    
+    
+  //
+  // Top volume 
+  TGeoVolume* top = gGeoManager->GetVolume("ALIC");
+  // Media 
+  TGeoMedium* medAir    = gGeoManager->GetMedium("MAG_AIR_C1");
+  TGeoMedium* medAlu    = gGeoManager->GetMedium("MAG_ALU_C1");  
+  TGeoMedium* medAluI   = gGeoManager->GetMedium("MAG_ALU_C0");
+  TGeoMedium* medSteel  = gGeoManager->GetMedium("MAG_ST_C1");
+  TGeoMedium* medWater  = gGeoManager->GetMedium("MAG_WATER");
+  //
+  // Offset between LHC and LEP axis
+  Float_t os = -30.;
 
-  gMC->Gspos("L3DO", 1, "ALIC", 0., -30., 0., 0, "MANY");
-  gMC->Gspos("L3FR", 1, "L3DO", 0., 0., 0., 0, "MANY");
-  gMC->Gspos("L3IR", 1, "L3DO", 0., 0., 0., 0, "MANY");
-  
-  gMC->Gspos("L3DX", 1, "ALIC", 0., -30., 0., idrotm[300], "MANY");
-  gMC->Gspos("L3FX", 1, "L3DX", 0., 0., 0., 0, "MANY");
-  gMC->Gspos("L3IX", 1, "L3DX", 0., 0., 0., 0, "MANY");
+  //
+  //  Define Barrel Mother 
+  //  
+  TGeoPgon* shBMother = new TGeoPgon(kStartAngle, kFullAngle, kNSides, 2);
+  shBMother->DefineSection(0, -kLBMother, kRBMotherInner, kRBMotherOuter);
+  shBMother->DefineSection(1,  kLBMother, kRBMotherInner, kRBMotherOuter);  
+  // 
+  TGeoVolumeAssembly* voBMother = new TGeoVolumeAssembly("L3BM");
+  //
+  // Define Thermal Shield
+  //
+  // Only one layer
+  // This can be improved: replace by (protection - shield - insulation) !
+  //
+  TGeoPgon* shThermSh = new TGeoPgon(kStartAngle, kFullAngle, kNSides, 2);
+  shThermSh->DefineSection(0, -kLCoil, kRThermalShieldInner, kRThermalShieldOuter);
+  shThermSh->DefineSection(1,  kLCoil, kRThermalShieldInner, kRThermalShieldOuter);  
+  // 
+  TGeoVolume* voThermSh = new TGeoVolume("L3TS", shThermSh, medAluI);
+  voBMother->AddNode(voThermSh, 1, new TGeoTranslation(0., 0., 0.));
+  //  
+  // Define Coils and cooling circuits
+  //
+  TGeoPgon* shCoilMother = new TGeoPgon(kStartAngle, kFullAngle, kNSides, 2);
+  shCoilMother->DefineSection(0, -kLCoil, kRCoilInner - 2. * kRCoolingOuter, kRCoilOuter + 2. * kRCoolingOuter);
+  shCoilMother->DefineSection(1,  kLCoil, kRCoilInner - 2. * kRCoolingOuter, kRCoilOuter + 2. * kRCoolingOuter);  
+  // 
+  // Coils
+  TGeoVolume* voCoilMother = new TGeoVolume("L3CM", shCoilMother, medAir);
+  voBMother->AddNode(voCoilMother, 1, new TGeoTranslation(0., 0., 0.));
+  // Devide into the 168 turns
+  TGeoVolume* voCoilTurn   = voCoilMother->Divide("L3CD", 3, 168, 0., 0.);
+  TGeoPgon* shCoils = new TGeoPgon(kStartAngle, kFullAngle, kNSides, 2);
+  shCoils->DefineSection(0, -3., kRCoilInner, kRCoilOuter);
+  shCoils->DefineSection(1,  3., kRCoilInner, kRCoilOuter); 
+  // 
+  TGeoVolume* voCoils = new TGeoVolume("L3C0", shCoils, medAlu);
+  voCoilTurn->AddNode(voCoils, 1, new TGeoTranslation(0., 0., 0.));
+  //
+  // Hexagonal Cooling circuits
+  // 
+  const Float_t kRCC = kRCoolingOuter;
+  const Float_t kRCW = kRCoolingInner;
+  const Float_t kRCL = kRCC * TMath::Tan(30. / 180. * TMath::Pi());
+  const Float_t kRWL = kRCW * TMath::Tan(30. / 180. * TMath::Pi());
+  // Outer Circuits
+  //
+  // Pipe
+  TGeoPgon* shCoolingPipeO = new TGeoPgon(kStartAngle, kFullAngle, kNSides, 4);
+  shCoolingPipeO->DefineSection(0, -kRCC, kRCoilOuter + kRCC, kRCoilOuter + kRCC + 0.01);
+  shCoolingPipeO->DefineSection(1, -kRCL, kRCoilOuter, kRCoilOuter + 2. * kRCC);
+  shCoolingPipeO->DefineSection(2,  kRCL, kRCoilOuter, kRCoilOuter + 2. * kRCC);
+  shCoolingPipeO->DefineSection(3,  kRCC, kRCoilOuter + kRCC, kRCoilOuter + kRCC + 0.01);
+  //
+  TGeoVolume* voCoolingPipeO = new TGeoVolume("L3CCO", shCoolingPipeO, medAlu);
+  voCoilTurn->AddNode(voCoolingPipeO, 1, new TGeoTranslation(0., 0., 0.));
+  //
+  TGeoPgon* shCoolingWaterO = new TGeoPgon(kStartAngle, kFullAngle, kNSides, 4);
+  shCoolingWaterO->DefineSection(0, -kRCW, kRCoilOuter + kRCC, kRCoilOuter + kRCC + 0.01);
+  shCoolingWaterO->DefineSection(1, -kRWL, kRCoilOuter + (kRCC - kRCW), kRCoilOuter + kRCC + kRCW);
+  shCoolingWaterO->DefineSection(2,  kRWL, kRCoilOuter + (kRCC - kRCW), kRCoilOuter + kRCC + kRCW);
+  shCoolingWaterO->DefineSection(3,  kRCW, kRCoilOuter + kRCC, kRCoilOuter + kRCC + 0.01);
+  //
+  TGeoVolume* voCoolingWaterO = new TGeoVolume("L3CWO", shCoolingWaterO, medWater);
+  voCoolingPipeO->AddNode(voCoolingWaterO, 1, new TGeoTranslation(0., 0., 0.));
 
-  if(!strcmp(gMC->GetName(),"TGeant3") || !strcmp(gMC->GetName(),"TFluka")) {
+  // Inner Circuits
+  //
+  // Pipe
+  TGeoPgon* shCoolingPipeI = new TGeoPgon(kStartAngle, kFullAngle, kNSides, 4);
+  shCoolingPipeI->DefineSection(0, -kRCC, kRCoilInner - kRCC, kRCoilInner - kRCC + 0.01);
+  shCoolingPipeI->DefineSection(1, -kRCL, kRCoilInner - 2. * kRCC, kRCoilInner);
+  shCoolingPipeI->DefineSection(2,  kRCL, kRCoilInner - 2. * kRCC, kRCoilInner);
+  shCoolingPipeI->DefineSection(3,  kRCC, kRCoilInner - kRCC, kRCoilInner - kRCC + 0.01);
+  //
+  TGeoVolume* voCoolingPipeI = new TGeoVolume("L3CCI", shCoolingPipeI, medAlu);
+  voCoilTurn->AddNode(voCoolingPipeI, 1, new TGeoTranslation(0., 0., 0.));
+  //
+  TGeoPgon* shCoolingWaterI = new TGeoPgon(kStartAngle, kFullAngle, kNSides, 4);
+  shCoolingWaterI->DefineSection(0, -kRCW, kRCoilInner - kRCC, kRCoilInner - kRCC + 0.01);
+  shCoolingWaterI->DefineSection(1, -kRWL, kRCoilInner - kRCC - kRCW, kRCoilInner - (kRCC - kRCW));
+  shCoolingWaterI->DefineSection(2,  kRWL, kRCoilInner - kRCC - kRCW, kRCoilInner - (kRCC - kRCW));
+  shCoolingWaterI->DefineSection(3,  kRCW, kRCoilInner - kRCC, kRCoilInner - kRCC + 0.01);
+  //
+  TGeoVolume* voCoolingWaterI = new TGeoVolume("L3CWI", shCoolingWaterI, medWater);
+  voCoolingPipeI->AddNode(voCoolingWaterI, 1, new TGeoTranslation(0., 0., 0.));
 
-    gMC->Gspos("L3O1", 1, "L3FR", 0., 30., 0., 0, "MANY");
-    gMC->Gspos("L3O2", 1, "L3IR", 0., 30., 0., 0, "MANY");
-    gMC->Gspos("L3O3", 1, "L3FX", 0., 30., 0., 0, "MANY");
-    gMC->Gspos("L3O4", 1, "L3IX", 0., 30., 0., 0, "MANY");
+  //
+  // Define Yoke
+  //
+  TGeoPgon* shYoke = new TGeoPgon(kStartAngle, kFullAngle, kNSides, 2);
+  shYoke->DefineSection(0, -kLYoke, kRYokeInner, kRYokeOuter);
+  shYoke->DefineSection(1, +kLYoke, kRYokeInner, kRYokeOuter);  
+  // 
+  TGeoVolume* voYoke = new TGeoVolume("L3YO", shYoke, medSteel);
+  voBMother->AddNode(voYoke, 1, new TGeoTranslation(0., 0., 0.));
 
+  //
+  // Define Crown
+  //
+  TGeoPgon* shCrown = new TGeoPgon(kStartAngle, kFullAngle, kNSides, 4);
+  shCrown->DefineSection(0,  kLCrown1, kRCrownInner, kRYokeInner);
+  shCrown->DefineSection(1,  kLCrown2, kRCrownInner, kRYokeInner);  
+  shCrown->DefineSection(2,  kLCrown2, kRCrownInner, kRCrownOuter);  
+  shCrown->DefineSection(3,  kLCrown3, kRCrownInner, kRCrownOuter);  
+  // 
+  TGeoVolume* voCrown = new TGeoVolume("L3CR", shCrown, medSteel);
+
+  //
+  // Door including "Plug"
+  //
+  Float_t slo = 2. * kRDoorOuter * TMath::Tan(22.5 * kDegRad);
+  Float_t sli = 2. * kRPlugInner * TMath::Tan(22.5 * kDegRad);
+  Double_t xpol1[12], xpol2[12], ypol1[12], ypol2[12];
+  
+  xpol1[ 0] = 2.         ;  ypol1[ 0] = kRDoorOuter;
+  xpol1[ 1] = slo/2.     ;  ypol1[ 1] = kRDoorOuter;
+  xpol1[ 2] = kRDoorOuter;  ypol1[ 2] = slo/2.;
+  xpol1[ 3] = kRDoorOuter;  ypol1[ 3] = -slo/2.;
+  xpol1[ 4] = slo/2.     ;  ypol1[ 4] = -kRDoorOuter;
+  xpol1[ 5] = 2.         ;  ypol1[ 5] = -kRDoorOuter;
+  xpol1[ 6] = 2.         ;  ypol1[ 6] = -kRPlugInner - os;
+  xpol1[ 7] = sli/2.     ;  ypol1[ 7] = -kRPlugInner - os;
+  xpol1[ 8] = kRPlugInner;  ypol1[ 8] = -sli/2.      - os;
+  xpol1[ 9] = kRPlugInner;  ypol1[ 9] =  sli/2.      - os;
+  xpol1[10] = sli/2.     ;  ypol1[10] = kRPlugInner  - os;
+  xpol1[11] = 2.         ;  ypol1[11] = kRPlugInner  - os;
+
+  TGeoXtru* shL3DoorR = new TGeoXtru(2);
+  shL3DoorR->DefinePolygon(12, xpol1, ypol1);
+  shL3DoorR->DefineSection(0, kLDoor1);
+  shL3DoorR->DefineSection(1, kLDoor2);  
+  TGeoVolume* voL3DoorR = new TGeoVolume("L3DoorR", shL3DoorR, medSteel);
+
+  for (Int_t i = 0; i < 12; i++) {
+      xpol2[i] = - xpol1[11 - i];
+      ypol2[i] =   ypol1[11 - i];
   }
-  else {
-    gMC->Gspos("L3O1", 1, "ALIC", 0., 0., 0., 0, "MANY");
-    gMC->Gspos("L3O2", 1, "ALIC", 0., 0., 0., 0, "MANY");
-    gMC->Gsbool("L3O1", "L3DO");
-    gMC->Gsbool("L3O2", "L3DO");
+   
+  TGeoXtru* shL3DoorL = new TGeoXtru(2);
+  shL3DoorL->DefinePolygon(12, xpol2, ypol2);
+  shL3DoorL->DefineSection(0, kLDoor1);
+  shL3DoorL->DefineSection(1, kLDoor2);  
+  TGeoVolume* voL3DoorL = new TGeoVolume("L3DoorL", shL3DoorL, medSteel);
+  //
+  // Plug support plate
+  // 
+  Float_t ro = kRPlugInner + 50.;
+  slo = 2. * ro * TMath::Tan(22.5 * kDegRad);
+  
+  xpol1[ 0] = 2.         ;  ypol1[ 0] = ro     - os;
+  xpol1[ 1] = slo/2.     ;  ypol1[ 1] = ro     - os;
+  xpol1[ 2] = ro         ;  ypol1[ 2] = slo/2. - os;
+  xpol1[ 3] = ro         ;  ypol1[ 3] = -slo/2.- os;
+  xpol1[ 4] = slo/2.     ;  ypol1[ 4] = -ro    - os;
+  xpol1[ 5] = 2.         ;  ypol1[ 5] = -ro    - os;
+
+  for (Int_t i = 0; i < 12; i++) {
+      xpol2[i] = - xpol1[11 - i];
+      ypol2[i] =   ypol1[11 - i];
+  }
+
+
+  TGeoXtru* shL3PlugSPR = new TGeoXtru(2);
+  shL3PlugSPR->DefinePolygon(12, xpol1, ypol1);
+  shL3PlugSPR->DefineSection(0, kLDoor1-10.);
+  shL3PlugSPR->DefineSection(1, kLDoor1);  
+  TGeoVolume* voL3PlugSPR = new TGeoVolume("L3PlugSPR", shL3PlugSPR, medSteel);
+
+  TGeoXtru* shL3PlugSPL = new TGeoXtru(2);
+  shL3PlugSPL->DefinePolygon(12, xpol2, ypol2);
+  shL3PlugSPL->DefineSection(0, kLDoor1-10.);
+  shL3PlugSPL->DefineSection(1, kLDoor1);  
+  TGeoVolume* voL3PlugSPL = new TGeoVolume("L3PlugSPL", shL3PlugSPL, medSteel);
   
-    gMC->Gspos("L3O3", 1, "ALIC", 0., 0., 0., idrotm[300], "MANY");
-    gMC->Gspos("L3O4", 1, "ALIC", 0., 0., 0., idrotm[300], "MANY");
-    gMC->Gsbool("L3O3", "L3DX");
-    gMC->Gsbool("L3O4", "L3DX");
-  }      
+
+  // Position crown and door
+  TGeoRotation* rotxz = new TGeoRotation("rotxz",  90., 0., 90., 90., 180., 0.);
+
+  TGeoVolumeAssembly *l3 = new TGeoVolumeAssembly("L3MO");
+  voBMother->AddNode(voCrown, 1, new TGeoTranslation(0., 0., 0.));  
+  voBMother->AddNode(voCrown, 2, new TGeoCombiTrans(0., 0., 0., rotxz));
+  l3->AddNode(voBMother, 1, new TGeoTranslation(0.,0.,0.));
+  l3->AddNode(voL3DoorR,  1, new TGeoTranslation(0., 0., 0.));  
+  l3->AddNode(voL3DoorR,  2, new TGeoCombiTrans(0., 0., 0., rotxz));
+  l3->AddNode(voL3DoorL,  1, new TGeoTranslation(0., 0., 0.));  
+  l3->AddNode(voL3DoorL,  2, new TGeoCombiTrans(0., 0., 0., rotxz));
+  l3->AddNode(voL3PlugSPR,  1, new TGeoTranslation(0., 0., 0.));  
+  l3->AddNode(voL3PlugSPR,  2, new TGeoCombiTrans(0., 0., 0., rotxz));
+  l3->AddNode(voL3PlugSPL,  1, new TGeoTranslation(0., 0., 0.));  
+  l3->AddNode(voL3PlugSPL,  2, new TGeoCombiTrans(0., 0., 0., rotxz));
+  top->AddNode(l3, 1, new TGeoTranslation(0., os, 0.));
 }
 
 //_____________________________________________________________________________
@@ -228,30 +346,43 @@ void AliMAG::CreateMaterials()
   // Create materials for L3 magnet
   //
   
-  Int_t   isxfld = gAlice->Field()->Integ();
-  Float_t sxmgmx = gAlice->Field()->Max();
+  Int_t   isxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
+  Float_t sxmgmx = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();
   Float_t epsil, stmin, deemax, tmaxfd, stemax;
 
 
   // --- Define the various materials for GEANT --- 
-  
+  // Steel  
+  Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
+  Float_t zsteel[4] = { 26.,24.,28.,14. };
+  Float_t wsteel[4] = { .715,.18,.1,.005 };  
   Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
   Float_t zAir[4]={6.,7.,8.,18.};
   Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
   Float_t dAir = 1.20479E-3;
-
+  Float_t aWater[2]={1.00794,15.9994};
+  Float_t zWater[2]={1.,8.};
+  Float_t wWater[2]={0.111894,0.888106};
+  
 
   //     Aluminum 
-  AliMaterial(9, "Al$", 26.98, 13., 2.7, 8.9, 37.2);
-  AliMaterial(29, "Al$", 26.98, 13., 2.7, 8.9, 37.2);
+  AliMaterial(9, "Al0$", 26.98, 13., 2.7, 8.9, 37.2);
+  AliMaterial(29, "Al1$", 26.98, 13., 2.7, 8.9, 37.2);
   
+  //     Stainless Steel 
+  AliMixture(19, "STAINLESS STEEL1", asteel, zsteel, 7.88, 4, wsteel);
+  AliMixture(39, "STAINLESS STEEL2", asteel, zsteel, 7.88, 4, wsteel);
+  AliMixture(59, "STAINLESS STEEL3", asteel, zsteel, 7.88, 4, wsteel);
   //     Iron 
-  AliMaterial(10, "Fe$", 55.85, 26., 7.87, 1.76, 17.1);
-  AliMaterial(30, "Fe$", 55.85, 26., 7.87, 1.76, 17.1);
+  AliMaterial(10, "Fe0$", 55.85, 26., 7.87, 1.76, 17.1);
+  AliMaterial(30, "Fe1$", 55.85, 26., 7.87, 1.76, 17.1);
   
   //     Air 
-  AliMixture(15, "AIR$      ", aAir, zAir, dAir, 4, wAir);
-  AliMixture(35, "AIR$      ", aAir, zAir, dAir, 4, wAir);
+  AliMixture(15, "AIR0$      ", aAir, zAir, dAir, 4, wAir);
+  AliMixture(35, "AIR1$      ", aAir, zAir, dAir, 4, wAir);
+  //     Water
+  AliMixture(16, "WATER", aWater, zWater, 1., 2, wWater);
+
   
   // **************** 
   //     Defines tracking media parameters. 
@@ -278,14 +409,12 @@ void AliMAG::CreateMaterials()
   
   AliMedium(15, "AIR_C0            ", 15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
   AliMedium(35, "AIR_C1            ", 35, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
-}
-
-//_____________________________________________________________________________
-void AliMAG::DrawModule() const
-{
-  //
-  // Draw a shaded view of the L3 magnet
-  //
+  //    Steel 
+  AliMedium(19, "ST_C0           ", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+  AliMedium(39, "ST_C1           ", 39, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+  AliMedium(59, "ST_C3           ", 59, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+  //    WATER
+  AliMedium(16, "WATER             ", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
 }
 
 //_____________________________________________________________________________