//_________________________________________________________________________
// 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")
// --- AliRoot header files ---
+class TGeoHMatrix ;
class TVector3;
class TParticle ;
+class AliPHOSEMCAGeometry;
+class AliPHOSCPVGeometry;
+class AliPHOSSupportGeometry;
class AliPHOSGeoUtils : public TNamed {
void Global2Local(TVector3& localPosition,const TVector3& globalPosition,Int_t module) const ;
+ Bool_t GlobalPos2RelId(TVector3 & global, Int_t * relId) ;
+ //Tranfers global position into numbers in PHOS cols-raws
+ //Returns FALSE if local x,z beyond PHOS. Distance in perpendicular to PHOS direction is not checked.
+
Bool_t ImpactOnEmc(const TParticle * particle,Int_t & ModuleNumber, Double_t & z, Double_t & x) const ;
//Checks if NEUTRAL particle hits PHOS
Bool_t ImpactOnEmc(const Double_t * vtx, const TVector3& vec,
Bool_t IsInEMC(Int_t id) const { if (id > fNModules * fNCristalsInModule ) return kFALSE; return kTRUE; }
+ //Method to set shift-rotational matrixes from ESDHeader
+ void SetMisalMatrix(const TGeoHMatrix * m, Int_t mod) ;
-private:
-
- void Init(void) ; //Read all sizes etc. for EMC and CPV geometries
+protected:
+ //Returns shift-rotational matrixes for different volumes
+ const TGeoHMatrix * GetMatrixForModule(Int_t mod)const ;
+ const TGeoHMatrix * GetMatrixForStrip(Int_t mod, Int_t strip)const ;
+ const TGeoHMatrix * GetMatrixForCPV(Int_t mod)const ;
+ const TGeoHMatrix * GetMatrixForPHOS(Int_t mod)const ;
+
+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
Float_t fCrystalShift ; //Distance between center of module and crystal surface
Float_t fXtlArrSize[3] ; //Total size of cristals array
Float_t fCryCellShift ;
+ Float_t fCryStripShift ;
Float_t fCellStep ;
Float_t fPadSizePhi ; //Size of CPV pad in Phi direction
Float_t fPadSizeZ ; //Size of CPV pad in Z direction
Float_t fCPVBoxSizeY ;
- ClassDef(AliPHOSGeoUtils,1) // PHOS geometry class
+ TGeoHMatrix* fEMCMatrix[5] ; //Orientations of crystalls array in modules
+ TGeoHMatrix* fStripMatrix[5][224]; //Orientations of strip units
+ TGeoHMatrix* fCPVMatrix[5] ; //Orientations of CPV
+ const TGeoHMatrix* fPHOSMatrix[5] ; //Orientations of PHOS modules
+
+ TClonesArray * fMisalArray ;
+
+ ClassDef(AliPHOSGeoUtils,2) // PHOS geometry class
} ;