ROOT logo
// @(#)root/vmc:$Name:  $:$Id: TVirtualMC.h 27260 2009-01-27 16:26:34Z ivana $
// Authors: Ivana Hrivnacova, Rene Brun, Federico Carminati 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_TVirtualMC
#define ROOT_TVirtualMC

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//                                                                           //
//   Abstract Monte Carlo interface                                          //
//                                                                           //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include "TMCProcess.h"
#include "TMCParticleType.h"
#include "TMCOptical.h"
#include "TVirtualMCApplication.h"
#include "TVirtualMCStack.h"
#include "TVirtualMCDecayer.h"
#include "TVirtualMagField.h"
#include "TRandom.h"
#include "TString.h"
#include "TError.h"

class TLorentzVector;
class TGeoHMatrix;
class TArrayI;
class TArrayD;

class TVirtualMC : public TNamed {

public:
   // Standard constructor
   // isRootGeometrySupported = True if implementation of TVirtualMC
   //        supports geometry defined with TGeo
   TVirtualMC(const char *name, const char *title,
              Bool_t isRootGeometrySupported = kFALSE);

   // Default constructor
   TVirtualMC();

   // Destructor
   virtual ~TVirtualMC();

   // Static access method
   static TVirtualMC* GetMC();

   //
   // ------------------------------------------------
   // methods for building/management of geometry
   // ------------------------------------------------
   //

   // Info about supporting geometry defined via Root
   virtual Bool_t IsRootGeometrySupported() const { return kFALSE; }
                     // make this function =0 with next release

   //
   // functions from GCONS
   // ------------------------------------------------
   //

   // Return parameters for material specified by material number imat
   virtual void  Gfmate(Int_t imat, char *name, Float_t &a, Float_t &z,
                        Float_t &dens, Float_t &radl, Float_t &absl,
                        Float_t* ubuf, Int_t& nbuf) = 0;

   //  Return parameters for material specified by material number imat
   // (in double precision)
   virtual void  Gfmate(Int_t imat, char *name, Double_t &a, Double_t &z,
                        Double_t &dens, Double_t &radl, Double_t &absl,
                        Double_t* ubuf, Int_t& nbuf) = 0;

   // Check the parameters of a tracking medium
   virtual void  Gckmat(Int_t imed, char* name) = 0;


   // Define a material
   // kmat   number assigned to the material
   // name   material name
   // a      atomic mass in au
   // z      atomic number
   // dens   density in g/cm3
   // absl   absorption length in cm;
   //               if >=0 it is ignored and the program
   //               calculates it, if <0. -absl is taken
   // radl   radiation length in cm
   //               if >=0 it is ignored and the program
   //               calculates it, if <0. -radl is taken
   // buf    pointer to an array of user words
   // nwbuf  number of user words
   virtual void  Material(Int_t& kmat, const char* name, Double_t a,
                    Double_t z, Double_t dens, Double_t radl, Double_t absl,
                    Float_t* buf, Int_t nwbuf) = 0;

   // The same as previous but in double precision
   virtual void  Material(Int_t& kmat, const char* name, Double_t a,
                     Double_t z, Double_t dens, Double_t radl, Double_t absl,
                     Double_t* buf, Int_t nwbuf) = 0;

   // Define mixture or compound
   // with a number kmat composed by the basic nlmat materials defined
   // by arrays a, z and wmat
   //
   // If nlmat > 0 then wmat contains the proportion by
   // weights of each basic material in the mixture.
   //
   // If nlmat < 0 then wmat contains the number of atoms
   // of a given kind into the molecule of the compound.
   // In this case, wmat in output is changed to relative
   // weights.
   virtual void  Mixture(Int_t& kmat, const char *name, Float_t *a,
                     Float_t *z, Double_t dens, Int_t nlmat, Float_t *wmat) = 0;

   // The same as previous but in double precision
   virtual void  Mixture(Int_t& kmat, const char *name, Double_t *a,
                     Double_t *z, Double_t dens, Int_t nlmat, Double_t *wmat) = 0;

   // Define a medium.
   // kmed      tracking medium number assigned
   // name      tracking medium name
   // nmat      material number
   // isvol     sensitive volume flag
   // ifield    magnetic field:
   //                  - ifield = 0 if no magnetic field;
   //                  - ifield = -1 if user decision in guswim;
   //                  - ifield = 1 if tracking performed with g3rkuta;
   //                  - ifield = 2 if tracking performed with g3helix;
   //                  - ifield = 3 if tracking performed with g3helx3.
   // fieldm    max. field value (kilogauss)
   // tmaxfd    max. angle due to field (deg/step)
   // stemax    max. step allowed
   // deemax    max. fraction of energy lost in a step
   // epsil     tracking precision (cm)
   // stmin     min. step due to continuous processes (cm)
   // ubuf      pointer to an array of user words
   // nbuf      number of user words
   virtual void  Medium(Int_t& kmed, const char *name, Int_t nmat,
                     Int_t isvol, Int_t ifield, Double_t fieldm, Double_t tmaxfd,
                     Double_t stemax, Double_t deemax, Double_t epsil,
                     Double_t stmin, Float_t* ubuf, Int_t nbuf) = 0;

   // The same as previous but in double precision
   virtual void  Medium(Int_t& kmed, const char *name, Int_t nmat,
                     Int_t isvol, Int_t ifield, Double_t fieldm, Double_t tmaxfd,
                     Double_t stemax, Double_t deemax, Double_t epsil,
                     Double_t stmin, Double_t* ubuf, Int_t nbuf) = 0;

   // Define a rotation matrix
   // krot     rotation matrix number assigned
   // thetaX   polar angle for axis X
   // phiX     azimuthal angle for axis X
   // thetaY   polar angle for axis Y
   // phiY     azimuthal angle for axis Y
   // thetaZ   polar angle for axis Z
   // phiZ     azimuthal angle for axis Z
   virtual void  Matrix(Int_t& krot, Double_t thetaX, Double_t phiX,
                     Double_t thetaY, Double_t phiY, Double_t thetaZ,
                     Double_t phiZ) = 0;

   // Change the value of cut or mechanism param
   // to a new value parval for tracking medium itmed.
   // In Geant3, the  data  structure JTMED contains the standard tracking
   // parameters (CUTS and flags to control the physics processes)  which
   // are used  by default for all tracking media.
   // It is possible to redefine individually with this funstion any of these
   // parameters for a given tracking medium.
   //  itmed   tracking medium number
   //  param   is a character string (variable name)
   //  parval  must be given as a floating point.
   virtual void  Gstpar(Int_t itmed, const char *param, Double_t parval) = 0;

   //
   // functions from GGEOM
   // ------------------------------------------------
   //

   // Create a new volume
   // name   Volume name
   // shape  Volume type
   // nmed   Tracking medium number
   // np     Number of shape parameters
   // upar   Vector containing shape parameters
   virtual Int_t  Gsvolu(const char *name, const char *shape, Int_t nmed,
                          Float_t *upar, Int_t np) = 0;

   // The same as previous but in double precision
   virtual Int_t  Gsvolu(const char *name, const char *shape, Int_t nmed,
                          Double_t *upar, Int_t np) = 0;

   // Create a new volume by dividing an existing one.
   // It divides a previously defined volume
   // name   Volume name
   // mother Mother volume name
   // ndiv   Number of divisions
   // iaxis  Axis value:
   //               X,Y,Z of CAXIS will be translated to 1,2,3 for IAXIS.
   virtual void  Gsdvn(const char *name, const char *mother, Int_t ndiv,
                         Int_t iaxis) = 0;

   // Create a new volume by dividing an existing one.
   // Divide mother into ndiv divisions called name
   // along axis iaxis starting at coordinate value c0i.
   // The new volume created will be medium number numed.
   virtual void  Gsdvn2(const char *name, const char *mother, Int_t ndiv,
                         Int_t iaxis, Double_t c0i, Int_t numed) = 0;

   // Create a new volume by dividing an existing one
   // Divide mother into divisions called name along
   // axis iaxis in steps of step. If not exactly divisible
   // will make as many as possible and will center them
   // with respect to the mother. Divisions will have medium
   // number numed. If numed is 0, numed of mother is taken.
   // ndvmx is the expected maximum number of divisions
   // (If 0, no protection tests are performed in Geant3)
   virtual void  Gsdvt(const char *name, const char *mother, Double_t step,
                         Int_t iaxis, Int_t numed, Int_t ndvmx) = 0;

   // Create a new volume by dividing an existing one
   // Divides mother into divisions called name along
   // axis iaxis starting at coordinate value c0 with step
   // size step.
   // The new volume created will have medium number numed.
   // If numed is 0, numed of mother is taken.
   // ndvmx is the expected maximum number of divisions
   // (If 0, no protection tests are performed in Geant3)
   virtual void  Gsdvt2(const char *name, const char *mother, Double_t step,
                         Int_t iaxis, Double_t c0, Int_t numed, Int_t ndvmx) = 0;

   // Flag volume name whose contents will have to be ordered
   // along axis iax, by setting the search flag to -iax
   // (Geant3 only)
   virtual void  Gsord(const char *name, Int_t iax) = 0;

   // Position a volume into an existing one.
   // It positions a previously defined volume in the mother.
   //   name   Volume name
   //   nr     Copy number of the volume
   //   mother Mother volume name
   //   x      X coord. of the volume in mother ref. sys.
   //   y      Y coord. of the volume in mother ref. sys.
   //   z      Z coord. of the volume in mother ref. sys.
   //   irot   Rotation matrix number w.r.t. mother ref. sys.
   //   konly  ONLY/MANY flag
   virtual void  Gspos(const char *name, Int_t nr, const char *mother,
                         Double_t x, Double_t y, Double_t z, Int_t irot,
                         const char *konly="ONLY") = 0;

   // Place a copy of generic volume name with user number
   //  nr inside mother, with its parameters upar(1..np)
   virtual void  Gsposp(const char *name, Int_t nr, const char *mother,
                         Double_t x, Double_t y, Double_t z, Int_t irot,
                         const char *konly, Float_t *upar, Int_t np) = 0;

   // The same as previous but in double precision
   virtual void  Gsposp(const char *name, Int_t nr, const char *mother,
                         Double_t x, Double_t y, Double_t z, Int_t irot,
                         const char *konly, Double_t *upar, Int_t np) = 0;

   // Helper function for resolving MANY.
   // Specify the ONLY volume that overlaps with the
   // specified MANY and has to be substracted.
   // (Geant4 only)
   virtual void  Gsbool(const char* onlyVolName, const char* manyVolName) = 0;

   // Define the tables for UV photon tracking in medium itmed.
   // Please note that it is the user's responsibility to
   // provide all the coefficients:
   //  itmed       Tracking medium number
   //  npckov      Number of bins of each table
   //  ppckov      Value of photon momentum (in GeV)
   //  absco       Absorption coefficients
   //                     dielectric: absorption length in cm
   //                     metals    : absorption fraction (0<=x<=1)
   //  effic       Detection efficiency for UV photons
   //  rindex      Refraction index (if=0 metal)
   virtual void  SetCerenkov(Int_t itmed, Int_t npckov, Float_t *ppckov,
                               Float_t *absco, Float_t *effic, Float_t *rindex) = 0;

   // The same as previous but in double precision
   virtual void  SetCerenkov(Int_t itmed, Int_t npckov, Double_t *ppckov,
                               Double_t *absco, Double_t *effic, Double_t *rindex) = 0;

   //
   // functions for definition of surfaces
   // and material properties for optical physics
   // ------------------------------------------------
   //

   // Define the optical surface
   // name           surface name
   // model          selection of model (see #EMCOpSurfaceModel values)
   // surfaceType    surface type (see #EMCOpSurfaceType values)
   // surfaceFinish  surface quality (see #EMCOpSurfaceType values)
   // sigmaAlpha     an unified model surface parameter
   // (Geant4 only)
   virtual void  DefineOpSurface(const char* name,
                         EMCOpSurfaceModel model,
                         EMCOpSurfaceType surfaceType,
                         EMCOpSurfaceFinish surfaceFinish,
                         Double_t sigmaAlpha) = 0;

   // Define the optical surface border
   // name        border surface name
   // vol1Name    first volume name
   // vol1CopyNo  first volume copy number
   // vol2Name    second volume name
   // vol2CopyNo  second volume copy number
   // opSurfaceName  name of optical surface which this border belongs to
   // (Geant4 only)
   virtual void  SetBorderSurface(const char* name,
                         const char* vol1Name, int vol1CopyNo,
                         const char* vol2Name, int vol2CopyNo,
                         const char* opSurfaceName) = 0;

   // Define the optical skin surface
   // name        skin surface name
   // volName     volume name
   // opSurfaceName  name of optical surface which this border belongs to
   // (Geant4 only)
   virtual void  SetSkinSurface(const char* name,
                         const char* volName,
                         const char* opSurfaceName) = 0;

   // Define material property via a table of values
   // itmed         tracking medium id
   // propertyName  property name
   // np            number of bins of the table
   // pp            value of photon momentum (in GeV)
   // values        property values
   // (Geant4 only)
   virtual void  SetMaterialProperty(
                         Int_t itmed, const char* propertyName,
                         Int_t np, Double_t* pp, Double_t* values) = 0;

   // Define material property via a value
   // itmed         tracking medium id
   // propertyName  property name
   // value         property value
   // (Geant4 only)
   virtual void  SetMaterialProperty(
                         Int_t itmed, const char* propertyName,
                         Double_t value) = 0;

   // Define optical surface property via a table of values
   // surfaceName   optical surface name
   // propertyName  property name
   // np            number of bins of the table
   // pp            value of photon momentum (in GeV)
   // values        property values
   // (Geant4 only)
   virtual void  SetMaterialProperty(
                         const char* surfaceName, const char* propertyName,
                         Int_t np, Double_t* pp, Double_t* values) = 0;

   //
   // functions for access to geometry
   // ------------------------------------------------
   //

   // Return the transformation matrix between the volume specified by
   // the path volumePath and the top or master volume.
   virtual Bool_t GetTransformation(const TString& volumePath,
                         TGeoHMatrix& matrix) = 0;

   // Return the name of the shape (shapeType)  and its parameters par
   // for the volume specified by the path volumePath .
   virtual Bool_t GetShape(const TString& volumePath,
                         TString& shapeType, TArrayD& par) = 0;

   // Return the material parameters for the volume specified by
   // the volumeName.
   virtual Bool_t GetMaterial(const TString& volumeName,
                               TString& name, Int_t& imat,
                               Double_t& a, Double_t& z, Double_t& density,
                               Double_t& radl, Double_t& inter, TArrayD& par) = 0;

   // Return the medium parameters for the volume specified by the
   // volumeName.
   virtual Bool_t GetMedium(const TString& volumeName,
                             TString& name, Int_t& imed,
                             Int_t& nmat, Int_t& isvol, Int_t& ifield,
                             Double_t& fieldm, Double_t& tmaxfd, Double_t& stemax,
                             Double_t& deemax, Double_t& epsil, Double_t& stmin,
                             TArrayD& par) = 0;

   //
   // functions for drawing
   // to be removed with complete move to TGeo
   // ------------------------------------------------
   //

   // Deprecated - Geant3
   virtual void  DrawOneSpec(const char* name) = 0;
   // Deprecated - Geant3
   virtual void  Gsatt(const char* name, const char* att, Int_t val) = 0;
   // Deprecated - Geant3
   virtual void  Gdraw(const char*,Double_t theta = 30, Double_t phi = 30,
                        Double_t psi = 0, Double_t u0 = 10, Double_t v0 = 10,
                        Double_t ul = 0.01, Double_t vl = 0.01) = 0;

   // Write out the geometry of the detector in EUCLID file format
   // filnam  file name - will be with the extension .euc                 *
   // topvol  volume name of the starting node
   // number  copy number of topvol (relevant for gsposp)
   // nlevel  number of  levels in the tree structure
   //                to be written out, starting from topvol
   // (Geant3 only)
   virtual void  WriteEuclid(const char* filnam, const char* topvol,
                             Int_t number, Int_t nlevel) = 0;

   // Set geometry from Root (built via TGeo)
   virtual void  SetRootGeometry() = 0;

   //
   // get methods
   // ------------------------------------------------
   //

   // Return the unique numeric identifier for volume name volName
   virtual Int_t VolId(const char* volName) const = 0;

   // Return the volume name for a given volume identifier id
   virtual const char* VolName(Int_t id) const = 0;

   // Return the unique numeric identifier for medium name mediumName
   virtual Int_t MediumId(const char* mediumName) const = 0;

   // Return total number of volumes in the geometry
   virtual Int_t NofVolumes() const = 0;

   // Return material number for a given volume id
   virtual Int_t VolId2Mate(Int_t id) const = 0;

   // Return number of daughters of the volume specified by volName
   virtual Int_t NofVolDaughters(const char* volName) const = 0;

   // Return the name of i-th daughter of the volume specified by volName
   virtual const char*  VolDaughterName(const char* volName, Int_t i) const = 0;

   // Return the copyNo of i-th daughter of the volume specified by volName
   virtual Int_t        VolDaughterCopyNo(const char* volName, Int_t i) const = 0;

   //
   // ------------------------------------------------
   // methods for physics management
   // ------------------------------------------------
   //

   //
   // set methods
   // ------------------------------------------------
   //

   // Set transport cuts for particles
   virtual Bool_t   SetCut(const char* cutName, Double_t cutValue) = 0;

   // Set process control
   virtual Bool_t   SetProcess(const char* flagName, Int_t flagValue) = 0;

   // Set a user defined particle
   // Function is ignored if particle with specified pdg
   // already exists and error report is printed.
   //   pdg           PDG encoding  
   //   name          particle name
   //   mcType        VMC Particle type
   //   mass          mass [GeV]
   //   charge        charge [eplus]
   //   lifetime      time of life [s]
   //   pType         particle type as in Geant4
   //   width         width [GeV]
   //   iSpin         spin
   //   iParity       parity
   //   iConjugation  conjugation
   //   iIsospin      isospin 
   //   iIsospinZ     isospin - #rd component 
   //   gParity       gParity
   //   lepton        lepton number 
   //   baryon        baryon number
   //   stable        stability
   //   shortlived    is shorlived?
   //   subType       particle subType as in Geant4
   //   antiEncoding  anti encoding
   //   magMoment     magnetic moment
   //   excitation    excitation energy [GeV]
   virtual Bool_t   DefineParticle(Int_t pdg, const char* name,
                        TMCParticleType mcType, 
                        Double_t mass, Double_t charge, Double_t lifetime) = 0;
                        
   // Set a user defined particle
   // Function is ignored if particle with specified pdg
   // already exists and error report is printed.
   //   pdg           PDG encoding  
   //   name          particle name
   //   mcType        VMC Particle type
   //   mass          mass [GeV]
   //   charge        charge [eplus]
   //   lifetime      time of life [s]
   //   pType         particle type as in Geant4
   //   width         width [GeV]
   //   iSpin         spin
   //   iParity       parity
   //   iConjugation  conjugation
   //   iIsospin      isospin 
   //   iIsospinZ     isospin - #rd component 
   //   gParity       gParity
   //   lepton        lepton number 
   //   baryon        baryon number
   //   stable        stability
   //   shortlived    is shorlived?
   //   subType       particle subType as in Geant4
   //   antiEncoding  anti encoding
   //   magMoment     magnetic moment
   //   excitation    excitation energy [GeV]
   virtual Bool_t   DefineParticle(Int_t pdg, const char* name,
                        TMCParticleType mcType, 
                        Double_t mass, Double_t charge, Double_t lifetime, 
                        const TString& pType, Double_t width, 
                        Int_t iSpin, Int_t iParity, Int_t iConjugation, 
                        Int_t iIsospin, Int_t iIsospinZ, Int_t gParity,
                        Int_t lepton, Int_t baryon,
                        Bool_t stable, Bool_t shortlived = kFALSE,
                        const TString& subType = "",
                        Int_t antiEncoding = 0, Double_t magMoment = 0.0,
                        Double_t excitation = 0.0) = 0;

   // Set a user defined ion.
   //   name          ion name
   //   Z             atomic number
   //   A             atomic mass
   //   Q             charge [eplus}
   //   excitation    excitation energy [GeV]
   //   mass          mass  [GeV] (if not specified by user, approximative 
   //                 mass is calculated)                  
   virtual Bool_t   DefineIon(const char* name, Int_t Z, Int_t A,
                        Int_t Q, Double_t excEnergy, Double_t mass = 0.) = 0;

   // Set a user phase space decay for a particle
   //   pdg           particle PDG encoding
   //   bratios       the array with branching ratios (in %)
   //   mode[6][3]    the array with daughters particles PDG codes  for each 
   //                 decay channel
   virtual Bool_t   SetDecayMode(Int_t pdg, Float_t bratio[6], Int_t mode[6][3]) = 0;

   // Calculate X-sections
   // (Geant3 only)
   virtual Double_t Xsec(char*, Double_t, Int_t, Int_t) = 0;

   //
   // particle table usage
   // ------------------------------------------------
   //

   // Return MC specific code from a PDG and pseudo ENDF code (pdg)
   virtual Int_t   IdFromPDG(Int_t pdg) const =0;

   // Return PDG code and pseudo ENDF code from MC specific code (id)
   virtual Int_t   PDGFromId(Int_t id) const =0;

   //
   // get methods
   // ------------------------------------------------
   //

   // Return name of the particle specified by pdg.
   virtual TString   ParticleName(Int_t pdg) const = 0;

   // Return mass of the particle specified by pdg.
   virtual Double_t  ParticleMass(Int_t pdg) const = 0;

   // Return charge (in e units) of the particle specified by pdg.
   virtual Double_t  ParticleCharge(Int_t pdg) const = 0;

   // Return life time of the particle specified by pdg.
   virtual Double_t  ParticleLifeTime(Int_t pdg) const = 0;

   // Return VMC type of the particle specified by pdg.
   virtual TMCParticleType ParticleMCType(Int_t pdg) const = 0;

   //
   // ------------------------------------------------
   // methods for step management
   // ------------------------------------------------
   //

   //
   // action methods
   // ------------------------------------------------
   //

   // Stop the transport of the current particle and skip to the next
   virtual void StopTrack() = 0;

   // Stop simulation of the current event and skip to the next
   virtual void StopEvent() = 0;

   // Stop simulation of the current event and set the abort run flag to true
   virtual void StopRun() = 0;

   //
   // set methods
   // ------------------------------------------------
   //

   // Set the maximum step allowed till the particle is in the current medium
   virtual void SetMaxStep(Double_t) = 0;

   // Set the maximum number of steps till the particle is in the current medium
   virtual void SetMaxNStep(Int_t) = 0;

   // Force the decays of particles to be done with Pythia
   // and not with the Geant routines.
   virtual void SetUserDecay(Int_t pdg) = 0;

   // Force the decay time of the current particle
   virtual void ForceDecayTime(Float_t) = 0;

   //
   // tracking volume(s)
   // ------------------------------------------------
   //

   // Return the current volume ID and copy number
   virtual Int_t    CurrentVolID(Int_t& copyNo) const =0;

   // Return the current volume off upward in the geometrical tree
   // ID and copy number
   virtual Int_t    CurrentVolOffID(Int_t off, Int_t& copyNo) const =0;

   // Return the current volume name
   virtual const char* CurrentVolName() const =0;

   // Return the current volume off upward in the geometrical tree
   // name and copy number'
   // if name=0 no name is returned
   virtual const char* CurrentVolOffName(Int_t off) const =0;

   // Return the path in geometry tree for the current volume
   virtual const char* CurrentVolPath() = 0;

   // Return the parameters of the current material during transport
   virtual Int_t    CurrentMaterial(Float_t &a, Float_t &z,
                       Float_t &dens, Float_t &radl, Float_t &absl) const =0;

   // Return the number of the current medium
   virtual Int_t    CurrentMedium() const = 0;
                         // new function (to replace GetMedium() const)

   // Return the number of the current event
   virtual Int_t    CurrentEvent() const =0;

   // Computes coordinates xd in daughter reference system
   // from known coordinates xm in mother reference system.
   // xm    coordinates in mother reference system (input)
   // xd    coordinates in daughter reference system (output)
   // iflag
   // - IFLAG = 1  convert coordinates
   // - IFLAG = 2  convert direction cosines
   virtual void     Gmtod(Float_t* xm, Float_t* xd, Int_t iflag) = 0;

   // The same as previous but in double precision
   virtual void     Gmtod(Double_t* xm, Double_t* xd, Int_t iflag) = 0;

   // Computes coordinates xm in mother reference system
   // from known coordinates xd in daughter reference system.
   // xd    coordinates in daughter reference system (input)
   // xm    coordinates in mother reference system (output)
   // iflag
   // - IFLAG = 1  convert coordinates
   // - IFLAG = 2  convert direction cosines
   virtual void     Gdtom(Float_t* xd, Float_t* xm, Int_t iflag)= 0 ;

   // The same as previous but in double precision
   virtual void     Gdtom(Double_t* xd, Double_t* xm, Int_t iflag)= 0 ;

   // Return the maximum step length in the current medium
   virtual Double_t MaxStep() const =0;

   // Return the maximum number of steps allowed in the current medium
   virtual Int_t    GetMaxNStep() const = 0;

   //
   // get methods
   // tracking particle
   // dynamic properties
   // ------------------------------------------------
   //

   // Return the current position in the master reference frame of the
   // track being transported
   virtual void     TrackPosition(TLorentzVector& position) const =0;

   // Return the current position in the master reference frame of the
   // track being transported
   virtual void     TrackPosition(Double_t &x, Double_t &y, Double_t &z) const =0;

   // Return the direction and the momentum (GeV/c) of the track
   // currently being transported
   virtual void     TrackMomentum(TLorentzVector& momentum) const =0;

   // Return the direction and the momentum (GeV/c) of the track
   // currently being transported
   virtual void     TrackMomentum(Double_t &px, Double_t &py, Double_t &pz, Double_t &etot) const =0;

   // Return the length in centimeters of the current step (in cm)
   virtual Double_t TrackStep() const =0;

   // Return the length of the current track from its origin (in cm)
   virtual Double_t TrackLength() const =0;

   // Return the current time of flight of the track being transported
   virtual Double_t TrackTime() const =0;

   // Return the energy lost in the current step
   virtual Double_t Edep() const =0;

   //
   // get methods
   // tracking particle
   // static properties
   // ------------------------------------------------
   //

   // Return the PDG of the particle transported
   virtual Int_t    TrackPid() const =0;

   // Return the charge of the track currently transported
   virtual Double_t TrackCharge() const =0;

   // Return the mass of the track currently transported
   virtual Double_t TrackMass() const =0;

   // Return the total energy of the current track
   virtual Double_t Etot() const =0;

   //
   // get methods - track status
   // ------------------------------------------------
   //

   // Return true when the track performs the first step
   virtual Bool_t   IsNewTrack() const =0;

   // Return true if the track is not at the boundary of the current volume
   virtual Bool_t   IsTrackInside() const =0;

   // Return true if this is the first step of the track in the current volume
   virtual Bool_t   IsTrackEntering() const =0;

   // Return true if this is the last step of the track in the current volume
   virtual Bool_t   IsTrackExiting() const =0;

   // Return true if the track is out of the setup
   virtual Bool_t   IsTrackOut() const =0;

   // Return true if the current particle has disappeared
   // either because it decayed or because it underwent
   // an inelastic collision
   virtual Bool_t   IsTrackDisappeared() const =0;

   // Return true if the track energy has fallen below the threshold
   virtual Bool_t   IsTrackStop() const =0;

   // Return true if the current particle is alive and will continue to be
   // transported
   virtual Bool_t   IsTrackAlive() const=0;

   //
   // get methods - secondaries
   // ------------------------------------------------
   //

   // Return the number of secondary particles generated in the current step
   virtual Int_t    NSecondaries() const=0;

   // Return the parameters of the secondary track number isec produced
   // in the current step
   virtual void     GetSecondary(Int_t isec, Int_t& particleId,
   		       TLorentzVector& position, TLorentzVector& momentum) =0;

   // Return the VMC code of the process that has produced the secondary
   // particles in the current step
   virtual TMCProcess ProdProcess(Int_t isec) const =0;

   // Return the array of the VMC code of the processes active in the current
   // step
   virtual Int_t    StepProcesses(TArrayI &proc) const = 0;

   // Return the information about the transport order needed by the stack
   virtual Bool_t   SecondariesAreOrdered() const = 0;

   //
   // ------------------------------------------------
   // Geant3 specific methods
   // !!! to be removed with move to TGeo
   // ------------------------------------------------
   //

   // Set/modify the drawing options.
   // Deprecated - G3 only
   virtual void Gdopt(const char*,const char*) = 0;

   // This function allows subtractions (via boolean operation) of BOX shape
   // from any part of the detector, therefore showing its inner contents
   // Deprecated - G3 only
   virtual void SetClipBox(const char*,Double_t=-9999,Double_t=0, Double_t=-9999,
   			   Double_t=0,Double_t=-9999,Double_t=0) = 0;

   // Deprecated - G3 only
   virtual void DefaultRange() = 0;

   // Deprecated - G3 only
   virtual void Gdhead(Int_t, const char*, Double_t=0) = 0;

   // Deprecated - G3 only
   virtual void Gdman(Double_t, Double_t, const char*) = 0;

   //
   // ------------------------------------------------
   // Control methods
   // ------------------------------------------------
   //

   // Initialize MC
   virtual void Init() = 0;

   // Initialize MC physics
   virtual void BuildPhysics() = 0;

   // Process one event
   virtual void ProcessEvent() = 0;

   // Process one  run and return true if run has finished successfully,
   // return false in other cases (run aborted by user)
   virtual Bool_t ProcessRun(Int_t nevent) = 0;

   // Set switches for lego transport
   virtual void InitLego() = 0;

   //
    // ------------------------------------------------
   // Set methods
   // ------------------------------------------------
   //

   // Set the particle stack
   virtual void SetStack(TVirtualMCStack* stack);

   // Set the external decayer
   virtual void SetExternalDecayer(TVirtualMCDecayer* decayer);

   // Set the random number generator
   virtual void SetRandom(TRandom* random);

   // Set the magnetic field
   virtual void SetMagField(TVirtualMagField* field);

    //
    // ------------------------------------------------
    // Get methods
    // ------------------------------------------------
    //

    // Return the particle stack
    virtual TVirtualMCStack*   GetStack() const   { return fStack; }

    // Return the external decayer
    virtual TVirtualMCDecayer* GetDecayer() const { return fDecayer; }

    // Return the random number generator
    virtual TRandom*           GetRandom() const  { return fRandom; }

    // Return the magnetic field
    virtual TVirtualMagField*  GetMagField() const  { return fMagField; }


protected:
   TVirtualMCApplication* fApplication; //! User MC application

private:
   TVirtualMC(const TVirtualMC &mc);
   TVirtualMC & operator=(const TVirtualMC &);

   static TVirtualMC*  fgMC;     // Monte Carlo singleton instance

   TVirtualMCStack*    fStack;   //! Particles stack
   TVirtualMCDecayer*  fDecayer; //! External decayer
   TRandom*            fRandom;  //! Random number generator
   TVirtualMagField*   fMagField;//! Magnetic field

   ClassDef(TVirtualMC,1)  //Interface to Monte Carlo
};

R__EXTERN TVirtualMC *gMC;

#endif //ROOT_TVirtualMC

 TVirtualMC.h:1
 TVirtualMC.h:2
 TVirtualMC.h:3
 TVirtualMC.h:4
 TVirtualMC.h:5
 TVirtualMC.h:6
 TVirtualMC.h:7
 TVirtualMC.h:8
 TVirtualMC.h:9
 TVirtualMC.h:10
 TVirtualMC.h:11
 TVirtualMC.h:12
 TVirtualMC.h:13
 TVirtualMC.h:14
 TVirtualMC.h:15
 TVirtualMC.h:16
 TVirtualMC.h:17
 TVirtualMC.h:18
 TVirtualMC.h:19
 TVirtualMC.h:20
 TVirtualMC.h:21
 TVirtualMC.h:22
 TVirtualMC.h:23
 TVirtualMC.h:24
 TVirtualMC.h:25
 TVirtualMC.h:26
 TVirtualMC.h:27
 TVirtualMC.h:28
 TVirtualMC.h:29
 TVirtualMC.h:30
 TVirtualMC.h:31
 TVirtualMC.h:32
 TVirtualMC.h:33
 TVirtualMC.h:34
 TVirtualMC.h:35
 TVirtualMC.h:36
 TVirtualMC.h:37
 TVirtualMC.h:38
 TVirtualMC.h:39
 TVirtualMC.h:40
 TVirtualMC.h:41
 TVirtualMC.h:42
 TVirtualMC.h:43
 TVirtualMC.h:44
 TVirtualMC.h:45
 TVirtualMC.h:46
 TVirtualMC.h:47
 TVirtualMC.h:48
 TVirtualMC.h:49
 TVirtualMC.h:50
 TVirtualMC.h:51
 TVirtualMC.h:52
 TVirtualMC.h:53
 TVirtualMC.h:54
 TVirtualMC.h:55
 TVirtualMC.h:56
 TVirtualMC.h:57
 TVirtualMC.h:58
 TVirtualMC.h:59
 TVirtualMC.h:60
 TVirtualMC.h:61
 TVirtualMC.h:62
 TVirtualMC.h:63
 TVirtualMC.h:64
 TVirtualMC.h:65
 TVirtualMC.h:66
 TVirtualMC.h:67
 TVirtualMC.h:68
 TVirtualMC.h:69
 TVirtualMC.h:70
 TVirtualMC.h:71
 TVirtualMC.h:72
 TVirtualMC.h:73
 TVirtualMC.h:74
 TVirtualMC.h:75
 TVirtualMC.h:76
 TVirtualMC.h:77
 TVirtualMC.h:78
 TVirtualMC.h:79
 TVirtualMC.h:80
 TVirtualMC.h:81
 TVirtualMC.h:82
 TVirtualMC.h:83
 TVirtualMC.h:84
 TVirtualMC.h:85
 TVirtualMC.h:86
 TVirtualMC.h:87
 TVirtualMC.h:88
 TVirtualMC.h:89
 TVirtualMC.h:90
 TVirtualMC.h:91
 TVirtualMC.h:92
 TVirtualMC.h:93
 TVirtualMC.h:94
 TVirtualMC.h:95
 TVirtualMC.h:96
 TVirtualMC.h:97
 TVirtualMC.h:98
 TVirtualMC.h:99
 TVirtualMC.h:100
 TVirtualMC.h:101
 TVirtualMC.h:102
 TVirtualMC.h:103
 TVirtualMC.h:104
 TVirtualMC.h:105
 TVirtualMC.h:106
 TVirtualMC.h:107
 TVirtualMC.h:108
 TVirtualMC.h:109
 TVirtualMC.h:110
 TVirtualMC.h:111
 TVirtualMC.h:112
 TVirtualMC.h:113
 TVirtualMC.h:114
 TVirtualMC.h:115
 TVirtualMC.h:116
 TVirtualMC.h:117
 TVirtualMC.h:118
 TVirtualMC.h:119
 TVirtualMC.h:120
 TVirtualMC.h:121
 TVirtualMC.h:122
 TVirtualMC.h:123
 TVirtualMC.h:124
 TVirtualMC.h:125
 TVirtualMC.h:126
 TVirtualMC.h:127
 TVirtualMC.h:128
 TVirtualMC.h:129
 TVirtualMC.h:130
 TVirtualMC.h:131
 TVirtualMC.h:132
 TVirtualMC.h:133
 TVirtualMC.h:134
 TVirtualMC.h:135
 TVirtualMC.h:136
 TVirtualMC.h:137
 TVirtualMC.h:138
 TVirtualMC.h:139
 TVirtualMC.h:140
 TVirtualMC.h:141
 TVirtualMC.h:142
 TVirtualMC.h:143
 TVirtualMC.h:144
 TVirtualMC.h:145
 TVirtualMC.h:146
 TVirtualMC.h:147
 TVirtualMC.h:148
 TVirtualMC.h:149
 TVirtualMC.h:150
 TVirtualMC.h:151
 TVirtualMC.h:152
 TVirtualMC.h:153
 TVirtualMC.h:154
 TVirtualMC.h:155
 TVirtualMC.h:156
 TVirtualMC.h:157
 TVirtualMC.h:158
 TVirtualMC.h:159
 TVirtualMC.h:160
 TVirtualMC.h:161
 TVirtualMC.h:162
 TVirtualMC.h:163
 TVirtualMC.h:164
 TVirtualMC.h:165
 TVirtualMC.h:166
 TVirtualMC.h:167
 TVirtualMC.h:168
 TVirtualMC.h:169
 TVirtualMC.h:170
 TVirtualMC.h:171
 TVirtualMC.h:172
 TVirtualMC.h:173
 TVirtualMC.h:174
 TVirtualMC.h:175
 TVirtualMC.h:176
 TVirtualMC.h:177
 TVirtualMC.h:178
 TVirtualMC.h:179
 TVirtualMC.h:180
 TVirtualMC.h:181
 TVirtualMC.h:182
 TVirtualMC.h:183
 TVirtualMC.h:184
 TVirtualMC.h:185
 TVirtualMC.h:186
 TVirtualMC.h:187
 TVirtualMC.h:188
 TVirtualMC.h:189
 TVirtualMC.h:190
 TVirtualMC.h:191
 TVirtualMC.h:192
 TVirtualMC.h:193
 TVirtualMC.h:194
 TVirtualMC.h:195
 TVirtualMC.h:196
 TVirtualMC.h:197
 TVirtualMC.h:198
 TVirtualMC.h:199
 TVirtualMC.h:200
 TVirtualMC.h:201
 TVirtualMC.h:202
 TVirtualMC.h:203
 TVirtualMC.h:204
 TVirtualMC.h:205
 TVirtualMC.h:206
 TVirtualMC.h:207
 TVirtualMC.h:208
 TVirtualMC.h:209
 TVirtualMC.h:210
 TVirtualMC.h:211
 TVirtualMC.h:212
 TVirtualMC.h:213
 TVirtualMC.h:214
 TVirtualMC.h:215
 TVirtualMC.h:216
 TVirtualMC.h:217
 TVirtualMC.h:218
 TVirtualMC.h:219
 TVirtualMC.h:220
 TVirtualMC.h:221
 TVirtualMC.h:222
 TVirtualMC.h:223
 TVirtualMC.h:224
 TVirtualMC.h:225
 TVirtualMC.h:226
 TVirtualMC.h:227
 TVirtualMC.h:228
 TVirtualMC.h:229
 TVirtualMC.h:230
 TVirtualMC.h:231
 TVirtualMC.h:232
 TVirtualMC.h:233
 TVirtualMC.h:234
 TVirtualMC.h:235
 TVirtualMC.h:236
 TVirtualMC.h:237
 TVirtualMC.h:238
 TVirtualMC.h:239
 TVirtualMC.h:240
 TVirtualMC.h:241
 TVirtualMC.h:242
 TVirtualMC.h:243
 TVirtualMC.h:244
 TVirtualMC.h:245
 TVirtualMC.h:246
 TVirtualMC.h:247
 TVirtualMC.h:248
 TVirtualMC.h:249
 TVirtualMC.h:250
 TVirtualMC.h:251
 TVirtualMC.h:252
 TVirtualMC.h:253
 TVirtualMC.h:254
 TVirtualMC.h:255
 TVirtualMC.h:256
 TVirtualMC.h:257
 TVirtualMC.h:258
 TVirtualMC.h:259
 TVirtualMC.h:260
 TVirtualMC.h:261
 TVirtualMC.h:262
 TVirtualMC.h:263
 TVirtualMC.h:264
 TVirtualMC.h:265
 TVirtualMC.h:266
 TVirtualMC.h:267
 TVirtualMC.h:268
 TVirtualMC.h:269
 TVirtualMC.h:270
 TVirtualMC.h:271
 TVirtualMC.h:272
 TVirtualMC.h:273
 TVirtualMC.h:274
 TVirtualMC.h:275
 TVirtualMC.h:276
 TVirtualMC.h:277
 TVirtualMC.h:278
 TVirtualMC.h:279
 TVirtualMC.h:280
 TVirtualMC.h:281
 TVirtualMC.h:282
 TVirtualMC.h:283
 TVirtualMC.h:284
 TVirtualMC.h:285
 TVirtualMC.h:286
 TVirtualMC.h:287
 TVirtualMC.h:288
 TVirtualMC.h:289
 TVirtualMC.h:290
 TVirtualMC.h:291
 TVirtualMC.h:292
 TVirtualMC.h:293
 TVirtualMC.h:294
 TVirtualMC.h:295
 TVirtualMC.h:296
 TVirtualMC.h:297
 TVirtualMC.h:298
 TVirtualMC.h:299
 TVirtualMC.h:300
 TVirtualMC.h:301
 TVirtualMC.h:302
 TVirtualMC.h:303
 TVirtualMC.h:304
 TVirtualMC.h:305
 TVirtualMC.h:306
 TVirtualMC.h:307
 TVirtualMC.h:308
 TVirtualMC.h:309
 TVirtualMC.h:310
 TVirtualMC.h:311
 TVirtualMC.h:312
 TVirtualMC.h:313
 TVirtualMC.h:314
 TVirtualMC.h:315
 TVirtualMC.h:316
 TVirtualMC.h:317
 TVirtualMC.h:318
 TVirtualMC.h:319
 TVirtualMC.h:320
 TVirtualMC.h:321
 TVirtualMC.h:322
 TVirtualMC.h:323
 TVirtualMC.h:324
 TVirtualMC.h:325
 TVirtualMC.h:326
 TVirtualMC.h:327
 TVirtualMC.h:328
 TVirtualMC.h:329
 TVirtualMC.h:330
 TVirtualMC.h:331
 TVirtualMC.h:332
 TVirtualMC.h:333
 TVirtualMC.h:334
 TVirtualMC.h:335
 TVirtualMC.h:336
 TVirtualMC.h:337
 TVirtualMC.h:338
 TVirtualMC.h:339
 TVirtualMC.h:340
 TVirtualMC.h:341
 TVirtualMC.h:342
 TVirtualMC.h:343
 TVirtualMC.h:344
 TVirtualMC.h:345
 TVirtualMC.h:346
 TVirtualMC.h:347
 TVirtualMC.h:348
 TVirtualMC.h:349
 TVirtualMC.h:350
 TVirtualMC.h:351
 TVirtualMC.h:352
 TVirtualMC.h:353
 TVirtualMC.h:354
 TVirtualMC.h:355
 TVirtualMC.h:356
 TVirtualMC.h:357
 TVirtualMC.h:358
 TVirtualMC.h:359
 TVirtualMC.h:360
 TVirtualMC.h:361
 TVirtualMC.h:362
 TVirtualMC.h:363
 TVirtualMC.h:364
 TVirtualMC.h:365
 TVirtualMC.h:366
 TVirtualMC.h:367
 TVirtualMC.h:368
 TVirtualMC.h:369
 TVirtualMC.h:370
 TVirtualMC.h:371
 TVirtualMC.h:372
 TVirtualMC.h:373
 TVirtualMC.h:374
 TVirtualMC.h:375
 TVirtualMC.h:376
 TVirtualMC.h:377
 TVirtualMC.h:378
 TVirtualMC.h:379
 TVirtualMC.h:380
 TVirtualMC.h:381
 TVirtualMC.h:382
 TVirtualMC.h:383
 TVirtualMC.h:384
 TVirtualMC.h:385
 TVirtualMC.h:386
 TVirtualMC.h:387
 TVirtualMC.h:388
 TVirtualMC.h:389
 TVirtualMC.h:390
 TVirtualMC.h:391
 TVirtualMC.h:392
 TVirtualMC.h:393
 TVirtualMC.h:394
 TVirtualMC.h:395
 TVirtualMC.h:396
 TVirtualMC.h:397
 TVirtualMC.h:398
 TVirtualMC.h:399
 TVirtualMC.h:400
 TVirtualMC.h:401
 TVirtualMC.h:402
 TVirtualMC.h:403
 TVirtualMC.h:404
 TVirtualMC.h:405
 TVirtualMC.h:406
 TVirtualMC.h:407
 TVirtualMC.h:408
 TVirtualMC.h:409
 TVirtualMC.h:410
 TVirtualMC.h:411
 TVirtualMC.h:412
 TVirtualMC.h:413
 TVirtualMC.h:414
 TVirtualMC.h:415
 TVirtualMC.h:416
 TVirtualMC.h:417
 TVirtualMC.h:418
 TVirtualMC.h:419
 TVirtualMC.h:420
 TVirtualMC.h:421
 TVirtualMC.h:422
 TVirtualMC.h:423
 TVirtualMC.h:424
 TVirtualMC.h:425
 TVirtualMC.h:426
 TVirtualMC.h:427
 TVirtualMC.h:428
 TVirtualMC.h:429
 TVirtualMC.h:430
 TVirtualMC.h:431
 TVirtualMC.h:432
 TVirtualMC.h:433
 TVirtualMC.h:434
 TVirtualMC.h:435
 TVirtualMC.h:436
 TVirtualMC.h:437
 TVirtualMC.h:438
 TVirtualMC.h:439
 TVirtualMC.h:440
 TVirtualMC.h:441
 TVirtualMC.h:442
 TVirtualMC.h:443
 TVirtualMC.h:444
 TVirtualMC.h:445
 TVirtualMC.h:446
 TVirtualMC.h:447
 TVirtualMC.h:448
 TVirtualMC.h:449
 TVirtualMC.h:450
 TVirtualMC.h:451
 TVirtualMC.h:452
 TVirtualMC.h:453
 TVirtualMC.h:454
 TVirtualMC.h:455
 TVirtualMC.h:456
 TVirtualMC.h:457
 TVirtualMC.h:458
 TVirtualMC.h:459
 TVirtualMC.h:460
 TVirtualMC.h:461
 TVirtualMC.h:462
 TVirtualMC.h:463
 TVirtualMC.h:464
 TVirtualMC.h:465
 TVirtualMC.h:466
 TVirtualMC.h:467
 TVirtualMC.h:468
 TVirtualMC.h:469
 TVirtualMC.h:470
 TVirtualMC.h:471
 TVirtualMC.h:472
 TVirtualMC.h:473
 TVirtualMC.h:474
 TVirtualMC.h:475
 TVirtualMC.h:476
 TVirtualMC.h:477
 TVirtualMC.h:478
 TVirtualMC.h:479
 TVirtualMC.h:480
 TVirtualMC.h:481
 TVirtualMC.h:482
 TVirtualMC.h:483
 TVirtualMC.h:484
 TVirtualMC.h:485
 TVirtualMC.h:486
 TVirtualMC.h:487
 TVirtualMC.h:488
 TVirtualMC.h:489
 TVirtualMC.h:490
 TVirtualMC.h:491
 TVirtualMC.h:492
 TVirtualMC.h:493
 TVirtualMC.h:494
 TVirtualMC.h:495
 TVirtualMC.h:496
 TVirtualMC.h:497
 TVirtualMC.h:498
 TVirtualMC.h:499
 TVirtualMC.h:500
 TVirtualMC.h:501
 TVirtualMC.h:502
 TVirtualMC.h:503
 TVirtualMC.h:504
 TVirtualMC.h:505
 TVirtualMC.h:506
 TVirtualMC.h:507
 TVirtualMC.h:508
 TVirtualMC.h:509
 TVirtualMC.h:510
 TVirtualMC.h:511
 TVirtualMC.h:512
 TVirtualMC.h:513
 TVirtualMC.h:514
 TVirtualMC.h:515
 TVirtualMC.h:516
 TVirtualMC.h:517
 TVirtualMC.h:518
 TVirtualMC.h:519
 TVirtualMC.h:520
 TVirtualMC.h:521
 TVirtualMC.h:522
 TVirtualMC.h:523
 TVirtualMC.h:524
 TVirtualMC.h:525
 TVirtualMC.h:526
 TVirtualMC.h:527
 TVirtualMC.h:528
 TVirtualMC.h:529
 TVirtualMC.h:530
 TVirtualMC.h:531
 TVirtualMC.h:532
 TVirtualMC.h:533
 TVirtualMC.h:534
 TVirtualMC.h:535
 TVirtualMC.h:536
 TVirtualMC.h:537
 TVirtualMC.h:538
 TVirtualMC.h:539
 TVirtualMC.h:540
 TVirtualMC.h:541
 TVirtualMC.h:542
 TVirtualMC.h:543
 TVirtualMC.h:544
 TVirtualMC.h:545
 TVirtualMC.h:546
 TVirtualMC.h:547
 TVirtualMC.h:548
 TVirtualMC.h:549
 TVirtualMC.h:550
 TVirtualMC.h:551
 TVirtualMC.h:552
 TVirtualMC.h:553
 TVirtualMC.h:554
 TVirtualMC.h:555
 TVirtualMC.h:556
 TVirtualMC.h:557
 TVirtualMC.h:558
 TVirtualMC.h:559
 TVirtualMC.h:560
 TVirtualMC.h:561
 TVirtualMC.h:562
 TVirtualMC.h:563
 TVirtualMC.h:564
 TVirtualMC.h:565
 TVirtualMC.h:566
 TVirtualMC.h:567
 TVirtualMC.h:568
 TVirtualMC.h:569
 TVirtualMC.h:570
 TVirtualMC.h:571
 TVirtualMC.h:572
 TVirtualMC.h:573
 TVirtualMC.h:574
 TVirtualMC.h:575
 TVirtualMC.h:576
 TVirtualMC.h:577
 TVirtualMC.h:578
 TVirtualMC.h:579
 TVirtualMC.h:580
 TVirtualMC.h:581
 TVirtualMC.h:582
 TVirtualMC.h:583
 TVirtualMC.h:584
 TVirtualMC.h:585
 TVirtualMC.h:586
 TVirtualMC.h:587
 TVirtualMC.h:588
 TVirtualMC.h:589
 TVirtualMC.h:590
 TVirtualMC.h:591
 TVirtualMC.h:592
 TVirtualMC.h:593
 TVirtualMC.h:594
 TVirtualMC.h:595
 TVirtualMC.h:596
 TVirtualMC.h:597
 TVirtualMC.h:598
 TVirtualMC.h:599
 TVirtualMC.h:600
 TVirtualMC.h:601
 TVirtualMC.h:602
 TVirtualMC.h:603
 TVirtualMC.h:604
 TVirtualMC.h:605
 TVirtualMC.h:606
 TVirtualMC.h:607
 TVirtualMC.h:608
 TVirtualMC.h:609
 TVirtualMC.h:610
 TVirtualMC.h:611
 TVirtualMC.h:612
 TVirtualMC.h:613
 TVirtualMC.h:614
 TVirtualMC.h:615
 TVirtualMC.h:616
 TVirtualMC.h:617
 TVirtualMC.h:618
 TVirtualMC.h:619
 TVirtualMC.h:620
 TVirtualMC.h:621
 TVirtualMC.h:622
 TVirtualMC.h:623
 TVirtualMC.h:624
 TVirtualMC.h:625
 TVirtualMC.h:626
 TVirtualMC.h:627
 TVirtualMC.h:628
 TVirtualMC.h:629
 TVirtualMC.h:630
 TVirtualMC.h:631
 TVirtualMC.h:632
 TVirtualMC.h:633
 TVirtualMC.h:634
 TVirtualMC.h:635
 TVirtualMC.h:636
 TVirtualMC.h:637
 TVirtualMC.h:638
 TVirtualMC.h:639
 TVirtualMC.h:640
 TVirtualMC.h:641
 TVirtualMC.h:642
 TVirtualMC.h:643
 TVirtualMC.h:644
 TVirtualMC.h:645
 TVirtualMC.h:646
 TVirtualMC.h:647
 TVirtualMC.h:648
 TVirtualMC.h:649
 TVirtualMC.h:650
 TVirtualMC.h:651
 TVirtualMC.h:652
 TVirtualMC.h:653
 TVirtualMC.h:654
 TVirtualMC.h:655
 TVirtualMC.h:656
 TVirtualMC.h:657
 TVirtualMC.h:658
 TVirtualMC.h:659
 TVirtualMC.h:660
 TVirtualMC.h:661
 TVirtualMC.h:662
 TVirtualMC.h:663
 TVirtualMC.h:664
 TVirtualMC.h:665
 TVirtualMC.h:666
 TVirtualMC.h:667
 TVirtualMC.h:668
 TVirtualMC.h:669
 TVirtualMC.h:670
 TVirtualMC.h:671
 TVirtualMC.h:672
 TVirtualMC.h:673
 TVirtualMC.h:674
 TVirtualMC.h:675
 TVirtualMC.h:676
 TVirtualMC.h:677
 TVirtualMC.h:678
 TVirtualMC.h:679
 TVirtualMC.h:680
 TVirtualMC.h:681
 TVirtualMC.h:682
 TVirtualMC.h:683
 TVirtualMC.h:684
 TVirtualMC.h:685
 TVirtualMC.h:686
 TVirtualMC.h:687
 TVirtualMC.h:688
 TVirtualMC.h:689
 TVirtualMC.h:690
 TVirtualMC.h:691
 TVirtualMC.h:692
 TVirtualMC.h:693
 TVirtualMC.h:694
 TVirtualMC.h:695
 TVirtualMC.h:696
 TVirtualMC.h:697
 TVirtualMC.h:698
 TVirtualMC.h:699
 TVirtualMC.h:700
 TVirtualMC.h:701
 TVirtualMC.h:702
 TVirtualMC.h:703
 TVirtualMC.h:704
 TVirtualMC.h:705
 TVirtualMC.h:706
 TVirtualMC.h:707
 TVirtualMC.h:708
 TVirtualMC.h:709
 TVirtualMC.h:710
 TVirtualMC.h:711
 TVirtualMC.h:712
 TVirtualMC.h:713
 TVirtualMC.h:714
 TVirtualMC.h:715
 TVirtualMC.h:716
 TVirtualMC.h:717
 TVirtualMC.h:718
 TVirtualMC.h:719
 TVirtualMC.h:720
 TVirtualMC.h:721
 TVirtualMC.h:722
 TVirtualMC.h:723
 TVirtualMC.h:724
 TVirtualMC.h:725
 TVirtualMC.h:726
 TVirtualMC.h:727
 TVirtualMC.h:728
 TVirtualMC.h:729
 TVirtualMC.h:730
 TVirtualMC.h:731
 TVirtualMC.h:732
 TVirtualMC.h:733
 TVirtualMC.h:734
 TVirtualMC.h:735
 TVirtualMC.h:736
 TVirtualMC.h:737
 TVirtualMC.h:738
 TVirtualMC.h:739
 TVirtualMC.h:740
 TVirtualMC.h:741
 TVirtualMC.h:742
 TVirtualMC.h:743
 TVirtualMC.h:744
 TVirtualMC.h:745
 TVirtualMC.h:746
 TVirtualMC.h:747
 TVirtualMC.h:748
 TVirtualMC.h:749
 TVirtualMC.h:750
 TVirtualMC.h:751
 TVirtualMC.h:752
 TVirtualMC.h:753
 TVirtualMC.h:754
 TVirtualMC.h:755
 TVirtualMC.h:756
 TVirtualMC.h:757
 TVirtualMC.h:758
 TVirtualMC.h:759
 TVirtualMC.h:760
 TVirtualMC.h:761
 TVirtualMC.h:762
 TVirtualMC.h:763
 TVirtualMC.h:764
 TVirtualMC.h:765
 TVirtualMC.h:766
 TVirtualMC.h:767
 TVirtualMC.h:768
 TVirtualMC.h:769
 TVirtualMC.h:770
 TVirtualMC.h:771
 TVirtualMC.h:772
 TVirtualMC.h:773
 TVirtualMC.h:774
 TVirtualMC.h:775
 TVirtualMC.h:776
 TVirtualMC.h:777
 TVirtualMC.h:778
 TVirtualMC.h:779
 TVirtualMC.h:780
 TVirtualMC.h:781
 TVirtualMC.h:782
 TVirtualMC.h:783
 TVirtualMC.h:784
 TVirtualMC.h:785
 TVirtualMC.h:786
 TVirtualMC.h:787
 TVirtualMC.h:788
 TVirtualMC.h:789
 TVirtualMC.h:790
 TVirtualMC.h:791
 TVirtualMC.h:792
 TVirtualMC.h:793
 TVirtualMC.h:794
 TVirtualMC.h:795
 TVirtualMC.h:796
 TVirtualMC.h:797
 TVirtualMC.h:798
 TVirtualMC.h:799
 TVirtualMC.h:800
 TVirtualMC.h:801
 TVirtualMC.h:802
 TVirtualMC.h:803
 TVirtualMC.h:804
 TVirtualMC.h:805
 TVirtualMC.h:806
 TVirtualMC.h:807
 TVirtualMC.h:808
 TVirtualMC.h:809
 TVirtualMC.h:810
 TVirtualMC.h:811
 TVirtualMC.h:812
 TVirtualMC.h:813
 TVirtualMC.h:814
 TVirtualMC.h:815
 TVirtualMC.h:816
 TVirtualMC.h:817
 TVirtualMC.h:818
 TVirtualMC.h:819
 TVirtualMC.h:820
 TVirtualMC.h:821
 TVirtualMC.h:822
 TVirtualMC.h:823
 TVirtualMC.h:824
 TVirtualMC.h:825
 TVirtualMC.h:826
 TVirtualMC.h:827
 TVirtualMC.h:828
 TVirtualMC.h:829
 TVirtualMC.h:830
 TVirtualMC.h:831
 TVirtualMC.h:832
 TVirtualMC.h:833
 TVirtualMC.h:834
 TVirtualMC.h:835
 TVirtualMC.h:836
 TVirtualMC.h:837
 TVirtualMC.h:838
 TVirtualMC.h:839
 TVirtualMC.h:840
 TVirtualMC.h:841
 TVirtualMC.h:842
 TVirtualMC.h:843
 TVirtualMC.h:844
 TVirtualMC.h:845
 TVirtualMC.h:846
 TVirtualMC.h:847
 TVirtualMC.h:848
 TVirtualMC.h:849
 TVirtualMC.h:850
 TVirtualMC.h:851
 TVirtualMC.h:852
 TVirtualMC.h:853
 TVirtualMC.h:854
 TVirtualMC.h:855
 TVirtualMC.h:856
 TVirtualMC.h:857
 TVirtualMC.h:858
 TVirtualMC.h:859
 TVirtualMC.h:860
 TVirtualMC.h:861
 TVirtualMC.h:862
 TVirtualMC.h:863
 TVirtualMC.h:864
 TVirtualMC.h:865
 TVirtualMC.h:866
 TVirtualMC.h:867
 TVirtualMC.h:868
 TVirtualMC.h:869
 TVirtualMC.h:870
 TVirtualMC.h:871
 TVirtualMC.h:872
 TVirtualMC.h:873
 TVirtualMC.h:874
 TVirtualMC.h:875
 TVirtualMC.h:876
 TVirtualMC.h:877
 TVirtualMC.h:878
 TVirtualMC.h:879
 TVirtualMC.h:880
 TVirtualMC.h:881
 TVirtualMC.h:882
 TVirtualMC.h:883
 TVirtualMC.h:884
 TVirtualMC.h:885
 TVirtualMC.h:886
 TVirtualMC.h:887
 TVirtualMC.h:888
 TVirtualMC.h:889
 TVirtualMC.h:890
 TVirtualMC.h:891
 TVirtualMC.h:892
 TVirtualMC.h:893
 TVirtualMC.h:894
 TVirtualMC.h:895
 TVirtualMC.h:896
 TVirtualMC.h:897
 TVirtualMC.h:898
 TVirtualMC.h:899
 TVirtualMC.h:900
 TVirtualMC.h:901
 TVirtualMC.h:902
 TVirtualMC.h:903
 TVirtualMC.h:904
 TVirtualMC.h:905
 TVirtualMC.h:906
 TVirtualMC.h:907