384 if (verboseLevel > 3)
385 G4cout <<
"Calling SampleSecondaries() of G4MuElecInelasticModel" <<
G4endl;
395 G4String nameLocal2 = particleName ;
402 nameLocal2 =
"proton" ;
405 std::map< G4String,G4double,std::less<G4String> >::iterator pos1;
406 pos1 = lowEnergyLimit.find(nameLocal2);
408 if (pos1 != lowEnergyLimit.end())
410 lowLim = pos1->second;
413 std::map< G4String,G4double,std::less<G4String> >::iterator pos2;
414 pos2 = highEnergyLimit.find(nameLocal2);
416 if (pos2 != highEnergyLimit.end())
418 highLim = pos2->second;
421 if (k >= lowLim && k < highLim)
424 G4double totalEnergy = ekin + particleMass;
425 G4double pSquare = ekin * (totalEnergy + particleMass);
426 G4double totalMomentum = std::sqrt(pSquare);
428 G4int Shell = RandomSelect(k,nameLocal2);
430 if (verboseLevel > 3)
433 G4cout <<
"Shell: " << Shell <<
", energy: " << bindingEnergy/
eV <<
G4endl;
438 G4int secNumberInit = 0;
439 G4int secNumberFinal = 0;
441 if(fAtomDeexcitation && Shell > 2) {
455 secNumberInit = fvect->size();
457 secNumberFinal = fvect->size();
460 G4double secondaryKinetic = RandomizeEjectedElectronEnergy(PartDef,k,Shell);
462 if (verboseLevel > 3)
465 G4cout <<
"Shell: " << Shell <<
" Kin. energy (eV)=" << k/
eV
466 <<
" Sec. energy (eV)=" << secondaryKinetic/
eV <<
G4endl;
471 RandomizeEjectedElectronDirection(PartDef, k, secondaryKinetic, cosTheta, phi);
473 G4double sinTheta = std::sqrt(1.-cosTheta*cosTheta);
474 G4double dirX = sinTheta*std::cos(phi);
475 G4double dirY = sinTheta*std::sin(phi);
478 deltaDirection.rotateUz(primaryDirection);
484 G4double finalPx = totalMomentum*primaryDirection.
x() - deltaTotalMomentum*deltaDirection.x();
485 G4double finalPy = totalMomentum*primaryDirection.
y() - deltaTotalMomentum*deltaDirection.y();
486 G4double finalPz = totalMomentum*primaryDirection.
z() - deltaTotalMomentum*deltaDirection.z();
487 G4double finalMomentum = std::sqrt(finalPx*finalPx + finalPy*finalPy + finalPz*finalPz);
488 finalPx /= finalMomentum;
489 finalPy /= finalMomentum;
490 finalPz /= finalMomentum;
493 direction.
set(finalPx,finalPy,finalPz);
501 for (
G4int j=secNumberInit; j < secNumberFinal; j++) {
502 deexSecEnergy = deexSecEnergy + (*fvect)[j]->GetKineticEnergy();}
508 fvect->push_back(dp);
void set(double x, double y, double z)
static constexpr double proton_mass_c2
G4double GetKineticEnergy() const
G4ParticleChangeForGamma * fParticleChangeForGamma
static G4Proton * ProtonDefinition()
G4ParticleDefinition * GetDefinition() const
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
const G4String & GetParticleName() const
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
static constexpr double electron_mass_c2
virtual const G4AtomicShell * GetAtomicShell(G4int Z, G4AtomicShellEnumerator shell)=0
G4GLOB_DLL std::ostream G4cout
const G4ThreeVector & GetMomentumDirection() const
static constexpr double eV
G4double GetPDGMass() const
static G4Electron * Electron()
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4double Energy(G4int level)
void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4int coupleIndex)
G4double bindingEnergy(G4int A, G4int Z)