1 #ifndef ALITRDTRACKERV1_H
2 #define ALITRDTRACKERV1_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
9 ////////////////////////////////////////////////////////////////////////////
14 // Marian Ivanov <M.Ivanov@gsi.de> //
15 // Alex Bercuci <A.Bercuci@gsi.de> //
16 // Jouri Belikov <J.Belikov@cern.ch> //
17 // Markus Fasel <M.Fasel@gsi.de> //
19 ////////////////////////////////////////////////////////////////////////////
22 #include "AliTracker.h"
25 #ifndef ALITRDTRACKINGSECTOR_H
26 #include "AliTRDtrackingSector.h"
29 /**************************************************************************
30 * Class Status see source file *
31 **************************************************************************/
34 class TTreeSRedirector;
45 class AliTRDtrackingChamber;
46 class AliTRDchamberTimeBin;
47 class AliTRDtrackerFitter;
49 class AliTRDReconstructor;
50 class AliTRDtrackerV1 : public AliTracker
57 kMaxLayersPerSector = 1000
58 , kMaxTimeBinIndex = 216
59 , kTrackingSectors = 18
63 , kMaxTracksStack = 100
66 AliTRDtrackerV1(AliTRDReconstructor *rec = 0x0);
67 virtual ~AliTRDtrackerV1();
70 AliTRDtrackingSector* GetTrackingSector(Int_t sec) {return &fTrSec[sec];}
72 Int_t Clusters2Tracks(AliESDEvent *esd);
73 static TTreeSRedirector* DebugStreamer() {return fgDebugStreamer;}
74 AliCluster* GetCluster(Int_t index) const;
75 AliTRDseedV1* GetTracklet(Int_t index) const;
76 AliKalmanTrack* GetTrack(Int_t index) const;
77 TClonesArray* GetListOfClusters() const {return fClusters;}
78 TClonesArray* GetListOfTracklets() const {return fTracklets;}
79 TClonesArray* GetListOfTracks() const {return fTracks;}
80 static Int_t GetNTimeBins() {return fgNTimeBins;}
81 static void GetExtrapolationConfig(Int_t iconfig, Int_t planes[2]);
82 static void GetSeedingConfig(Int_t iconfig, Int_t planes[4]);
83 static TLinearFitter* GetTiltedRiemanFitter();
84 static TLinearFitter* GetTiltedRiemanFitterConstraint();
85 static AliRieman* GetRiemanFitter();
86 static void FitRieman(AliTRDcluster **clusters, Double_t chi2[2]);
87 static Float_t FitRieman(AliTRDseedV1 *tracklets, Double_t *chi2, Int_t *planes = 0x0);
88 static Float_t FitTiltedRiemanConstraint(AliTRDseedV1 *tracklets, Double_t zVertex);
89 static Float_t FitTiltedRieman(AliTRDseedV1 *tracklets, Bool_t sigError);
91 static Double_t FitRiemanTilt(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
92 static Double_t FitLine(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
93 static Double_t FitKalman(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t up=0, Int_t np = 0, AliTrackPoint *points = 0x0);
95 Bool_t IsClustersOwner() const {return TestBit(kOwner);}
96 void SetClustersOwner(Bool_t own=kTRUE) {SetBit(kOwner, own); if(!own) fClusters = 0x0;}
98 Int_t FollowBackProlongation(AliTRDtrackV1 &t);
99 Int_t FollowProlongation(AliTRDtrackV1 &t);
100 Int_t LoadClusters(TTree *cTree);
101 Int_t LoadClusters(TClonesArray *clusters);
102 Int_t PropagateBack(AliESDEvent *event);
103 Int_t ReadClusters(TClonesArray* &array, TTree *in) const;
104 Int_t RefitInward(AliESDEvent *event);
105 static void SetNTimeBins(Int_t nTimeBins){fgNTimeBins = nTimeBins; }
106 void SetReconstructor(const AliTRDReconstructor *rec);
107 void UnloadClusters();
109 static Int_t Freq(Int_t n, const Int_t *inlist, Int_t *outlist, Bool_t down); // to be removed
111 class AliTRDLeastSquare{
114 ~AliTRDLeastSquare(){};
116 void AddPoint(Double_t *x, Double_t y, Double_t sigmaY);
117 void RemovePoint(Double_t *x, Double_t y, Double_t sigmaY);
120 Double_t GetFunctionParameter(Int_t ParNumber) const {return fParams[ParNumber];}
121 Double_t GetFunctionValue(Double_t *xpos) const;
122 void GetCovarianceMatrix(Double_t *storage) const;
124 AliTRDLeastSquare(const AliTRDLeastSquare &);
125 AliTRDLeastSquare& operator=(const AliTRDLeastSquare &);
126 Double_t fParams[2]; // Fitparameter
127 Double_t fCovarianceMatrix[3]; // Covariance Matrix
128 Double_t fSums[6]; // Sums
132 static Bool_t AdjustSector(AliTRDtrackV1 *track);
133 Double_t BuildSeedingConfigs(AliTRDtrackingChamber **stack, Int_t *configs);
134 Int_t BuildTrackingContainers();
135 static Float_t CalculateChi2Z(AliTRDseedV1 *tracklets, Double_t offset, Double_t slope, Double_t xref);
136 Int_t Clusters2TracksSM(Int_t sector, AliESDEvent *esd);
137 Int_t Clusters2TracksStack(AliTRDtrackingChamber **stack, TClonesArray *esdTrackList);
138 AliTRDseedV1* GetTracklet(AliTRDtrackV1 *trk, Int_t plane, Int_t &idx);
139 Bool_t GetTrackPoint(Int_t index, AliTrackPoint &p) const;
140 Int_t MakeSeeds(AliTRDtrackingChamber **stack, AliTRDseedV1 *sseed, Int_t *ipar);
141 AliTRDtrackV1* MakeTrack(AliTRDseedV1 *seeds, Double_t *params);
142 static Int_t PropagateToX(AliTRDtrackV1 &t, Double_t xToGo, Double_t maxStep);
143 AliTRDtrackV1* SetTrack(AliTRDtrackV1 *track);
144 AliTRDseedV1* SetTracklet(AliTRDseedV1 *tracklet);
147 AliTRDtrackerV1(const AliTRDtrackerV1 &tracker);
148 AliTRDtrackerV1 &operator=(const AliTRDtrackerV1 &tracker);
149 Double_t CookLikelihood(AliTRDseedV1 *cseed, Int_t planes[4]);
150 Double_t CalculateTrackLikelihood(AliTRDseedV1 *tracklets, Double_t *chi2);
151 Int_t ImproveSeedQuality(AliTRDtrackingChamber **stack, AliTRDseedV1 *tracklet);
152 static Float_t CalculateReferenceX(AliTRDseedV1 *tracklets);
154 Float_t GetChi2Y(AliTRDseedV1 *tracklets) const;
155 Float_t GetChi2Z(AliTRDseedV1 *tracklets) const;
158 const AliTRDReconstructor *fReconstructor; // reconstructor manager
159 AliTRDgeometry *fGeom; // Pointer to TRD geometry
160 AliTRDtrackingSector fTrSec[kTrackingSectors]; // Array of tracking sectors;
162 TClonesArray *fClusters; // List of clusters
163 TClonesArray *fTracklets; // List of tracklets
164 TClonesArray *fTracks; // List of tracks
166 // should go to the recoParam
167 static const Double_t fgkMaxChi2; // Max increment in track chi2
168 static const Float_t fgkMinClustersInTrack; // Min number of clusters in track
169 static const Float_t fgkLabelFraction; // Min fraction of same label
170 static const Double_t fgkMaxSnp; // Maximal snp for tracking
171 static const Double_t fgkMaxStep; // Maximal step for tracking
173 // stand alone tracking
174 static Double_t fgTopologicQA[kNConfigs]; // Topologic quality
175 Double_t fTrackQuality[kMaxTracksStack]; // Track quality
176 Int_t fSeedLayer[kMaxTracksStack]; // Seed layer
177 AliTRDchamberTimeBin *fSeedTB[kNSeedPlanes]; // seeding time bin planes
178 Int_t fSieveSeeding; //! Seeding iterator
180 static Int_t fgNTimeBins; // Timebins per plane in track prolongation
181 static TLinearFitter *fgTiltedRieman; // Fitter for the tilted Rieman fit without vertex constriant
182 static TLinearFitter *fgTiltedRiemanConstrained; // Fitter for the tilted Rieman fit with vertex constraint
183 static AliRieman *fgRieman; // Fitter for the untilted Rieman fit
185 static TTreeSRedirector *fgDebugStreamer; //!Debug streamer
187 ClassDef(AliTRDtrackerV1, 2) // TRD tracker development class