1 #include "AliHBTReaderKineTree.h"
4 #include <TObjString.h>
10 #include <AliRunLoader.h>
12 #include <AliHeader.h>
14 #include "AliHBTRun.h"
15 #include "AliHBTEvent.h"
16 #include "AliHBTParticle.h"
17 #include "AliHBTParticleCut.h"
19 ClassImp(AliHBTReaderKineTree)
20 /**********************************************************/
21 const TString AliHBTReaderKineTree::fgkEventFolderName("HBTReaderKineTree");
23 AliHBTReaderKineTree::AliHBTReaderKineTree():
24 fFileName("galice.root"),
29 /**********************************************************/
31 AliHBTReaderKineTree::AliHBTReaderKineTree(TString& fname):
37 /**********************************************************/
39 AliHBTReaderKineTree::AliHBTReaderKineTree(TObjArray* dirs,const Char_t *filename):
46 /**********************************************************/
48 AliHBTReaderKineTree::~AliHBTReaderKineTree()
53 /**********************************************************/
55 void AliHBTReaderKineTree::Rewind()
62 /**********************************************************/
64 Int_t AliHBTReaderKineTree::ReadNext()
66 //Reads Kinematics Tree
69 if (fParticlesEvent == 0x0) fParticlesEvent = new AliHBTEvent();
70 fParticlesEvent->Reset();
72 do //do{}while; is OK even if 0 dirs specified. In that case we try to read from "./"
74 if (fRunLoader == 0x0)
81 if (fCurrentEvent == fRunLoader->GetNumberOfEvents())
84 delete fRunLoader;//close current session
85 fRunLoader = 0x0;//assure pointer is null
86 fCurrentDir++;//go to next dir
87 continue;//directory counter is increased inside in case of error
90 Info("ReadNext","Reading Event %d",fCurrentEvent);
92 fRunLoader->GetEvent(fCurrentEvent);
94 AliStack* stack = fRunLoader->Stack();
97 Error("ReadNext","Can not get stack for event %d",fCurrentEvent);
100 Int_t npart = stack->GetNtrack();
101 for (Int_t i = 0;i<npart; i++)
103 TParticle * p = stack->Particle(i);
104 // if (p->GetFirstMother() >= 0) continue; do not apply with pythia etc
106 if(Pass(p->GetPdgCode())) continue; //check if we are intersted with particles of this type
107 //if not take next partilce
109 AliHBTParticle* part = new AliHBTParticle(*p,i);
110 if(Pass(part)) { delete part; continue;}//check if meets all criteria of any of our cuts
111 //if it does not delete it and take next good track
112 fParticlesEvent->AddParticle(part);//put particle in event
114 Info("ReadNext","Read %d particles from event %d (event %d in dir %d).",
115 fParticlesEvent->GetNumberOfParticles(),
116 fNEventsRead,fCurrentEvent,fCurrentDir);
121 }while(fCurrentDir < GetNumberOfDirs());//end of loop over directories specified in fDirs Obj Array
125 /**********************************************************/
127 Int_t AliHBTReaderKineTree::OpenNextFile()
129 //opens file with kine tree
130 Info("OpenNextFile","________________________________________________________");
132 const TString& dirname = GetDirName(fCurrentEvent);
135 Error("OpenNextFile","Can not get directory name");
138 TString filename = dirname +"/"+ fFileName;
140 fRunLoader = AliRunLoader::Open(filename.Data(),fgkEventFolderName,"READ");
142 if ( fRunLoader == 0x0)
144 Error("OpenNextFile","Can't open session from file %s",filename.Data());
148 if (fRunLoader->GetNumberOfEvents() <= 0)
150 Error("OpenNextFile","There is no events in this directory.");
156 if (fRunLoader->LoadKinematics())
158 Error("OpenNextFile","Error occured while loading kinematics.");