L3 becomes HLT
[u/mrichter/AliRoot.git] / JETAN / jetan2004 / AliJetParticlesReaderHLT.cxx
... / ...
CommitLineData
1// $Id$
2
3//___________________________________________________________________________
4/////////////////////////////////////////////////////////////////////////////
5// //
6// File reader for HLT tracks ESD //
7// //
8// loizides@ikf.uni-frankfurt.de //
9/////////////////////////////////////////////////////////////////////////////
10
11#include <Riostream.h>
12#include <TMath.h>
13#include <TString.h>
14#include <TObjString.h>
15#include <TTree.h>
16#include <TFile.h>
17#include <AliESD.h>
18#include <AliESDtrack.h>
19#include <AliESDHLTtrack.h>
20#include <AliHLTTrack.h>
21#include <AliHLTVertex.h>
22#include <AliKalmanTrack.h>
23#include <AliJetEventParticles.h>
24#include "AliJetParticlesReaderHLT.h"
25
26ClassImp(AliJetParticlesReaderHLT)
27
28AliJetParticlesReaderHLT::AliJetParticlesReaderHLT(Bool_t bMapper, const Char_t* esdfilename) :
29 AliJetParticlesReaderESD(0,esdfilename),
30 fTrackerType(bMapper),
31 fMinHits(0),
32 fMinWeight(0)
33{
34 //constructor
35}
36
37/********************************************************************/
38
39AliJetParticlesReaderHLT::AliJetParticlesReaderHLT(
40 Bool_t bMapper,
41 TObjArray* dirs,
42 const Char_t* esdfilename) :
43 AliJetParticlesReaderESD(0,dirs,esdfilename),
44 fTrackerType(bMapper),
45 fMinHits(0),
46 fMinWeight(0)
47
48{
49 //constructor
50}
51
52/********************************************************************/
53
54AliJetParticlesReaderHLT::~AliJetParticlesReaderHLT()
55{
56 //desctructor
57}
58
59Int_t AliJetParticlesReaderHLT::ReadESD(AliESD* esd)
60{
61 //Reads one ESD
62
63 if (esd == 0)
64 {
65 Error("ReadESD","ESD is NULL");
66 return kFALSE;
67 }
68
69 Float_t mf = esd->GetMagneticField();
70 if (mf <= 0.0)
71 {
72 Error("ReadESD","Magnetic Field is 0. Skipping to next event.");
73 return kFALSE;
74 }
75 AliKalmanTrack::SetMagneticField(mf/10.);
76
77 Info("ReadESD","Reading Event %d",fCurrentDir*1000+fCurrentEvent);
78 if((!fOwner) || (fEventParticles==0))
79 fEventParticles = new AliJetEventParticles();
80
81 Int_t ntr=0;
82 if(fTrackerType){
83 ntr =esd->GetNumberOfHLTHoughTracks();
84 Info("ReadESD","Found %d conformal tracks.",ntr);
85 } else {
86 ntr=esd->GetNumberOfHLTHoughTracks();
87 Info("ReadESD","Found %d hough tracks.",ntr);
88 }
89 fEventParticles->Reset(ntr);
90
91 TString headdesc="";
92 headdesc+="Run ";
93 headdesc+=esd->GetRunNumber();
94 headdesc+=": Ev ";
95 headdesc+=esd->GetEventNumber();
96 fEventParticles->SetHeader(headdesc);
97
98 Double_t vertexpos[3];//vertex position
99 const AliESDVertex* kvertex = esd->GetVertex();
100 if (kvertex == 0)
101 {
102 Info("ReadESD","ESD returned NULL pointer to vertex - assuming (0.0,0.0,0.0)");
103 vertexpos[0] = 0.0;
104 vertexpos[1] = 0.0;
105 vertexpos[2] = 0.0;
106 }
107 else
108 {
109 kvertex->GetXYZ(vertexpos);
110 }
111
112 fEventParticles->SetVertex(vertexpos[0],vertexpos[1],vertexpos[2]);
113 //cout << vertexpos[0] << " " << vertexpos[1] << " " << vertexpos[2] << endl;
114 AliHLTVertex v;
115 v.SetX(vertexpos[0]);
116 v.SetY(vertexpos[1]);
117 v.SetZ(vertexpos[2]);
118
119 for (Int_t i = 0;i<ntr; i++) {
120 AliESDHLTtrack *kesdtrack;
121 if(fTrackerType){
122 kesdtrack=esd->GetHLTConfMapTrack(i);
123 } else {
124 kesdtrack=esd->GetHLTHoughTrack(i);
125 }
126
127 if (kesdtrack == 0)
128 {
129 Error("ReadESD","Can not get track %d", i);
130 continue;
131 }
132
133 //const Float_t kpid=kesdtrack->GetPID();
134 const Int_t knhits=kesdtrack->GetNHits();
135 const Int_t kweight=kesdtrack->GetWeight();
136 //cout << i << " " << kweight << " " << knhits << endl;
137 if((fMinHits>0) && (knhits<fMinHits)) continue;
138 if(kweight>1000) continue; //avoid ghosts
139 if((fMinWeight>0) && (kweight<fMinWeight)) continue;
140
141 Float_t px=kesdtrack->GetPx();
142 Float_t py=kesdtrack->GetPy();
143 Float_t pz=kesdtrack->GetPz();
144 if(TMath::IsNaN(px)||TMath::IsNaN(py)||TMath::IsNaN(pz)) continue;
145 if(TMath::Abs(px)>1e3||TMath::Abs(py)>1e3||TMath::Abs(pz)>1e3) continue;
146 //cout << px << " " << py << " " << pz << " " << TMath::Sqrt(px*px+py*py) << endl;
147
148 if(0&&fTrackerType){
149#if 0
150 //kesdtrack->SetCharge(-kesdtrack->GetCharge());
151 Double_t mom[3];
152 if(!kesdtrack->GetPxPyPzAt(0,mom)) continue;
153 px=mom[0];
154 py=mom[1];
155 pz=mom[2];
156#else
157 AliHLTTrack l3;
158 //if(!kesdtrack->ComesFromMainVertex()) continue;
159 //cout << "Pos: " << kesdtrack->GetFirstPointX() << " " << kesdtrack->GetFirstPointY() << " " << kesdtrack->GetFirstPointZ() << endl;
160 l3.SetFirstPoint(kesdtrack->GetFirstPointX(),kesdtrack->GetFirstPointY(),kesdtrack->GetFirstPointZ());
161 l3.SetLastPoint(kesdtrack->GetLastPointX(),kesdtrack->GetLastPointY(),kesdtrack->GetLastPointZ());
162 l3.SetCharge(kesdtrack->GetCharge());
163 l3.SetPt(kesdtrack->GetPt());
164 l3.SetTgl(kesdtrack->GetTgl());
165 l3.SetPsi(kesdtrack->GetPsi());
166 l3.CalculateHelix();
167 Double_t xc=0.,yc=0.,zc=0.;
168 l3.GetClosestPoint(&v,xc,yc,zc);
169 if(TMath::Abs(zc)>10.) continue;
170 l3.SetFirstPoint(0,0,0);
171 //cout << "Pos: " << xc << " " << yc << " " << zc << endl;
172 l3.UpdateToFirstPoint();
173 px=l3.GetPx();
174 py=l3.GetPy();
175 pz=l3.GetPz();
176#endif
177 }
178 const Float_t kpt=TMath::Sqrt(px*px+py*py);
179 //cout << px << " " << py << " " << pz << " " << kpt << endl;
180
181 const Float_t kp=TMath::Sqrt(pz*pz+kpt*kpt);
182 const Float_t keta=0.5*TMath::Log((kp+pz+1e-30)/(kp-pz+1e-30));
183 const Float_t kphi=TMath::Pi()+TMath::ATan2(-py,-px);
184
185 if(IsAcceptedParticle(kpt,kphi,keta))
186 fEventParticles->AddParticle(px,py,pz,kp,i,kesdtrack->GetMCid(),knhits,kpt,kphi,keta);
187 } //loop over tracks
188
189 return kTRUE;
190}