]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDtrackOnline.h
Merge remote-tracking branch 'origin/master' into TPCdev
[u/mrichter/AliRoot.git] / TRD / AliTRDtrackOnline.h
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 class AliTRDtrackParametrization : public TNamed
19 {
20  public:
21   AliTRDtrackParametrization(const char* name = "", const char* title = "");
22   ~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   virtual void UpdateTitle() {}
30
31   virtual AliTRDtrackPosition ExtrapolateToLayer(Int_t layer) = 0;
32   virtual AliTRDtrackPosition ExtrapolateToX(Float_t x) = 0;
33
34   Bool_t IsFitGood() const { return fFitGood; }
35
36  protected:
37   Bool_t fFitGood;
38
39   ClassDef(AliTRDtrackParametrization, 1);
40 };
41
42
43 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   virtual Int_t GetNDim() const { return 4; }
54
55   AliTRDtrackPosition ExtrapolateToLayer(Int_t layer);
56   AliTRDtrackPosition ExtrapolateToX(Float_t x);
57
58   Double_t GetOffsetY() const { return fOffsetY; }
59   Double_t GetOffsetZ() const { return fOffsetZ; }
60   Double_t GetSlopeY()  const { return fSlopeY; }
61   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   ClassDef(AliTRDtrackParametrizationStraightLine, 1);
72 };
73
74
75 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   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   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   Int_t GetNTracklets() const { return fNTracklets; }
117   AliVTrdTracklet* GetTracklet(Int_t i) const { return i < fNTracklets ? (AliVTrdTracklet*) fTracklets[i] : 0x0; }
118
119   AliTRDtrackPosition ExtrapolateToLayer(Int_t layer);
120
121   void AddParametrization(AliTRDtrackParametrization *param) { fTrackParametrizations.Add(param); }
122   const TList& GetParametrizations() const { return fTrackParametrizations; }
123
124   void Print(Option_t *option = "") const;
125
126   static Float_t GetX(AliVTrdTracklet *trkl) { return fgGeometry->GetTime0(trkl->GetDetector() % 6); }
127   static Float_t GetZ(AliVTrdTracklet *trkl) { return fgGeometry->GetPadPlane((trkl->GetDetector() % 6), (trkl->GetDetector()/6) % 5)->GetRowPos(trkl->GetBinZ()) -
128       fgGeometry->GetPadPlane((trkl->GetDetector() % 6), (trkl->GetDetector()/6) % 5)->GetRowSize(trkl->GetBinZ()); }
129   static AliTRDgeometry *fgGeometry;
130
131  protected:
132   static const Int_t fgkMaxTracklets = 10;
133
134   Int_t fNTracklets;
135   TObjArray fTracklets;
136
137   TList fTrackParametrizations;
138
139   ClassDef(AliTRDtrackOnline, 1);
140 };
141
142
143 class AliTRDtrackPosition : public TObject
144 {
145  public:
146   AliTRDtrackPosition(Float_t y, Float_t z, Float_t dy = 0.);
147   ~AliTRDtrackPosition();
148
149   Float_t GetY()  const { return fY; }
150   Float_t GetZ()  const { return fZ; }
151   Float_t GetdY() const { return fDy; }
152
153   Float_t Distance(AliVTrdTracklet *trkl) const;
154
155  protected:
156   Float_t fY;
157   Float_t fZ;
158   Float_t fDy;
159
160   ClassDef(AliTRDtrackPosition, 1);
161 };
162
163
164 class AliTRDtrackResiduals : public ROOT::Math::IBaseFunctionMultiDim
165 {
166 public:
167   AliTRDtrackResiduals(const AliTRDtrackOnline *track, AliTRDtrackParametrization *param);
168   AliTRDtrackResiduals(const AliTRDtrackResiduals &rhs);
169   AliTRDtrackResiduals& operator=(const AliTRDtrackResiduals &rhs);
170   ~AliTRDtrackResiduals() {}
171
172   AliTRDtrackResiduals* Clone() const;
173   UInt_t NDim() const { return fParam->GetNDim(); }
174   Double_t DoEval(const Double_t *par) const;
175
176 protected:
177   const AliTRDtrackOnline *fTrack; // reference to track being fitted
178   AliTRDtrackParametrization *fParam; // reference to the used parametrization
179
180   static AliTRDgeometry *fgGeometry;
181 };
182
183 #endif