- Reshape the architecture of the Kalman tracking to make it more modular
[u/mrichter/AliRoot.git] / MUON / AliMUONVTrackReconstructor.h
1 #ifndef ALIMUONVTRACKRECONSTRUCTOR_H
2 #define ALIMUONVTRACKRECONSTRUCTOR_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 /// \ingroup rec
9 /// \class AliMUONVTrackReconstructor
10 /// \brief Virtual class for the MUON track reconstruction
11 ///
12 //  Author: Philippe Pillot
13
14 #include <TObject.h>
15
16 class TClonesArray;
17 class AliMUONTrackParam;
18 class AliMUONHitForRec;
19 class AliMUONTriggerTrack;
20 class AliMUONTrackHitPattern;
21 class AliMUONVClusterStore;
22 class AliMUONVTrackStore;
23 class AliMUONVTriggerTrackStore;
24 class AliMUONVTriggerStore;
25 class AliMUONGeometryTransformer;
26 class AliMUONDigitMaker;
27 class AliMUONTriggerCircuit;
28
29 class AliMUONVTrackReconstructor : public TObject {
30
31  public:
32   AliMUONVTrackReconstructor(); // default Constructor
33   virtual ~AliMUONVTrackReconstructor(); // Destructor
34
35   // Parameters for track reconstruction: public methods
36   // Get and Set, Set to defaults
37            /// Return minimum value (GeV/c) of momentum in bending plane
38   Double_t GetMinBendingMomentum() const {return fMinBendingMomentum;}
39
40   // Reconstructed tracks
41            /// Return number of reconstructed tracks
42   Int_t GetNRecTracks() const {return fNRecTracks;} // Number
43            /// Set number of reconstructed tracks
44   void SetNRecTracks(Int_t NRecTracks) {fNRecTracks = NRecTracks;}
45            /// Return array of reconstructed tracks
46   TClonesArray* GetRecTracksPtr() const {return fRecTracksPtr;} // Array
47  
48   // Functions
49   void EventReconstruct(const AliMUONVClusterStore& clusterStore,
50                         AliMUONVTrackStore& trackStore);
51   
52   void EventReconstructTrigger(const AliMUONTriggerCircuit& triggerCircuit,
53                                const AliMUONVTriggerStore& triggerStore,
54                                AliMUONVTriggerTrackStore& triggerTrackStore);
55   
56   void ValidateTracksWithTrigger(AliMUONVTrackStore& trackStore,
57                                  const AliMUONVTriggerTrackStore& triggerTrackStore,
58                                  const AliMUONVTriggerStore& triggerStore,
59                                  const AliMUONTrackHitPattern& trackHitPattern);
60   
61   
62  protected:
63
64   // Defaults parameters for reconstruction
65   static const Double_t fgkDefaultMinBendingMomentum; ///< default min. bending momentum for reconstruction
66   static const Double_t fgkDefaultMaxBendingMomentum; ///< default max. bending momentum for reconstruction
67   static const Double_t fgkDefaultMaxNormChi2MatchTrigger; ///< default maximum normalized chi2 of tracking/trigger track matching
68   
69   // Parameters for track reconstruction
70   static const Double_t fgkSigmaToCutForTracking; ///< cut in sigma to apply on cluster local chi2 and track global chi2 during tracking
71   static const Double_t fgkSigmaToCutForImprovement; ///< cut in sigma to apply on cluster local chi2 during track improvement
72   static const Bool_t   fgkTrackAllTracks; ///< kTRUE to track all the possible candidates; kFALSE to track only the best ones
73   static const Double_t fgkMaxTrackingDistanceBending;    ///< Maximum distance to the track to search for compatible hitForRec(s) in bending direction
74   static const Double_t fgkMaxTrackingDistanceNonBending; ///< Maximum distance to the track to search for compatible hitForRec(s) in non bending direction
75   static const Bool_t   fgkRecoverTracks; ///< kTRUE to try to recover the tracks being lost during reconstruction
76   static const Bool_t   fgkImproveTracks; ///< kTRUE to try to improve the reconstructed tracks
77   
78   // Parameters for track reconstruction
79   Double_t fMinBendingMomentum; ///< minimum value (GeV/c) of momentum in bending plane
80   Double_t fMaxBendingMomentum; ///< maximum value (GeV/c) of momentum in bending plane
81   Double_t fMaxNormChi2MatchTrigger; ///< maximum normalized chi2 of tracking/trigger track matching
82   
83   TClonesArray* fHitsForRecPtr; ///< pointer to the array of hits for reconstruction
84   Int_t fNHitsForRec; ///< number of hits for reconstruction
85   Int_t* fNHitsForRecPerChamber; ///< number of HitsForRec
86   Int_t* fIndexOfFirstHitForRecPerChamber; ///< index (0...) of first HitForRec
87
88   // Reconstructed tracks
89   TClonesArray *fRecTracksPtr; ///< pointer to array of reconstructed tracks
90   Int_t fNRecTracks; ///< number of reconstructed tracks
91
92
93   // Functions
94   AliMUONVTrackReconstructor (const AliMUONVTrackReconstructor& rhs); ///< copy constructor
95   AliMUONVTrackReconstructor& operator=(const AliMUONVTrackReconstructor& rhs); ///< assignment operator
96   
97   /// Make track candidats from clusters in stations(1..) 4 and 5
98   virtual void MakeTrackCandidates() = 0;
99   /// Follow tracks in stations(1..) 3, 2 and 1
100   virtual void FollowTracks() = 0;
101   /// Improve the reconstructed tracks
102   virtual void ImproveTracks() = 0;
103   /// Finalize the tracking results
104   virtual void Finalize() = 0;
105   
106   TClonesArray* MakeSegmentsInStation(Int_t station);
107
108   void RemoveIdenticalTracks();
109   void RemoveDoubleTracks();
110
111   Double_t TryOneHitForRec(const AliMUONTrackParam &trackParam, AliMUONHitForRec* hitForRec,
112                            AliMUONTrackParam &trackParamAtHit, Bool_t updatePropagator = kFALSE);
113   
114
115  private:
116   
117   // Functions
118   void ResetTracks();
119   void ResetHitsForRec();
120   
121   void AddHitsForRecFromRawClusters(const AliMUONVClusterStore& clusterStore);
122   void SortHitsForRecWithIncreasingChamber();
123   
124   void MakeTracks();
125   
126   
127   ClassDef(AliMUONVTrackReconstructor, 0) // MUON track reconstructor in ALICE
128 };
129         
130 #endif