]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TOF/AliTOFGeometry.h
rlu_hijing has to be float to work correctly with gfortran (Fedora Core 7)
[u/mrichter/AliRoot.git] / TOF / AliTOFGeometry.h
1 #ifndef ALITOFGEOMETRY_H
2 #define ALITOFGEOMETRY_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8
9 ///////////////////////////////////////////////////////////////////////////////
10 //                                                                           //
11 //  TOF geometry class                                                       //
12 //                                                                           //
13 ///////////////////////////////////////////////////////////////////////////////
14
15 #include "TGeoMatrix.h"
16 #include "TObject.h"
17
18 class AliTOFGeometry: public TObject{
19
20  public:
21   AliTOFGeometry();
22   virtual ~AliTOFGeometry();
23
24   static  Int_t NStripA()     { return kNStripA;};
25   static  Int_t NStripB()     { return kNStripB;};
26   virtual Int_t NStripC() const { return fNStripC;};
27   static  Int_t NMaxNstrip()  { return kMaxNstrip;};
28   static  Int_t NpadX()       { return kNpadX;};
29   static  Int_t NpadZ()       { return kNpadZ;};
30   static  Int_t NpadXStrip()  { return kNpadX*kNpadZ;};
31   static  Int_t NSectors()    { return kNSectors;};
32   static  Int_t NPlates()     { return kNPlates;};
33   virtual Int_t NStripXSector() const { return (kNStripA + 2*kNStripB +
34                                                 2*fNStripC);};
35   virtual Int_t NPadXSector() const { return (kNStripA + 2*kNStripB +
36                                         2*fNStripC)*kNpadX*kNpadZ;};
37
38   virtual Float_t RinTOF() const   { return fxTOF;};
39   virtual Float_t Rmin() const     { return fRmin;};
40   virtual Float_t Rmax() const     { return fRmax;};
41
42   static  Float_t XPad()     { return fgkXPad;};
43   static  Float_t ZPad()     { return fgkZPad;};
44
45   static  Float_t StripLength() { return fgkStripLength;};
46
47   static  Int_t TimeDiff()    { return fgkTimeDiff;};
48   static  Int_t MaxTOFTree()  { return kMaxTOFTree;};
49
50   static  Int_t NDDL()        { return kNDDL;};
51   static  Int_t NTRM()        { return kNTRM;}
52   static  Int_t NTdc()        { return kNTdc;};
53   static  Int_t NChain()      { return kNChain;};
54   static  Int_t NCh()         { return kNCh;};
55   static  Int_t NPadXTRM()    { return kNCh*kNTdc*kNChain;};
56
57   virtual  Float_t ZlenA() const      { return fZlenA;};
58   virtual  Float_t ZlenB() const      { return fZlenB;};
59   virtual  Float_t ZlenC() const      { return fZlenC;};
60   virtual  Float_t MaxhZtof() const   { return fMaxhZtof;};
61
62   static  Float_t SigmaForTail1() { return fgkSigmaForTail1;};
63   static  Float_t SigmaForTail2() { return fgkSigmaForTail2;};
64  
65   static  Double_t GetAlpha()  { return 2 * 3.14159265358979323846 / kNSectors; }; 
66  
67   static Float_t TdcBinWidth() {return fgkTdcBin;};
68   static Float_t ToTBinWidth() {return fgkToTBin;};
69
70   virtual void    Init();
71   virtual void    ImportGeometry() {};
72   virtual void    SetHoles(Bool_t holes) {fHoles = holes;};
73   virtual Bool_t  GetHoles() const {return fHoles;};
74   virtual Bool_t  IsInsideThePadPar(Int_t */*det*/, Float_t */*pos*/) const {return kFALSE;};
75   virtual Float_t DistanceToPadPar(Int_t */*det*/, Float_t */*pos*/, Float_t *dist3d=0) const {return dist3d[0];};
76   virtual Bool_t  IsInsideThePad(TGeoHMatrix /*mat*/, Float_t */*pos*/, Float_t *dist3d=0) const {dist3d[0]=0;return kFALSE;};
77   virtual void    GetVolumePath(Int_t */*ind*/, Char_t */*path*/ ){};
78   virtual void    GetVolumePath(Int_t /*sector*/, Char_t */*path*/ ){};
79   virtual void    GetVolumePath(Int_t /*sector*/, Int_t /*plate*/, Int_t /*strip*/, Char_t */*path*/ ){};
80   virtual void    GetPos(Int_t */*det*/,Float_t */*pos*/){};
81   virtual void    GetPosPar(Int_t *det,Float_t *pos) const;
82   virtual void    GetDetID(Float_t *pos,Int_t *det) const;
83   virtual Int_t   GetPlate(Float_t */*pos*/) const {return -1;};
84   virtual Int_t   GetStrip(Float_t */*pos*/) const {return -1;};
85   virtual Int_t   GetSector(Float_t */*pos*/) const {return -1;};
86   virtual Int_t   GetPadX(Float_t */*pos*/) const {return -1;};
87   virtual Int_t   GetPadZ(Float_t */*pos*/) const {return -1;};
88   virtual Float_t GetX(Int_t */*det*/) const {return -500.;};
89   virtual Float_t GetY(Int_t */*det*/) const {return -500.;};
90   virtual Float_t GetZ(Int_t */*det*/) const {return -500.;};
91   virtual void    DetToStripRF(Int_t nPadX, Int_t nPadZ,
92                                Float_t &x,  Float_t &z) const;
93   virtual void    DetToSectorRF(Int_t /*vol*/[5], Double_t ** /*coord*/) { };
94
95   Float_t GetAngles(Int_t iplate, Int_t istrip)  const {return fAngles[iplate][istrip];};
96   Float_t GetHeights(Int_t iplate, Int_t istrip) const {return fHeights[iplate][istrip];};
97   Float_t GetDistances(Int_t iplate, Int_t istrip) const {return fDistances[iplate][istrip];};
98
99   //private:
100   protected:
101
102   enum {
103     kNStripA    = 15, // number of strips in A type module 
104     kNStripB    = 19, // number of strips in B type module 
105     kNpadX      = 48, // Number of pads along X 
106     kNpadZ      = 2,  // Number of pads along Z
107     kNSectors   = 18, // Number of Sectors
108     kNPlates    = 5,  // Number of Plates
109     kMaxTOFTree = 5,  // numer of geom. levels: 
110     kMaxNstrip  = 20  // Max. number of strips
111   };
112
113   // DAQ characteristics
114   // cfr. TOF-TDR pag. 105 for Glossary
115   // TARODA : TOF-ALICE Read Out and Data Acquisition system
116   enum {
117     kNDDL        =    4, // Number of DDL (Detector Data Link) per sector
118     kNTRM        =   12, // Number of TRM ( Readout Module) per DDL
119     kNTdc        =   15, // Number of Tdc (Time to Digital Converter) per TRM
120     kNChain      =    2, // Number of chains per TRM
121     kNCh         =    8  // Number of channels per Tdc
122   };
123
124   static const Int_t fgkTimeDiff;      // Min signal separation (ps)
125
126   mutable Int_t fNStripC;       // number of strips in C type module 
127
128   mutable Float_t fZlenA;       // length (cm) of the A module
129   mutable Float_t fZlenB;       // length (cm) of the B module
130   mutable Float_t fZlenC;       // length (cm) of the C module
131   mutable Float_t fMaxhZtof;    // Max half z-size of TOF (cm)
132
133   mutable Float_t fRmin;       // Inner radius of the TOF (cm)
134   mutable Float_t fRmax;       // Outer radius of the TOF (cm)
135   mutable Float_t fxTOF;       // Inner TOF Radius used in Reconstruction (cm)
136
137   static const Float_t fgkStripLength; // Strip Length (rho X phi direction) (cm)
138
139   static const Float_t fgkXPad;     // Pad size in the x direction (cm)
140   static const Float_t fgkZPad;     // Pad size in the z direction (cm)
141
142   static const Float_t fgkSigmaForTail1;//Sig1 for simulation of TDC tails 
143   static const Float_t fgkSigmaForTail2;//Sig2 for simulation of TDC tails
144
145   Bool_t fHoles; //logical for geometry version (w/wo holes)
146
147   Float_t fAngles[kNPlates][kMaxNstrip];   //Strip Tilt Angles
148   Float_t fHeights[kNPlates][kMaxNstrip];  //Strip heights
149   Float_t fDistances[kNPlates][kMaxNstrip];//Strip distances
150
151   Float_t fPhiSec; //sector Phi width (deg)
152
153   static const Float_t fgkTdcBin;   // time-of-flight bin width [ps]
154   static const Float_t fgkToTBin;   // time-over-threshold bin width [ps]
155
156   ClassDef(AliTOFGeometry,4) // TOF Geometry base class
157 };
158
159 #endif