]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDseedV1.h
Do not change the track parameters if the propagation fails (Yuri)
[u/mrichter/AliRoot.git] / TRD / AliTRDseedV1.h
CommitLineData
e4f2f73d 1#ifndef ALITRDSEEDV1_H
2#define ALITRDSEEDV1_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
e44586fb 4* See cxx source for full Copyright notice */
e4f2f73d 5
6/* $Id$ */
7
8////////////////////////////////////////////////////////////////////////////
9// //
10// The TRD track seed //
11// //
12////////////////////////////////////////////////////////////////////////////
13
14#ifndef ALITRDSEED_H
15#include "AliTRDseed.h"
16#endif
17
ae4e8b84 18#ifndef ALITRDGEOMETRY_H
19#include "AliTRDgeometry.h"
20#endif
21
0906e73e 22#ifndef ALIPID_H
23#include "AliPID.h"
24#endif
25
e4f2f73d 26#ifndef ALIRIEMAN_H
27#include "AliRieman.h"
28#endif
29
30class TTreeSRedirector;
31
32class AliRieman;
33
eb38ed55 34class AliTRDtrackingChamber;
e4f2f73d 35class AliTRDcluster;
f3d3af1b 36class AliTRDtrackV1;
3a039a31 37class AliTRDReconstructor;
e4f2f73d 38class AliTRDseedV1 : public AliTRDseed
39{
fbb2ea06 40
0906e73e 41 public:
42
e44586fb 43 enum {
44 knSlices = 10
45 };
2e2915e7 46 // bits from 0-13 are reserved by ROOT (see TObject.h)
e44586fb 47 enum AliTRDtrackletStatus {
2e2915e7 48 kOwner = BIT(14)
49 , kRowCross = BIT(15)
e44586fb 50 };
51
ae4e8b84 52 AliTRDseedV1(Int_t det = -1);
e44586fb 53 ~AliTRDseedV1();
54 AliTRDseedV1(const AliTRDseedV1 &ref);
55 AliTRDseedV1& operator=(const AliTRDseedV1 &ref);
56
203967fc 57 Bool_t AttachClustersIter(
58 AliTRDtrackingChamber *chamber, Float_t quality,
59 Bool_t kZcorr = kFALSE, AliTRDcluster *c=0x0);
60 Bool_t AttachClusters(
61 AliTRDtrackingChamber *chamber, Bool_t kZcorr = kFALSE);
62 void Bootstrap(const AliTRDReconstructor *rec);
63 void CookdEdx(Int_t nslices);
d937ad7a 64 Bool_t Fit(Bool_t tilt=kTRUE, Int_t errors = 2);
203967fc 65
66 Bool_t Init(AliTRDtrackV1 *track);
e44586fb 67 inline void Init(const AliRieman *fit);
203967fc 68 Bool_t IsEqual(const TObject *inTracklet) const;
e44586fb 69 Bool_t IsOwner() const { return TestBit(kOwner);}
70 Bool_t IsRowCross() const { return TestBit(kRowCross);}
71
72 inline Float_t GetChi2Z(const Float_t z = 999.) const;
73 inline Float_t GetChi2Y(const Float_t y = 999.) const;
d937ad7a 74 static void GetClusterXY(const AliTRDcluster *c, Double_t &x, Double_t &y);
e44586fb 75 void GetCovAt(Double_t x, Double_t *cov) const;
d937ad7a 76 void GetCovXY(Double_t *cov) const { memcpy(cov, &fCov[0], 3*sizeof(Double_t));}
ac6764f5 77 void GetCovRef(Double_t *cov) const { memcpy(cov, &fRefCov[0], 3*sizeof(Double_t));}
203967fc 78 Double_t* GetCrossXYZ() { return &fCross[0];}
79 Double_t GetCrossSz2() const { return fCross[3];}
80 Float_t GetdX() const { return fdX;}
81 Float_t* GetdEdx() { return &fdEdx[0];}
e44586fb 82 Float_t GetdQdl(Int_t ic) const;
203967fc 83 Int_t GetDetector() const { return fDet;}
d937ad7a 84 Float_t GetExB() const { return fExB;}
203967fc 85 Double_t GetMomentum() const { return fMom;}
86 Int_t GetN() const { return fN2;}
e44586fb 87 Float_t GetQuality(Bool_t kZcorr) const;
ae4e8b84 88 Int_t GetPlane() const { return AliTRDgeometry::GetLayer(fDet); }
89
e44586fb 90 Double_t* GetProbability();
91 Double_t GetSnp() const { return fSnp;}
92 Double_t GetTgl() const { return fTgl;}
6e4d4425 93 Float_t GetXref() const { return fXref;}
0849f128 94 Double_t GetYat(Double_t x) const { return fYfit[0] + fYfit[1] * (fX0-x);}
95 Double_t GetZat(Double_t x) const { return fZfit[0] + fZfit[1] * (fX0-x);}
e44586fb 96
ae4e8b84 97 inline AliTRDcluster* NextCluster();
71ea19a3 98 inline AliTRDcluster* PrevCluster();
e44586fb 99 void Print(Option_t *o = "") const;
71ea19a3 100 inline void ResetClusterIter(Bool_t forward = kTRUE);
ae4e8b84 101
0849f128 102 void SetCovRef(const Double_t *cov) { memcpy(&fRefCov[0], cov, 3*sizeof(Double_t));}
203967fc 103 void SetMomentum(Double_t mom){ fMom = mom;}
29b87567 104 void SetOwner();
203967fc 105 void SetDetector(Int_t d) { fDet = d; }
bee2b41e 106 void SetDX(Float_t inDX) { fdX = inDX;}
203967fc 107 void SetSnp(Double_t snp) { fSnp = snp;}
108 void SetTgl(Double_t tgl) { fTgl = tgl;}
3a039a31 109 void SetReconstructor(const AliTRDReconstructor *rec) {fReconstructor = rec;}
e4f2f73d 110
d937ad7a 111protected:
e44586fb 112 void Copy(TObject &ref) const;
d937ad7a 113 void SetExB();
e4f2f73d 114
e44586fb 115private:
0ae89c5d 116 const AliTRDReconstructor *fReconstructor;//! local reconstructor
ae4e8b84 117 AliTRDcluster **fClusterIter; //! clusters iterator
71ea19a3 118 Char_t fClusterIdx; //! clusters iterator
ae4e8b84 119 Int_t fDet; // TRD detector
e44586fb 120 Float_t fMom; // Momentum estimate for tracklet [GeV/c]
121 Float_t fSnp; // sin of track with respect to x direction in XY plane
122 Float_t fTgl; // tg of track with respect to x direction in XZ plane
123 Float_t fdX; // length of time bin
6e4d4425 124 Float_t fXref; // average radial position of clusters
d937ad7a 125 Float_t fExB; // tg(a_L) for the tracklet reagion
6e4d4425 126 Float_t fdEdx[knSlices]; // dE/dx measurements for tracklet
127 Double_t fCross[4]; // spatial parameters of the pad row crossing
128 Double_t fRefCov[3]; // covariance matrix of the track in the yz plane
d937ad7a 129 Double_t fCov[3]; // covariance matrix of the tracklet in the xy plane
e44586fb 130 Double_t fProb[AliPID::kSPECIES]; // PID probabilities
e4f2f73d 131
d937ad7a 132 ClassDef(AliTRDseedV1, 4) // New TRD seed
e4f2f73d 133
134};
135
136//____________________________________________________________
137inline Float_t AliTRDseedV1::GetChi2Z(const Float_t z) const
138{
e44586fb 139 Float_t z1 = (z == 999.) ? fMeanz : z;
140 Float_t chi = fZref[0] - z1;
141 return chi*chi;
e4f2f73d 142}
143
144//____________________________________________________________
145inline Float_t AliTRDseedV1::GetChi2Y(const Float_t y) const
146{
e44586fb 147 Float_t y1 = (y == 999.) ? fYfitR[0] : y;
148 Float_t chi = fYref[0] - y1;
149 return chi*chi;
e4f2f73d 150}
151
152//____________________________________________________________
0906e73e 153inline void AliTRDseedV1::Init(const AliRieman *rieman)
e4f2f73d 154{
e44586fb 155 fZref[0] = rieman->GetZat(fX0);
156 fZref[1] = rieman->GetDZat(fX0);
157 fYref[0] = rieman->GetYat(fX0);
158 fYref[1] = rieman->GetDYat(fX0);
55ef6967 159 fC = rieman->GetC();
160 fChi2 = rieman->GetChi2();
e4f2f73d 161}
162
ae4e8b84 163//____________________________________________________________
164inline AliTRDcluster* AliTRDseedV1::NextCluster()
165{
71ea19a3 166// Mimic the usage of STL iterators.
167// Forward iterator
168
ae4e8b84 169 fClusterIdx++; fClusterIter++;
71ea19a3 170 while(fClusterIdx < AliTRDseed::knTimebins){
171 if(!(*fClusterIter)){
172 fClusterIdx++;
173 fClusterIter++;
174 continue;
175 }
176 return *fClusterIter;
177 }
178 return 0x0;
179}
180
181//____________________________________________________________
182inline AliTRDcluster* AliTRDseedV1::PrevCluster()
183{
184// Mimic the usage of STL iterators.
185// Backward iterator
186
187 fClusterIdx--; fClusterIter--;
188 while(fClusterIdx >= 0){
189 if(!(*fClusterIter)){
190 fClusterIdx--;
191 fClusterIter--;
192 continue;
193 }
194 return *fClusterIter;
195 }
196 return 0x0;
197}
198
199//____________________________________________________________
200inline void AliTRDseedV1::ResetClusterIter(Bool_t forward)
201{
202// Mimic the usage of STL iterators.
203// Facilitate the usage of NextCluster for forward like
204// iterator (kTRUE) and PrevCluster for backward like iterator (kFALSE)
205
206 if(forward){
207 fClusterIter = &fClusters[0]; fClusterIter--;
208 fClusterIdx=-1;
209 } else {
210 fClusterIter = &fClusters[AliTRDseed::knTimebins-1]; fClusterIter++;
211 fClusterIdx=AliTRDseed::knTimebins;
212 }
ae4e8b84 213}
214
e4f2f73d 215#endif
216
47d5d320 217
6e49cfdb 218