]>
Commit | Line | Data |
---|---|---|
e4f2f73d | 1 | #ifndef ALITRDTRACKERV1_H |
2 | #define ALITRDTRACKERV1_H | |
eb38ed55 | 3 | |
e4f2f73d | 4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
7 | /* $Id$ */ | |
8 | ||
9 | //////////////////////////////////////////////////////////////////////////// | |
10 | // // | |
11 | // The TRD tracker // | |
12 | // // | |
13 | // Authors: // | |
eb38ed55 | 14 | // Marian Ivanov <M.Ivanov@gsi.de> // |
e4f2f73d | 15 | // Alex Bercuci <A.Bercuci@gsi.de> // |
eb38ed55 | 16 | // Jouri Belikov <J.Belikov@cern.ch> // |
e4f2f73d | 17 | // Markus Fasel <M.Fasel@gsi.de> // |
18 | // // | |
eb38ed55 | 19 | //////////////////////////////////////////////////////////////////////////// |
e4f2f73d | 20 | |
eb38ed55 | 21 | #ifndef ALITRACKER_H |
22 | #include "AliTracker.h" | |
e4f2f73d | 23 | #endif |
24 | ||
eb38ed55 | 25 | #ifndef ALITRDTRACKINGSECTOR_H |
26 | #include "AliTRDtrackingSector.h" | |
27 | #endif | |
e4f2f73d | 28 | |
29 | /************************************************************************** | |
30 | * Class Status see source file * | |
31 | **************************************************************************/ | |
32 | ||
33 | class TFile; | |
34 | class TTreeSRedirector; | |
35 | class TClonesArray; | |
eb38ed55 | 36 | class TLinearFitter; |
e4f2f73d | 37 | |
38 | class AliRieman; | |
39 | class AliESDEvent; | |
eb38ed55 | 40 | class AliCluster; |
e4f2f73d | 41 | |
eb38ed55 | 42 | class AliTRDcluster; |
e4f2f73d | 43 | class AliTRDseedV1; |
eb38ed55 | 44 | class AliTRDtrackingChamber; |
45 | class AliTRDchamberTimeBin; | |
e4f2f73d | 46 | class AliTRDtrackerFitter; |
0906e73e | 47 | class AliTRDtrackV1; |
48 | class AliTrackPoint; | |
eb38ed55 | 49 | class AliTRDtrackerV1 : public AliTracker |
e4f2f73d | 50 | { |
eb38ed55 | 51 | public: |
3b57a3f7 | 52 | enum{ |
53 | kMaxLayersPerSector = 1000 | |
54 | , kMaxTimeBinIndex = 216 | |
55 | , kTrackingSectors = 18 | |
56 | , kNTimeBins = 35 | |
57 | , kNPlanes = 6 | |
58 | , kNSeedPlanes = 4 | |
59 | , kMaxTracksStack = 100 | |
60 | , kNConfigs = 15 | |
61 | }; | |
62 | AliTRDtrackerV1(); | |
63 | virtual ~AliTRDtrackerV1(); | |
e4f2f73d | 64 | |
eb38ed55 | 65 | //temporary |
66 | AliTRDtrackingSector* GetTrackingSector(Int_t sec) {return &fTrSec[sec];} | |
67 | ||
3b57a3f7 | 68 | Int_t Clusters2Tracks(AliESDEvent *esd); |
eb38ed55 | 69 | static TTreeSRedirector* DebugStreamer() {return fgDebugStreamer;} |
3b57a3f7 | 70 | AliCluster* GetCluster(Int_t index) const; |
71 | AliTRDseedV1* GetTracklet(Int_t index) const; | |
72 | AliKalmanTrack* GetTrack(Int_t index) const; | |
73 | TClonesArray* GetListOfClusters() {return fClusters;} | |
74 | TClonesArray* GetListOfTracklets() {return fTracklets;} | |
75 | TClonesArray* GetListOfTracks() {return fTracks;} | |
76 | static const Int_t GetNTimeBins() {return fgNTimeBins;} | |
77 | static void GetExtrapolationConfig(Int_t iconfig, Int_t planes[2]); | |
78 | static void GetSeedingConfig(Int_t iconfig, Int_t planes[4]); | |
79 | static TLinearFitter* GetTiltedRiemanFitter(); | |
80 | static TLinearFitter* GetTiltedRiemanFitterConstraint(); | |
81 | static AliRieman* GetRiemanFitter(); | |
82 | static void FitRieman(AliTRDcluster **clusters, Double_t chi2[2]); | |
83 | static Float_t FitRieman(AliTRDseedV1 *tracklets, Double_t *chi2, Int_t *planes = 0x0); | |
84 | static Float_t FitTiltedRiemanConstraint(AliTRDseedV1 *tracklets, Double_t zVertex); | |
85 | static Float_t FitTiltedRieman(AliTRDseedV1 *tracklets, Bool_t sigError); | |
eb38ed55 | 86 | |
3b57a3f7 | 87 | static Double_t FitRiemanTilt(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0); |
9e333711 | 88 | static Double_t FitLine(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0); |
3b57a3f7 | 89 | //static Double_t FitKalman(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t up=0, Int_t np = 0, AliTrackPoint *points = 0x0); |
8acca6a3 | 90 | |
3b57a3f7 | 91 | Int_t FollowBackProlongation(AliTRDtrackV1 &t); |
92 | Int_t FollowProlongation(AliTRDtrackV1 &t); | |
93 | Int_t LoadClusters(TTree *cTree); | |
94 | Int_t PropagateBack(AliESDEvent *event); | |
95 | Int_t ReadClusters(TClonesArray* &array, TTree *in) const; | |
96 | Int_t RefitInward(AliESDEvent *event); | |
97 | static void SetNTimeBins(Int_t nTimeBins){fgNTimeBins = nTimeBins; } | |
98 | void UnloadClusters(); | |
99 | ||
100 | static Int_t Freq(Int_t n, const Int_t *inlist, Int_t *outlist, Bool_t down); // to be removed | |
101 | ||
102 | class AliTRDLeastSquare{ | |
103 | public: | |
104 | AliTRDLeastSquare(); | |
105 | ~AliTRDLeastSquare(){}; | |
106 | ||
107 | void AddPoint(Double_t *x, Double_t y, Double_t sigmaY); | |
108 | void RemovePoint(Double_t *x, Double_t y, Double_t sigmaY); | |
109 | void Eval(); | |
110 | ||
111 | Double_t GetFunctionParameter(Int_t ParNumber) const {return fParams[ParNumber];} | |
112 | Double_t GetFunctionValue(Double_t *xpos) const; | |
113 | void GetCovarianceMatrix(Double_t *storage) const; | |
114 | private: | |
115 | AliTRDLeastSquare(const AliTRDLeastSquare &); | |
116 | AliTRDLeastSquare& operator=(const AliTRDLeastSquare &); | |
117 | Double_t fParams[2]; // Fitparameter | |
118 | Double_t fCovarianceMatrix[3]; // Covariance Matrix | |
119 | Double_t fSums[6]; // Sums | |
120 | }; | |
fbb2ea06 | 121 | |
eb38ed55 | 122 | protected: |
3b57a3f7 | 123 | static Bool_t AdjustSector(AliTRDtrackV1 *track); |
124 | Double_t BuildSeedingConfigs(AliTRDtrackingChamber **stack, Int_t *configs); | |
125 | static Float_t CalculateChi2Z(AliTRDseedV1 *tracklets, Double_t offset, Double_t slope, Double_t xref); | |
126 | Int_t Clusters2TracksSM(Int_t sector, AliESDEvent *esd); | |
127 | Int_t Clusters2TracksStack(AliTRDtrackingChamber **stack, TClonesArray *esdTrackList); | |
128 | AliTRDseedV1* GetTracklet(AliTRDtrackV1 *trk, Int_t plane, Int_t &idx); | |
129 | Bool_t GetTrackPoint(Int_t index, AliTrackPoint &p) const; | |
130 | Int_t MakeSeeds(AliTRDtrackingChamber **stack, AliTRDseedV1 *sseed, Int_t *ipar); | |
131 | AliTRDtrackV1* MakeTrack(AliTRDseedV1 *seeds, Double_t *params); | |
132 | static Int_t PropagateToX(AliTRDtrackV1 &t, Double_t xToGo, Double_t maxStep); | |
d20df6fc | 133 | AliTRDtrackV1* SetTrack(AliTRDtrackV1 *track); |
3b57a3f7 | 134 | AliTRDseedV1* SetTracklet(AliTRDseedV1 *tracklet); |
e4f2f73d | 135 | |
0906e73e | 136 | private: |
e4f2f73d | 137 | AliTRDtrackerV1(const AliTRDtrackerV1 &tracker); |
138 | AliTRDtrackerV1 &operator=(const AliTRDtrackerV1 &tracker); | |
bb56afff | 139 | Double_t CookLikelihood(AliTRDseedV1 *cseed, Int_t planes[4], Double_t *chi2); |
140 | Double_t CalculateTrackLikelihood(AliTRDseedV1 *tracklets, Double_t *chi2); | |
141 | Int_t ImproveSeedQuality(AliTRDtrackingChamber **stack, AliTRDseedV1 *tracklet); | |
bb56afff | 142 | static Float_t CalculateReferenceX(AliTRDseedV1 *tracklets); |
143 | ||
144 | Float_t GetChi2Y(AliTRDseedV1 *tracklets) const; | |
145 | Float_t GetChi2Z(AliTRDseedV1 *tracklets) const; | |
e4f2f73d | 146 | |
0906e73e | 147 | private: |
eb38ed55 | 148 | AliTRDgeometry *fGeom; // Pointer to TRD geometry |
149 | AliTRDtrackingSector fTrSec[kTrackingSectors]; // Array of tracking sectors; | |
e4f2f73d | 150 | |
bb56afff | 151 | TClonesArray *fClusters; // List of clusters |
152 | TClonesArray *fTracklets; // List of tracklets | |
153 | TClonesArray *fTracks; // List of tracks | |
eb38ed55 | 154 | |
155 | // should go to the recoParam | |
156 | static const Double_t fgkMaxChi2; // Max increment in track chi2 | |
157 | static const Float_t fgkMinClustersInTrack; // Min number of clusters in track | |
158 | static const Float_t fgkLabelFraction; // Min fraction of same label | |
159 | static const Double_t fgkMaxSnp; // Maximal snp for tracking | |
160 | static const Double_t fgkMaxStep; // Maximal step for tracking | |
161 | ||
162 | // stand alone tracking | |
2985ffcb | 163 | static Double_t fgTopologicQA[kNConfigs]; // Topologic quality |
e4f2f73d | 164 | Double_t fTrackQuality[kMaxTracksStack]; // Track quality |
165 | Int_t fSeedLayer[kMaxTracksStack]; // Seed layer | |
166 | Int_t fSieveSeeding; //! Seeding iterator | |
eb38ed55 | 167 | |
2985ffcb | 168 | static Int_t fgNTimeBins; // Timebins per plane in track prolongation |
169 | static TLinearFitter *fgTiltedRieman; // Fitter for the tilted Rieman fit without vertex constriant | |
170 | static TLinearFitter *fgTiltedRiemanConstrained; // Fitter for the tilted Rieman fit with vertex constraint | |
171 | static AliRieman *fgRieman; // Fitter for the untilted Rieman fit | |
bb56afff | 172 | |
173 | static TTreeSRedirector *fgDebugStreamer; //!Debug streamer | |
174 | ||
eb38ed55 | 175 | ClassDef(AliTRDtrackerV1, 2) // TRD tracker development class |
e4f2f73d | 176 | |
177 | }; | |
178 | #endif |