// @(#)root/vmc:$Id: TVirtualMCStack.h 20882 2007-11-19 11:31:26Z rdm $ // Authors: Ivana Hrivnacova 13/04/2002 /************************************************************************* * Copyright (C) 2006, Rene Brun and Fons Rademakers. * * Copyright (C) 2002, ALICE Experiment at CERN. * * All rights reserved. * * * * For the licensing terms see $ROOTSYS/LICENSE. * * For the list of contributors see $ROOTSYS/README/CREDITS. * *************************************************************************/ #ifndef ROOT_TVirtualMCStack #define ROOT_TVirtualMCStack // Class TVirtualMCStack // --------------------- // Interface to a user defined particles stack. // #include "TObject.h" #include "TMCProcess.h" class TParticle; class TVirtualMCStack : public TObject { public: // Constructor TVirtualMCStack(); // Destructor virtual ~TVirtualMCStack(); // // Methods for stacking // // Create a new particle and push into stack; // toBeDone - 1 if particles should go to tracking, 0 otherwise // parent - number of the parent track, -1 if track is primary // pdg - PDG encoding // px, py, pz - particle momentum [GeV/c] // e - total energy [GeV] // vx, vy, vz - position [cm] // tof - time of flight [s] // polx, poly, polz - polarization // mech - creator process VMC code // ntr - track number (is filled by the stack // weight - particle weight // is - generation status code virtual void PushTrack(Int_t toBeDone, 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) = 0; // The stack has to provide two pop mechanisms: // The first pop mechanism required. // Pop all particles with toBeDone = 1, both primaries and seconadies virtual TParticle* PopNextTrack(Int_t& itrack) = 0; // The second pop mechanism required. // Pop only primary particles with toBeDone = 1, stacking of secondaries // is done by MC virtual TParticle* PopPrimaryForTracking(Int_t i) = 0; // // Set methods // // Set the current track number virtual void SetCurrentTrack(Int_t trackNumber) = 0; // // Get methods // // Total number of tracks virtual Int_t GetNtrack() const = 0; // Total number of primary tracks virtual Int_t GetNprimary() const = 0; // Current track particle virtual TParticle* GetCurrentTrack() const= 0; // Current track number virtual Int_t GetCurrentTrackNumber() const = 0; // Number of the parent of the current track virtual Int_t GetCurrentParentTrackNumber() const = 0; ClassDef(TVirtualMCStack,1) //Interface to a particles stack }; #endif //ROOT_TVirtualMCStack