Line data Source code
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 AliMUONTrack;
17 : class AliMUONTrackParam;
18 : class AliMUONVCluster;
19 : class AliMUONTriggerTrack;
20 : class AliMUONTrackHitPattern;
21 : class AliMUONVClusterServer;
22 : class AliMUONVClusterStore;
23 : class AliMUONVTrackStore;
24 : class AliMUONVTriggerTrackStore;
25 : class AliMUONVTriggerStore;
26 : class AliMUONGeometryTransformer;
27 : class AliMUONDigitMaker;
28 : class AliMUONTriggerCircuit;
29 : class TClonesArray;
30 : class AliMUONRecoParam;
31 : class AliMUONLocalTrigger;
32 :
33 : class AliMUONVTrackReconstructor : public TObject {
34 :
35 : public:
36 : AliMUONVTrackReconstructor(const AliMUONRecoParam* recoParam, AliMUONVClusterServer* clusterServer,
37 : const AliMUONGeometryTransformer* transformer); // default Constructor
38 : virtual ~AliMUONVTrackReconstructor(); // Destructor
39 :
40 :
41 : void EventReconstruct(AliMUONVClusterStore& clusterStore,
42 : AliMUONVTrackStore& trackStore);
43 :
44 : void EventReconstructTrigger(const AliMUONTriggerCircuit& triggerCircuit,
45 : const AliMUONVTriggerStore& triggerStore,
46 : AliMUONVTriggerTrackStore& triggerTrackStore);
47 :
48 : void ValidateTracksWithTrigger(AliMUONVTrackStore& trackStore,
49 : const AliMUONVTriggerTrackStore& triggerTrackStore,
50 : const AliMUONVTriggerStore& triggerStore,
51 : const AliMUONTrackHitPattern& trackHitPattern);
52 :
53 : /// Return reco parameters
54 12520 : const AliMUONRecoParam* GetRecoParam() const { return fkRecoParam; }
55 :
56 : /// Re-fit the given track
57 : virtual Bool_t RefitTrack(AliMUONTrack &track, Bool_t enableImprovement = kTRUE) = 0;
58 :
59 : Bool_t TriggerToTrack(const AliMUONTriggerCircuit& circuit,
60 : const AliMUONLocalTrigger& locTrg,
61 : AliMUONTriggerTrack& triggerTrack,
62 : UChar_t globalTriggerPattern = 0);
63 :
64 :
65 :
66 : protected:
67 :
68 : TClonesArray *fRecTracksPtr; ///< pointer to array of reconstructed tracks
69 : Int_t fNRecTracks; ///< number of reconstructed tracks
70 :
71 : AliMUONVClusterServer* fClusterServer; ///< reference to our cluster server
72 :
73 : const AliMUONRecoParam* fkRecoParam; ///< reference to reco parameters
74 : const AliMUONGeometryTransformer* fkTransformer; //!<! geometry transformer (not owner)
75 :
76 : Double_t* fMaxMCSAngle2; ///< maximum angle dispersion due to MCS
77 :
78 : // Functions
79 : AliMUONVTrackReconstructor (const AliMUONVTrackReconstructor& rhs); ///< copy constructor
80 : AliMUONVTrackReconstructor& operator=(const AliMUONVTrackReconstructor& rhs); ///< assignment operator
81 :
82 : /// Make track candidates from clusters in stations(1..) 4 and 5
83 : virtual Bool_t MakeTrackCandidates(AliMUONVClusterStore& clusterStore) = 0;
84 : /// Make extra track candidates from clusters in stations(1..) 4 and 5
85 : virtual Bool_t MakeMoreTrackCandidates(AliMUONVClusterStore& clusterStore) = 0;
86 : /// Follow tracks in stations(1..) 3, 2 and 1
87 : virtual Bool_t FollowTracks(AliMUONVClusterStore& clusterStore) = 0;
88 : /// Complement the reconstructed tracks
89 : virtual Bool_t ComplementTracks(const AliMUONVClusterStore& clusterStore) = 0;
90 : void ImproveTracks();
91 : /// Improve the given reconstructed track
92 : virtual void ImproveTrack(AliMUONTrack &track) = 0;
93 : void Finalize();
94 : /// Finalize the given track
95 : virtual Bool_t FinalizeTrack(AliMUONTrack &track) = 0;
96 :
97 : void DiscardMonoCathodClusters();
98 : void ChangeMonoCathodClusterRes(AliMUONTrack &track);
99 :
100 : Bool_t IsAcceptable(AliMUONTrackParam &trackParam);
101 :
102 : TClonesArray* MakeSegmentsBetweenChambers(const AliMUONVClusterStore& clusterStore, Int_t ch1, Int_t ch2);
103 :
104 : void RemoveUsedSegments(TClonesArray& segments);
105 : void RemoveIdenticalTracks();
106 : void RemoveDoubleTracks();
107 : void RemoveBadTracks();
108 : void RemoveConnectedTracks(Int_t stMin, Int_t stMax, Bool_t all);
109 : void TagConnectedTracks(Int_t stMin, Int_t stMax, Bool_t all);
110 :
111 : void AskForNewClustersInStation(const AliMUONTrackParam &trackParam,
112 : AliMUONVClusterStore& clusterStore, Int_t station);
113 : void AskForNewClustersInChamber(const AliMUONTrackParam &trackParam,
114 : AliMUONVClusterStore& clusterStore, Int_t chamber);
115 :
116 : Double_t TryOneCluster(const AliMUONTrackParam &trackParam, AliMUONVCluster* cluster,
117 : AliMUONTrackParam &trackParamAtCluster, Bool_t updatePropagator = kFALSE);
118 : Bool_t TryOneClusterFast(const AliMUONTrackParam &trackParam, const AliMUONVCluster* cluster);
119 : Double_t TryTwoClustersFast(const AliMUONTrackParam &trackParamAtCluster1, AliMUONVCluster* cluster2,
120 : AliMUONTrackParam &trackParamAtCluster2);
121 :
122 : Bool_t FollowLinearTrackInChamber(AliMUONTrack &trackCandidate, const AliMUONVClusterStore& clusterStore, Int_t nextChamber);
123 : Bool_t FollowLinearTrackInStation(AliMUONTrack &trackCandidate, const AliMUONVClusterStore& clusterStore, Int_t nextStation);
124 :
125 : private:
126 :
127 : // Functions
128 : void ResetTracks();
129 :
130 :
131 18 : ClassDef(AliMUONVTrackReconstructor, 0) // MUON track reconstructor in ALICE
132 : };
133 :
134 : #endif
|