75 :
G4VEmModel(nam),fParticleChange(nullptr),fParticle(nullptr),
76 fCrossSectionHandler(nullptr),
77 fAtomDeexcitation(nullptr), fKineticEnergy1(0.*eV),
78 fCosThetaPrimary(1.0),fEnergySecondary(0.*eV),
79 fCosThetaSecondary(0.0),fTargetOscillator(-1),
80 fIsInitialised(false),fPIXEflag(false),fLocalTable(false)
82 fIntrinsicLowEnergyLimit = 100.0*eV;
83 fIntrinsicHighEnergyLimit = 100.0*GeV;
112 if (fCrossSectionHandler)
113 delete fCrossSectionHandler;
122 if (fVerboseLevel > 3)
123 G4cout <<
"Calling G4PenelopeIonisationModel::Initialise()" <<
G4endl;
127 if (!fAtomDeexcitation)
130 G4cout <<
"WARNING from G4PenelopeIonisationModel " <<
G4endl;
131 G4cout <<
"Atomic de-excitation module is not instantiated, so there will not be ";
133 G4cout <<
"Please make sure this is intended" <<
G4endl;
136 if (fAtomDeexcitation)
145 G4cout <<
"======================================================================" <<
G4endl;
146 G4cout <<
"The G4PenelopeIonisationModel is being used with the PIXE flag ON." <<
G4endl;
147 G4cout <<
"Atomic de-excitation will be produced statistically by the PIXE " <<
G4endl;
148 G4cout <<
"interface by using the shell cross section --> " << theModel <<
G4endl;
149 G4cout <<
"The built-in model procedure for atomic de-excitation is disabled. " <<
G4endl;
150 G4cout <<
"*Please be sure this is intended*, or disable PIXE by" <<
G4endl;
152 G4cout <<
"======================================================================" <<
G4endl;
155 SetParticle(particle);
163 fNBins = std::max(fNBins,(std::size_t)100);
166 if (fCrossSectionHandler)
168 delete fCrossSectionHandler;
169 fCrossSectionHandler = 0;
182 fCrossSectionHandler->
BuildXSTable(theMat,theCuts.at(i),particle,
186 if (fVerboseLevel > 2) {
187 G4cout <<
"Penelope Ionisation model v2008 is initialized " <<
G4endl
191 << fNBins <<
" bins."
199 fIsInitialised =
true;
209 if (fVerboseLevel > 3)
210 G4cout <<
"Calling G4PenelopeIonisationModel::InitialiseLocal()" <<
G4endl;
222 fCrossSectionHandler = theModel->fCrossSectionHandler;
225 fNBins = theModel->fNBins;
228 fVerboseLevel = theModel->fVerboseLevel;
259 if (fVerboseLevel > 3)
260 G4cout <<
"Calling CrossSectionPerVolume() of G4PenelopeIonisationModel" <<
G4endl;
269 if (!fCrossSectionHandler)
285 if (fVerboseLevel > 0)
289 ed <<
"Unable to retrieve the cross section table for " <<
291 " in " << material->
GetName() <<
", cut = " << cutEnergy/keV <<
" keV " <<
G4endl;
292 ed <<
"This can happen only in Unit Tests or via G4EmCalculator" <<
G4endl;
293 G4Exception(
"G4PenelopeIonisationModel::CrossSectionPerVolume()",
297 G4AutoLock lock(&PenelopeIonisationModelMutex);
298 fCrossSectionHandler->
BuildXSTable(material,cutEnergy,theParticle);
313 if (fVerboseLevel > 3)
314 G4cout <<
"Material " << material->
GetName() <<
" has " << atPerMol <<
315 "atoms per molecule" <<
G4endl;
319 moleculeDensity = atomDensity/atPerMol;
320 G4double crossPerVolume = crossPerMolecule*moleculeDensity;
322 if (fVerboseLevel > 2)
325 G4cout <<
"Mean free path for delta emission > " << cutEnergy/keV <<
" keV at " <<
326 energy/keV <<
" keV = " << (1./crossPerVolume)/mm <<
" mm" <<
G4endl;
329 G4cout <<
"Total free path for ionisation (no threshold) at " <<
330 energy/keV <<
" keV = " << (1./totalCross)/mm <<
" mm" <<
G4endl;
332 return crossPerVolume;
347 G4cout <<
"*** G4PenelopeIonisationModel -- WARNING ***" <<
G4endl;
348 G4cout <<
"Penelope Ionisation model v2008 does not calculate cross section _per atom_ " <<
G4endl;
349 G4cout <<
"so the result is always zero. For physics values, please invoke " <<
G4endl;
350 G4cout <<
"GetCrossSectionPerVolume() or GetMeanFreePath() via the G4EmCalculator" <<
G4endl;
376 if (fVerboseLevel > 3)
377 G4cout <<
"Calling ComputeDEDX() of G4PenelopeIonisationModel" <<
G4endl;
381 if (!fCrossSectionHandler)
396 if (fVerboseLevel > 0)
400 ed <<
"Unable to retrieve the cross section table for " <<
402 " in " << material->
GetName() <<
", cut = " << cutEnergy/keV <<
" keV " <<
G4endl;
403 ed <<
"This can happen only in Unit Tests or via G4EmCalculator" <<
G4endl;
404 G4Exception(
"G4PenelopeIonisationModel::ComputeDEDXPerVolume()",
408 G4AutoLock lock(&PenelopeIonisationModelMutex);
409 fCrossSectionHandler->
BuildXSTable(material,cutEnergy,theParticle);
427 moleculeDensity = atomDensity/atPerMol;
428 G4double sPowerPerVolume = sPowerPerMolecule*moleculeDensity;
430 if (fVerboseLevel > 2)
433 G4cout <<
"Stopping power < " << cutEnergy/keV <<
" keV at " <<
434 kineticEnergy/keV <<
" keV = " <<
435 sPowerPerVolume/(keV/mm) <<
" keV/mm" <<
G4endl;
437 return sPowerPerVolume;
445 return fIntrinsicLowEnergyLimit;
487 if (fVerboseLevel > 3)
488 G4cout <<
"Calling SamplingSecondaries() of G4PenelopeIonisationModel" <<
G4endl;
493 if (kineticEnergy0 <= fIntrinsicLowEnergyLimit)
507 fKineticEnergy1=kineticEnergy0;
508 fCosThetaPrimary=1.0;
509 fEnergySecondary=0.0;
510 fCosThetaSecondary=1.0;
511 fTargetOscillator = -1;
514 SampleFinalStateElectron(material,cutE,kineticEnergy0);
516 SampleFinalStatePositron(material,cutE,kineticEnergy0);
521 G4Exception(
"G4PenelopeIonisationModel::SamplingSecondaries()",
525 if (fEnergySecondary == 0)
return;
527 if (fVerboseLevel > 3)
529 G4cout <<
"G4PenelopeIonisationModel::SamplingSecondaries() for " <<
531 G4cout <<
"Final eKin = " << fKineticEnergy1 <<
" keV" <<
G4endl;
532 G4cout <<
"Final cosTheta = " << fCosThetaPrimary <<
G4endl;
533 G4cout <<
"Delta-ray eKin = " << fEnergySecondary <<
" keV" <<
G4endl;
534 G4cout <<
"Delta-ray cosTheta = " << fCosThetaSecondary <<
G4endl;
535 G4cout <<
"Oscillator: " << fTargetOscillator <<
G4endl;
539 G4double sint = std::sqrt(1. - fCosThetaPrimary*fCosThetaPrimary);
541 G4double dirx = sint * std::cos(phiPrimary);
542 G4double diry = sint * std::sin(phiPrimary);
546 electronDirection1.
rotateUz(particleDirection0);
548 if (fKineticEnergy1 > 0)
557 G4double ionEnergyInPenelopeDatabase =
558 (*theTable)[fTargetOscillator]->GetIonisationEnergy();
562 G4int shFlag = (*theTable)[fTargetOscillator]->GetShellFlag();
563 G4int Z = (
G4int) (*theTable)[fTargetOscillator]->GetParentZ();
571 if (
Z > 0 && shFlag<30)
573 shell = transitionManager->
Shell(
Z,shFlag-1);
581 fEnergySecondary += ionEnergyInPenelopeDatabase-bindingEnergy;
583 G4double localEnergyDeposit = bindingEnergy;
588 if (fEnergySecondary < 0)
594 localEnergyDeposit += fEnergySecondary;
595 fEnergySecondary = 0.0;
603 if (fAtomDeexcitation && !fPIXEflag && shell)
608 std::size_t nBefore = fvect->size();
610 std::size_t nAfter = fvect->size();
614 for (std::size_t j=nBefore;j<nAfter;++j)
616 G4double itsEnergy = ((*fvect)[j])->GetKineticEnergy();
617 if (itsEnergy < localEnergyDeposit)
619 localEnergyDeposit -= itsEnergy;
621 energyInFluorescence += itsEnergy;
623 energyInAuger += itsEnergy;
628 (*fvect)[j] =
nullptr;
636 if (fEnergySecondary > cutE)
639 G4double sinThetaE = std::sqrt(1.-fCosThetaSecondary*fCosThetaSecondary);
641 G4double xEl = sinThetaE * std::cos(phiEl);
642 G4double yEl = sinThetaE * std::sin(phiEl);
645 eDirection.
rotateUz(particleDirection0);
647 eDirection,fEnergySecondary) ;
648 fvect->push_back(electron);
652 localEnergyDeposit += fEnergySecondary;
653 fEnergySecondary = 0;
656 if (localEnergyDeposit < 0)
658 G4Exception(
"G4PenelopeIonisationModel::SampleSecondaries()",
659 "em2099",
JustWarning,
"WARNING: Negative local energy deposit");
660 localEnergyDeposit=0.;
664 if (fVerboseLevel > 1)
666 G4cout <<
"-----------------------------------------------------------" <<
G4endl;
667 G4cout <<
"Energy balance from G4PenelopeIonisation" <<
G4endl;
668 G4cout <<
"Incoming primary energy: " << kineticEnergy0/keV <<
" keV" <<
G4endl;
669 G4cout <<
"-----------------------------------------------------------" <<
G4endl;
670 G4cout <<
"Outgoing primary energy: " << fKineticEnergy1/keV <<
" keV" <<
G4endl;
671 G4cout <<
"Delta ray " << fEnergySecondary/keV <<
" keV" <<
G4endl;
672 if (energyInFluorescence)
673 G4cout <<
"Fluorescence x-rays: " << energyInFluorescence/keV <<
" keV" <<
G4endl;
675 G4cout <<
"Auger electrons: " << energyInAuger/keV <<
" keV" <<
G4endl;
676 G4cout <<
"Local energy deposit " << localEnergyDeposit/keV <<
" keV" <<
G4endl;
677 G4cout <<
"Total final state: " << (fEnergySecondary+energyInFluorescence+fKineticEnergy1+
678 localEnergyDeposit+energyInAuger)/keV <<
680 G4cout <<
"-----------------------------------------------------------" <<
G4endl;
683 if (fVerboseLevel > 0)
685 G4double energyDiff = std::fabs(fEnergySecondary+energyInFluorescence+fKineticEnergy1+
686 localEnergyDeposit+energyInAuger-kineticEnergy0);
687 if (energyDiff > 0.05*keV)
688 G4cout <<
"Warning from G4PenelopeIonisation: problem with energy conservation: " <<
689 (fEnergySecondary+energyInFluorescence+fKineticEnergy1+localEnergyDeposit+energyInAuger)/keV <<
690 " keV (final) vs. " <<
691 kineticEnergy0/keV <<
" keV (initial)" <<
G4endl;
697void G4PenelopeIonisationModel::SampleFinalStateElectron(
const G4Material* mat,
710 std::size_t numberOfOscillators = theTable->size();
718 fTargetOscillator =
G4int(numberOfOscillators-1);
721 for (std::size_t i=0;i<numberOfOscillators-1;++i)
727 fTargetOscillator = (
G4int) i;
732 if (fVerboseLevel > 3)
734 G4cout <<
"SampleFinalStateElectron: sampled oscillator #" <<
735 fTargetOscillator <<
"." <<
G4endl;
736 G4cout <<
"Ionisation energy: " <<
737 (*theTable)[fTargetOscillator]->GetIonisationEnergy()/eV <<
739 G4cout <<
"Resonance energy: : " <<
740 (*theTable)[fTargetOscillator]->GetResonanceEnergy()/eV <<
" eV "
744 G4double rb = kineticEnergy + 2.0*electron_mass_c2;
751 G4double resEne = (*theTable)[fTargetOscillator]->GetResonanceEnergy();
753 G4double ionEne = (*theTable)[fTargetOscillator]->GetIonisationEnergy();
754 G4double cutoffEne = (*theTable)[fTargetOscillator]->GetCutoffRecoilResonantEnergy();
762 if (resEne > cutEnergy && resEne < kineticEnergy)
764 cps = kineticEnergy*rb;
767 if (resEne > 1.0e-6*kineticEnergy)
769 G4double cpp = std::sqrt((kineticEnergy-resEne)*(kineticEnergy-resEne+2.0*electron_mass_c2));
770 QM = std::sqrt((cp-cpp)*(cp-cpp)+electron_mass_c2*electron_mass_c2)-electron_mass_c2;
774 QM = resEne*resEne/(beta2*2.0*electron_mass_c2);
775 QM *= (1.0-QM*0.5/electron_mass_c2);
779 XHDL =
G4Log(cutoffEne*(QM+2.0*electron_mass_c2)/(QM*(cutoffEne+2.0*electron_mass_c2)))
781 XHDT = XHDT0*invResEne;
800 G4double EE = kineticEnergy + ionEne;
802 G4double wcl = std::max(cutEnergy,cutoffEne);
809 XHC = (amol*(0.5-rcl)+1.0/rcl-rrl1+
810 (1.0-amol)*
G4Log(rcl*rrl1))/EE;
817 if (XHTOT < 1.e-14*barn)
819 fKineticEnergy1=kineticEnergy;
820 fCosThetaPrimary=1.0;
821 fEnergySecondary=0.0;
822 fCosThetaSecondary=1.0;
823 fTargetOscillator =
G4int(numberOfOscillators-1);
844 rk = rcl/(1.0-fb*(1.0-(rcl+rcl)));
846 rk = rcl + (fb-1.0)*(0.5-rcl)/ARCL;
849 G4double phi = 1.0+rkf*rkf-rkf+amol*(rk2+rkf);
856 fKineticEnergy1 = kineticEnergy - deltaE;
857 fCosThetaPrimary = std::sqrt(fKineticEnergy1*rb/(kineticEnergy*(rb-deltaE)));
859 fEnergySecondary = deltaE - ionEne;
860 fCosThetaSecondary= std::sqrt(deltaE*rb/(kineticEnergy*(deltaE+2.0*electron_mass_c2)));
861 if (fVerboseLevel > 3)
862 G4cout <<
"SampleFinalStateElectron: sampled close collision " <<
G4endl;
869 fKineticEnergy1 = kineticEnergy - deltaE;
873 G4double QS = QM/(1.0+QM*0.5/electron_mass_c2);
875 - (QS*0.5/electron_mass_c2));
876 G4double QTREV = Q*(Q+2.0*electron_mass_c2);
877 G4double cpps = fKineticEnergy1*(fKineticEnergy1+2.0*electron_mass_c2);
878 fCosThetaPrimary = (cpps+cps-QTREV)/(2.0*cp*std::sqrt(cpps));
879 if (fCosThetaPrimary > 1.)
880 fCosThetaPrimary = 1.0;
882 fEnergySecondary = deltaE - ionEne;
883 fCosThetaSecondary = 0.5*(deltaE*(kineticEnergy+rb-deltaE)+QTREV)/std::sqrt(cps*QTREV);
884 if (fCosThetaSecondary > 1.0)
885 fCosThetaSecondary = 1.0;
886 if (fVerboseLevel > 3)
887 G4cout <<
"SampleFinalStateElectron: sampled distant longitudinal collision " <<
G4endl;
892 fCosThetaPrimary = 1.0;
894 fEnergySecondary = deltaE - ionEne;
895 fCosThetaSecondary = 0.5;
896 if (fVerboseLevel > 3)
897 G4cout <<
"SampleFinalStateElectron: sampled distant transverse collision " <<
G4endl;
904void G4PenelopeIonisationModel::SampleFinalStatePositron(
const G4Material* mat,
917 std::size_t numberOfOscillators = theTable->size();
925 fTargetOscillator =
G4int(numberOfOscillators-1);
927 for (std::size_t i=0;i<numberOfOscillators-1;++i)
932 fTargetOscillator = (
G4int) i;
937 if (fVerboseLevel > 3)
939 G4cout <<
"SampleFinalStatePositron: sampled oscillator #" <<
940 fTargetOscillator <<
"." <<
G4endl;
941 G4cout <<
"Ionisation energy: " << (*theTable)[fTargetOscillator]->GetIonisationEnergy()/eV
943 G4cout <<
"Resonance energy: : " << (*theTable)[fTargetOscillator]->GetResonanceEnergy()/eV
948 G4double rb = kineticEnergy + 2.0*electron_mass_c2;
955 G4double bha1 = amol*(2.0*g12-1.0)/(gam2-1.0);
963 G4double resEne = (*theTable)[fTargetOscillator]->GetResonanceEnergy();
965 G4double ionEne = (*theTable)[fTargetOscillator]->GetIonisationEnergy();
966 G4double cutoffEne = (*theTable)[fTargetOscillator]->GetCutoffRecoilResonantEnergy();
975 if (resEne > cutEnergy && resEne < kineticEnergy)
977 cps = kineticEnergy*rb;
980 if (resEne > 1.0e-6*kineticEnergy)
982 G4double cpp = std::sqrt((kineticEnergy-resEne)*(kineticEnergy-resEne+2.0*electron_mass_c2));
983 QM = std::sqrt((cp-cpp)*(cp-cpp)+electron_mass_c2*electron_mass_c2)-electron_mass_c2;
987 QM = resEne*resEne/(beta2*2.0*electron_mass_c2);
988 QM *= (1.0-QM*0.5/electron_mass_c2);
992 XHDL =
G4Log(cutoffEne*(QM+2.0*electron_mass_c2)/(QM*(cutoffEne+2.0*electron_mass_c2)))
994 XHDT = XHDT0*invResEne;
1013 G4double wcl = std::max(cutEnergy,cutoffEne);
1019 XHC = ((1.0/rcl-1.0)+bha1*
G4Log(rcl)+bha2*rl1
1020 + (bha3/2.0)*(rcl*rcl-1.0)
1021 + (bha4/3.0)*(1.0-rcl*rcl*rcl))/kineticEnergy;
1025 G4double XHTOT = XHC + XHDL + XHDT;
1028 if (XHTOT < 1.e-14*barn)
1030 fKineticEnergy1=kineticEnergy;
1031 fCosThetaPrimary=1.0;
1032 fEnergySecondary=0.0;
1033 fCosThetaSecondary=1.0;
1034 fTargetOscillator =
G4int(numberOfOscillators-1);
1047 G4bool loopAgain =
false;
1052 G4double phi = 1.0-rk*(bha1-rk*(bha2-rk*(bha3-bha4*rk)));
1057 G4double deltaE = rk*kineticEnergy;
1058 fKineticEnergy1 = kineticEnergy - deltaE;
1059 fCosThetaPrimary = std::sqrt(fKineticEnergy1*rb/(kineticEnergy*(rb-deltaE)));
1061 fEnergySecondary = deltaE - ionEne;
1062 fCosThetaSecondary= std::sqrt(deltaE*rb/(kineticEnergy*(deltaE+2.0*electron_mass_c2)));
1063 if (fVerboseLevel > 3)
1064 G4cout <<
"SampleFinalStatePositron: sampled close collision " <<
G4endl;
1071 fKineticEnergy1 = kineticEnergy - deltaE;
1074 G4double QS = QM/(1.0+QM*0.5/electron_mass_c2);
1076 - (QS*0.5/electron_mass_c2));
1077 G4double QTREV = Q*(Q+2.0*electron_mass_c2);
1078 G4double cpps = fKineticEnergy1*(fKineticEnergy1+2.0*electron_mass_c2);
1079 fCosThetaPrimary = (cpps+cps-QTREV)/(2.0*cp*std::sqrt(cpps));
1080 if (fCosThetaPrimary > 1.)
1081 fCosThetaPrimary = 1.0;
1083 fEnergySecondary = deltaE - ionEne;
1084 fCosThetaSecondary = 0.5*(deltaE*(kineticEnergy+rb-deltaE)+QTREV)/std::sqrt(cps*QTREV);
1085 if (fCosThetaSecondary > 1.0)
1086 fCosThetaSecondary = 1.0;
1087 if (fVerboseLevel > 3)
1088 G4cout <<
"SampleFinalStatePositron: sampled distant longitudinal collision " <<
G4endl;
1093 fCosThetaPrimary = 1.0;
1095 fEnergySecondary = deltaE - ionEne;
1096 fCosThetaSecondary = 0.5;
1098 if (fVerboseLevel > 3)
1099 G4cout <<
"SampleFinalStatePositron: sampled distant transverse collision " <<
G4endl;
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Log(G4double x)
std::vector< G4PenelopeOscillator * > G4PenelopeOscillatorTable
#define G4MUTEX_INITIALIZER
G4GLOB_DLL std::ostream G4cout
Hep3Vector & rotateUz(const Hep3Vector &)
G4double BindingEnergy() const
G4AtomicShell * Shell(G4int Z, size_t shellIndex) const
static G4AtomicTransitionManager * Instance()
const G4ThreeVector & GetMomentumDirection() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
static G4Electron * Definition()
static G4Electron * Electron()
static G4EmParameters * Instance()
const G4String & PIXEElectronCrossSectionModel()
static G4Gamma * Definition()
static G4LossTableManager * Instance()
G4VAtomDeexcitation * AtomDeexcitation()
const G4Material * GetMaterial() const
G4double GetTotNbOfAtomsPerVolume() const
const G4String & GetName() const
void ProposeMomentumDirection(const G4ThreeVector &Pfinal)
void SetProposedKineticEnergy(G4double proposedKinEnergy)
const G4String & GetParticleName() const
G4double GetTotalCrossSection(G4double energy) const
Returns total cross section at the given energy.
G4double GetSoftStoppingPower(G4double energy) const
Returns the total stopping power due to soft collisions.
G4double GetHardCrossSection(G4double energy) const
Returns hard cross section at the given energy.
G4double GetNormalizedShellCrossSection(size_t shellID, G4double energy) const
Returns the hard cross section for the given shell (normalized to 1)
G4ParticleChangeForLoss * fParticleChange
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *) override
virtual ~G4PenelopeIonisationModel()
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double, G4double, G4double, G4double, G4double) override
G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy) override
G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *theParticle, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy=DBL_MAX) override
G4double MinEnergyCut(const G4ParticleDefinition *, const G4MaterialCutsCouple *) override
const G4ParticleDefinition * fParticle
G4PenelopeIonisationModel(const G4ParticleDefinition *p=nullptr, const G4String &processName="PenIoni")
G4double GetDensityCorrection(const G4Material *, const G4double energy) const
Returns the density coeection for the material at the given energy.
void BuildXSTable(const G4Material *, G4double cut, const G4ParticleDefinition *, G4bool isMaster=true)
This can be inkoved only by the master.
const G4PenelopeCrossSection * GetCrossSectionTableForCouple(const G4ParticleDefinition *, const G4Material *, const G4double cut) const
void SetVerboseLevel(G4int vl)
Setter for the verbosity level.
G4double GetAtomsPerMolecule(const G4Material *)
Returns the total number of atoms per molecule.
static G4PenelopeOscillatorManager * GetOscillatorManager()
G4PenelopeOscillatorTable * GetOscillatorTableIonisation(const G4Material *)
static G4Positron * Positron()
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
std::size_t GetTableSize() const
static G4ProductionCutsTable * GetProductionCutsTable()
G4bool CheckDeexcitationActiveRegion(G4int coupleIndex)
void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4int coupleIndex)
G4bool IsPIXEActive() const
void SetHighEnergyLimit(G4double)
G4double LowEnergyLimit() const
G4double HighEnergyLimit() const
virtual void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
void SetDeexcitationFlag(G4bool val)
G4ParticleChangeForLoss * GetParticleChangeForLoss()
void ProposeLocalEnergyDeposit(G4double anEnergyPart)