3 //____________________________________________________________________
4 //////////////////////////////////////////////////////////////////////
6 // class AliHBTReaderESD //
8 // Reader for ALICE Event Summary Data (ESD). //
10 // Piotr.Skowronski@cern.ch //
12 //////////////////////////////////////////////////////////////////////
17 #include <TObjString.h>
23 #include <AliESDtrack.h>
24 #include <AliJetEventParticles.h>
25 #include "AliJetParticlesReaderESD.h"
27 ClassImp(AliJetParticlesReaderESD)
29 AliJetParticlesReaderESD::AliJetParticlesReaderESD(const Char_t* esdfilename) :
30 AliJetParticlesReader(),
31 fESDFileName(esdfilename),
34 fPassFlag(AliESDtrack::kTPCrefit)
39 /********************************************************************/
41 AliJetParticlesReaderESD::AliJetParticlesReaderESD(
43 const Char_t* esdfilename) :
44 AliJetParticlesReader(dirs),
45 fESDFileName(esdfilename),
48 fPassFlag(AliESDtrack::kTPCrefit)
53 /********************************************************************/
55 AliJetParticlesReaderESD::~AliJetParticlesReaderESD()
58 if(fFile) delete fFile;
59 if(fKeyIterator) delete fKeyIterator;
63 Int_t AliJetParticlesReaderESD::ReadNext()
65 //reads next event from fFile
67 do // is OK even if 0 dirs specified,
68 { // in that case we try to read from "./"
71 fFile = OpenFile(fCurrentDir);
74 Error("ReadNext","Cannot get fFile for dir no. %d",fCurrentDir);
79 fKeyIterator = new TIter(fFile->GetListOfKeys());
82 //fFile->GetListOfKeys()->Print();
85 TKey* key = (TKey*)fKeyIterator->Next();
91 delete fFile; //we have to assume there are no more ESD objects in the fFile
96 TString esdname = "ESD";
97 esdname+=fCurrentEvent;
98 AliESD* esd = dynamic_cast<AliESD*>(fFile->Get(esdname));
101 //Info("ReadNext","This key is not an AliESD object %s",key->GetName());
102 Info("ReadNext","Can not find AliESD object named %s",esdname.Data());
107 delete fFile;//we have to assume there is no more ESD objects in the fFile
117 return kTRUE;//success -> read one event
118 } while(fCurrentDir < GetNumberOfDirs());
119 //end of loop over directories specified in fDirs Obj Array
120 return kFALSE; //no more directories to read
123 /**********************************************************/
125 Int_t AliJetParticlesReaderESD::ReadESD(AliESD* esd)
131 Error("ReadESD","ESD is NULL");
135 //TDatabasePDG* pdgdb = TDatabasePDG::Instance();
138 // Error("ReadESD","Can not get PDG Database Instance.");
142 //Float_t mf = esd->GetMagneticField();
143 //if ( (mf == 0.0) && (fNTrackPoints > 0) )
145 // Error("ReadESD","Magnetic Field is 0 and Track Points demanded. Skipping to next event.");
149 Info("ReadESD","Reading Event %d",fCurrentEvent);
150 if((!fOwner) || (fEventParticles==0))
151 fEventParticles = new AliJetEventParticles();
153 Double_t vertexpos[3];//vertex position
154 const AliESDVertex* kvertex = esd->GetVertex();
157 Info("ReadESD","ESD returned NULL pointer to vertex - assuming (0.0,0.0,0.0)");
164 kvertex->GetXYZ(vertexpos);
166 fEventParticles->SetVertex(vertexpos[0],vertexpos[1],vertexpos[2]);
168 const Int_t kntr = esd->GetNumberOfTracks();
169 Info("ReadESD","Found %d tracks.",kntr);
170 for (Int_t i = 0;i<kntr; i++)
172 const AliESDtrack *kesdtrack = esd->GetTrack(i);
175 Error("ReadESD","Can not get track %d", i);
179 if ((kesdtrack->GetStatus() & fPassFlag) == kFALSE)
181 Info("ReadNext","Particle skipped.");
185 Double_t mom[3]; //momentum
186 kesdtrack->GetPxPyPz(mom);
187 //kesdtrack->GetConstrainedPxPyPz(mom);
188 //Double_t pos[3];//position
189 //kesdtrack->GetXYZ(pos);
190 //kesdtrack->GetConstrainedXYZ(pos);
191 const Float_t kmass=kesdtrack->GetMass();
192 const Float_t kp2=mom[0]*mom[0]+mom[1]*mom[1]+mom[2]*mom[2];
193 const Float_t ketot=TMath::Sqrt(kmass*kmass+kp2);
194 const Float_t kpt=TMath::Sqrt(mom[0]*mom[0]+mom[1]*mom[1]);
195 const Float_t kp=TMath::Sqrt(kp2);
196 const Float_t keta=0.5*TMath::Log((kp+mom[2]+1e-30)/(kp-mom[2]+1e-30));
197 const Float_t kphi=TMath::Pi()+TMath::ATan2(-mom[1],-mom[0]);
198 if(IsAcceptedParticle(kpt,kphi,keta))
199 fEventParticles->AddParticle(mom[0],mom[1],mom[2],ketot,i,kesdtrack->GetLabel(),kpt,kphi,keta);
201 } // loop over tracks
206 /**********************************************************/
208 void AliJetParticlesReaderESD::Rewind()
212 if(fFile) delete fFile;
213 if(fKeyIterator) delete fKeyIterator;
220 /**********************************************************/
222 TFile* AliJetParticlesReaderESD::OpenFile(Int_t n)
224 //opens fFile with kine tree
226 const TString& dirname = GetDirName(n);
229 Error("OpenFiles","Can not get directory name");
232 TString filename = dirname +"/"+ fESDFileName;
233 TFile *ret = TFile::Open(filename.Data());
236 Error("OpenFiles","Can't open fFile %s",filename.Data());
241 Error("OpenFiles","Can't open fFile %s",filename.Data());