ROOT logo
#ifndef ALI_STACK_H
#define ALI_STACK_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

//  Particles stack class
//  Implements the TMCVirtualStack of the Virtual Monte Carlo
//  Author A.Morsch

class TClonesArray;
class TFile;
class TObjArray;
class TParticle;
class TString;
class TTree;
#include <TClonesArray.h>
#include <TArrayI.h>
#include <TVirtualMCStack.h>

class AliHeader;

enum {kKeepBit=1, kDaughtersBit=2, kDoneBit=4, kTransportBit=BIT(14)};

class AliStack : public TVirtualMCStack
{
  public:
    // creators, destructors
    AliStack(Int_t size, const char* name = "");
    AliStack();
    AliStack(const AliStack& st);
    virtual ~AliStack();
    AliStack& operator=(const AliStack& st)
      {st.Copy(*this); return(*this);}

    // methods

    virtual void  PushTrack(Int_t done, Int_t parent, Int_t pdg, 
                           const Float_t *pmom, const Float_t *vpos, const Float_t *polar, 
                           Float_t tof, TMCProcess mech, Int_t &ntr,
                           Float_t weight, Int_t is);

    virtual void  PushTrack(Int_t done, Int_t parent, Int_t pdg,
                           Double_t px, Double_t py, Double_t pz, Double_t e,
                           Double_t vx, Double_t vy, Double_t vz, Double_t tof,
                           Double_t polx, Double_t poly, Double_t polz,
                           TMCProcess mech, Int_t &ntr, Double_t weight,
                           Int_t is);

    virtual TParticle* PopNextTrack(Int_t& track);
    virtual TParticle* GetCurrentTrack() const {return fCurrentTrack;}
    virtual TParticle* PopPrimaryForTracking(Int_t i);    

    void   ConnectTree(TTree* tree);
    Bool_t GetEvent();
    Bool_t PurifyKine();
    Bool_t ReorderKine();
    void   FinishEvent();
    void   FlagTrack(Int_t track);
    void   KeepTrack(Int_t itrack); 
    void   Clean(Int_t size = 0);
    void   Reset(Int_t size = 0);
    void   DumpPart(Int_t i) const;
    void   DumpPStack ();
    void   DumpLoadedStack () const;

    // set methods
    void  SetNtrack(Int_t ntrack);
    virtual void  SetCurrentTrack(Int_t track);                           
    void  SetHighWaterMark(Int_t hgwmk);    
    // get methods
    virtual Int_t GetNtrack() const;
    Int_t       GetNprimary() const;
    virtual Int_t GetCurrentTrackNumber() const;
    virtual Int_t GetCurrentParentTrackNumber() const;
    TParticle*  Particle(Int_t id);
    Int_t       GetPrimary(Int_t id);
    TTree*      TreeK() const {return fTreeK;}
    TParticle*  ParticleFromTreeK(Int_t id) const;
    Int_t       TreeKEntry(Int_t id) const;
    Bool_t      IsPhysicalPrimary(Int_t i);
    Bool_t      IsSecondaryFromWeakDecay(Int_t index);
    Bool_t      IsSecondaryFromMaterial (Int_t index);
    Int_t       TrackLabel(Int_t label) const {return fTrackLabelMap[label];}
    Int_t*      TrackLabelMap() {return fTrackLabelMap.GetArray();}
    const TObjArray*  Particles() const;
    
  protected:
    // methods
    void  CleanParents();
    void  ResetArrays(Int_t size);
    TParticle* GetParticleMapEntry(Int_t id) const;
    TParticle* GetNextParticle();
    Bool_t KeepPhysics(const TParticle* part);
    Bool_t IsStable(Int_t pdg) const;
  private:
    void Copy(TObject &st) const;

    // data members
    TClonesArray   fParticles;         //! Pointer to list of particles
    TObjArray      fParticleMap;       //! Map of particles in the supporting TClonesArray
    TArrayI        fParticleFileMap;   //  Map for particle ids 
    TParticle     *fParticleBuffer;    //! Pointer to current particle for writing
    TParticle     *fCurrentTrack;      //! Pointer to particle currently transported
    TTree         *fTreeK;             //! Particle stack  
    Int_t          fNtrack;            //  Number of tracks
    Int_t          fNprimary;          //  Number of primaries
    Int_t          fCurrent;           //! Last track returned from the stack
    Int_t          fCurrentPrimary;    //! Last primary track returned from the stack
    Int_t          fHgwmk;             //! Last track purified
    Int_t          fLoadPoint;         //! Next free position in the particle buffer
    TArrayI        fTrackLabelMap;     //! Map of track labels
    ClassDef(AliStack,5) //Particles stack
};

// inline

inline void  AliStack::SetNtrack(Int_t ntrack)
{ fNtrack = ntrack; }

inline Int_t AliStack::GetNtrack() const
{ return fNtrack; }

inline Int_t AliStack::GetNprimary() const
{ return fNprimary; }

inline Int_t AliStack::GetCurrentTrackNumber() const 
{ return fCurrent; }

inline const TObjArray* AliStack::Particles() const
{ return &fParticleMap; }

// inline protected

inline TParticle* AliStack::GetParticleMapEntry(Int_t id) const
{ return (TParticle*) fParticleMap.At(id); }

#endif //ALI_STACK_H
 AliStack.h:1
 AliStack.h:2
 AliStack.h:3
 AliStack.h:4
 AliStack.h:5
 AliStack.h:6
 AliStack.h:7
 AliStack.h:8
 AliStack.h:9
 AliStack.h:10
 AliStack.h:11
 AliStack.h:12
 AliStack.h:13
 AliStack.h:14
 AliStack.h:15
 AliStack.h:16
 AliStack.h:17
 AliStack.h:18
 AliStack.h:19
 AliStack.h:20
 AliStack.h:21
 AliStack.h:22
 AliStack.h:23
 AliStack.h:24
 AliStack.h:25
 AliStack.h:26
 AliStack.h:27
 AliStack.h:28
 AliStack.h:29
 AliStack.h:30
 AliStack.h:31
 AliStack.h:32
 AliStack.h:33
 AliStack.h:34
 AliStack.h:35
 AliStack.h:36
 AliStack.h:37
 AliStack.h:38
 AliStack.h:39
 AliStack.h:40
 AliStack.h:41
 AliStack.h:42
 AliStack.h:43
 AliStack.h:44
 AliStack.h:45
 AliStack.h:46
 AliStack.h:47
 AliStack.h:48
 AliStack.h:49
 AliStack.h:50
 AliStack.h:51
 AliStack.h:52
 AliStack.h:53
 AliStack.h:54
 AliStack.h:55
 AliStack.h:56
 AliStack.h:57
 AliStack.h:58
 AliStack.h:59
 AliStack.h:60
 AliStack.h:61
 AliStack.h:62
 AliStack.h:63
 AliStack.h:64
 AliStack.h:65
 AliStack.h:66
 AliStack.h:67
 AliStack.h:68
 AliStack.h:69
 AliStack.h:70
 AliStack.h:71
 AliStack.h:72
 AliStack.h:73
 AliStack.h:74
 AliStack.h:75
 AliStack.h:76
 AliStack.h:77
 AliStack.h:78
 AliStack.h:79
 AliStack.h:80
 AliStack.h:81
 AliStack.h:82
 AliStack.h:83
 AliStack.h:84
 AliStack.h:85
 AliStack.h:86
 AliStack.h:87
 AliStack.h:88
 AliStack.h:89
 AliStack.h:90
 AliStack.h:91
 AliStack.h:92
 AliStack.h:93
 AliStack.h:94
 AliStack.h:95
 AliStack.h:96
 AliStack.h:97
 AliStack.h:98
 AliStack.h:99
 AliStack.h:100
 AliStack.h:101
 AliStack.h:102
 AliStack.h:103
 AliStack.h:104
 AliStack.h:105
 AliStack.h:106
 AliStack.h:107
 AliStack.h:108
 AliStack.h:109
 AliStack.h:110
 AliStack.h:111
 AliStack.h:112
 AliStack.h:113
 AliStack.h:114
 AliStack.h:115
 AliStack.h:116
 AliStack.h:117
 AliStack.h:118
 AliStack.h:119
 AliStack.h:120
 AliStack.h:121
 AliStack.h:122
 AliStack.h:123
 AliStack.h:124
 AliStack.h:125
 AliStack.h:126
 AliStack.h:127
 AliStack.h:128
 AliStack.h:129
 AliStack.h:130
 AliStack.h:131
 AliStack.h:132
 AliStack.h:133
 AliStack.h:134
 AliStack.h:135
 AliStack.h:136
 AliStack.h:137
 AliStack.h:138
 AliStack.h:139