20#ifndef ROOT_TVirtualMC
21#define ROOT_TVirtualMC
38#include "TVirtualMCDecayer.h"
39#include "TVirtualMagField.h"
59 TVirtualMC(
const char *name,
const char *title, Bool_t isRootGeometrySupported = kFALSE);
98 virtual void Material(Int_t &kmat,
const char *name, Double_t a, Double_t z, Double_t dens, Double_t radl,
99 Double_t absl, Float_t *buf, Int_t nwbuf) = 0;
102 virtual void Material(Int_t &kmat,
const char *name, Double_t a, Double_t z, Double_t dens, Double_t radl,
103 Double_t absl, Double_t *buf, Int_t nwbuf) = 0;
116 virtual void Mixture(Int_t &kmat,
const char *name, Float_t *a, Float_t *z, Double_t dens, Int_t nlmat,
120 virtual void Mixture(Int_t &kmat,
const char *name, Double_t *a, Double_t *z, Double_t dens, Int_t nlmat,
142 virtual void Medium(Int_t &kmed,
const char *name, Int_t nmat, Int_t isvol, Int_t ifield, Double_t fieldm,
143 Double_t tmaxfd, Double_t stemax, Double_t deemax, Double_t epsil, Double_t stmin, Float_t *ubuf,
147 virtual void Medium(Int_t &kmed,
const char *name, Int_t nmat, Int_t isvol, Int_t ifield, Double_t fieldm,
148 Double_t tmaxfd, Double_t stemax, Double_t deemax, Double_t epsil, Double_t stmin,
149 Double_t *ubuf, Int_t nbuf) = 0;
159 virtual void Matrix(Int_t &krot, Double_t thetaX, Double_t phiX, Double_t thetaY, Double_t phiY, Double_t thetaZ,
172 virtual void Gstpar(Int_t itmed,
const char *param, Double_t parval) = 0;
185 virtual Int_t
Gsvolu(
const char *name,
const char *shape, Int_t nmed, Float_t *upar, Int_t np) = 0;
188 virtual Int_t
Gsvolu(
const char *name,
const char *shape, Int_t nmed, Double_t *upar, Int_t np) = 0;
197 virtual void Gsdvn(
const char *name,
const char *mother, Int_t ndiv, Int_t iaxis) = 0;
203 virtual void Gsdvn2(
const char *name,
const char *mother, Int_t ndiv, Int_t iaxis, Double_t c0i, Int_t numed) = 0;
213 virtual void Gsdvt(
const char *name,
const char *mother, Double_t step, Int_t iaxis, Int_t numed, Int_t ndvmx) = 0;
223 virtual void Gsdvt2(
const char *name,
const char *mother, Double_t step, Int_t iaxis, Double_t c0, Int_t numed,
229 virtual void Gsord(
const char *name, Int_t iax) = 0;
241 virtual void Gspos(
const char *name, Int_t nr,
const char *mother, Double_t x, Double_t y, Double_t z, Int_t irot,
242 const char *konly =
"ONLY") = 0;
246 virtual void Gsposp(
const char *name, Int_t nr,
const char *mother, Double_t x, Double_t y, Double_t z, Int_t irot,
247 const char *konly, Float_t *upar, Int_t np) = 0;
250 virtual void Gsposp(
const char *name, Int_t nr,
const char *mother, Double_t x, Double_t y, Double_t z, Int_t irot,
251 const char *konly, Double_t *upar, Int_t np) = 0;
257 virtual void Gsbool(
const char *onlyVolName,
const char *manyVolName) = 0;
272 virtual void SetCerenkov(Int_t itmed, Int_t npckov, Float_t *ppckov, Float_t *absco, Float_t *effic, Float_t *rindex,
273 Bool_t aspline =
false, Bool_t rspline =
false) = 0;
276 virtual void SetCerenkov(Int_t itmed, Int_t npckov, Double_t *ppckov, Double_t *absco, Double_t *effic,
277 Double_t *rindex, Bool_t aspline =
false, Bool_t rspline =
false) = 0;
303 virtual void SetBorderSurface(
const char *name,
const char *vol1Name,
int vol1CopyNo,
const char *vol2Name,
304 int vol2CopyNo,
const char *opSurfaceName) = 0;
311 virtual void SetSkinSurface(
const char *name,
const char *volName,
const char *opSurfaceName) = 0;
322 virtual void SetMaterialProperty(Int_t itmed,
const char *propertyName, Int_t np, Double_t *pp, Double_t *values,
323 Bool_t createNewKey =
false, Bool_t spline =
false) = 0;
341 virtual void SetMaterialProperty(
const char *surfaceName,
const char *propertyName, Int_t np, Double_t *pp,
342 Double_t *values, Bool_t createNewKey =
false, Bool_t spline =
false) = 0;
355 virtual Bool_t
GetShape(
const TString &volumePath, TString &shapeType, TArrayD &par) = 0;
359 virtual Bool_t
GetMaterial(Int_t imat, TString &name, Double_t &a, Double_t &z, Double_t &density, Double_t &radl,
360 Double_t &inter, TArrayD &par) = 0;
364 virtual Bool_t
GetMaterial(
const TString &volumeName, TString &name, Int_t &imat, Double_t &a, Double_t &z,
365 Double_t &density, Double_t &radl, Double_t &inter, TArrayD &par) = 0;
369 virtual Bool_t
GetMedium(
const TString &volumeName, TString &name, Int_t &imed, Int_t &nmat, Int_t &isvol,
370 Int_t &ifield, Double_t &fieldm, Double_t &tmaxfd, Double_t &stemax, Double_t &deemax,
371 Double_t &epsil, Double_t &stmin, TArrayD &par) = 0;
381 virtual void WriteEuclid(
const char *filnam,
const char *topvol, Int_t number, Int_t nlevel) = 0;
398 virtual Int_t
VolId(
const char *volName)
const = 0;
401 virtual const char *
VolName(Int_t
id)
const = 0;
404 virtual Int_t
MediumId(
const char *mediumName)
const = 0;
453 virtual Bool_t
SetCut(
const char *cutName, Double_t cutValue) = 0;
456 virtual Bool_t
SetProcess(
const char *flagName, Int_t flagValue) = 0;
484 Double_t lifetime) = 0;
512 Double_t lifetime,
const TString &pType, Double_t width, Int_t iSpin, Int_t iParity,
513 Int_t iConjugation, Int_t iIsospin, Int_t iIsospinZ, Int_t gParity, Int_t lepton,
514 Int_t baryon, Bool_t stable, Bool_t shortlived = kFALSE,
const TString &subType =
"",
515 Int_t antiEncoding = 0, Double_t magMoment = 0.0, Double_t excitation = 0.0) = 0;
525 virtual Bool_t
DefineIon(
const char *name, Int_t Z, Int_t A, Int_t Q, Double_t excEnergy, Double_t mass = 0.) = 0;
532 virtual Bool_t
SetDecayMode(Int_t pdg, Float_t bratio[6], Int_t mode[6][3]) = 0;
537 virtual Double_t
Xsec(
char *, Double_t, Int_t, Int_t) = 0;
635 virtual Int_t
CurrentMaterial(Float_t &a, Float_t &z, Float_t &dens, Float_t &radl, Float_t &absl)
const = 0;
651 virtual void Gmtod(Float_t *xm, Float_t *xd, Int_t iflag) = 0;
654 virtual void Gmtod(Double_t *xm, Double_t *xd, Int_t iflag) = 0;
663 virtual void Gdtom(Float_t *xd, Float_t *xm, Int_t iflag) = 0;
666 virtual void Gdtom(Double_t *xd, Double_t *xm, Int_t iflag) = 0;
686 virtual void TrackPosition(Double_t &x, Double_t &y, Double_t &z)
const = 0;
697 virtual void TrackMomentum(Double_t &px, Double_t &py, Double_t &pz, Double_t &etot)
const = 0;
701 virtual void TrackMomentum(Float_t &px, Float_t &py, Float_t &pz, Float_t &etot)
const = 0;
713 virtual Double_t
Edep()
const = 0;
747 virtual Double_t
Etot()
const = 0;
791 virtual void GetSecondary(Int_t isec, Int_t &particleId, TLorentzVector &position, TLorentzVector &momentum) = 0;
839 virtual Bool_t
IsMT()
const {
return kFALSE; }
885 void SetId(UInt_t
id);
909#if !defined(__CINT__)
931#define gMC (TVirtualMC::GetMC())
EMCOpSurfaceModel
Optical surface models.
EMCOpSurfaceType
Optical surface types.
EMCOpSurfaceFinish
Optical surface finish types.
TMCParticleType
VMC particle type codes.
TMCProcess
VMC physics process codes.
Concrete implementation of particles stack used by the TMCManager.
Singleton manager class for handling and steering a run with multiple TVirtualMC engines sharing even...
Interface to a user Monte Carlo application.
Interface to a user defined sensitive detector.
Interface to a user defined particles stack.
Abstract Monte Carlo interface.
virtual Bool_t IsMT() const
Return the info if multi-threading is supported/activated.
virtual Int_t StepProcesses(TArrayI &proc) const =0
Return the array of the VMC code of the processes active in the current step.
TMCManagerStack * GetManagerStack() const
Return the particle stack managed by the TMCManager (if any)
virtual Bool_t IsCollectTracks() const =0
Return the info if collecting tracks is activated.
virtual Double_t ParticleMass(Int_t pdg) const =0
Return mass of the particle specified by pdg.
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
The same as previous but in double precision.
virtual Int_t CurrentEvent() const =0
Return the number of the current event.
virtual Int_t IdFromPDG(Int_t pdg) const =0
Return MC specific code from a PDG and pseudo ENDF code (pdg)
TVirtualMC()
Default constructor.
virtual Bool_t IsNewTrack() const =0
Return true when the track performs the first step.
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 material parameters for the volume specified by the volumeName.
virtual void SetMaterialProperty(const char *surfaceName, const char *propertyName, Int_t np, Double_t *pp, Double_t *values, Bool_t createNewKey=false, Bool_t spline=false)=0
Define optical surface property via a table of values.
virtual void TrackPosition(Double_t &x, Double_t &y, Double_t &z) const =0
Only return spatial coordinates (as double)
virtual Int_t StepNumber() const =0
Return the current step number.
virtual Bool_t IsTrackAlive() const =0
Return true if the current particle is alive and will continue to be transported.
virtual Double_t MaxStep() const =0
Return the maximum step length in the current medium.
virtual void InterruptTrack()=0
That triggers stopping the transport of the current track without dispatching to common routines like...
virtual Double_t TrackTime() const =0
Return the current time of flight of the track being transported (in s)
virtual void Gmtod(Double_t *xm, Double_t *xd, Int_t iflag)=0
The same as previous but in double precision.
virtual Bool_t IsTrackInside() const =0
Return true if the track is not at the boundary of the current volume.
virtual Double_t Edep() const =0
Return the energy lost in the current step.
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
Create a new volume by dividing an existing one Divides mother into divisions called name along axis ...
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
The same as previous but in double precision.
TVirtualMC(const TVirtualMC &mc)
virtual void TrackPolarization(TVector3 &pol) const =0
Get the current polarization.
virtual Int_t VolId2Mate(Int_t id) const =0
Return material number for a given volume id.
virtual void StopRun()=0
Stop simulation of the current event and set the abort run flag to true.
TRandom * fRandom
Random number generator.
virtual const char * VolName(Int_t id) const =0
Return the volume name for a given volume identifier id.
virtual Double_t TrackLength() const =0
Return the length of the current track from its origin (in cm)
virtual void Gsbool(const char *onlyVolName, const char *manyVolName)=0
Helper function for resolving MANY.
virtual Int_t Gsvolu(const char *name, const char *shape, Int_t nmed, Float_t *upar, Int_t np)=0
Create a new volume.
virtual void TerminateRun()
Additional cleanup after a run can be done here (optional)
virtual void Gdtom(Double_t *xd, Double_t *xm, Int_t iflag)=0
The same as previous but in double precision.
TVirtualMC & operator=(const TVirtualMC &)
TVirtualMCDecayer * GetDecayer() const
Return the external decayer.
virtual Int_t CurrentVolID(Int_t ©No) const =0
Return the current volume ID and copy number.
virtual TMCParticleType ParticleMCType(Int_t pdg) const =0
Return VMC type of the particle specified by pdg.
virtual void Init()=0
Initialize MC.
virtual Double_t TrackMass() const =0
Return the mass of the track currently transported.
virtual Bool_t GetShape(const TString &volumePath, TString &shapeType, TArrayD &par)=0
Return the name of the shape (shapeType) and its parameters par for the volume specified by the path ...
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
Place a copy of generic volume name with user number nr inside mother, with its parameters upar(1....
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.
virtual Bool_t IsTrackStop() const =0
Return true if the track energy has fallen below the threshold.
static TVirtualMC * GetMC()
Static access method.
virtual void SetSensitiveDetector(const TString &volName, TVirtualMCSensitiveDetector *sd)=0
Set a sensitive detector to a volume.
virtual void ForceDecayTime(Float_t)=0
Force the decay time of the current particle.
virtual Int_t CurrentMedium() const =0
virtual void TrackPosition(Float_t &x, Float_t &y, Float_t &z) const =0
Only return spatial coordinates (as float)
TMCManagerStack * fManagerStack
Stack handled by the TMCManager.
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
Define a medium.
virtual void SetBorderSurface(const char *name, const char *vol1Name, int vol1CopyNo, const char *vol2Name, int vol2CopyNo, const char *opSurfaceName)=0
Define the optical surface border.
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
Define a mixture or a compound with a number kmat composed by the basic nlmat materials defined by ar...
virtual void SetUserParameters(Bool_t isUserParameters)=0
Activate the parameters defined in tracking media (DEEMAX, STMIN, STEMAX), which are,...
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
The same as previous but in double precision.
virtual Int_t TrackPid() const =0
Return the PDG of the particle transported.
virtual void SetUserDecay(Int_t pdg)=0
Force the decays of particles to be done with Pythia and not with the Geant routines.
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
Position a volume into an existing one.
virtual Double_t ParticleLifeTime(Int_t pdg) const =0
Return life time of the particle specified by pdg.
virtual void SetCerenkov(Int_t itmed, Int_t npckov, Float_t *ppckov, Float_t *absco, Float_t *effic, Float_t *rindex, Bool_t aspline=false, Bool_t rspline=false)=0
Define the tables for UV photon tracking in medium itmed.
virtual void DefineOpSurface(const char *name, EMCOpSurfaceModel model, EMCOpSurfaceType surfaceType, EMCOpSurfaceFinish surfaceFinish, Double_t sigmaAlpha)=0
Define the optical surface.
virtual void SetMaterialProperty(Int_t itmed, const char *propertyName, Double_t value)=0
Define material property via a value.
virtual void Gstpar(Int_t itmed, const char *param, Double_t parval)=0
Change the value of cut or mechanism param to a new value parval for tracking medium itmed.
virtual Bool_t IsTrackEntering() const =0
Return true if this is the first step of the track in the current volume.
virtual void ProcessEvent()=0
Process one event.
TRandom * GetRandom() const
Return the random number generator.
virtual Double_t ParticleCharge(Int_t pdg) const =0
Return charge (in e units) of the particle specified by pdg.
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
The same as previous but in double precision.
virtual void SetMaxStep(Double_t)=0
Set the maximum step allowed till the particle is in the current medium.
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 defined ion.
virtual void SetRandom(TRandom *random)
Set the random number generator.
void SetId(UInt_t id)
Set the VMC id.
virtual Double_t Etot() const =0
Return the total energy of the current track.
virtual void TrackPolarization(Double_t &polX, Double_t &polY, Double_t &polZ) const =0
Get the current polarization.
virtual Int_t CurrentVolOffID(Int_t off, Int_t ©No) const =0
Return the current volume off upward in the geometrical tree ID and copy number.
virtual Bool_t IsTrackDisappeared() const =0
Return true if the current particle has disappeared either because it decayed or because it underwent...
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
Define a material.
virtual void InitLego()=0
Set switches for lego transport.
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.
virtual void ProcessEvent(Int_t eventId, Bool_t isInterruptible)=0
An interruptible event can be paused and resumed at any time.
virtual Double_t TrackWeight() const =0
Get the current weight.
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
Return the medium parameters for the volume specified by the volumeName.
virtual TString ParticleName(Int_t pdg) const =0
Return name of the particle specified by pdg.
Int_t fId
Unique identification of this VMC.
virtual void SetExclusiveSDScoring(Bool_t exclusiveSDScoring)=0
The scoring option: if true, scoring is performed only via user defined sensitive detectors and MCApp...
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 particle Function is ignored if particle with specified pdg already exists and err...
virtual Double_t TrackCharge() const =0
Return the charge of the track currently transported.
virtual void TrackPosition(TLorentzVector &position) const =0
Return the current position in the master reference frame of the track being transported.
virtual TVirtualMCSensitiveDetector * GetSensitiveDetector(const TString &volName) const =0
Get a sensitive detector of a volume.
virtual const char * VolDaughterName(const char *volName, Int_t i) const =0
Return the name of i-th daughter of the volume specified by volName.
virtual void StopTrack()=0
Stop the transport of the current particle and skip to the next.
virtual Bool_t SetProcess(const char *flagName, Int_t flagValue)=0
Set process control.
virtual Bool_t ProcessRun(Int_t nevent)=0
Process one run and return true if run has finished successfully, return false in other cases (run ab...
virtual Int_t NSecondaries() const =0
Return the number of secondary particles generated in the current step.
virtual const char * CurrentVolName() const =0
Return the current volume name.
virtual Bool_t SecondariesAreOrdered() const =0
Return the information about the transport order needed by the stack.
virtual void Gsord(const char *name, Int_t iax)=0
Flag volume name whose contents will have to be ordered along axis iax, by setting the search flag to...
virtual void BuildPhysics()=0
Initialize MC physics.
virtual void Gdtom(Float_t *xd, Float_t *xm, Int_t iflag)=0
Computes coordinates xm in mother reference system from known coordinates xd in daughter reference sy...
virtual void SetRootGeometry()=0
Set geometry from Root (built via TGeo)
TVirtualMagField * GetMagField() const
Return the magnetic field.
virtual void SetStack(TVirtualMCStack *stack)
Set the particle stack.
virtual Double_t TrackStep() const =0
Return the length in centimeters of the current step (in cm)
virtual Bool_t GetMaterial(Int_t imat, TString &name, Double_t &a, Double_t &z, Double_t &density, Double_t &radl, Double_t &inter, TArrayD &par)=0
Return the material parameters for the material specified by the material Id.
void SetManagerStack(TMCManagerStack *stack)
Set container holding additional information for transported TParticles.
virtual void GetSecondary(Int_t isec, Int_t &particleId, TLorentzVector &position, TLorentzVector &momentum)=0
Return the parameters of the secondary track number isec produced in the current step.
virtual Bool_t IsTrackOut() const =0
Return true if the track is out of the setup.
TVirtualMagField * fMagField
Magnetic field.
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 Divide mother into divisions called name along axis i...
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
Define a rotation matrix.
virtual Bool_t SetCut(const char *cutName, Double_t cutValue)=0
Set transport cuts for particles.
virtual const char * CurrentVolOffName(Int_t off) const =0
Return the current volume off upward in the geometrical tree name and copy number' if name=0 no name ...
virtual Int_t VolId(const char *volName) const =0
Return the unique numeric identifier for volume name volName.
virtual Int_t CurrentMaterial(Float_t &a, Float_t &z, Float_t &dens, Float_t &radl, Float_t &absl) const =0
Return the parameters of the current material during transport.
virtual void SetSkinSurface(const char *name, const char *volName, const char *opSurfaceName)=0
Define the optical skin surface.
static TMCThreadLocal TVirtualMC * fgMC
Static TVirtualMC pointer.
virtual Double_t NIELEdep() const =0
Return the non-ionising energy lost (NIEL) in the current step.
TVirtualMCApplication * fApplication
User MC application.
virtual void TrackMomentum(Float_t &px, Float_t &py, Float_t &pz, Float_t &etot) const =0
Return the direction and the momentum (GeV/c) of the track currently being transported (as float)
virtual void SetCollectTracks(Bool_t collectTracks)=0
(In)Activate collecting TGeo tracks
virtual void SetExternalDecayer(TVirtualMCDecayer *decayer)
Set the external decayer.
virtual void WriteEuclid(const char *filnam, const char *topvol, Int_t number, Int_t nlevel)=0
Write out the geometry of the detector in EUCLID file format.
virtual TMCProcess ProdProcess(Int_t isec) const =0
Return the VMC code of the process that has produced the secondary particles in the current step.
virtual Int_t Gsvolu(const char *name, const char *shape, Int_t nmed, Double_t *upar, Int_t np)=0
The same as previous but in double precision.
virtual void TrackMomentum(TLorentzVector &momentum) const =0
Return the direction and the momentum (GeV/c) of the track currently being transported.
TVirtualMCStack * GetStack() const
Return the particle stack.
virtual void SetCerenkov(Int_t itmed, Int_t npckov, Double_t *ppckov, Double_t *absco, Double_t *effic, Double_t *rindex, Bool_t aspline=false, Bool_t rspline=false)=0
The same as previous but in double precision.
virtual void SetMaterialProperty(Int_t itmed, const char *propertyName, Int_t np, Double_t *pp, Double_t *values, Bool_t createNewKey=false, Bool_t spline=false)=0
Define material property via a table of values.
virtual Int_t MediumId(const char *mediumName) const =0
Return the unique numeric identifier for medium name mediumName.
virtual Double_t Xsec(char *, Double_t, Int_t, Int_t)=0
Calculate X-sections (Geant3 only) Deprecated.
virtual Int_t NofVolDaughters(const char *volName) const =0
Return number of daughters of the volume specified by volName.
Int_t GetId() const
Return the VMC's ID.
virtual void TrackMomentum(Double_t &px, Double_t &py, Double_t &pz, Double_t &etot) const =0
Return the direction and the momentum (GeV/c) of the track currently being transported (as double)
virtual Bool_t IsTrackExiting() const =0
Return true if this is the last step of the track in the current volume.
virtual Int_t GetMaxNStep() const =0
Return the maximum number of steps allowed in the current medium.
virtual Bool_t CurrentBoundaryNormal(Double_t &x, Double_t &y, Double_t &z) const =0
If track is on a geometry boundary, fill the normal vector of the crossing volume surface and return ...
virtual void SetMagField(TVirtualMagField *field)
Set the magnetic field.
virtual Int_t VolDaughterCopyNo(const char *volName, Int_t i) const =0
Return the copyNo of i-th daughter of the volume specified by volName.
virtual void Gmtod(Float_t *xm, Float_t *xd, Int_t iflag)=0
Computes coordinates xd in daughter reference system from known coordinates xm in mother reference sy...
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 err...
virtual void SetMaxNStep(Int_t)=0
Set the maximum number of steps till the particle is in the current medium.
virtual ~TVirtualMC()
Destructor.
TVirtualMCStack * fStack
Particles stack.
virtual Bool_t IsRootGeometrySupported() const =0
Info about supporting geometry defined via Root.
virtual Int_t PDGFromId(Int_t id) const =0
Return PDG code and pseudo ENDF code from MC specific code (id)
virtual Bool_t SetDecayMode(Int_t pdg, Float_t bratio[6], Int_t mode[6][3])=0
Set a user phase space decay for a particle.
virtual Int_t NofVolumes() const =0
Return total number of volumes in the geometry.
virtual Bool_t GetTransformation(const TString &volumePath, TGeoHMatrix &matrix)=0
Return the transformation matrix between the volume specified by the path volumePath and the top or m...
virtual const char * CurrentVolPath()=0
Return the path in geometry tree for the current volume.
virtual void StopEvent()=0
Stop simulation of the current event and skip to the next.
TVirtualMCDecayer * fDecayer
External decayer.