52c19022 |
1 | #ifndef ALITRDGTUPARAM_H |
2 | #define ALITRDGTUPARAM_H |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ |
5 | |
6 | /* $Id: AliTRDgtuParam.h 27496 2008-07-22 08:35:45Z cblume $ */ |
7 | |
8 | // -------------------------------------------------------- |
9 | // |
10 | // Singleton class to hold the parameters steering the GTU |
11 | // tracking |
12 | // |
13 | // -------------------------------------------------------- |
14 | |
15 | #include "TObject.h" |
16 | #include "TVectorD.h" |
17 | |
18 | class AliTRDgeometry; |
19 | |
20 | class AliTRDgtuParam : public TObject { |
21 | public: |
22 | virtual ~AliTRDgtuParam(); |
23 | |
24 | static AliTRDgtuParam *Instance(); // Singleton |
25 | static void Terminate(); |
26 | |
27 | static inline Int_t GetNLinks() { return fgkNLinks; } |
28 | static inline Int_t GetNLayers() { return fgkNLinks/2; } |
29 | static inline Int_t GetNZChannels() { return fgkNZChannels; } |
30 | static inline Int_t GetNRefLayers() { return fgkNRefLayers; } |
31 | |
32 | static inline Float_t GetChamberThickness() { return 3.0; } |
33 | |
34 | // ----- Bin widths (granularity) ----- |
35 | static inline Float_t GetBinWidthY() { return fgkBinWidthY; } |
36 | static inline Float_t GetBinWidthdY() { return fgkBinWidthdY; } |
37 | |
38 | // ----- Bit Widths (used for internal representation) ----- |
39 | static inline Int_t GetBitWidthY() { return fgkBitWidthY; } |
40 | static inline Int_t GetBitWidthdY() { return fgkBitWidthdY; } |
41 | static inline Int_t GetBitWidthYProj() { return fgkBitWidthYProj; } |
42 | static inline Int_t GetBitExcessY() { return fgkBitExcessY; } |
43 | static inline Int_t GetBitExcessAlpha() { return fgkBitExcessAlpha; } |
44 | static inline Int_t GetBitExcessYProj() { return fgkBitExcessYProj; } |
45 | |
46 | AliTRDgeometry* GetGeo() const { return fGeo; } |
47 | Float_t GetVertexSize() const { return fVertexSize; } |
48 | Int_t GetCiAlpha(Int_t layer) const; |
49 | Int_t GetCiYProj(Int_t layer) const; |
50 | Int_t GetYt(Int_t stack, Int_t layer, Int_t zrow) const; |
51 | Int_t GetDeltaY() const { return fgkDeltaY; } |
52 | Int_t GetDeltaAlpha() const { return fgkDeltaAlpha; } |
53 | Int_t GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const; |
54 | Int_t GetRefLayer(Int_t refLayerIdx) const; |
55 | // Bool_t GetFitParams(TVectorD &rhs, Int_t k); // const |
56 | Bool_t GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2); // const |
57 | Float_t GetRadius(Int_t a, Float_t b, Float_t x1, Float_t x2); // const |
58 | |
59 | Bool_t IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const; |
60 | |
61 | void SetVertexSize(Float_t vertexsize) { fVertexSize = vertexsize; } |
62 | |
63 | // z-channel map |
64 | Int_t zChannelGen(); // could have different modes (for beam-beam, cosmics, ...) |
65 | Bool_t DisplayZChannelMap(Int_t zchannel = -1, Int_t subch = 0) const; |
66 | |
67 | // variables for pt-reconstruction (not used at the moment) |
68 | Bool_t GenerateRecoCoefficients(Int_t trackletMask); |
69 | Float_t GetAki(Int_t k, Int_t i); |
70 | Float_t GetBki(Int_t k, Int_t i); |
71 | Float_t GetCki(Int_t k, Int_t i); |
72 | // Float_t GetD(Int_t k) const; |
73 | |
74 | protected: |
75 | static const Int_t fgkNZChannels = 3; // No. of z-channels |
76 | static const Int_t fgkNLinks = 12; // No. of links |
77 | static const Int_t fgkFixLayer = 2; // which layer is fixed for the generation of the z-channel map |
78 | static const Int_t fgkDeltaY = 39; // accepted deviation in y_proj, default: 9 |
79 | static const Int_t fgkDeltaAlpha = 31; // accepted deviation in alpha, default: 11 |
80 | static const Int_t fgkNRefLayers = 3; // no. of reference layers |
81 | |
82 | static const Float_t fgkBinWidthY; |
83 | static const Float_t fgkBinWidthdY; |
84 | |
85 | static const Int_t fgkBitWidthY; |
86 | static const Int_t fgkBitWidthdY; |
87 | static const Int_t fgkBitWidthYProj; |
88 | static const Int_t fgkBitExcessY; |
89 | static const Int_t fgkBitExcessAlpha; |
90 | static const Int_t fgkBitExcessYProj; |
91 | |
92 | Float_t fVertexSize; // assumed vertex size (z-dir.) for the z-channel map |
93 | |
94 | Int_t fZChannelMap[5][16][6][16]; // must be changed |
95 | Int_t fZSubChannel[5][fgkNZChannels][6][16]; // must be changed |
96 | |
97 | Int_t fCurrTrackletMask; |
98 | Float_t fAki[6]; |
99 | Float_t fBki[6]; |
100 | Float_t fCki[6]; |
101 | |
102 | Int_t *fRefLayers; //[fgkNRefLayers] reference layers for track finding |
103 | |
104 | AliTRDgeometry *fGeo; //! pointer to the TRD geometry |
105 | |
106 | static AliTRDgtuParam *fgInstance; // instance pointer |
107 | |
108 | private: |
109 | AliTRDgtuParam(); // instance only via Instance() |
110 | AliTRDgtuParam(const AliTRDgtuParam &rhs); // not implemented |
111 | AliTRDgtuParam& operator=(const AliTRDgtuParam &rhs); // not implemented |
112 | |
113 | ClassDef(AliTRDgtuParam, 1); |
114 | }; |
115 | |
116 | #endif |