85 const G4double G4MuBremsstrahlungModel::xgi[] = 
 
   86   {0.03377,0.16940,0.38069,0.61931,0.83060,0.96623};
 
   87 const G4double G4MuBremsstrahlungModel::wgi[] = 
 
   88   {0.08566,0.18038,0.23396,0.23396,0.18038,0.08566};
 
   89 G4double G4MuBremsstrahlungModel::fDN[] = {0.0};
 
  100     fParticleChange(nullptr),
 
  101     lowestKinEnergy(1.0*
GeV),
 
  102     minThreshold(0.9*
keV)
 
  107   lowestKinEnergy = 1.*
GeV;  
 
  112     for(
G4int i=1; i<93; ++i) {
 
  116         fDN[i] /= std::pow(dn, 1./
G4double(i));
 
  143   return std::max(lowestKinEnergy,cut);
 
  180   if (kineticEnergy <= lowestKinEnergy) { 
return dedx; }
 
  184   if(cut < minThreshold) { cut = minThreshold; }
 
  187   const G4double* theAtomicNumDensityVector =
 
  196     dedx += loss*theAtomicNumDensityVector[i];
 
  199   if(dedx < 0.) dedx = 0.;
 
  210   static const G4int    k2=5;
 
  218   if(vcut>vmax) { bbb = vmax; }
 
  220   if(kkk < 1) { kkk = 1; }
 
  225   for(
G4int l=0; l<kkk; l++)
 
  227     for(
G4int i=0; i<6; i++)
 
  229       G4double ep = (aa + xgi[i]*hhh)*totalEnergy;
 
  235   loss *=hhh*totalEnergy ;
 
  249   static const G4int    k2  = 4;
 
  252   if(cut >= tkin) 
return cross;
 
  260   if(kkk < 1) { kkk = 1; }
 
  266   for(
G4int l=0; l<kkk; l++)
 
  268     for(
G4int i=0; i<6; i++)
 
  293   if(gammaEnergy > tkin) { 
return dxsection; }
 
  297   G4double delta = 0.5*mass*mass*v/(E-gammaEnergy) ;
 
  301   if(iz < 1) { iz = 1; }
 
  302   else if(iz > 92) { iz = 92; }
 
  320               (mass+delta*(dnstar*sqrte-2.))) ;
 
  321   if(fn <0.) { fn = 0.; }
 
  325   if(gammaEnergy<epmax1)
 
  333   dxsection = 
coeff*(1.-v*(1. - 0.75*
v))*Z*(fn*Z + 
fe)/gammaEnergy;
 
  348   if (kineticEnergy <= lowestKinEnergy) 
return cross;
 
  351   if(cut < minThreshold) cut = minThreshold;
 
  352   if (cut >= tmax) 
return cross;
 
  355   if(tmax < kineticEnergy) {
 
  364                               std::vector<G4DynamicParticle*>* vdp,
 
  374   if(tmin < minThreshold) tmin = minThreshold;
 
  375   if(tmin >= tmax) 
return;
 
  386   G4double totalMomentum = sqrt(kineticEnergy*(kineticEnergy + 2.0*mass));
 
  417   G4double dirx  = sint*cos(phi), diry = sint*sin(phi), dirz = cos(theta) ;
 
  422   partDirection *= totalMomentum;
 
  423   partDirection -= gEnergy*gDirection;
 
  424   partDirection = partDirection.
unit();
 
  427   kineticEnergy -= gEnergy;
 
  434   vdp->push_back(aGamma);
 
G4ParticleChangeForLoss * GetParticleChangeForLoss()
 
std::vector< G4Element * > G4ElementVector
 
G4double GetKineticEnergy() const 
 
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
 
G4double HighEnergyLimit() const 
 
G4double ComputeMicroscopicCrossSection(G4double tkin, G4double Z, G4double cut)
 
G4double GetA27(G4int Z) const 
 
virtual G4double MinEnergyCut(const G4ParticleDefinition *, const G4MaterialCutsCouple *) override
 
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy) override
 
void SetParticle(const G4ParticleDefinition *)
 
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
 
const G4ElementVector * GetElementVector() const 
 
static G4NistManager * Instance()
 
virtual G4double ComputeDMicroscopicCrossSection(G4double tkin, G4double Z, G4double gammaEnergy)
 
static constexpr double twopi
 
G4double GetZ13(G4double Z) const 
 
static const G4double sqrte
 
const G4ParticleDefinition * particle
 
const G4ThreeVector & GetMomentumDirection() const 
 
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kineticEnergy, G4double Z, G4double A, G4double cutEnergy, G4double maxEnergy) override
 
static const G4double ak1
 
Hep3Vector & rotateUz(const Hep3Vector &)
 
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
 
void SetProposedKineticEnergy(G4double proposedKinEnergy)
 
virtual ~G4MuBremsstrahlungModel()
 
virtual G4double MinPrimaryEnergy(const G4Material *, const G4ParticleDefinition *, G4double) override
 
std::vector< G4EmElementSelector * > * GetElementSelectors()
 
void SetProposedMomentumDirection(const G4ThreeVector &dir)
 
const G4double * GetAtomicNumDensityVector() const 
 
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel) override
 
G4double G4Log(G4double x)
 
G4double G4Exp(G4double initial_x)
Exponential Function double precision. 
 
G4double ComputMuBremLoss(G4double Z, G4double tkin, G4double cut)
 
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
 
G4MuBremsstrahlungModel(const G4ParticleDefinition *p=nullptr, const G4String &nam="MuBrem")
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
T min(const T t1, const T t2)
brief Return the smallest of the two arguments 
 
static constexpr double GeV
 
static constexpr double MeV
 
size_t GetNumberOfElements() const 
 
static constexpr double keV
 
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)