]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSGeometry.h
Make separate, specialized geometries for RPhi and RhoZ views.
[u/mrichter/AliRoot.git] / PHOS / AliPHOSGeometry.h
index eb06b2422a8f235986b02ec1bb8f4e386e4c2baf..2b3b06e77c2e69966593bcd770d60dc2e0d44273 100644 (file)
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  * See cxx source for full Copyright notice                               */
 
-////////////////////////////////////////////////
-//  Geometry class  for PHOS : singleton      //
-//  Version SUBATECH                          //
-//  Author  Y. Schutz SUBATECH                //
-//       geometry parametrized for any        //  
-//       shape of modules                     //
-////////////////////////////////////////////////
+/* $Id$ */
+
+//_________________________________________________________________________
+// Geometry class  for PHOS : singleton
+// PHOS consists of the electromagnetic calorimeter (EMCA)
+// and a charged particle veto either in the Subatech's version (PPSD)
+// or in the IHEP's one (CPV).
+// The EMCA/PPSD/CPV modules are parametrized so that any configuration
+// can be easily implemented 
+// The title is used to identify the version of CPV used.
+// 
+//*-- Author: Yves Schutz (SUBATECH)
 
 // --- ROOT system ---
 
-#include "TNamed.h"
-#include "TString.h"
-#include "TObjArray.h"
-#include "TVector3.h" 
-
 // --- AliRoot header files ---
 
 #include "AliGeometry.h"
-#include "AliPHOSRecPoint.h"
+#include "AliPHOSEMCAGeometry.h"
+#include "AliPHOSCPVGeometry.h"
+#include "AliPHOSSupportGeometry.h"
 
-static const TString kDegre("deg") ; 
-static const TString kRadian("rad") ; 
+class AliPHOSRecPoint;
+class TVector3;
 
 class AliPHOSGeometry : public AliGeometry {
 
 public: 
 
-  AliPHOSGeometry() {} ;  // must be kept public for root persistency purposes
+  AliPHOSGeometry() ;
+  AliPHOSGeometry(const AliPHOSGeometry & geom) ;
+  
   virtual ~AliPHOSGeometry(void) ; 
-  static AliPHOSGeometry * GetInstance(const Text_t* name, const Text_t* title) ; 
+  static AliPHOSGeometry * GetInstance(const Text_t* name, const Text_t* title="") ; 
   static AliPHOSGeometry * GetInstance() ; 
-  virtual void  GetGlobal(const AliRecPoint* RecPoint, TVector3 & gpos, TMatrix & gmat)  ;
-  virtual void  GetGlobal(const AliRecPoint* RecPoint, TVector3 & gpos)  ; 
-
-protected:
-
-  AliPHOSGeometry(const Text_t* name, const Text_t* title) : AliGeometry(name, title) { Init() ; }  
-  void Init(void) ;            // steering method for PHOS and CPV
-  void InitPHOS(void) ;        // defines the various PHOS geometry parameters
-  void InitPPSD(void) ;        // defines the various PPSD geometry parameters
-
-public: 
-
+  virtual void   GetGlobal(const AliRecPoint* RecPoint, TVector3 & gpos, TMatrixF & /* gmat */) const 
+                 {GetGlobal(RecPoint,gpos); }
+  virtual void   GetGlobal(const AliRecPoint* RecPoint, TVector3 & gpos) const ;
+  virtual void   GetGlobalPHOS(const AliPHOSRecPoint* RecPoint, TVector3 & gpos) const ;
+  virtual void   GetGlobalPHOS(const AliPHOSRecPoint* RecPoint, TVector3 & gpos, TMatrixF & /* gmat */) const 
+                 {GetGlobalPHOS(RecPoint,gpos); }
+  virtual Bool_t Impact(const TParticle * particle) const ;
+
+  AliPHOSGeometry & operator = (const AliPHOSGeometry  & /*rvalue*/) {
+    Fatal("operator =", "not implemented") ;
+    return *this ;    
+  }
   // General
 
-  Bool_t AbsToRelNumbering(const Int_t AbsId, Int_t * RelId) ;           // converts the absolute PHOS numbering to a relative 
-  void EmcModuleCoverage(const Int_t m, Double_t & tm, Double_t & tM, Double_t & pm, Double_t & pM, Option_t * opt = kRadian);    
-                                                                         // calculates the angular coverage in theta and phi of a EMC module
-  void EmcXtalCoverage(Double_t & theta, Double_t & phi, Option_t * opt = kRadian) ; 
-                                                                         // calculates the angular coverage in theta and phi of a 
-                                                                         // single crystal in a EMC module
-  void ImpactOnEmc(const Double_t theta, const Double_t phi, Int_t & ModuleNumber, Double_t & x, Double_t & z) ; 
-                                                                         // calculates the impact coordinates of a neutral particle  
-                                                                         // emitted in direction theta and phi in ALICE
-  void   RelPosInModule(const Int_t * RelId, Float_t & y, Float_t & z) ; // gets the position of element (pad or Xtal) relative to 
-                                                                         // center of PHOS module  
-  void   RelPosInAlice(const Int_t AbsId, TVector3 &  pos) ;             // gets the position of element (pad or Xtal) relative to 
-                                                                         // Alice
-  Bool_t RelToAbsNumbering(const Int_t * RelId, Int_t & AbsId) ;         // converts the absolute PHOS numbering to a relative 
-                                                                         // inlines
-
-  ///////////// PHOS related parameters
-
-  Bool_t     IsInitialized(void)                  const { return fInit ; }  
-  Float_t    GetAirFilledBoxSize(Int_t index)     const { return fAirFilledBoxSize[index] ;}
-  Float_t    GetCrystalHolderThickness(void)      const { return fCrystalHolderThickness ; } 
-  Float_t    GetCrystalSize(Int_t index)          const { return fXtlSize[index] ; }
-  Float_t    GetCrystalSupportHeight(void)        const { return fCrystalSupportHeight ; } 
-  Float_t    GetCrystalWrapThickness(void)        const { return fCrystalWrapThickness;}
-  Float_t    GetGapBetweenCrystals(void)          const { return fGapBetweenCrystals ; }
-  Float_t    GetIPtoCrystalSurface(void)          const { return fIPtoCrystalSurface ; }
-  Float_t    GetIPtoOuterCoverDistance(void)      const { return fIPtoOuterCoverDistance ; }
-  Float_t    GetIPtoTopLidDistance(void)          const { return fIPtoTopLidDistance ; }
-  Float_t    GetLowerThermoPlateThickness(void)   const { return fLowerThermoPlateThickness ; }
-  Float_t    GetLowerTextolitPlateThickness(void) const { return fLowerTextolitPlateThickness ; }
-  Float_t    GetModuleBoxThickness(void)          const { return fModuleBoxThickness ; }
-  Int_t      GetNPhi(void)                        const { return fNPhi ; }
-  Int_t      GetNZ(void)                          const { return fNZ ; }
-  Int_t      GetNModules(void)                    const { return fNModules ; }
-  Float_t    GetOuterBoxSize(Int_t index)         const { return fOuterBoxSize[index] ;    }
-  Float_t    GetOuterBoxThickness(Int_t index)    const { return fOuterBoxThickness[index] ; } 
-  Float_t    GetPHOSAngle(Int_t index)            const { return fPHOSAngle[index-1] ; } 
-  Float_t    GetPinDiodeSize(Int_t index)         const { return fPinDiodeSize[index] ; }
-  Float_t    GetSecondUpperPlateThickness(void)   const { return fSecondUpperPlateThickness ; }
-  Float_t    GetSupportPlateThickness(void)       const { return fSupportPlateThickness ; }    
-  Float_t    GetTextolitBoxSize(Int_t index)      const { return fTextolitBoxSize[index] ; }
-  Float_t    GetTextolitBoxThickness(Int_t index) const { return fTextolitBoxThickness[index]; } 
-  Float_t    GetUpperPlateThickness(void)         const { return fUpperPlateThickness ; }
-  Float_t    GetUpperCoolingPlateThickness(void)  const { return fUpperCoolingPlateThickness ; }
+  static TString Degre(void) { return TString("deg") ; }  // a global for degree (deg)
+
+  static TString Radian(void){ return TString("rad") ; }  // a global for radian (rad)
+
+  Bool_t AbsToRelNumbering(Int_t AbsId, Int_t * RelId) const ; 
+                                          // converts the absolute PHOS numbering to a relative 
+
+//  void EmcModuleCoverage(Int_t m, Double_t & tm, Double_t & tM, Double_t & pm, 
+//                                       Double_t & pM, Option_t * opt = Radian() ) const ;
+//                                         // calculates the angular coverage in theta and phi of a EMC module
+//  void EmcXtalCoverage(Double_t & theta, Double_t & phi, Option_t * opt = Radian() ) const ; 
+//                                         // calculates the angular coverage in theta and phi of a  
+//                                         // single crystal in a EMC module
+
+  void ImpactOnEmc(Double_t * vtx, Double_t theta, Double_t phi, 
+                  Int_t & ModuleNumber, Double_t & z, Double_t & x) const ; 
+//  void ImpactOnEmc(const TVector3& vec, Int_t & ModuleNumber, 
+//                      Double_t & z, Double_t & x) const ; 
+//  void ImpactOnEmc(const TParticle& p, Int_t & ModuleNumber, 
+//                      Double_t & z, Double_t & x) const ; 
+//                                        // calculates the impact coordinates of a neutral particle  
+//                                         // emitted in direction theta and phi in ALICE
+  Bool_t IsInEMC(Int_t id) const { if (id > GetNModules() *  GetNCristalsInModule() ) return kFALSE; return kTRUE; } 
+  void RelPosInModule(const Int_t * RelId, Float_t & y, Float_t & z) const ; 
+                                         // gets the position of element (pad or Xtal) relative to 
+                                         // center of PHOS module  
+  void RelPosInAlice(Int_t AbsId, TVector3 &  pos) const ;             
+                                         // gets the position of element (pad or Xtal) relative to Alice
+  Bool_t RelToAbsNumbering(const Int_t * RelId, Int_t & AbsId) const ;         
+                                         // converts the absolute PHOS numbering to a relative 
+  void  RelPosToAbsId(Int_t module, Double_t x, Double_t z, Int_t & AbsId) const; 
+                                         // converts local PHOS-module (x, z) coordinates to absId 
+  void  GetIncidentVector(const TVector3 &vtx, Int_t module, Float_t x, Float_t z, TVector3& vInc) const ;
+                                         //calculates vector from vertex to current point in module local frame
+  void  Local2Global(Int_t module, Float_t x, Float_t z, TVector3 &globaPos) const ;
+
+  Bool_t IsInitialized(void)                  const { return fgInit ; }  
+                                                                       
+  // Return general PHOS parameters
+  Int_t    GetNModules(void)                    const { return fNModules ; }
+  Float_t  GetPHOSAngle(Int_t index)            const { return fPHOSAngle[index-1] ; }
+  Float_t* GetPHOSParams(void)                        { return fPHOSParams;}  //Half-sizes of PHOS trapecoid
+  Float_t  GetIPtoUpperCPVsurface(void)         const { return fIPtoUpperCPVsurface ; }
+  Float_t  GetOuterBoxSize(Int_t index)         const { return 2.*fPHOSParams[index]; }
+  Float_t  GetCrystalSize(Int_t index)          const { return fGeometryEMCA->GetCrystalSize(index) ;  }
+  Float_t  GetCellStep(void)                    const { return 2.*fGeometryEMCA->GetAirCellHalfSize()[0];}
+
+  Float_t GetModuleCenter(Int_t module, Int_t axis) const {
+    return fModuleCenter[module][axis];}
+  Float_t GetModuleAngle(Int_t module, Int_t axis, Int_t angle) const {
+    return fModuleAngle[module][axis][angle];}
+  
 
-private:
+  // Return ideal EMCA geometry parameters
+
+  AliPHOSEMCAGeometry * GetEMCAGeometry()      const {return fGeometryEMCA ;}
+  Float_t   GetIPtoCrystalSurface(void)        const { return fGeometryEMCA->GetIPtoCrystalSurface() ; }
+  Float_t   GetIPtoOuterCoverDistance(void)    const { return fGeometryEMCA->GetIPtoOuterCoverDistance() ; }
+  Int_t     GetNPhi(void)                      const { return fGeometryEMCA->GetNPhi() ; }
+  Int_t     GetNZ(void)                        const { return fGeometryEMCA->GetNZ() ; }
+  Int_t     GetNCristalsInModule(void)         const { return fGeometryEMCA->GetNPhi() * fGeometryEMCA->GetNZ() ; }
+
+  // Return ideal CPV geometry parameters
+  Int_t   GetNumberOfCPVLayers(void)           const { return fGeometryCPV ->GetNumberOfCPVLayers();      }
+  Float_t GetCPVActiveSize(Int_t index)        const { return fGeometryCPV->GetCPVActiveSize(index);      }
+  Int_t   GetNumberOfCPVChipsPhi(void)         const { return fGeometryCPV->GetNumberOfCPVChipsPhi();     }
+  Int_t   GetNumberOfCPVChipsZ(void)           const { return fGeometryCPV->GetNumberOfCPVChipsZ();       }
+  Int_t   GetNumberOfCPVPadsPhi(void)          const { return fGeometryCPV->GetNumberOfCPVPadsPhi();      }
+  Int_t   GetNumberOfCPVPadsZ(void)            const { return fGeometryCPV->GetNumberOfCPVPadsZ();        }
+  Float_t GetPadSizePhi(void)                  const { return fGeometryCPV->GetCPVPadSizePhi();           }
+  Float_t GetPadSizeZ(void)                    const { return fGeometryCPV->GetCPVPadSizeZ();             }
+  Float_t GetGassiplexChipSize(Int_t index)    const { return fGeometryCPV->GetGassiplexChipSize(index);  }
+  Float_t GetCPVGasThickness(void)             const { return fGeometryCPV->GetCPVGasThickness();         }
+  Float_t GetCPVTextoliteThickness(void)       const { return fGeometryCPV->GetCPVTextoliteThickness();   }
+  Float_t GetCPVCuNiFoilThickness(void)        const { return fGeometryCPV->GetCPVCuNiFoilThickness();    }
+  Float_t GetFTPosition(Int_t index)           const { return fGeometryCPV->GetFTPosition(index);         }
+  Float_t GetCPVFrameSize(Int_t index)         const { return fGeometryCPV->GetCPVFrameSize(index);       }
+  Float_t GetCPVBoxSize(Int_t index)           const { return fGeometryCPV ->GetCPVBoxSize(index);        } 
+  Float_t GetIPtoCPVDistance(void)             const { return  GetIPtoOuterCoverDistance() - 
+                                                              GetCPVBoxSize(1) - 1.0; }
+
+
+  // Return real CPV geometry parameters
+  void GetModuleCenter(TVector3& center, const char *det, Int_t module) const;
+  void Global2Local(TVector3& localPosition,
+                   const TVector3& globalPosition,
+                   Int_t module) const;
+
+  // Return PHOS' support geometry parameters
+
+  Float_t GetRailOuterSize(Int_t index)  const { return fGeometrySUPP->GetRailOuterSize(index); }
+  Float_t GetRailPart1    (Int_t index)  const { return fGeometrySUPP->GetRailPart1    (index); }
+  Float_t GetRailPart2    (Int_t index)  const { return fGeometrySUPP->GetRailPart2    (index); }
+  Float_t GetRailPart3    (Int_t index)  const { return fGeometrySUPP->GetRailPart3    (index); }
+  Float_t GetRailPos      (Int_t index)  const { return fGeometrySUPP->GetRailPos      (index); }
+  Float_t GetRailLength   (void)         const { return fGeometrySUPP->GetRailLength   ();      }
+  Float_t GetDistanceBetwRails(void)     const { return fGeometrySUPP->GetDistanceBetwRails();  }
+  Float_t GetRailsDistanceFromIP(void)   const { return fGeometrySUPP->GetRailsDistanceFromIP();}
+  Float_t GetRailRoadSize (Int_t index)  const { return fGeometrySUPP->GetRailRoadSize (index); }
+  Float_t GetCradleWallThickness(void)   const { return fGeometrySUPP->GetCradleWallThickness();}
+  Float_t GetCradleWall   (Int_t index)  const { return fGeometrySUPP->GetCradleWall   (index); }
+  Float_t GetCradleWheel  (Int_t index)  const { return fGeometrySUPP->GetCradleWheel  (index); }
+  void Init(void) ;            // steering method for PHOS and PPSD/CPV
 
-  void       SetPHOSAngles() ; // calculates the PHOS modules PHI angle
 
-public: 
-  ///////////// PPSD (PHOS PRE SHOWER DETECTOR)  related parameters
-
-
-  Float_t GetAnodeThickness(void)          const { return fAnodeThickness ; } 
-  Float_t GetAvalancheGap(void)            const { return fAvalancheGap ; }
-  Float_t GetCathodeThickness(void)        const { return fCathodeThickness ; } 
-  Float_t GetCompositeThickness(void)      const { return fCompositeThickness ; } 
-  Float_t GetConversionGap(void)           const { return fConversionGap ; } 
-  Float_t GetLeadConverterThickness(void)  const { return fLeadConverterThickness ; }
-  Float_t GetLeadToMicro2Gap(void)         const { return fLeadToMicro2Gap ; }       
-  Float_t GetLidThickness(void)            const { return fLidThickness ; }
-  Float_t GetMicromegas1Thickness(void)    const { return fMicromegas1Thickness ; } 
-  Float_t GetMicromegas2Thickness(void)    const { return fMicromegas2Thickness ; } 
-  Float_t GetMicromegasWallThickness(void) const { return fMicromegasWallThickness ; } 
-  Float_t GetMicro1ToLeadGap(void)         const { return fMicro1ToLeadGap ; } 
-  Int_t   GetNumberOfPadsPhi(void)         const { return fNumberOfPadsPhi ; }
-  Int_t   GetNumberOfPadsZ(void)           const { return fNumberOfPadsZ ; }
-  Int_t   GetNumberOfModulesPhi(void)      const { return fNumberOfModulesPhi ; }          
-  Int_t   GetNumberOfModulesZ(void)        const { return fNumberOfModulesZ ; }               
-  Float_t GetPCThickness(void)             const { return fPCThickness ; }   
-  Float_t GetPhiDisplacement(void)         const { return fPhiDisplacement ; }                           
-  Float_t GetPPSDBoxSize(Int_t index)      const { return fPPSDBoxSize[index] ; }
-  Float_t GetPPSDModuleSize(Int_t index)   const { return fPPSDModuleSize[index] ; } 
-  Float_t GetZDisplacement(void)           const { return fZDisplacement ; }                           
+protected:
 
+  AliPHOSGeometry(const Text_t* name, const Text_t* title="") ;
 private:
-  
-  ///////////// PHOS related parameters
-
-  Float_t fAirFilledBoxSize[3] ;          // Air filled box containing one module
-  Float_t fAirThickness[3] ;              // Space filled with air between the module box and the Textolit box
-  Float_t fCrystalSupportHeight ;         // Height of the support of the crystal    
-  Float_t fCrystalWrapThickness ;         // Thickness of Tyvek wrapping the crystal
-  Float_t fCrystalHolderThickness ;       // Titanium holder of the crystal
-  Float_t fGapBetweenCrystals ;           // Total Gap between two adjacent crystals 
-  Bool_t  fInit ;                         // Tells if geometry has been succesfully set up 
-  Float_t fIPtoOuterCoverDistance ;       // Distances from interaction point to outer cover 
-  Float_t fIPtoCrystalSurface ;           // Distances from interaction point to Xtal surface
-  Float_t fModuleBoxThickness ;           // Thickness of the thermo insulating box containing one crystals module 
-  Float_t fLowerTextolitPlateThickness ;  // Thickness of lower textolit plate
-  Float_t fLowerThermoPlateThickness ;    // Thickness of lower thermo insulating plate
-  Int_t   fNModules ;                     // Number of modules constituing PHOS
-  Int_t   fNPhi ;                         // Number of crystal units in X (phi) direction
-  Int_t   fNZ ;                           // Number of crystal units in Z direction
-  Float_t fOuterBoxSize[3] ;              // Size of the outer  thermo insulating foam box
-  Float_t fOuterBoxThickness[3] ;         // Thickness of the outer thermo insulating foam box
-  Float_t fPHOSAngle[4] ;                 // Position angles of modules
-  Float_t fPinDiodeSize[3] ;              // Size of the PIN Diode 
-  TObjArray *  fRotMatrixArray ;          // Liste of rotation matrices (one per phos module)
-  Float_t fSecondUpperPlateThickness ;    // Thickness of  upper polystyrene foam plate
-  Float_t fSupportPlateThickness ;        // Thickness of the Aluminium support plate  
-  Float_t fUpperCoolingPlateThickness ;   // Thickness of the upper cooling plate 
-  Float_t fUpperPlateThickness ;          // Thickness of the uper thermo insulating foam plate 
-  Float_t fTextolitBoxSize[3] ;           // Size of the Textolit box inside the insulating foam box
-  Float_t fTextolitBoxThickness[3] ;      // Thicknesses of th Textolit box
-  Float_t fXtlSize[3] ;                   // PWO4 crystal dimensions
-
-
-  ///////////// PPSD (PHOS PRE SHOWER DETECTOR)  related parameters
-
-  Float_t fAnodeThickness ;               // Thickness of the copper layer which makes the anode 
-  Float_t fAvalancheGap ;                 // Thickness of the gas in the avalanche stage
-  Float_t fCathodeThickness ;             // Thickeness of composite material ensuring rigidity of cathode
-  Float_t fCompositeThickness ;           // Thickeness of composite material ensuring rigidity of anode
-  Float_t fConversionGap ;                // Thickness of the gas in the conversion stage
-  Float_t fIPtoTopLidDistance ;           // Distance from interaction point to top lid of PPSD
-  Float_t fLeadConverterThickness ;       // Thickness of the Lead converter 
-  Float_t fLeadToMicro2Gap ;              // Thickness of the air gap between the Lead and Micromegas 2        
-  Float_t fLidThickness ;                 // Thickness of top lid 
-  Float_t fMicromegas1Thickness ;         // Thickness of the first downstream Micromegas 
-  Float_t fMicromegas2Thickness ;         // Thickness of the second downstream Micromegas 
-  Float_t fMicromegasWallThickness ;      // Thickness of the Micromegas leak tight box
-  Float_t fMicro1ToLeadGap ;              // Thickness of the air gap between Micromegas 1 and the Lead
-  Int_t   fNumberOfPadsPhi ;              // Number of pads on a micromegas module ;  
-  Int_t   fNumberOfPadsZ ;                // Number of pads on a micromegas module ;  
-  Int_t   fNumberOfModulesPhi ;           // Number of micromegas modules in phi
-  Int_t   fNumberOfModulesZ ;             // Number of micromegas modules in z
-  Float_t fPCThickness ;                  // Thickness of the printed circuit board of the anode   
-  Float_t fPhiDisplacement ;              // Phi displacement of micromegas1 with respect to micromegas2  
-  Float_t fPPSDBoxSize[3] ;               // Size of large box which contains PPSD; matches PHOS module size
-  Float_t fPPSDModuleSize[3] ;            // Size of an individual micromegas module
-  Float_t fZDisplacement ;                // Z displacement of micromegas1 with respect to micromegas2  
-
-  static AliPHOSGeometry * fGeom ; // pointer to the unique instance of the singleton 
-
-  ClassDef(AliPHOSGeometry,1)  // PHOS geometry class , version subatech
+
+  Int_t                    fNModules ;       // Number of modules constituing PHOS
+  Float_t                  fAngle ;          // Position angles between modules
+  Float_t                 *fPHOSAngle ;      //[fNModules] Position angles of modules
+  Float_t                  fPHOSParams[4] ;  // Half-sizes of PHOS trapecoid
+  Float_t                  fIPtoUpperCPVsurface; // Minimal distance from IP to PHOS
+  Float_t                  fCrystalShift ;   //Distance from crystal center to front surface
+  Float_t                  fCryCellShift ;   //Distance from crystal center to front surface
+  TObjArray               *fRotMatrixArray ; // Liste of rotation matrices (one per phos module)
+  AliPHOSEMCAGeometry     *fGeometryEMCA ;   // Geometry object for Electromagnetic calorimeter
+  AliPHOSCPVGeometry      *fGeometryCPV ;    // Geometry object for CPV  (IHEP)
+  AliPHOSSupportGeometry  *fGeometrySUPP ;   // Geometry object for PHOS support
+  Float_t fModuleCenter[5][3];   // xyz-position of the module center
+  Float_t fModuleAngle[5][3][2]; // polar and azymuth angles for 3 axes of modules
+
+  void                     SetPHOSAngles();  // calculates the PHOS modules PHI angle
+
+  static AliPHOSGeometry * fgGeom ; // pointer to the unique instance of the singleton 
+  static Bool_t fgInit ;            // Tells if geometry has been succesfully set up 
+
+  ClassDef(AliPHOSGeometry,2)       // PHOS geometry class 
 
 } ;