X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONTrackReconstructor.h;h=05b5f9a9c39eb1c71bc223cffe3d9e97b856ea3e;hb=669f9a128d7259fab7c1e14b15cd000cccfcb19e;hp=774abcaadd0b7824fd248d5143ebcd4f1977effc;hpb=de2cd600300eb8ab97d08787495cd985aa804dd8;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONTrackReconstructor.h b/MUON/AliMUONTrackReconstructor.h index 774abcaadd0..05b5f9a9c39 100644 --- a/MUON/AliMUONTrackReconstructor.h +++ b/MUON/AliMUONTrackReconstructor.h @@ -7,185 +7,60 @@ /// \ingroup rec /// \class AliMUONTrackReconstructor -/// \brief Class for the MUON track reconstruction -/// -///////////////////////////////////// -/// MUON track reconstructor in ALICE -///////////////////////////////////// +/// \brief Standard class for the MUON track reconstruction -#include -#include "AliMUONConstants.h" +#include "AliMUONVTrackReconstructor.h" -class AliMUONHitForRec; -class AliMUONSegment; -class TClonesArray; -class TFile; -class TTree; -class AliMUONData; -class AliRunLoader; -class AliMUONTriggerTrack; +class AliMUONVCluster; +class AliMUONVClusterStore; +class AliMUONTrackParam; class AliMUONTrack; -class TVirtualFitter; - -class AliMUONTrackReconstructor : public TObject { +class AliMUONTrackReconstructor : public AliMUONVTrackReconstructor +{ + public: - AliMUONTrackReconstructor(AliMUONData* data); // default Constructor + + AliMUONTrackReconstructor(const AliMUONRecoParam* recoParam, AliMUONVClusterServer* clusterServer); // default Constructor virtual ~AliMUONTrackReconstructor(); // Destructor - // Parameters for track reconstruction: public methods - // Get and Set, Set to defaults - Double_t GetMinBendingMomentum(void) const {return fMinBendingMomentum;} - void SetMinBendingMomentum(Double_t MinBendingMomentum) {fMinBendingMomentum = MinBendingMomentum;} - Double_t GetMaxBendingMomentum(void) const {return fMaxBendingMomentum;} - void SetMaxBendingMomentum(Double_t MaxBendingMomentum) {fMaxBendingMomentum = MaxBendingMomentum;} - Double_t GetMaxChi2(void) const {return fMaxChi2;} - void SetMaxChi2(Double_t MaxChi2) {fMaxChi2 = MaxChi2;} - Double_t GetMaxSigma2Distance(void) const {return fMaxSigma2Distance;} - void SetMaxSigma2Distance(Double_t MaxSigma2Distance) {fMaxSigma2Distance = MaxSigma2Distance;} - Double_t GetBendingResolution(void) const {return fBendingResolution;} - void SetBendingResolution(Double_t BendingResolution) {fBendingResolution = BendingResolution;} - Double_t GetNonBendingResolution(void) const {return fNonBendingResolution;} - void SetNonBendingResolution(Double_t NonBendingResolution) {fNonBendingResolution = NonBendingResolution;} - Double_t GetChamberThicknessInX0(void) const {return fChamberThicknessInX0;} - void SetChamberThicknessInX0(Double_t ChamberThicknessInX0) {fChamberThicknessInX0 = ChamberThicknessInX0;} - Double_t GetSimpleBValue(void) const {return fSimpleBValue;} - void SetSimpleBValue(Double_t SimpleBValue) {fSimpleBValue = SimpleBValue;} - Double_t GetSimpleBLength(void) const {return fSimpleBLength;} - void SetSimpleBLength(Double_t SimpleBLength) {fSimpleBLength = SimpleBLength;} - Double_t GetSimpleBPosition(void) const {return fSimpleBPosition;} - void SetSimpleBPosition(Double_t SimpleBPosition) {fSimpleBPosition = SimpleBPosition;} - Double_t GetEfficiency(void) const {return fEfficiency;} - void SetEfficiency(Double_t Efficiency) {fEfficiency = Efficiency;} - void SetReconstructionParametersToDefaults(void); - static TVirtualFitter* Fitter(void) {return fgFitter;} - - // Hits for reconstruction - Int_t GetNHitsForRec(void) const {return fNHitsForRec;} // Number - - // Reconstructed tracks - Int_t GetNRecTracks() const {return fNRecTracks;} // Number - void SetNRecTracks(Int_t NRecTracks) {fNRecTracks = NRecTracks;} - TClonesArray* GetRecTracksPtr(void) const {return fRecTracksPtr;} // Array - - // Functions - Double_t GetImpactParamFromBendingMomentum(Double_t BendingMomentum) const; - Double_t GetBendingMomentumFromImpactParam(Double_t ImpactParam) const; - void EventReconstruct(void); - void EventReconstructTrigger(void); - void EventDump(void); // dump reconstructed event - void EventDumpTrigger(void); // dump reconstructed trigger event - //PH void FillEvent(); // fill and write tree of reconstructed events - void SetTrackMethod(Int_t iTrackMethod); //AZ - Int_t GetTrackMethod(void) const {return fTrackMethod;} - void FillMUONTrack(void); // set track parameters at hits for Kalman track - //Int_t fMuons; // AZ - number of muons within acceptance - just for tests + virtual Bool_t RefitTrack(AliMUONTrack &track, Bool_t enableImprovement = kTRUE); - AliMUONData* GetMUONData() {return fMUONData;} - void SetTriggerCircuit(TClonesArray* circuit) {fTriggerCircuit = circuit;} + 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: - - // 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 fgkDefaultMaxChi2; ///< default max. track chi2 for reconstruction - static const Double_t fgkDefaultMaxSigma2Distance; ///< default square of max. distance for window size - static const Double_t fgkDefaultBendingResolution; ///< default bending coordinate resolution for reconstruction - static const Double_t fgkDefaultNonBendingResolution; ///< default non bending coordinate resolution for reconstruction - // Simple magnetic field: - // Value taken from macro MUONtracking.C: 0.7 T, hence 7 kG - // Length and Position from reco_muon.F, with opposite sign: - // Length = ZMAGEND-ZCOIL - // Position = (ZMAGEND+ZCOIL)/2 - // to be ajusted differently from real magnetic field ???? - static const Double_t fgkDefaultSimpleBValue; ///< default value of magnetic field (dipole) - static const Double_t fgkDefaultSimpleBLength; ///< default length of magnetic field (dipole) - static const Double_t fgkDefaultSimpleBPosition; ///< default position of magnetic field (dipole) - static const Double_t fgkDefaultEfficiency; ///< default chamber efficiency for track ref. hits recontruction - - static TVirtualFitter* fgFitter; //!< Pointer to track fitter - - Int_t fTrackMethod; ///< AZ - tracking method - - // Parameters for track reconstruction - Double_t fMinBendingMomentum; ///< minimum value (GeV/c) of momentum in bending plane - // Parameters for track reconstruction - Double_t fMaxBendingMomentum; ///< maximum value (GeV/c) of momentum in bending plane - Double_t fMaxChi2; ///< maximum Chi2 per degree of Freedom - Double_t fMaxSigma2Distance; ///< maximum square distance in units of the variance (maximum chi2) - Double_t* fRMin; ///< minimum radius (cm) - Double_t* fRMax; ///< maximum radius (cm) - Double_t* fSegmentMaxDistBending; ///< maximum distance (cm) for segments in bending plane - Double_t* fSegmentMaxDistNonBending; ///< maximum distance (cm) for segments in non bending plane - Double_t fBendingResolution; ///< chamber resolution (cm) in bending plane - Double_t fNonBendingResolution; ///< chamber resolution (cm) in non bending plane - Double_t fChamberThicknessInX0; ///< chamber thickness in number of radiation lengths - // how to take it from simulation ???? - Double_t fSimpleBValue; ///< simple magnetic field: value (kG) - Double_t fSimpleBLength; ///< simple magnetic field: length (cm) - Double_t fSimpleBPosition; ///< simple magnetic field: Z central position (cm) - Double_t fEfficiency; ///< chamber efficiency (used for track ref. hits only) - // Hits for reconstruction (should be in AliMUON ????) - TClonesArray* fHitsForRecPtr; ///< pointer to the array of hits for reconstruction - Int_t fNHitsForRec; ///< number of hits for reconstruction - // Information per chamber (should be in AliMUONChamber ????) - Int_t* fNHitsForRecPerChamber; ///< number of HitsForRec - Int_t* fIndexOfFirstHitForRecPerChamber; ///< index (0...) of first HitForRec - - // Segments inside a station - TClonesArray** fSegmentsPtr; ///< array of pointers to the segments for each station - Int_t* fNSegments; ///< number of segments for each station - - // Reconstructed tracks - TClonesArray *fRecTracksPtr; ///< pointer to array of reconstructed tracks - Int_t fNRecTracks; ///< number of reconstructed tracks - - // data container - AliMUONData* fMUONData; ///< Data container for MUON subsystem - - Int_t fMuons; ///< AZ - number of muons within acceptance - just for tests - - AliMUONTriggerTrack* fTriggerTrack; ///< Trigger track structure - - TClonesArray* fTriggerCircuit; //!< trigger circuit array - - // Functions - AliMUONTrackReconstructor (const AliMUONTrackReconstructor& rhs); // copy constructor - AliMUONTrackReconstructor& operator=(const AliMUONTrackReconstructor& rhs); // assignment operator - void ResetHitsForRec(void); - void MakeEventToBeReconstructed(void); - void AddHitsForRecFromRawClusters(TTree* TR); - void SortHitsForRecWithIncreasingChamber(); - void MakeSegments(void); - void ResetSegments(void); - void MakeSegmentsPerStation(Int_t Station); - void MakeTracks(void); - Bool_t MakeTriggerTracks(void); - void ResetTracks(void); - void MakeTrackCandidates(void); - Int_t MakeTrackCandidatesWithTwoSegments(AliMUONSegment *BegSegment); - Int_t MakeTrackCandidatesWithOneSegmentAndOnePoint(AliMUONSegment *BegSegment); - void CalcTrackParamAtVertex(AliMUONTrack *Track); - void FollowTracks(void); - void Fit(AliMUONTrack *Track, Int_t FitStart, Int_t FitMCS); - void RemoveDoubleTracks(void); - void UpdateHitForRecAtHit(void); - void ValidateTracksWithTrigger(void); - + /// 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); - //AZ - for Kalman Filter - void MakeTrackCandidatesK(void); - void FollowTracksK(void); - void RemoveDoubleTracksK(void); - void GoToVertex(void); - Bool_t CheckCandidateK(Int_t icand, Int_t nSeeds) const; + 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