Line data Source code
1 : #ifndef ALITRDTRACKONLINE_H
2 : #define ALITRDTRACKONLINE_H
3 :
4 : #include "TObject.h"
5 : #include "TList.h"
6 :
7 : #include "Math/IFunction.h"
8 : #include "Math/Minimizer.h"
9 :
10 : #include "AliTRDgeometry.h"
11 : #include "AliTRDpadPlane.h"
12 :
13 : class AliVTrdTracklet;
14 : class AliTRDtrackPosition;
15 : class AliTRDtrackOnline;
16 : class AliTRDgeometry;
17 :
18 0 : class AliTRDtrackParametrization : public TNamed
19 : {
20 : public:
21 : AliTRDtrackParametrization(const char* name = "", const char* title = "");
22 0 : ~AliTRDtrackParametrization() {}
23 :
24 : virtual void SetParams(ROOT::Math::Minimizer * minim) = 0;
25 : virtual void GetParams(ROOT::Math::Minimizer * minim) = 0;
26 : virtual void SetValues(const Double_t *par) = 0;
27 : virtual Int_t GetNDim() const = 0;
28 :
29 0 : virtual void UpdateTitle() {}
30 :
31 : virtual AliTRDtrackPosition ExtrapolateToLayer(Int_t layer) = 0;
32 : virtual AliTRDtrackPosition ExtrapolateToX(Float_t x) = 0;
33 :
34 0 : Bool_t IsFitGood() const { return fFitGood; }
35 :
36 : protected:
37 : Bool_t fFitGood;
38 :
39 48 : ClassDef(AliTRDtrackParametrization, 1);
40 : };
41 :
42 :
43 0 : class AliTRDtrackParametrizationStraightLine : public AliTRDtrackParametrization
44 : {
45 : public:
46 : AliTRDtrackParametrizationStraightLine();
47 : AliTRDtrackParametrizationStraightLine(Double_t offsetY, Double_t slopeY,
48 : Double_t offsetZ, Double_t slopeZ);
49 :
50 : virtual void SetParams(ROOT::Math::Minimizer * minim);
51 : virtual void GetParams(ROOT::Math::Minimizer * minim);
52 : virtual void SetValues(const Double_t *par);
53 0 : virtual Int_t GetNDim() const { return 4; }
54 :
55 : AliTRDtrackPosition ExtrapolateToLayer(Int_t layer);
56 : AliTRDtrackPosition ExtrapolateToX(Float_t x);
57 :
58 0 : Double_t GetOffsetY() const { return fOffsetY; }
59 0 : Double_t GetOffsetZ() const { return fOffsetZ; }
60 0 : Double_t GetSlopeY() const { return fSlopeY; }
61 0 : Double_t GetSlopeZ() const { return fSlopeZ; }
62 :
63 : void Print(Option_t *option = "") const;
64 :
65 : protected:
66 : Double_t fOffsetY;
67 : Double_t fSlopeY;
68 : Double_t fOffsetZ;
69 : Double_t fSlopeZ;
70 :
71 48 : ClassDef(AliTRDtrackParametrizationStraightLine, 1);
72 : };
73 :
74 :
75 0 : class AliTRDtrackParametrizationCurved : public AliTRDtrackParametrization
76 : {
77 : public:
78 : AliTRDtrackParametrizationCurved();
79 :
80 : virtual void SetParams(ROOT::Math::Minimizer * minim);
81 : virtual void GetParams(ROOT::Math::Minimizer * minim);
82 : virtual void SetValues(const Double_t *par);
83 0 : virtual Int_t GetNDim() const { return 4; }
84 :
85 : AliTRDtrackPosition ExtrapolateToLayer(Int_t layer);
86 : AliTRDtrackPosition ExtrapolateToX(Float_t x);
87 :
88 : Float_t GetY(Float_t x);
89 :
90 : void Print(Option_t *option = "") const;
91 :
92 : protected:
93 : // parameters
94 : Double_t fRadiusInv;
95 : Double_t fOffsetY;
96 : Double_t fOffsetZ;
97 : Double_t fSlopeZ;
98 :
99 : // fixed values
100 : Double_t fOffsetX;
101 :
102 48 : ClassDef(AliTRDtrackParametrizationCurved, 1);
103 : };
104 :
105 :
106 : class AliTRDtrackOnline : public TObject
107 : {
108 : public:
109 : AliTRDtrackOnline();
110 : ~AliTRDtrackOnline();
111 :
112 : void AddTracklet(AliVTrdTracklet *trkl);
113 :
114 : Bool_t Fit(ROOT::Math::Minimizer *minim);
115 :
116 0 : Int_t GetNTracklets() const { return fNTracklets; }
117 0 : AliVTrdTracklet* GetTracklet(Int_t i) const { return i < fNTracklets ? (AliVTrdTracklet*) fTracklets[i] : 0x0; }
118 :
119 : AliTRDtrackPosition ExtrapolateToLayer(Int_t layer);
120 :
121 0 : void AddParametrization(AliTRDtrackParametrization *param) { fTrackParametrizations.Add(param); }
122 0 : const TList& GetParametrizations() const { return fTrackParametrizations; }
123 :
124 : void Print(Option_t *option = "") const;
125 :
126 0 : void SetErrorY(Float_t error) { fErrorY = error; }
127 0 : Float_t GetErrorY() const { return fErrorY; }
128 :
129 0 : static Float_t GetX(AliVTrdTracklet *trkl) { return fgGeometry->GetTime0(trkl->GetDetector() % 6); }
130 0 : static Float_t GetZ(AliVTrdTracklet *trkl) { return
131 0 : fgGeometry->GetPadPlane(trkl->GetDetector())->GetRowPos(trkl->GetBinZ()) -
132 0 : .5 * fgGeometry->GetPadPlane(trkl->GetDetector())->GetRowSize(trkl->GetBinZ()); }
133 : static AliTRDgeometry *fgGeometry;
134 :
135 : protected:
136 : static const Int_t fgkMaxTracklets = 10;
137 :
138 : Int_t fNTracklets;
139 : TObjArray fTracklets;
140 :
141 : TList fTrackParametrizations;
142 :
143 : Float_t fErrorY;
144 :
145 48 : ClassDef(AliTRDtrackOnline, 1);
146 : };
147 :
148 :
149 0 : class AliTRDtrackPosition : public TObject
150 : {
151 : public:
152 : AliTRDtrackPosition(Float_t y, Float_t z, Float_t dy = 0.);
153 : ~AliTRDtrackPosition();
154 :
155 0 : Float_t GetY() const { return fY; }
156 0 : Float_t GetZ() const { return fZ; }
157 0 : Float_t GetdY() const { return fDy; }
158 :
159 : Float_t Distance(AliVTrdTracklet *trkl) const;
160 :
161 : protected:
162 : Float_t fY;
163 : Float_t fZ;
164 : Float_t fDy;
165 :
166 48 : ClassDef(AliTRDtrackPosition, 1);
167 : };
168 :
169 :
170 : class AliTRDtrackResiduals : public ROOT::Math::IBaseFunctionMultiDim
171 : {
172 : public:
173 : AliTRDtrackResiduals(const AliTRDtrackOnline *track, AliTRDtrackParametrization *param);
174 : AliTRDtrackResiduals(const AliTRDtrackResiduals &rhs);
175 : AliTRDtrackResiduals& operator=(const AliTRDtrackResiduals &rhs);
176 0 : ~AliTRDtrackResiduals() {}
177 :
178 : AliTRDtrackResiduals* Clone() const;
179 0 : UInt_t NDim() const { return fParam->GetNDim(); }
180 : Double_t DoEval(const Double_t *par) const;
181 :
182 : protected:
183 : const AliTRDtrackOnline *fTrack; // reference to track being fitted
184 : AliTRDtrackParametrization *fParam; // reference to the used parametrization
185 :
186 : static AliTRDgeometry *fgGeometry;
187 : };
188 :
189 : #endif
|