New TOF geometry description (V5) -G. Cara Romeo and A. De Caro
[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 #include "TObject.h"
16
17 class AliTOFGeometry: public TObject{
18
19  public:
20   AliTOFGeometry();
21   virtual ~AliTOFGeometry();
22
23   static  Int_t NStripA()     { return kNStripA;};
24   static  Int_t NStripB()     { return kNStripB;};
25   virtual Int_t NStripC()     { return kNStripC;};
26   virtual Int_t NMaxNstrip()  { return kMaxNstrip;};
27   static  Int_t NpadX()       { return kNpadX;};
28   static  Int_t NpadZ()       { return kNpadZ;};
29   static  Int_t NpadXStrip()  { return kNpadX*kNpadZ;};
30   static  Int_t NSectors()    { return kNSectors;};
31   static  Int_t NPlates()     { return kNPlates;};
32   virtual Int_t NPadXSector() { return (kNStripA + 2*kNStripB +
33                                         2*kNStripC)*kNpadX*kNpadZ;};
34
35   virtual Float_t RinTOF()    { return fgkxTOF;};
36   virtual Float_t Rmin()      { return fgkRmin;};
37   virtual Float_t Rmax()      { return fgkRmax;};
38
39   static  Float_t XPad()      { return fgkXPad;};
40   static  Float_t ZPad()      { return fgkZPad;};
41
42   static  Int_t TimeDiff()    { return fgkTimeDiff;};
43   static  Int_t MaxTOFTree()  { return kMaxTOFTree;};
44
45   static  Int_t NDDL()        { return kNDDL;};
46   static  Int_t NTRM()        { return kNTRM;}
47   static  Int_t NTdc()        { return kNTdc;};
48   static  Int_t NCh()         { return kNCh;};
49   static  Int_t NPadXTRM()    { return kNCh*kNTdc;};
50
51   virtual  Float_t ZlenA()       { return kZlenA;};
52   virtual  Float_t ZlenB()       { return kZlenB;};
53   virtual  Float_t ZlenC()       { return kZlenC;};
54   virtual  Float_t MaxhZtof()    { return kMaxhZtof;};
55   virtual  Float_t StripLength() { return kStripLength;};
56
57   static  Float_t SigmaForTail1() { return fgkSigmaForTail1;};
58   static  Float_t SigmaForTail2() { return fgkSigmaForTail2;};
59  
60   static  Double_t GetAlpha()  { return 2 * 3.14159265358979323846 / kNSectors; }; 
61  
62   static Float_t TdcBinWidth() {return fgkTdcBin;};
63
64
65   virtual void    Init();
66   virtual void    SetHoles(Bool_t holes) {fHoles = holes;};
67   virtual Bool_t  GetHoles() const {return fHoles;};
68
69   virtual Bool_t  IsInsideThePad(Int_t */*det*/, Float_t */*pos*/) {return kFALSE;};
70   virtual Float_t DistanceToPad(Int_t */*det*/, Float_t */*pos*/, Float_t *dist3d=0) {return dist3d[0];};
71   virtual void    GetPos(Int_t */*det*/,Float_t */*pos*/);
72   virtual void    GetDetID(Float_t */*pos*/,Int_t */*det*/);
73   virtual Int_t   GetPlate(Float_t */*pos*/) {return -1;};
74   virtual Int_t   GetStrip(Float_t */*pos*/) {return -1;};
75   virtual Int_t   GetSector(Float_t */*pos*/) {return -1;};
76   virtual Int_t   GetPadX(Float_t */*pos*/) {return -1;};
77   virtual Int_t   GetPadZ(Float_t */*pos*/) {return -1;};
78   virtual Float_t GetX(Int_t */*det*/) {return -500.;};
79   virtual Float_t GetY(Int_t */*det*/) {return -500.;};
80   virtual Float_t GetZ(Int_t */*det*/) {return -500.;};
81
82   Float_t GetAngles(Int_t iplate, Int_t istrip)  const {return fAngles[iplate][istrip];};
83   Float_t GetHeights(Int_t iplate, Int_t istrip) const {return fHeights[iplate][istrip];};
84   Float_t GetDistances(Int_t iplate, Int_t istrip) const {return fDistances[iplate][istrip];};
85
86   //private:
87   protected:
88
89   enum {
90     kNStripA    = 15, // number of strips in A type module 
91     kNStripB    = 19, // number of strips in B type module 
92     kNpadX      = 48, // Number of pads along X 
93     kNpadZ      = 2,  // Number of pads along Z
94     kNSectors   = 18, // Number of Sectors
95     kNPlates    = 5,  // Number of Plates
96     kMaxTOFTree = 5   // numer of geom. levels: 
97   };
98
99   // DAQ characteristics
100   // cfr. TOF-TDR pag. 105 for Glossary
101   // TARODA : TOF-ALICE Read Out and Data Acquisition system
102   enum {
103     kNDDL        =    4, // Number of DDL (Detector Data Link) per sector
104     kNTRM        =   10, // Number of TRM ( Readout Module) per DDL
105     kNTdc        =   30, // Number of Tdc (Time to Digital Converter) per TRM
106     kNCh         =    8  // Number of channels per Tdc
107   };
108
109   static const Int_t fgkTimeDiff;      // Min signal separation (ps)
110
111   mutable Int_t kNStripC;       // number of strips in C type module 
112   mutable Int_t kMaxNstrip;     // Max. number of strips
113
114   mutable Float_t kZlenA;       // length (cm) of the A module
115   mutable Float_t kZlenB;       // length (cm) of the B module
116   mutable Float_t kZlenC;       // length (cm) of the C module
117   mutable Float_t kMaxhZtof;    // Max half z-size of TOF (cm)
118   mutable Float_t kStripLength; // Strip Length (rho X phi direction) (cm)
119
120   mutable Float_t fgkRmin;     // Inner radius of the TOF (cm)
121   mutable Float_t fgkRmax;     // Outer radius of the TOF (cm)
122   mutable Float_t fgkxTOF;     // Inner TOF Radius used in Reconstruction (cm)
123
124   static const Float_t fgkXPad;     // Pad size in the x direction (cm)
125   static const Float_t fgkZPad;     // Pad size in the z direction (cm)
126
127   static const Float_t fgkSigmaForTail1;//Sig1 for simulation of TDC tails 
128   static const Float_t fgkSigmaForTail2;//Sig2 for simulation of TDC tails
129
130   Bool_t fHoles; //logical for geometry version (w/wo holes)
131
132   Float_t *fAngles[kNPlates]; //Strip Tilt Angles
133   Float_t *fHeights[kNPlates];//Strip heights
134   Float_t *fDistances[kNPlates];//Strip distances
135
136   Float_t fPhiSec; //sector Phi width (deg)
137
138   static const Float_t fgkTdcBin;   // time-window for the TDC bins [ps]
139
140   ClassDef(AliTOFGeometry,2) // TOF Geometry base class
141 };
142
143 #endif