ROOT logo
#ifndef ALITPCTRACKLET_H
#define ALITPCTRACKLET_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

////
// A class that contains a tracklet (a track that lives only in a single TPC
// sector).
////


#include "TObject.h"

class TObjArray;
class AliTPCseed;
class AliExternalTrackParam;
class AliTPCclusterMI;

#include "TEllipse.h"

class AliTPCTracklet:public TObject {
public: 
  enum TrackType {kKalman,kRiemann,kLinear,kQuadratic};

  AliTPCTracklet();
  AliTPCTracklet(const AliTPCseed *s,Int_t sector,TrackType type=kKalman,
		 Bool_t storeClusters=kFALSE);
  AliTPCTracklet(const TObjArray &clusters,Int_t sector,TrackType type=kKalman,
		 Bool_t storeClusters=kFALSE);
  AliTPCTracklet(const AliTPCTracklet &t);
  AliTPCTracklet& operator=(const AliTPCTracklet &t);
  virtual ~AliTPCTracklet();

  static TObjArray CreateTracklets(const TObjArray &clusters,
				   TrackType type=kKalman,
				   Bool_t storeClusters=kFALSE,
				   Int_t minClusters=0,
				   Int_t maxTracklets=72);

  static TObjArray CreateTracklets(const AliTPCseed *s,
				   TrackType type=kKalman,
				   Bool_t storeClusters=kFALSE,
				   Int_t minClusters=0,
				   Int_t maxTracklets=72);

  static Bool_t PropagateToMeanX(const AliTPCTracklet &t1,
				 const AliTPCTracklet &t2,
				 AliExternalTrackParam *&t1m,
				 AliExternalTrackParam *&t2m);

  // Returns the tracklet parametrisation at its outer most cluster.
  AliExternalTrackParam* GetOuter() const {return fOuter;};
  // Returns the tracklet parametrisation at its inner most cluster.
  AliExternalTrackParam* GetInner() const {return fInner;};
  // Returns the tracklet parametrisation at X=0, i.e. the "primary vertex".
  AliExternalTrackParam* GetPrimary() const {return fPrimary;};
  // Returns the sector in which the tracklet lives.
  Int_t GetSector() const {return fSector;}
  // Returns the number of clusters assined to the tracklet.
  Int_t GetNClusters() const {return fNClusters;}
  // Returns the clusters of this tracklet. In case they weren't stored it
  // returns 0.
  AliTPCclusterMI* GetClusters() const {return fClusters;};
  // Test the functionality of the class. Generates some random tracks and
  // refits them into tracklets. 
  static void Test(const char *filename);
  static void RandomND(Int_t ndim,const Double_t *p,const Double_t *c,
		       Double_t *x);
  static TEllipse ErrorEllipse(Double_t x,Double_t y,
			       Double_t sx,Double_t sy,Double_t sxy);
  static inline void SetEdgeCut(Float_t edgeX, Float_t edgeY);
private:
  static Bool_t RejectCluster(AliTPCclusterMI* cl,AliExternalTrackParam * param=0);
  static const Double_t kB2C; //! ugly to have the track parametrised in a way, that constand is allways needed
  static double GetBz(Double_t *xyz);
  static Float_t        fgEdgeCutY; //cut on the edge effect in local Y 
  static Float_t        fgEdgeCutX; //cut on the edge effect in local X 
  void FitLinear(const AliTPCseed *track,Int_t sector,TrackType type);
  void FitKalman(const AliTPCseed *track,Int_t sector);
  void FitRiemann(const AliTPCseed *track,Int_t sector);
  void Quadratic2Helix(Double_t *a,Double_t *ca,
		       Double_t *b,Double_t *cb,
		       Double_t x0,
		       Double_t *p,Double_t *c);
  Bool_t Riemann2Helix(Double_t *a,Double_t *ca,
		       Double_t *b,Double_t *cb,
		       Double_t x0,
		       Double_t *p,Double_t *c);   
  Int_t fNClusters; // The number of clusters assined to the tracklet.
  Int_t fNStoredClusters; // The number of stored clusters.
  AliTPCclusterMI *fClusters; //[fNStoredClusters] The clusters of the track, if stored (otherwise 0)
  Int_t fSector; // The sector this tracklet lives in.
  AliExternalTrackParam *fOuter; // The tracklet parametrisation at its outer most cluster.
  AliExternalTrackParam *fInner; // The tracklet parametrisation at its inner most cluster.
  AliExternalTrackParam *fPrimary; // The tracklet parametrisation at X=0, i.e. the "primary vertex".

  ClassDef(AliTPCTracklet,1)
};


void AliTPCTracklet::SetEdgeCut(Float_t edgeX, Float_t edgeY){
  //
  //
  fgEdgeCutY=edgeY;
  fgEdgeCutX=edgeX;
}

#endif
 AliTPCTracklet.h:1
 AliTPCTracklet.h:2
 AliTPCTracklet.h:3
 AliTPCTracklet.h:4
 AliTPCTracklet.h:5
 AliTPCTracklet.h:6
 AliTPCTracklet.h:7
 AliTPCTracklet.h:8
 AliTPCTracklet.h:9
 AliTPCTracklet.h:10
 AliTPCTracklet.h:11
 AliTPCTracklet.h:12
 AliTPCTracklet.h:13
 AliTPCTracklet.h:14
 AliTPCTracklet.h:15
 AliTPCTracklet.h:16
 AliTPCTracklet.h:17
 AliTPCTracklet.h:18
 AliTPCTracklet.h:19
 AliTPCTracklet.h:20
 AliTPCTracklet.h:21
 AliTPCTracklet.h:22
 AliTPCTracklet.h:23
 AliTPCTracklet.h:24
 AliTPCTracklet.h:25
 AliTPCTracklet.h:26
 AliTPCTracklet.h:27
 AliTPCTracklet.h:28
 AliTPCTracklet.h:29
 AliTPCTracklet.h:30
 AliTPCTracklet.h:31
 AliTPCTracklet.h:32
 AliTPCTracklet.h:33
 AliTPCTracklet.h:34
 AliTPCTracklet.h:35
 AliTPCTracklet.h:36
 AliTPCTracklet.h:37
 AliTPCTracklet.h:38
 AliTPCTracklet.h:39
 AliTPCTracklet.h:40
 AliTPCTracklet.h:41
 AliTPCTracklet.h:42
 AliTPCTracklet.h:43
 AliTPCTracklet.h:44
 AliTPCTracklet.h:45
 AliTPCTracklet.h:46
 AliTPCTracklet.h:47
 AliTPCTracklet.h:48
 AliTPCTracklet.h:49
 AliTPCTracklet.h:50
 AliTPCTracklet.h:51
 AliTPCTracklet.h:52
 AliTPCTracklet.h:53
 AliTPCTracklet.h:54
 AliTPCTracklet.h:55
 AliTPCTracklet.h:56
 AliTPCTracklet.h:57
 AliTPCTracklet.h:58
 AliTPCTracklet.h:59
 AliTPCTracklet.h:60
 AliTPCTracklet.h:61
 AliTPCTracklet.h:62
 AliTPCTracklet.h:63
 AliTPCTracklet.h:64
 AliTPCTracklet.h:65
 AliTPCTracklet.h:66
 AliTPCTracklet.h:67
 AliTPCTracklet.h:68
 AliTPCTracklet.h:69
 AliTPCTracklet.h:70
 AliTPCTracklet.h:71
 AliTPCTracklet.h:72
 AliTPCTracklet.h:73
 AliTPCTracklet.h:74
 AliTPCTracklet.h:75
 AliTPCTracklet.h:76
 AliTPCTracklet.h:77
 AliTPCTracklet.h:78
 AliTPCTracklet.h:79
 AliTPCTracklet.h:80
 AliTPCTracklet.h:81
 AliTPCTracklet.h:82
 AliTPCTracklet.h:83
 AliTPCTracklet.h:84
 AliTPCTracklet.h:85
 AliTPCTracklet.h:86
 AliTPCTracklet.h:87
 AliTPCTracklet.h:88
 AliTPCTracklet.h:89
 AliTPCTracklet.h:90
 AliTPCTracklet.h:91
 AliTPCTracklet.h:92
 AliTPCTracklet.h:93
 AliTPCTracklet.h:94
 AliTPCTracklet.h:95
 AliTPCTracklet.h:96
 AliTPCTracklet.h:97
 AliTPCTracklet.h:98
 AliTPCTracklet.h:99
 AliTPCTracklet.h:100
 AliTPCTracklet.h:101
 AliTPCTracklet.h:102
 AliTPCTracklet.h:103
 AliTPCTracklet.h:104
 AliTPCTracklet.h:105
 AliTPCTracklet.h:106
 AliTPCTracklet.h:107
 AliTPCTracklet.h:108
 AliTPCTracklet.h:109