]>
Commit | Line | Data |
---|---|---|
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 | // -------------------------------------------------------- | |
5f006bd7 | 9 | // |
10 | // Singleton class to hold the parameters steering the GTU | |
52c19022 | 11 | // tracking |
12 | // | |
13 | // -------------------------------------------------------- | |
14 | ||
15 | #include "TObject.h" | |
52c19022 | 16 | |
17 | class AliTRDgeometry; | |
18 | ||
19 | class AliTRDgtuParam : public TObject { | |
20 | public: | |
21 | virtual ~AliTRDgtuParam(); | |
22 | ||
23 | static AliTRDgtuParam *Instance(); // Singleton | |
5f006bd7 | 24 | static void Terminate(); |
52c19022 | 25 | |
36dc3337 | 26 | static Int_t GetNLinks() { return fgkNLinks; } |
27 | static Int_t GetNLayers() { return fgkNLinks/2; } | |
28 | static Int_t GetNZChannels() { return fgkNZChannels; } | |
29 | static Int_t GetNRefLayers() { return fgkNRefLayers; } | |
52c19022 | 30 | |
36dc3337 | 31 | static Float_t GetChamberThickness() { return 3.0; } |
52c19022 | 32 | |
33 | // ----- Bin widths (granularity) ----- | |
36dc3337 | 34 | static Float_t GetBinWidthY() { return fgkBinWidthY; } |
35 | static Float_t GetBinWidthdY() { return fgkBinWidthdY; } | |
52c19022 | 36 | |
37 | // ----- Bit Widths (used for internal representation) ----- | |
36dc3337 | 38 | static Int_t GetBitWidthY() { return fgkBitWidthY; } |
39 | static Int_t GetBitWidthdY() { return fgkBitWidthdY; } | |
40 | static Int_t GetBitWidthYProj() { return fgkBitWidthYProj; } | |
41 | static Int_t GetBitExcessY() { return fgkBitExcessY; } | |
42 | static Int_t GetBitExcessAlpha() { return fgkBitExcessAlpha; } | |
43 | static Int_t GetBitExcessYProj() { return fgkBitExcessYProj; } | |
52c19022 | 44 | |
ec5db61b | 45 | Float_t GetInnerPadLength(Int_t stack, Int_t layer) const { |
46 | return (stack == 2) ? 9. : fgkInnerPadLength[layer]; | |
47 | } | |
48 | Float_t GetOuterPadLength(Int_t stack, Int_t layer) const { | |
49 | return (stack == 2) ? 8. : fgkOuterPadLength[layer]; | |
50 | } | |
51 | Float_t GetZrow(Int_t stack, Int_t layer, Int_t padrow) const { | |
52 | Float_t zRowCorrected = fgkRow0Pos[layer][stack] - GetOuterPadLength(stack, layer) + GetInnerPadLength(stack, layer); | |
53 | return zRowCorrected - (0.5 + padrow) * GetInnerPadLength(stack, layer); | |
54 | } | |
55 | ||
52c19022 | 56 | AliTRDgeometry* GetGeo() const { return fGeo; } |
57 | Float_t GetVertexSize() const { return fVertexSize; } | |
58 | Int_t GetCiAlpha(Int_t layer) const; | |
59 | Int_t GetCiYProj(Int_t layer) const; | |
60 | Int_t GetYt(Int_t stack, Int_t layer, Int_t zrow) const; | |
2cf67435 | 61 | Int_t GetDeltaY() const { return fgDeltaY; } |
62 | Int_t GetDeltaAlpha() const { return fgDeltaAlpha; } | |
52c19022 | 63 | Int_t GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const; |
d2c8b010 | 64 | static Int_t GetRefLayer(Int_t refLayerIdx); |
52c19022 | 65 | // Bool_t GetFitParams(TVectorD &rhs, Int_t k); // const |
66 | Bool_t GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2); // const | |
d2c8b010 | 67 | static Int_t GetPt(Int_t layerMask, Int_t a, Float_t b, Float_t x1, Float_t x2, Float_t magField); |
52c19022 | 68 | |
69 | Bool_t IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const; | |
70 | ||
71 | void SetVertexSize(Float_t vertexsize) { fVertexSize = vertexsize; } | |
72 | ||
2cf67435 | 73 | static void SetDeltaY(Int_t dy) { fgDeltaY = dy; } |
74 | static void SetDeltaAlpha(Int_t da) { fgDeltaAlpha = da; } | |
75 | ||
44eafcf2 | 76 | static void SetUseGTUconst(Bool_t b) { fgUseGTUconst = b; } |
77 | static Bool_t GetUseGTUconst() { return fgUseGTUconst; } | |
78 | ||
ec5db61b | 79 | static void SetUseGTUmerge(Bool_t b) { fgUseGTUmerge = b; } |
80 | static Bool_t GetUseGTUmerge() { return fgUseGTUmerge; } | |
81 | ||
82 | static void SetLimitNoTracklets(Bool_t b) { fgLimitNoTracklets = b; } | |
83 | static Bool_t GetLimitNoTracklets() { return fgLimitNoTracklets; } | |
84 | ||
a3461d38 | 85 | static void SetMaxNoTracklets(Int_t max) { fgMaxNoTracklets = max; } |
86 | static Int_t GetMaxNoTracklets() { return fgMaxNoTracklets; } | |
87 | ||
52c19022 | 88 | // z-channel map |
36dc3337 | 89 | Int_t GenerateZChannelMap(); // could have different modes (for beam-beam, cosmics, ...) |
52c19022 | 90 | Bool_t DisplayZChannelMap(Int_t zchannel = -1, Int_t subch = 0) const; |
91 | ||
92 | // variables for pt-reconstruction (not used at the moment) | |
93 | Bool_t GenerateRecoCoefficients(Int_t trackletMask); | |
ec5db61b | 94 | Int_t GetAki(Int_t k, Int_t i); |
52c19022 | 95 | Float_t GetBki(Int_t k, Int_t i); |
96 | Float_t GetCki(Int_t k, Int_t i); | |
97 | // Float_t GetD(Int_t k) const; | |
98 | ||
b491d23b | 99 | // B-field |
100 | void SetMagField(Float_t field) { fMagField = field; } | |
101 | Float_t GetMagField() const { return fMagField; } | |
102 | ||
52c19022 | 103 | static const Int_t fgkNZChannels = 3; // No. of z-channels |
104 | static const Int_t fgkNLinks = 12; // No. of links | |
105 | static const Int_t fgkFixLayer = 2; // which layer is fixed for the generation of the z-channel map | |
52c19022 | 106 | static const Int_t fgkNRefLayers = 3; // no. of reference layers |
107 | ||
4cc89512 | 108 | static const Float_t fgkBinWidthY; // bin width for y-position |
109 | static const Float_t fgkBinWidthdY; // bin width for deflection length | |
110 | ||
111 | static const Int_t fgkBitWidthY; // bit width for y-position | |
112 | static const Int_t fgkBitWidthdY; // bit width for deflection length | |
113 | static const Int_t fgkBitWidthYProj; // bit width for projected y-position | |
114 | static const Int_t fgkBitExcessY; // excess bits for y-position | |
115 | static const Int_t fgkBitExcessAlpha; // excess bits for alpha | |
116 | static const Int_t fgkBitExcessYProj; // excess bits for projected y-position | |
5f006bd7 | 117 | |
ec5db61b | 118 | static const Int_t fgkPtInfinity; // infinite pt as obtained when a == 0 |
119 | ||
44eafcf2 | 120 | protected: |
121 | static Int_t fgDeltaY; // accepted deviation in y_proj, default: 9 | |
122 | static Int_t fgDeltaAlpha; // accepted deviation in alpha, default: 11 | |
123 | ||
d2c8b010 | 124 | static Int_t fgRefLayers[3]; // reference layers for track finding |
125 | ||
44eafcf2 | 126 | static Bool_t fgUseGTUconst; // use constants as in the GTU for the calculations |
127 | // instead of geometry derived quantities | |
ec5db61b | 128 | static Bool_t fgUseGTUmerge; // use merge algorithm exactly as in hardware |
129 | static Bool_t fgLimitNoTracklets; // limit the number of tracklets per layer | |
a3461d38 | 130 | static Int_t fgMaxNoTracklets; // max number of tracklets per layer if limited |
44eafcf2 | 131 | static const Bool_t fgZChannelMap[5][16][6][16]; // z-channel tables as in GTU |
ec5db61b | 132 | static const Float_t fgkRadius[6]; // layer radius as used in the GTU code |
133 | static const Float_t fgkThickness; // drift length as used in the GTU code | |
134 | static const Float_t fgkRow0Pos[6][5]; // geometry constant from GTU implementation | |
135 | static const Float_t fgkInnerPadLength[6]; // geometry constant from GTU implementation | |
136 | static const Float_t fgkOuterPadLength[6]; // geometry constant from GTU implementation | |
137 | static const Float_t fgkAcoeff[32][6]; // geometry constant from GTU implementation | |
138 | static const Int_t fgkMaskID[64]; // geometry constant from GTU implementation | |
44eafcf2 | 139 | |
52c19022 | 140 | Float_t fVertexSize; // assumed vertex size (z-dir.) for the z-channel map |
141 | ||
142 | Int_t fZChannelMap[5][16][6][16]; // must be changed | |
143 | Int_t fZSubChannel[5][fgkNZChannels][6][16]; // must be changed | |
144 | ||
4cc89512 | 145 | Int_t fCurrTrackletMask; // current tracklet mask for which the coefficients have been calculated |
146 | Float_t fAki[6]; // coefficients used for the fit, calculated for the current tracklet mask | |
147 | Float_t fBki[6]; // coefficients used for the fit, calculated for the current tracklet mask | |
148 | Float_t fCki[6]; // coefficients used for the fit, calculated for the current tracklet mask | |
52c19022 | 149 | |
b491d23b | 150 | Float_t fMagField; // magnetic field in T |
151 | ||
52c19022 | 152 | AliTRDgeometry *fGeo; //! pointer to the TRD geometry |
153 | ||
154 | static AliTRDgtuParam *fgInstance; // instance pointer | |
155 | ||
156 | private: | |
157 | AliTRDgtuParam(); // instance only via Instance() | |
158 | AliTRDgtuParam(const AliTRDgtuParam &rhs); // not implemented | |
159 | AliTRDgtuParam& operator=(const AliTRDgtuParam &rhs); // not implemented | |
160 | ||
161 | ClassDef(AliTRDgtuParam, 1); | |
162 | }; | |
163 | ||
164 | #endif |