AliMUONRecoParam:
[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
34 class AliMUONVTrackReconstructor : public TObject {
35
36  public:
37   AliMUONVTrackReconstructor(AliMUONVClusterServer& clusterServer); // default Constructor
38   virtual ~AliMUONVTrackReconstructor(); // Destructor
39
40   void EventReconstruct(AliMUONVClusterStore& clusterStore,
41                         AliMUONVTrackStore& trackStore);
42   
43   void EventReconstructTrigger(const AliMUONTriggerCircuit& triggerCircuit,
44                                const AliMUONVTriggerStore& triggerStore,
45                                AliMUONVTriggerTrackStore& triggerTrackStore);
46   
47   void ValidateTracksWithTrigger(AliMUONVTrackStore& trackStore,
48                                  const AliMUONVTriggerTrackStore& triggerTrackStore,
49                                  const AliMUONVTriggerStore& triggerStore,
50                                  const AliMUONTrackHitPattern& trackHitPattern);
51   
52   
53  protected:
54
55   TClonesArray *fRecTracksPtr; ///< pointer to array of reconstructed tracks
56   Int_t fNRecTracks; ///< number of reconstructed tracks
57
58   AliMUONVClusterServer& fClusterServer; ///< reference to our cluster server
59
60   // Functions
61   AliMUONVTrackReconstructor (const AliMUONVTrackReconstructor& rhs); ///< copy constructor
62   AliMUONVTrackReconstructor& operator=(const AliMUONVTrackReconstructor& rhs); ///< assignment operator
63   
64   /// Make track candidats from clusters in stations(1..) 4 and 5
65   virtual void MakeTrackCandidates(AliMUONVClusterStore& clusterStore) = 0;
66   /// Follow tracks in stations(1..) 3, 2 and 1
67   virtual void FollowTracks(AliMUONVClusterStore& clusterStore) = 0;
68   /// Complement the reconstructed tracks
69   virtual void ComplementTracks(const AliMUONVClusterStore& clusterStore) = 0;
70   void ImproveTracks();
71   /// Improve the given reconstructed track
72   virtual void ImproveTrack(AliMUONTrack &track) = 0;
73   void Finalize();
74   /// Finalize the given track
75   virtual void FinalizeTrack(AliMUONTrack &track) = 0;
76   
77   TClonesArray* MakeSegmentsInStation(const AliMUONVClusterStore& clusterStore, Int_t station);
78
79   void RemoveIdenticalTracks();
80   void RemoveDoubleTracks();
81
82   void AskForNewClustersInStation(const AliMUONTrackParam &trackParam,
83                                   AliMUONVClusterStore& clusterStore, Int_t station);
84   
85   Double_t TryOneCluster(const AliMUONTrackParam &trackParam, AliMUONVCluster* cluster,
86                          AliMUONTrackParam &trackParamAtCluster, Bool_t updatePropagator = kFALSE);
87   Bool_t   TryOneClusterFast(const AliMUONTrackParam &trackParam, AliMUONVCluster* cluster);
88   Double_t TryTwoClustersFast(const AliMUONTrackParam &trackParamAtCluster1, AliMUONVCluster* cluster2,
89                               AliMUONTrackParam &trackParamAtCluster2);
90
91   Bool_t FollowLinearTrackInStation(AliMUONTrack &trackCandidate, const AliMUONVClusterStore& clusterStore,
92                                     Int_t nextStation);
93   
94
95  private:
96   
97   // Functions
98   void ResetTracks();
99   
100   
101   ClassDef(AliMUONVTrackReconstructor, 0) // MUON track reconstructor in ALICE
102 };
103         
104 #endif