]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONVTrackReconstructor.h
c814be8d62c3b4e7846cfde5f7a4c61617159619
[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 "AliMUONReconstructor.h"
15 #include "AliMUONRecoParam.h"
16
17 #include <TObject.h>
18
19 class AliMUONTrack;
20 class AliMUONTrackParam;
21 class AliMUONVCluster;
22 class AliMUONTriggerTrack;
23 class AliMUONTrackHitPattern;
24 class AliMUONVClusterServer;
25 class AliMUONVClusterStore;
26 class AliMUONVTrackStore;
27 class AliMUONVTriggerTrackStore;
28 class AliMUONVTriggerStore;
29 class AliMUONGeometryTransformer;
30 class AliMUONDigitMaker;
31 class AliMUONTriggerCircuit;
32 class TClonesArray;
33 class AliMUONRecoParam;
34
35 class AliMUONVTrackReconstructor : public TObject {
36
37  public:
38   AliMUONVTrackReconstructor(const AliMUONRecoParam* recoParam, AliMUONVClusterServer* clusterServer); // default Constructor
39   virtual ~AliMUONVTrackReconstructor(); // Destructor
40
41
42   void EventReconstruct(AliMUONVClusterStore& clusterStore,
43                         AliMUONVTrackStore& trackStore);
44   
45   void EventReconstructTrigger(const AliMUONTriggerCircuit& triggerCircuit,
46                                const AliMUONVTriggerStore& triggerStore,
47                                AliMUONVTriggerTrackStore& triggerTrackStore);
48   
49   void ValidateTracksWithTrigger(AliMUONVTrackStore& trackStore,
50                                  const AliMUONVTriggerTrackStore& triggerTrackStore,
51                                  const AliMUONVTriggerStore& triggerStore,
52                                  const AliMUONTrackHitPattern& trackHitPattern);
53
54   const AliMUONRecoParam* GetRecoParam() const { return fRecoParam; }
55   
56   /// re-fit the given track
57   virtual Bool_t RefitTrack(AliMUONTrack &track, Bool_t enableImprovement = kTRUE) = 0;
58   
59   
60   // methods previously got from the static muonrecoparam:
61   //
62   // MakeMoreTrackCandidates()
63   //    
64   // ComplementTracks()
65   //    
66   // ImproveTracks()
67   //
68   // GetMaxNonBendingSlope()
69   // GetMaxBendingSlope()
70   //
71   // GetMinBendingMomentum()
72   // GetMaxBendingMomentum()
73   //
74   // UseChamber(Int_t chamberId)
75   //
76   // GetMaxNonBendingDistanceToTrack()
77   // GetSigmaCutForTracking()
78   // GetMaxBendingDistanceToTrack()
79   // GetSigmaCutForTracking()
80   // TrackAllTracks()
81   // RequestStation(Int_t stationId)
82   
83  protected:
84
85   TClonesArray *fRecTracksPtr; ///< pointer to array of reconstructed tracks
86   Int_t fNRecTracks; ///< number of reconstructed tracks
87
88   AliMUONVClusterServer* fClusterServer; ///< reference to our cluster server
89
90   const AliMUONRecoParam* fRecoParam; ///< reference to reco parameters
91   
92   // Functions
93   AliMUONVTrackReconstructor (const AliMUONVTrackReconstructor& rhs); ///< copy constructor
94   AliMUONVTrackReconstructor& operator=(const AliMUONVTrackReconstructor& rhs); ///< assignment operator
95   
96   /// Make track candidates from clusters in stations(1..) 4 and 5
97   virtual void MakeTrackCandidates(AliMUONVClusterStore& clusterStore) = 0;
98   /// Make extra track candidates from clusters in stations(1..) 4 and 5
99   virtual void MakeMoreTrackCandidates(AliMUONVClusterStore& clusterStore) = 0;
100   /// Follow tracks in stations(1..) 3, 2 and 1
101   virtual void FollowTracks(AliMUONVClusterStore& clusterStore) = 0;
102   /// Complement the reconstructed tracks
103   virtual void ComplementTracks(const AliMUONVClusterStore& clusterStore) = 0;
104   void ImproveTracks();
105   /// Improve the given reconstructed track
106   virtual void ImproveTrack(AliMUONTrack &track) = 0;
107   void Finalize();
108   /// Finalize the given track
109   virtual void FinalizeTrack(AliMUONTrack &track) = 0;
110   
111   TClonesArray* MakeSegmentsBetweenChambers(const AliMUONVClusterStore& clusterStore, Int_t ch1, Int_t ch2);
112
113   void RemoveIdenticalTracks();
114   void RemoveDoubleTracks();
115
116   void AskForNewClustersInStation(const AliMUONTrackParam &trackParam,
117                                   AliMUONVClusterStore& clusterStore, Int_t station);
118   void AskForNewClustersInChamber(const AliMUONTrackParam &trackParam,
119                                   AliMUONVClusterStore& clusterStore, Int_t chamber);
120   
121   Double_t TryOneCluster(const AliMUONTrackParam &trackParam, AliMUONVCluster* cluster,
122                          AliMUONTrackParam &trackParamAtCluster, Bool_t updatePropagator = kFALSE);
123   Bool_t   TryOneClusterFast(const AliMUONTrackParam &trackParam, AliMUONVCluster* cluster);
124   Double_t TryTwoClustersFast(const AliMUONTrackParam &trackParamAtCluster1, AliMUONVCluster* cluster2,
125                               AliMUONTrackParam &trackParamAtCluster2);
126
127   Bool_t FollowLinearTrackInChamber(AliMUONTrack &trackCandidate, const AliMUONVClusterStore& clusterStore, Int_t nextChamber);
128   Bool_t FollowLinearTrackInStation(AliMUONTrack &trackCandidate, const AliMUONVClusterStore& clusterStore, Int_t nextStation);
129   
130
131  private:
132   
133   // Functions
134   void ResetTracks();
135   
136   
137   ClassDef(AliMUONVTrackReconstructor, 0) // MUON track reconstructor in ALICE
138 };
139         
140 #endif