Track Points Added. Class needed for Anti-Merging cut
[u/mrichter/AliRoot.git] / HBTAN / AliHBTReader.h
1 #ifndef ALIHBTREADER_H
2 #define ALIHBTREADER_H
3
4 #include <TNamed.h>
5 #include <TObjArray.h>
6
7 //Reader Base class (reads particles and tracks and
8 //puts it to the AliHBTRun objects
9 //Piotr.Skowronski@cern.ch
10
11 class AliHBTRun;
12 class AliHBTEvent;
13 class AliHBTParticleCut;
14 class AliHBTParticle;
15 class TString;
16 class TH1I;
17  
18 class AliHBTReader: public TNamed
19 {
20   public:
21     AliHBTReader();
22     AliHBTReader(TObjArray*);
23     virtual ~AliHBTReader();
24     
25     virtual Int_t        Next();
26     virtual void         Rewind() = 0;
27     
28     virtual Bool_t       ReadsTracks() const = 0;
29     virtual Bool_t       ReadsParticles() const = 0;
30     
31     void                 AddParticleCut(AliHBTParticleCut* cut);
32     
33     virtual Int_t        Read(AliHBTRun* particles, AliHBTRun *tracks);
34     
35     virtual AliHBTEvent* GetParticleEvent() {return fParticlesEvent;}//can not be const because position randomizer overloads it
36     virtual AliHBTEvent* GetTrackEvent() {return fTracksEvent;}//
37     
38     virtual AliHBTEvent* GetParticleEvent(Int_t);
39     virtual AliHBTEvent* GetTrackEvent(Int_t);
40     
41     virtual Int_t        GetNumberOfPartEvents();
42     virtual Int_t        GetNumberOfTrackEvents();
43     
44     void                 SetDirs(TObjArray* dirs){fDirs = dirs;} //sets array directories names
45     void                 SetEventBuffering(Bool_t flag){fBufferEvents = flag;}
46     void          SetBlend(Bool_t flag = kTRUE){fBlend=flag;}
47     virtual Int_t GetNumberOfDirs() const {return (fDirs)?fDirs->GetEntries():0;}
48     void          ReadEventsFromTo(Int_t first,Int_t last){fFirst = first; fLast = last;}
49     virtual TH1I* GetTrackCounter() const {return fTrackCounter;}
50     virtual void  WriteTrackCounter() const;
51   protected:
52     
53     TObjArray*    fCuts;//array with particle cuts
54     TObjArray*    fDirs;//arry with directories to read data from
55     
56     Int_t         fCurrentEvent;//!  number of current event in current directory
57     Int_t         fCurrentDir;//! number of current directory
58     
59     Int_t         fNEventsRead;//!total 
60         
61     AliHBTEvent*  fTracksEvent;    //! tracks read from current event
62     AliHBTEvent*  fParticlesEvent; //! particles read from current event
63     
64     AliHBTRun*    fParticles; //!simulated particles
65     AliHBTRun*    fTracks; //!reconstructed tracks (particles)
66     
67     Bool_t        fIsRead;//!flag indicating if the data are already read
68     Bool_t        fBufferEvents;//flag indicating if the data should be bufferred
69     
70     Bool_t        fBlend;// flag indicating if randomly change positions of the particles after reading
71     
72     Int_t         fFirst;//first event to return (all are before are skipped)
73     Int_t         fLast;//last
74
75     TH1I*         fTrackCounter; //histogram with number of tracks read
76     
77     virtual Int_t ReadNext() = 0; //this methods reads next event and put result in fTracksEvent and/or fParticlesEvent
78     Bool_t Pass(AliHBTParticle*);
79     Bool_t Pass(Int_t pid);
80     void Blend();
81     
82     TString& GetDirName(Int_t);
83     
84   private:
85   
86   public:
87     ClassDef(AliHBTReader,4)//version 2 - TNamed as parental class
88                             //version 3 - Blending added
89 };
90
91 #endif