3 //_______________________________________________________________________
4 /////////////////////////////////////////////////////////////////////////
6 // class AliJetParticlesReaderKine
8 // Reader for Kinematics
10 // loizides@ikf.uni-frankfurt.de
12 /////////////////////////////////////////////////////////////////////////
14 #include <Riostream.h>
17 #include <TParticle.h>
18 #include <TLorentzVector.h>
19 #include <AliRunLoader.h>
21 #include <AliHeader.h>
22 #include <AliGenEventHeader.h>
23 #include <AliGenPythiaEventHeader.h>
24 #include <AliGenHijingEventHeader.h>
25 #include "AliJetParticle.h"
26 #include "AliJetEventParticles.h"
27 #include "AliJetParticlesReaderKine.h"
29 ClassImp(AliJetParticlesReaderKine)
31 AliJetParticlesReaderKine::AliJetParticlesReaderKine() :
32 AliJetParticlesReader(),
33 fFileName("galice.root"),
35 fNeutral(kTRUE),fCharged(kTRUE),fEM(kTRUE),
41 AliJetParticlesReaderKine::AliJetParticlesReaderKine(TString& fname) :
42 AliJetParticlesReader(),
45 fNeutral(kTRUE),fCharged(kTRUE),fEM(kTRUE),
51 AliJetParticlesReaderKine::AliJetParticlesReaderKine(TObjArray* dirs, const Char_t *filename):
52 AliJetParticlesReader(dirs),
55 fNeutral(kTRUE),fCharged(kTRUE),fEM(kTRUE),
61 AliJetParticlesReaderKine::~AliJetParticlesReaderKine()
64 if(fRunLoader) delete fRunLoader;
67 void AliJetParticlesReaderKine::Rewind()
69 //Rewinds to the beginning
70 if(fRunLoader) delete fRunLoader;
76 Int_t AliJetParticlesReaderKine::ReadNext()
78 //Reads Kinematics Tree
80 if((!fOwner) || (fEventParticles == 0))
81 fEventParticles = new AliJetEventParticles();
83 while(fCurrentDir < GetNumberOfDirs())
86 if (!OpenFile(fCurrentDir))
88 delete fRunLoader; //close current session
89 fRunLoader = 0; //assure pointer is null
94 if (fCurrentEvent == fRunLoader->GetNumberOfEvents())
97 delete fRunLoader; //close current session
98 fRunLoader = 0; //assure pointer is null
99 fCurrentDir++; //go to next dir
103 Info("ReadNext","Reading Event %d",fCurrentEvent);
104 fRunLoader->GetEvent(fCurrentEvent);
105 AliStack* stack = fRunLoader->Stack();
108 Error("ReadNext","Can't get stack for event %d",fCurrentEvent);
113 Int_t nprim = stack->GetNprimary();
116 npart = stack->GetNtrack();
117 fEventParticles->Reset(npart);
121 AliHeader *header=fRunLoader->GetHeader();
123 Warning("ReadNext","Header not found in event %d",fCurrentEvent);
125 AliGenEventHeader *genheader=header->GenEventHeader();
126 TString hname=genheader->GetName();
127 if(hname.CompareTo("HIJINGparam")==0) {
129 headdesc+="HIJINGparam";
130 } else if(hname.CompareTo("Hijing")==0) {
132 AliGenHijingEventHeader *hheader=(AliGenHijingEventHeader*)header->GenEventHeader();
135 Warning("ReadNext","Hijing-Header not found in event %d",fCurrentEvent);
137 Int_t ntrials=hheader->Trials();
138 fEventParticles->SetTrials(ntrials);
139 fEventParticles->SetImpact(hheader->ImpactParameter());
140 fEventParticles->SetNhard(hheader->HardScatters());
141 fEventParticles->SetNpart(hheader->NwNw());
145 TLorentzVector jetFsr1;
146 TLorentzVector jetFsr2;
147 hheader->GetJets(jet1,jet2,jetFsr1,jetFsr2);
148 fEventParticles->AddHard(0,jet1.X(),jet1.Y(),jet1.Z(),jet1.T(),0);
149 fEventParticles->AddHard(1,jet2.X(),jet2.Y(),jet2.Z(),jet2.T(),0);
151 } else if(hname.CompareTo("Pythia")==0){
154 AliGenPythiaEventHeader *pheader=(AliGenPythiaEventHeader*)header->GenEventHeader();
156 Warning("ReadNext","Pythia-Header not found in event %d",fCurrentEvent);
159 #ifndef NOUQHEADERINFO
160 ntruq=pheader->NUQTriggerJets();
162 Double_t x0=pheader->GetXJet();
163 Double_t y0=pheader->GetYJet();
168 pheader->GetZQuench(zquench);
169 fEventParticles->SetXYJet(x0,y0);
170 fEventParticles->SetZQuench(zquench);
171 for(Int_t j=0;j<ntruq;j++){
173 pheader->UQJet(j,pjet);
174 fEventParticles->AddUQJet(pjet);
178 //Int_t ptyp=pheader->ProcessType();
179 Int_t ntrials=pheader->Trials();
180 fEventParticles->SetTrials(ntrials);
182 Int_t ntr=pheader->NTriggerJets();
184 for(Int_t j=0;j<ntr;j++){
186 pheader->TriggerJet(j,pjet);
187 fEventParticles->AddJet(pjet);
188 if(!ntruq) fEventParticles->AddUQJet(pjet);
191 for(Int_t i=6;i<=7;i++){
192 TParticle *MP = stack->Particle(i);
195 if(MP->GetPdgCode()==21) type=2;
197 fEventParticles->AddHard(i-6,MP->Px(),MP->Py(),MP->Pz(),MP->Energy(),type);
202 headdesc+=header->GetRun();
204 headdesc+=header->GetEventNrInRun();
206 fEventParticles->SetHeader(headdesc);
209 const TParticle *kv = stack->Particle(0);
211 fEventParticles->SetVertex(kv->Vx(),kv->Vy(),kv->Vz());
214 //loop over particles
215 for (Int_t i = 0;i<npart; i++)
217 TParticle *p = stack->Particle(i);
219 Int_t child1 = p->GetFirstDaughter();
220 //Int_t child2 = p->GetLastDaughter();
221 //Int_t mother = p->GetFirstMother();
222 //cout << child1 << " " << child2 << " " << mother << endl;
223 if((child1>=0) && (child1<nprim)) continue;
225 //check status code depending on gentype
226 if(gentype==1){ // Hijing Param
227 if(p->GetStatusCode()!=0) continue;
228 } else if(gentype==2){ //Hijing
229 //if( p->GetStatusCode()!=0){
230 // cout <<p->GetStatusCode() << " ";p->Print();
232 } else if(gentype==3){ //Pythia
233 if(p->GetStatusCode()!=1) continue;
234 p->SetWeight(-123); //mark particle
238 if(IsAcceptedParticle(p)){ //put particle in event
239 //if(p->Pt()>20){cout <<p->GetStatusCode() << " ";p->Print(); }
240 fEventParticles->AddParticle(p,i);
248 //end of loop over directories specified in fDirs ObjArray
252 Int_t AliJetParticlesReaderKine::OpenFile(Int_t n)
254 //opens file with kine tree
257 if(fCurrentEvent < fRunLoader->GetNumberOfEvents()) return kTRUE;
261 const TString& dirname = GetDirName(n);
264 Error("OpenNextFile","Can't get directory name with index %d",n);
268 TString filename = dirname +"/"+ fFileName;
269 TFile file(filename);
270 if ( file.IsOpen() == 0)
272 Error("OpenNextFile","Can't open session from file %s",filename.Data());
276 fRunLoader = AliRunLoader::Open(filename.Data());
278 if (fRunLoader->GetNumberOfEvents() <= 0)
280 Error("OpenNextFile","There is no events in this directory.");
286 if (fRunLoader->LoadKinematics())
288 Error("OpenNextFile","Error occured while loading kinematics.");