1#ifndef TG4SpecialUrbanMscModel_h
2#define TG4SpecialUrbanMscModel_h 1
65#include <CLHEP/Units/SystemOfUnits.h>
69#include "G4MscStepLimitType.hh"
70#include "G4VMscModel.hh"
71#include "G4Version.hh"
73class G4ParticleChangeForMSC;
75class G4LossTableManager;
102 G4double KineticEnergy, G4double AtomicNumber, G4double AtomicWeight = 0.,
103 G4double cut = 0., G4double emax = DBL_MAX);
108 const G4Track& track, G4double& currentMinimalStep);
115 G4double truePathLength, G4double KineticEnergy);
132#if G4VERSION_NUMBER >= 1020
133 CLHEP::HepRandomEngine* rndmEngineMod;
204 mass = p->GetPDGMass();
205 charge = p->GetPDGCharge() / CLHEP::eplus;
216 G4double w = G4Exp(
lnZ / 6.);
217 G4double facz = 0.990395 + w * (-0.168386 + w * 0.093286);
222 G4double Z13 = w * w;
223 coeffc1 = 2.3785 - Z13 * (4.1981e-1 - Z13 * 6.3100e-2);
224 coeffc2 = 4.7526e-1 + Z13 * (1.7694 - Z13 * 3.3885e-1);
225 coeffc3 = 2.3683e-1 - Z13 * (1.8111 - Z13 * 3.2774e-1);
226 coeffc4 = 1.7888e-2 + Z13 * (1.9659e-2 - Z13 * 2.6664e-3);
237 G4double trueStepLength, G4double KineticEnergy)
245 KineticEnergy * (KineticEnergy + 2. *
mass)));
257 G4double xmeanth, G4double x2meanth)
262 (2. * xmeanth + 9. * x2meanth - 3.) / (2. * xmeanth - 3. * x2meanth + 1.);
263 G4double prob = (a + 2.) * xmeanth / a;
267 if (rndmEngineMod->flat() < prob) {
268 cth = -1. + 2. * G4Exp(G4Log(rndmEngineMod->flat()) / (a + 1.));
271 cth = -1. + 2. * rndmEngineMod->flat();
280 static const G4double kappa = 2.5;
281 static const G4double kappami1 = 1.5;
283 G4double latcorr = 0.;
294 latcorr = G4Exp(latcorr) / kappami1;
295 latcorr += 1. - kappa * etau / kappami1;
static const G4double c_highland
Laszlo Urban model adapted for ALICE EMCAL requirements.
void SetParticle(const G4ParticleDefinition *)
virtual ~TG4SpecialUrbanMscModel()
G4ParticleChangeForMSC * fParticleChange
TG4SpecialUrbanMscModel(const TG4SpecialUrbanMscModel &)
G4double ComputeGeomPathLength(G4double truePathLength)
G4int currentMaterialIndex
const G4MaterialCutsCouple * couple
G4double LatCorrelation()
void StartTracking(G4Track *)
const G4ParticleDefinition * particle
G4double currentRadLength
G4double ComputeTrueStepLength(G4double geomStepLength)
G4LossTableManager * theManager
G4double ComputeTheta0(G4double truePathLength, G4double KineticEnergy)
G4double ComputeTruePathLengthLimit(const G4Track &track, G4double ¤tMinimalStep)
G4ThreeVector & SampleScattering(const G4ThreeVector &, G4double safety)
G4double currentKinEnergy
void Initialise(const G4ParticleDefinition *, const G4DataVector &)
G4bool latDisplasmentbackup
G4double SimpleScattering(G4double xmeanth, G4double x2meanth)
TG4SpecialUrbanMscModel & operator=(const TG4SpecialUrbanMscModel &right)
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *particle, G4double KineticEnergy, G4double AtomicNumber, G4double AtomicWeight=0., G4double cut=0., G4double emax=DBL_MAX)
TG4SpecialUrbanMscModel(const G4String &nam="ALICEUrbanMsc")
G4double SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy)