1 #ifndef ALIITSUTRACKERCooked_H
2 #define ALIITSUTRACKERCooked_H
4 //-------------------------------------------------------------------------
5 // The stand-alone ITSU tracker
6 // The pattern recongintion based on the "cooked covariance" approach
7 //-------------------------------------------------------------------------
9 #include "AliITSUTrackerGlo.h"
17 class AliITSUClusterPix;
18 class AliITSUTrackCooked;
19 class AliITSUReconstructor;
21 //-------------------------------------------------------------------------
22 class AliITSUTrackerCooked : public AliITSUTrackerGlo {
25 kNLayers=7, kMaxClusterPerLayer=15000, kMaxSelected=kMaxClusterPerLayer/10
27 AliITSUTrackerCooked(AliITSUReconstructor *rec);
28 virtual ~AliITSUTrackerCooked();
30 // These functions must be implemented
31 Int_t Clusters2Tracks(AliESDEvent *event);
32 Int_t PropagateBack(AliESDEvent *event);
33 Int_t RefitInward(AliESDEvent *event);
34 Int_t LoadClusters(TTree *ct);
35 void UnloadClusters();
37 RefitAt(Double_t x, AliITSUTrackCooked *seed, const AliITSUTrackCooked *t);
39 AliCluster *GetCluster(Int_t index) const;
41 void SetSAonly(Bool_t sa=kTRUE) {fSAonly=sa;}
42 Bool_t GetSAonly() const {return fSAonly;}
44 // internal helper classes
48 AliITSUTrackerCooked(const AliITSUTrackerCooked&);
49 // Other protected functions
51 Bool_t AddCookedSeed(const Float_t r1[3], Int_t l1, Int_t i1,
52 const Float_t r2[3], Int_t l2, Int_t i2,
53 const AliCluster *c3,Int_t l3, Int_t i3);
54 void FollowProlongation();
55 Int_t TakeNextProlongation();
56 void ResetTrackToFollow(const AliITSUTrackCooked &t);
57 void ResetBestTrack();
60 AliITSUTrackerCooked &operator=(const AliITSUTrackerCooked &tr);
63 // Internal tracker arrays, layers, modules, etc
64 static AliITSUlayer fgLayers[kNLayers];// Layers
66 TObjArray *fSeeds; // Track seeds
68 Int_t fI; // index of the current layer
69 AliITSUTrackCooked *fBestTrack; // "best" track
70 AliITSUTrackCooked *fTrackToFollow; // followed track
72 Bool_t fSAonly; // kTRUE if the standalone tracking only
74 ClassDef(AliITSUTrackerCooked,2) //ITSU stand-alone tracker
80 class AliITSUTrackerCooked::AliITSUlayer {
85 void InsertClusters(TClonesArray *clusters, Bool_t seedingLayer, Bool_t sa);
86 void SetR(Double_t r) {fR=r;}
87 void DeleteClusters();
88 void ResetSelectedClusters() {fI=0;}
89 void SelectClusters(Float_t phi, Float_t dy, Float_t z, Float_t dz);
90 const AliCluster *GetNextCluster(Int_t &i);
91 void ResetTrack(const AliITSUTrackCooked &t);
92 Int_t FindClusterIndex(Double_t z) const;
93 Float_t GetR() const {return fR;}
94 AliCluster *GetCluster(Int_t i) const { return fClusters[i]; }
95 Float_t GetXRef(Int_t i) const { return fXRef[i]; }
96 Float_t GetAlphaRef(Int_t i) const { return fAlphaRef[i]; }
97 Float_t GetClusterPhi(Int_t i) const { return fPhi[i]; }
98 Int_t GetNumberOfClusters() const {return fN;}
99 const AliITSUTrackCooked *GetTrack() const {return fTrack;}
102 AliITSUlayer(const AliITSUlayer&);
103 AliITSUlayer &operator=(const AliITSUlayer &tr);
104 Int_t InsertCluster(AliCluster *c);
106 Float_t fR; // mean radius of this layer
108 AliCluster *fClusters[kMaxClusterPerLayer]; // All clusters
109 Float_t fXRef[kMaxClusterPerLayer]; // x of the reference plane
110 Float_t fAlphaRef[kMaxClusterPerLayer]; // alpha of the reference plane
111 Float_t fPhi[kMaxClusterPerLayer]; // cluster phi
112 Int_t fN; // Total number of clusters
114 Int_t fIndex[kMaxSelected];
115 Int_t fNsel; // Number of selected clusters
116 Int_t fI; // Running index for the selected clusters
118 AliITSUTrackCooked *fTrack; // track estimation at this layer