Logo ROOT   6.10/09
Reference Guide
TVirtualMC.h
Go to the documentation of this file.
1 // @(#)root/vmc:$Name: $:$Id$
2 // Authors: Ivana Hrivnacova, Rene Brun, Federico Carminati 13/04/2002
3 
4 /*************************************************************************
5  * Copyright (C) 2006, Rene Brun and Fons Rademakers. *
6  * Copyright (C) 2002, ALICE Experiment at CERN. *
7  * All rights reserved. *
8  * *
9  * For the licensing terms see $ROOTSYS/LICENSE. *
10  * For the list of contributors see $ROOTSYS/README/CREDITS. *
11  *************************************************************************/
12 
13 #ifndef ROOT_TVirtualMC
14 #define ROOT_TVirtualMC
15 
16 ///////////////////////////////////////////////////////////////////////////////
17 // //
18 // //
19 // Abstract Monte Carlo interface //
20 // //
21 // //
22 ///////////////////////////////////////////////////////////////////////////////
23 
24 #include "TMCProcess.h"
25 #include "TMCParticleType.h"
26 #include "TMCOptical.h"
27 #include "TMCtls.h"
28 #include "TVirtualMCApplication.h"
29 #include "TVirtualMCStack.h"
30 #include "TVirtualMCDecayer.h"
31 #include "TVirtualMagField.h"
32 #include "TRandom.h"
33 #include "TString.h"
34 #include "TError.h"
35 
36 class TLorentzVector;
37 class TGeoHMatrix;
38 class TArrayI;
39 class TArrayD;
40 
41 class TVirtualMC : public TNamed {
42 
43 public:
44  /// Standard constructor
45  ///
46  /// isRootGeometrySupported = True if implementation of TVirtualMC
47  /// supports geometry defined with TGeo
48  TVirtualMC(const char *name, const char *title,
49  Bool_t isRootGeometrySupported = kFALSE);
50 
51  /// Default constructor
52  TVirtualMC();
53 
54  /// Destructor
55  virtual ~TVirtualMC();
56 
57  /// Static access method
58  static TVirtualMC* GetMC();
59 
60  //
61  // ------------------------------------------------
62  // methods for building/management of geometry
63  // ------------------------------------------------
64  //
65 
66  /// Info about supporting geometry defined via Root
67  virtual Bool_t IsRootGeometrySupported() const = 0;
68 
69  //
70  // functions from GCONS
71  // ------------------------------------------------
72  //
73 
74  /// Define a material
75  /// - kmat number assigned to the material
76  /// - name material name
77  /// - a atomic mass in au
78  /// - z atomic number
79  /// - dens density in g/cm3
80  /// - absl absorption length in cm;
81  /// if >=0 it is ignored and the program
82  /// calculates it, if <0. -absl is taken
83  /// - radl radiation length in cm
84  /// if >=0 it is ignored and the program
85  /// calculates it, if <0. -radl is taken
86  /// - buf pointer to an array of user words
87  /// - nwbuf number of user words
88  virtual void Material(Int_t& kmat, const char* name, Double_t a,
89  Double_t z, Double_t dens, Double_t radl, Double_t absl,
90  Float_t* buf, Int_t nwbuf) = 0;
91 
92  /// The same as previous but in double precision
93  virtual void Material(Int_t& kmat, const char* name, Double_t a,
94  Double_t z, Double_t dens, Double_t radl, Double_t absl,
95  Double_t* buf, Int_t nwbuf) = 0;
96 
97  /// Define a mixture or a compound
98  /// with a number kmat composed by the basic nlmat materials defined
99  /// by arrays a, z and wmat
100  ///
101  /// If nlmat > 0 then wmat contains the proportion by
102  /// weights of each basic material in the mixture.
103  ///
104  /// If nlmat < 0 then wmat contains the number of atoms
105  /// of a given kind into the molecule of the compound.
106  /// In this case, wmat in output is changed to relative
107  /// weights.
108  virtual void Mixture(Int_t& kmat, const char *name, Float_t *a,
109  Float_t *z, Double_t dens, Int_t nlmat, Float_t *wmat) = 0;
110 
111  /// The same as previous but in double precision
112  virtual void Mixture(Int_t& kmat, const char *name, Double_t *a,
113  Double_t *z, Double_t dens, Int_t nlmat, Double_t *wmat) = 0;
114 
115  /// Define a medium.
116  /// - kmed tracking medium number assigned
117  /// - name tracking medium name
118  /// - nmat material number
119  /// - isvol sensitive volume flag
120  /// - ifield magnetic field:
121  /// - ifield = 0 if no magnetic field;
122  /// - ifield = -1 if user decision in guswim;
123  /// - ifield = 1 if tracking performed with g3rkuta;
124  /// - ifield = 2 if tracking performed with g3helix;
125  /// - ifield = 3 if tracking performed with g3helx3.
126  /// - fieldm max. field value (kilogauss)
127  /// - tmaxfd max. angle due to field (deg/step)
128  /// - stemax max. step allowed
129  /// - deemax max. fraction of energy lost in a step
130  /// - epsil tracking precision (cm)
131  /// - stmin min. step due to continuous processes (cm)
132  /// - ubuf pointer to an array of user words
133  /// - nbuf number of user words
134  virtual void Medium(Int_t& kmed, const char *name, Int_t nmat,
135  Int_t isvol, Int_t ifield, Double_t fieldm, Double_t tmaxfd,
136  Double_t stemax, Double_t deemax, Double_t epsil,
137  Double_t stmin, Float_t* ubuf, Int_t nbuf) = 0;
138 
139  /// The same as previous but in double precision
140  virtual void Medium(Int_t& kmed, const char *name, Int_t nmat,
141  Int_t isvol, Int_t ifield, Double_t fieldm, Double_t tmaxfd,
142  Double_t stemax, Double_t deemax, Double_t epsil,
143  Double_t stmin, Double_t* ubuf, Int_t nbuf) = 0;
144 
145  /// Define a rotation matrix
146  /// - krot rotation matrix number assigned
147  /// - thetaX polar angle for axis X
148  /// - phiX azimuthal angle for axis X
149  /// - thetaY polar angle for axis Y
150  /// - phiY azimuthal angle for axis Y
151  /// - thetaZ polar angle for axis Z
152  /// - phiZ azimuthal angle for axis Z
153  virtual void Matrix(Int_t& krot, Double_t thetaX, Double_t phiX,
154  Double_t thetaY, Double_t phiY, Double_t thetaZ,
155  Double_t phiZ) = 0;
156 
157  /// Change the value of cut or mechanism param
158  /// to a new value parval for tracking medium itmed.
159  /// In Geant3, the data structure JTMED contains the standard tracking
160  /// parameters (CUTS and flags to control the physics processes) which
161  /// are used by default for all tracking media.
162  /// It is possible to redefine individually with this function any of these
163  /// parameters for a given tracking medium.
164  /// - itmed tracking medium number
165  /// - param is a character string (variable name)
166  /// - parval must be given as a floating point.
167  virtual void Gstpar(Int_t itmed, const char *param, Double_t parval) = 0;
168 
169  //
170  // functions from GGEOM
171  // ------------------------------------------------
172  //
173 
174  /// Create a new volume
175  /// - name Volume name
176  /// - shape Volume type
177  /// - nmed Tracking medium number
178  /// - np Number of shape parameters
179  /// - upar Vector containing shape parameters
180  virtual Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,
181  Float_t *upar, Int_t np) = 0;
182 
183  /// The same as previous but in double precision
184  virtual Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,
185  Double_t *upar, Int_t np) = 0;
186 
187  /// Create a new volume by dividing an existing one.
188  /// It divides a previously defined volume
189  /// - name Volume name
190  /// - mother Mother volume name
191  /// - ndiv Number of divisions
192  /// - iaxis Axis value:
193  /// X,Y,Z of CAXIS will be translated to 1,2,3 for IAXIS.
194  virtual void Gsdvn(const char *name, const char *mother, Int_t ndiv,
195  Int_t iaxis) = 0;
196 
197  /// Create a new volume by dividing an existing one.
198  /// Divide mother into ndiv divisions called name
199  /// along axis iaxis starting at coordinate value c0i.
200  /// The new volume created will be medium number numed.
201  virtual void Gsdvn2(const char *name, const char *mother, Int_t ndiv,
202  Int_t iaxis, Double_t c0i, Int_t numed) = 0;
203 
204  /// Create a new volume by dividing an existing one
205  /// Divide mother into divisions called name along
206  /// axis iaxis in steps of step. If not exactly divisible
207  /// will make as many as possible and will center them
208  /// with respect to the mother. Divisions will have medium
209  /// number numed. If numed is 0, numed of mother is taken.
210  /// ndvmx is the expected maximum number of divisions
211  /// (If 0, no protection tests are performed in Geant3)
212  virtual void Gsdvt(const char *name, const char *mother, Double_t step,
213  Int_t iaxis, Int_t numed, Int_t ndvmx) = 0;
214 
215  /// Create a new volume by dividing an existing one
216  /// Divides mother into divisions called name along
217  /// axis iaxis starting at coordinate value c0 with step
218  /// size step.
219  /// The new volume created will have medium number numed.
220  /// If numed is 0, numed of mother is taken.
221  /// ndvmx is the expected maximum number of divisions
222  /// (If 0, no protection tests are performed in Geant3)
223  virtual void Gsdvt2(const char *name, const char *mother, Double_t step,
224  Int_t iaxis, Double_t c0, Int_t numed, Int_t ndvmx) = 0;
225 
226  /// Flag volume name whose contents will have to be ordered
227  /// along axis iax, by setting the search flag to -iax
228  /// (Geant3 only)
229  virtual void Gsord(const char *name, Int_t iax) = 0;
230 
231  /// Position a volume into an existing one.
232  /// It positions a previously defined volume in the mother.
233  /// - name Volume name
234  /// - nr Copy number of the volume
235  /// - mother Mother volume name
236  /// - x X coord. of the volume in mother ref. sys.
237  /// - y Y coord. of the volume in mother ref. sys.
238  /// - z Z coord. of the volume in mother ref. sys.
239  /// - irot Rotation matrix number w.r.t. mother ref. sys.
240  /// - konly ONLY/MANY flag
241  virtual void Gspos(const char *name, Int_t nr, const char *mother,
242  Double_t x, Double_t y, Double_t z, Int_t irot,
243  const char *konly="ONLY") = 0;
244 
245  /// Place a copy of generic volume name with user number
246  /// nr inside mother, with its parameters upar(1..np)
247  virtual void Gsposp(const char *name, Int_t nr, const char *mother,
248  Double_t x, Double_t y, Double_t z, Int_t irot,
249  const char *konly, Float_t *upar, Int_t np) = 0;
250 
251  /// The same as previous but in double precision
252  virtual void Gsposp(const char *name, Int_t nr, const char *mother,
253  Double_t x, Double_t y, Double_t z, Int_t irot,
254  const char *konly, Double_t *upar, Int_t np) = 0;
255 
256  /// Helper function for resolving MANY.
257  /// Specify the ONLY volume that overlaps with the
258  /// specified MANY and has to be substracted.
259  /// (Geant4 only)
260  virtual void Gsbool(const char* onlyVolName, const char* manyVolName) = 0;
261 
262  /// Define the tables for UV photon tracking in medium itmed.
263  /// Please note that it is the user's responsibility to
264  /// provide all the coefficients:
265  /// - itmed Tracking medium number
266  /// - npckov Number of bins of each table
267  /// - ppckov Value of photon momentum (in GeV)
268  /// - absco Absorption coefficients
269  /// - dielectric: absorption length in cm
270  /// - metals : absorption fraction (0<=x<=1)
271  /// - effic Detection efficiency for UV photons
272  /// - rindex Refraction index (if=0 metal)
273  virtual void SetCerenkov(Int_t itmed, Int_t npckov, Float_t *ppckov,
274  Float_t *absco, Float_t *effic, Float_t *rindex) = 0;
275 
276  /// The same as previous but in double precision
277  virtual void SetCerenkov(Int_t itmed, Int_t npckov, Double_t *ppckov,
278  Double_t *absco, Double_t *effic, Double_t *rindex) = 0;
279 
280  //
281  // functions for definition of surfaces
282  // and material properties for optical physics
283  // ------------------------------------------------
284  //
285 
286  /// Define the optical surface
287  /// - name surface name
288  /// - model selection of model (see #EMCOpSurfaceModel values)
289  /// - surfaceType surface type (see #EMCOpSurfaceType values)
290  /// - surfaceFinish surface quality (see #EMCOpSurfaceType values)
291  /// - sigmaAlpha an unified model surface parameter
292  /// (Geant4 only)
293  virtual void DefineOpSurface(const char* name,
295  EMCOpSurfaceType surfaceType,
296  EMCOpSurfaceFinish surfaceFinish,
297  Double_t sigmaAlpha) = 0;
298 
299  /// Define the optical surface border
300  /// - name border surface name
301  /// - vol1Name first volume name
302  /// - vol1CopyNo first volume copy number
303  /// - vol2Name second volume name
304  /// - vol2CopyNo second volume copy number
305  /// - opSurfaceName name of optical surface which this border belongs to
306  /// (Geant4 only)
307  virtual void SetBorderSurface(const char* name,
308  const char* vol1Name, int vol1CopyNo,
309  const char* vol2Name, int vol2CopyNo,
310  const char* opSurfaceName) = 0;
311 
312  /// Define the optical skin surface
313  /// - name skin surface name
314  /// - volName volume name
315  /// - opSurfaceName name of optical surface which this border belongs to
316  /// (Geant4 only)
317  virtual void SetSkinSurface(const char* name,
318  const char* volName,
319  const char* opSurfaceName) = 0;
320 
321  /// Define material property via a table of values
322  /// - itmed tracking medium id
323  /// - propertyName property name
324  /// - np number of bins of the table
325  /// - pp value of photon momentum (in GeV)
326  /// - values property values
327  /// (Geant4 only)
328  virtual void SetMaterialProperty(
329  Int_t itmed, const char* propertyName,
330  Int_t np, Double_t* pp, Double_t* values) = 0;
331 
332  /// Define material property via a value
333  /// - itmed tracking medium id
334  /// - propertyName property name
335  /// - value property value
336  /// (Geant4 only)
337  virtual void SetMaterialProperty(
338  Int_t itmed, const char* propertyName,
339  Double_t value) = 0;
340 
341  /// Define optical surface property via a table of values
342  /// - surfaceName optical surface name
343  /// - propertyName property name
344  /// - np number of bins of the table
345  /// - pp value of photon momentum (in GeV)
346  /// - values property values
347  /// (Geant4 only)
348  virtual void SetMaterialProperty(
349  const char* surfaceName, const char* propertyName,
350  Int_t np, Double_t* pp, Double_t* values) = 0;
351 
352  //
353  // functions for access to geometry
354  // ------------------------------------------------
355  //
356 
357  /// Return the transformation matrix between the volume specified by
358  /// the path volumePath and the top or master volume.
359  virtual Bool_t GetTransformation(const TString& volumePath,
360  TGeoHMatrix& matrix) = 0;
361 
362  /// Return the name of the shape (shapeType) and its parameters par
363  /// for the volume specified by the path volumePath .
364  virtual Bool_t GetShape(const TString& volumePath,
365  TString& shapeType, TArrayD& par) = 0;
366 
367  /// Return the material parameters for the material specified by
368  /// the material Id
369  virtual Bool_t GetMaterial(Int_t imat, TString& name,
370  Double_t& a, Double_t& z, Double_t& density,
371  Double_t& radl, Double_t& inter, TArrayD& par) = 0;
372 
373  /// Return the material parameters for the volume specified by
374  /// the volumeName.
375  virtual Bool_t GetMaterial(const TString& volumeName,
376  TString& name, Int_t& imat,
377  Double_t& a, Double_t& z, Double_t& density,
378  Double_t& radl, Double_t& inter, TArrayD& par) = 0;
379 
380  /// Return the medium parameters for the volume specified by the
381  /// volumeName.
382  virtual Bool_t GetMedium(const TString& volumeName,
383  TString& name, Int_t& imed,
384  Int_t& nmat, Int_t& isvol, Int_t& ifield,
385  Double_t& fieldm, Double_t& tmaxfd, Double_t& stemax,
386  Double_t& deemax, Double_t& epsil, Double_t& stmin,
387  TArrayD& par) = 0;
388 
389  /// Write out the geometry of the detector in EUCLID file format
390  /// - filnam file name - will be with the extension .euc *
391  /// - topvol volume name of the starting node
392  /// - number copy number of topvol (relevant for gsposp)
393  /// - nlevel number of levels in the tree structure
394  /// to be written out, starting from topvol
395  /// (Geant3 only)
396  /// Deprecated
397  virtual void WriteEuclid(const char* filnam, const char* topvol,
398  Int_t number, Int_t nlevel) = 0;
399 
400  /// Set geometry from Root (built via TGeo)
401  virtual void SetRootGeometry() = 0;
402 
403  /// Activate the parameters defined in tracking media
404  /// (DEEMAX, STMIN, STEMAX), which are, be default, ignored.
405  /// In Geant4 case, only STEMAX is taken into account.
406  /// In FLUKA, all tracking media parameters are ignored.
407  virtual void SetUserParameters(Bool_t isUserParameters) = 0;
408 
409  //
410  // get methods
411  // ------------------------------------------------
412  //
413 
414  /// Return the unique numeric identifier for volume name volName
415  virtual Int_t VolId(const char* volName) const = 0;
416 
417  /// Return the volume name for a given volume identifier id
418  virtual const char* VolName(Int_t id) const = 0;
419 
420  /// Return the unique numeric identifier for medium name mediumName
421  virtual Int_t MediumId(const char* mediumName) const = 0;
422 
423  /// Return total number of volumes in the geometry
424  virtual Int_t NofVolumes() const = 0;
425 
426  /// Return material number for a given volume id
427  virtual Int_t VolId2Mate(Int_t id) const = 0;
428 
429  /// Return number of daughters of the volume specified by volName
430  virtual Int_t NofVolDaughters(const char* volName) const = 0;
431 
432  /// Return the name of i-th daughter of the volume specified by volName
433  virtual const char* VolDaughterName(const char* volName, Int_t i) const = 0;
434 
435  /// Return the copyNo of i-th daughter of the volume specified by volName
436  virtual Int_t VolDaughterCopyNo(const char* volName, Int_t i) const = 0;
437 
438  //
439  // ------------------------------------------------
440  // methods for physics management
441  // ------------------------------------------------
442  //
443 
444  //
445  // set methods
446  // ------------------------------------------------
447  //
448 
449  /// Set transport cuts for particles
450  virtual Bool_t SetCut(const char* cutName, Double_t cutValue) = 0;
451 
452  /// Set process control
453  virtual Bool_t SetProcess(const char* flagName, Int_t flagValue) = 0;
454 
455  /// Set a user defined particle
456  /// Function is ignored if particle with specified pdg
457  /// already exists and error report is printed.
458  /// - pdg PDG encoding
459  /// - name particle name
460  /// - mcType VMC Particle type
461  /// - mass mass [GeV]
462  /// - charge charge [eplus]
463  /// - lifetime time of life [s]
464  /// - pType particle type as in Geant4
465  /// - width width [GeV]
466  /// - iSpin spin
467  /// - iParity parity
468  /// - iConjugation conjugation
469  /// - iIsospin isospin
470  /// - iIsospinZ isospin - #rd component
471  /// - gParity gParity
472  /// - lepton lepton number
473  /// - baryon baryon number
474  /// - stable stability
475  /// - shortlived is shorlived?
476  /// - subType particle subType as in Geant4
477  /// - antiEncoding anti encoding
478  /// - magMoment magnetic moment
479  /// - excitation excitation energy [GeV]
480  virtual Bool_t DefineParticle(Int_t pdg, const char* name,
481  TMCParticleType mcType,
482  Double_t mass, Double_t charge, Double_t lifetime) = 0;
483 
484  /// Set a user defined particle
485  /// Function is ignored if particle with specified pdg
486  /// already exists and error report is printed.
487  /// - pdg PDG encoding
488  /// - name particle name
489  /// - mcType VMC Particle type
490  /// - mass mass [GeV]
491  /// - charge charge [eplus]
492  /// - lifetime time of life [s]
493  /// - pType particle type as in Geant4
494  /// - width width [GeV]
495  /// - iSpin spin
496  /// - iParity parity
497  /// - iConjugation conjugation
498  /// - iIsospin isospin
499  /// - iIsospinZ isospin - #rd component
500  /// - gParity gParity
501  /// - lepton lepton number
502  /// - baryon baryon number
503  /// - stable stability
504  /// - shortlived is shorlived?
505  /// - subType particle subType as in Geant4
506  /// - antiEncoding anti encoding
507  /// - magMoment magnetic moment
508  /// - excitation excitation energy [GeV]
509  virtual Bool_t DefineParticle(Int_t pdg, const char* name,
510  TMCParticleType mcType,
511  Double_t mass, Double_t charge, Double_t lifetime,
512  const TString& pType, Double_t width,
513  Int_t iSpin, Int_t iParity, Int_t iConjugation,
514  Int_t iIsospin, Int_t iIsospinZ, Int_t gParity,
515  Int_t lepton, Int_t baryon,
516  Bool_t stable, Bool_t shortlived = kFALSE,
517  const TString& subType = "",
518  Int_t antiEncoding = 0, Double_t magMoment = 0.0,
519  Double_t excitation = 0.0) = 0;
520 
521  /// Set a user defined ion.
522  /// - name ion name
523  /// - Z atomic number
524  /// - A atomic mass
525  /// - Q charge [eplus}
526  /// - excitation excitation energy [GeV]
527  /// - mass mass [GeV] (if not specified by user, approximative
528  /// mass is calculated)
529  virtual Bool_t DefineIon(const char* name, Int_t Z, Int_t A,
530  Int_t Q, Double_t excEnergy, Double_t mass = 0.) = 0;
531 
532  /// Set a user phase space decay for a particle
533  /// - pdg particle PDG encoding
534  /// - bratios the array with branching ratios (in %)
535  /// - mode[6][3] the array with daughters particles PDG codes for each
536  /// decay channel
537  virtual Bool_t SetDecayMode(Int_t pdg, Float_t bratio[6], Int_t mode[6][3]) = 0;
538 
539  /// Calculate X-sections
540  /// (Geant3 only)
541  /// Deprecated
542  virtual Double_t Xsec(char*, Double_t, Int_t, Int_t) = 0;
543 
544  //
545  // particle table usage
546  // ------------------------------------------------
547  //
548 
549  /// Return MC specific code from a PDG and pseudo ENDF code (pdg)
550  virtual Int_t IdFromPDG(Int_t pdg) const =0;
551 
552  /// Return PDG code and pseudo ENDF code from MC specific code (id)
553  virtual Int_t PDGFromId(Int_t id) const =0;
554 
555  //
556  // get methods
557  // ------------------------------------------------
558  //
559 
560  /// Return name of the particle specified by pdg.
561  virtual TString ParticleName(Int_t pdg) const = 0;
562 
563  /// Return mass of the particle specified by pdg.
564  virtual Double_t ParticleMass(Int_t pdg) const = 0;
565 
566  /// Return charge (in e units) of the particle specified by pdg.
567  virtual Double_t ParticleCharge(Int_t pdg) const = 0;
568 
569  /// Return life time of the particle specified by pdg.
570  virtual Double_t ParticleLifeTime(Int_t pdg) const = 0;
571 
572  /// Return VMC type of the particle specified by pdg.
573  virtual TMCParticleType ParticleMCType(Int_t pdg) const = 0;
574  //
575  // ------------------------------------------------
576  // methods for step management
577  // ------------------------------------------------
578  //
579 
580  //
581  // action methods
582  // ------------------------------------------------
583  //
584 
585  /// Stop the transport of the current particle and skip to the next
586  virtual void StopTrack() = 0;
587 
588  /// Stop simulation of the current event and skip to the next
589  virtual void StopEvent() = 0;
590 
591  /// Stop simulation of the current event and set the abort run flag to true
592  virtual void StopRun() = 0;
593 
594  //
595  // set methods
596  // ------------------------------------------------
597  //
598 
599  /// Set the maximum step allowed till the particle is in the current medium
600  virtual void SetMaxStep(Double_t) = 0;
601 
602  /// Set the maximum number of steps till the particle is in the current medium
603  virtual void SetMaxNStep(Int_t) = 0;
604 
605  /// Force the decays of particles to be done with Pythia
606  /// and not with the Geant routines.
607  virtual void SetUserDecay(Int_t pdg) = 0;
608 
609  /// Force the decay time of the current particle
610  virtual void ForceDecayTime(Float_t) = 0;
611 
612  //
613  // tracking volume(s)
614  // ------------------------------------------------
615  //
616 
617  /// Return the current volume ID and copy number
618  virtual Int_t CurrentVolID(Int_t& copyNo) const =0;
619 
620  /// Return the current volume off upward in the geometrical tree
621  /// ID and copy number
622  virtual Int_t CurrentVolOffID(Int_t off, Int_t& copyNo) const =0;
623 
624  /// Return the current volume name
625  virtual const char* CurrentVolName() const =0;
626 
627  /// Return the current volume off upward in the geometrical tree
628  /// name and copy number'
629  /// if name=0 no name is returned
630  virtual const char* CurrentVolOffName(Int_t off) const =0;
631 
632  /// Return the path in geometry tree for the current volume
633  virtual const char* CurrentVolPath() = 0;
634 
635  /// If track is on a geometry boundary, fill the normal vector of the crossing
636  /// volume surface and return true, return false otherwise
638  Double_t &x, Double_t &y, Double_t &z) const = 0;
639 
640  /// Return the parameters of the current material during transport
641  virtual Int_t CurrentMaterial(Float_t &a, Float_t &z,
642  Float_t &dens, Float_t &radl, Float_t &absl) const =0;
643 
644  //// Return the number of the current medium
645  virtual Int_t CurrentMedium() const = 0;
646  // new function (to replace GetMedium() const)
647 
648  /// Return the number of the current event
649  virtual Int_t CurrentEvent() const =0;
650 
651  /// Computes coordinates xd in daughter reference system
652  /// from known coordinates xm in mother reference system.
653  /// - xm coordinates in mother reference system (input)
654  /// - xd coordinates in daughter reference system (output)
655  /// - iflag
656  /// - IFLAG = 1 convert coordinates
657  /// - IFLAG = 2 convert direction cosines
658  virtual void Gmtod(Float_t* xm, Float_t* xd, Int_t iflag) = 0;
659 
660  /// The same as previous but in double precision
661  virtual void Gmtod(Double_t* xm, Double_t* xd, Int_t iflag) = 0;
662 
663  /// Computes coordinates xm in mother reference system
664  /// from known coordinates xd in daughter reference system.
665  /// - xd coordinates in daughter reference system (input)
666  /// - xm coordinates in mother reference system (output)
667  /// - iflag
668  /// - IFLAG = 1 convert coordinates
669  /// - IFLAG = 2 convert direction cosines
670  virtual void Gdtom(Float_t* xd, Float_t* xm, Int_t iflag)= 0 ;
671 
672  /// The same as previous but in double precision
673  virtual void Gdtom(Double_t* xd, Double_t* xm, Int_t iflag)= 0 ;
674 
675  /// Return the maximum step length in the current medium
676  virtual Double_t MaxStep() const =0;
677 
678  /// Return the maximum number of steps allowed in the current medium
679  virtual Int_t GetMaxNStep() const = 0;
680 
681  //
682  // get methods
683  // tracking particle
684  // dynamic properties
685  // ------------------------------------------------
686  //
687 
688  /// Return the current position in the master reference frame of the
689  /// track being transported
690  virtual void TrackPosition(TLorentzVector& position) const =0;
691 
692  /// Return the current position in the master reference frame of the
693  /// track being transported
694  virtual void TrackPosition(Double_t &x, Double_t &y, Double_t &z) const =0;
695 
696  /// Return the direction and the momentum (GeV/c) of the track
697  /// currently being transported
698  virtual void TrackMomentum(TLorentzVector& momentum) const =0;
699 
700  /// Return the direction and the momentum (GeV/c) of the track
701  /// currently being transported
702  virtual void TrackMomentum(Double_t &px, Double_t &py, Double_t &pz, Double_t &etot) const =0;
703 
704  /// Return the length in centimeters of the current step (in cm)
705  virtual Double_t TrackStep() const =0;
706 
707  /// Return the length of the current track from its origin (in cm)
708  virtual Double_t TrackLength() const =0;
709 
710  /// Return the current time of flight of the track being transported
711  virtual Double_t TrackTime() const =0;
712 
713  /// Return the energy lost in the current step
714  virtual Double_t Edep() const =0;
715 
716  //
717  // get methods
718  // tracking particle
719  // static properties
720  // ------------------------------------------------
721  //
722 
723  /// Return the PDG of the particle transported
724  virtual Int_t TrackPid() const =0;
725 
726  /// Return the charge of the track currently transported
727  virtual Double_t TrackCharge() const =0;
728 
729  /// Return the mass of the track currently transported
730  virtual Double_t TrackMass() const =0;
731 
732  /// Return the total energy of the current track
733  virtual Double_t Etot() const =0;
734 
735  //
736  // get methods - track status
737  // ------------------------------------------------
738  //
739 
740  /// Return true when the track performs the first step
741  virtual Bool_t IsNewTrack() const =0;
742 
743  /// Return true if the track is not at the boundary of the current volume
744  virtual Bool_t IsTrackInside() const =0;
745 
746  /// Return true if this is the first step of the track in the current volume
747  virtual Bool_t IsTrackEntering() const =0;
748 
749  /// Return true if this is the last step of the track in the current volume
750  virtual Bool_t IsTrackExiting() const =0;
751 
752  /// Return true if the track is out of the setup
753  virtual Bool_t IsTrackOut() const =0;
754 
755  /// Return true if the current particle has disappeared
756  /// either because it decayed or because it underwent
757  /// an inelastic collision
758  virtual Bool_t IsTrackDisappeared() const =0;
759 
760  /// Return true if the track energy has fallen below the threshold
761  virtual Bool_t IsTrackStop() const =0;
762 
763  /// Return true if the current particle is alive and will continue to be
764  /// transported
765  virtual Bool_t IsTrackAlive() const=0;
766 
767  //
768  // get methods - secondaries
769  // ------------------------------------------------
770  //
771 
772  /// Return the number of secondary particles generated in the current step
773  virtual Int_t NSecondaries() const=0;
774 
775  /// Return the parameters of the secondary track number isec produced
776  /// in the current step
777  virtual void GetSecondary(Int_t isec, Int_t& particleId,
778  TLorentzVector& position, TLorentzVector& momentum) =0;
779 
780  /// Return the VMC code of the process that has produced the secondary
781  /// particles in the current step
782  virtual TMCProcess ProdProcess(Int_t isec) const =0;
783 
784  /// Return the array of the VMC code of the processes active in the current
785  /// step
786  virtual Int_t StepProcesses(TArrayI &proc) const = 0;
787 
788  /// Return the information about the transport order needed by the stack
789  virtual Bool_t SecondariesAreOrdered() const = 0;
790 
791 
792  //
793  // ------------------------------------------------
794  // Control methods
795  // ------------------------------------------------
796  //
797 
798  /// Initialize MC
799  virtual void Init() = 0;
800 
801  /// Initialize MC physics
802  virtual void BuildPhysics() = 0;
803 
804  /// Process one event
805  /// Deprecated
806  virtual void ProcessEvent() = 0;
807 
808  /// Process one run and return true if run has finished successfully,
809  /// return false in other cases (run aborted by user)
810  virtual Bool_t ProcessRun(Int_t nevent) = 0;
811 
812  /// Set switches for lego transport
813  virtual void InitLego() = 0;
814 
815  /// (In)Activate collecting TGeo tracks
816  virtual void SetCollectTracks(Bool_t collectTracks) = 0;
817 
818  /// Return the info if collecting tracks is activated
819  virtual Bool_t IsCollectTracks() const = 0;
820 
821  /// Return the info if multi-threading is supported/activated
822  virtual Bool_t IsMT() const { return kFALSE; }
823 
824  //
825  // ------------------------------------------------
826  // Set methods
827  // ------------------------------------------------
828  //
829 
830  /// Set the particle stack
831  virtual void SetStack(TVirtualMCStack* stack);
832 
833  /// Set the external decayer
834  virtual void SetExternalDecayer(TVirtualMCDecayer* decayer);
835 
836  /// Set the random number generator
837  virtual void SetRandom(TRandom* random);
838 
839  /// Set the magnetic field
840  virtual void SetMagField(TVirtualMagField* field);
841 
842  //
843  // ------------------------------------------------
844  // Get methods
845  // ------------------------------------------------
846  //
847 
848  /// Return the particle stack
849  TVirtualMCStack* GetStack() const { return fStack; }
850 
851  /// Return the external decayer
852  TVirtualMCDecayer* GetDecayer() const { return fDecayer; }
853 
854  /// Return the random number generator
855  TRandom* GetRandom() const { return fRandom; }
856 
857  /// Return the magnetic field
859 
860 protected:
861  TVirtualMCApplication* fApplication; //!< User MC application
862 
863 private:
864  TVirtualMC(const TVirtualMC &mc);
865  TVirtualMC & operator=(const TVirtualMC &);
866 
867 #if !defined(__CINT__)
868  static TMCThreadLocal TVirtualMC* fgMC; ///< Monte Carlo singleton instance
869 #else
870  static TVirtualMC* fgMC; ///< Monte Carlo singleton instance
871 #endif
872 
873  TVirtualMCStack* fStack; //!< Particles stack
874  TVirtualMCDecayer* fDecayer; //!< External decayer
875  TRandom* fRandom; //!< Random number generator
876  TVirtualMagField* fMagField;//!< Magnetic field
877 
878  ClassDef(TVirtualMC,1) //Interface to Monte Carlo
879 };
880 
881 #define gMC (TVirtualMC::GetMC())
882 
883 #endif //ROOT_TVirtualMC
884 
virtual Bool_t IsTrackExiting() const =0
Return true if this is the last step of the track in the current volume.
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 SetUserParameters(Bool_t isUserParameters)=0
Activate the parameters defined in tracking media (DEEMAX, STMIN, STEMAX), which are, be default, ignored.
virtual Bool_t SetCut(const char *cutName, Double_t cutValue)=0
Set transport cuts for particles.
virtual Bool_t IsMT() const
Return the info if multi-threading is supported/activated.
Definition: TVirtualMC.h:822
double par[1]
Definition: unuranDistr.cxx:38
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 Init()=0
Initialize MC.
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...
static TMCThreadLocal TVirtualMC * fgMC
Monte Carlo singleton instance.
Definition: TVirtualMC.h:868
virtual Double_t Etot() const =0
Return the total energy of the current track.
virtual Double_t ParticleLifeTime(Int_t pdg) const =0
Return life time of the particle specified by pdg.
TVirtualMCStack * fStack
Particles stack.
Definition: TVirtualMC.h:873
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...
TMCParticleType
VMC particle type codes.
virtual Int_t VolId2Mate(Int_t id) const =0
Return material number for a given volume id.
float Float_t
Definition: RtypesCore.h:53
EMCOpSurfaceModel
Optical surface models.
Definition: TMCOptical.h:21
TVirtualMC & operator=(const TVirtualMC &)
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 const char * VolName(Int_t id) const =0
Return the volume name for a given volume identifier id.
virtual Int_t IdFromPDG(Int_t pdg) const =0
Return MC specific code from a PDG and pseudo ENDF code (pdg)
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.
TRandom * fRandom
Random number generator.
Definition: TVirtualMC.h:875
virtual Int_t CurrentMedium() const =0
virtual void SetMaxNStep(Int_t)=0
Set the maximum number of steps till the particle is in the current medium.
virtual void StopTrack()=0
Stop the transport of the current particle and skip to the next.
TVirtualMCDecayer * fDecayer
External decayer.
Definition: TVirtualMC.h:874
virtual Int_t MediumId(const char *mediumName) const =0
Return the unique numeric identifier for medium name mediumName.
virtual Double_t ParticleMass(Int_t pdg) const =0
Return mass of the particle specified by pdg.
Basic string class.
Definition: TString.h:129
Matrix class used for computing global transformations Should NOT be used for node definition...
Definition: TGeoMatrix.h:408
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.
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
TArc * a
Definition: textangle.C:12
virtual Double_t TrackTime() const =0
Return the current time of flight of the track being transported.
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.
Definition: TVirtualMC.h:849
virtual void SetRootGeometry()=0
Set geometry from Root (built via TGeo)
virtual void InitLego()=0
Set switches for lego transport.
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.
Abstract base class for particle decays.
virtual Double_t TrackCharge() const =0
Return the charge of the track currently transported.
virtual void StopRun()=0
Stop simulation of the current event and set the abort run flag to true.
static double A[]
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 Int_t GetMaxNStep() const =0
Return the maximum number of steps allowed in the current medium.
virtual void ForceDecayTime(Float_t)=0
Force the decay time of the current particle.
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...
Array of integers (32 bits per element).
Definition: TArrayI.h:27
virtual const char * CurrentVolName() const =0
Return the current volume name.
EMCOpSurfaceFinish
Optical surface finish types.
Definition: TMCOptical.h:37
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 ~TVirtualMC()
Destructor.
Definition: TVirtualMC.cxx:84
virtual Bool_t IsTrackAlive() const =0
Return true if the current particle is alive and will continue to be transported. ...
Double_t x[n]
Definition: legend1.C:17
#define ClassDef(name, id)
Definition: Rtypes.h:297
TVirtualMC()
Default constructor.
Definition: TVirtualMC.cxx:69
This is the base class for the ROOT Random number generators.
Definition: TRandom.h:27
virtual void TrackPosition(TLorentzVector &position) const =0
Return the current position in the master reference frame of the track being transported.
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
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 void Gsbool(const char *onlyVolName, const char *manyVolName)=0
Helper function for resolving MANY.
virtual Int_t NSecondaries() const =0
Return the number of secondary particles generated in the current step.
virtual void DefineOpSurface(const char *name, EMCOpSurfaceModel model, EMCOpSurfaceType surfaceType, EMCOpSurfaceFinish surfaceFinish, Double_t sigmaAlpha)=0
Define the optical surface.
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 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 Int_t CurrentVolOffID(Int_t off, Int_t &copyNo) const =0
Return the current volume off upward in the geometrical tree ID and copy number.
virtual void SetCollectTracks(Bool_t collectTracks)=0
(In)Activate collecting TGeo tracks
virtual Int_t CurrentEvent() const =0
Return the number of the current event.
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 Double_t Edep() const =0
Return the energy lost in the current step.
virtual Bool_t SecondariesAreOrdered() const =0
Return the information about the transport order needed by the stack.
virtual Bool_t IsTrackInside() const =0
Return true if the track is not at the boundary of the current volume.
virtual Int_t CurrentVolID(Int_t &copyNo) const =0
Return the current volume ID and copy number.
virtual Int_t StepProcesses(TArrayI &proc) const =0
Return the array of the VMC code of the processes active in the current step.
virtual Double_t TrackStep() const =0
Return the length in centimeters of the current step (in cm)
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...
TVirtualMCApplication * fApplication
User MC application.
Definition: TVirtualMC.h:861
TLorentzVector is a general four-vector class, which can be used either for the description of positi...
TVirtualMagField * fMagField
Magnetic field.
Definition: TVirtualMC.h:876
virtual Double_t TrackLength() const =0
Return the length of the current track from its origin (in cm)
virtual Double_t TrackMass() const =0
Return the mass of the track currently transported.
virtual Bool_t IsNewTrack() const =0
Return true when the track performs the first step.
virtual Int_t PDGFromId(Int_t id) const =0
Return PDG code and pseudo ENDF code from MC specific code (id)
virtual Double_t MaxStep() const =0
Return the maximum step length in the current medium.
TRandom * GetRandom() const
Return the random number generator.
Definition: TVirtualMC.h:855
Interface to a user defined particles stack.
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 IsTrackDisappeared() const =0
Return true if the current particle has disappeared either because it decayed or because it underwent...
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 SetCerenkov(Int_t itmed, Int_t npckov, Float_t *ppckov, Float_t *absco, Float_t *effic, Float_t *rindex)=0
Define the tables for UV photon tracking in medium itmed.
virtual const char * CurrentVolOffName(Int_t off) const =0
Return the current volume off upward in the geometrical tree name and copy number&#39; if name=0 no name ...
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 Bool_t SetProcess(const char *flagName, Int_t flagValue)=0
Set process control.
virtual void StopEvent()=0
Stop simulation of the current event and skip to the next.
Interface to a user Monte Carlo application.
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 const char * CurrentVolPath()=0
Return the path in geometry tree for the current volume.
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...
TVirtualMCDecayer * GetDecayer() const
Return the external decayer.
Definition: TVirtualMC.h:852
virtual void SetSkinSurface(const char *name, const char *volName, const char *opSurfaceName)=0
Define the optical skin surface.
virtual Double_t ParticleCharge(Int_t pdg) const =0
Return charge (in e units) of the particle specified by pdg.
const Bool_t kFALSE
Definition: RtypesCore.h:92
virtual void SetMaterialProperty(Int_t itmed, const char *propertyName, Int_t np, Double_t *pp, Double_t *values)=0
Define material property via a table of values.
virtual TString ParticleName(Int_t pdg) const =0
Return name of the particle specified by pdg.
TVirtualMagField * GetMagField() const
Return the magnetic field.
Definition: TVirtualMC.h:858
#define TMCThreadLocal
Definition: TMCtls.h:57
virtual void SetMagField(TVirtualMagField *field)
Set the magnetic field.
Definition: TVirtualMC.cxx:138
virtual void ProcessEvent()=0
Process one event Deprecated.
double Double_t
Definition: RtypesCore.h:55
Abstract Monte Carlo interface.
Definition: TVirtualMC.h:41
virtual void SetRandom(TRandom *random)
Set the random number generator.
Definition: TVirtualMC.cxx:127
virtual TMCParticleType ParticleMCType(Int_t pdg) const =0
Return VMC type of the particle specified by pdg.
Double_t y[n]
Definition: legend1.C:17
virtual Bool_t IsCollectTracks() const =0
Return the info if collecting tracks is activated.
virtual Double_t Xsec(char *, Double_t, Int_t, Int_t)=0
Calculate X-sections (Geant3 only) Deprecated.
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.
Abstract class for magnetic field.
virtual void BuildPhysics()=0
Initialize MC physics.
Array of doubles (64 bits per element).
Definition: TArrayD.h:27
TMCProcess
VMC physics process codes.
Definition: TMCProcess.h:23
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...
you should not use this method at all Int_t Int_t z
Definition: TRolke.cxx:630
virtual Bool_t IsTrackEntering() const =0
Return true if this is the first step of the track in the current volume.
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 SetExternalDecayer(TVirtualMCDecayer *decayer)
Set the external decayer.
Definition: TVirtualMC.cxx:117
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 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 SetStack(TVirtualMCStack *stack)
Set the particle stack.
Definition: TVirtualMC.cxx:107
virtual Bool_t IsTrackOut() const =0
Return true if the track is out of the setup.
virtual Int_t TrackPid() const =0
Return the PDG of the particle transported.
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 void SetMaxStep(Double_t)=0
Set the maximum step allowed till the particle is in the current medium.
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 Int_t NofVolumes() const =0
Return total number of volumes in the geometry.
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 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 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 Int_t VolId(const char *volName) const =0
Return the unique numeric identifier for volume name volName.
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 Int_t NofVolDaughters(const char *volName) const =0
Return number of daughters of the volume specified by volName.
static double Q[]
static TVirtualMC * GetMC()
Static access method.
Definition: TVirtualMC.cxx:98
virtual Bool_t IsTrackStop() const =0
Return true if the track energy has fallen below the threshold.
virtual Bool_t IsRootGeometrySupported() const =0
Info about supporting geometry defined via Root.
EMCOpSurfaceType
Optical surface types.
Definition: TMCOptical.h:28