#include <TObject.h>
class TClonesArray;
-class AliMUONData;
+class AliMUONTrack;
+class AliMUONTrackParam;
+class AliMUONHitForRec;
class AliMUONTriggerTrack;
+class AliMUONTrackHitPattern;
+class AliMUONVClusterStore;
+class AliMUONVTrackStore;
+class AliMUONVTriggerTrackStore;
+class AliMUONVTriggerStore;
+class AliMUONGeometryTransformer;
+class AliMUONDigitMaker;
+class AliMUONTriggerCircuit;
class AliMUONVTrackReconstructor : public TObject {
public:
- AliMUONVTrackReconstructor(AliMUONData* data); // default Constructor
+ AliMUONVTrackReconstructor(); // default Constructor
virtual ~AliMUONVTrackReconstructor(); // Destructor
// Parameters for track reconstruction: public methods
// Get and Set, Set to defaults
/// Return minimum value (GeV/c) of momentum in bending plane
- Double_t GetMinBendingMomentum(void) const {return fMinBendingMomentum;}
- /// Return chamber resolution (cm) in bending plane
- Double_t GetBendingResolution(void) const {return fBendingResolution;}
- /// Return chamber resolution (cm) in non-bending plane
- Double_t GetNonBendingResolution(void) const {return fNonBendingResolution;}
+ Double_t GetMinBendingMomentum() const {return fMinBendingMomentum;}
// Reconstructed tracks
/// Return number of reconstructed tracks
/// Set number of reconstructed tracks
void SetNRecTracks(Int_t NRecTracks) {fNRecTracks = NRecTracks;}
/// Return array of reconstructed tracks
- TClonesArray* GetRecTracksPtr(void) const {return fRecTracksPtr;} // Array
+ TClonesArray* GetRecTracksPtr() const {return fRecTracksPtr;} // Array
// Functions
- void EventReconstruct(void);
- void EventReconstructTrigger(void);
- virtual void EventDump(void) = 0; ///< dump reconstructed event
- void EventDumpTrigger(void); // dump reconstructed trigger event
+ void EventReconstruct(const AliMUONVClusterStore& clusterStore,
+ AliMUONVTrackStore& trackStore);
+
+ void EventReconstructTrigger(const AliMUONTriggerCircuit& triggerCircuit,
+ const AliMUONVTriggerStore& triggerStore,
+ AliMUONVTriggerTrackStore& triggerTrackStore);
+
+ void ValidateTracksWithTrigger(AliMUONVTrackStore& trackStore,
+ const AliMUONVTriggerTrackStore& triggerTrackStore,
+ const AliMUONVTriggerStore& triggerStore,
+ const AliMUONTrackHitPattern& trackHitPattern);
+
- /// Return MUON data
- AliMUONData* GetMUONData() {return fMUONData;}
- /// Set MUON data
- void SetMUONData(AliMUONData* data) {fMUONData = data;}
-
- /// Set trigger circuit
- void SetTriggerCircuit(TClonesArray* circuit) {fTriggerCircuit = circuit;}
-
-
protected:
// Defaults parameters for reconstruction
static const Double_t fgkDefaultMinBendingMomentum; ///< default min. bending momentum for reconstruction
static const Double_t fgkDefaultMaxBendingMomentum; ///< default max. bending momentum for reconstruction
- static const Double_t fgkDefaultBendingResolution; ///< default bending coordinate resolution for reconstruction
- static const Double_t fgkDefaultNonBendingResolution; ///< default non bending coordinate resolution for reconstruction
- static const Double_t fgkDefaultBendingVertexDispersion; ///< default vertex dispersion in bending plane for reconstruction
- static const Double_t fgkDefaultNonBendingVertexDispersion; ///< default vertex dispersion in non bending plane for reconstruction
static const Double_t fgkDefaultMaxNormChi2MatchTrigger; ///< default maximum normalized chi2 of tracking/trigger track matching
+ // Parameters for track reconstruction
+ static const Double_t fgkSigmaToCutForTracking; ///< cut in sigma to apply on cluster local chi2 and track global chi2 during tracking
+ static const Double_t fgkSigmaToCutForImprovement; ///< cut in sigma to apply on cluster local chi2 during track improvement
+ static const Bool_t fgkMakeTrackCandidatesFast; ///< kTRUE to make track candidates assuming linear propagation between stations 4 and 5
+ static const Bool_t fgkTrackAllTracks; ///< kTRUE to track all the possible candidates; kFALSE to track only the best ones
+ 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
+ static const Bool_t fgkRecoverTracks; ///< kTRUE to try to recover the tracks being lost during reconstruction
+ static const Bool_t fgkImproveTracks; ///< kTRUE to try to improve the reconstructed tracks
+
// Parameters for track reconstruction
Double_t fMinBendingMomentum; ///< minimum value (GeV/c) of momentum in bending plane
Double_t fMaxBendingMomentum; ///< maximum value (GeV/c) of momentum in bending plane
- Double_t fBendingResolution; ///< chamber resolution (cm) in bending plane
- Double_t fNonBendingResolution; ///< chamber resolution (cm) in non bending plane
- Double_t fBendingVertexDispersion; ///< vextex dispersion (cm) in bending plane
- Double_t fNonBendingVertexDispersion; ///< vextex dispersion (cm) in non bending plane
Double_t fMaxNormChi2MatchTrigger; ///< maximum normalized chi2 of tracking/trigger track matching
TClonesArray* fHitsForRecPtr; ///< pointer to the array of hits for reconstruction
TClonesArray *fRecTracksPtr; ///< pointer to array of reconstructed tracks
Int_t fNRecTracks; ///< number of reconstructed tracks
- // data container
- AliMUONData* fMUONData; ///< Data container for MUON subsystem
// Functions
AliMUONVTrackReconstructor (const AliMUONVTrackReconstructor& rhs); ///< copy constructor
AliMUONVTrackReconstructor& operator=(const AliMUONVTrackReconstructor& rhs); ///< assignment operator
- void SortHitsForRecWithIncreasingChamber();
- TClonesArray *MakeSegmentsInStation(Int_t station);
-
- /// \todo add comment
- virtual void AddHitsForRecFromRawClusters() = 0;
- /// \todo add comment
- virtual void MakeTracks(void) = 0;
- /// \todo add comment
- virtual void MakeTrackCandidates(void) = 0;
- /// \todo add comment
- virtual void FollowTracks(void) = 0;
- /// \todo add comment
- virtual void RemoveDoubleTracks(void) = 0;
- /// \todo add comment
- virtual void FillMUONTrack(void) = 0;
+ /// Make track candidats from clusters in stations(1..) 4 and 5
+ virtual void MakeTrackCandidates() = 0;
+ /// Follow tracks in stations(1..) 3, 2 and 1
+ virtual void FollowTracks() = 0;
+ /// Improve the reconstructed tracks
+ virtual void ImproveTracks() = 0;
+ /// Finalize the tracking results
+ virtual void Finalize() = 0;
+
+ TClonesArray* MakeSegmentsInStation(Int_t station);
- private:
+ void RemoveIdenticalTracks();
+ void RemoveDoubleTracks();
+
+ Double_t TryOneHitForRec(const AliMUONTrackParam &trackParam, AliMUONHitForRec* hitForRec,
+ AliMUONTrackParam &trackParamAtHit, Bool_t updatePropagator = kFALSE);
+ Bool_t TryOneHitForRecFast(const AliMUONTrackParam &trackParam, AliMUONHitForRec* hitForRec);
+ Double_t TryTwoHitForRecFast(const AliMUONTrackParam &trackParamAtHit1, AliMUONHitForRec* hitForRec2,
+ AliMUONTrackParam &trackParamAtHit2);
+
+ Bool_t FollowLinearTrackInStation(AliMUONTrack &trackCandidate, Int_t nextStation);
- AliMUONTriggerTrack* fTriggerTrack; ///< Trigger track structure
- TClonesArray* fTriggerCircuit; //!< trigger circuit array
+ private:
// Functions
- void ResetTracks(void);
- void ResetHitsForRec(void);
+ void ResetTracks();
+ void ResetHitsForRec();
+
+ void AddHitsForRecFromRawClusters(const AliMUONVClusterStore& clusterStore);
+ void SortHitsForRecWithIncreasingChamber();
+
+ void MakeTracks();
- void ValidateTracksWithTrigger(void);
- Bool_t MakeTriggerTracks(void);
-
-
ClassDef(AliMUONVTrackReconstructor, 0) // MUON track reconstructor in ALICE
};