Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4UrbanMscModel Class Reference

#include <G4UrbanMscModel.hh>

Inheritance diagram for G4UrbanMscModel:
G4VMscModel G4VEmModel

Public Member Functions

 G4UrbanMscModel (const G4String &nam="UrbanMsc")
 
virtual ~G4UrbanMscModel ()
 
void Initialise (const G4ParticleDefinition *, const G4DataVector &)
 
void StartTracking (G4Track *)
 
G4double ComputeCrossSectionPerAtom (const G4ParticleDefinition *particle, G4double KineticEnergy, G4double AtomicNumber, G4double AtomicWeight=0., G4double cut=0., G4double emax=DBL_MAX)
 
G4ThreeVectorSampleScattering (const G4ThreeVector &, G4double safety)
 
G4double ComputeTruePathLengthLimit (const G4Track &track, G4double &currentMinimalStep)
 
G4double ComputeGeomPathLength (G4double truePathLength)
 
G4double ComputeTrueStepLength (G4double geomStepLength)
 
G4double ComputeTheta0 (G4double truePathLength, G4double KineticEnergy)
 
- Public Member Functions inherited from G4VMscModel
 G4VMscModel (const G4String &nam)
 
virtual ~G4VMscModel ()
 
virtual void SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double tmax)
 
void SetStepLimitType (G4MscStepLimitType)
 
void SetLateralDisplasmentFlag (G4bool val)
 
void SetRangeFactor (G4double)
 
void SetGeomFactor (G4double)
 
void SetSkin (G4double)
 
void SetSampleZ (G4bool)
 
G4VEnergyLossProcessGetIonisation () const
 
void SetIonisation (G4VEnergyLossProcess *, const G4ParticleDefinition *part)
 
G4double ComputeSafety (const G4ThreeVector &position, G4double limit)
 
G4double ComputeGeomLimit (const G4Track &, G4double &presafety, G4double limit)
 
G4double GetDEDX (const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
 
G4double GetRange (const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
 
G4double GetEnergy (const G4ParticleDefinition *part, G4double range, const G4MaterialCutsCouple *couple)
 
G4double GetTransportMeanFreePath (const G4ParticleDefinition *part, G4double kinEnergy)
 
- Public Member Functions inherited from G4VEmModel
 G4VEmModel (const G4String &nam)
 
virtual ~G4VEmModel ()
 
virtual void InitialiseLocal (const G4ParticleDefinition *, G4VEmModel *masterModel)
 
virtual void InitialiseForMaterial (const G4ParticleDefinition *, const G4Material *)
 
virtual void InitialiseForElement (const G4ParticleDefinition *, G4int Z)
 
virtual G4double ComputeDEDXPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
 
virtual G4double CrossSectionPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
virtual G4double ChargeSquareRatio (const G4Track &)
 
virtual G4double GetChargeSquareRatio (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
virtual G4double GetParticleCharge (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
virtual void CorrectionsAlongStep (const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length)
 
virtual G4double Value (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy)
 
virtual G4double MinPrimaryEnergy (const G4Material *, const G4ParticleDefinition *, G4double cut=0.0)
 
virtual G4double MinEnergyCut (const G4ParticleDefinition *, const G4MaterialCutsCouple *)
 
virtual void SetupForMaterial (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
virtual void DefineForRegion (const G4Region *)
 
void InitialiseElementSelectors (const G4ParticleDefinition *, const G4DataVector &)
 
std::vector
< G4EmElementSelector * > * 
GetElementSelectors ()
 
void SetElementSelectors (std::vector< G4EmElementSelector * > *)
 
G4double ComputeDEDX (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
 
G4double CrossSection (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4double ComputeMeanFreePath (const G4ParticleDefinition *, G4double kineticEnergy, const G4Material *, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4double ComputeCrossSectionPerAtom (const G4ParticleDefinition *, const G4Element *, G4double kinEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4int SelectIsotopeNumber (const G4Element *)
 
const G4ElementSelectRandomAtom (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
const G4ElementSelectRandomAtom (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4int SelectRandomAtomNumber (const G4Material *)
 
void SetParticleChange (G4VParticleChange *, G4VEmFluctuationModel *f=0)
 
void SetCrossSectionTable (G4PhysicsTable *, G4bool isLocal)
 
G4ElementDataGetElementData ()
 
G4PhysicsTableGetCrossSectionTable ()
 
G4VEmFluctuationModelGetModelOfFluctuations ()
 
G4VEmAngularDistributionGetAngularDistribution ()
 
void SetAngularDistribution (G4VEmAngularDistribution *)
 
G4double HighEnergyLimit () const
 
G4double LowEnergyLimit () const
 
G4double HighEnergyActivationLimit () const
 
G4double LowEnergyActivationLimit () const
 
G4double PolarAngleLimit () const
 
G4double SecondaryThreshold () const
 
G4bool LPMFlag () const
 
G4bool DeexcitationFlag () const
 
G4bool ForceBuildTableFlag () const
 
G4bool UseAngularGeneratorFlag () const
 
void SetAngularGeneratorFlag (G4bool)
 
void SetHighEnergyLimit (G4double)
 
void SetLowEnergyLimit (G4double)
 
void SetActivationHighEnergyLimit (G4double)
 
void SetActivationLowEnergyLimit (G4double)
 
G4bool IsActive (G4double kinEnergy)
 
void SetPolarAngleLimit (G4double)
 
void SetSecondaryThreshold (G4double)
 
void SetLPMFlag (G4bool val)
 
void SetDeexcitationFlag (G4bool val)
 
void SetForceBuildTable (G4bool val)
 
void SetMasterThread (G4bool val)
 
G4bool IsMaster () const
 
G4double MaxSecondaryKinEnergy (const G4DynamicParticle *dynParticle)
 
const G4StringGetName () const
 
void SetCurrentCouple (const G4MaterialCutsCouple *)
 
const G4ElementGetCurrentElement () const
 

Additional Inherited Members

- Protected Member Functions inherited from G4VMscModel
G4ParticleChangeForMSCGetParticleChangeForMSC (const G4ParticleDefinition *p=0)
 
G4double ConvertTrueToGeom (G4double &tLength, G4double &gLength)
 
- Protected Member Functions inherited from G4VEmModel
G4ParticleChangeForLossGetParticleChangeForLoss ()
 
G4ParticleChangeForGammaGetParticleChangeForGamma ()
 
virtual G4double MaxSecondaryEnergy (const G4ParticleDefinition *, G4double kineticEnergy)
 
const G4MaterialCutsCoupleCurrentCouple () const
 
void SetCurrentElement (const G4Element *)
 
- Protected Attributes inherited from G4VMscModel
G4double facrange
 
G4double facgeom
 
G4double facsafety
 
G4double skin
 
G4double dtrl
 
G4double lambdalimit
 
G4double geomMin
 
G4double geomMax
 
G4ThreeVector fDisplacement
 
G4MscStepLimitType steppingAlgorithm
 
G4bool samplez
 
G4bool latDisplasment
 
- Protected Attributes inherited from G4VEmModel
G4ElementDatafElementData
 
G4VParticleChangepParticleChange
 
G4PhysicsTablexSectionTable
 
const std::vector< G4double > * theDensityFactor
 
const std::vector< G4int > * theDensityIdx
 
size_t idxTable
 

Detailed Description

Definition at line 74 of file G4UrbanMscModel.hh.

Constructor & Destructor Documentation

G4UrbanMscModel::G4UrbanMscModel ( const G4String nam = "UrbanMsc")

Definition at line 104 of file G4UrbanMscModel.cc.

References G4LossTableManager::Instance(), python.hepunit::MeV, python.hepunit::mm, python.hepunit::pi, python.hepunit::proton_mass_c2, G4VMscModel::SetSampleZ(), and G4VMscModel::skin.

105  : G4VMscModel(nam)
106 {
107  masslimite = 0.6*MeV;
108  lambdalimit = 1.*mm;
109  fr = 0.02;
110  taubig = 8.0;
111  tausmall = 1.e-16;
112  taulim = 1.e-6;
113  currentTau = taulim;
114  tlimitminfix = 0.01*nm;
115  tlimitminfix2 = 1.*nm;
116  stepmin = tlimitminfix;
117  smallstep = 1.e10;
118  currentRange = 0. ;
119  rangeinit = 0.;
120  tlimit = 1.e10*mm;
121  tlimitmin = 10.*tlimitminfix;
122  tgeom = 1.e50*mm;
123  geombig = 1.e50*mm;
124  geommin = 1.e-3*mm;
125  geomlimit = geombig;
126  presafety = 0.*mm;
127 
128  y = 0.;
129 
130  Zold = 0.;
131  Zeff = 1.;
132  Z2 = 1.;
133  Z23 = 1.;
134  lnZ = 0.;
135  coeffth1 = 0.;
136  coeffth2 = 0.;
137  coeffc1 = 0.;
138  coeffc2 = 0.;
139  coeffc3 = 0.;
140  coeffc4 = 0.;
141 
142  theta0max = pi/6.;
143  rellossmax = 0.50;
144  third = 1./3.;
145  particle = 0;
146  theManager = G4LossTableManager::Instance();
147  firstStep = true;
148  inside = false;
149  insideskin = false;
150 
151  skindepth = skin*stepmin;
152 
153  mass = proton_mass_c2;
154  charge = ChargeSquare = 1.0;
155  currentKinEnergy = currentRadLength = lambda0 = lambdaeff = tPathLength
156  = zPathLength = par1 = par2 = par3 = 0;
157 
158  currentMaterialIndex = -1;
159  fParticleChange = 0;
160  couple = 0;
161  SetSampleZ(true);
162 }
static G4LossTableManager * Instance()
G4double skin
Definition: G4VMscModel.hh:179
void SetSampleZ(G4bool)
Definition: G4VMscModel.hh:231
float proton_mass_c2
Definition: hepunit.py:275
G4VMscModel(const G4String &nam)
Definition: G4VMscModel.cc:58
G4UrbanMscModel::~G4UrbanMscModel ( )
virtual

Definition at line 166 of file G4UrbanMscModel.cc.

167 {}

Member Function Documentation

G4double G4UrbanMscModel::ComputeCrossSectionPerAtom ( const G4ParticleDefinition particle,
G4double  KineticEnergy,
G4double  AtomicNumber,
G4double  AtomicWeight = 0.,
G4double  cut = 0.,
G4double  emax = DBL_MAX 
)
virtual

Reimplemented from G4VEmModel.

Definition at line 195 of file G4UrbanMscModel.cc.

References test::c, plottest35::c1, python.hepunit::electron_mass_c2, G4Log(), G4lrint(), G4Pow::GetInstance(), and G4Pow::Z23().

200 {
201  static const G4double epsmin = 1.e-4 , epsmax = 1.e10;
202 
203  static const G4double Zdat[15] = { 4., 6., 13., 20., 26., 29., 32., 38.,47.,
204  50., 56., 64., 74., 79., 82. };
205 
206  // corr. factors for e-/e+ lambda for T <= Tlim
207  static const G4double celectron[15][22] =
208  {{1.125,1.072,1.051,1.047,1.047,1.050,1.052,1.054,
209  1.054,1.057,1.062,1.069,1.075,1.090,1.105,1.111,
210  1.112,1.108,1.100,1.093,1.089,1.087 },
211  {1.408,1.246,1.143,1.096,1.077,1.059,1.053,1.051,
212  1.052,1.053,1.058,1.065,1.072,1.087,1.101,1.108,
213  1.109,1.105,1.097,1.090,1.086,1.082 },
214  {2.833,2.268,1.861,1.612,1.486,1.309,1.204,1.156,
215  1.136,1.114,1.106,1.106,1.109,1.119,1.129,1.132,
216  1.131,1.124,1.113,1.104,1.099,1.098 },
217  {3.879,3.016,2.380,2.007,1.818,1.535,1.340,1.236,
218  1.190,1.133,1.107,1.099,1.098,1.103,1.110,1.113,
219  1.112,1.105,1.096,1.089,1.085,1.098 },
220  {6.937,4.330,2.886,2.256,1.987,1.628,1.395,1.265,
221  1.203,1.122,1.080,1.065,1.061,1.063,1.070,1.073,
222  1.073,1.070,1.064,1.059,1.056,1.056 },
223  {9.616,5.708,3.424,2.551,2.204,1.762,1.485,1.330,
224  1.256,1.155,1.099,1.077,1.070,1.068,1.072,1.074,
225  1.074,1.070,1.063,1.059,1.056,1.052 },
226  {11.72,6.364,3.811,2.806,2.401,1.884,1.564,1.386,
227  1.300,1.180,1.112,1.082,1.073,1.066,1.068,1.069,
228  1.068,1.064,1.059,1.054,1.051,1.050 },
229  {18.08,8.601,4.569,3.183,2.662,2.025,1.646,1.439,
230  1.339,1.195,1.108,1.068,1.053,1.040,1.039,1.039,
231  1.039,1.037,1.034,1.031,1.030,1.036 },
232  {18.22,10.48,5.333,3.713,3.115,2.367,1.898,1.631,
233  1.498,1.301,1.171,1.105,1.077,1.048,1.036,1.033,
234  1.031,1.028,1.024,1.022,1.021,1.024 },
235  {14.14,10.65,5.710,3.929,3.266,2.453,1.951,1.669,
236  1.528,1.319,1.178,1.106,1.075,1.040,1.027,1.022,
237  1.020,1.017,1.015,1.013,1.013,1.020 },
238  {14.11,11.73,6.312,4.240,3.478,2.566,2.022,1.720,
239  1.569,1.342,1.186,1.102,1.065,1.022,1.003,0.997,
240  0.995,0.993,0.993,0.993,0.993,1.011 },
241  {22.76,20.01,8.835,5.287,4.144,2.901,2.219,1.855,
242  1.677,1.410,1.224,1.121,1.073,1.014,0.986,0.976,
243  0.974,0.972,0.973,0.974,0.975,0.987 },
244  {50.77,40.85,14.13,7.184,5.284,3.435,2.520,2.059,
245  1.837,1.512,1.283,1.153,1.091,1.010,0.969,0.954,
246  0.950,0.947,0.949,0.952,0.954,0.963 },
247  {65.87,59.06,15.87,7.570,5.567,3.650,2.682,2.182,
248  1.939,1.579,1.325,1.178,1.108,1.014,0.965,0.947,
249  0.941,0.938,0.940,0.944,0.946,0.954 },
250  {55.60,47.34,15.92,7.810,5.755,3.767,2.760,2.239,
251  1.985,1.609,1.343,1.188,1.113,1.013,0.960,0.939,
252  0.933,0.930,0.933,0.936,0.939,0.949 }};
253 
254  static const G4double cpositron[15][22] = {
255  {2.589,2.044,1.658,1.446,1.347,1.217,1.144,1.110,
256  1.097,1.083,1.080,1.086,1.092,1.108,1.123,1.131,
257  1.131,1.126,1.117,1.108,1.103,1.100 },
258  {3.904,2.794,2.079,1.710,1.543,1.325,1.202,1.145,
259  1.122,1.096,1.089,1.092,1.098,1.114,1.130,1.137,
260  1.138,1.132,1.122,1.113,1.108,1.102 },
261  {7.970,6.080,4.442,3.398,2.872,2.127,1.672,1.451,
262  1.357,1.246,1.194,1.179,1.178,1.188,1.201,1.205,
263  1.203,1.190,1.173,1.159,1.151,1.145 },
264  {9.714,7.607,5.747,4.493,3.815,2.777,2.079,1.715,
265  1.553,1.353,1.253,1.219,1.211,1.214,1.225,1.228,
266  1.225,1.210,1.191,1.175,1.166,1.174 },
267  {17.97,12.95,8.628,6.065,4.849,3.222,2.275,1.820,
268  1.624,1.382,1.259,1.214,1.202,1.202,1.214,1.219,
269  1.217,1.203,1.184,1.169,1.160,1.151 },
270  {24.83,17.06,10.84,7.355,5.767,3.707,2.546,1.996,
271  1.759,1.465,1.311,1.252,1.234,1.228,1.238,1.241,
272  1.237,1.222,1.201,1.184,1.174,1.159 },
273  {23.26,17.15,11.52,8.049,6.375,4.114,2.792,2.155,
274  1.880,1.535,1.353,1.281,1.258,1.247,1.254,1.256,
275  1.252,1.234,1.212,1.194,1.183,1.170 },
276  {22.33,18.01,12.86,9.212,7.336,4.702,3.117,2.348,
277  2.015,1.602,1.385,1.297,1.268,1.251,1.256,1.258,
278  1.254,1.237,1.214,1.195,1.185,1.179 },
279  {33.91,24.13,15.71,10.80,8.507,5.467,3.692,2.808,
280  2.407,1.873,1.564,1.425,1.374,1.330,1.324,1.320,
281  1.312,1.288,1.258,1.235,1.221,1.205 },
282  {32.14,24.11,16.30,11.40,9.015,5.782,3.868,2.917,
283  2.490,1.925,1.596,1.447,1.391,1.342,1.332,1.327,
284  1.320,1.294,1.264,1.240,1.226,1.214 },
285  {29.51,24.07,17.19,12.28,9.766,6.238,4.112,3.066,
286  2.602,1.995,1.641,1.477,1.414,1.356,1.342,1.336,
287  1.328,1.302,1.270,1.245,1.231,1.233 },
288  {38.19,30.85,21.76,15.35,12.07,7.521,4.812,3.498,
289  2.926,2.188,1.763,1.563,1.484,1.405,1.382,1.371,
290  1.361,1.330,1.294,1.267,1.251,1.239 },
291  {49.71,39.80,27.96,19.63,15.36,9.407,5.863,4.155,
292  3.417,2.478,1.944,1.692,1.589,1.480,1.441,1.423,
293  1.409,1.372,1.330,1.298,1.280,1.258 },
294  {59.25,45.08,30.36,20.83,16.15,9.834,6.166,4.407,
295  3.641,2.648,2.064,1.779,1.661,1.531,1.482,1.459,
296  1.442,1.400,1.354,1.319,1.299,1.272 },
297  {56.38,44.29,30.50,21.18,16.51,10.11,6.354,4.542,
298  3.752,2.724,2.116,1.817,1.692,1.554,1.499,1.474,
299  1.456,1.412,1.364,1.328,1.307,1.282 }};
300 
301  //data/corrections for T > Tlim
302 
303  static const G4double hecorr[15] = {
304  120.70, 117.50, 105.00, 92.92, 79.23, 74.510, 68.29,
305  57.39, 41.97, 36.14, 24.53, 10.21, -7.855, -16.84,
306  -22.30};
307 
308  G4double sigma;
309  SetParticle(part);
310 
311  Z23 = G4Pow::GetInstance()->Z23(G4lrint(AtomicNumber));
312 
313  // correction if particle .ne. e-/e+
314  // compute equivalent kinetic energy
315  // lambda depends on p*beta ....
316 
317  G4double eKineticEnergy = KineticEnergy;
318 
319  if(mass > electron_mass_c2)
320  {
321  G4double TAU = KineticEnergy/mass ;
322  G4double c = mass*TAU*(TAU+2.)/(electron_mass_c2*(TAU+1.)) ;
323  G4double w = c-2. ;
324  G4double tau = 0.5*(w+sqrt(w*w+4.*c)) ;
325  eKineticEnergy = electron_mass_c2*tau ;
326  }
327 
328  G4double eTotalEnergy = eKineticEnergy + electron_mass_c2 ;
329  G4double beta2 = eKineticEnergy*(eTotalEnergy+electron_mass_c2)
330  /(eTotalEnergy*eTotalEnergy);
331  G4double bg2 = eKineticEnergy*(eTotalEnergy+electron_mass_c2)
332  /(electron_mass_c2*electron_mass_c2);
333 
334  G4double eps = epsfactor*bg2/Z23;
335 
336  if (eps<epsmin) sigma = 2.*eps*eps;
337  else if(eps<epsmax) sigma = G4Log(1.+2.*eps)-2.*eps/(1.+2.*eps);
338  else sigma = G4Log(2.*eps)-1.+1./eps;
339 
340  sigma *= ChargeSquare*AtomicNumber*AtomicNumber/(beta2*bg2);
341 
342  // interpolate in AtomicNumber and beta2
343  G4double c1,c2,cc1,cc2,corr;
344 
345  // get bin number in Z
346  G4int iZ = 14;
347  while ((iZ>=0)&&(Zdat[iZ]>=AtomicNumber)) iZ -= 1;
348  if (iZ==14) iZ = 13;
349  if (iZ==-1) iZ = 0 ;
350 
351  G4double ZZ1 = Zdat[iZ];
352  G4double ZZ2 = Zdat[iZ+1];
353  G4double ratZ = (AtomicNumber-ZZ1)*(AtomicNumber+ZZ1)/
354  ((ZZ2-ZZ1)*(ZZ2+ZZ1));
355 
356  if(eKineticEnergy <= Tlim)
357  {
358  // get bin number in T (beta2)
359  G4int iT = 21;
360  while ((iT>=0)&&(Tdat[iT]>=eKineticEnergy)) iT -= 1;
361  if(iT==21) iT = 20;
362  if(iT==-1) iT = 0 ;
363 
364  // calculate betasquare values
365  G4double T = Tdat[iT], E = T + electron_mass_c2;
366  G4double b2small = T*(E+electron_mass_c2)/(E*E);
367 
368  T = Tdat[iT+1]; E = T + electron_mass_c2;
369  G4double b2big = T*(E+electron_mass_c2)/(E*E);
370  G4double ratb2 = (beta2-b2small)/(b2big-b2small);
371 
372  if (charge < 0.)
373  {
374  c1 = celectron[iZ][iT];
375  c2 = celectron[iZ+1][iT];
376  cc1 = c1+ratZ*(c2-c1);
377 
378  c1 = celectron[iZ][iT+1];
379  c2 = celectron[iZ+1][iT+1];
380  cc2 = c1+ratZ*(c2-c1);
381 
382  corr = cc1+ratb2*(cc2-cc1);
383 
384  sigma *= sigmafactor/corr;
385  }
386  else
387  {
388  c1 = cpositron[iZ][iT];
389  c2 = cpositron[iZ+1][iT];
390  cc1 = c1+ratZ*(c2-c1);
391 
392  c1 = cpositron[iZ][iT+1];
393  c2 = cpositron[iZ+1][iT+1];
394  cc2 = c1+ratZ*(c2-c1);
395 
396  corr = cc1+ratb2*(cc2-cc1);
397 
398  sigma *= sigmafactor/corr;
399  }
400  }
401  else
402  {
403  c1 = bg2lim*sig0[iZ]*(1.+hecorr[iZ]*(beta2-beta2lim))/bg2;
404  c2 = bg2lim*sig0[iZ+1]*(1.+hecorr[iZ+1]*(beta2-beta2lim))/bg2;
405  if((AtomicNumber >= ZZ1) && (AtomicNumber <= ZZ2))
406  sigma = c1+ratZ*(c2-c1) ;
407  else if(AtomicNumber < ZZ1)
408  sigma = AtomicNumber*AtomicNumber*c1/(ZZ1*ZZ1);
409  else if(AtomicNumber > ZZ2)
410  sigma = AtomicNumber*AtomicNumber*c2/(ZZ2*ZZ2);
411  }
412  return sigma;
413 
414 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:53
int G4int
Definition: G4Types.hh:78
float electron_mass_c2
Definition: hepunit.py:274
G4double G4Log(G4double x)
Definition: G4Log.hh:227
int G4lrint(double ad)
Definition: templates.hh:163
G4double Z23(G4int Z) const
Definition: G4Pow.hh:153
double G4double
Definition: G4Types.hh:76
tuple c1
Definition: plottest35.py:14
G4double G4UrbanMscModel::ComputeGeomPathLength ( G4double  truePathLength)
virtual

Reimplemented from G4VMscModel.

Definition at line 685 of file G4UrbanMscModel.cc.

References G4VMscModel::dtrl, G4Exp(), G4Log(), G4VMscModel::GetEnergy(), and G4VMscModel::GetTransportMeanFreePath().

686 {
687  firstStep = false;
688  lambdaeff = lambda0;
689  par1 = -1. ;
690  par2 = par3 = 0. ;
691 
692  // do the true -> geom transformation
693  zPathLength = tPathLength;
694 
695  // z = t for very small tPathLength
696  if(tPathLength < tlimitminfix2) return zPathLength;
697 
698  // this correction needed to run MSC with eIoni and eBrem inactivated
699  // and makes no harm for a normal run
700  // It is already checked
701  // if(tPathLength > currentRange)
702  // tPathLength = currentRange ;
703 
704  G4double tau = tPathLength/lambda0 ;
705 
706  if ((tau <= tausmall) || insideskin) {
707  zPathLength = tPathLength;
708  if(zPathLength > lambda0) zPathLength = lambda0;
709  return zPathLength;
710  }
711 
712  G4double zmean = tPathLength;
713  if (tPathLength < currentRange*dtrl) {
714  if(tau < taulim) zmean = tPathLength*(1.-0.5*tau) ;
715  else zmean = lambda0*(1.-G4Exp(-tau));
716  zPathLength = zmean ;
717  return zPathLength;
718 
719  } else if(currentKinEnergy < mass || tPathLength == currentRange) {
720  par1 = 1./currentRange ;
721  par2 = 1./(par1*lambda0) ;
722  par3 = 1.+par2 ;
723  if(tPathLength < currentRange)
724  zmean = (1.-G4Exp(par3*G4Log(1.-tPathLength/currentRange)))/(par1*par3) ;
725  else {
726  zmean = 1./(par1*par3) ;
727  }
728  zPathLength = zmean ;
729  return zPathLength;
730 
731  } else {
732  G4double T1 = GetEnergy(particle,currentRange-tPathLength,couple);
733  G4double lambda1 = GetTransportMeanFreePath(particle,T1);
734 
735  par1 = (lambda0-lambda1)/(lambda0*tPathLength);
736  par2 = 1./(par1*lambda0);
737  par3 = 1.+par2 ;
738  zmean = (1.-G4Exp(par3*G4Log(lambda1/lambda0)))/(par1*par3);
739  }
740 
741  zPathLength = zmean;
742 
743  if(zPathLength > lambda0) { zPathLength = lambda0; }
744  //G4cout<< "zPathLength= "<< zPathLength<< " lambda1= " << lambda0 << G4endl;
745  return zPathLength;
746 }
G4double dtrl
Definition: G4VMscModel.hh:180
G4double GetEnergy(const G4ParticleDefinition *part, G4double range, const G4MaterialCutsCouple *couple)
Definition: G4VMscModel.hh:308
G4double GetTransportMeanFreePath(const G4ParticleDefinition *part, G4double kinEnergy)
Definition: G4VMscModel.hh:345
G4double G4Log(G4double x)
Definition: G4Log.hh:227
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:180
double G4double
Definition: G4Types.hh:76
G4double G4UrbanMscModel::ComputeTheta0 ( G4double  truePathLength,
G4double  KineticEnergy 
)
inline

Definition at line 222 of file G4UrbanMscModel.hh.

References G4Log().

224 {
225  // for all particles take the width of the central part
226  // from a parametrization similar to the Highland formula
227  // ( Highland formula: Particle Physics Booklet, July 2002, eq. 26.10)
228  G4double invbetacp = sqrt((currentKinEnergy+mass)*(KineticEnergy+mass)/
229  (currentKinEnergy*(currentKinEnergy+2.*mass)*
230  KineticEnergy*(KineticEnergy+2.*mass)));
231  y = trueStepLength/currentRadLength;
232  G4double theta0 = c_highland*std::abs(charge)*sqrt(y)*invbetacp;
233  y = G4Log(y);
234  // correction factor from e- scattering data
235  theta0 *= (coeffth1+coeffth2*y);
236  return theta0;
237 }
G4double G4Log(G4double x)
Definition: G4Log.hh:227
double G4double
Definition: G4Types.hh:76
G4double G4UrbanMscModel::ComputeTruePathLengthLimit ( const G4Track track,
G4double currentMinimalStep 
)
virtual

Reimplemented from G4VMscModel.

Definition at line 431 of file G4UrbanMscModel.cc.

References G4VMscModel::ComputeGeomLimit(), G4VMscModel::ComputeSafety(), G4VMscModel::ConvertTrueToGeom(), G4VMscModel::facgeom, G4VMscModel::facrange, G4VMscModel::facsafety, fGeomBoundary, fUseDistanceToBoundary, fUseSafety, G4Log(), G4Track::GetDynamicParticle(), G4MaterialCutsCouple::GetIndex(), G4DynamicParticle::GetKineticEnergy(), G4Track::GetMaterialCutsCouple(), G4StepPoint::GetPosition(), G4Step::GetPreStepPoint(), G4VMscModel::GetRange(), G4StepPoint::GetSafety(), G4Track::GetStep(), G4StepPoint::GetStepStatus(), G4VMscModel::GetTransportMeanFreePath(), python.hepunit::MeV, G4VEmModel::SetCurrentCouple(), G4INCL::DeJongSpin::shoot(), G4VMscModel::skin, G4InuclParticleNames::sp, and G4VMscModel::steppingAlgorithm.

434 {
435  tPathLength = currentMinimalStep;
436  const G4DynamicParticle* dp = track.GetDynamicParticle();
437 
438  G4StepPoint* sp = track.GetStep()->GetPreStepPoint();
439  G4StepStatus stepStatus = sp->GetStepStatus();
440  couple = track.GetMaterialCutsCouple();
441  SetCurrentCouple(couple);
442  currentMaterialIndex = couple->GetIndex();
443  currentKinEnergy = dp->GetKineticEnergy();
444  currentRange = GetRange(particle,currentKinEnergy,couple);
445  lambda0 = GetTransportMeanFreePath(particle,currentKinEnergy);
446  if(tPathLength > currentRange) { tPathLength = currentRange; }
447 
448  // stop here if small range particle
449  if(inside || tPathLength < tlimitminfix) {
450  return ConvertTrueToGeom(tPathLength, currentMinimalStep);
451  }
452 
453  presafety = sp->GetSafety();
454  /*
455  G4cout << "G4Urban96::StepLimit tPathLength= "
456  <<tPathLength<<" safety= " << presafety
457  << " range= " <<currentRange<< " lambda= "<<lambda0
458  << " Alg: " << steppingAlgorithm <<G4endl;
459  */
460  // far from geometry boundary
461  if(currentRange < presafety)
462  {
463  inside = true;
464  return ConvertTrueToGeom(tPathLength, currentMinimalStep);
465  }
466 
467  // standard version
468  //
470  {
471  //compute geomlimit and presafety
472  geomlimit = ComputeGeomLimit(track, presafety, currentRange);
473 
474  // is it far from boundary ?
475  if(currentRange < presafety)
476  {
477  inside = true;
478  return ConvertTrueToGeom(tPathLength, currentMinimalStep);
479  }
480 
481  smallstep += 1.;
482  insideskin = false;
483 
484  if(firstStep || (stepStatus == fGeomBoundary))
485  {
486  rangeinit = currentRange;
487  if(firstStep) smallstep = 1.e10;
488  else smallstep = 1.;
489 
490  //define stepmin here (it depends on lambda!)
491  //rough estimation of lambda_elastic/lambda_transport
492  G4double rat = currentKinEnergy/MeV ;
493  rat = 1.e-3/(rat*(10.+rat)) ;
494  //stepmin ~ lambda_elastic
495  stepmin = rat*lambda0;
496  skindepth = skin*stepmin;
497  //define tlimitmin
498  tlimitmin = 10.*stepmin;
499  if(tlimitmin < tlimitminfix) tlimitmin = tlimitminfix;
500  //G4cout << "rangeinit= " << rangeinit << " stepmin= " << stepmin
501  // << " tlimitmin= " << tlimitmin << " geomlimit= " << geomlimit <<G4endl;
502  // constraint from the geometry
503  if((geomlimit < geombig) && (geomlimit > geommin))
504  {
505  // geomlimit is a geometrical step length
506  // transform it to true path length (estimation)
507  if((1.-geomlimit/lambda0) > 0.)
508  geomlimit = -lambda0*G4Log(1.-geomlimit/lambda0)+tlimitmin ;
509 
510  if(stepStatus == fGeomBoundary)
511  tgeom = geomlimit/facgeom;
512  else
513  tgeom = 2.*geomlimit/facgeom;
514  }
515  else
516  tgeom = geombig;
517  }
518 
519 
520  //step limit
521  tlimit = facrange*rangeinit;
522 
523  //lower limit for tlimit
524  if(tlimit < tlimitmin) tlimit = tlimitmin;
525 
526  if(tlimit > tgeom) tlimit = tgeom;
527 
528  //G4cout << "tgeom= " << tgeom << " geomlimit= " << geomlimit
529  // << " tlimit= " << tlimit << " presafety= " << presafety << G4endl;
530 
531  // shortcut
532  if((tPathLength < tlimit) && (tPathLength < presafety) &&
533  (smallstep > skin) && (tPathLength < geomlimit-0.999*skindepth))
534  return ConvertTrueToGeom(tPathLength, currentMinimalStep);
535 
536  // step reduction near to boundary
537  if(smallstep <= skin)
538  {
539  tlimit = stepmin;
540  insideskin = true;
541  }
542  else if(geomlimit < geombig)
543  {
544  if(geomlimit > skindepth)
545  {
546  if(tlimit > geomlimit-0.999*skindepth)
547  tlimit = geomlimit-0.999*skindepth;
548  }
549  else
550  {
551  insideskin = true;
552  if(tlimit > stepmin) tlimit = stepmin;
553  }
554  }
555 
556  if(tlimit < stepmin) tlimit = stepmin;
557 
558  // randomize 1st step or 1st 'normal' step in volume
559  if(firstStep || ((smallstep == skin+1) && !insideskin))
560  {
561  G4double temptlimit = tlimit;
562  if(temptlimit > tlimitmin)
563  {
564  do {
565  temptlimit = G4RandGauss::shoot(tlimit,0.3*tlimit);
566  } while ((temptlimit < tlimitmin) ||
567  (temptlimit > 2.*tlimit-tlimitmin));
568  }
569  else
570  temptlimit = tlimitmin;
571  if(tPathLength > temptlimit) tPathLength = temptlimit;
572  }
573  else
574  {
575  if(tPathLength > tlimit) tPathLength = tlimit ;
576  }
577 
578  }
579  // for 'normal' simulation with or without magnetic field
580  // there no small step/single scattering at boundaries
581  else if(steppingAlgorithm == fUseSafety)
582  {
583  // compute presafety again if presafety <= 0 and no boundary
584  // i.e. when it is needed for optimization purposes
585  if((stepStatus != fGeomBoundary) && (presafety < tlimitminfix))
586  presafety = ComputeSafety(sp->GetPosition(),tPathLength);
587  /*
588  G4cout << "presafety= " << presafety
589  << " firstStep= " << firstStep
590  << " stepStatus= " << stepStatus
591  << G4endl;
592  */
593  // is far from boundary
594  if(currentRange < presafety)
595  {
596  inside = true;
597  return ConvertTrueToGeom(tPathLength, currentMinimalStep);
598  }
599 
600  if(firstStep || stepStatus == fGeomBoundary)
601  {
602  rangeinit = currentRange;
603  fr = facrange;
604  // 9.1 like stepping for e+/e- only (not for muons,hadrons)
605  if(mass < masslimite)
606  {
607  if(lambda0 > currentRange)
608  rangeinit = lambda0;
609  if(lambda0 > lambdalimit)
610  fr *= 0.75+0.25*lambda0/lambdalimit;
611  }
612 
613  //lower limit for tlimit
614  G4double rat = currentKinEnergy/MeV ;
615  rat = 1.e-3/(rat*(10.+rat)) ;
616  stepmin = lambda0*rat;
617  tlimitmin = 10.*stepmin;
618  if(tlimitmin < tlimitminfix) tlimitmin = tlimitminfix;
619  }
620  //step limit
621  tlimit = fr*rangeinit;
622 
623  if(tlimit < facsafety*presafety)
624  tlimit = facsafety*presafety;
625 
626  //lower limit for tlimit
627  if(tlimit < tlimitmin) tlimit = tlimitmin;
628 
629  if(firstStep || stepStatus == fGeomBoundary)
630  {
631  G4double temptlimit = tlimit;
632  if(temptlimit > tlimitmin)
633  {
634  do {
635  temptlimit = G4RandGauss::shoot(tlimit,0.3*tlimit);
636  } while ((temptlimit < tlimitmin) ||
637  (temptlimit > 2.*tlimit-tlimitmin));
638  }
639  else
640  temptlimit = tlimitmin;
641 
642  if(tPathLength > temptlimit) tPathLength = temptlimit;
643  }
644  else
645  if(tPathLength > tlimit) tPathLength = tlimit;
646 
647  }
648 
649  // version similar to 7.1 (needed for some experiments)
650  else
651  {
652  if (stepStatus == fGeomBoundary)
653  {
654  if (currentRange > lambda0) tlimit = facrange*currentRange;
655  else tlimit = facrange*lambda0;
656 
657  if(tlimit < tlimitmin) tlimit = tlimitmin;
658  }
659 
660  if(firstStep || stepStatus == fGeomBoundary)
661  {
662  G4double temptlimit = tlimit;
663  if(temptlimit > tlimitmin)
664  {
665  do {
666  temptlimit = G4RandGauss::shoot(tlimit,0.3*tlimit);
667  } while ((temptlimit < tlimitmin) ||
668  (temptlimit > 2.*tlimit-tlimitmin));
669  }
670  else
671  temptlimit = tlimitmin;
672 
673  if(tPathLength > temptlimit) tPathLength = temptlimit;
674  }
675  else
676  if(tPathLength > tlimit) tPathLength = tlimit;
677  }
678  //G4cout << "tPathLength= " << tPathLength
679  // << " currentMinimalStep= " << currentMinimalStep << G4endl;
680  return ConvertTrueToGeom(tPathLength, currentMinimalStep);
681 }
G4double facgeom
Definition: G4VMscModel.hh:177
ThreeVector shoot(const G4int Ap, const G4int Af)
G4double GetKineticEnergy() const
const G4DynamicParticle * GetDynamicParticle() const
G4double facrange
Definition: G4VMscModel.hh:176
G4StepStatus GetStepStatus() const
G4double ConvertTrueToGeom(G4double &tLength, G4double &gLength)
Definition: G4VMscModel.hh:246
G4double skin
Definition: G4VMscModel.hh:179
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
const G4Step * GetStep() const
G4StepStatus
Definition: G4StepStatus.hh:49
G4StepPoint * GetPreStepPoint() const
const G4ThreeVector & GetPosition() const
G4double GetRange(const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
Definition: G4VMscModel.hh:288
G4double ComputeGeomLimit(const G4Track &, G4double &presafety, G4double limit)
Definition: G4VMscModel.hh:256
G4double GetTransportMeanFreePath(const G4ParticleDefinition *part, G4double kinEnergy)
Definition: G4VMscModel.hh:345
G4double ComputeSafety(const G4ThreeVector &position, G4double limit)
Definition: G4VMscModel.hh:238
G4double G4Log(G4double x)
Definition: G4Log.hh:227
G4double facsafety
Definition: G4VMscModel.hh:178
void SetCurrentCouple(const G4MaterialCutsCouple *)
Definition: G4VEmModel.hh:419
G4double GetSafety() const
G4MscStepLimitType steppingAlgorithm
Definition: G4VMscModel.hh:186
double G4double
Definition: G4Types.hh:76
G4double G4UrbanMscModel::ComputeTrueStepLength ( G4double  geomStepLength)
virtual

Reimplemented from G4VMscModel.

Definition at line 750 of file G4UrbanMscModel.cc.

References G4Exp(), and G4Log().

751 {
752  // step defined other than transportation
753  if(geomStepLength == zPathLength)
754  { return tPathLength; }
755 
756  zPathLength = geomStepLength;
757 
758  // t = z for very small step
759  if(geomStepLength < tlimitminfix2) {
760  tPathLength = geomStepLength;
761 
762  // recalculation
763  } else {
764 
765  G4double tlength = geomStepLength;
766  if((geomStepLength > lambda0*tausmall) && !insideskin) {
767 
768  if(par1 < 0.) {
769  tlength = -lambda0*G4Log(1.-geomStepLength/lambda0) ;
770  } else {
771  if(par1*par3*geomStepLength < 1.) {
772  tlength = (1.-G4Exp(G4Log(1.-par1*par3*geomStepLength)/par3))/par1 ;
773  } else {
774  tlength = currentRange;
775  }
776  }
777  if(tlength < geomStepLength) { tlength = geomStepLength; }
778  else if(tlength > tPathLength) { tlength = tPathLength; }
779  }
780  tPathLength = tlength;
781  }
782  //G4cout << "Urban96::ComputeTrueLength: tPathLength= " << tPathLength
783  // << " step= " << geomStepLength << G4endl;
784 
785  return tPathLength;
786 }
G4double G4Log(G4double x)
Definition: G4Log.hh:227
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:180
double G4double
Definition: G4Types.hh:76
void G4UrbanMscModel::Initialise ( const G4ParticleDefinition p,
const G4DataVector  
)
virtual

Implements G4VEmModel.

Definition at line 171 of file G4UrbanMscModel.cc.

References G4VMscModel::GetParticleChangeForMSC(), and G4VMscModel::skin.

173 {
174  skindepth = skin*stepmin;
175  // trackID = -1;
176 
177  // set values of some data members
178  SetParticle(p);
179  /*
180  if(p->GetPDGMass() > MeV) {
181  G4cout << "### WARNING: G4UrbanMscModel model is used for "
182  << p->GetParticleName() << " !!! " << G4endl;
183  G4cout << "### This model should be used only for e+-"
184  << G4endl;
185  }
186  */
187  fParticleChange = GetParticleChangeForMSC(p);
188 
189  //samplez = true;
190  //G4cout << "### G4UrbanMscModel::Initialise done!" << G4endl;
191 }
G4double skin
Definition: G4VMscModel.hh:179
G4ParticleChangeForMSC * GetParticleChangeForMSC(const G4ParticleDefinition *p=0)
Definition: G4VMscModel.cc:89
G4ThreeVector & G4UrbanMscModel::SampleScattering ( const G4ThreeVector oldDirection,
G4double  safety 
)
virtual

Reimplemented from G4VMscModel.

Definition at line 791 of file G4UrbanMscModel.cc.

References G4VMscModel::dtrl, python.hepunit::eV, G4VMscModel::fDisplacement, G4UniformRand, G4VMscModel::GetDEDX(), G4VMscModel::GetEnergy(), G4VMscModel::latDisplasment, G4ParticleChangeForMSC::ProposeMomentumDirection(), CLHEP::Hep3Vector::rotateUz(), CLHEP::Hep3Vector::set(), and python.hepunit::twopi.

793 {
794  fDisplacement.set(0.0,0.0,0.0);
795  G4double kineticEnergy = currentKinEnergy;
796  if (tPathLength > currentRange*dtrl) {
797  kineticEnergy = GetEnergy(particle,currentRange-tPathLength,couple);
798  } else {
799  kineticEnergy -= tPathLength*GetDEDX(particle,currentKinEnergy,couple);
800  }
801 
802  if((kineticEnergy <= eV) || (tPathLength <= tlimitminfix) ||
803  (tPathLength/tausmall < lambda0)) { return fDisplacement; }
804 
805  G4double cth = SampleCosineTheta(tPathLength,kineticEnergy);
806 
807  // protection against 'bad' cth values
808  if(std::fabs(cth) > 1.) { return fDisplacement; }
809 
810  // extra protection agaist high energy particles backscattered
811  //G4cout << "Warning: large scattering E(MeV)= " << kineticEnergy
812  // << " s(mm)= " << tPathLength/mm
813  // << " 1-cosTheta= " << 1.0 - cth << G4endl;
814  // do Gaussian central scattering
815  // if(kineticEnergy > 5*GeV && cth < 0.9) {
816  /*
817  if(cth < 1.0 - 1000*tPathLength/lambda0 && cth < 0.5 &&
818  kineticEnergy > 20*MeV) {
819  G4cout << "### G4UrbanMscModel::SampleScattering for "
820  << particle->GetParticleName()
821  << " E(MeV)= " << kineticEnergy/MeV
822  << " Step(mm)= " << tPathLength/mm
823  << " in " << CurrentCouple()->GetMaterial()->GetName()
824  << " CosTheta= " << cth << G4endl;
825  }
826  */
827  G4double sth = sqrt((1.0 - cth)*(1.0 + cth));
828  G4double phi = twopi*G4UniformRand();
829  G4double dirx = sth*cos(phi);
830  G4double diry = sth*sin(phi);
831 
832  G4ThreeVector newDirection(dirx,diry,cth);
833  newDirection.rotateUz(oldDirection);
834  fParticleChange->ProposeMomentumDirection(newDirection);
835  /*
836  G4cout << "G4UrbanMscModel::SampleSecondaries: e(MeV)= " << kineticEnergy
837  << " sinTheta= " << sth << " safety(mm)= " << safety
838  << " trueStep(mm)= " << tPathLength
839  << " geomStep(mm)= " << zPathLength
840  << G4endl;
841  */
842  if (latDisplasment && safety > tlimitminfix2) {
843 
844  G4double r = SampleDisplacement();
845  /*
846  G4cout << "G4UrbanMscModel::SampleSecondaries: e(MeV)= " << kineticEnergy
847  << " sinTheta= " << sth << " r(mm)= " << r
848  << " trueStep(mm)= " << tPathLength
849  << " geomStep(mm)= " << zPathLength
850  << G4endl;
851  */
852  if(r > 0.)
853  {
854  G4double latcorr = LatCorrelation();
855  if(latcorr > r) latcorr = r;
856 
857  // sample direction of lateral displacement
858  // compute it from the lateral correlation
859  G4double Phi = 0.;
860  if(std::abs(r*sth) < latcorr)
861  Phi = twopi*G4UniformRand();
862  else
863  {
864  G4double psi = std::acos(latcorr/(r*sth));
865  if(G4UniformRand() < 0.5)
866  Phi = phi+psi;
867  else
868  Phi = phi-psi;
869  }
870 
871  dirx = std::cos(Phi);
872  diry = std::sin(Phi);
873 
874  fDisplacement.set(r*dirx,r*diry,0.0);
875  fDisplacement.rotateUz(oldDirection);
876  }
877  }
878  return fDisplacement;
879 }
void set(double x, double y, double z)
G4double dtrl
Definition: G4VMscModel.hh:180
G4bool latDisplasment
Definition: G4VMscModel.hh:189
G4double GetEnergy(const G4ParticleDefinition *part, G4double range, const G4MaterialCutsCouple *couple)
Definition: G4VMscModel.hh:308
#define G4UniformRand()
Definition: Randomize.hh:87
Hep3Vector & rotateUz(const Hep3Vector &)
Definition: ThreeVector.cc:72
G4ThreeVector fDisplacement
Definition: G4VMscModel.hh:185
void ProposeMomentumDirection(const G4ThreeVector &Pfinal)
G4double GetDEDX(const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
Definition: G4VMscModel.hh:273
double G4double
Definition: G4Types.hh:76
void G4UrbanMscModel::StartTracking ( G4Track track)
virtual

Reimplemented from G4VEmModel.

Definition at line 418 of file G4UrbanMscModel.cc.

References G4DynamicParticle::GetDefinition(), and G4Track::GetDynamicParticle().

419 {
420  SetParticle(track->GetDynamicParticle()->GetDefinition());
421  firstStep = true;
422  inside = false;
423  insideskin = false;
424  tlimit = geombig;
425  stepmin = tlimitminfix ;
426  tlimitmin = 10.*stepmin ;
427 }
const G4DynamicParticle * GetDynamicParticle() const
G4ParticleDefinition * GetDefinition() const

The documentation for this class was generated from the following files: