Fit mathematics improved, obsollete GBTracker cleaned up
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCAGBTracker.h
1 //-*- Mode: C++ -*-
2 // ************************************************************************
3 // This file is property of and copyright by the ALICE HLT Project        * 
4 // ALICE Experiment at CERN, All rights reserved.                         *
5 // See cxx source for full Copyright notice                               *
6 //                                                                        *
7 //*************************************************************************
8
9 #ifndef ALIHLTTPCCAGBTRACKER_H
10 #define ALIHLTTPCCAGBTRACKER_H
11
12 #include "AliHLTTPCCADef.h"
13 #include "AliHLTTPCCATrackParam.h"
14
15 #if !defined(HLTCA_GPUCODE)
16 #include <iostream>
17 #endif
18
19 class AliHLTTPCCATracker;
20 class AliHLTTPCCAGBTrack;
21 class AliHLTTPCCAGBHit;
22 class TParticle;
23 class TProfile;
24 class AliHLTTPCCATrackParam;
25 class  AliHLTTPCCAMerger;
26
27 /**
28  * @class AliHLTTPCCAGBTracker
29  * 
30  * Global Cellular Automaton-based HLT tracker for TPC detector
31  * The class reconstructs tracks in the whole TPC
32  * It calls the AliHLTTPCCATracker slice tracker and constructs 
33  * the global TPC tracks by merging the slice tracks 
34  *
35  * The tracker is designed stand-alone. 
36  * It will be integrated to the HLT framework via AliHLTTPCCAGBTrackerComponent interface,
37  * and to off-line framework via TPC/AliTPCtrackerCA class
38  * The class is under construction.
39  *
40  */
41 class AliHLTTPCCAGBTracker
42 {
43
44 public:
45
46   AliHLTTPCCAGBTracker();
47   AliHLTTPCCAGBTracker(const AliHLTTPCCAGBTracker&);
48   const AliHLTTPCCAGBTracker &operator=(const AliHLTTPCCAGBTracker&) const;
49
50   ~AliHLTTPCCAGBTracker();
51
52   void StartEvent();
53   void SetNSlices( Int_t N );
54   void SetNHits( Int_t nHits );
55
56   void ReadHit( Float_t x, Float_t y, Float_t z, 
57                 Float_t ErrY, Float_t ErrZ, Float_t amp,
58                 Int_t ID, Int_t iSlice, Int_t iRow );
59
60   void FindTracks();
61
62   void Merge();
63
64   AliHLTTPCCATracker *Slices() const { return fSlices; }
65   AliHLTTPCCAGBHit *Hits() const { return fHits; }
66   Int_t Ext2IntHitID( Int_t i ) const { return fExt2IntHitID[i]; }
67
68   Int_t NHits() const { return fNHits; }
69   Int_t NSlices() const { return fNSlices; }
70   Double_t Time() const { return fTime; }
71   Double_t StatTime( Int_t iTimer ) const { return fStatTime[iTimer]; }
72   Int_t StatNEvents() const { return fStatNEvents; }
73   Int_t NTracks() const { return fNTracks; }
74   AliHLTTPCCAGBTrack *Tracks() const { return fTracks; }
75   Int_t *TrackHits() const { return fTrackHits; }
76
77   Bool_t FitTrack( AliHLTTPCCATrackParam &T, AliHLTTPCCATrackParam t0, 
78                    Float_t &Alpha, Int_t hits[], Int_t &NTrackHits, 
79                    Bool_t dir );
80
81   void WriteSettings( std::ostream &out ) const;
82   void ReadSettings( std::istream &in );
83   void WriteEvent( std::ostream &out ) const;
84   void ReadEvent( std::istream &in );
85   void WriteTracks( std::ostream &out ) const;
86   void ReadTracks( std::istream &in );
87
88   Double_t SliceTrackerTime() const { return fSliceTrackerTime; }
89   void SetSliceTrackerTime( Double_t v ){ fSliceTrackerTime = v; }
90   const Int_t *FirstSliceHit() const { return fFirstSliceHit; }
91
92
93 protected:
94
95   AliHLTTPCCATracker *fSlices; //* array of slice trackers
96   Int_t fNSlices;              //* N slices
97   AliHLTTPCCAGBHit *fHits;     //* hit array
98   Int_t *fExt2IntHitID;        //* array of internal hit indices
99   Int_t fNHits;                //* N hits in event
100   Int_t *fTrackHits;           //* track->hits reference array
101   AliHLTTPCCAGBTrack *fTracks; //* array of tracks
102   Int_t fNTracks;              //* N tracks
103   AliHLTTPCCAMerger *fMerger;  //* global merger
104
105   Double_t fTime; //* total time
106   Double_t fStatTime[20]; //* timers 
107   Int_t fStatNEvents;    //* n events proceed
108   Int_t fFirstSliceHit[100]; // hit array
109
110   Double_t fSliceTrackerTime; // reco time of the slice tracker;
111
112 };
113
114 #endif