]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTrack.h
Make this class non static, correct a bug (float instead of double) in ReadPCB, and...
[u/mrichter/AliRoot.git] / MUON / AliMUONTrack.h
index eea589a5765c6b87a6364c65677e90ce51b334b7..9056efa8bbfaf7891a98c3e4d1ba98b56ddda847 100644 (file)
 #include <TClonesArray.h>
 
 #include "AliMUONTrackParam.h" // object belongs to the class
-#include "AliMUONHitForRec.h"  // object belongs to the class
 
-//const Int_t kMaxTrackingChamber=10;
-        // not used
-
-class TObjArray;
-class TVirtualFitter;
-class AliMUONTrackReconstructor;
 class AliMUONHitForRec;
-class AliMUONSegment;
 
 class AliMUONTrack : public TObject 
 {
@@ -36,72 +28,94 @@ class AliMUONTrack : public TObject
   AliMUONTrack (const AliMUONTrack& AliMUONTrack); // copy constructor
   AliMUONTrack& operator=(const AliMUONTrack& AliMUONTrack); // assignment operator
 
-  AliMUONTrack(AliMUONSegment* BegSegment, AliMUONSegment* EndSegment, AliMUONTrackReconstructor* TrackReconstructor); // Constructor from two Segment's
-  AliMUONTrack(AliMUONSegment* Segment, AliMUONHitForRec* HitForRec, AliMUONTrackReconstructor* TrackReconstructor); // Constructor from one Segment and one HitForRec
-  void Remove(void);
-
-  AliMUONTrackReconstructor* GetTrackReconstructor(void) const {return fTrackReconstructor;}
-  AliMUONTrackParam* GetTrackParamAtVertex(void) {return &fTrackParamAtVertex;}
-  void SetTrackParamAtVertex(void); // Set track parameters at vertex from last stations 4 & 5
-  void SetTrackParamAtVertex(AliMUONTrackParam* TrackParam) {fTrackParamAtVertex = *TrackParam;}
-  TClonesArray *GetTrackParamAtHit(void) const {return fTrackParamAtHit;}
-  TClonesArray *GetHitForRecAtHit(void) const {return fHitForRecAtHit;}
-  void ResetTrackParamAtHit(void) { fTrackParamAtHit->Delete(); }
-  void ResetHitForRecAtHit(void) { fHitForRecAtHit->Delete(); }
-  void AddTrackParamAtHit(const AliMUONTrackParam *trackParam) 
-    {new ((*fTrackParamAtHit)[fTrackParamAtHit->GetEntriesFast()]) AliMUONTrackParam(*trackParam);}
-  void AddHitForRecAtHit(const AliMUONHitForRec *hitForRec) 
-    {new ((*fHitForRecAtHit)[fHitForRecAtHit->GetEntriesFast()]) AliMUONHitForRec(*hitForRec);}
-
-  TObjArray* GetTrackHitsPtr(void) const {return fTrackHitsPtr;}
-  Int_t GetNTrackHits(void) const {return fNTrackHits;}
-  void SetNTrackHits(Int_t nTrackHits) {fNTrackHits = nTrackHits;}
-  Int_t GetFitMCS(void) const {return fFitMCS;}
-  Int_t GetFitNParam(void) const {return fFitNParam;}
-  Int_t GetFitStart(void) const {return fFitStart;}
-  Double_t GetFitFMin(void) const {return fFitFMin;}
-  Bool_t GetMatchTrigger(void) const {return fMatchTrigger;}
-  Double_t GetChi2MatchTrigger(void) const {return fChi2MatchTrigger;}
-  void SetFitMCS(Int_t FitMCS);
-  void SetFitNParam(Int_t FitNParam);
-  void SetFitStart(Int_t FitStart);
-  void SetFitFMin(Double_t chi2) { fFitFMin = chi2; } // set Chi2
-
-  AliMUONTrackParam* GetTrackParamAtFirstHit(void) const;
-
-  void RecursiveDump(void) const; // Recursive dump (with track hits)
-  void Fit(); // Fit
-  void AddSegment(AliMUONSegment* Segment); // Add Segment
-  void AddHitForRec(AliMUONHitForRec* HitForRec); // Add HitForRec
-  void SetTrackParamAtHit(Int_t indexHit, AliMUONTrackParam *TrackParam) const;
-  Int_t HitsInCommon(AliMUONTrack* Track) const;
-  void MatchTriggerTrack(TClonesArray* TriggerTrackArray);
-  Bool_t* CompatibleTrack(AliMUONTrack* Track, Double_t Sigma2Cut) const; // return array of compatible chamber
+  AliMUONTrack(AliMUONHitForRec* hitForRec1, AliMUONHitForRec* hitForRec2); // Constructor from a segment
+
+       /// return pointeur to track parameters at vertex
+  AliMUONTrackParam*         GetTrackParamAtVertex(void) {return &fTrackParamAtVertex;}
+       /// set track parameters at vertex
+  void                       SetTrackParamAtVertex(AliMUONTrackParam* trackParam) {fTrackParamAtVertex = *trackParam;}
+
+       /// return array of track parameters at hit
+  TClonesArray*              GetTrackParamAtHit(void) const {return fTrackParamAtHit;}
+       /// reset array of track parameters at hit
+  void                       ResetTrackParamAtHit(void) { fTrackParamAtHit->Delete(); }
+  void                       AddTrackParamAtHit(AliMUONTrackParam *trackParam, AliMUONHitForRec *hitForRec); 
+  
+       /// return array of hitForRec at hit
+  TClonesArray*              GetHitForRecAtHit(void) const {return fHitForRecAtHit;}
+       /// reset array of hitForRec at hit
+  void                       ResetHitForRecAtHit(void) { fHitForRecAtHit->Delete(); }
+  void                       AddHitForRecAtHit(const AliMUONHitForRec *hitForRec); 
+
+       /// return the number of hits attached to the track
+  Int_t                      GetNTrackHits(void) const {return fNTrackHits;}
+       /// set the number of hits attached to the track
+  void                       SetNTrackHits(Int_t nTrackHits) {fNTrackHits = nTrackHits;}
+
+       /// return pointeur to track parameters extrapolated to the next station
+  AliMUONTrackParam*         GetExtrapTrackParam(void) {return &fExtrapTrackParam;}
+       /// set track parameters extrapolated to next station
+  void                       SetExtrapTrackParam(AliMUONTrackParam* trackParam) {fExtrapTrackParam = *trackParam;}
+
+       /// return kTrue if the vertex must be used to constrain the fit, kFalse if not
+  Bool_t                     GetFitWithVertex(void) const {return fFitWithVertex;}
+       /// set the flag telling whether the vertex must be used to constrain the fit or not
+  void                       SetFitWithVertex(Bool_t fitWithVertex) { fFitWithVertex = fitWithVertex; }
+       /// return the vertex used during the tracking procedure
+  AliMUONHitForRec*          GetVertex(void) const {return fVertex;}
+  void                       SetVertex(AliMUONHitForRec* vertex);
+
+       /// return the minimum value of the function minimized by the fit
+  Double_t                   GetFitFMin(void) const {return fFitFMin;}
+       /// set the minimum value of the function minimized by the fit
+  void                       SetFitFMin(Double_t chi2) { fFitFMin = chi2; }
+       /// return kTrue if track matches with trigger track, kFalse if not
+  Bool_t                     GetMatchTrigger(void) const {return fMatchTrigger;}
+       /// set the flag telling whether track matches with trigger track or not
+  void                      SetMatchTrigger(Bool_t matchTrigger) {fMatchTrigger = matchTrigger;}
+       /// return the chi2 of trigger/track matching 
+  Double_t                   GetChi2MatchTrigger(void) const {return fChi2MatchTrigger;}
+       /// set the chi2 of trigger/track matching 
+  void                       SetChi2MatchTrigger(Double_t chi2MatchTrigger) {fChi2MatchTrigger = chi2MatchTrigger;}
   
-  Int_t GetTrackID() const {return fTrackID;}
-  void SetTrackID(Int_t trackID) {fTrackID = trackID;}
+  Int_t                      HitsInCommon(AliMUONTrack* track) const;
+  Bool_t*                    CompatibleTrack(AliMUONTrack* track, Double_t sigma2Cut) const; // return array of compatible chamber
+  
+       /// return track number in TrackRefs
+  Int_t                      GetTrackID() const {return fTrackID;}
+       /// set track number in TrackRefs
+  void                       SetTrackID(Int_t trackID) {fTrackID = trackID;}
+
+  Double_t                   TryOneHitForRec(AliMUONHitForRec* hitForRec);
+  Double_t                   TryTwoHitForRec(AliMUONHitForRec* hitForRec1, AliMUONHitForRec* hitForRec2); 
+  
+  void                       RecursiveDump(void) const; // Recursive dump (with track hits)
+
+  virtual void               Print(Option_t* opt="") const;
 
-  static TVirtualFitter* Fitter(void) {return fgFitter;}
 
- protected:
  private:
-  static TVirtualFitter* fgFitter; //!                  Pointer to track fitter
-  AliMUONTrackReconstructor* fTrackReconstructor; //!   Pointer to TrackReconstructor
-  AliMUONTrackParam fTrackParamAtVertex; // Track parameters at vertex
-  TClonesArray *fTrackParamAtHit; // Track parameters at hit
-  TClonesArray *fHitForRecAtHit; // Cluster parameters at hit
-  TObjArray *fTrackHitsPtr; //!  Pointer to array of pointers to TrackHit's
-  Int_t fNTrackHits; // Number of TrackHit's
-  Int_t fFitMCS; // 0(1) for fit without(with) multiple Coulomb scattering
-  Int_t fFitNParam; // 3(5) for fit with 3(5) parameters
-  Int_t fFitStart; // 0 or 1 for fit starting from parameters at vertex (0) or at first TrackHit(1)
-  Double_t fFitFMin; // minimum value of the function minimized by the fit
-  Bool_t fMatchTrigger; // 1 if track matches with trigger track, 0 if not
-  Double_t fChi2MatchTrigger; // chi2 of trigger/track matching 
-  Int_t fTrackID; // track ID = track number in TrackRefs
-
-  ClassDef(AliMUONTrack, 2) // Reconstructed track in ALICE dimuon spectrometer
-    };
+  static const Double_t fgkMaxTrackingDistanceBending;    ///< Maximum distance to the track to search for compatible hitForRec(s) in bending direction
+  static const Double_t fgkMaxTrackingDistanceNonBending; ///< Maximum distance to the track to search for compatible hitForRec(s) in non bending direction
+  
+  AliMUONTrackParam fTrackParamAtVertex; ///< Track parameters at vertex
+  TClonesArray *fTrackParamAtHit; ///< Track parameters at hit
+  TClonesArray *fHitForRecAtHit; ///< Cluster parameters at hit
+  Int_t fNTrackHits; ///< Number of hits attached to the track
+  
+  AliMUONTrackParam fExtrapTrackParam; //!< Track parameters extrapolated to a given z position
+  
+  Bool_t fFitWithVertex; //!< 1 if using the vertex to constrain the fit, 0 if not
+  AliMUONHitForRec *fVertex; //!< Vertex used during the tracking procedure if required
+  
+  Double_t fFitFMin; ///< minimum value of the function minimized by the fit
+  Bool_t fMatchTrigger; ///< 1 if track matches with trigger track, 0 if not
+  Double_t fChi2MatchTrigger; ///< chi2 of trigger/track matching 
+  
+  Int_t fTrackID; ///< track ID = track number in TrackRefs
+  
+  
+  ClassDef(AliMUONTrack, 3) // Reconstructed track in ALICE dimuon spectrometer
+};
        
 #endif