170 secondaryParticle(nullptr),
172 idxSCoffRegions(nullptr),
174 theDEDXTable(nullptr),
175 theDEDXSubTable(nullptr),
176 theDEDXunRestrictedTable(nullptr),
177 theIonisationTable(nullptr),
178 theIonisationSubTable(nullptr),
179 theRangeTableForLoss(nullptr),
180 theCSDARangeTable(nullptr),
181 theSecondaryRangeTable(nullptr),
182 theInverseRangeTable(nullptr),
183 theLambdaTable(nullptr),
184 theSubLambdaTable(nullptr),
185 theDensityFactor(nullptr),
186 theDensityIdx(nullptr),
187 baseParticle(nullptr),
188 lossFluctuationFlag(true),
190 tablesAreBuilt(false),
195 useDeexcitation(false),
197 currentCouple(nullptr),
411 for(
auto & em :
emModels) {
if(em == ptr) {
return; } }
412 emModels.push_back(ptr);
442 G4cout <<
"G4VEnergyLossProcess::PreparePhysicsTable for "
466 if(pname !=
"deuteron" && pname !=
"triton" &&
467 pname !=
"alpha+" && pname !=
"helium" &&
468 pname !=
"hydrogen") {
478 size_t n = v->
size();
479 for(
size_t j=0; j<
n; ++j) {
480 if((*v)[j] ==
this) {
494 G4cout <<
"### G4VEnergyLossProcess::PreparePhysicsTable()"
495 <<
" interrupted for "
550 if(initialMass <
MeV) {
632 for(
G4int i=0; i<nmod; ++i) {
652 for (
size_t j=0; j<
n; ++j) {
670 G4cout <<
"G4VEnergyLossProcess::PrepearPhysicsTable() is done "
672 <<
" isIon= " <<
isIon;
680 G4cout <<
" SubCutoff Regime is ON for regions: " <<
G4endl;
694 G4cout <<
"### G4VEnergyLossProcess::BuildPhysicsTable() for "
741 for(
G4int i=0; i<numberOfModels; ++i) {
757 num ==
"e+" || num ==
"mu+" ||
758 num ==
"mu-" || num ==
"proton"||
759 num ==
"pi+" || num ==
"pi-" ||
760 num ==
"kaon+" || num ==
"kaon-" ||
761 num ==
"alpha" || num ==
"anti_proton" ||
762 num ==
"GenericIon"|| num ==
"alpha++" ||
789 G4cout <<
"### G4VEnergyLossProcess::BuildPhysicsTable() done for "
802 G4cout <<
"G4VEnergyLossProcess::BuildDEDXTable() of type " << tType
820 G4cout <<
"G4VEnergyLossProcess::BuildDEDXTable WARNING: wrong type "
830 G4cout << numOfCouples <<
" materials"
832 <<
" maxKinEnergy= " << emax
834 <<
" EmTableType= " << tType
835 <<
" table= " << table <<
" " <<
this
838 if(!table) {
return table; }
845 for(
size_t i=0; i<numOfCouples; ++i) {
848 G4cout <<
"G4VEnergyLossProcess::BuildDEDXVector Idx= " << i
849 <<
" flagTable= " << table->
GetFlag(i)
857 if((*table)[i]) {
delete (*table)[i]; }
875 G4cout <<
"G4VEnergyLossProcess::BuildDEDXTable(): table is built for "
896 G4cout <<
"G4VEnergyLossProcess::BuildLambdaTable WARNING: wrong type "
901 G4cout <<
"G4VEnergyLossProcess::BuildLambdaTable() of type "
902 << tType <<
" for process "
905 <<
" EmTableType= " << tType
906 <<
" table= " << table
909 if(!table) {
return table;}
924 for(
size_t i=0; i<numOfCouples; ++i) {
942 if(emax <= emin) { emax = 2*emin; }
957 G4cout <<
"Lambda table is built for "
970 out << std::setprecision(6);
972 if (endOfLine !=
G4String(
"<br>\n")) {
976 <<
" dE/dx and range tables from "
979 <<
" in " <<
nBins <<
" bins" << endOfLine
980 <<
" Lambda tables from threshold to "
983 <<
" bins per decade, spline: "
997 out <<
" CSDA range table up"
999 <<
" in " <<
nBinsCSDA <<
" bins" << endOfLine;
1003 <<
" regions" << endOfLine;
1006 out <<
" DEDXTable address= " <<
theDEDXTable << endOfLine;
1008 out <<
"non restricted DEDXTable address= "
1011 out << (*theDEDXunRestrictedTable) << endOfLine;
1014 out << (*theDEDXSubTable) << endOfLine;
1019 out << (*theCSDARangeTable) << endOfLine;
1024 out << (*theRangeTableForLoss) << endOfLine;
1029 out << (*theInverseRangeTable) << endOfLine;
1033 out << (*theLambdaTable) << endOfLine;
1038 out << (*theSubLambdaTable) << endOfLine;
1050 reg = regionStore->
GetRegion(
"DefaultRegionForTheWorld",
false);
1218 G4cout <<
"G4VEnergyLossProcess::PostStepGetPhysicalInteractionLength ";
1222 <<
" Ekin(MeV)= " << preStepKinEnergy/
MeV
1226 <<
"InteractionLength= " << x/
cm <<
"[cm] " <<
G4endl;
1351 if(preSafety < rcut) {
1356 if(preSafety < rcut) { yes =
true; }
1360 G4double postSafety = preSafety - length;
1361 if(postSafety < rcut) {
1364 if(postSafety < rcut) { yes =
true; }
1396 eloss, eadd, length);
1397 if(eloss < 0.0) { eloss = 0.5*eloss_before; }
1438 if(eloss >= esecfluo) {
1510 for(
G4int i=0; i<
n; ++i) {
1533 G4double subcut = (*theSubCuts)[idx];
1535 if(cut <= subcut) {
return esec; }
1541 *(((*theSubLambdaTable)[(*theDensityIdx)[idx]])->Value(e,
idxSubLambda));
1545 if(length*cross <
perMillion) {
return esec; }
1566 fragment += del/length;
1567 if (fragment > 1.0) {
break; }
1576 std::vector<G4DynamicParticle*>::iterator it;
1582 tracks.push_back(t);
1598 }
while (fragment <= 1.0);
1699 for (
G4int i=0; i<num; ++i) {
1783 G4cout <<
"Physics tables are stored for "
1786 <<
" in the directory <" << directory
1790 G4cout <<
"Fail to store Physics Tables for "
1793 <<
" in the directory <" << directory
1811 G4cout <<
"G4VEnergyLossProcess::RetrievePhysicsTable() for "
1840 "InverseRange",fpi))
1856 if(!fpi) yes =
false;
1858 "SubIonisation",yes))
1895 G4bool isRetrieved =
false;
1903 for(
size_t i=0; i<
n; ++i) {
1904 if((*aTable)[i]) { (*aTable)[i]->SetSpline(
true); }
1909 <<
" is Retrieved from <" << filename <<
">"
1915 if(mandatory && !isRetrieved) {
1919 << filename <<
"> is not Retrieved"
1962 if(cross < 0.0) { cross = 0.0; }
2040 <<
" is added to the list of collaborative processes of "
2062 for (
size_t i=0; i<
n; ++i) {
2068 pv = (*p)[(*theDensityIdx)[i]];
2119 for (
size_t i=0; i<
n; ++i) {
2124 pv = (*p)[(*theDensityIdx)[i]];
2125 if(pv) { rmax = pv->
Value(emax,
idxCSDA)/(*theDensityFactor)[i]; }
2140 G4cout <<
"### Set Range table " << p
2152 G4cout <<
"### Set SecondaryRange table " << p
2164 G4cout <<
"### Set InverseRange table " << p
2175 G4cout <<
"### Set Lambda table " << p
2195 for (i=0; i<
n; ++i) {
2196 pv = (*theLambdaTable)[i];
2202 for (
size_t j=0; j<nb; ++j) {
2215 <<
" Max CS at i= " << i <<
" emax(MeV)= " << emax/
MeV
2216 <<
" lambda= " << smax <<
G4endl;
2221 for (i=0; i<
n; ++i) {
2222 pv = (*theLambdaTable)[i];
2224 G4int j = (*theDensityIdx)[i];
2238 G4cout <<
"### Set SebLambda table " << p
2262 G4cout <<
"### SetCrossSectionBiasingFactor: for "
2264 <<
" biasFactor= " << f <<
" weightFlag= " << flag
2279 G4cout <<
"### ActivateForcedInteraction: for "
2281 <<
" length(mm)= " << length/
mm
2282 <<
" in G4Region <" << region
2283 <<
"> weightFlag= " << flag
2297 if (0.0 <= factor) {
2306 G4cout <<
"### ActivateSecondaryBiasing: for "
2308 <<
" factor= " << factor
2309 <<
" in G4Region <" << region
2310 <<
"> energyLimit(MeV)= " << energyLimit/
MeV
2329 if(0.0 < val && val < 1.0) {
2342 if(0.0 < v1 && 0.0 < v2 && v2 < 1.
e+50) {
2345 }
else if(v1 <= 0.0) {
2364 if(2 < n && n < 1000000000) {
2398 G4String ss =
"G4VEnergyLossProcess::" + tit;
2400 ed <<
"Parameter is out of range: " << val
2401 <<
" it will have no effect!\n" <<
" Process "
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
virtual G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii) override
void SetDEDXTable(G4PhysicsTable *p, G4EmTableType tType)
const std::vector< G4double > * theDensityFactor
G4double Energy(size_t index) const
void SetAngularGeneratorFlag(G4bool)
void ResetForcedInteraction()
static void SetPhysicsVector(G4PhysicsTable *physTable, size_t idx, G4PhysicsVector *vec)
G4double GetKineticEnergy() const
const G4Element * GetCurrentElement() const
void AddSecondary(G4Track *aSecondary)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4PhysicsTable * theCSDARangeTable
G4VEmFluctuationModel * fluctModel
std::vector< G4double > theCrossSectionMax
G4bool IsActive(G4double kinEnergy)
void FillDEDXVector(G4PhysicsVector *, const G4MaterialCutsCouple *, G4EmTableType t=fRestricted)
std::vector< G4DynamicParticle * > secParticles
void SetMinKinEnergy(G4double e)
G4PhysicsTable * DEDXTable() const
const G4ParticleDefinition * theElectron
void AddCollaborativeProcess(G4VEnergyLossProcess *)
void SetStepFunction(G4double v1, G4double v2, G4bool lock=true)
G4SafetyHelper * GetSafetyHelper() const
G4PhysicsTable * BuildDEDXTable(G4EmTableType tType=fRestricted)
G4int NumberOfBinsPerDecade() const
std::ostringstream G4ExceptionDescription
G4PhysicsTable * theLambdaTable
void SetEmModel(G4VEmModel *, G4int index=0)
std::vector< G4double > theRangeAtMaxEnergy
static G4PhysicsTable * PreparePhysicsTable(G4PhysicsTable *physTable)
static G4ParticleTable * GetParticleTable()
G4VAtomDeexcitation * AtomDeexcitation()
void ActivateSecondaryBiasing(const G4String ®ion, G4double factor, G4double energyLimit)
static constexpr double MeV
G4double preStepRangeEnergy
G4double preStepScaledEnergy
void SetWeight(G4double aValue)
void SetHighEnergyLimit(G4double)
G4bool UseAngularGeneratorForIonisation() const
G4PhysicsTable * IonisationTableForSubsec() const
G4bool lossFluctuationFlag
G4int NumberOfModels() const
G4StepPoint * GetPreStepPoint() const
const G4DataVector * Initialise(const G4ParticleDefinition *part, const G4ParticleDefinition *secPart, G4double minSubRange, G4int verb)
size_t idxDEDXunRestricted
static constexpr double keV
void AlongStepDeexcitation(std::vector< G4Track * > &tracks, const G4Step &step, G4double &eLoss, G4int coupleIndex)
static constexpr double mm
G4double MaxSecondaryKinEnergy(const G4DynamicParticle *dynParticle)
void ProposeWeight(G4double finalWeight)
G4PhysicsTable * theIonisationTable
const G4String & GetName() const
void SetCreatorModelIndex(G4int idx)
const std::vector< G4int > * GetCoupleIndexes()
void InitializeForAlongStep(const G4Track &)
G4PhysicsTable * theDEDXTable
G4PhysicsTable * theRangeTableForLoss
const G4VProcess * GetMasterProcess() const
void DefineRegParamForLoss(G4VEnergyLossProcess *, G4bool isElectron) const
void BuildPhysicsTable(const G4ParticleDefinition *aParticle)
G4double SampleSubCutSecondaries(std::vector< G4Track * > &, const G4Step &, G4VEmModel *model, G4int matIdx)
G4double MaxKinEnergy() const
G4bool BuildCSDARange() const
const G4DataVector * SubCutoff() const
std::vector< G4double > theEnergyOfCrossSectionMax
G4PhysicsTable * RangeTableForLoss() const
void PreparePhysicsTable(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p, G4bool theMaster)
const G4String & GetParticleName() const
void ActivateForcedInteraction(G4double length=0.0, const G4String &r="")
std::vector< G4double > theDEDXAtMaxEnergy
G4double GetScaledRangeForScaledEnergy(G4double scaledKinEnergy)
const G4String & GetParticleType() const
const G4ParticleDefinition * thePositron
const G4TouchableHandle & GetTouchableHandle() const
virtual void StartTracking(G4Track *) override
G4double GetPDGCharge() const
static constexpr double perMillion
const G4DataVector * theSubCuts
void SetSecondaryWeightByProcess(G4bool)
G4bool GetFlag(size_t idx) const
G4bool UseCutAsFinalRange() const
virtual void PreparePhysicsTable(const G4ParticleDefinition &) override
G4bool StorePhysicsTable(const G4String &filename, G4bool ascii=false)
G4double ApplySecondaryBiasing(std::vector< G4DynamicParticle * > &, const G4Track &track, G4VEmModel *currentModel, G4ParticleChangeForGamma *pParticleChange, G4double &eloss, G4int coupleIdx, G4double tcut, G4double safety=0.0)
void ActivateForcedInteraction(G4double length, const G4String ®ion, G4bool flag=true)
const G4ParticleDefinition * theGenericIon
void SetSubLambdaTable(G4PhysicsTable *p)
static const G4double emax
const G4ParticleDefinition * GetParticleDefinition() const
G4PhysicsTable * SubLambdaTable() const
G4double Value(G4double theEnergy, size_t &lastidx) const
G4double condition(const G4ErrorSymMatrix &m)
G4bool ForcedInteractionRegion(G4int coupleIdx)
const std::vector< G4int > * theDensityIdx
G4PhysicsTable * theInverseRangeTable
void SetMasterThread(G4bool val)
void SetDEDXBinning(G4int nbins)
void SetProposedCharge(G4double theCharge)
G4bool SecondaryBiasingRegion(G4int coupleIdx)
G4ParticleDefinition * GetDefinition() const
std::vector< G4VEmModel * > emModels
G4VEmModel * GetModel(G4int idx, G4bool ver=false)
G4double GetPDGMass() const
void DumpModelList(std::ostream &out, G4int verb)
G4ProcessVector * GetAlongStepProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
G4PhysicsTable * theDEDXSubTable
G4EmParameters * theParameters
G4double G4Log(G4double x)
void Initialise(const G4ParticleDefinition &part, const G4String &procName, G4int verbose)
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const
G4double GetProductionCut(G4int index) const
virtual G4double Dispersion(const G4Material *, const G4DynamicParticle *, G4double tmax, G4double length)=0
std::vector< G4Track * > scTracks
const G4ParticleDefinition * theGamma
G4double currentInteractionLength
const G4MaterialCutsCouple * currentCouple
static constexpr double proton_mass_c2
G4double GetLocalEnergyDeposit() const
void SetLowestEnergyLimit(G4double)
const G4String & GetName() const
void SetVerboseLevel(G4int value)
void SetRangeTableForLoss(G4PhysicsTable *p)
static constexpr double TeV
G4int NumberOfModels() const
void Register(G4VEnergyLossProcess *p)
G4double LinearLossLimit() const
G4double MaxEnergyForCSDARange() const
G4StepStatus GetStepStatus() const
G4EmBiasingManager * biasManager
virtual ~G4VEnergyLossProcess()
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *, const G4Region *)
G4double GetStepLimit(G4int coupleIdx, G4double previousStep)
G4VEmModel * GetModelByIndex(G4int idx=0, G4bool ver=false) const
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
void DefineMaterial(const G4MaterialCutsCouple *couple)
G4VParticleChange * pParticleChange
void SetIonisation(G4bool val)
virtual G4double SampleFluctuations(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmax, G4double length, G4double meanLoss)=0
virtual G4double GetContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety) override
G4PhysicsTable * InverseRangeTable() const
G4double MinSubRange() const
void SetCSDARangeTable(G4PhysicsTable *pRange)
G4double GetStepLength() const
G4double GetSubDEDXForScaledEnergy(G4double scaledKinEnergy)
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *fluc=0, const G4Region *region=nullptr)
G4VEmFluctuationModel * GetModelOfFluctuations()
static constexpr double electron_mass_c2
G4double ScaledKinEnergyForLoss(G4double range)
const G4ThreeVector & GetPosition() const
G4double LowestMuHadEnergy() const
const G4DataVector * theCuts
virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition *, const G4ParticleDefinition *)=0
void InitialiseBaseMaterials(G4PhysicsTable *table)
virtual G4VParticleChange * AlongStepDoIt(const G4Track &, const G4Step &) override
static constexpr double MeV
G4PhysicsTable * theIonisationSubTable
G4double GetGlobalTime() const
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length)
const std::vector< G4double > * GetDensityFactors()
void FillSecondDerivatives()
G4int WorkerVerbose() const
G4double GetProposedKineticEnergy() const
G4PhysicsTable * theDEDXunRestrictedTable
void SetTouchableHandle(const G4TouchableHandle &apValue)
void SetLambdaTable(G4PhysicsTable *p)
G4PhysicsTable * BuildLambdaTable(G4EmTableType tType=fRestricted)
G4PhysicsVector * LambdaPhysicsVector(const G4MaterialCutsCouple *, G4double cut)
G4Track * GetTrack() const
const G4String & GetProcessName() const
const G4ThreeVector & GetPosition() const
G4GPILSelection aGPILSelection
G4double LambdaFactor() const
G4VSubCutProducer * SubCutProducer()
void DeRegister(G4VEnergyLossProcess *p)
void UpdateEmModel(const G4String &model_name, G4double emin, G4double emax)
void SetMaxKinEnergy(G4double e)
G4EmModelManager * modelManager
static G4Positron * Positron()
G4double GetGlobalTime() const
void LocalPhysicsTables(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
G4PhysicsTable * DEDXTableForSubsec() const
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &) override
G4StepPoint * GetPostStepPoint() const
G4ParticleChangeForLoss fParticleChange
G4Material * GetMaterial() const
const G4Material * currentMaterial
static G4Electron * Electron()
size_t GetTableSize() const
G4LossTableManager * lManager
const G4ParticleDefinition * secondaryParticle
G4LossTableBuilder * GetTableBuilder()
G4double MinKinEnergy() const
void ComputeLambdaForScaledEnergy(G4double scaledKinEnergy)
G4SafetyHelper * safetyHelper
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety, G4GPILSelection *selection) override
std::vector< G4VEnergyLossProcess * > scProcesses
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
G4double theInitialNumberOfInteractionLength
static G4TransportationManager * GetTransportationManager()
G4VAtomDeexcitation * atomDeexcitation
G4bool StoreTable(const G4ParticleDefinition *p, G4PhysicsTable *, G4bool ascii, const G4String &directory, const G4String &tname)
static G4ProductionCutsTable * GetProductionCutsTable()
virtual G4double GetParticleCharge(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
void SetSecondaryRangeTable(G4PhysicsTable *p)
G4PhysicsTable * theSubLambdaTable
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
void PrintWarning(G4String, G4double val)
G4double GetDEDXForScaledEnergy(G4double scaledKinEnergy)
G4bool ExistPhysicsTable(const G4String &fileName) const
const G4ParticleDefinition * particle
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
G4bool IsIonisationProcess() const
virtual G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false) override
G4bool IsPIXEActive() const
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition *, const G4Material *, G4double cut)
virtual G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
G4double ContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety)
G4PhysicsTable * SecondaryRangeTable() const
static G4RegionStore * GetInstance()
G4VSubCutProducer * subcutProducer
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin=0.0, G4double tmax=DBL_MAX)=0
void SetParticleChange(G4VParticleChange *, G4VEmFluctuationModel *f=nullptr)
G4ProcessVector * GetAtRestProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
G4ProcessManager * GetProcessManager() const
void ActivateSecondaryBiasing(const G4String ®ion, G4double factor, G4double energyLimit)
G4VEmModel * EmModel(size_t index=0) const
void SelectModel(G4double kinEnergy)
G4PhysicsTable * LambdaTable() const
void InitializeForPostStep(const G4Track &)
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4bool RetrieveTable(const G4ParticleDefinition *p, G4PhysicsTable *, G4bool ascii, const G4String &directory, const G4String &tname, G4bool mandatory)
G4double GetSafety() const
G4TrackStatus GetTrackStatus() const
void FillSecondariesAlongStep(G4double &eloss, G4double &weight)
G4VEnergyLossProcess(const G4String &name="EnergyLoss", G4ProcessType type=fElectromagnetic)
size_t currentCoupleIndex
G4double CrossSectionPerVolume(G4double kineticEnergy, const G4MaterialCutsCouple *couple)
static constexpr double mm
virtual void SampleSecondaries(const G4Step &step, std::vector< G4Track * > &tracks, G4double &eloss, G4double cut) const =0
void FillLambdaVector(G4PhysicsVector *, const G4MaterialCutsCouple *, G4bool startFromNull=true, G4EmTableType t=fRestricted)
G4double GetKineticEnergy() const
virtual void BuildPhysicsTable(const G4ParticleDefinition &) override
static constexpr double cm
G4GLOB_DLL std::ostream G4cout
std::vector< const G4Region * > scoffRegions
static G4LossTableManager * Instance()
G4PhysicsTable * IonisationTable() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
G4ProductionCuts * GetProductionCuts() const
G4PhysicsTable * CSDARangeTable() const
const G4Element * GetCurrentElement() const
G4double ComputeSafety(const G4ThreeVector &pGlobalPoint, G4double maxRadius=DBL_MAX)
const G4Material * GetMaterial() const
void SetInverseRangeTable(G4PhysicsTable *p)
static const G4double reg
G4PhysicsTable * DEDXunRestrictedTable() const
G4bool GetFlag(size_t i) const
G4double theNumberOfInteractionLengthLeft
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
void SetCrossSectionBiasingFactor(G4double f, G4bool flag=true)
virtual G4double ChargeSquareRatio(const G4Track &)
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
G4double MeanFreePath(const G4Track &track)
G4bool LossFluctuation() const
G4double preStepKinEnergy
void StreamInfo(std::ostream &out, const G4ParticleDefinition &part, G4String endOfLine=G4String("\n")) const
virtual void StreamProcessInfo(std::ostream &, G4String) const
G4double HighEnergyLimit() const
const XML_Char XML_Content * model
void ProposeTrackStatus(G4TrackStatus status)
G4double GetDEDXDispersion(const G4MaterialCutsCouple *couple, const G4DynamicParticle *dp, G4double length)
static constexpr double GeV
G4double GetLambdaForScaledEnergy(G4double scaledKinEnergy)
void UpdateEmModel(const G4String &, G4double, G4double)
const G4String & GetPhysicsTableFileName(const G4ParticleDefinition *, const G4String &directory, const G4String &tableName, G4bool ascii=false)
const G4DynamicParticle * GetDynamicParticle() const
G4double LowestElectronEnergy() const
G4PhysicsTable * theSecondaryRangeTable
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel)
void RegisterExtraParticle(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
void ActivateSubCutoff(G4bool val, const G4Region *region=nullptr)
G4double maxKinEnergyCSDA
static G4EmParameters * Instance()
size_t GetVectorLength() const
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
void SetLinearLossLimit(G4double val)
G4VEmModel * currentModel
static G4bool RetrievePhysicsTable(G4PhysicsTable *physTable, const G4String &fileName, G4bool ascii)
G4double GetParentWeight() const
G4int GetParentID() const
virtual void ProcessDescription(std::ostream &outFile) const override
const G4ParticleDefinition * baseParticle
G4int GetProcessSubType() const
void SetNumberOfSecondaries(G4int totSecondaries)
static G4int Register(const G4String &)