3 //___________________________________________________________________________
4 /////////////////////////////////////////////////////////////////////////////
6 // File reader for HLT tracks ESD //
8 // loizides@ikf.uni-frankfurt.de //
9 /////////////////////////////////////////////////////////////////////////////
11 #include <Riostream.h>
14 #include <TObjString.h>
18 #include <AliESDtrack.h>
19 #include <AliESDHLTtrack.h>
20 #include <AliL3Track.h>
21 #include <AliL3Vertex.h>
22 #include <AliKalmanTrack.h>
23 #include <AliJetEventParticles.h>
24 #include "AliJetParticlesReaderHLT.h"
26 ClassImp(AliJetParticlesReaderHLT)
28 AliJetParticlesReaderHLT::AliJetParticlesReaderHLT(Bool_t bMapper, const Char_t* esdfilename) :
29 AliJetParticlesReaderESD(0,esdfilename),
30 fTrackerType(bMapper),
37 /********************************************************************/
39 AliJetParticlesReaderHLT::AliJetParticlesReaderHLT(
42 const Char_t* esdfilename) :
43 AliJetParticlesReaderESD(0,dirs,esdfilename),
44 fTrackerType(bMapper),
52 /********************************************************************/
54 AliJetParticlesReaderHLT::~AliJetParticlesReaderHLT()
59 Int_t AliJetParticlesReaderHLT::ReadESD(AliESD* esd)
65 Error("ReadESD","ESD is NULL");
69 Float_t mf = esd->GetMagneticField();
72 Error("ReadESD","Magnetic Field is 0. Skipping to next event.");
75 AliKalmanTrack::SetMagneticField(mf/10.);
77 Info("ReadESD","Reading Event %d",fCurrentDir*1000+fCurrentEvent);
78 if((!fOwner) || (fEventParticles==0))
79 fEventParticles = new AliJetEventParticles();
83 ntr =esd->GetNumberOfHLTHoughTracks();
84 Info("ReadESD","Found %d conformal tracks.",ntr);
86 ntr=esd->GetNumberOfHLTHoughTracks();
87 Info("ReadESD","Found %d hough tracks.",ntr);
89 fEventParticles->Reset(ntr);
93 headdesc+=esd->GetRunNumber();
95 headdesc+=esd->GetEventNumber();
96 fEventParticles->SetHeader(headdesc);
98 Double_t vertexpos[3];//vertex position
99 const AliESDVertex* kvertex = esd->GetVertex();
102 Info("ReadESD","ESD returned NULL pointer to vertex - assuming (0.0,0.0,0.0)");
109 kvertex->GetXYZ(vertexpos);
112 fEventParticles->SetVertex(vertexpos[0],vertexpos[1],vertexpos[2]);
113 //cout << vertexpos[0] << " " << vertexpos[1] << " " << vertexpos[2] << endl;
117 v.SetX(vertexpos[0]);
118 v.SetY(vertexpos[1]);
119 v.SetZ(vertexpos[2]);
120 Double_t xc=0.,yc=0.,zc=0.;
121 for (Int_t i = 0;i<ntr; i++) {
122 AliESDHLTtrack *kesdtrack;
124 kesdtrack=esd->GetHLTConfMapTrack(i);
126 kesdtrack=esd->GetHLTHoughTrack(i);
131 Error("ReadESD","Can not get track %d", i);
135 //const Float_t kpid=kesdtrack->GetPID();
136 const Int_t knhits=kesdtrack->GetNHits();
137 const Int_t kweight=kesdtrack->GetWeight();
138 //cout << i << " " << kweight << " " << knhits << endl;
139 if((fMinHits>0) && (knhits<fMinHits)) continue;
140 if(kweight>1000) continue; //avoid ghosts
141 if((fMinWeight>0) && (kweight<fMinWeight)) continue;
143 Float_t px=kesdtrack->GetPx();
144 Float_t py=kesdtrack->GetPy();
145 Float_t pz=kesdtrack->GetPz();
148 //if(!kesdtrack->ComesFromMainVertex()) continue;
149 //cout << kesdtrack->GetPx() << " " << kesdtrack->GetPy() << " " << kesdtrack->GetPz() << endl;
150 l3.SetFirstPoint(kesdtrack->GetFirstPointX(),kesdtrack->GetFirstPointY(),kesdtrack->GetFirstPointZ());
151 l3.SetLastPoint(kesdtrack->GetLastPointX(),kesdtrack->GetLastPointY(),kesdtrack->GetLastPointZ());
152 l3.SetCharge(kesdtrack->GetCharge());
153 l3.SetPt(kesdtrack->GetPt());
154 l3.SetTgl(kesdtrack->GetTgl());
155 l3.SetPsi(kesdtrack->GetPsi());
157 l3.GetClosestPoint(&v,xc,yc,zc);
158 if(TMath::Abs(zc)>10.) continue;
159 l3.SetFirstPoint(vertexpos[0],vertexpos[1],vertexpos[2]);
160 //l3.CalculateHelix();
161 l3.UpdateToFirstPoint();
165 //cout << px << " " << py << " " << pz << endl;
168 const Float_t kpt=TMath::Sqrt(px*px+py*py);
169 const Float_t kp=TMath::Sqrt(pz*pz+kpt*kpt);
170 const Float_t keta=0.5*TMath::Log((kp+pz+1e-30)/(kp-pz+1e-30));
171 const Float_t kphi=TMath::Pi()+TMath::ATan2(-py,-px);
173 if(IsAcceptedParticle(kpt,kphi,keta))
174 fEventParticles->AddParticle(px,py,pz,kp,i,kesdtrack->GetMCid(),knhits,kpt,kphi,keta);