CA tracker - updates
[u/mrichter/AliRoot.git] / ITS / UPGRADE / AliITSUTrackerSA.h
1 #ifndef ALIITSUTRACKERSA_H
2 #define ALIITSUTRACKERSA_H
3
4 //-------------------------------------------------------------------------
5 //                   The stand-alone ITSU tracker
6 //     It reads AliITSUClusterPix clusters and writes the tracks to the ESD
7 //-------------------------------------------------------------------------
8
9 #include "AliTracker.h"
10 #include "AliITSUGeomTGeo.h"
11 #include <TClonesArray.h>
12 #include <vector>
13 #include "AliITSUTrackerSAaux.h"   // Structs and other stuff
14 #include "AliITSUMatLUT.h"
15 #include "AliITSUAux.h"
16 #include "AliExternalTrackParam.h"
17
18 class AliITSUReconstructor;
19 class AliITSURecoDet;
20 class AliITSURecoLayer;
21
22 class TTree;
23 class AliCluster;
24 class AliESDEvent;
25
26 using std::vector;
27
28 //-------------------------------------------------------------------------
29 class AliITSUTrackerSA : public AliTracker {
30 public:
31   AliITSUTrackerSA(AliITSUReconstructor* rec=0);
32   virtual ~AliITSUTrackerSA();
33
34   // These functions must be implemented
35   Int_t Clusters2Tracks(AliESDEvent *event);
36   Int_t PropagateBack(AliESDEvent *event);
37   Int_t RefitInward(AliESDEvent *event);
38   Int_t LoadClusters(TTree *ct);
39   void UnloadClusters();
40   
41   inline AliCluster *GetCluster(Int_t index) const {
42     const Int_t l=(index & 0xf0000000) >> 28;
43     const Int_t c=(index & 0x0fffffff);
44     return (AliCluster*)fClustersTC[l]->At(c) ;
45   }
46
47   // Possibly, other public functions
48   void     Init(AliITSUReconstructor* rec);
49   Double_t RefitTrack(AliExternalTrackParam* trc, Int_t clInfo[2*AliITSUAux::kMaxLayers], Double_t rDest, Int_t stopCond);
50   Bool_t   PropagateSeed(AliExternalTrackParam *seed, Double_t xToGo, Double_t mass, Double_t maxStep=1.0, Bool_t matCorr=kTRUE);
51   Double_t GetMaterialBudget(const double* pnt0, const double* pnt1, double& x2x0, double& rhol) const;
52   Bool_t   GoToEntranceToLayer(AliExternalTrackParam* seed, AliITSURecoLayer* lr, Int_t dir, Bool_t check=kFALSE);
53   Bool_t   GoToExitFromLayer(AliExternalTrackParam* seed, AliITSURecoLayer* lr, Int_t dir, Bool_t check=kTRUE);
54   Bool_t   TransportToLayerX(AliExternalTrackParam* seed, Int_t lFrom, Int_t lTo, Double_t xStop);
55   Bool_t   TransportToLayer(AliExternalTrackParam* seed, Int_t lFrom, Int_t lTo, Double_t rLim=-1);
56   
57   void SetChi2Cut(float cut) { fChi2Cut=cut; }
58   void SetRPhiCut(float cut) { fRPhiCut=cut; }
59   void SetPhiCut(float cut) { fPhiCut=cut; }
60   void SetZCut(float cut) { fZCut=cut; }
61
62
63   //
64 protected:
65   AliITSUTrackerSA(const AliITSUTrackerSA&);
66
67   void CellsCreation(const int &cutLevel);
68   void CellularAutomaton(AliESDEvent *ev);
69   //  void MakeTriplets();
70   void CandidatesTreeTraversal( vector<Road> &vec, const int &iD, const int &doubl);
71   Bool_t InitTrackParams(AliITSUTrackCooked &track, int points[]);
72   void GlobalFit();
73   void ChiSquareSelection();
74   void MergeTracks( vector<AliITSUTrackCooked> &vec, bool flags[] );
75   // Other protected functions
76   // (Sorting, labeling, calculations of "roads", etc)
77   static Double_t Curvature(Double_t x1,Double_t y1,Double_t x2,Double_t y2,Double_t x3,Double_t y3);
78
79
80
81 private:
82   AliITSUTrackerSA &operator=(const AliITSUTrackerSA &tr);
83   void SetLabel(AliITSUTrackCooked &t, Float_t wrong);
84
85   // Data members
86
87   // classes for interfacing the geometry, materials etc.
88   AliITSUReconstructor*           fReconstructor;  // ITS global reconstructor
89   AliITSURecoDet*                 fITS;            // interface to ITS, borrowed from reconstructor
90   AliITSUMatLUT*                  fMatLUT;         // material lookup table
91   Bool_t                          fUseMatLUT;      //! use material lookup table rather than TGeo
92   Double_t                        fCurrMass;       // assumption about particle mass
93
94
95   // Internal tracker arrays, layers, modules, etc
96   Layer fLayer[7];
97   TClonesArray *fClustersTC[7];
98   vector<Cell> fCells[5];
99   Float_t fChi2Cut;
100   Float_t fPhiCut;
101   Float_t fRPhiCut;
102   Float_t fZCut;
103
104   //
105   static const Double_t           fgkToler;        // tracking tolerance
106   static const Double_t           fgkChi2Cut; // chi2 cut during track merging
107   //
108   ClassDef(AliITSUTrackerSA,1)   //ITSU stand-alone tracker
109 };
110
111 #endif