3 //_______________________________________________________________________
4 /////////////////////////////////////////////////////////////////////////
6 // class AliJetParticlesReaderKine
8 // Reader for Kinematics
10 // loizides@ikf.uni-frankfurt.de
12 /////////////////////////////////////////////////////////////////////////
14 #include <Riostream.h>
16 #include <TParticle.h>
17 #include <AliRunLoader.h>
20 #include "AliJetParticle.h"
21 #include "AliJetEventParticles.h"
22 #include "AliJetParticlesReaderKine.h"
24 ClassImp(AliJetParticlesReaderKine)
27 /**********************************************************/
29 AliJetParticlesReaderKine::AliJetParticlesReaderKine() :
30 AliJetParticlesReader(),
31 fFileName("galice.root"),
33 fNeutral(kTRUE),fCharged(kTRUE),fEM(kTRUE),
39 /**********************************************************/
42 AliJetParticlesReaderKine::AliJetParticlesReaderKine(TString& fname) :
43 AliJetParticlesReader(),
46 fNeutral(kTRUE),fCharged(kTRUE),fEM(kTRUE),
52 /**********************************************************/
54 AliJetParticlesReaderKine::AliJetParticlesReaderKine(TObjArray* dirs, const Char_t *filename):
55 AliJetParticlesReader(dirs),
58 fNeutral(kTRUE),fCharged(kTRUE),fEM(kTRUE),
64 /**********************************************************/
66 AliJetParticlesReaderKine::~AliJetParticlesReaderKine()
69 if(fRunLoader) delete fRunLoader;
72 /**********************************************************/
74 void AliJetParticlesReaderKine::Rewind()
76 //Rewinds to the beginning
77 if(fRunLoader) delete fRunLoader;
83 /**********************************************************/
85 Int_t AliJetParticlesReaderKine::ReadNext()
87 //Reads Kinematics Tree
89 if((!fOwner) || (fEventParticles == 0))
90 fEventParticles = new AliJetEventParticles();
92 while(fCurrentDir < GetNumberOfDirs())
94 if (!OpenFile(fCurrentDir))
100 if (fCurrentEvent == fRunLoader->GetNumberOfEvents())
102 //read next directory
103 delete fRunLoader; //close current session
104 fRunLoader = 0; //assure pointer is null
105 fCurrentDir++; //go to next dir
109 //Info("ReadNext","Reading Event %d",fCurrentEvent);
111 fRunLoader->GetEvent(fCurrentEvent);
112 AliStack* stack = fRunLoader->Stack();
115 Error("ReadNext","Can not get stack for event %d",fCurrentEvent);
120 const TParticle *kv = stack->Particle(0);
122 fEventParticles->SetVertex(kv->Vx(),kv->Vy(),kv->Vz());
125 Int_t nprim = stack->GetNprimary();
128 npart = stack->GetNtrack();
130 fEventParticles->Reset(npart);
131 for (Int_t i = 0;i<npart; i++)
133 TParticle *p = stack->Particle(i);
135 Int_t child1 = p->GetFirstDaughter();
136 //Int_t child2 = p->GetLastDaughter();
137 //Int_t mother = p->GetFirstMother();
138 if((child1>=0) && (child1<nprim)) continue;
139 //cout << child1 << " " << child2 << " " << mother << endl;
141 if(IsAcceptedParticle(p)) //put particle in event
142 fEventParticles->AddParticle(p,i);
149 //end of loop over directories specified in fDirs Obj Array
153 /**********************************************************/
155 Int_t AliJetParticlesReaderKine::OpenFile(Int_t n)
157 //opens file with kine tree
159 const TString& dirname = GetDirName(n);
162 Error("OpenNextFile","Can not get directory name with index %d",n);
166 TString filename = dirname +"/"+ fFileName;
167 if(fRunLoader) delete fRunLoader;
168 fRunLoader = AliRunLoader::Open(filename.Data());
172 Error("OpenNextFile","Can't open session from file %s",filename.Data());
176 if (fRunLoader->GetNumberOfEvents() <= 0)
178 Error("OpenNextFile","There is no events in this directory.");
184 if (fRunLoader->LoadKinematics())
186 Error("OpenNextFile","Error occured while loading kinematics.");