New class AliESDEvent, backward compatibility with the old AliESD (Christian)
[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 AliMUONTrack;
18 class AliMUONTrackParam;
19 class AliMUONHitForRec;
20 class AliMUONTriggerTrack;
21 class AliMUONTrackHitPattern;
22 class AliMUONVClusterStore;
23 class AliMUONVTrackStore;
24 class AliMUONVTriggerTrackStore;
25 class AliMUONVTriggerStore;
26 class AliMUONGeometryTransformer;
27 class AliMUONDigitMaker;
28 class AliMUONTriggerCircuit;
29
30 class AliMUONVTrackReconstructor : public TObject {
31
32  public:
33   AliMUONVTrackReconstructor(); // default Constructor
34   virtual ~AliMUONVTrackReconstructor(); // Destructor
35
36   // Parameters for track reconstruction: public methods
37   // Get and Set, Set to defaults
38            /// Return minimum value (GeV/c) of momentum in bending plane
39   Double_t GetMinBendingMomentum() const {return fMinBendingMomentum;}
40
41   // Reconstructed tracks
42            /// Return number of reconstructed tracks
43   Int_t GetNRecTracks() const {return fNRecTracks;} // Number
44            /// Set number of reconstructed tracks
45   void SetNRecTracks(Int_t NRecTracks) {fNRecTracks = NRecTracks;}
46            /// Return array of reconstructed tracks
47   TClonesArray* GetRecTracksPtr() const {return fRecTracksPtr;} // Array
48  
49   // Functions
50   void EventReconstruct(const AliMUONVClusterStore& clusterStore,
51                         AliMUONVTrackStore& trackStore);
52   
53   void EventReconstructTrigger(const AliMUONTriggerCircuit& triggerCircuit,
54                                const AliMUONVTriggerStore& triggerStore,
55                                AliMUONVTriggerTrackStore& triggerTrackStore);
56   
57   void ValidateTracksWithTrigger(AliMUONVTrackStore& trackStore,
58                                  const AliMUONVTriggerTrackStore& triggerTrackStore,
59                                  const AliMUONVTriggerStore& triggerStore,
60                                  const AliMUONTrackHitPattern& trackHitPattern);
61   
62   
63  protected:
64
65   // Defaults parameters for reconstruction
66   static const Double_t fgkDefaultMinBendingMomentum; ///< default min. bending momentum for reconstruction
67   static const Double_t fgkDefaultMaxBendingMomentum; ///< default max. bending momentum for reconstruction
68   static const Double_t fgkDefaultMaxNormChi2MatchTrigger; ///< default maximum normalized chi2 of tracking/trigger track matching
69   
70   // Parameters for track reconstruction
71   static const Double_t fgkSigmaToCutForTracking; ///< cut in sigma to apply on cluster local chi2 and track global chi2 during tracking
72   static const Double_t fgkSigmaToCutForImprovement; ///< cut in sigma to apply on cluster local chi2 during track improvement
73   static const Bool_t   fgkMakeTrackCandidatesFast; ///< kTRUE to make track candidates assuming linear propagation between stations 4 and 5
74   static const Bool_t   fgkTrackAllTracks; ///< kTRUE to track all the possible candidates; kFALSE to track only the best ones
75   static const Double_t fgkMaxTrackingDistanceBending;    ///< Maximum distance to the track to search for compatible hitForRec(s) in bending direction
76   static const Double_t fgkMaxTrackingDistanceNonBending; ///< Maximum distance to the track to search for compatible hitForRec(s) in non bending direction
77   static const Bool_t   fgkRecoverTracks; ///< kTRUE to try to recover the tracks being lost during reconstruction
78   static const Bool_t   fgkImproveTracks; ///< kTRUE to try to improve the reconstructed tracks
79   
80   // Parameters for track reconstruction
81   Double_t fMinBendingMomentum; ///< minimum value (GeV/c) of momentum in bending plane
82   Double_t fMaxBendingMomentum; ///< maximum value (GeV/c) of momentum in bending plane
83   Double_t fMaxNormChi2MatchTrigger; ///< maximum normalized chi2 of tracking/trigger track matching
84   
85   TClonesArray* fHitsForRecPtr; ///< pointer to the array of hits for reconstruction
86   Int_t fNHitsForRec; ///< number of hits for reconstruction
87   Int_t* fNHitsForRecPerChamber; ///< number of HitsForRec
88   Int_t* fIndexOfFirstHitForRecPerChamber; ///< index (0...) of first HitForRec
89
90   // Reconstructed tracks
91   TClonesArray *fRecTracksPtr; ///< pointer to array of reconstructed tracks
92   Int_t fNRecTracks; ///< number of reconstructed tracks
93
94
95   // Functions
96   AliMUONVTrackReconstructor (const AliMUONVTrackReconstructor& rhs); ///< copy constructor
97   AliMUONVTrackReconstructor& operator=(const AliMUONVTrackReconstructor& rhs); ///< assignment operator
98   
99   /// Make track candidats from clusters in stations(1..) 4 and 5
100   virtual void MakeTrackCandidates() = 0;
101   /// Follow tracks in stations(1..) 3, 2 and 1
102   virtual void FollowTracks() = 0;
103   /// Improve the reconstructed tracks
104   virtual void ImproveTracks() = 0;
105   /// Finalize the tracking results
106   virtual void Finalize() = 0;
107   
108   TClonesArray* MakeSegmentsInStation(Int_t station);
109
110   void RemoveIdenticalTracks();
111   void RemoveDoubleTracks();
112
113   Double_t TryOneHitForRec(const AliMUONTrackParam &trackParam, AliMUONHitForRec* hitForRec,
114                            AliMUONTrackParam &trackParamAtHit, Bool_t updatePropagator = kFALSE);
115   Bool_t   TryOneHitForRecFast(const AliMUONTrackParam &trackParam, AliMUONHitForRec* hitForRec);
116   Double_t TryTwoHitForRecFast(const AliMUONTrackParam &trackParamAtHit1, AliMUONHitForRec* hitForRec2,
117                                AliMUONTrackParam &trackParamAtHit2);
118
119   Bool_t FollowLinearTrackInStation(AliMUONTrack &trackCandidate, Int_t nextStation);
120   
121
122  private:
123   
124   // Functions
125   void ResetTracks();
126   void ResetHitsForRec();
127   
128   void AddHitsForRecFromRawClusters(const AliMUONVClusterStore& clusterStore);
129   void SortHitsForRecWithIncreasingChamber();
130   
131   void MakeTracks();
132   
133   
134   ClassDef(AliMUONVTrackReconstructor, 0) // MUON track reconstructor in ALICE
135 };
136         
137 #endif