]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliEMCALGeometry.cxx
revised geometry, fully parametrized and including HCAL possibility
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALGeometry.cxx
index d31b087a6cad9828eb2846fc986eccba721b802f..3176c195df975bf9ccf0c5ce2056bd17409171b8 100644 (file)
@@ -63,51 +63,71 @@ void AliEMCALGeometry::Init(void){
     if( name != "EMCALArch1a" &&
        name != "EMCALArch1b" && 
        name != "EMCALArch2a" && 
-       name != "EMCALArch2b"  ){
-      Fatal("Init", "%s is not a known geometry (choose among EMCALArch1a, EMCALArch1b, EMCALArch2a and EMCALArch2b)",  name.Data()) ;  
+       name != "EMCALArch2b" && 
+       name != "EMCALArch1aN" ){
+      Fatal("Init", "%s is not a known geometry (choose among EMCALArch1a, EMCALArch1b, EMCALArch2a and EMCALArch2b, EMCALArch1aN)",  name.Data()) ;  
     } // end if
     //
     if ( name == "EMCALArch1a"  ||
-        name == "EMCALArch1b" ) {
-       fNZ         = 96;
-       fNPhi       = 144;
+        name == "EMCALArch1b"  || 
+        name == "EMCALArch1aN") {
+      fNZ         = 96;
+      fNPhi       = 144;
     } // end if
     if ( name == "EMCALArch2a"  ||
-        name, "EMCALArch2b" ) {
+        name == "EMCALArch2b" ) {
        fNZ         = 112;
        fNPhi       = 168;
     } // end if
     if ( name == "EMCALArch1a"  ||
         name == "EMCALArch2a" ) {
-       fNLayers    = 21;
+      fNPRLayers  = 2;
+      fNECLayers  = 19;
+      fNHCLayers  = 0;
     } // end if
     if ( name == "EMCALArch1b"  ||
         name == "EMCALArch2b" ) {
-       fNLayers    = 25;
+       fNPRLayers  = 2;
+       fNECLayers  = 23;
+       fNHCLayers  = 0;
     } // end if
+    if ( name == "EMCALArch1aN") { 
+      fNPRLayers   = 2;
+      fNECLayers  = 19;
+      fNHCLayers  = 14;
+    }
 
     // geometry
-    fAirGap         = 5.0; // cm, air gap between EMCAL mother volume and 
-                           // active material.
-    fAlFrontThick   = 3.18; // cm, Thickness of front Al layer
-    fPbRadThickness = 0.5; // cm, Thickness of theh Pb radiators.
-    fPreShowerSintThick = 0.6; // cm, Thickness of the sintilator for the
-                               // preshower part of the calorimeter
-    fFullShowerSintThick = 0.5; // cm, Thickness of the sintilator for the
-                                // full shower part of the calorimeter
     fArm1PhiMin     =  60.0; // degrees, Starting EMCAL Phi position
     fArm1PhiMax     = 180.0; // degrees, Ending EMCAL Phi position
     fArm1EtaMin     = -0.7; // pseudorapidity, Starting EMCAL Eta position
     fArm1EtaMax     = +0.7; // pseudorapidity, Ending EMCAL Eta position
+
+    fAlFrontThick        = 3.18; // cm, Thickness of front Al layer
+    fGap2Active          = 1.0;  // cm, Gap between Al and 1st Scintillator
+    fPbRadThickness      = 0.5;  // cm, Thickness of the Pb radiators.
+    fPreShowerSintThick  = 0.6;  // cm, Thickness of the sintilator for the preshower part of the calorimeter
+    fFullShowerSintThick = 0.5;  // cm, Thickness of the sintilator for the dull shower part of the calorimeter
+    fCuRadThickness      = 0.0;  // cm, Thickness of the Cu radiators.
+
+    if (name ==  "EMCALArch1aN") {
+      fAlFrontThick        = 3.0;  // cm, Thickness of front Al layer
+      fGap2Active          = 1.0;  // cm, Gap between Al and 1st Scintillator
+      fPbRadThickness      = 0.6;  // cm, Thickness of the Pb radiators.
+      fPreShowerSintThick  = 0.5;  // cm, Thickness of the sintilator for the preshower part of the calorimeter
+      fFullShowerSintThick = 0.4;  // cm, Thickness of the sintilator for the full shower part of the calorimeter
+      fCuRadThickness      = 1.0;  // cm, Thickness of the Cu radiators.
+   }
+
     fIPDistance     = 454.0; // cm, Radial distance to inner surface of EMCAL
-    fShellThickness = GetAlFrontThickness() + 2.*GetPreSintThick() +
-       (fNLayers-2)*GetFullSintThick()+(fNLayers-1)*GetPbRadThick();
-    //below; cm, Z lenght of the EMCAL.
-    fZLength        = 2.*ZFromEtaR(fIPDistance+fShellThickness,fArm1EtaMax);
+    fShellThickness = fAlFrontThick + fGap2Active + 2.*(GetPreSintThick() + GetPbRadThick()) + // pre shower 
+      (fNECLayers-1)*(GetFullSintThick()+ GetPbRadThick()) + // E cal -1 because the last element is a scintillator
+      fNHCLayers*(GetFullSintThick()+ GetCuRadThick()) + // H cal
+      GetFullSintThick() ; // last scintillator
+    fZLength        = 2.*ZFromEtaR(fIPDistance+fShellThickness,fArm1EtaMax); // Z coverage
     fEnvelop[0]     = fIPDistance; // mother volume inner radius
     fEnvelop[1]     = fIPDistance + fShellThickness; // mother volume outer r.
     fEnvelop[2]     = 1.00001*fZLength; // add some padding for mother volume. 
-    fGap2Active     = 1.0;  // cm, Gap between 
     fgInit = kTRUE; 
 }
 
@@ -154,7 +174,7 @@ AliEMCALGeometry* AliEMCALGeometry::GetInstance(const Text_t* name,
 Int_t AliEMCALGeometry::TowerIndex(Int_t ieta,Int_t iphi,Int_t ipre) const {
     // Returns the tower index number from the based on the Z and Phi
     // index numbers. There are 2 times the number of towers to separate
-    // out the full towsers from the pre-towsers.
+    // out the full towers from the pre-showers.
     // Inputs:
     //   Int_t ieta    // index allong z axis [1-fNZ]
     //   Int_t iphi  // index allong phi axis [1-fNPhi]
@@ -380,9 +400,13 @@ void AliEMCALGeometry::XYZFromIndex(const Int_t *relid,Float_t &x,Float_t &y, Fl
     theta = 180.*(2.0*TMath::ATan(TMath::Exp(-eta)))/TMath::Pi();
     
     kDeg2Rad = TMath::Pi() / static_cast<Double_t>(180) ; 
-    cyl_radius = GetIPDistance()+ GetAirGap() ;
+    if ( ipre == -1 ) 
+      cyl_radius = GetIP2PreShower() ;
+    else 
+      cyl_radius = GetIP2Tower() ;
+
     x =  cyl_radius * TMath::Cos(phi * kDeg2Rad ) ;
-    y =  cyl_radius * TMath::Cos(phi * kDeg2Rad ) ; 
+    y =  cyl_radius * TMath::Sin(phi * kDeg2Rad ) ; 
     z =  cyl_radius / TMath::Tan(theta * kDeg2Rad ) ; 
  
  return;