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"
23 #include "AliHeader.h"
24 #include "AliGenPythiaEventHeader.h"
26 ClassImp(AliJetParticlesReaderKine)
28 AliJetParticlesReaderKine::AliJetParticlesReaderKine() :
29 AliJetParticlesReader(),
30 fFileName("galice.root"),
32 fNeutral(kTRUE),fCharged(kTRUE),fEM(kTRUE),
38 AliJetParticlesReaderKine::AliJetParticlesReaderKine(TString& fname) :
39 AliJetParticlesReader(),
42 fNeutral(kTRUE),fCharged(kTRUE),fEM(kTRUE),
48 AliJetParticlesReaderKine::AliJetParticlesReaderKine(TObjArray* dirs, const Char_t *filename):
49 AliJetParticlesReader(dirs),
52 fNeutral(kTRUE),fCharged(kTRUE),fEM(kTRUE),
58 AliJetParticlesReaderKine::~AliJetParticlesReaderKine()
61 if(fRunLoader) delete fRunLoader;
64 void AliJetParticlesReaderKine::Rewind()
66 //Rewinds to the beginning
67 if(fRunLoader) delete fRunLoader;
73 Int_t AliJetParticlesReaderKine::ReadNext()
75 //Reads Kinematics Tree
77 if((!fOwner) || (fEventParticles == 0))
78 fEventParticles = new AliJetEventParticles();
80 while(fCurrentDir < GetNumberOfDirs())
83 if (!OpenFile(fCurrentDir))
85 delete fRunLoader; //close current session
86 fRunLoader = 0; //assure pointer is null
91 if (fCurrentEvent == fRunLoader->GetNumberOfEvents())
94 delete fRunLoader; //close current session
95 fRunLoader = 0; //assure pointer is null
96 fCurrentDir++; //go to next dir
100 Info("ReadNext","Reading Event %d",fCurrentEvent);
101 fRunLoader->GetEvent(fCurrentEvent);
102 AliStack* stack = fRunLoader->Stack();
105 Error("ReadNext","Can't get stack for event %d",fCurrentEvent);
110 Int_t nprim = stack->GetNprimary();
113 npart = stack->GetNtrack();
114 fEventParticles->Reset(npart);
117 AliHeader *header=fRunLoader->GetHeader();
119 Warning("ReadNext","Header not found in event %d",fCurrentEvent);
122 headdesc+=header->GetRun();
124 headdesc+=header->GetEventNrInRun();
125 AliGenPythiaEventHeader *pheader=(AliGenPythiaEventHeader*)header->GenEventHeader();
127 Warning("ReadNext","Pythia-Header not found in event %d",fCurrentEvent);
130 #ifndef NOUQHEADERINFO
131 ntruq=pheader->NUQTriggerJets();
133 Double_t x0=pheader->GetXJet();
134 Double_t y0=pheader->GetYJet();
136 pheader->GetZQuench(zquench);
137 fEventParticles->SetXYJet(x0,y0);
138 fEventParticles->SetZQuench(zquench);
139 for(Int_t j=0;j<ntruq;j++){
141 pheader->UQJet(j,pjet);
142 fEventParticles->AddUQJet(pjet);
146 //Int_t ptyp=pheader->ProcessType();
147 Int_t ntrials=pheader->Trials();
150 Int_t ntr=pheader->NTriggerJets();
152 for(Int_t j=0;j<ntr;j++){
154 pheader->TriggerJet(j,pjet);
155 fEventParticles->AddJet(pjet);
156 if(!ntruq) fEventParticles->AddUQJet(pjet);
161 fEventParticles->SetHeader(headdesc);
164 const TParticle *kv = stack->Particle(0);
166 fEventParticles->SetVertex(kv->Vx(),kv->Vy(),kv->Vz());
169 //loop over particles
170 for (Int_t i = 0;i<npart; i++)
172 TParticle *p = stack->Particle(i);
174 Int_t child1 = p->GetFirstDaughter();
175 //Int_t child2 = p->GetLastDaughter();
176 //Int_t mother = p->GetFirstMother();
177 //cout << child1 << " " << child2 << " " << mother << endl;
178 if((child1>=0) && (child1<nprim)) continue;
179 if(p->GetStatusCode()!=1){
183 if(IsAcceptedParticle(p)) //put particle in event
184 fEventParticles->AddParticle(p,i);
191 //end of loop over directories specified in fDirs ObjArray
195 Int_t AliJetParticlesReaderKine::OpenFile(Int_t n)
197 //opens file with kine tree
200 if(fCurrentEvent < fRunLoader->GetNumberOfEvents()) return kTRUE;
204 const TString& dirname = GetDirName(n);
207 Error("OpenNextFile","Can't get directory name with index %d",n);
211 TString filename = dirname +"/"+ fFileName;
212 fRunLoader = AliRunLoader::Open(filename.Data());
216 Error("OpenNextFile","Can't open session from file %s",filename.Data());
220 if (fRunLoader->GetNumberOfEvents() <= 0)
222 Error("OpenNextFile","There is no events in this directory.");
228 if (fRunLoader->LoadKinematics())
230 Error("OpenNextFile","Error occured while loading kinematics.");