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 */
9 /// \class AliMUONVTrackReconstructor
10 /// \brief Virtual class for the MUON track reconstruction
12 // Author: Philippe Pillot
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;
29 class AliMUONVTrackReconstructor : public TObject {
32 AliMUONVTrackReconstructor(); // default Constructor
33 virtual ~AliMUONVTrackReconstructor(); // Destructor
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;}
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
49 void EventReconstruct(const AliMUONVClusterStore& clusterStore,
50 AliMUONVTrackStore& trackStore);
52 void EventReconstructTrigger(const AliMUONTriggerCircuit& triggerCircuit,
53 const AliMUONVTriggerStore& triggerStore,
54 AliMUONVTriggerTrackStore& triggerTrackStore);
56 void ValidateTracksWithTrigger(AliMUONVTrackStore& trackStore,
57 const AliMUONVTriggerTrackStore& triggerTrackStore,
58 const AliMUONVTriggerStore& triggerStore,
59 const AliMUONTrackHitPattern& trackHitPattern);
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
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
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
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
88 // Reconstructed tracks
89 TClonesArray *fRecTracksPtr; ///< pointer to array of reconstructed tracks
90 Int_t fNRecTracks; ///< number of reconstructed tracks
94 AliMUONVTrackReconstructor (const AliMUONVTrackReconstructor& rhs); ///< copy constructor
95 AliMUONVTrackReconstructor& operator=(const AliMUONVTrackReconstructor& rhs); ///< assignment operator
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;
106 TClonesArray* MakeSegmentsInStation(Int_t station);
108 void RemoveIdenticalTracks();
109 void RemoveDoubleTracks();
111 Double_t TryOneHitForRec(const AliMUONTrackParam &trackParam, AliMUONHitForRec* hitForRec,
112 AliMUONTrackParam &trackParamAtHit, Bool_t updatePropagator = kFALSE);
119 void ResetHitsForRec();
121 void AddHitsForRecFromRawClusters(const AliMUONVClusterStore& clusterStore);
122 void SortHitsForRecWithIncreasingChamber();
127 ClassDef(AliMUONVTrackReconstructor, 0) // MUON track reconstructor in ALICE