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