ROOT logo
#ifndef ALITRDTRACKONLINE_H
#define ALITRDTRACKONLINE_H

#include "TObject.h"
#include "TList.h"

#include "Math/IFunction.h"
#include "Math/Minimizer.h"

#include "AliTRDgeometry.h"
#include "AliTRDpadPlane.h"

class AliVTrdTracklet;
class AliTRDtrackPosition;
class AliTRDtrackOnline;
class AliTRDgeometry;

class AliTRDtrackParametrization : public TNamed
{
 public:
  AliTRDtrackParametrization(const char* name = "", const char* title = "");
  ~AliTRDtrackParametrization() {}

  virtual void SetParams(ROOT::Math::Minimizer * minim) = 0;
  virtual void GetParams(ROOT::Math::Minimizer * minim) = 0;
  virtual void SetValues(const Double_t *par) = 0;
  virtual Int_t GetNDim() const = 0;

  virtual void UpdateTitle() {}

  virtual AliTRDtrackPosition ExtrapolateToLayer(Int_t layer) = 0;
  virtual AliTRDtrackPosition ExtrapolateToX(Float_t x) = 0;

  Bool_t IsFitGood() const { return fFitGood; }

 protected:
  Bool_t fFitGood;

  ClassDef(AliTRDtrackParametrization, 1);
};


class AliTRDtrackParametrizationStraightLine : public AliTRDtrackParametrization
{
 public:
  AliTRDtrackParametrizationStraightLine();
  AliTRDtrackParametrizationStraightLine(Double_t offsetY, Double_t slopeY,
					 Double_t offsetZ, Double_t slopeZ);

  virtual void SetParams(ROOT::Math::Minimizer * minim);
  virtual void GetParams(ROOT::Math::Minimizer * minim);
  virtual void SetValues(const Double_t *par);
  virtual Int_t GetNDim() const { return 4; }

  AliTRDtrackPosition ExtrapolateToLayer(Int_t layer);
  AliTRDtrackPosition ExtrapolateToX(Float_t x);

  Double_t GetOffsetY() const { return fOffsetY; }
  Double_t GetOffsetZ() const { return fOffsetZ; }
  Double_t GetSlopeY()  const { return fSlopeY; }
  Double_t GetSlopeZ()  const { return fSlopeZ; }

  void Print(Option_t *option = "") const;

 protected:
  Double_t fOffsetY;
  Double_t fSlopeY;
  Double_t fOffsetZ;
  Double_t fSlopeZ;

  ClassDef(AliTRDtrackParametrizationStraightLine, 1);
};


class AliTRDtrackParametrizationCurved : public AliTRDtrackParametrization
{
 public:
  AliTRDtrackParametrizationCurved();

  virtual void SetParams(ROOT::Math::Minimizer * minim);
  virtual void GetParams(ROOT::Math::Minimizer * minim);
  virtual void SetValues(const Double_t *par);
  virtual Int_t GetNDim() const { return 4; }

  AliTRDtrackPosition ExtrapolateToLayer(Int_t layer);
  AliTRDtrackPosition ExtrapolateToX(Float_t x);

  Float_t GetY(Float_t x);

  void Print(Option_t *option = "") const;

 protected:
  // parameters
  Double_t fRadiusInv;
  Double_t fOffsetY;
  Double_t fOffsetZ;
  Double_t fSlopeZ;

  // fixed values
  Double_t fOffsetX;

  ClassDef(AliTRDtrackParametrizationCurved, 1);
};


class AliTRDtrackOnline : public TObject
{
 public:
  AliTRDtrackOnline();
  ~AliTRDtrackOnline();

  void AddTracklet(AliVTrdTracklet *trkl);

  Bool_t Fit(ROOT::Math::Minimizer *minim);

  Int_t GetNTracklets() const { return fNTracklets; }
  AliVTrdTracklet* GetTracklet(Int_t i) const { return i < fNTracklets ? (AliVTrdTracklet*) fTracklets[i] : 0x0; }

  AliTRDtrackPosition ExtrapolateToLayer(Int_t layer);

  void AddParametrization(AliTRDtrackParametrization *param) { fTrackParametrizations.Add(param); }
  const TList& GetParametrizations() const { return fTrackParametrizations; }

  void Print(Option_t *option = "") const;

  void    SetErrorY(Float_t error) { fErrorY = error; }
  Float_t GetErrorY() const { return fErrorY; }

  static Float_t GetX(AliVTrdTracklet *trkl) { return fgGeometry->GetTime0(trkl->GetDetector() % 6); }
  static Float_t GetZ(AliVTrdTracklet *trkl) { return
      fgGeometry->GetPadPlane(trkl->GetDetector())->GetRowPos(trkl->GetBinZ()) -
      .5 * fgGeometry->GetPadPlane(trkl->GetDetector())->GetRowSize(trkl->GetBinZ()); }
  static AliTRDgeometry *fgGeometry;

 protected:
  static const Int_t fgkMaxTracklets = 10;

  Int_t fNTracklets;
  TObjArray fTracklets;

  TList fTrackParametrizations;

  Float_t fErrorY;

  ClassDef(AliTRDtrackOnline, 1);
};


class AliTRDtrackPosition : public TObject
{
 public:
  AliTRDtrackPosition(Float_t y, Float_t z, Float_t dy = 0.);
  ~AliTRDtrackPosition();

  Float_t GetY()  const { return fY; }
  Float_t GetZ()  const { return fZ; }
  Float_t GetdY() const { return fDy; }

  Float_t Distance(AliVTrdTracklet *trkl) const;

 protected:
  Float_t fY;
  Float_t fZ;
  Float_t fDy;

  ClassDef(AliTRDtrackPosition, 1);
};


class AliTRDtrackResiduals : public ROOT::Math::IBaseFunctionMultiDim
{
public:
  AliTRDtrackResiduals(const AliTRDtrackOnline *track, AliTRDtrackParametrization *param);
  AliTRDtrackResiduals(const AliTRDtrackResiduals &rhs);
  AliTRDtrackResiduals& operator=(const AliTRDtrackResiduals &rhs);
  ~AliTRDtrackResiduals() {}

  AliTRDtrackResiduals* Clone() const;
  UInt_t NDim() const { return fParam->GetNDim(); }
  Double_t DoEval(const Double_t *par) const;

protected:
  const AliTRDtrackOnline *fTrack; // reference to track being fitted
  AliTRDtrackParametrization *fParam; // reference to the used parametrization

  static AliTRDgeometry *fgGeometry;
};

#endif
 AliTRDtrackOnline.h:1
 AliTRDtrackOnline.h:2
 AliTRDtrackOnline.h:3
 AliTRDtrackOnline.h:4
 AliTRDtrackOnline.h:5
 AliTRDtrackOnline.h:6
 AliTRDtrackOnline.h:7
 AliTRDtrackOnline.h:8
 AliTRDtrackOnline.h:9
 AliTRDtrackOnline.h:10
 AliTRDtrackOnline.h:11
 AliTRDtrackOnline.h:12
 AliTRDtrackOnline.h:13
 AliTRDtrackOnline.h:14
 AliTRDtrackOnline.h:15
 AliTRDtrackOnline.h:16
 AliTRDtrackOnline.h:17
 AliTRDtrackOnline.h:18
 AliTRDtrackOnline.h:19
 AliTRDtrackOnline.h:20
 AliTRDtrackOnline.h:21
 AliTRDtrackOnline.h:22
 AliTRDtrackOnline.h:23
 AliTRDtrackOnline.h:24
 AliTRDtrackOnline.h:25
 AliTRDtrackOnline.h:26
 AliTRDtrackOnline.h:27
 AliTRDtrackOnline.h:28
 AliTRDtrackOnline.h:29
 AliTRDtrackOnline.h:30
 AliTRDtrackOnline.h:31
 AliTRDtrackOnline.h:32
 AliTRDtrackOnline.h:33
 AliTRDtrackOnline.h:34
 AliTRDtrackOnline.h:35
 AliTRDtrackOnline.h:36
 AliTRDtrackOnline.h:37
 AliTRDtrackOnline.h:38
 AliTRDtrackOnline.h:39
 AliTRDtrackOnline.h:40
 AliTRDtrackOnline.h:41
 AliTRDtrackOnline.h:42
 AliTRDtrackOnline.h:43
 AliTRDtrackOnline.h:44
 AliTRDtrackOnline.h:45
 AliTRDtrackOnline.h:46
 AliTRDtrackOnline.h:47
 AliTRDtrackOnline.h:48
 AliTRDtrackOnline.h:49
 AliTRDtrackOnline.h:50
 AliTRDtrackOnline.h:51
 AliTRDtrackOnline.h:52
 AliTRDtrackOnline.h:53
 AliTRDtrackOnline.h:54
 AliTRDtrackOnline.h:55
 AliTRDtrackOnline.h:56
 AliTRDtrackOnline.h:57
 AliTRDtrackOnline.h:58
 AliTRDtrackOnline.h:59
 AliTRDtrackOnline.h:60
 AliTRDtrackOnline.h:61
 AliTRDtrackOnline.h:62
 AliTRDtrackOnline.h:63
 AliTRDtrackOnline.h:64
 AliTRDtrackOnline.h:65
 AliTRDtrackOnline.h:66
 AliTRDtrackOnline.h:67
 AliTRDtrackOnline.h:68
 AliTRDtrackOnline.h:69
 AliTRDtrackOnline.h:70
 AliTRDtrackOnline.h:71
 AliTRDtrackOnline.h:72
 AliTRDtrackOnline.h:73
 AliTRDtrackOnline.h:74
 AliTRDtrackOnline.h:75
 AliTRDtrackOnline.h:76
 AliTRDtrackOnline.h:77
 AliTRDtrackOnline.h:78
 AliTRDtrackOnline.h:79
 AliTRDtrackOnline.h:80
 AliTRDtrackOnline.h:81
 AliTRDtrackOnline.h:82
 AliTRDtrackOnline.h:83
 AliTRDtrackOnline.h:84
 AliTRDtrackOnline.h:85
 AliTRDtrackOnline.h:86
 AliTRDtrackOnline.h:87
 AliTRDtrackOnline.h:88
 AliTRDtrackOnline.h:89
 AliTRDtrackOnline.h:90
 AliTRDtrackOnline.h:91
 AliTRDtrackOnline.h:92
 AliTRDtrackOnline.h:93
 AliTRDtrackOnline.h:94
 AliTRDtrackOnline.h:95
 AliTRDtrackOnline.h:96
 AliTRDtrackOnline.h:97
 AliTRDtrackOnline.h:98
 AliTRDtrackOnline.h:99
 AliTRDtrackOnline.h:100
 AliTRDtrackOnline.h:101
 AliTRDtrackOnline.h:102
 AliTRDtrackOnline.h:103
 AliTRDtrackOnline.h:104
 AliTRDtrackOnline.h:105
 AliTRDtrackOnline.h:106
 AliTRDtrackOnline.h:107
 AliTRDtrackOnline.h:108
 AliTRDtrackOnline.h:109
 AliTRDtrackOnline.h:110
 AliTRDtrackOnline.h:111
 AliTRDtrackOnline.h:112
 AliTRDtrackOnline.h:113
 AliTRDtrackOnline.h:114
 AliTRDtrackOnline.h:115
 AliTRDtrackOnline.h:116
 AliTRDtrackOnline.h:117
 AliTRDtrackOnline.h:118
 AliTRDtrackOnline.h:119
 AliTRDtrackOnline.h:120
 AliTRDtrackOnline.h:121
 AliTRDtrackOnline.h:122
 AliTRDtrackOnline.h:123
 AliTRDtrackOnline.h:124
 AliTRDtrackOnline.h:125
 AliTRDtrackOnline.h:126
 AliTRDtrackOnline.h:127
 AliTRDtrackOnline.h:128
 AliTRDtrackOnline.h:129
 AliTRDtrackOnline.h:130
 AliTRDtrackOnline.h:131
 AliTRDtrackOnline.h:132
 AliTRDtrackOnline.h:133
 AliTRDtrackOnline.h:134
 AliTRDtrackOnline.h:135
 AliTRDtrackOnline.h:136
 AliTRDtrackOnline.h:137
 AliTRDtrackOnline.h:138
 AliTRDtrackOnline.h:139
 AliTRDtrackOnline.h:140
 AliTRDtrackOnline.h:141
 AliTRDtrackOnline.h:142
 AliTRDtrackOnline.h:143
 AliTRDtrackOnline.h:144
 AliTRDtrackOnline.h:145
 AliTRDtrackOnline.h:146
 AliTRDtrackOnline.h:147
 AliTRDtrackOnline.h:148
 AliTRDtrackOnline.h:149
 AliTRDtrackOnline.h:150
 AliTRDtrackOnline.h:151
 AliTRDtrackOnline.h:152
 AliTRDtrackOnline.h:153
 AliTRDtrackOnline.h:154
 AliTRDtrackOnline.h:155
 AliTRDtrackOnline.h:156
 AliTRDtrackOnline.h:157
 AliTRDtrackOnline.h:158
 AliTRDtrackOnline.h:159
 AliTRDtrackOnline.h:160
 AliTRDtrackOnline.h:161
 AliTRDtrackOnline.h:162
 AliTRDtrackOnline.h:163
 AliTRDtrackOnline.h:164
 AliTRDtrackOnline.h:165
 AliTRDtrackOnline.h:166
 AliTRDtrackOnline.h:167
 AliTRDtrackOnline.h:168
 AliTRDtrackOnline.h:169
 AliTRDtrackOnline.h:170
 AliTRDtrackOnline.h:171
 AliTRDtrackOnline.h:172
 AliTRDtrackOnline.h:173
 AliTRDtrackOnline.h:174
 AliTRDtrackOnline.h:175
 AliTRDtrackOnline.h:176
 AliTRDtrackOnline.h:177
 AliTRDtrackOnline.h:178
 AliTRDtrackOnline.h:179
 AliTRDtrackOnline.h:180
 AliTRDtrackOnline.h:181
 AliTRDtrackOnline.h:182
 AliTRDtrackOnline.h:183
 AliTRDtrackOnline.h:184
 AliTRDtrackOnline.h:185
 AliTRDtrackOnline.h:186
 AliTRDtrackOnline.h:187
 AliTRDtrackOnline.h:188
 AliTRDtrackOnline.h:189