]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliStack.h
Modified plots and made jet finder use SDigits
[u/mrichter/AliRoot.git] / STEER / AliStack.h
1 #ifndef ALI_STACK_H
2 #define ALI_STACK_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //  Particles stack class
9 //  Implements the TMCVirtualStack of the Virtual Monte Carlo
10 //  Author A.Morsch
11
12 class TClonesArray;
13 class TFile;
14 class TObjArray;
15 class TParticle;
16 class TString;
17 class TTree;
18 #include <TArrayI.h>
19 #include <TVirtualMCStack.h>
20
21 class AliHeader;
22 #include "AliConfig.h"
23
24
25 class AliStack : public TVirtualMCStack
26 {
27   public:
28     // creators, destructors
29     AliStack(Int_t size, const char* evfoldname = AliConfig::GetDefaultEventFolderName());
30     AliStack();
31     AliStack(const AliStack& st);
32     virtual ~AliStack();
33     AliStack& operator=(const AliStack& st)
34       {st.Copy(*this); return(*this);}
35
36     // methods
37
38     virtual void  PushTrack(Int_t done, Int_t parent, Int_t pdg, 
39                            Float_t *pmom, Float_t *vpos, Float_t *polar, 
40                            Float_t tof, TMCProcess mech, Int_t &ntr,
41                            Float_t weight, Int_t is);
42
43     virtual void  PushTrack(Int_t done, Int_t parent, Int_t pdg,
44                            Double_t px, Double_t py, Double_t pz, Double_t e,
45                            Double_t vx, Double_t vy, Double_t vz, Double_t tof,
46                            Double_t polx, Double_t poly, Double_t polz,
47                            TMCProcess mech, Int_t &ntr, Double_t weight,
48                            Int_t is);
49
50     virtual TParticle* PopNextTrack(Int_t& track);
51     virtual TParticle* GetCurrentTrack() const {return fCurrentTrack;}
52     virtual TParticle* PopPrimaryForTracking(Int_t i);    
53
54     void  ConnectTree();
55     void  BeginEvent();
56     void  FinishRun();
57     Bool_t GetEvent();
58     void  PurifyKine();
59     void  FinishEvent();
60     void  FlagTrack(Int_t track);
61     void  KeepTrack(Int_t itrack); 
62     void  Reset(Int_t size = 0);
63     void  DumpPart(Int_t i) const;
64     void  DumpPStack ();
65     void  DumpLoadedStack () const;
66
67     // set methods
68     void  SetNtrack(Int_t ntrack);
69     virtual void  SetCurrentTrack(Int_t track);                           
70     void  SetHighWaterMark(Int_t hgwmk);    
71     // get methods
72     virtual Int_t GetNtrack() const;
73     Int_t       GetNprimary() const;
74     virtual Int_t GetCurrentTrackNumber() const;
75     virtual Int_t GetCurrentParentTrackNumber() const;
76     TObjArray*  Particles() const;
77     TParticle*  Particle(Int_t id);
78     Int_t       GetPrimary(Int_t id);
79     TTree*      TreeK();
80     void        SetEventFolderName(const char* foldname);
81     TParticle*  ParticleFromTreeK(Int_t id) const;
82     Int_t       TreeKEntry(Int_t id) const;
83     
84   protected:
85     // methods
86     void  CleanParents();
87     void  ResetArrays(Int_t size);
88     TParticle* GetNextParticle();
89     Bool_t KeepPhysics(TParticle* part);
90     
91   private:
92     void Copy(TObject &st) const;
93
94     // data members
95     TClonesArray  *fParticles;         //! Pointer to list of particles
96     TObjArray     *fParticleMap;       //! Map of particles in the supporting TClonesArray
97     TArrayI        fParticleFileMap;   //  Map for particle ids 
98     TParticle     *fParticleBuffer;    //! Pointer to current particle for writing
99     TParticle     *fCurrentTrack;      //! Pointer to particle currently transported
100     TTree         *fTreeK;             //! Particle stack  
101     Int_t          fNtrack;            //  Number of tracks
102     Int_t          fNprimary;          //  Number of primaries
103     Int_t          fCurrent;           //! Last track returned from the stack
104     Int_t          fCurrentPrimary;    //! Last primary track returned from the stack
105     Int_t          fHgwmk;             //! Last track purified
106     Int_t          fLoadPoint;         //! Next free position in the particle buffer
107     
108     TString        fEventFolderName;   //! Folder name where event is mounted
109     ClassDef(AliStack,4) //Particles stack
110 };
111
112 // inline
113
114 inline void  AliStack::SetNtrack(Int_t ntrack)
115 { fNtrack = ntrack; }
116
117 inline void  AliStack::SetCurrentTrack(Int_t track)
118 { fCurrent = track; }
119
120 inline Int_t AliStack::GetNtrack() const
121 { return fNtrack; }
122
123 inline Int_t AliStack::GetNprimary() const
124 { return fNprimary; }
125
126 inline Int_t AliStack::GetCurrentTrackNumber() const 
127 { return fCurrent; }
128
129 inline TObjArray* AliStack::Particles() const
130 { return fParticleMap; }
131
132 #endif //ALI_STACK_H