]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STRUCT/AliPIPEv3.cxx
TPCNoiseMapComponent included into build (Kelly)
[u/mrichter/AliRoot.git] / STRUCT / AliPIPEv3.cxx
index 85c87c04a8d93bf2ffb1819f20c4a941b1d3318c..aaee021f0bd36a8458842875e41b60663acbfd2c 100644 (file)
@@ -27,6 +27,7 @@
 #include <TSystem.h>
 #include <TVirtualMC.h>
 #include <TGeoManager.h>
+#include <TGeoMatrix.h>
 #include <TGeoVolume.h>
 #include <TGeoTorus.h>
 #include <TGeoTube.h>
@@ -81,14 +82,17 @@ void AliPIPEv3::CreateGeometry()
     TGeoRotation* rot315        = new TGeoRotation("rot315", 90. ,315.,  90.,  45.,   0.,   0.);    
 //
 // Media
-    const TGeoMedium* kMedAir    =  gGeoManager->GetMedium("PIPE_AIR");
-    const TGeoMedium* kMedVac    =  gGeoManager->GetMedium("PIPE_VACUUM");    
-    const TGeoMedium* kMedInsu   =  gGeoManager->GetMedium("PIPE_INS_C0");    
-    const TGeoMedium* kMedSteel  =  gGeoManager->GetMedium("PIPE_INOX");        
-    const TGeoMedium* kMedBe     =  gGeoManager->GetMedium("PIPE_BE");       
-    const TGeoMedium* kMedCu     =  gGeoManager->GetMedium("PIPE_CU");        
-    const TGeoMedium* kMedKapton =  gGeoManager->GetMedium("PIPE_KAPTON");        
-    const TGeoMedium* kMedAco    =  gGeoManager->GetMedium("PIPE_ANTICORODAL");        
+    const TGeoMedium* kMedAir     =  gGeoManager->GetMedium("PIPE_AIR");
+    const TGeoMedium* kMedAirHigh =  gGeoManager->GetMedium("PIPE_AIR_HIGH");
+    const TGeoMedium* kMedVac     =  gGeoManager->GetMedium("PIPE_VACUUM");    
+    const TGeoMedium* kMedInsu    =  gGeoManager->GetMedium("PIPE_INS_C0");    
+    const TGeoMedium* kMedSteel   =  gGeoManager->GetMedium("PIPE_INOX");        
+    const TGeoMedium* kMedBe      =  gGeoManager->GetMedium("PIPE_BE");       
+    const TGeoMedium* kMedCu      =  gGeoManager->GetMedium("PIPE_CU");        
+    const TGeoMedium* kMedKapton  =  gGeoManager->GetMedium("PIPE_KAPTON");        
+    const TGeoMedium* kMedAco     =  gGeoManager->GetMedium("PIPE_ANTICORODAL");        
+    const TGeoMedium* kMedNEG     =  gGeoManager->GetMedium("PIPE_NEG COATING"); 
+       
 // Top volume
     TGeoVolume* top    = gGeoManager->GetVolume("ALIC");
 //
@@ -136,6 +140,7 @@ void AliPIPEv3::CreateGeometry()
 //      CP/1     //
 ///////////////////
 //  Inner and outer radii of the Be-section [Pos 1]
+    const Float_t kCP1NegRo                      = 2.90 + 0.0002;
     const Float_t kCP1BeRi                       = 2.90;
     const Float_t kCP1BeRo                       = 2.98;
     const Float_t kCP1KaRo                       = 2.99;    
@@ -166,7 +171,7 @@ void AliPIPEv3::CreateGeometry()
 // CP/1 Be-Section                         //
 /////////////////////////////////////////////
     TGeoVolume* voCp1Vac = new TGeoVolume("CP1VAC", 
-                                         new TGeoTube(0., kCP1BeRi,  kCP1Length / 2.), 
+                                         new TGeoTube(0., kCP1BeRi,  kCP1BeLength / 2.), 
                                          kMedVac);
     TGeoVolume* voCp1Be  = new TGeoVolume("CP1BE", 
                                          new TGeoTube(0., kCP1BeRo,  kCP1BeLength / 2.), 
@@ -175,9 +180,14 @@ void AliPIPEv3::CreateGeometry()
     TGeoVolume* voCp1Ka  = new TGeoVolume("CP1KA", 
                                          new TGeoTube(0., kCP1KaRo,  kCP1BeLength / 2.), 
                                          kMedKapton);
+    // Inner NEG coating
+    TGeoVolume* voCp1NEG = new TGeoVolume("CP1NEG", 
+                                         new TGeoTube(kCP1BeRi, kCP1NegRo, kCP1BeLength / 2.), 
+                                         kMedNEG);
 
     voCp1Ka->AddNode(voCp1Be,  1, gGeoIdentity);
     voCp1Be->AddNode(voCp1Vac, 1, gGeoIdentity);
+    voCp1Be->AddNode(voCp1NEG, 1, gGeoIdentity);
     voCp1Mo->AddNode(voCp1Ka,  1, gGeoIdentity);
 
 /////////////////////////////////////////////
@@ -186,24 +196,26 @@ void AliPIPEv3::CreateGeometry()
     TGeoPcon* shCp1At = new TGeoPcon(0., 360., 8);
 //  First Bulge 
     z = - kCP1BeStAdaptorLength / 2.;
-    shCp1At->DefineSection(0, z, kCP1BeRi, kCP1BeStRo);
+    shCp1At->DefineSection(0, z, 0., kCP1BeStRo);
     z += kCP1BulgeLength;
-    shCp1At->DefineSection(1, z, kCP1BeRi, kCP1BeStRo);
-    shCp1At->DefineSection(2, z, kCP1BeRi, kCP1BeRo);
+    shCp1At->DefineSection(1, z, 0., kCP1BeStRo);
+    shCp1At->DefineSection(2, z, 0., kCP1BeRo);
 //  Between the bulges
     z += kCP1BulgeBulgeDistance;
-    shCp1At->DefineSection(3, z, kCP1BeRi, kCP1BeRo);
-    shCp1At->DefineSection(4, z, kCP1BeRi, kCP1BeStRo);
+    shCp1At->DefineSection(3, z, 0., kCP1BeRo);
+    shCp1At->DefineSection(4, z, 0., kCP1BeStRo);
 //  Second bulge
     z += kCP1BulgeLength;
-    shCp1At->DefineSection(5, z, kCP1BeRi, kCP1BeStRo);
-    shCp1At->DefineSection(6, z, kCP1BeRi, kCP1BeRo);
+    shCp1At->DefineSection(5, z, 0., kCP1BeStRo);
+    shCp1At->DefineSection(6, z, 0., kCP1BeRo);
 //  Straight piece
     z = kCP1BeStAdaptorLength / 2.;
-    shCp1At->DefineSection(7, z, kCP1BeRi, kCP1BeRo);
+    shCp1At->DefineSection(7, z, 0., kCP1BeRo);
 //
-    TGeoVolume* voCp1At = new TGeoVolume("CP1AT", shCp1At, kMedSteel);
-
+    TGeoVolume* voCp1At  = new TGeoVolume("CP1AT",  shCp1At, kMedSteel);
+    TGeoVolume* voCp1AtV = new TGeoVolume("CP1ATV", new TGeoTube(0., kCP1BeRi, kCP1BeStAdaptorLength / 2.), kMedVac);
+    voCp1At->AddNode(voCp1AtV, 1, gGeoIdentity);
+    
 //  Position adaptor tube at both ends
     dz = kCP1Length / 2. -  kCP1BeStAdaptorLength / 2.;
     voCp1Mo->AddNode(voCp1At,    1, new TGeoTranslation(0., 0., -dz));
@@ -795,33 +807,43 @@ void AliPIPEv3::CreateGeometry()
 
 ////////////////////////////////////////////////////////////////////////////////     
 //                                                                            //
-//                                  RB24                                      // 
+//                                  RB24/1                                    // 
 //                                                                            //
 ////////////////////////////////////////////////////////////////////////////////
 //
 //
 // Drawing LHCVC2U_0001
-// Copper Tube             373.5 cm 
+// Copper Tube RB24/1      393.5 cm 
 // Warm module VMACA        18.0 cm
 // Annular Ion Pump         35.0 cm
 // Valve                     7.5 cm
-// Warm module WMABC        28.0 cm
+// Warm module VMABC        28.0 cm
 // ================================
 //                         462.0 cm
 //
 
-// Copper Tube
-    const Float_t  kRB24CuTubeL  = 373.5;
-    const Float_t  kRB24CuTubeRi = 8.0/2.;
-    const Float_t  kRB24CuTubeRo = 8.4/2.;
+    
+// Copper Tube RB24/1
+    const Float_t  kRB24CuTubeL   = 393.5;
+    const Float_t  kRB24CuTubeRi  = 8.0/2.;
+    const Float_t  kRB24CuTubeRo  = 8.4/2.;
+    const Float_t  kRB24CuTubeFRo = 7.6;
+    const Float_t  kRB24CuTubeFL  = 1.86;
+
     TGeoVolume* voRB24CuTubeM = new TGeoVolume("voRB24CuTubeM", 
                                               new TGeoTube(0., kRB24CuTubeRo, kRB24CuTubeL/2.), kMedVac);
     voRB24CuTubeM->SetVisibility(0);
     TGeoVolume* voRB24CuTube  = new TGeoVolume("voRB24CuTube", 
                                               new TGeoTube(kRB24CuTubeRi, kRB24CuTubeRo, kRB24CuTubeL/2.), kMedCu);
     voRB24CuTubeM->AddNode(voRB24CuTube, 1, gGeoIdentity);
-    
-   
+    // Air outside tube with higher transport cuts
+    TGeoVolume* voRB24CuTubeA  = new TGeoVolume("voRB24CuTubeA", 
+                                               new TGeoTube(25., 100., kRB24CuTubeL/2.), kMedAirHigh);
+    voRB24CuTubeA->SetVisibility(0);
+    // Simplified DN 100 Flange
+     TGeoVolume* voRB24CuTubeF = new TGeoVolume("voRB24CuTubeF", 
+                                              new TGeoTube(kRB24CuTubeRo, kRB24CuTubeFRo, kRB24CuTubeFL/2.), kMedSteel);
+
 // Warm Module Type VMACA
 // LHCVMACA_0002
 // 
@@ -1316,7 +1338,9 @@ void AliPIPEv3::CreateGeometry()
     const Float_t kRB24VMABCRBT1Ri = 10.0/2.;
     const Float_t kRB24VMABCRBT1Ro = 10.3/2.;
     const Float_t kRB24VMABCRBT1L  = 11.5;   
-    const Float_t kRB24VMABCRBT1L2 = 8.;   
+    const Float_t kRB24VMABCRBT1L2 = 8.;
+    const Float_t kRB24VMABCL      = 28.;
+    
     TGeoTube* shRB24VMABCRBT1 = new TGeoTube(kRB24VMABCRBT1Ri, kRB24VMABCRBT1Ro, kRB24VMABCRBT1L/2.);
     shRB24VMABCRBT1->SetName("RB24VMABCRBT1");
     TGeoTube* shRB24VMABCRBT1o = new TGeoTube(0., kRB24VMABCRBT1Ro,  kRB24VMABCRBT1L/2.);
@@ -1585,24 +1609,96 @@ void AliPIPEv3::CreateGeometry()
 
 
 //
-// Assembling RB24
+// Assembling RB24/1
 //    
     TGeoVolumeAssembly* voRB24 = new TGeoVolumeAssembly("RB24");
-
+    // Cu Tube with two simplified flanges
     voRB24->AddNode(voRB24CuTubeM, 1, gGeoIdentity);
+    voRB24->AddNode(voRB24CuTubeA, 1, gGeoIdentity);
+    z = - kRB24CuTubeL/2 + kRB24CuTubeFL/2.;
+    voRB24->AddNode(voRB24CuTubeF, 1, new TGeoTranslation(0., 0., z));
+    z = + kRB24CuTubeL/2 - kRB24CuTubeFL/2.;
+    voRB24->AddNode(voRB24CuTubeF, 2, new TGeoTranslation(0., 0., z));
+    // VMABC close to compensator magnet
+    z = - kRB24CuTubeL/2. -  (kRB24VMABCL - kRB24VMABCRBT1L/2) + 1.;
+    
+    voRB24->AddNode(voRB24VMABCRB, 2, new TGeoTranslation(0., 0., z));
+    // Bellow
     z =  kRB24CuTubeL/2;
     voRB24->AddNode(voRB24B1BellowM, 1, new TGeoTranslation(0., 0., z));
     z +=  (kRB24B1L +  kRB24AIpML/2.);
-
+    // Annular ion pump
     voRB24->AddNode(voRB24AIpM, 1, new TGeoTranslation(0., 0., z));
     z +=  (kRB24AIpML/2. +  kRB24ValveWz/2.);
-
+    // Valve
     voRB24->AddNode(voRB24ValveMo, 1, new TGeoTranslation(0., 0., z));
     z += (kRB24ValveWz/2.+ kRB24VMABCRBT1L/2. + 1.);
+    // VMABC close to forward detectors
+    voRB24->AddNode(voRB24VMABCRB, 3, new TGeoTranslation(0., 0., z));
+//
+//   RB24/2
+//     
+// Copper Tube RB24/2
+    const Float_t  kRB242CuTubeL  = 330.0;
+    
+    TGeoVolume* voRB242CuTubeM = new TGeoVolume("voRB242CuTubeM", 
+                                               new TGeoTube(0., kRB24CuTubeRo, kRB242CuTubeL/2.), kMedVac);
+    voRB24CuTubeM->SetVisibility(0);
+    TGeoVolume* voRB242CuTube = new TGeoVolume("voRB242CuTube", 
+                                              new TGeoTube(kRB24CuTubeRi, kRB24CuTubeRo, kRB242CuTubeL/2.), kMedCu);
+    voRB242CuTubeM->AddNode(voRB242CuTube, 1, gGeoIdentity);
+    
 
-    voRB24->AddNode(voRB24VMABCRB, 1, new TGeoTranslation(0., 0., z));
-    top->AddNode(voRB24, 1, new TGeoCombiTrans(0., 0., kRB24CuTubeL/2 + 88.5 + 400., rot180));
+    TGeoVolumeAssembly* voRB242 = new TGeoVolumeAssembly("RB242");
+    voRB242->AddNode(voRB242CuTube, 1, gGeoIdentity);
+    z = - kRB242CuTubeL/2 + kRB24CuTubeFL/2.;
+    voRB242->AddNode(voRB24CuTubeF, 3, new TGeoTranslation(0., 0., z));
+    z = + kRB242CuTubeL/2 - kRB24CuTubeFL/2.;
+    voRB242->AddNode(voRB24CuTubeF, 4, new TGeoTranslation(0., 0., z));
+    z = - kRB24CuTubeL/2 - kRB24VMABCL - kRB242CuTubeL/2.;
+    voRB24->AddNode(voRB242, 1, new TGeoTranslation(0., 0., z));
+//
+//   RB24/3
+//     
+// Copper Tube RB24/3
+    const Float_t  kRB243CuTubeL  = 303.35;
+    
+    TGeoVolume* voRB243CuTubeM = new TGeoVolume("voRB243CuTubeM", 
+                                               new TGeoTube(0., kRB24CuTubeRo, kRB243CuTubeL/2.), kMedVac);
+    voRB24CuTubeM->SetVisibility(0);
+    TGeoVolume* voRB243CuTube = new TGeoVolume("voRB243CuTube", 
+                                              new TGeoTube(kRB24CuTubeRi, kRB24CuTubeRo, kRB243CuTubeL/2.), kMedCu);
+    voRB243CuTubeM->AddNode(voRB243CuTube, 1, gGeoIdentity);
+    
+
+    TGeoVolumeAssembly* voRB243  = new TGeoVolumeAssembly("RB243");
+    TGeoVolumeAssembly* voRB243A = new TGeoVolumeAssembly("RB243A");
     
+    voRB243A->AddNode(voRB243CuTube, 1, gGeoIdentity);
+    z = - kRB243CuTubeL/2 + kRB24CuTubeFL/2.;
+    voRB243A->AddNode(voRB24CuTubeF, 5, new TGeoTranslation(0., 0., z));
+    z = + kRB243CuTubeL/2 - kRB24CuTubeFL/2.;
+    voRB243A->AddNode(voRB24CuTubeF,    6, new TGeoTranslation(0., 0., z));
+    z = + kRB243CuTubeL/2;
+    voRB243A->AddNode(voRB24B1BellowM,  2, new TGeoTranslation(0., 0., z));    
+
+    z = - kRB243CuTubeL/2.  - kRB24B1L;
+    voRB243->AddNode(voRB243A, 1, new TGeoTranslation(0., 0., z));    
+    z = - (1.5 * kRB243CuTubeL + 2. * kRB24B1L);
+    voRB243->AddNode(voRB243A, 2, new TGeoTranslation(0., 0., z));    
+
+    z = - 2. * (kRB243CuTubeL + kRB24B1L) - (kRB24VMABCL - kRB24VMABCRBT1L/2) + 1.;
+    voRB243->AddNode(voRB24VMABCRB, 3, new TGeoTranslation(0., 0., z));    
+    
+    z = - kRB24CuTubeL/2 - kRB24VMABCL - kRB242CuTubeL;
+    voRB24->AddNode(voRB243, 1, new TGeoTranslation(0., 0., z));
+
+
+//
+//
+    top->AddNode(voRB24, 1, new TGeoCombiTrans(0., 0., kRB24CuTubeL/2 + 88.5 + 400., rot180));
+
+
 // 
 ////////////////////////////////////////////////////////////////////////////////     
 //                                                                            //
@@ -1943,19 +2039,22 @@ void AliPIPEv3::CreateGeometry()
 //    Vacuum Tube                //
 //    Drawing  LHCVC2A_0003      //
 /////////////////////////////////// 
-      const Float_t kRB26s3TubeL = 629.35 + 0.3; // 0.3 cm added for welding
+      const Float_t kRB26s3TubeL  = 629.35 + 0.3; // 0.3 cm added for welding
+      const Float_t kRB26s3TubeR1 =  12./2.;
+      const Float_t kRB26s3TubeR2 =  kRB26s3TubeR1 + 215.8 * TMath::Tan(0.829 / 180. * TMath::Pi());
+      
       
       TGeoPcon* shRB26s3Tube = new TGeoPcon(0., 360., 7);
       // Section 1: straight section
-      shRB26s3Tube->DefineSection(0,   0.00, 12.00/2., 12.30/2.);
-      shRB26s3Tube->DefineSection(1,   2.00, 12.00/2., 12.30/2.);      
+      shRB26s3Tube->DefineSection(0,   0.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.15);
+      shRB26s3Tube->DefineSection(1,   2.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.15);      
       // Section 2: 0.829 deg opening cone
-      shRB26s3Tube->DefineSection(2,   2.00, 12.00/2., 12.40/2.);
-
-      shRB26s3Tube->DefineSection(3, 217.80, 12.00/2., 12.40/2.);
-      shRB26s3Tube->DefineSection(4, 217.80, 12.00/2., 12.40/2.);      
+      shRB26s3Tube->DefineSection(2,   2.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.20);
+      
+      shRB26s3Tube->DefineSection(3, 217.80, kRB26s3TubeR2, kRB26s3TubeR2 + 0.20);
+      shRB26s3Tube->DefineSection(4, 217.80, kRB26s3TubeR2, kRB26s3TubeR2 + 0.30);      
 
-      shRB26s3Tube->DefineSection(5, 622.20, 30.00/2., 30.60/2.);      
+      shRB26s3Tube->DefineSection(5, 622.20,       30.00/2., 30.60/2.);      
       shRB26s3Tube->DefineSection(6, kRB26s3TubeL, 30.00/2., 30.60/2.); 
 
       TGeoVolume* voRB26s3Tube = new TGeoVolume("RB26s3Tube", shRB26s3Tube, kMedSteel);
@@ -2639,7 +2738,14 @@ void AliPIPEv3::CreateMaterials()
   Float_t zKapton[4]={1.,6.,7.,8.};
   Float_t wKapton[4]={0.026362,0.69113,0.07327,0.209235};
   Float_t dKapton = 1.42;
+  // NEG coating
+  //                  Ti     V      Zr
+  Float_t aNEG[4] = {47.87, 50.94, 91.24};
+  Float_t zNEG[4] = {22.00, 23.00, 40.00};
+  Float_t wNEG[4] = {1./3., 1./3., 1./3.};  
+  Float_t dNEG = 5.6; // ?
 
+  //
   //
   //     Berillium 
   AliMaterial(5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7);
@@ -2655,6 +2761,7 @@ void AliPIPEv3::CreateMaterials()
   //
   //     Air 
   AliMixture(15, "AIR$      ", aAir, zAir, dAir, 4, wAir);
+  AliMixture(35, "AIR_HIGH$ ", aAir, zAir, dAir, 4, wAir);
   //
   //     Vacuum 
   AliMixture(16, "VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
@@ -2675,12 +2782,17 @@ void AliPIPEv3::CreateMaterials()
   AliMixture(23, "KAPTON", aKapton, zKapton, dKapton, 4, wKapton);
   // Anticorodal 
   AliMixture(24, "ANTICORODAL", aaco, zaco, 2.66, 3, waco);
-
+  
   //
   //     Insulation powder 
    AliMixture(14, "INSULATION0$", ains, zins, 0.41, 4, wins);
    AliMixture(34, "INSULATION1$", ains, zins, 0.41, 4, wins);
    AliMixture(54, "INSULATION2$", ains, zins, 0.41, 4, wins);
+
+   //    NEG
+   AliMixture(25, "NEG COATING", aNEG, zNEG, dNEG, -3, wNEG);
+   
+   
    // **************** 
    //     Defines tracking media parameters. 
    //
@@ -2704,7 +2816,8 @@ void AliPIPEv3::CreateMaterials()
   AliMedium(10, "CU",      10, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
   //
   //    Air 
-  AliMedium(15, "AIR",    15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+  AliMedium(15, "AIR",     15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+  AliMedium(35, "AIR_HIGH",35, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
   //
   //    Vacuum 
   AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
@@ -2729,6 +2842,10 @@ void AliPIPEv3::CreateMaterials()
   //
   //   KAPTON
   AliMedium(23, "KAPTON", 23, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+
+  //
+  //   NEG
+  AliMedium(25, "NEG COATING", 25, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
 }