5c50996979d33ef63473750fb72e69c4f9fc65ba
[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 fgkNStripA;};
23   static  Int_t NStripB()     { return fgkNStripB;};
24   static  Int_t NStripC()     { return fgkNStripC;};
25   static  Int_t NpadX()       { return fgkNpadX;};
26   static  Int_t NpadZ()       { return fgkNpadZ;};
27   static  Int_t NSectors()    { return fgkNSectors;};
28   static  Int_t NPlates()     { return fgkNPlates;};
29   static  Int_t NPadXSector() { return (fgkNStripA + 2*fgkNStripB +
30                                        2*fgkNStripC)*fgkNpadX*fgkNpadZ;};
31   static  Int_t TimeDiff()    { return fgkTimeDiff;};
32   static  Int_t MaxTOFTree()  { return fgkMaxTOFTree;};
33
34
35   static  Float_t Rmin()     { return fgkRmin;};
36   static  Float_t Rmax()     { return fgkRmax;};
37   static  Float_t ZlenA()    { return fgkZlenA;};
38   static  Float_t ZlenB()    { return fgkZlenB;};
39   static  Float_t ZlenC()    { return fgkZlenC;};
40   static  Float_t XPad()     { return fgkXPad;};
41   static  Float_t ZPad()     { return fgkZPad;};
42   static  Float_t MaxhZtof() { return fgkMaxhZtof;};
43
44
45   static  Float_t SigmaForTail1() { return fgkSigmaForTail1;};
46   static  Float_t SigmaForTail2() { return fgkSigmaForTail2;};
47   static  Float_t SpeedOfLight()  { return fgkSpeedOfLight;};
48   static  Float_t PionMass()      { return fgkPionMass;};
49   static  Float_t KaonMass()      { return fgkKaonMass;};
50   static  Float_t ProtonMass()    { return fgkProtonMass;};
51   static  Float_t ElectronMass()  { return fgkElectronMass;};
52   static  Float_t MuonMass()      { return fgkMuonMass;};
53  
54  
55
56   virtual void    Init();
57   virtual void    GetPos(Int_t *det,Float_t *pos);
58   virtual void    GetDetID(Float_t *pos,Int_t *det);
59   virtual Int_t   GetPlate(Float_t *pos);
60   virtual Int_t   GetStrip(Float_t *pos);
61   virtual Int_t   GetSector(Float_t *pos);
62   virtual Int_t   GetPadX(Float_t *pos);
63   virtual Int_t   GetPadZ(Float_t *pos);
64   virtual Float_t GetX(Int_t *det);
65   virtual Float_t GetY(Int_t *det);
66   virtual Float_t GetZ(Int_t *det);
67   virtual Float_t GetMinPlateTheta(Int_t iPlate);
68   virtual Float_t GetMaxPlateTheta(Int_t iPlate);
69   virtual Float_t GetMinStripTheta(Int_t iPlate, Int_t iStrip);
70   virtual Float_t GetMaxStripTheta(Int_t iPlate, Int_t iStrip);
71   virtual Float_t GetStripTheta(Int_t iPlate, Int_t iStrip);
72   virtual Float_t GetAngles(Int_t iplate, Int_t istrip)  const {return fAngles[iplate][istrip];};
73   virtual Float_t GetHeights(Int_t iplate, Int_t istrip) const {return fHeights[iplate][istrip];};
74
75   private:
76
77   static const Int_t fgkNStripA    = 15; // number of strips in A type module 
78   static const Int_t fgkNStripB    = 19; // number of strips in B type module 
79   static const Int_t fgkNStripC    = 20; // number of strips in C type module 
80   static const Int_t fgkNpadX      = 48; // Number of pads along X 
81   static const Int_t fgkNpadZ      = 2;  // Number of pads along Z
82   static const Int_t fgkNSectors   = 18; // Number of Sectors
83   static const Int_t fgkNPlates    = 5;  // Number of Plates
84   static const Int_t fgkMaxNstrip  = 20; // Max. number of strips
85   static const Int_t fgkMaxTOFTree  = 5;    // numer of geom. levels: 
86   static const Int_t fgkTimeDiff   = 25000;// Min signal separation (ps)
87
88   static const Float_t fgkRmin     = 370.; // Inner radius of the TOF (cm)
89   static const Float_t fgkRmax     = 399;  // Outer radius of the TOF (cm)
90   static const Float_t fgkZlenA    = 106.0;// length (cm) of the A module
91   static const Float_t fgkZlenB    = 141.0;// length (cm) of the B module
92   static const Float_t fgkZlenC    = 177.5;// length (cm) of the C module
93   static const Float_t fgkXPad     = 2.5;  // Pad size in the x direction (cm)
94   static const Float_t fgkZPad     = 3.5;  // Pad size in the z direction (cm)
95   static const Float_t fgkMaxhZtof = 371.5;// Max half z-size of TOF (cm)
96
97
98   static const Float_t fgkSigmaForTail1= 2.;//Sig1 for simulation of TDC tails 
99   static const Float_t fgkSigmaForTail2= 0.5;//Sig2 for simulation of TDC tails
100   static const Float_t fgkSpeedOfLight = 0.299792458;// c (10^9 m/s)
101   static const Float_t fgkPionMass     = 0.13957;// pion mass (Gev/c^2)
102   static const Float_t fgkKaonMass     = 0.49368;// kaon mass (Gev/c^2)
103   static const Float_t fgkProtonMass   = 0.93827;// proton mass (Gev/c^2)
104   static const Float_t fgkElectronMass = 0.00051;// electron mass (Gev/c^2)
105   static const Float_t fgkMuonMass     = 0.10566;// muon mass (Gev/c^2)
106
107
108   static const Float_t fgkDprecMin = 0.0000075;//num.prec.tolerance on Thmin 
109   static const Float_t fgkDprecMax = 0.0000100;//num.prec.tolerance on Thma 
110   static const Float_t fgkDprecCen = 0.0000005;//num.prec.tolerance on <Theta> 
111  
112   Float_t fAngles[fgkNPlates][fgkMaxNstrip]; //Strip Tilt Angles
113   Float_t fHeights[fgkNPlates][fgkMaxNstrip];//Strip heights
114   Float_t fPhiSec; //sector Phi width (deg)
115
116   ClassDef(AliTOFGeometry,0) // TOF Geometry base class
117 };
118
119 #endif