]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - TRD/AliTRDseedV1.h
Introduce iterator for looping over clusters
[u/mrichter/AliRoot.git] / TRD / AliTRDseedV1.h
... / ...
CommitLineData
1#ifndef ALITRDSEEDV1_H
2#define ALITRDSEEDV1_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4* See cxx source for full Copyright notice */
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
18#ifndef ALITRDGEOMETRY_H
19#include "AliTRDgeometry.h"
20#endif
21
22#ifndef ALIPID_H
23#include "AliPID.h"
24#endif
25
26#ifndef ALIRIEMAN_H
27#include "AliRieman.h"
28#endif
29
30class TTreeSRedirector;
31
32class AliRieman;
33
34class AliTRDtrackingChamber;
35class AliTRDcluster;
36class AliTRDtrackV1;
37class AliTRDReconstructor;
38class AliTRDseedV1 : public AliTRDseed
39{
40
41 public:
42
43 enum {
44 knSlices = 10
45 };
46 // bits from 0-13 are reserved by ROOT (see TObject.h)
47 enum AliTRDtrackletStatus {
48 kOwner = BIT(14)
49 , kRowCross = BIT(15)
50 };
51
52 AliTRDseedV1(Int_t det = -1);
53 ~AliTRDseedV1();
54 AliTRDseedV1(const AliTRDseedV1 &ref);
55 AliTRDseedV1& operator=(const AliTRDseedV1 &ref);
56
57 Bool_t AttachClustersIter(AliTRDtrackingChamber *chamber, Float_t quality, Bool_t kZcorr = kFALSE
58 , AliTRDcluster *c=0x0);
59 Bool_t AttachClusters(AliTRDtrackingChamber *chamber, Bool_t kZcorr = kFALSE);
60 void CookdEdx(Int_t nslices);
61 void Draw(Option_t* o = "");
62 Bool_t Fit(Bool_t tilt=kTRUE);
63
64 Bool_t Init(AliTRDtrackV1 *track);
65 inline void Init(const AliRieman *fit);
66 Bool_t IsOwner() const { return TestBit(kOwner);}
67 Bool_t IsRowCross() const { return TestBit(kRowCross);}
68
69 inline Float_t GetChi2Z(const Float_t z = 999.) const;
70 inline Float_t GetChi2Y(const Float_t y = 999.) const;
71 void GetCovAt(Double_t x, Double_t *cov) const;
72 Double_t* GetCrossXYZ() { return &fCross[0];}
73 Double_t GetCrossSz2() const { return fCross[3];}
74 Float_t* GetdEdx() {return &fdEdx[0];}
75 Float_t GetdQdl(Int_t ic) const;
76 Int_t GetDetector() const {return fDet;}
77 Double_t GetMomentum() const {return fMom;}
78 Int_t GetN() const {return fN2;}
79 Float_t GetQuality(Bool_t kZcorr) const;
80 Int_t GetPlane() const { return AliTRDgeometry::GetLayer(fDet); }
81
82 Double_t* GetProbability();
83 Double_t GetSnp() const { return fSnp;}
84 Double_t GetTgl() const { return fTgl;}
85 Double_t GetYat(Double_t x) const { return fYfit[0] + fYfit[1] * (x-fX0);}
86 Double_t GetZat(Double_t x) const { return fZfit[0] + fZfit[1] * (x-fX0);}
87
88 inline AliTRDcluster* NextCluster();
89 void Print(Option_t *o = "") const;
90 void ResetClusterIter() {fClusterIter = &fClusters[0]; fClusterIter--; fClusterIdx=-1;}
91
92 void SetMomentum(Double_t mom) {fMom = mom;}
93 void SetOwner();
94 void SetDetector(Int_t d) {fDet = d; }
95 void SetSnp(Double_t snp) {fSnp = snp;}
96 void SetTgl(Double_t tgl) {fTgl = tgl;}
97 void SetReconstructor(const AliTRDReconstructor *rec) {fReconstructor = rec;}
98protected:
99
100 void Copy(TObject &ref) const;
101
102private:
103 const AliTRDReconstructor *fReconstructor;//! local reconstructor
104 AliTRDcluster **fClusterIter; //! clusters iterator
105 UChar_t fClusterIdx; //! clusters iterator
106 Int_t fDet; // TRD detector
107 Float_t fMom; // Momentum estimate for tracklet [GeV/c]
108 Float_t fSnp; // sin of track with respect to x direction in XY plane
109 Float_t fTgl; // tg of track with respect to x direction in XZ plane
110 Float_t fdX; // length of time bin
111 Float_t fdEdx[knSlices]; // dE/dx measurements for tracklet
112 Double_t fCross[4]; // spatial parameters of the pad row crossing
113 Double_t fProb[AliPID::kSPECIES]; // PID probabilities
114
115 ClassDef(AliTRDseedV1, 2) // New TRD seed
116
117};
118
119//____________________________________________________________
120inline Float_t AliTRDseedV1::GetChi2Z(const Float_t z) const
121{
122 Float_t z1 = (z == 999.) ? fMeanz : z;
123 Float_t chi = fZref[0] - z1;
124 return chi*chi;
125}
126
127//____________________________________________________________
128inline Float_t AliTRDseedV1::GetChi2Y(const Float_t y) const
129{
130 Float_t y1 = (y == 999.) ? fYfitR[0] : y;
131 Float_t chi = fYref[0] - y1;
132 return chi*chi;
133}
134
135//____________________________________________________________
136inline void AliTRDseedV1::Init(const AliRieman *rieman)
137{
138 fZref[0] = rieman->GetZat(fX0);
139 fZref[1] = rieman->GetDZat(fX0);
140 fYref[0] = rieman->GetYat(fX0);
141 fYref[1] = rieman->GetDYat(fX0);
142 fC = rieman->GetC();
143 fChi2 = rieman->GetChi2();
144}
145
146//____________________________________________________________
147inline AliTRDcluster* AliTRDseedV1::NextCluster()
148{
149 fClusterIdx++; fClusterIter++;
150 while(!(*fClusterIter) && fClusterIdx < AliTRDseed::knTimebins){ fClusterIdx++; fClusterIter++;}
151 return *fClusterIter;
152}
153
154#endif
155
156
157