]>
Commit | Line | Data |
---|---|---|
70a0fabe | 1 | #ifndef ALIPHOSGEOUTILS_H |
2 | #define ALIPHOSGEOUTILS_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | //_________________________________________________________________________ | |
7 | // class for geometry transformations in PHOS | |
8 | // PHOS consists of the electromagnetic calorimeter (EMCA) | |
9 | // and a charged particle veto (CPV) | |
10 | // | |
11 | //*-- Author: Dmitri Peressounko (RRC "KI") | |
12 | ||
13 | // --- ROOT system --- | |
14 | #include "TNamed.h" | |
15 | ||
16 | // --- AliRoot header files --- | |
17 | ||
18 | class TVector3; | |
19 | class TParticle ; | |
20 | ||
21 | class AliPHOSGeoUtils : public TNamed { | |
22 | ||
23 | public: | |
24 | ||
25 | AliPHOSGeoUtils() ; | |
26 | AliPHOSGeoUtils(const Text_t* name, const Text_t* title="") ; | |
27 | AliPHOSGeoUtils(const AliPHOSGeoUtils & geom) ; | |
28 | ||
29 | virtual ~AliPHOSGeoUtils(void) ; | |
30 | AliPHOSGeoUtils & operator = (const AliPHOSGeoUtils & rvalue) ; | |
31 | ||
32 | Bool_t AbsToRelNumbering(Int_t AbsId, Int_t * RelId) const ; | |
33 | // converts the absolute PHOS cell numbering to a relative | |
34 | Bool_t RelToAbsNumbering(const Int_t * RelId, Int_t & AbsId) const ; | |
35 | // converts the absolute PHOS numbering to a relative | |
36 | ||
37 | void RelPosInModule(const Int_t * relId, Float_t & y, Float_t & z) const ; | |
38 | // gets the position of element (pad or Xtal) relative to | |
39 | // center of PHOS module | |
40 | void RelPosToAbsId(Int_t module, Double_t x, Double_t z, Int_t & AbsId) const; | |
41 | // converts local PHOS-module (x, z) coordinates to absId | |
42 | void RelPosToRelId(Int_t module, Double_t x, Double_t z, Int_t * relId) const; | |
43 | // converts local PHOS-module (x, z) coordinates to relId | |
44 | void RelPosInAlice(Int_t AbsId, TVector3 & pos) const ; | |
45 | // gets the position of element (pad or Xtal) relative to Alice | |
46 | ||
47 | void Local2Global(Int_t module, Float_t x, Float_t z, TVector3 &globaPos) const ; | |
48 | ||
49 | void Global2Local(TVector3& localPosition,const TVector3& globalPosition,Int_t module) const ; | |
50 | ||
f4aea312 | 51 | Bool_t GlobalPos2RelId(TVector3 & global, Int_t * relId) ; |
52 | //Tranfers global position into numbers in PHOS cols-raws | |
53 | //Returns FALSE if local x,z beyond PHOS. Distance in perpendicular to PHOS direction is not checked. | |
54 | ||
70a0fabe | 55 | Bool_t ImpactOnEmc(const TParticle * particle,Int_t & ModuleNumber, Double_t & z, Double_t & x) const ; |
56 | //Checks if NEUTRAL particle hits PHOS | |
57 | Bool_t ImpactOnEmc(const Double_t * vtx, const TVector3& vec, | |
58 | Int_t & ModuleNumber, Double_t & z, Double_t & x) const ; | |
59 | // calculates the impact coordinates of a neutral particle | |
60 | // emitted in direction theta and phi in ALICE | |
61 | Bool_t ImpactOnEmc(const Double_t * vtx, const Double_t theta, const Double_t phi, | |
62 | Int_t & ModuleNumber, Double_t & z, Double_t & x) const ; | |
63 | // calculates the impact coordinates of a neutral particle | |
64 | // emitted in direction theta and phi in ALICE | |
65 | void GetIncidentVector(const TVector3 &vtx, Int_t module, Float_t x, Float_t z, TVector3& vInc) const ; | |
66 | //calculates vector from vertex to current point in module local frame | |
67 | ||
68 | Bool_t IsInEMC(Int_t id) const { if (id > fNModules * fNCristalsInModule ) return kFALSE; return kTRUE; } | |
69 | ||
70 | ||
71 | private: | |
72 | ||
73 | void Init(void) ; //Read all sizes etc. for EMC and CPV geometries | |
74 | ||
75 | private: | |
76 | ||
77 | Int_t fNModules ; // Maximal designed number of modules in PHOS | |
78 | Int_t fNCristalsInModule ; //Number of crystals in one module | |
79 | Int_t fNPhi ; //Number of crystals along Phi direction | |
80 | Int_t fNZ ; //Number of crystals along Z direction | |
81 | Int_t fNumberOfCPVPadsPhi; //Number of CPV pads along Phi direction | |
82 | Int_t fNumberOfCPVPadsZ ; //Number of CPV pads along Z direction | |
83 | Int_t fNCellsXInStrip ; //Number of crystals in strip | |
84 | Int_t fNCellsZInStrip ; //Number of crystals in strip in Z direction | |
85 | Int_t fNStripZ ; //Number of strips in Z direction | |
86 | ||
87 | Float_t fCrystalShift ; //Distance between center of module and crystal surface | |
88 | Float_t fXtlArrSize[3] ; //Total size of cristals array | |
89 | Float_t fCryCellShift ; | |
90 | Float_t fCellStep ; | |
91 | Float_t fPadSizePhi ; //Size of CPV pad in Phi direction | |
92 | Float_t fPadSizeZ ; //Size of CPV pad in Z direction | |
93 | Float_t fCPVBoxSizeY ; | |
94 | ||
95 | ClassDef(AliPHOSGeoUtils,1) // PHOS geometry class | |
96 | ||
97 | } ; | |
98 | ||
99 | #endif // AliPHOSGEOUTILS_H |