New library PHOSUtils and releated changes (Dmitri)
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Oct 2008 08:12:56 +0000 (08:12 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Oct 2008 08:12:56 +0000 (08:12 +0000)
18 files changed:
ALIROOT/CMake_binaliroot.txt
ALIROOT/binaliroot.pkg
ANALYSIS/CMake_binaliengui.txt
ANALYSIS/binaliengui.pkg
EVE/CMake_binalieve.txt
EVE/binalieve.pkg
PHOS/AliPHOSGeoUtils.cxx
PHOS/AliPHOSGeoUtils.h
PHOS/AliPHOSGeometry.cxx
PHOS/AliPHOSGeometry.h
PHOS/CMakeLists.txt
PHOS/CMake_libPHOSUtils.txt [new file with mode: 0644]
PHOS/CMake_libPHOSbase.txt
PHOS/PHOSUtilsLinkDef.h
PHOS/PHOSbaseLinkDef.h
PHOS/libPHOSUtils.pkg
PHOS/libPHOSbase.pkg
build/module.dep

index 14764e6..87e20e4 100644 (file)
@@ -8,7 +8,7 @@ fpu.c
 Set(LIBS MUONcore MUONgeometry MUONrec MUONsim MUONbase MUONtrigger MUONraw
          MUONcalib MUONmapping TPCbase TPCsim TPCrec TPCfast ITSbase ITSsim ITSrec
          PMDbase PMDsim PMDrec TRDbase TRDsim TRDrec TRDfast FMDbase FMDsim FMDrec
-         TOFbase TOFrec TOFsim PHOSbase PHOSsim PHOSrec ACORDEbase ACORDEsim
+         TOFbase TOFrec TOFsim PHOSUtils PHOSbase PHOSsim PHOSrec ACORDEbase ACORDEsim
          ACORDErec HMPIDbase HMPIDrec HMPIDsim ZDCbase ZDCsim ZDCrec VZERObase
          VZEROsim VZEROrec EMCALbase EMCALsim EMCALrec BCM STRUCT T0base T0sim
          T0rec EVGEN STEERBase ESD AOD CDB STEER THijing hijing FASTSIM microcern
index c97e3e8..573a91f 100644 (file)
@@ -11,7 +11,7 @@ ELIBS:= MUONcore MUONgeometry MUONrec MUONsim MUONbase MUONtrigger MUONraw MUONc
         TPCbase TPCsim TPCrec TPCfast \
        ITSbase ITSsim ITSrec PMDbase PMDsim PMDrec TRDbase \
         TRDsim TRDrec TRDfast \
-       FMDbase FMDsim FMDrec TOFbase TOFrec TOFsim PHOSbase PHOSsim PHOSrec \
+       FMDbase FMDsim FMDrec TOFbase TOFrec TOFsim PHOSUtils PHOSbase PHOSsim PHOSrec \
        ACORDEbase ACORDEsim ACORDErec \
         HMPIDbase HMPIDrec HMPIDsim \
         ZDCbase ZDCsim ZDCrec VZERObase VZEROsim VZEROrec \
@@ -82,6 +82,7 @@ ARLIBS:= \
    MUON/tgt_$(ALICE_TARGET)/G__MUONsim.o $(LIBPATH)/libMUONsim.a \
    MUON/tgt_$(ALICE_TARGET)/G__MUONrec.o $(LIBPATH)/libMUONrec.a \
    MUON/tgt_$(ALICE_TARGET)/G__MUONraw.o $(LIBPATH)/libMUONraw.a \
+   PHOS/tgt_$(ALICE_TARGET)/G__PHOSUtils.o $(LIBPATH)/libPHOSUtils.a \
    PHOS/tgt_$(ALICE_TARGET)/G__PHOSbase.o $(LIBPATH)/libPHOSbase.a \
    PHOS/tgt_$(ALICE_TARGET)/G__PHOSsim.o $(LIBPATH)/libPHOSsim.a \
    PHOS/tgt_$(ALICE_TARGET)/G__PHOSrec.o $(LIBPATH)/libPHOSrec.a \
index fa2d49e..022368b 100644 (file)
@@ -8,7 +8,7 @@ Set(LIBS Aliengui MUONevaluation MUONgeometry MUONrec MUONsim MUONbase
          MUONtrigger MUONraw MUONcalib MUONmapping MUONcore TPCbase TPCsim 
          TPCrec TPCfast ITSbase ITSsim ITSrec PMDbase PMDsim PMDrec TRDbase 
          TRDsim TRDrec TRDfast FMDbase FMDsim FMDrec TOFbase TOFrec TOFsim 
-         PHOSbase PHOSsim PHOSrec ACORDEbase ACORDEsim ACORDErec HMPIDbase 
+         PHOSUtils PHOSbase PHOSsim PHOSrec ACORDEbase ACORDEsim ACORDErec HMPIDbase 
          HMPIDrec HMPIDsim ZDCbase ZDCsim ZDCrec VZERObase VZEROsim VZEROrec 
          EMCALbase EMCALsim EMCALrec STRUCT T0base T0sim T0rec EVGEN STEERBase 
          ESD AOD CDB STEER THijing hijing THbtp TEPEMGEN FASTSIM microcern 
index 3e8cb06..eed420b 100644 (file)
@@ -9,7 +9,7 @@ ELIBS    := Aliengui \
   TPCbase TPCsim TPCrec TPCfast \
   ITSbase ITSsim ITSrec PMDbase PMDsim PMDrec TRDbase \
   TRDsim TRDrec TRDfast \
-  FMDbase FMDsim FMDrec TOFbase TOFrec TOFsim PHOSbase PHOSsim PHOSrec \
+  FMDbase FMDsim FMDrec TOFbase TOFrec TOFsim PHOSUtils PHOSbase PHOSsim PHOSrec \
   ACORDEbase ACORDEsim ACORDErec \
   HMPIDbase HMPIDrec HMPIDsim \
   ZDCbase ZDCsim ZDCrec VZERObase VZEROsim VZEROrec \
index facbf3b..a52e507 100644 (file)
@@ -8,7 +8,7 @@ Set(LIBS EveBase EveDet EveHLT MUONbase MUONevaluation MUONmapping MUONshuttle
          MUONcalib MUONgeometry MUONraw MUONsim MUONcore MUONgraphics MUONrec
          MUONtrigger TPCbase TPCsim TPCrec TPCfast ITSbase ITSsim ITSrec PMDbase
          PMDsim PMDrec TRDbase TRDsim TRDrec TRDfast FMDbase FMDsim FMDrec TOFbase
-         TOFrec TOFsim PHOSbase PHOSsim PHOSrec ACORDEbase ACORDEsim ACORDErec
+         TOFrec TOFsim PHOSUtils PHOSbase PHOSsim PHOSrec ACORDEbase ACORDEsim ACORDErec
          HMPIDbase HMPIDrec HMPIDsim ZDCbase ZDCsim ZDCrec VZERObase VZEROsim
          VZEROrec EMCALbase EMCALsim EMCALrec BCM STRUCT T0base T0sim T0rec EVGEN
          STEERBase ESD AOD CDB STEER THijing hijing TEPEMGEN FASTSIM microcern
index 39a0993..6cdc094 100644 (file)
@@ -14,7 +14,7 @@ ELIBS    := EveBase EveDet EveHLT \
   TPCbase TPCsim TPCrec TPCfast \
   ITSbase ITSsim ITSrec PMDbase PMDsim PMDrec TRDbase \
   TRDsim TRDrec TRDfast \
-  FMDbase FMDsim FMDrec TOFbase TOFrec TOFsim PHOSbase PHOSsim PHOSrec \
+  FMDbase FMDsim FMDrec TOFbase TOFrec TOFsim PHOSUtils PHOSbase PHOSsim PHOSrec \
   ACORDEbase ACORDEsim ACORDErec \
   HMPIDbase HMPIDrec HMPIDsim \
   ZDCbase ZDCsim ZDCrec VZERObase VZEROsim VZEROrec \
index ca3b2be..eff3f89 100644 (file)
 // --- AliRoot header files ---
 #include "AliPHOSEMCAGeometry.h"
 #include "AliPHOSCPVGeometry.h"
+#include "AliPHOSSupportGeometry.h"
 #include "AliPHOSGeoUtils.h"
 
 ClassImp(AliPHOSGeoUtils)
 
 //____________________________________________________________________________
 AliPHOSGeoUtils::AliPHOSGeoUtils():
+  fGeometryEMCA(0x0),fGeometryCPV(0x0),fGeometrySUPP(0x0),
   fNModules(0),fNCristalsInModule(0),fNPhi(0),fNZ(0),
   fNumberOfCPVPadsPhi(0),fNumberOfCPVPadsZ(0),
   fNCellsXInStrip(0),fNCellsZInStrip(0),fNStripZ(0),
@@ -58,6 +60,7 @@ AliPHOSGeoUtils::AliPHOSGeoUtils():
 //____________________________________________________________________________
 AliPHOSGeoUtils::AliPHOSGeoUtils(const AliPHOSGeoUtils & rhs)
   : TNamed(rhs),
+  fGeometryEMCA(0x0),fGeometryCPV(0x0),fGeometrySUPP(0x0),
   fNModules(0),fNCristalsInModule(0),fNPhi(0),fNZ(0),
   fNumberOfCPVPadsPhi(0),fNumberOfCPVPadsZ(0),
   fNCellsXInStrip(0),fNCellsZInStrip(0),fNStripZ(0),
@@ -70,6 +73,7 @@ AliPHOSGeoUtils::AliPHOSGeoUtils(const AliPHOSGeoUtils & rhs)
 //____________________________________________________________________________
 AliPHOSGeoUtils::AliPHOSGeoUtils(const Text_t* name, const Text_t* title) 
     : TNamed(name, title),
+  fGeometryEMCA(0x0),fGeometryCPV(0x0),fGeometrySUPP(0x0),
   fNModules(0),fNCristalsInModule(0),fNPhi(0),fNZ(0),
   fNumberOfCPVPadsPhi(0),fNumberOfCPVPadsZ(0),
   fNCellsXInStrip(0),fNCellsZInStrip(0),fNStripZ(0),
@@ -77,12 +81,45 @@ AliPHOSGeoUtils::AliPHOSGeoUtils(const Text_t* name, const Text_t* title)
   fPadSizePhi(0.),fPadSizeZ(0.),fCPVBoxSizeY(0.)
 { 
   // ctor only for normal usage 
-  Init() ;
+
+  fGeometryEMCA = new AliPHOSEMCAGeometry() ;
+  fGeometryCPV  = new AliPHOSCPVGeometry() ;
+  fGeometrySUPP = new AliPHOSSupportGeometry() ;
+
+  fNModules     = 5;
+  fNPhi  = fGeometryEMCA->GetNPhi() ;
+  fNZ    = fGeometryEMCA->GetNZ() ;
+  fNCristalsInModule = fNPhi*fNZ ;
+  fNCellsXInStrip= fGeometryEMCA->GetNCellsXInStrip() ;
+  fNCellsZInStrip= fGeometryEMCA->GetNCellsZInStrip() ;
+  fNStripZ = fGeometryEMCA->GetNStripZ() ;
+  fXtlArrSize[0]=fGeometryEMCA->GetInnerThermoHalfSize()[0] ; //Wery close to the zise of the Xtl set
+  fXtlArrSize[1]=fGeometryEMCA->GetInnerThermoHalfSize()[1] ; //Wery close to the zise of the Xtl set
+  fXtlArrSize[2]=fGeometryEMCA->GetInnerThermoHalfSize()[2] ; //Wery close to the zise of the Xtl set
+
+  //calculate offset to crystal surface
+  Float_t * inthermo = fGeometryEMCA->GetInnerThermoHalfSize() ;
+  Float_t * strip = fGeometryEMCA->GetStripHalfSize() ;
+  Float_t* splate = fGeometryEMCA->GetSupportPlateHalfSize();
+  Float_t * crystal = fGeometryEMCA->GetCrystalHalfSize() ;
+  Float_t * pin = fGeometryEMCA->GetAPDHalfSize() ;
+  Float_t * preamp = fGeometryEMCA->GetPreampHalfSize() ;
+  fCrystalShift=-inthermo[1]+strip[1]+splate[1]+crystal[1]-fGeometryEMCA->GetAirGapLed()/2.+pin[1]+preamp[1] ;
+  fCryCellShift=crystal[1]-(fGeometryEMCA->GetAirGapLed()-2*pin[1]-2*preamp[1])/2;
+  fCellStep = 2.*fGeometryEMCA->GetAirCellHalfSize()[0] ;
+
+
+  fNumberOfCPVPadsPhi = fGeometryCPV->GetNumberOfCPVPadsPhi() ;
+  fNumberOfCPVPadsZ   = fGeometryCPV->GetNumberOfCPVPadsZ() ;
+  fPadSizePhi = fGeometryCPV->GetCPVPadSizePhi() ;
+  fPadSizeZ   = fGeometryCPV->GetCPVPadSizeZ() ; 
+  fCPVBoxSizeY= fGeometryCPV->GetCPVBoxSize(1) ;
 }
 
 //____________________________________________________________________________
 AliPHOSGeoUtils & AliPHOSGeoUtils::operator = (const AliPHOSGeoUtils  & /*rvalue*/) { 
-    Init() ;
+
+  Fatal("assignment operator", "not implemented") ; 
     return *this ;
 }
 
@@ -90,6 +127,16 @@ AliPHOSGeoUtils & AliPHOSGeoUtils::operator = (const AliPHOSGeoUtils  & /*rvalue
 AliPHOSGeoUtils::~AliPHOSGeoUtils(void)
 {
   // dtor
+  if(fGeometryEMCA){
+    delete fGeometryEMCA; fGeometryEMCA = 0 ;
+  }
+  if(fGeometryCPV){
+    delete fGeometryCPV; fGeometryCPV=0 ;
+  }
+  if(fGeometrySUPP){
+    delete fGeometrySUPP ; fGeometrySUPP=0 ;
+  }
+
 }
 //____________________________________________________________________________
 Bool_t AliPHOSGeoUtils::AbsToRelNumbering(Int_t absId, Int_t * relid) const
@@ -519,40 +566,12 @@ Bool_t AliPHOSGeoUtils::ImpactOnEmc(const Double_t * vtx, const TVector3 &p,
   return kFALSE ;
 
 }
-
 //____________________________________________________________________________
-void AliPHOSGeoUtils::Init(void){
-  //Reads geometry parameters from dedicated classes
+void AliPHOSGeoUtils::GetIncidentVector(const TVector3 &vtx, Int_t module, Float_t x,Float_t z, TVector3 &vInc) const {
+  //Calculates vector pointing from vertex to current poisition in module local frame
+  //Note that PHOS local system and ALICE global have opposite z directions
 
-  AliPHOSEMCAGeometry emcGeom ;
-
-  fNModules     = 5;
-  fNPhi  = emcGeom.GetNPhi() ;
-  fNZ    = emcGeom.GetNZ() ;
-  fNCristalsInModule = fNPhi*fNZ ;
-  fNCellsXInStrip= emcGeom.GetNCellsXInStrip() ;
-  fNCellsZInStrip= emcGeom.GetNCellsZInStrip() ;
-  fNStripZ = emcGeom.GetNStripZ() ;
-  fXtlArrSize[0]=emcGeom.GetInnerThermoHalfSize()[0] ; //Wery close to the zise of the Xtl set
-  fXtlArrSize[1]=emcGeom.GetInnerThermoHalfSize()[1] ; //Wery close to the zise of the Xtl set
-  fXtlArrSize[2]=emcGeom.GetInnerThermoHalfSize()[2] ; //Wery close to the zise of the Xtl set
-
-  //calculate offset to crystal surface
-  Float_t * inthermo = emcGeom.GetInnerThermoHalfSize() ;
-  Float_t * strip = emcGeom.GetStripHalfSize() ;
-  Float_t* splate = emcGeom.GetSupportPlateHalfSize();
-  Float_t * crystal = emcGeom.GetCrystalHalfSize() ;
-  Float_t * pin = emcGeom.GetAPDHalfSize() ;
-  Float_t * preamp = emcGeom.GetPreampHalfSize() ;
-  fCrystalShift=-inthermo[1]+strip[1]+splate[1]+crystal[1]-emcGeom.GetAirGapLed()/2.+pin[1]+preamp[1] ;
-  fCryCellShift=crystal[1]-(emcGeom.GetAirGapLed()-2*pin[1]-2*preamp[1])/2;
-  fCellStep = 2.*emcGeom.GetAirCellHalfSize()[0] ;
-
-  AliPHOSCPVGeometry cpvGeom ;
-
-  fNumberOfCPVPadsPhi = cpvGeom.GetNumberOfCPVPadsPhi() ;
-  fNumberOfCPVPadsZ   = cpvGeom.GetNumberOfCPVPadsZ() ;
-  fPadSizePhi = cpvGeom.GetCPVPadSizePhi() ;
-  fPadSizeZ   = cpvGeom.GetCPVPadSizeZ() ; 
-  fCPVBoxSizeY= cpvGeom.GetCPVBoxSize(1) ;
+  Global2Local(vInc,vtx,module) ; 
+  vInc.SetXYZ(vInc.X()+x,vInc.Y(),vInc.Z()+z) ;
 }
+
index 17054ce..b273af9 100644 (file)
@@ -5,8 +5,10 @@
 
 //_________________________________________________________________________
 // class for geometry transformations in PHOS
+// this class contains AiRoot-independent transformations,
+// AliRoot part is in AliPHOSGeometry
 // PHOS consists of the electromagnetic calorimeter (EMCA)
-// and a charged particle veto (CPV)
+// charged particle veto (CPV) and support
 // 
 //*-- Author: Dmitri Peressounko (RRC "KI")
 
@@ -17,6 +19,9 @@
 
 class TVector3;
 class TParticle ;
+class AliPHOSEMCAGeometry;
+class AliPHOSCPVGeometry;
+class AliPHOSSupportGeometry;
 
 class AliPHOSGeoUtils : public TNamed {
 
@@ -68,13 +73,14 @@ public:
   Bool_t IsInEMC(Int_t id) const { if (id > fNModules *  fNCristalsInModule ) return kFALSE; return kTRUE; } 
 
 
-private:
-  void Init(void) ;  //Read all sizes etc. for EMC and CPV geometries
+protected:
 
-private:
+  AliPHOSEMCAGeometry     *fGeometryEMCA ;   // Geometry object for Electromagnetic calorimeter
+  AliPHOSCPVGeometry      *fGeometryCPV ;    // Geometry object for CPV  (IHEP)
+  AliPHOSSupportGeometry  *fGeometrySUPP ;   // Geometry object for PHOS support
 
-  Int_t fNModules ;          // Maximal designed number of modules in PHOS
+  Int_t fNModules ;          //Maximal designed number of modules in PHOS
   Int_t fNCristalsInModule ; //Number of crystals in one module
   Int_t fNPhi ;              //Number of crystals along Phi direction
   Int_t fNZ ;                //Number of crystals along Z direction
@@ -92,7 +98,7 @@ private:
   Float_t fPadSizeZ ;        //Size of CPV pad in Z direction
   Float_t fCPVBoxSizeY ;
 
-  ClassDef(AliPHOSGeoUtils,1)       // PHOS geometry class 
+  ClassDef(AliPHOSGeoUtils,2)       // PHOS geometry class 
 
 } ;
 
index ec31b16..1b0178b 100644 (file)
@@ -50,16 +50,13 @@ Bool_t             AliPHOSGeometry::fgInit = kFALSE ;
 
 //____________________________________________________________________________
 AliPHOSGeometry::AliPHOSGeometry() : 
-                   fNModules(0),
+                    AliPHOSGeoUtils(),
                    fAngle(0.f),
                    fPHOSAngle(0),
                    fIPtoUpperCPVsurface(0),
                    fCrystalShift(0),
                    fCryCellShift(0),
-                   fRotMatrixArray(0),
-                   fGeometryEMCA(0),
-                   fGeometryCPV(0),
-                   fGeometrySUPP(0)
+                   fRotMatrixArray(0)
 {
     // default ctor 
     // must be kept public for root persistency purposes, but should never be called by the outside world
@@ -68,34 +65,26 @@ AliPHOSGeometry::AliPHOSGeometry() :
 
 //____________________________________________________________________________
 AliPHOSGeometry::AliPHOSGeometry(const AliPHOSGeometry & rhs)
-                   : AliGeometry(rhs),
-                     fNModules(rhs.fNModules),
+                   : AliPHOSGeoUtils(rhs),
                      fAngle(rhs.fAngle),
                      fPHOSAngle(0),
                      fIPtoUpperCPVsurface(rhs.fIPtoUpperCPVsurface),
                      fCrystalShift(rhs.fCrystalShift),
                      fCryCellShift(rhs.fCryCellShift),
-                     fRotMatrixArray(0),
-                     fGeometryEMCA(0),
-                     fGeometryCPV(0),
-                     fGeometrySUPP(0)
+                     fRotMatrixArray(0)
 {
   Fatal("cpy ctor", "not implemented") ; 
 }
 
 //____________________________________________________________________________
 AliPHOSGeometry::AliPHOSGeometry(const Text_t* name, const Text_t* title) 
-                 : AliGeometry(name, title),
-                   fNModules(0),
+                 : AliPHOSGeoUtils(name, title),
                    fAngle(0.f),
                    fPHOSAngle(0),
                    fIPtoUpperCPVsurface(0),
                    fCrystalShift(0),
                    fCryCellShift(0),
-                   fRotMatrixArray(0),
-                   fGeometryEMCA(0),
-                   fGeometryCPV(0),
-                   fGeometrySUPP(0)
+                   fRotMatrixArray(0)
 { 
   // ctor only for internal usage (singleton)
   Init() ; 
@@ -118,24 +107,10 @@ void AliPHOSGeometry::Init(void)
   // Initializes the PHOS parameters :
   //  IHEP is the Protvino CPV (cathode pad chambers)
   
-/*
-  TString test(GetName()) ; 
-  if (test != "IHEP" && test != "noCPV") {
-    AliFatal(Form("%s is not a known geometry (choose among IHEP)", 
-                 test.Data() )) ; 
-  }
-*/
-
   fgInit     = kTRUE ; 
 
-  fNModules     = 5;
   fAngle        = 20;
 
-  fGeometryEMCA = new AliPHOSEMCAGeometry();
-  
-  fGeometryCPV  = new AliPHOSCPVGeometry ();
-  
-  fGeometrySUPP = new AliPHOSSupportGeometry();
   
   fPHOSAngle = new Float_t[fNModules] ;
   
@@ -246,42 +221,6 @@ void AliPHOSGeometry::SetPHOSAngles()
     fPHOSAngle[i-1] = -  angle ;
   } 
 }
-
-//____________________________________________________________________________
-Bool_t AliPHOSGeometry::AbsToRelNumbering(Int_t absId, Int_t * relid) const
-{
-  // Converts the absolute numbering into the following array
-  //  relid[0] = PHOS Module number 1:fNModules 
-  //  relid[1] = 0 if PbW04
-  //           = -1 if CPV
-  //  relid[2] = Row number inside a PHOS module
-  //  relid[3] = Column number inside a PHOS module
-
-  Bool_t rv  = kTRUE ; 
-  Float_t id = absId ;
-
-  Int_t phosmodulenumber = (Int_t)TMath:: Ceil( id / GetNCristalsInModule() ) ; 
-  
-  if ( phosmodulenumber >  GetNModules() ) { // it is a CPV pad
-    
-    id -=  GetNPhi() * GetNZ() *  GetNModules() ; 
-    Float_t nCPV  = GetNumberOfCPVPadsPhi() * GetNumberOfCPVPadsZ() ;
-    relid[0] = (Int_t) TMath::Ceil( id / nCPV ) ;
-    relid[1] = -1 ;
-    id -= ( relid[0] - 1 ) * nCPV ; 
-    relid[2] = (Int_t) TMath::Ceil( id / GetNumberOfCPVPadsZ() ) ;
-    relid[3] = (Int_t) ( id - ( relid[2] - 1 ) * GetNumberOfCPVPadsZ() ) ; 
-  } 
-  else { // it is a PW04 crystal
-
-    relid[0] = phosmodulenumber ;
-    relid[1] = 0 ;
-    id -= ( phosmodulenumber - 1 ) *  GetNPhi() * GetNZ() ; 
-    relid[2] = (Int_t)TMath::Ceil( id / GetNZ() )  ;
-    relid[3] = (Int_t)( id - ( relid[2] - 1 ) * GetNZ() ) ; 
-  } 
-  return rv ; 
-}
 //____________________________________________________________________________
 void AliPHOSGeometry::GetGlobal(const AliRecPoint* , TVector3 & ) const
 {
@@ -332,322 +271,6 @@ void AliPHOSGeometry::GetGlobalPHOS(const AliPHOSRecPoint* recPoint, TVector3 &
 
 }
 //____________________________________________________________________________
-void AliPHOSGeometry::ImpactOnEmc(Double_t * vtx, Double_t theta, Double_t phi, 
-                                  Int_t & moduleNumber, Double_t & z, Double_t & x) const
-{
-  // calculates the impact coordinates on PHOS of a neutral particle  
-  // emitted in the vertex vtx[3] with direction theta and phi in the ALICE global coordinate system
-  TVector3 p(TMath::Sin(theta)*TMath::Cos(phi),TMath::Sin(theta)*TMath::Sin(phi),TMath::Cos(theta)) ;
-  TVector3 v(vtx[0],vtx[1],vtx[2]) ;
-
-  if (!gGeoManager){
-    AliFatal("Geo manager not initialized\n");
-  }
-  for(Int_t imod=1; imod<=GetNModules() ; imod++){
-    //create vector from (0,0,0) to center of crystal surface of imod module
-    Double_t tmp[3]={0.,-fCrystalShift,0.} ;
-    char path[100] ;
-    sprintf(path,"/ALIC_1/PHOS_%d/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1",imod) ;
-    if (!gGeoManager->cd(path)){
-      AliFatal("Geo manager can not find path \n");
-    }
-    TGeoHMatrix *m = gGeoManager->GetCurrentMatrix();
-    Double_t posG[3]={0.,0.,0.} ;
-    if (m) m->LocalToMaster(tmp,posG);
-    TVector3 n(posG[0],posG[1],posG[2]) ; 
-    Double_t direction=n.Dot(p) ;
-    if(direction<=0.)
-      continue ; //momentum directed FROM module
-    Double_t fr = (n.Mag2()-n.Dot(v))/direction ;  
-    //Calculate direction in module plain
-    n-=v+fr*p ;
-    n*=-1. ;
-    Float_t * sz = fGeometryEMCA->GetInnerThermoHalfSize() ; //Wery close to the zise of the Xtl set
-    if(TMath::Abs(TMath::Abs(n.Z())<sz[2]) && n.Pt()<sz[0]){
-      moduleNumber = imod ;
-      z=n.Z() ;
-      x=TMath::Sign(n.Pt(),n.X()) ;
-      //no need to return to local system since we calcilated distance from module center
-      //and tilts can not be significant.
-      return ;
-    }
-  }
-  //Not in acceptance
-  x=0; z=0 ;
-  moduleNumber=0 ;
-
-}
-
-//____________________________________________________________________________
-Bool_t  AliPHOSGeometry::Impact(const TParticle * particle) const 
-{
-  // Tells if a particle enters PHOS
-  Bool_t in=kFALSE;
-  Int_t moduleNumber=0;
-  Double_t vtx[3]={particle->Vx(),particle->Vy(),particle->Vz()} ;
-  Double_t z,x;
-  ImpactOnEmc(vtx,particle->Theta(),particle->Phi(),moduleNumber,z,x);
-  if(moduleNumber!=0) 
-    in=kTRUE;
-  return in;
-}
-
-//____________________________________________________________________________
-Bool_t AliPHOSGeometry::RelToAbsNumbering(const Int_t * relid, Int_t &  absId) const
-{
-  // Converts the relative numbering into the absolute numbering
-  // EMCA crystals:
-  //  absId = from 1 to fNModules * fNPhi * fNZ
-  // CPV pad:
-  //  absId = from N(total PHOS crystals) + 1
-  //          to NCPVModules * fNumberOfCPVPadsPhi * fNumberOfCPVPadsZ
-
-  Bool_t rv = kTRUE ; 
-  
-  if ( relid[1] ==  0 ) {                            // it is a Phos crystal
-    absId =
-      ( relid[0] - 1 ) * GetNPhi() * GetNZ()         // the offset of PHOS modules
-      + ( relid[2] - 1 ) * GetNZ()                   // the offset along phi
-      +   relid[3] ;                                 // the offset along z
-  }
-  else { // it is a CPV pad
-    absId =    GetNPhi() * GetNZ() *  GetNModules()         // the offset to separate EMCA crystals from CPV pads
-      + ( relid[0] - 1 ) * GetNumberOfCPVPadsPhi() * GetNumberOfCPVPadsZ()   // the pads offset of PHOS modules 
-      + ( relid[2] - 1 ) * GetNumberOfCPVPadsZ()                             // the pads offset of a CPV row
-      +   relid[3] ;                                                         // the column number
-  }
-  
-  return rv ; 
-}
-
-//____________________________________________________________________________
-void AliPHOSGeometry::RelPosInAlice(Int_t id, TVector3 & pos ) const
-{
-  // Converts the absolute numbering into the global ALICE coordinate system
-  
-  if (!gGeoManager){
-    AliFatal("Geo manager not initialized\n");
-  }
-    
-  Int_t relid[4] ;
-    
-  AbsToRelNumbering(id , relid) ;
-    
-  //construct module name
-  char path[100] ;
-  if(relid[1]==0){ //this is EMC
-    Double_t ps[3]= {0.0,-fCryCellShift,0.}; //Position incide the crystal 
-    Double_t psC[3]={0.0,0.0,0.}; //Global position
-    //Shift and possibly apply misalignment corrections
-    Int_t nCellsXInStrip=fGeometryEMCA->GetNCellsXInStrip() ;
-    Int_t nCellsZInStrip=fGeometryEMCA->GetNCellsZInStrip() ;
-    Int_t strip=1+((Int_t) TMath::Ceil((Double_t)relid[2]/nCellsXInStrip))*fGeometryEMCA->GetNStripZ()-
-                (Int_t) TMath::Ceil((Double_t)relid[3]/nCellsZInStrip) ;
-    Int_t cellraw= relid[3]%nCellsZInStrip ;
-    if(cellraw==0)cellraw=nCellsZInStrip ;
-    Int_t cell= ((relid[2]-1)%nCellsXInStrip)*nCellsZInStrip + cellraw ;
-    sprintf(path,"/ALIC_1/PHOS_%d/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1/PSTR_%d/PCEL_%d",
-            relid[0],strip,cell) ;
-    if (!gGeoManager->cd(path)){
-      AliFatal("Geo manager can not find path \n");
-    }
-    TGeoHMatrix *m = gGeoManager->GetCurrentMatrix();
-    if (m) m->LocalToMaster(ps,psC);
-    else{
-      AliFatal("Geo matrixes are not loaded \n") ;
-    }
-    pos.SetXYZ(psC[0],psC[1],psC[2]) ; 
-  }
-  else{
-    //first calculate position with respect to CPV plain
-    Int_t row        = relid[2] ; //offset along x axis
-    Int_t column     = relid[3] ; //offset along z axis
-    Double_t ps[3]= {0.0,GetCPVBoxSize(1)/2.,0.}; //Position on top of CPV
-    Double_t psC[3]={0.0,0.0,0.}; //Global position
-    pos[0] = - ( GetNumberOfCPVPadsPhi()/2. - row    - 0.5 ) * GetPadSizePhi()  ; // position of pad  with respect
-    pos[2] = - ( GetNumberOfCPVPadsZ()  /2. - column - 0.5 ) * GetPadSizeZ()  ; // of center of PHOS module
-    //now apply possible shifts and rotations
-    sprintf(path,"/ALIC_1/PHOS_%d/PCPV_1",relid[0]) ;
-    if (!gGeoManager->cd(path)){
-      AliFatal("Geo manager can not find path \n");
-    }
-    TGeoHMatrix *m = gGeoManager->GetCurrentMatrix();
-    if (m) m->LocalToMaster(ps,psC);
-    else{
-      AliFatal("Geo matrixes are not loaded \n") ;
-    }
-    pos.SetXYZ(psC[0],psC[1],-psC[2]) ; 
-  }
-} 
-
-//____________________________________________________________________________
-void AliPHOSGeometry::RelPosToAbsId(Int_t module, Double_t x, Double_t z, Int_t & absId) const
-{
-  // converts local PHOS-module (x, z) coordinates to absId 
-
-  //find Global position
-  if (!gGeoManager){
-    AliFatal("Geo manager not initialized\n");
-  }
-  Double_t posL[3]={x,-fCrystalShift,-z} ; //Only for EMC!!!
-  Double_t posG[3] ;
-  char path[100] ;
-  sprintf(path,"/ALIC_1/PHOS_%d/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1",module) ;
-  if (!gGeoManager->cd(path)){
-    AliFatal("Geo manager can not find path \n");
-  }
-  TGeoHMatrix *mPHOS = gGeoManager->GetCurrentMatrix();
-  if (mPHOS){
-     mPHOS->LocalToMaster(posL,posG);
-  }
-  else{
-    AliFatal("Geo matrixes are not loaded \n") ;
-  }
-
-  Int_t relid[4] ;
-  gGeoManager->FindNode(posG[0],posG[1],posG[2]) ;
-  //Check that path contains PSTR and extract strip number
-  TString cpath(gGeoManager->GetPath()) ;
-  Int_t indx = cpath.Index("PCEL") ;
-  if(indx==-1){ //for the few events when particle hits between srips use ideal geometry
-    relid[0] = module ;
-    relid[1] = 0 ;
-    relid[2] = static_cast<Int_t>(TMath::Ceil( x/ GetCellStep() + GetNPhi() / 2.) );
-    relid[3] = static_cast<Int_t>(TMath::Ceil(-z/ GetCellStep() + GetNZ()   / 2.) ) ;
-    if(relid[2]<1)relid[2]=1 ;
-    if(relid[3]<1)relid[3]=1 ;
-    if(relid[2]>GetNPhi())relid[2]=GetNPhi() ;
-    if(relid[3]>GetNZ())relid[3]=GetNZ() ;
-    RelToAbsNumbering(relid,absId) ;
-  }
-  else{
-    Int_t indx2 = cpath.Index("/",indx) ;
-    if(indx2==-1)
-      indx2=cpath.Length() ;
-    TString cell=cpath(indx+5,indx2-indx-5) ;
-    Int_t icell=cell.Atoi() ;
-    indx = cpath.Index("PSTR") ;
-    indx2 = cpath.Index("/",indx) ;
-    TString strip=cpath(indx+5,indx2-indx-5) ;
-    Int_t iStrip = strip.Atoi() ; 
-
-    Int_t row = fGeometryEMCA->GetNStripZ() - (iStrip - 1) % (fGeometryEMCA->GetNStripZ()) ;
-    Int_t col = (Int_t) TMath::Ceil((Double_t) iStrip/(fGeometryEMCA->GetNStripZ())) -1 ;
-    // Absid for 8x2-strips. Looks nice :)
-    absId = (module-1)*GetNCristalsInModule() +
-                  row * 2 + (col*fGeometryEMCA->GetNCellsXInStrip() + (icell - 1) / 2)*GetNZ() - (icell & 1 ? 1 : 0);
-  }
-}
-
-//____________________________________________________________________________
-void AliPHOSGeometry::RelPosInModule(const Int_t * relid, Float_t & x, Float_t & z) const 
-{
-  // Converts the relative numbering into the local PHOS-module (x, z) coordinates
-  // Note: sign of z differs from that in the previous version (Yu.Kharlov, 12 Oct 2000)
-  
-
-  if (!gGeoManager){
-    AliFatal("Geo manager not initialized\n");
-  }
-  //construct module name
-  char path[100] ;
-  if(relid[1]==0){ //this is PHOS
-
-//   Calculations using ideal geometry (obsolete)
-//    x = - ( GetNPhi()/2. - relid[2]    + 0.5 ) *  GetCellStep() ; // position of Xtal with respect
-//    z = - ( GetNZ()  /2. - relid[3] + 0.5 ) *  GetCellStep() ; // of center of PHOS module  
-
-    Double_t pos[3]= {0.0,-fCryCellShift,0.}; //Position incide the crystal 
-    Double_t posC[3]={0.0,0.0,0.}; //Global position
-
-    //Shift and possibly apply misalignment corrections
-    Int_t nCellsXInStrip=fGeometryEMCA->GetNCellsXInStrip() ;
-    Int_t nCellsZInStrip=fGeometryEMCA->GetNCellsZInStrip() ;
-//    Int_t strip=1+(relid[3]-1)/fGeometryEMCA->GetNCellsZInStrip()+((relid[2]-1)/nCellsInStrip)*fGeometryEMCA->GetNStripZ() ;
-    Int_t strip=1+((Int_t) TMath::Ceil((Double_t)relid[2]/nCellsXInStrip))*fGeometryEMCA->GetNStripZ()-
-                (Int_t) TMath::Ceil((Double_t)relid[3]/nCellsZInStrip) ;
-    Int_t cellraw= relid[3]%nCellsZInStrip ;
-    if(cellraw==0)cellraw=nCellsZInStrip ;
-    Int_t cell= ((relid[2]-1)%nCellsXInStrip)*nCellsZInStrip + cellraw ; 
-    sprintf(path,"/ALIC_1/PHOS_%d/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1/PSTR_%d/PCEL_%d",
-            relid[0],strip,cell) ;
-    if (!gGeoManager->cd(path)){
-      AliFatal("Geo manager can not find path \n");
-    }
-    TGeoHMatrix *m = gGeoManager->GetCurrentMatrix();
-    if (m) m->LocalToMaster(pos,posC);
-    else{
-      AliFatal("Geo matrixes are not loaded \n") ;
-    }
-    //    printf("Local: x=%f, y=%f, z=%f \n",pos[0],pos[1],pos[2]) ;
-    //    printf("   gl: x=%f, y=%f, z=%f \n",posC[0],posC[1],posC[2]) ;
-    //Return to PHOS local system  
-    Double_t posL[3]={posC[0],posC[1],posC[2]};
-    sprintf(path,"/ALIC_1/PHOS_%d/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1",relid[0]) ;
-    //    sprintf(path,"/ALIC_1/PHOS_%d",relid[0]) ;
-    if (!gGeoManager->cd(path)){
-      AliFatal("Geo manager can not find path \n");
-    }
-    TGeoHMatrix *mPHOS = gGeoManager->GetCurrentMatrix();
-    if (mPHOS) mPHOS->MasterToLocal(posC,posL);
-    else{
-      AliFatal("Geo matrixes are not loaded \n") ;
-    }
-//printf("RelPosInMod: posL=[%f,%f,%f]\n",posL[0],posL[1],posL[2]) ;
-//printf("old: x=%f, z=%f \n",x,z);
-    x=posL[0] ;
-    z=-posL[2];
-    return ;
-  }
-  else{//CPV
-    //first calculate position with respect to CPV plain 
-    Int_t row        = relid[2] ; //offset along x axis
-    Int_t column     = relid[3] ; //offset along z axis
-    Double_t pos[3]= {0.0,0.0,0.}; //Position incide the CPV printed circuit
-    Double_t posC[3]={0.0,0.0,0.}; //Global position
-    //    x = - ( GetNumberOfCPVPadsPhi()/2. - row    - 0.5 ) * GetPadSizePhi()  ; // position of pad  with respect
-    //    z = - ( GetNumberOfCPVPadsZ()  /2. - column - 0.5 ) * GetPadSizeZ()  ; // of center of PHOS module
-    pos[0] = - ( GetNumberOfCPVPadsPhi()/2. - row    - 0.5 ) * GetPadSizePhi()  ; // position of pad  with respect
-    pos[2] = - ( GetNumberOfCPVPadsZ()  /2. - column - 0.5 ) * GetPadSizeZ()  ; // of center of PHOS module
-
-    //now apply possible shifts and rotations
-    sprintf(path,"/ALIC_1/PHOS_%d/PCPV_1",relid[0]) ;
-    if (!gGeoManager->cd(path)){
-      AliFatal("Geo manager can not find path \n");
-    }
-    TGeoHMatrix *m = gGeoManager->GetCurrentMatrix();
-    if (m) m->LocalToMaster(pos,posC);
-    else{
-      AliFatal("Geo matrixes are not loaded \n") ;
-    }
-    //Return to PHOS local system
-    Double_t posL[3]={0.,0.,0.,} ;
-    sprintf(path,"/ALIC_1/PHOS_%d",relid[0]) ;
-    if (!gGeoManager->cd(path)){
-      AliFatal("Geo manager can not find path \n");
-    }
-    TGeoHMatrix *mPHOS = gGeoManager->GetCurrentMatrix();
-    if (mPHOS) mPHOS->MasterToLocal(posC,posL);
-    else{
-      AliFatal("Geo matrixes are not loaded \n") ;
-    }
-    x=posL[0] ;
-    z=posL[1];
-    return ;
-  }
-  
-}
-
-//____________________________________________________________________________
 
 void AliPHOSGeometry::GetModuleCenter(TVector3& center, 
                                      const char *det,
@@ -667,63 +290,3 @@ void AliPHOSGeometry::GetModuleCenter(TVector3& center,
   center.SetXYZ(rDet*TMath::Cos(angle), rDet*TMath::Sin(angle), 0.);
 }
 
-//____________________________________________________________________________
-
-void AliPHOSGeometry::Global2Local(TVector3& localPosition,
-                                  const TVector3& globalPosition,
-                                  Int_t module) const
-{
-  // Transforms a global position of the rec.point to the local coordinate system
-  //Return to PHOS local system
-  Double_t posG[3]={globalPosition.X(),globalPosition.Y(),globalPosition.Z()} ;
-  Double_t posL[3]={0.,0.,0.} ;
-  char path[100] ;
-  sprintf(path,"/ALIC_1/PHOS_%d/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1",module) ;
-//  sprintf(path,"/ALIC_1/PHOS_%d",module) ;
-  if (!gGeoManager->cd(path)){
-    AliFatal("Geo manager can not find path \n");
-  }
-  TGeoHMatrix *mPHOS = gGeoManager->GetCurrentMatrix();
-  if (mPHOS) mPHOS->MasterToLocal(posG,posL);
-  else{
-    AliFatal("Geo matrixes are not loaded \n") ;
-  }
-  localPosition.SetXYZ(posL[0],posL[1]+fCrystalShift,-posL[2]) ;  
-/*
-  Float_t angle = GetPHOSAngle(module); // (40,20,0,-20,-40) degrees
-  angle *= TMath::Pi()/180;
-  angle += 3*TMath::Pi()/2.;
-  localPosition = globalPosition;
-  localPosition.RotateZ(-angle);
-*/
-}
-//____________________________________________________________________________
-void AliPHOSGeometry::Local2Global(Int_t mod, Float_t x, Float_t z,
-                                  TVector3& globalPosition) const 
-{
-  char path[100] ;
-  sprintf(path,"/ALIC_1/PHOS_%d/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1",mod) ;
-//  sprintf(path,"/ALIC_1/PHOS_%d",mod) ;
-  if (!gGeoManager->cd(path)){
-    AliFatal("Geo manager can not find path \n");
-  }
-  Double_t posL[3]={x,-fCrystalShift,-z} ; //Only for EMC!!!
-  Double_t posG[3] ;
-  TGeoHMatrix *mPHOS = gGeoManager->GetCurrentMatrix();
-  if (mPHOS){
-     mPHOS->LocalToMaster(posL,posG);
-  }    
-  else{
-    AliFatal("Geo matrixes are not loaded \n") ;
-  }
-  globalPosition.SetXYZ(posG[0],posG[1],posG[2]) ;
-}
-//____________________________________________________________________________
-void AliPHOSGeometry::GetIncidentVector(const TVector3 &vtx, Int_t module, Float_t x,Float_t z, TVector3 &vInc) const {
-  //Calculates vector pointing from vertex to current poisition in module local frame
-  //Note that PHOS local system and ALICE global have opposite z directions
-
-  Global2Local(vInc,vtx,module) ; 
-  vInc.SetXYZ(vInc.X()+x,vInc.Y(),vInc.Z()+z) ;
-}
index 2b3b06e..6fbcce5 100644 (file)
 
 // --- AliRoot header files ---
 
-#include "AliGeometry.h"
+#include "AliPHOSGeoUtils.h"
 #include "AliPHOSEMCAGeometry.h"
 #include "AliPHOSCPVGeometry.h"
 #include "AliPHOSSupportGeometry.h"
+#include <TMatrixFfwd.h>
 
+class AliRecPoint ;
 class AliPHOSRecPoint;
 class TVector3;
 
-class AliPHOSGeometry : public AliGeometry {
+class AliPHOSGeometry : public AliPHOSGeoUtils {
 
 public: 
 
@@ -38,56 +40,19 @@ public:
   virtual ~AliPHOSGeometry(void) ; 
   static AliPHOSGeometry * GetInstance(const Text_t* name, const Text_t* title="") ; 
   static AliPHOSGeometry * GetInstance() ; 
+
   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
-
-  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 ; }  
                                                                        
@@ -137,9 +102,6 @@ public:
 
   // 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
 
@@ -162,8 +124,9 @@ protected:
 
   AliPHOSGeometry(const Text_t* name, const Text_t* title="") ;
 private:
+  void                     SetPHOSAngles();  // calculates the PHOS modules PHI angle
+
 
-  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
@@ -171,18 +134,14 @@ private:
   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 
+  ClassDef(AliPHOSGeometry,3)       // PHOS geometry class 
 
 } ;
 
index 0df02c8..8f218df 100644 (file)
@@ -20,6 +20,8 @@ link_directories( ${LINK_DIRECTORIES})
 
 SetModule()
 
+include(CMake_libPHOSUtils.txt)
+
 include(CMake_libPHOSrec.txt)
 
 include(CMake_libPHOSbase.txt) 
diff --git a/PHOS/CMake_libPHOSUtils.txt b/PHOS/CMake_libPHOSUtils.txt
new file mode 100644 (file)
index 0000000..2c00d32
--- /dev/null
@@ -0,0 +1,15 @@
+# -*- mode: cmake -*-
+
+set(SRCS
+  AliPHOSGeoUtils.cxx
+  AliPHOSEMCAGeometry.cxx
+  AliPHOSCPVGeometry.cxx
+  AliPHOSCPVBaseGeometry.cxx
+  AliPHOSSupportGeometry.cxx
+)
+
+# fill list of header files from list of source files
+# by exchanging the file extension
+String(REPLACE ".cxx" ".h" HDRS "${SRCS}")
+
+AddLibrary(PHOSUtils "${SRCS}" "${HDRS}")
index 6d50e76..7cbc189 100644 (file)
@@ -1,36 +1,33 @@
 # -*- mode: cmake -*-
 
 set(SRCS
-                 AliPHOSGeometry.cxx 
-                 AliPHOSEMCAGeometry.cxx 
-                 AliPHOSCPVGeometry.cxx AliPHOSCPVBaseGeometry.cxx 
-                 AliPHOSSupportGeometry.cxx 
-                 AliPHOSLoader.cxx 
-                 AliPHOSHit.cxx AliPHOSTrackSegmentMaker.cxx  AliPHOSPID.cxx 
-                 AliPHOSClusterizer.cxx 
-                 AliPHOSCalibrationDB.cxx AliPHOSDigitizer.cxx 
-                 AliPHOSSDigitizer.cxx AliPHOSDigit.cxx 
-                 AliPHOSFastRecParticle.cxx AliPHOSRawStream2004.cxx 
-                 AliPHOSCalibData.cxx 
-                AliPHOSCalibrationData.cxx 
-                 AliPHOSCpvCalibData.cxx 
-                 AliPHOSEmcCalibData.cxx AliPHOSCalibrManager.cxx 
-                AliPHOSConTableDB.cxx 
-                 AliPHOSPulseGenerator.cxx 
-                 AliPHOSRawDecoder.cxx 
-                 AliPHOSRawDecoderv1.cxx 
-                 AliPHOSRawDecoderv2.cxx 
-                 AliPHOSRawDigiProducer.cxx 
-                 AliPHOSEmcBadChannelsMap.cxx 
-                 AliPHOSSurvey.cxx 
-                 AliPHOSSurvey1.cxx 
-                 AliPHOSQAChecker.cxx 
-                 AliPHOSRecParticle.cxx AliPHOSRecPoint.cxx 
-                 AliPHOSEmcRecPoint.cxx 
-                 AliPHOSCpvRecPoint.cxx   AliPHOSTrackSegment.cxx 
-                AliPHOSRecoParam.cxx 
-                 AliPHOSImpact.cxx 
-                 AliPHOSTrigger.cxx 
+                 AliPHOSGeometry.cxx
+                 AliPHOSLoader.cxx
+                 AliPHOSHit.cxx AliPHOSTrackSegmentMaker.cxx  AliPHOSPID.cxx
+                 AliPHOSClusterizer.cxx
+                 AliPHOSCalibrationDB.cxx AliPHOSDigitizer.cxx
+                 AliPHOSSDigitizer.cxx AliPHOSDigit.cxx
+                 AliPHOSFastRecParticle.cxx AliPHOSRawStream2004.cxx
+                 AliPHOSCalibData.cxx
+                AliPHOSCalibrationData.cxx
+                 AliPHOSCpvCalibData.cxx
+                 AliPHOSEmcCalibData.cxx AliPHOSCalibrManager.cxx
+                AliPHOSConTableDB.cxx
+                 AliPHOSPulseGenerator.cxx
+                 AliPHOSRawDecoder.cxx
+                 AliPHOSRawDecoderv1.cxx
+                 AliPHOSRawDecoderv2.cxx
+                 AliPHOSRawDigiProducer.cxx
+                 AliPHOSEmcBadChannelsMap.cxx
+                 AliPHOSSurvey.cxx
+                 AliPHOSSurvey1.cxx
+                 AliPHOSQAChecker.cxx
+                 AliPHOSRecParticle.cxx AliPHOSRecPoint.cxx
+                 AliPHOSEmcRecPoint.cxx
+                 AliPHOSCpvRecPoint.cxx   AliPHOSTrackSegment.cxx
+                AliPHOSRecoParam.cxx
+                 AliPHOSImpact.cxx
+                 AliPHOSTrigger.cxx
                  AliPHOSSimParam.cxx
 )
 
index 0a3d7bd..6091e00 100644 (file)
@@ -5,5 +5,9 @@
 #pragma link off all functions;
 
 #pragma link C++ class AliPHOSGeoUtils+;
+#pragma link C++ class AliPHOSEMCAGeometry+;
+#pragma link C++ class AliPHOSCPVGeometry+;
+#pragma link C++ class AliPHOSCPVBaseGeometry+;
+#pragma link C++ class AliPHOSSupportGeometry+;
 
 #endif
index adb437f..77d8b47 100644 (file)
@@ -4,10 +4,6 @@
 #pragma link off all classes;
 #pragma link off all functions;
 
-#pragma link C++ class AliPHOSEMCAGeometry+;
-#pragma link C++ class AliPHOSCPVBaseGeometry+;
-#pragma link C++ class AliPHOSCPVGeometry+;
-#pragma link C++ class AliPHOSSupportGeometry+;
 #pragma link C++ class AliPHOSGeometry+;
 #pragma link C++ class AliPHOSLoader+;
 #pragma link C++ class AliPHOSHit+;
index 4193387..20fb89e 100644 (file)
@@ -1,11 +1,15 @@
 #-*- Mode: Makefile -*-
 
-SRCS          =  AliPHOSGeoUtils.cxx
+SRCS          =  AliPHOSGeoUtils.cxx AliPHOSEMCAGeometry.cxx  \
+                 AliPHOSCPVGeometry.cxx AliPHOSCPVBaseGeometry.cxx \
+                 AliPHOSSupportGeometry.cxx
 
 HDRS:= $(SRCS:.cxx=.h) 
 
 DHDR= PHOSUtilsLinkDef.h
 
+EXPORT:=AliPHOSGeoUtils.h
+
 ifeq (win32gcc,$(ALICE_TARGET))
 PACKSOFLAGS:= $(SOFLAGS) -L$(ALICE_ROOT)/lib/tgt_$(ALICE_TARGET) \
                          -L$(shell root-config --libdir) -lGeom 
index 6b0a6d0..e98322a 100644 (file)
@@ -2,9 +2,6 @@
 
 SRCS          =  \
                  AliPHOSGeometry.cxx \
-                 AliPHOSEMCAGeometry.cxx \
-                 AliPHOSCPVGeometry.cxx AliPHOSCPVBaseGeometry.cxx \
-                 AliPHOSSupportGeometry.cxx \
                  AliPHOSLoader.cxx \
                  AliPHOSHit.cxx AliPHOSTrackSegmentMaker.cxx  AliPHOSPID.cxx \
                  AliPHOSClusterizer.cxx \
@@ -41,6 +38,7 @@ EINCLUDE:=RAW
 
 ifeq (win32gcc,$(ALICE_TARGET))
 PACKSOFLAGS:= $(SOFLAGS) -L$(ALICE_ROOT)/lib/tgt_$(ALICE_TARGET) \
+                         -lPHOSUtils \
                          -lSTEER -lCDB -lESD -lSTEERBase \
                          -lRAWDatasim -lRAWDatarec -lRAWDatabase \
                          -L$(shell root-config --libdir) -lVMC -lEG -lGeom -lMinuit
index 87b2d3b..17cb3f8 100644 (file)
@@ -18,7 +18,7 @@ MONITOR/module.mk:    MONITOR/libMONITOR.pkg MONITOR/binmonitorGDC.pkg MONITOR/binm
 MUON/module.mk:                MUON/binmchview.pkg MUON/libMUONgeometry.pkg MUON/libMUONshuttle.pkg MUON/libMUONbase.pkg MUON/libMUONgraphics.pkg  MUON/libMUONsim.pkg MUON/libMUONcalib.pkg MUON/libMUONmapping.pkg MUON/libMUONtrigger.pkg MUON/libMUONcore.pkg MUON/libMUONraw.pkg MUON/libMUONevaluation.pkg  MUON/libMUONrec.pkg
 LHC/module.mk:         LHC/libLHC.pkg
 LHAPDF/module.mk:      LHAPDF/liblhapdf.pkg
-PHOS/module.mk:                PHOS/libPHOSbase.pkg PHOS/libPHOSsim.pkg PHOS/libPHOSrec.pkg PHOS/libPHOSshuttle.pkg
+PHOS/module.mk:                PHOS/libPHOSbase.pkg PHOS/libPHOSsim.pkg PHOS/libPHOSrec.pkg PHOS/libPHOSshuttle.pkg PHOS/libPHOSUtils.pkg
 PMD/module.mk:         PMD/libPMDbase.pkg PMD/libPMDsim.pkg PMD/libPMDrec.pkg
 PYTHIA6/module.mk:     PYTHIA6/libpythia6.pkg PYTHIA6/libAliPythia6.pkg
 RALICE/module.mk:      RALICE/libRALICE.pkg