]>
Commit | Line | Data |
---|---|---|
32d38de2 | 1 | #ifndef ALIITSTRACKERU_H |
2 | #define ALIITSTRACKERU_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
53870004 | 6 | #define _FILL_CONTROL_HISTOS_ |
7 | ||
32d38de2 | 8 | //------------------------------------------------------------------------- |
9 | // ITS upgrade tracker base class | |
10 | //------------------------------------------------------------------------- | |
11 | ||
12 | #include "AliTracker.h" | |
13 | #include "AliESDEvent.h" | |
f8832015 | 14 | #include "AliITSUSeed.h" |
c8d1f258 | 15 | #include "AliITSUTrackCond.h" |
716ccba7 | 16 | #include "AliITSUTrackHyp.h" |
32d38de2 | 17 | |
18 | class AliITSUReconstructor; | |
19 | class AliITSURecoDet; | |
c61e50c3 | 20 | class AliITSUClusterPix; |
0091e9f0 | 21 | class AliESDtrack; |
e2d2481c | 22 | class AliITSURecoLayer; |
32d38de2 | 23 | class TTree; |
24 | ||
c61e50c3 | 25 | |
32d38de2 | 26 | //------------------------------------------------------------------------- |
27 | class AliITSUTrackerGlo : public AliTracker { | |
28 | ||
29 | public: | |
76390254 | 30 | enum {kClus2Tracks,kPropBack,kRefitInw,kNTrackingPhases}; // tracking phases |
32d38de2 | 31 | enum { // info from track extrapolation to layer for cluster check |
32 | kTrXIn ,kTrYIn ,kTrZIn ,kTrPhiIn , // entrance (outer) point on the layer from above | |
33 | kTrXOut,kTrYOut,kTrZOut,kTrPhiOut, // exit (inner) point on the layer | |
34 | kTrPhi0, kTrDPhi, kTrZ0, kTrDZ, // mean phi,dPhi, mean z, dZ (don't change this order) | |
c61e50c3 | 35 | kNTrImpData}; |
32d38de2 | 36 | // |
f8832015 | 37 | enum {kMissingCluster=0 // no cluster found on this layer |
38 | ,kTransportFailed=1 // seed did not reach target layer | |
32d38de2 | 39 | ,kRWCheckFailed =2 // failed to rotate the seed to frame of the layer impact point |
40 | }; | |
f8832015 | 41 | enum {kStopSearchOnSensor,kClusterNotMatching,kClusterMatching}; // flags for track-to-cluster checks |
dd2117a2 | 42 | // |
43 | enum {kDummyLabel=-3141593}; | |
38997c3c | 44 | // |
32d38de2 | 45 | AliITSUTrackerGlo(AliITSUReconstructor* rec); |
46 | virtual ~AliITSUTrackerGlo(); | |
47 | ||
48 | virtual Int_t Clusters2Tracks(AliESDEvent *event); | |
49 | virtual Int_t PropagateBack(AliESDEvent *event); | |
50 | virtual Int_t RefitInward(AliESDEvent *event); | |
51 | virtual Int_t LoadClusters(TTree * treeRP=0); | |
52 | virtual void UnloadClusters(); | |
53 | virtual AliCluster* GetCluster(Int_t index) const; | |
53870004 | 54 | void FlagSplitClusters(); |
55 | Bool_t ContainsSplitCluster(const AliITSUSeed* seed, Int_t maxSize=99999); | |
56 | void PrintSeedClusters(const AliITSUSeed* seed, Option_t* option=""); | |
0ddbf657 | 57 | // |
58 | Int_t GetCountPronlongationTrials() const {return fCountProlongationTrials;} | |
59 | Int_t GetCountITSin() const {return fCountITSin;} | |
60 | Int_t GetCountITSout() const {return fCountITSout;} | |
61 | Int_t GetCountITSrefit() const {return fCountITSrefit;} | |
62 | ||
0091e9f0 | 63 | //------------------------------------ |
64 | AliITSURecoDet* GetITSInterface() const {return fITS;} | |
65 | // | |
32d38de2 | 66 | //------------------------------------ |
67 | Bool_t NeedToProlong(AliESDtrack* estTr); | |
68 | void Init(AliITSUReconstructor* rec); | |
716ccba7 | 69 | void FindTrack(AliESDtrack* esdTr, Int_t esdID); |
42c3d4bd | 70 | void CreateDefaultTrackCond(); |
3e4e3c23 | 71 | Bool_t InitHypothesis(AliESDtrack *esdTr, Int_t esdID); |
32d38de2 | 72 | Bool_t TransportToLayer(AliITSUSeed* seed, Int_t lFrom, Int_t lTo); |
3e4e3c23 | 73 | Bool_t TransportToLayer(AliExternalTrackParam* seed, Int_t lFrom, Int_t lTo); |
b515ad7e | 74 | Bool_t TransportToLayerX(AliExternalTrackParam* seed, Int_t lFrom, Int_t lTo, Double_t xStop); |
e7d83d38 | 75 | Bool_t GoToExitFromLayer(AliITSUSeed* seed, AliITSURecoLayer* lr, Int_t dir, Bool_t check=kTRUE); |
76 | Bool_t GoToExitFromLayer(AliExternalTrackParam* seed, AliITSURecoLayer* lr, Int_t dir, Bool_t check=kTRUE); | |
e2d2481c | 77 | Bool_t GoToEntranceToLayer(AliITSUSeed* seed, AliITSURecoLayer* lr, Int_t dir, Bool_t check=kFALSE); |
78 | Bool_t GoToEntranceToLayer(AliExternalTrackParam* seed, AliITSURecoLayer* lr, Int_t dir, Bool_t check=kFALSE); | |
44785f3e | 79 | Bool_t PropagateSeed(AliITSUSeed *seed, Double_t xToGo, Double_t mass, Double_t maxStep=1.0, Bool_t matCorr=kTRUE); |
3e4e3c23 | 80 | Bool_t PropagateSeed(AliExternalTrackParam *seed, Double_t xToGo, Double_t mass, Double_t maxStep=1.0, Bool_t matCorr=kTRUE); |
68a0f687 | 81 | Bool_t RefitTrack(AliITSUTrackHyp* trc, Double_t r, Bool_t stopAtLastCl=kFALSE); |
e7d83d38 | 82 | Int_t GetTrackingPhase() const {return fTrackPhase;} |
83 | ||
44785f3e | 84 | // |
b8b59e05 | 85 | void KillSeed(AliITSUSeed* seed, Bool_t branch=kFALSE); |
c8d1f258 | 86 | Bool_t NeedToKill(AliITSUSeed* seed, Int_t flag); |
c61e50c3 | 87 | Bool_t GetRoadWidth(AliITSUSeed* seed, int ilrA); |
f8832015 | 88 | Int_t CheckCluster(AliITSUSeed* seed, Int_t lr, Int_t clID); |
89 | void AddProlongationHypothesis(AliITSUSeed* seed, Int_t lr); | |
38997c3c | 90 | Bool_t AddSeedBranch(AliITSUSeed* seed); |
91 | void ValidateAllowedBranches(Int_t accMax); | |
92 | void ValidateAllowedCandidates(Int_t ilr, Int_t accMax); | |
c61e50c3 | 93 | // |
94 | AliITSUSeed* NewSeedFromPool(const AliITSUSeed* src=0); | |
b8b59e05 | 95 | void ResetSeedsPool(); |
96 | void MarkSeedFree(AliITSUSeed* seed ); | |
97 | ||
716ccba7 | 98 | AliITSUTrackHyp* GetTrackHyp(Int_t id) const {return (AliITSUTrackHyp*)fHypStore.UncheckedAt(id);} |
99 | void SetTrackHyp(AliITSUTrackHyp* hyp,Int_t id) {fHypStore.AddAtAndExpand(hyp,id);} | |
100 | void DeleteLastSeedFromPool() {fSeedsPool.RemoveLast();} | |
101 | void SaveCurrentTrackHypotheses(); | |
3e4e3c23 | 102 | void FinalizeHypotheses(); |
68a0f687 | 103 | void UpdateESDTrack(AliITSUTrackHyp* hyp,Int_t flag); |
dd2117a2 | 104 | void CookMCLabel(AliITSUTrackHyp* hyp); |
e7d83d38 | 105 | void SetTrackingPhase(Int_t p) {fTrackPhase = p;} |
716ccba7 | 106 | // |
b8b59e05 | 107 | protected: |
108 | TObject*& NextFreeSeed(); | |
109 | // | |
32d38de2 | 110 | private: |
b8b59e05 | 111 | // |
32d38de2 | 112 | AliITSUTrackerGlo(const AliITSUTrackerGlo&); |
113 | AliITSUTrackerGlo &operator=(const AliITSUTrackerGlo &tr); | |
114 | // | |
115 | protected: | |
116 | AliITSUReconstructor* fReconstructor; // ITS global reconstructor | |
3d4dc3e2 | 117 | AliITSURecoDet* fITS; // interface to ITS, borrowed from reconstructor |
0091e9f0 | 118 | AliESDtrack* fCurrESDtrack; // current esd track in processing |
0ddbf657 | 119 | Int_t fCurrESDtrMClb; // its eventual mc label |
32d38de2 | 120 | Double_t fCurrMass; // current track mass |
c61e50c3 | 121 | Double_t fTrImpData[kNTrImpData]; // data on track impact on the layer |
32d38de2 | 122 | // |
0ddbf657 | 123 | Int_t fCountProlongationTrials; // number of TPC seeds |
124 | Int_t fCountITSin; // number of successful ITSin | |
125 | Int_t fCountITSout; // number of successful ITSout | |
126 | Int_t fCountITSrefit; // number of successful ITSrefit | |
127 | // | |
c61e50c3 | 128 | // the seeds management to be optimized |
716ccba7 | 129 | TObjArray fHypStore; // storage for tracks hypotheses |
38997c3c | 130 | AliITSUSeed* fLayerCandidates[AliITSUTrackCond::kMaxCandidates]; // array for branches of current track prolongation |
131 | Int_t fNBranchesAdded; // number of branches created for current seed in prolongation | |
132 | Int_t fNCandidatesAdded; // number of candidates added for current seed in prolongation | |
716ccba7 | 133 | AliITSUTrackHyp* fCurrHyp; // hypotheses container for current track |
b8b59e05 | 134 | TClonesArray fSeedsPool; //! pool for seeds |
135 | TArrayI fFreeSeedsID; //! array of ID's of freed seeds | |
136 | Int_t fNFreeSeeds; //! number of seeds freed in the pool | |
137 | Int_t fLastSeedID; //! id of the pool seed on which is returned by the NextFreeSeed method | |
c8d1f258 | 138 | // |
42c3d4bd | 139 | TObjArray fDefTrackConds; //! default tracking conditions |
140 | AliITSUTrackCond* fCurrTrackCond; // current tracking condition | |
c51c3124 | 141 | Int_t fTrackPhase; // tracking phase |
8b16dbae | 142 | Int_t* fClInfo; //! auxiliary track cluster info |
c8d1f258 | 143 | // |
e2d2481c | 144 | static const Double_t fgkToler; // tracking tolerance |
145 | // | |
53870004 | 146 | #ifdef _FILL_CONTROL_HISTOS_ |
147 | // this code is only for special histos needed to extract some control parameters | |
148 | void BookControlHistos(); | |
149 | TObjArray* fCHistoArr; | |
150 | enum {kHResY=0,kHResYP=10,kHResZ=20,kHResZP=30,kHChi2Cl=40}; | |
151 | enum {kHistosPhase=100}; | |
152 | // | |
153 | #endif | |
154 | ||
32d38de2 | 155 | ClassDef(AliITSUTrackerGlo,1) //ITS upgrade tracker |
156 | ||
157 | }; | |
f8832015 | 158 | |
b8b59e05 | 159 | //________________________________________ |
160 | inline TObject *&AliITSUTrackerGlo::NextFreeSeed() | |
161 | { | |
162 | // return next free slot where the seed can be created | |
163 | fLastSeedID = fNFreeSeeds ? fFreeSeedsID.GetArray()[--fNFreeSeeds] : fSeedsPool.GetEntriesFast(); | |
164 | // AliInfo(Form("%d",fLastSeedID)); | |
165 | return fSeedsPool[ fLastSeedID ]; | |
166 | // | |
167 | } | |
168 | ||
169 | //_________________________________________________________________________ | |
170 | inline AliITSUSeed* AliITSUTrackerGlo::NewSeedFromPool(const AliITSUSeed* src) | |
171 | { | |
172 | // create new seed, optionally copying from the source | |
173 | AliITSUSeed* sd = src ? new( NextFreeSeed() ) AliITSUSeed(*src) : new( NextFreeSeed() ) AliITSUSeed(); | |
174 | sd->SetPoolID(fLastSeedID); | |
175 | return sd; | |
176 | } | |
177 | ||
178 | //_________________________________________________________________________ | |
179 | inline void AliITSUTrackerGlo::KillSeed(AliITSUSeed* seed, Bool_t branch) | |
180 | { | |
181 | // flag seed as killed, if requested, kill recursively its parents whose sole child is the seed being killed | |
182 | seed->Kill(); | |
183 | seed = (AliITSUSeed*)seed->GetParent(); | |
184 | if (seed && !seed->DecChildren() && branch) KillSeed(seed,branch); | |
185 | } | |
f8832015 | 186 | |
38997c3c | 187 | //_________________________________________________________________________ |
188 | inline void AliITSUTrackerGlo::AddProlongationHypothesis(AliITSUSeed* seed, Int_t lr) | |
189 | { | |
190 | // add new seed prolongation hypothesis | |
191 | fCurrHyp->AddSeed(seed,lr); | |
192 | } | |
193 | ||
32d38de2 | 194 | #endif |
195 |