Track reconstruction code for TOF: updating
[u/mrichter/AliRoot.git] / TOF / AliTOFGeometry.h
1 #ifndef ALITOFGEOMETRY_H
2 #define ALITOFGEOMETRY_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 ///////////////////////////////////////////////////////////////////////////////
9 //                                                                           //
10 //  TOF geometry class                                                       //
11 //                                                                           //
12 ///////////////////////////////////////////////////////////////////////////////
13
14
15
16 class AliTOFGeometry{
17
18  public:
19   AliTOFGeometry();
20   virtual ~AliTOFGeometry();
21
22   static  Int_t NStripA()     { return kNStripA;};
23   static  Int_t NStripB()     { return kNStripB;};
24   static  Int_t NStripC()     { return kNStripC;};
25   static  Int_t NpadX()       { return kNpadX;};
26   static  Int_t NpadZ()       { return kNpadZ;};
27   static  Int_t NSectors()    { return kNSectors;};
28   static  Int_t NPlates()     { return kNPlates;};
29   static  Int_t NPadXSector() { return (kNStripA + 2*kNStripB +
30                                        2*kNStripC)*kNpadX*kNpadZ;};
31   static  Int_t TimeDiff()    { return fgkTimeDiff;};
32   static  Int_t MaxTOFTree()  { return kMaxTOFTree;};
33
34
35   static  Float_t RinTOF()   { return fgkxTOF;};
36   static  Float_t Rmin()     { return fgkRmin;};
37   static  Float_t Rmax()     { return fgkRmax;};
38   static  Float_t ZlenA()    { return fgkZlenA;};
39   static  Float_t ZlenB()    { return fgkZlenB;};
40   static  Float_t ZlenC()    { return fgkZlenC;};
41   static  Float_t XPad()     { return fgkXPad;};
42   static  Float_t ZPad()     { return fgkZPad;};
43   static  Float_t MaxhZtof() { return fgkMaxhZtof;};
44
45
46   static  Float_t SigmaForTail1() { return fgkSigmaForTail1;};
47   static  Float_t SigmaForTail2() { return fgkSigmaForTail2;};
48   static  Float_t SpeedOfLight()  { return fgkSpeedOfLight;};
49   static  Float_t PionMass()      { return fgkPionMass;};
50   static  Float_t KaonMass()      { return fgkKaonMass;};
51   static  Float_t ProtonMass()    { return fgkProtonMass;};
52   static  Float_t ElectronMass()  { return fgkElectronMass;};
53   static  Float_t MuonMass()      { return fgkMuonMass;};
54  
55   static  Double_t GetAlpha()  { return 2 * 3.14159265358979323846 / kNSectors; }; 
56  
57
58   virtual void    Init();
59   virtual void    SetHoles(Bool_t holes) {fHoles = holes;};
60   virtual Bool_t  GetHoles() const {return fHoles;};
61   virtual Bool_t  IsInsideThePad(Int_t *det, Float_t *pos); 
62   virtual Float_t DistanceToPad(Int_t *det, Float_t *pos); 
63   virtual void    GetPos(Int_t *det,Float_t *pos);
64   virtual void    GetDetID(Float_t *pos,Int_t *det);
65   virtual Int_t   GetPlate(Float_t *pos);
66   virtual Int_t   GetStrip(Float_t *pos);
67   virtual Int_t   GetSector(Float_t *pos);
68   virtual Int_t   GetPadX(Float_t *pos);
69   virtual Int_t   GetPadZ(Float_t *pos);
70   virtual Float_t GetX(Int_t *det);
71   virtual Float_t GetY(Int_t *det);
72   virtual Float_t GetZ(Int_t *det);
73   virtual Float_t GetMinPlateTheta(Int_t iPlate);
74   virtual Float_t GetMaxPlateTheta(Int_t iPlate);
75   virtual Float_t GetMinStripTheta(Int_t iPlate, Int_t iStrip);
76   virtual Float_t GetMaxStripTheta(Int_t iPlate, Int_t iStrip);
77   virtual Float_t GetStripTheta(Int_t iPlate, Int_t iStrip);
78   virtual Float_t GetAngles(Int_t iplate, Int_t istrip)  const {return fAngles[iplate][istrip];};
79   virtual Float_t GetHeights(Int_t iplate, Int_t istrip) const {return fHeights[iplate][istrip];};
80
81   private:
82
83   enum {
84     kNStripA    = 15, // number of strips in A type module 
85     kNStripB    = 19, // number of strips in B type module 
86     kNStripC    = 20, // number of strips in C type module 
87     kNpadX      = 48, // Number of pads along X 
88     kNpadZ      = 2,  // Number of pads along Z
89     kNSectors   = 18, // Number of Sectors
90     kNPlates    = 5,  // Number of Plates
91     kMaxNstrip  = 20, // Max. number of strips
92     kMaxTOFTree = 5   // numer of geom. levels: 
93   };
94
95   static const Int_t fgkTimeDiff;  // Min signal separation (ps)
96
97   static const Float_t fgkRmin;    // Inner radius of the TOF (cm)
98   static const Float_t fgkRmax;    // Outer radius of the TOF (cm)
99   static const Float_t fgkZlenA;   // length (cm) of the A module
100   static const Float_t fgkZlenB;   // length (cm) of the B module
101   static const Float_t fgkZlenC;   // length (cm) of the C module
102   static const Float_t fgkXPad;    // Pad size in the x direction (cm)
103   static const Float_t fgkZPad;    // Pad size in the z direction (cm)
104   static const Float_t fgkMaxhZtof;// Max half z-size of TOF (cm)
105
106   static const Float_t fgkxTOF;// Inner TOF Radius used in Reconstruction (cm)
107
108   static const Float_t fgkSigmaForTail1;//Sig1 for simulation of TDC tails 
109   static const Float_t fgkSigmaForTail2;//Sig2 for simulation of TDC tails
110   static const Float_t fgkSpeedOfLight;// c (10^9 m/s)
111   static const Float_t fgkPionMass;// pion mass (Gev/c^2)
112   static const Float_t fgkKaonMass;// kaon mass (Gev/c^2)
113   static const Float_t fgkProtonMass;// proton mass (Gev/c^2)
114   static const Float_t fgkElectronMass;// electron mass (Gev/c^2)
115   static const Float_t fgkMuonMass;// muon mass (Gev/c^2)
116
117
118   static const Float_t fgkDprecMin;//num.prec.tolerance on Thmin 
119   static const Float_t fgkDprecMax;//num.prec.tolerance on Thma 
120   static const Float_t fgkDprecCen;//num.prec.tolerance on <Theta> 
121   Bool_t fHoles; //logical for geometry version (w/wo holes) 
122   Float_t fAngles[kNPlates][kMaxNstrip]; //Strip Tilt Angles
123   Float_t fHeights[kNPlates][kMaxNstrip];//Strip heights
124   Float_t fPhiSec; //sector Phi width (deg)
125
126   ClassDef(AliTOFGeometry,1) // TOF Geometry base class
127 };
128
129 #endif