59 #include "G4ParticleChangeForMSC.hh" 80 singleScatteringMode(false)
150 G4Exception(
"G4WentzelVIRelModel::ComputeCrossSectionPerAtom",
"em0011",
187 const G4Track&
track,
190 G4double tlimit = currentMinimalStep;
192 G4StepPoint*
sp = track.GetStep()->GetPreStepPoint();
193 G4StepStatus stepStatus = sp->GetStepStatus();
219 G4double presafety = sp->GetSafety();
228 if(stepStatus != fGeomBoundary && presafety <
tlimitminfix) {
259 if(rcut > rlimit) { rlimit =
std::min(rlimit, rcut*sqrt(rlimit/rcut)); }
261 if(rlimit < tlimit) { tlimit = rlimit; }
337 static const G4double singleScatLimit = 1.0e-7;
384 }
else if(
xtsec > 0.0) {
438 static const G4double thinlimit = 0.1;
494 for (; i<nelm; ++i) {
if(
xsecn[i] >= qsec) {
break; } }
509 if(x2 <= 0.0) { --nMscSteps; }
527 if(z0 > 0.01) { zzz =
G4Exp(-1.0/z0); }
533 if(cost > 1.0) { cost = 1.0; }
534 else if(cost < -1.0) { cost =-1.0; }
535 sint = sqrt((1.0 - cost)*(1.0 + cost));
548 if(d >= 0.0) { dz = sqrt(d) -
r; }
549 else { dx = dy = dz = 0.0; }
557 temp.
set(vx1,vy1,cost);
563 }
while (0 < nMscSteps);
597 const G4double* theAtomNumDensityVector =
614 for (
G4int i=0; i<nelm; ++i) {
630 if(nucsec > 0.0) { esec /= nucsec; }
void set(double x, double y, double z)
static G4Pow * GetInstance()
void StartTracking(G4Track *)
ThreeVector shoot(const G4int Ap, const G4int Af)
G4double ComputeNuclearCrossSection(G4double CosThetaMin, G4double CosThetaMax)
virtual G4double ComputeTruePathLengthLimit(const G4Track &track, G4double ¤tMinimalStep)
virtual void StartTracking(G4Track *)
static G4LossTableManager * Instance()
virtual G4ThreeVector & SampleScattering(const G4ThreeVector &, G4double safety)
std::vector< G4Element * > G4ElementVector
G4double ConvertTrueToGeom(G4double &tLength, G4double &gLength)
const G4MaterialCutsCouple * CurrentCouple() const
G4ProductionCuts * GetProductionCuts() const
virtual G4double ComputeGeomPathLength(G4double truePathLength)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double KineticEnergy, G4double AtomicNumber, G4double AtomicWeight=0., G4double cut=DBL_MAX, G4double emax=DBL_MAX)
G4WentzelVIRelXSection * wokvi
G4double ComputeTransportCrossSectionPerAtom(G4double CosThetaMax)
G4double ComputeSafety(const G4ThreeVector &position, G4double limit=DBL_MAX)
static G4NistManager * Instance()
G4double PolarAngleLimit() const
void DefineMaterial(const G4MaterialCutsCouple *)
G4double ComputeXSectionPerVolume()
G4double GetProductionCut(G4int index) const
G4bool singleScatteringMode
G4double GetEnergy(const G4ParticleDefinition *part, G4double range, const G4MaterialCutsCouple *couple)
G4double GetKineticEnergy() const
G4double GetRange(const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
G4double SetupKinematic(G4double kinEnergy, const G4Material *mat, G4double cut, G4double tmass)
G4double SetupTarget(G4int Z, G4double cut)
G4ParticleChangeForMSC * GetParticleChangeForMSC(const G4ParticleDefinition *p=0)
const G4double * GetVecNbOfAtomsPerVolume() const
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
Hep3Vector & rotateUz(const Hep3Vector &)
static const double twopi
std::vector< G4double > prob
G4double ComputeGeomLimit(const G4Track &, G4double &presafety, G4double limit)
G4ThreeVector fDisplacement
G4double GetTransportMeanFreePath(const G4ParticleDefinition *part, G4double kinEnergy)
const G4DataVector * currentCuts
G4NistManager * fNistManager
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4int currentMaterialIndex
G4WentzelVIRelModel(G4bool combined=true)
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4LossTableManager * theManager
virtual ~G4WentzelVIRelModel()
virtual G4double ComputeTrueStepLength(G4double geomStepLength)
size_t GetNumberOfElements() const
G4MscStepLimitType steppingAlgorithm
std::vector< G4double > xsecn
G4ParticleChangeForMSC * fParticleChange
const G4ParticleDefinition * particle
G4double ComputeElectronCrossSection(G4double CosThetaMin, G4double CosThetaMax)
const G4MaterialCutsCouple * currentCouple
const G4ElementVector * GetElementVector() const
void Initialise(const G4ParticleDefinition *, G4double CosThetaLim)
void SetupParticle(const G4ParticleDefinition *)
G4ThreeVector & SampleSingleScattering(G4double CosThetaMin, G4double CosThetaMax, G4double elecRatio)
const G4Material * currentMaterial
G4double GetRadlen() const
G4double GetAtomicMassAmu(const G4String &symb) const