]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONVTrackReconstructor.h
4e65100081e6735273be208ff5eed2e065c5cc6e
[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   fgkComplementTracks; ///< kTRUE to try to complete the reconstructed tracks by adding missing clusters
79   static const Bool_t   fgkImproveTracks; ///< kTRUE to try to improve the reconstructed tracks by removing bad clusters
80   
81   // Parameters for track reconstruction
82   Double_t fMinBendingMomentum; ///< minimum value (GeV/c) of momentum in bending plane
83   Double_t fMaxBendingMomentum; ///< maximum value (GeV/c) of momentum in bending plane
84   Double_t fMaxNormChi2MatchTrigger; ///< maximum normalized chi2 of tracking/trigger track matching
85   
86   TClonesArray* fHitsForRecPtr; ///< pointer to the array of hits for reconstruction
87   Int_t fNHitsForRec; ///< number of hits for reconstruction
88   Int_t* fNHitsForRecPerChamber; ///< number of HitsForRec
89   Int_t* fIndexOfFirstHitForRecPerChamber; ///< index (0...) of first HitForRec
90
91   // Reconstructed tracks
92   TClonesArray *fRecTracksPtr; ///< pointer to array of reconstructed tracks
93   Int_t fNRecTracks; ///< number of reconstructed tracks
94
95
96   // Functions
97   AliMUONVTrackReconstructor (const AliMUONVTrackReconstructor& rhs); ///< copy constructor
98   AliMUONVTrackReconstructor& operator=(const AliMUONVTrackReconstructor& rhs); ///< assignment operator
99   
100   /// Make track candidats from clusters in stations(1..) 4 and 5
101   virtual void MakeTrackCandidates() = 0;
102   /// Follow tracks in stations(1..) 3, 2 and 1
103   virtual void FollowTracks() = 0;
104   /// Complement the reconstructed tracks
105   virtual void ComplementTracks() = 0;
106   /// Improve the reconstructed tracks
107   virtual void ImproveTracks() = 0;
108   /// Finalize the tracking results
109   virtual void Finalize() = 0;
110   
111   TClonesArray* MakeSegmentsInStation(Int_t station);
112
113   void RemoveIdenticalTracks();
114   void RemoveDoubleTracks();
115
116   Double_t TryOneHitForRec(const AliMUONTrackParam &trackParam, AliMUONHitForRec* hitForRec,
117                            AliMUONTrackParam &trackParamAtHit, Bool_t updatePropagator = kFALSE);
118   Bool_t   TryOneHitForRecFast(const AliMUONTrackParam &trackParam, AliMUONHitForRec* hitForRec);
119   Double_t TryTwoHitForRecFast(const AliMUONTrackParam &trackParamAtHit1, AliMUONHitForRec* hitForRec2,
120                                AliMUONTrackParam &trackParamAtHit2);
121
122   Bool_t FollowLinearTrackInStation(AliMUONTrack &trackCandidate, Int_t nextStation);
123   
124
125  private:
126   
127   // Functions
128   void ResetTracks();
129   void ResetHitsForRec();
130   
131   void AddHitsForRecFromRawClusters(const AliMUONVClusterStore& clusterStore);
132   void SortHitsForRecWithIncreasingChamber();
133   
134   void MakeTracks();
135   
136   
137   ClassDef(AliMUONVTrackReconstructor, 0) // MUON track reconstructor in ALICE
138 };
139         
140 #endif