Line data Source code
1 : #ifndef AliMFTTracker_H
2 : #define AliMFTTracker_H
3 :
4 : /* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
5 : * See cxx source for full Copyright notice */
6 :
7 : /// \ingroup MFTrec
8 : /// \class AliMFTTracker
9 : /// \brief Class for the creation of the "standalone MFT tracks"
10 : ///
11 : ///
12 : /// Class for the creation of the "standalone MFT tracks" built from the tracks reconstructed
13 : /// clusters of the Muon Forward Tracker
14 : ///
15 : /// \author Raphael Tieulent <raphael.tieulent@cern.ch>, IPN-Lyon
16 : /// \date April 27th, 2015
17 :
18 :
19 : #include "AliTracker.h"
20 : #include "AliMFTConstants.h"
21 :
22 : class AliMFT;
23 : class AliMFTTrack;
24 : class AliMFTTrackFinder;
25 : class AliMFTCluster;
26 : class AliMFTSegmentation;
27 : class AliMuonForwardTrack;
28 : class AliMUONTrackParam;
29 : class AliMUONTrack;
30 : class AliMUONVCluster;
31 :
32 : //==============================================================================================
33 :
34 : class AliMFTTracker : public AliTracker {
35 :
36 : public:
37 :
38 : enum {kConverged, kDiverged};
39 :
40 : AliMFTTracker();
41 : virtual ~AliMFTTracker();
42 :
43 : Int_t LoadClusters(TTree *cf);
44 : void UnloadClusters();
45 : Int_t Clusters2Tracks(AliESDEvent *event);
46 :
47 0 : void SetNPlanesMFT(Int_t nPlanesMFT) { fNPlanesMFT = nPlanesMFT; }
48 : void SeparateFrontBackClusters();
49 :
50 0 : void SetMinResearchRadiusAtPlane(Int_t plane, Double_t radius) { if (plane>=0 && plane<fNMaxPlanes) fMinResearchRadiusAtPlane[plane] = radius; }
51 :
52 : void GetVertexFromMC();
53 :
54 : /// Dummy implementation
55 0 : virtual Int_t PropagateBack(AliESDEvent* /*event*/) {return 0;}
56 : /// Dummy implementation
57 0 : virtual Int_t RefitInward(AliESDEvent* /*event*/) {return 0;}
58 : /// Dummy implementation
59 0 : virtual AliCluster *GetCluster(Int_t /*index*/) const {return 0;}
60 :
61 : void AddClustersFromUnderlyingEvent();
62 : void AddClustersFromPileUpEvents();
63 :
64 : void LoadTracks();
65 : Bool_t LinearFit(AliMFTTrack * track);
66 : Double_t RunKalmanFilter(AliMUONTrackParam &trackParam, AliMUONVCluster &cluster);
67 :
68 : protected:
69 :
70 : static const Int_t fNMaxPlanes = AliMFTConstants::fNMaxPlanes; // max number of MFT planes
71 : static const Double_t fRadLengthSi;
72 : static const Int_t fMaxNCandidates = 1000;
73 :
74 : AliESDEvent *fESD; //! pointer to the ESD event
75 :
76 : AliMFT *fMFT; //!
77 : AliMFTSegmentation * fSegmentation;
78 : AliMFTTrackFinder * fTrackFinder;
79 : Int_t fNPlanesMFT, fNPlanesMFTAnalyzed;
80 :
81 : Double_t fSigmaClusterCut; // to select the clusters in the MFT planes which are compatible with the extrapolated muon track
82 : Double_t fScaleSigmaClusterCut; // to tune the cut on the compatible clusters in case of too many candidates
83 :
84 : Int_t fNMaxMissingMFTClusters; // max. number of MFT clusters which can be missed in the global fit procedure
85 : Bool_t fIsPlaneMandatory[fNMaxPlanes]; // specifies which MFT planes cannot be missed in the global fit procedure
86 :
87 : Bool_t fGlobalTrackingDiverged; // to keep memory of a possible divergence in the global tracking finding
88 :
89 : TClonesArray *fMFTClusterArray[fNMaxPlanes]; //! array of clusters for the planes of the MFT
90 : TClonesArray *fMFTClusterArrayFront[fNMaxPlanes]; //! array of front clusters for the planes of the MFT
91 : TClonesArray *fMFTClusterArrayBack[fNMaxPlanes]; //! array of back clusters for the planes of the MFT
92 :
93 : TClonesArray *fCandidateTracks; //! array of candidate global tracks
94 : TClonesArray *fMFTTracks; //! array of candidate MFT standalone tracks
95 :
96 : AliMUONTrack *fMUONTrack; //! muon track being analyzed
97 :
98 : AliMuonForwardTrack *fCurrentTrack; //! muon extrapolated track being tested
99 : AliMuonForwardTrack *fFinalBestCandidate; //! best final candidate (if any)
100 :
101 : // uncertainty on the x position of the primary vertex (seed for the extrapolation of the MUON tracks)
102 : Double_t fXExtrapVertex;
103 : Double_t fYExtrapVertex;
104 : Double_t fZExtrapVertex;
105 : Double_t fXExtrapVertexError;
106 : Double_t fYExtrapVertexError;
107 :
108 : // generator event vertex from Monte-Carlo
109 : Double_t fXVertexMC;
110 : Double_t fYVertexMC;
111 : Double_t fZVertexMC;
112 :
113 : Bool_t fBransonCorrection; // if TRUE, Branson Correction is applied when extrapolating the MUON tracks to the vertex region
114 :
115 : Double_t fMinResearchRadiusAtPlane[fNMaxPlanes];
116 :
117 :
118 : private:
119 :
120 : AliMFTTracker(const AliMFTTracker &tracker);
121 : AliMFTTracker & operator=(const AliMFTTracker &tracker);
122 :
123 : /// \cond CLASSIMP
124 12 : ClassDef(AliMFTTracker,1); //MFT tracker for standalone tracks
125 : /// \endcond
126 :
127 : };
128 :
129 : //====================================================================================================================================================
130 :
131 : #endif
132 :
|