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;
44 class AliTRDtrackingChamber;
45 class AliTRDchamberTimeBin;
46 class AliTRDtrackerFitter;
49 class AliTRDtrackerV1 : public AliTracker
53 kMaxLayersPerSector = 1000
54 , kMaxTimeBinIndex = 216
55 , kTrackingSectors = 18
59 , kMaxTracksStack = 100
63 virtual ~AliTRDtrackerV1();
66 AliTRDtrackingSector* GetTrackingSector(Int_t sec) {return &fTrSec[sec];}
68 Int_t Clusters2Tracks(AliESDEvent *esd);
69 static TTreeSRedirector* DebugStreamer() {return fgDebugStreamer;}
70 AliCluster* GetCluster(Int_t index) const;
71 static void GetExtrapolationConfig(Int_t iconfig, Int_t planes[2]);
72 static void GetSeedingConfig(Int_t iconfig, Int_t planes[4]);
73 static TLinearFitter *GetTiltedRiemanFitter();
74 static TLinearFitter *GetTiltedRiemanFitterConstraint();
75 static AliRieman *GetRiemanFitter();
76 static void FitRieman(AliTRDcluster **clusters, Double_t chi2[2]);
77 static Float_t FitRieman(AliTRDseedV1 *tracklets, Double_t *chi2, Int_t *planes = 0x0);
78 static Float_t FitTiltedRiemanConstraint(AliTRDseedV1 *tracklets, Double_t zVertex);
79 static Float_t FitTiltedRieman(AliTRDseedV1 *tracklets, Bool_t sigError);
81 Int_t FollowBackProlongation(AliTRDtrackV1 &t);
82 Int_t FollowProlongation(AliTRDtrackV1 &t);
83 Int_t LoadClusters(TTree *cTree);
84 Int_t PropagateBack(AliESDEvent *event);
85 Int_t ReadClusters(TClonesArray* &array, TTree *in) const;
86 Int_t RefitInward(AliESDEvent *event);
87 void UnloadClusters();
89 static Int_t Freq(Int_t n, const Int_t *inlist, Int_t *outlist, Bool_t down); // to be removed
92 Bool_t AdjustSector(AliTRDtrackV1 *track);
93 Double_t BuildSeedingConfigs(AliTRDtrackingChamber **stack, Int_t *configs);
94 static Float_t CalculateChi2Z(AliTRDseedV1 *tracklets, Double_t offset, Double_t slope);
95 Int_t Clusters2TracksSM(Int_t sector, AliESDEvent *esd);
96 Int_t Clusters2TracksStack(AliTRDtrackingChamber **stack, TClonesArray *esdTrackList);
97 void CookLabel(AliKalmanTrack *pt, Float_t wrong) const;
98 AliTRDcluster* FindSeedingCluster(AliTRDtrackingChamber *chamber, AliTRDseedV1 *sfit) const;
99 Int_t GetSeedingLayers(AliTRDtrackingChamber *chamber, Double_t *params);
100 void GetMeanCLStack(AliTRDtrackingChamber *chamber, Int_t *planes, Double_t *params);
101 AliTRDseedV1* GetTracklet(AliTRDtrackV1 *trk, Int_t plane, Int_t &idx);
102 Bool_t GetTrackPoint(Int_t index, AliTrackPoint &p) const;
103 Int_t MakeSeeds(AliTRDtrackingChamber **stack, AliTRDseedV1 *sseed, Int_t *ipar);
104 AliTRDtrackV1* MakeTrack(AliTRDseedV1 *seeds, Double_t *params);
105 Int_t PropagateToX(AliTRDtrackV1 &t, Double_t xToGo, Double_t maxStep);
106 Int_t SetTracklet(AliTRDseedV1 *tracklet);
109 AliTRDtrackerV1(const AliTRDtrackerV1 &tracker);
110 AliTRDtrackerV1 &operator=(const AliTRDtrackerV1 &tracker);
111 Double_t CookLikelihood(AliTRDseedV1 *cseed, Int_t planes[4], Double_t *chi2);
112 Double_t CalculateTrackLikelihood(AliTRDseedV1 *tracklets, Double_t *chi2);
113 Int_t ImproveSeedQuality(AliTRDtrackingChamber **stack, AliTRDseedV1 *tracklet);
116 AliTRDgeometry *fGeom; // Pointer to TRD geometry
117 AliTRDtrackingSector fTrSec[kTrackingSectors]; // Array of tracking sectors;
119 TClonesArray *fClusters; // List of clusters
120 TClonesArray *fTracklets; // List of tracklets
121 TClonesArray *fTracks; // List of tracks
122 Int_t fTimeBinsPerPlane; // Timebins per plane in track prolongation
124 // should go to the recoParam
125 static const Double_t fgkMaxChi2; // Max increment in track chi2
126 static const Float_t fgkMinClustersInTrack; // Min number of clusters in track
127 static const Float_t fgkLabelFraction; // Min fraction of same label
128 static const Double_t fgkMaxSnp; // Maximal snp for tracking
129 static const Double_t fgkMaxStep; // Maximal step for tracking
131 // stand alone tracking
132 static Double_t fgTopologicQA[kNConfigs]; // Topologic quality
133 Double_t fTrackQuality[kMaxTracksStack]; // Track quality
134 Int_t fSeedLayer[kMaxTracksStack]; // Seed layer
135 Int_t fSieveSeeding; //! Seeding iterator
137 static TLinearFitter *fgTiltedRieman; // Fitter for the tilted Rieman fit without vertex constriant
138 static TLinearFitter *fgTiltedRiemanConstrained; // Fitter for the tilted Rieman fit with vertex constraint
139 static AliRieman *fgRieman; // Fitter for the untilted Rieman fit
140 static TTreeSRedirector *fgDebugStreamer; //!Debug streamer
142 ClassDef(AliTRDtrackerV1, 2) // TRD tracker development class