86 const G4double G4MuBremsstrahlungModel::xgi[] =
87 {0.03377,0.16940,0.38069,0.61931,0.83060,0.96623};
88 const G4double G4MuBremsstrahlungModel::wgi[] =
89 {0.08566,0.18038,0.23396,0.23396,0.18038,0.08566};
90 G4double G4MuBremsstrahlungModel::fDN[] = {0.0};
96 sqrte(sqrt(
G4Exp(1.))),
102 lowestKinEnergy(1.0*
GeV),
103 minThreshold(0.9*
keV)
108 lowestKinEnergy = 1.*
GeV;
113 for(
G4int i=1; i<93; ++i) {
117 fDN[i] /= std::pow(dn, 1./
G4double(i));
144 return std::max(lowestKinEnergy,cut);
179 if (kineticEnergy <= lowestKinEnergy) {
return dedx; }
183 if(cut < minThreshold) { cut = minThreshold; }
186 const G4double* theAtomicNumDensityVector =
195 dedx += loss*theAtomicNumDensityVector[i];
198 if(dedx < 0.) dedx = 0.;
209 static const G4int k2=5;
217 if(vcut>vmax) { bbb = vmax; }
219 if(kkk < 1) { kkk = 1; }
224 for(
G4int l=0; l<kkk; l++)
226 for(
G4int i=0; i<6; i++)
234 loss *=hhh*totalEnergy ;
248 static const G4int k2 = 4;
251 if(cut >= tkin)
return cross;
259 if(kkk < 1) { kkk = 1; }
265 for(
G4int l=0; l<kkk; l++)
267 for(
G4int i=0; i<6; i++)
292 if(gammaEnergy > tkin) {
return dxsection; }
296 G4double delta = 0.5*mass*mass*v/(E-gammaEnergy) ;
300 if(iz < 1) { iz = 1; }
301 else if(iz > 92) { iz = 92; }
319 (mass+delta*(dnstar*sqrte-2.))) ;
320 if(fn <0.) { fn = 0.; }
324 if(gammaEnergy<epmax1)
332 dxsection =
coeff*(1.-v*(1. - 0.75*
v))*Z*(fn*Z +
fe)/gammaEnergy;
347 if (kineticEnergy <= lowestKinEnergy)
return cross;
350 if(cut < minThreshold) cut = minThreshold;
351 if (cut >= tmax)
return cross;
354 if(tmax < kineticEnergy) {
363 std::vector<G4DynamicParticle*>* vdp,
373 if(tmin < minThreshold) tmin = minThreshold;
374 if(tmin >= tmax)
return;
385 G4double totalMomentum = sqrt(kineticEnergy*(kineticEnergy + 2.0*mass));
415 G4double dirx = sint*cos(phi), diry = sint*sin(phi), dirz = cos(theta) ;
420 partDirection *= totalMomentum;
421 partDirection -= gEnergy*gDirection;
422 partDirection = partDirection.
unit();
425 kineticEnergy -= gEnergy;
432 vdp->push_back(aGamma);
G4MuBremsstrahlungModel(const G4ParticleDefinition *p=0, const G4String &nam="MuBrem")
G4ParticleChangeForLoss * GetParticleChangeForLoss()
std::vector< G4Element * > G4ElementVector
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel)
G4double GetKineticEnergy() const
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
G4double ComputeMicroscopicCrossSection(G4double tkin, G4double Z, G4double cut)
G4double GetZ13(G4double Z)
void SetParticle(const G4ParticleDefinition *)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
const G4ElementVector * GetElementVector() const
static G4NistManager * Instance()
virtual G4double ComputeDMicroscopicCrossSection(G4double tkin, G4double Z, G4double gammaEnergy)
virtual G4double MinEnergyCut(const G4ParticleDefinition *, const G4MaterialCutsCouple *)
const G4ParticleDefinition * particle
const G4ThreeVector & GetMomentumDirection() const
Hep3Vector & rotateUz(const Hep3Vector &)
void SetProposedKineticEnergy(G4double proposedKinEnergy)
virtual ~G4MuBremsstrahlungModel()
std::vector< G4EmElementSelector * > * GetElementSelectors()
void SetProposedMomentumDirection(const G4ThreeVector &dir)
const G4double * GetAtomicNumDensityVector() const
G4double G4Log(G4double x)
virtual G4double MinPrimaryEnergy(const G4Material *, const G4ParticleDefinition *, G4double)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy)
G4double ComputMuBremLoss(G4double Z, G4double tkin, G4double cut)
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kineticEnergy, G4double Z, G4double A, G4double cutEnergy, G4double maxEnergy)
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
size_t GetNumberOfElements() const
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)