]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TPC/AliTPCtracker.h
SetLabel replaced by SetNumber (Yu.Belikov)
[u/mrichter/AliRoot.git] / TPC / AliTPCtracker.h
CommitLineData
73042f01 1#ifndef ALITPCTRACKER_H
2#define ALITPCTRACKER_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// TPC tracker
10//
11// Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch
12//-------------------------------------------------------
b9de75e1 13#include "AliTracker.h"
73042f01 14#include "AliTPCtrack.h"
b9de75e1 15#include "AliTPCreco.h"
bcc04e2a 16#include "AliTPCcluster.h"
9c9d2487 17#include "AliBarrelTrack.h"
73042f01 18
19class TFile;
3d31f272 20class TTree;
21class TBranch;
b9de75e1 22class AliTPCParam;
bcc04e2a 23class TObjArray;
83d73500 24class AliESD;
73042f01 25
b9de75e1 26class AliTPCtracker : public AliTracker {
73042f01 27public:
e502c8c2 28 AliTPCtracker():AliTracker(),fkNIS(0),fkNOS(0) {
29 fInnerSec=fOuterSec=0; fSeeds=0;
e3f7105e 30 fParam = 0;
e502c8c2 31 }
bcc04e2a 32 AliTPCtracker(const AliTPCParam *par);
b9de75e1 33 ~AliTPCtracker();
34
35 Int_t ReadSeeds(const TFile *in);
36
e24ea474 37 Int_t LoadClusters();
83d73500 38 Int_t LoadClusters(const TFile *cf);
bcc04e2a 39 void UnloadClusters();
73042f01 40
b9de75e1 41 AliCluster *GetCluster(Int_t index) const;
42 Int_t Clusters2Tracks(const TFile *in, TFile *out);
83d73500 43 Int_t Clusters2Tracks(AliESD *event);
b9de75e1 44 Int_t PropagateBack(const TFile *in, TFile *out);
83d73500 45 Int_t PropagateBack(AliESD *event);
e24ea474 46 Int_t PropagateBack(const TFile *in, const TFile *in2, TFile *out);
08dba16b 47 Int_t RefitInward(TFile *outTracks, TFile *inTracks);
b9de75e1 48
49 virtual void CookLabel(AliKalmanTrack *t,Float_t wrong) const;
50
51public:
73042f01 52//**************** Internal tracker class **********************
53 class AliTPCRow {
54 public:
bcc04e2a 55 AliTPCRow() {
56 fN=0;
57 fSize=kMaxClusterPerRow/8;
58 fClusterArray=new AliTPCcluster[fSize];
59 }
60 ~AliTPCRow() {delete[] fClusterArray;}
61 void InsertCluster(const AliTPCcluster *c, Int_t sec, Int_t row);
62 void ResetClusters() {fN=0;}
73042f01 63 operator int() const {return fN;}
bcc04e2a 64 const AliTPCcluster *operator[](Int_t i) const {return fClusters[i];}
65 const AliTPCcluster *GetUnsortedCluster(Int_t i) const {
66 return fClusterArray+i;
67 }
73042f01 68 UInt_t GetIndex(Int_t i) const {return fIndex[i];}
69 Int_t Find(Double_t y) const;
b9de75e1 70 void SetX(Double_t x) {fX=x;}
71 Double_t GetX() const {return fX;}
73042f01 72
73 private:
b9de75e1 74 Int_t fN; //number of clusters
75 const AliTPCcluster *fClusters[kMaxClusterPerRow]; //pointers to clusters
bcc04e2a 76 Int_t fSize; //size of array of clusters
77 AliTPCcluster *fClusterArray; //array of clusters
b9de75e1 78 UInt_t fIndex[kMaxClusterPerRow]; //indeces of clusters
79 Double_t fX; //X-coordinate of this row
73042f01 80
81 private:
82 AliTPCRow(const AliTPCRow& r); //dummy copy constructor
83 AliTPCRow &operator=(const AliTPCRow& r); //dummy assignment operator
84 };
85
86//**************** Internal tracker class **********************
87 class AliTPCSector {
88 public:
89 AliTPCSector() { fN=0; fRow = 0; }
b9de75e1 90 ~AliTPCSector() { delete[] fRow; }
73042f01 91 AliTPCRow& operator[](Int_t i) const { return *(fRow+i); }
92 Int_t GetNRows() const { return fN; }
b9de75e1 93 void Setup(const AliTPCParam *par, Int_t flag);
94 Double_t GetX(Int_t l) const {return fRow[l].GetX();}
95 Double_t GetMaxY(Int_t l) const {
96 return GetX(l)*TMath::Tan(0.5*GetAlpha());
97 }
98 Double_t GetAlpha() const {return fAlpha;}
99 Double_t GetAlphaShift() const {return fAlphaShift;}
100 Int_t GetRowNumber(Double_t x) const {
101 //return pad row number for this x
f03e3423 102 Double_t r;
b46635a4 103 if (fN < 64){
f03e3423 104 r=fRow[fN-1].GetX();
105 if (x > r) return fN;
106 r=fRow[0].GetX();
107 if (x < r) return -1;
29fe0389 108 return Int_t((x-r)/f1PadPitchLength + 0.5);}
f03e3423 109 else{
110 r=fRow[fN-1].GetX();
111 if (x > r) return fN;
112 r=fRow[0].GetX();
113 if (x < r) return -1;
114 Double_t r1=fRow[64].GetX();
115 if(x<r1){
116 return Int_t((x-r)/f1PadPitchLength + 0.5);}
117 else{
118 return (Int_t((x-r1)/f2PadPitchLength + 0.5)+64);}
119 }
b9de75e1 120 }
121 Double_t GetPadPitchWidth() const {return fPadPitchWidth;}
b9de75e1 122
123 private:
124 Int_t fN; //number of pad rows
73042f01 125 AliTPCRow *fRow; //array of pad rows
b9de75e1 126 Double_t fAlpha; //opening angle
127 Double_t fAlphaShift; //shift angle;
128 Double_t fPadPitchWidth; //pad pitch width
bcc04e2a 129 Double_t f1PadPitchLength; //pad pitch length
130 Double_t f2PadPitchLength; //pad pitch length
73042f01 131 private:
132 AliTPCSector(const AliTPCSector &s); //dummy copy contructor
133 AliTPCSector& operator=(const AliTPCSector &s);//dummy assignment operator
134 };
135
73042f01 136//**************** Internal tracker class **********************
137 class AliTPCseed : public AliTPCtrack {
138 public:
139 AliTPCseed():AliTPCtrack(){}
b9de75e1 140 AliTPCseed(const AliTPCtrack &t):AliTPCtrack(t){}
141 AliTPCseed(const AliKalmanTrack &t, Double_t a):AliTPCtrack(t,a){}
73042f01 142 AliTPCseed(UInt_t index, const Double_t xx[5],
143 const Double_t cc[15], Double_t xr, Double_t alpha):
144 AliTPCtrack(index, xx, cc, xr, alpha) {}
145 void SetSampledEdx(Float_t q, Int_t i) {
be9c5115 146 Double_t s=GetSnp(), t=GetTgl();
147 q *= TMath::Sqrt((1-s*s)/(1+t*t));
d4cf1daa 148 fdEdxSample[i]=q;
73042f01 149 }
73042f01 150 void CookdEdx(Double_t low=0.05, Double_t up=0.70);
151
152 private:
d4cf1daa 153 Float_t fdEdxSample[200]; //array of dE/dx samples
73042f01 154 };
155
156private:
08dba16b 157
b9de75e1 158 void MakeSeeds(Int_t i1, Int_t i2);
159 Int_t FollowProlongation(AliTPCseed& t, Int_t rf=0);
160 Int_t FollowBackProlongation(AliTPCseed &s, const AliTPCtrack &t);
08dba16b 161 Int_t FollowRefitInward(AliTPCseed *seed, AliTPCtrack *track);
b9de75e1 162
163 AliTPCtracker(const AliTPCtracker& r); //dummy copy constructor
164 AliTPCtracker &operator=(const AliTPCtracker& r);//dummy assignment operator
165
166 const Int_t fkNIS; //number of inner sectors
bcc04e2a 167 AliTPCSector *fInnerSec; //array of inner sectors
b9de75e1 168 const Int_t fkNOS; //number of outer sectors
bcc04e2a 169 AliTPCSector *fOuterSec; //array of outer sectors
73042f01 170
bcc04e2a 171 Int_t fN; //number of "active" sectors
172 AliTPCSector *fSectors; //pointer to "active" sectors;
e3f7105e 173
174 AliTPCParam *fParam; //! TPC parameters for outer reference plane [SR, GSI, 18.02.2003]
175 TObjArray *fSeeds; //array of track seeds
9c9d2487 176
177 // [SR, 01.04.2003]
178 void SetBarrelTree(const char *mode);
179 void StoreBarrelTrack(AliTPCtrack *ps, Int_t refPlane, Int_t isIn);
180
181 // [SR, 01.04.2003]
182 TFile *fBarrelFile; // file with "barrel" tracks
183 TTree *fBarrelTree; // tree with "barrel" tracks
184 TBranch *fBarrelBranch;
185 TClonesArray *fBarrelArray;
186 AliBarrelTrack *fBarrelTrack;
187
83d73500 188 ClassDef(AliTPCtracker,1) // Time Projection Chamber tracker
b9de75e1 189};
73042f01 190
191#endif
192
193