/* $Id$ */
-#include <TObject.h>
+/// \ingroup rec
+/// \class AliMUONTrackReconstructor
+/// \brief Standard class for the MUON track reconstruction
-class AliMUONTrackReconstructor : public TObject {
+#include "AliMUONVTrackReconstructor.h"
+
+class AliMUONVCluster;
+class AliMUONVClusterStore;
+class AliMUONTrackParam;
+class AliMUONTrack;
+class AliMUONGeometryTransformer;
+
+class AliMUONTrackReconstructor : public AliMUONVTrackReconstructor
+{
+
public:
- //
- // Track Reconstruction
- AliMUONTrackReconstructor();
- virtual ~AliMUONTrackReconstructor(){;}
- void Init(Double_t &, Double_t &, Double_t &);
- void Reconst(Int_t &,Int_t &,Int_t,Int_t &,Int_t&,Int_t&, Option_t *option,Text_t *filename);
- void Reconst2(Int_t &,Int_t &,Int_t &);
- void FinishEvent();
- void Close();
- void SetCutPxz(Double_t p) {fSPxzCut=p;}
- void SetSigmaCut(Double_t p) {fSSigmaCut=p;}
- void SetXPrec(Double_t p) {fSXPrec=p;}
- void SetYPrec(Double_t p) {fSYPrec=p;}
- Double_t GetCutPxz() {return fSPxzCut;}
- Double_t GetSigmaCut() {return fSSigmaCut;}
- Double_t GetXPrec() {return fSXPrec;}
- Double_t GetYPrec() {return fSYPrec;}
+
+ AliMUONTrackReconstructor(const AliMUONRecoParam* recoParam, AliMUONVClusterServer* clusterServer,
+ const AliMUONGeometryTransformer* transformer); // default Constructor
+ virtual ~AliMUONTrackReconstructor(); // Destructor
+
+ virtual Bool_t RefitTrack(AliMUONTrack &track, Bool_t enableImprovement = kTRUE);
+
+
+ protected:
+
+ // Functions
+ virtual Bool_t MakeTrackCandidates(AliMUONVClusterStore& clusterStore);
+ virtual Bool_t MakeMoreTrackCandidates(AliMUONVClusterStore& clusterStore);
+ virtual Bool_t FollowTracks(AliMUONVClusterStore& clusterStore);
+ virtual Bool_t ComplementTracks(const AliMUONVClusterStore& clusterStore);
+ virtual void ImproveTrack(AliMUONTrack &track);
+ virtual Bool_t FinalizeTrack(AliMUONTrack &track);
+
+
private:
-// Parameters for reconstruction program
- Double_t fSPxzCut; // Pxz cut (GeV/c) to begin the track finding
- Double_t fSSigmaCut; // Number of sig. delimiting the searching areas
- Double_t fSXPrec; // Chamber precision in X (cm)
- Double_t fSYPrec; // Chamber precision in Y (cm)
- Text_t *fFileName; //! ?????????
- ClassDef(AliMUONTrackReconstructor,1) // Interface to muon tracking code
- };
-
+
+ /// Not implemented copy constructor
+ AliMUONTrackReconstructor (const AliMUONTrackReconstructor& rhs);
+ /// Not implemented copy assignment operator
+ AliMUONTrackReconstructor& operator=(const AliMUONTrackReconstructor& rhs);
+
+ Bool_t FollowTrackInChamber(AliMUONTrack &trackCandidate, AliMUONVClusterStore& clusterStore, Int_t nextChamber);
+ Bool_t FollowTrackInStation(AliMUONTrack &trackCandidate, AliMUONVClusterStore& clusterStore, Int_t nextStation);
+
+ Double_t TryTwoClusters(const AliMUONTrackParam &trackParamAtCluster, AliMUONVCluster* cluster2, AliMUONTrackParam &trackParamAtCluster2);
+
+ void UpdateTrack(AliMUONTrack &track, AliMUONTrackParam &trackParamAtCluster);
+ void UpdateTrack(AliMUONTrack &track, AliMUONTrackParam &trackParamAtCluster1, AliMUONTrackParam &trackParamAtCluster2);
+
+ Bool_t RecoverTrack(AliMUONTrack &track, AliMUONVClusterStore& clusterStore, Int_t nextStation);
+
+ void SetVertexErrXY2ForFit(AliMUONTrack &trackCandidate);
+
+ void Fit(AliMUONTrack &track, Bool_t includeMCS, Bool_t fitWithVertex, Bool_t calcCov);
+
+ ClassDef(AliMUONTrackReconstructor, 0) // MUON track reconstructor in ALICE
+};
+
#endif