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),
412 if(index >= n) {
for(
G4int i=n; i<=index; ++i) {
emModels.push_back(0);} }
445 G4cout <<
"G4VEnergyLossProcess::PreparePhysicsTable for "
452 if(masterProcess && masterProcess !=
this) {
isMaster =
false; }
472 if(pname !=
"deuteron" && pname !=
"triton" &&
473 pname !=
"alpha+" && pname !=
"helium" &&
474 pname !=
"hydrogen") {
484 size_t n = v->
size();
485 for(
size_t j=0; j<
n; ++j) {
486 if((*v)[j] ==
this) {
500 G4cout <<
"### G4VEnergyLossProcess::PreparePhysicsTable()"
501 <<
" interrupted for "
556 if(initialMass <
MeV) {
638 for(
G4int i=0; i<nmod; ++i) {
658 for (
size_t j=0; j<
n; ++j) {
676 G4cout <<
"G4VEnergyLossProcess::PrepearPhysicsTable() is done "
678 <<
" isIon= " <<
isIon;
686 G4cout <<
" SubCutoff Regime is ON for regions: " <<
G4endl;
701 G4cout <<
"### G4VEnergyLossProcess::BuildPhysicsTable() for "
748 for(
G4int i=0; i<numberOfModels; ++i) {
764 num ==
"e+" || num ==
"mu+" ||
765 num ==
"mu-" || num ==
"proton"||
766 num ==
"pi+" || num ==
"pi-" ||
767 num ==
"kaon+" || num ==
"kaon-" ||
768 num ==
"alpha" || num ==
"anti_proton" ||
769 num ==
"GenericIon")))
796 G4cout <<
"### G4VEnergyLossProcess::BuildPhysicsTable() done for "
809 G4cout <<
"G4VEnergyLossProcess::BuildDEDXTable() of type " << tType
827 G4cout <<
"G4VEnergyLossProcess::BuildDEDXTable WARNING: wrong type "
837 G4cout << numOfCouples <<
" materials"
839 <<
" maxKinEnergy= " << emax
841 <<
" EmTableType= " << tType
842 <<
" table= " << table <<
" " <<
this
845 if(!table) {
return table; }
852 for(
size_t i=0; i<numOfCouples; ++i) {
855 G4cout <<
"G4VEnergyLossProcess::BuildDEDXVector Idx= " << i
856 <<
" flagTable= " << table->
GetFlag(i)
864 if((*table)[i]) {
delete (*table)[i]; }
882 G4cout <<
"G4VEnergyLossProcess::BuildDEDXTable(): table is built for "
903 G4cout <<
"G4VEnergyLossProcess::BuildLambdaTable WARNING: wrong type "
908 G4cout <<
"G4VEnergyLossProcess::BuildLambdaTable() of type "
909 << tType <<
" for process "
912 <<
" EmTableType= " << tType
913 <<
" table= " << table
916 if(!table) {
return table;}
931 for(
size_t i=0; i<numOfCouples; ++i) {
949 if(emax <= emin) { emax = 2*emin; }
964 G4cout <<
"Lambda table is built for "
978 G4cout << std::setprecision(6);
983 G4cout <<
" dE/dx and range tables from "
987 <<
" Lambda tables from threshold to "
990 <<
" bins per decade, spline: "
1004 G4cout <<
" CSDA range table up"
1015 G4cout <<
"non restricted DEDXTable address= "
1058 reg = regionStore->
GetRegion(
"DefaultRegionForTheWorld",
false);
1234 G4cout <<
"G4VEnergyLossProcess::PostStepGetPhysicalInteractionLength ";
1238 <<
" Ekin(MeV)= " << preStepKinEnergy/
MeV
1242 <<
"InteractionLength= " << x/
cm <<
"[cm] " <<
G4endl;
1298 if(eloss < 0.0) { eloss = 0.0; }
1367 if(preSafety < rcut) {
1372 if(preSafety < rcut) { yes =
true; }
1376 G4double postSafety = preSafety - length;
1377 if(postSafety < rcut) {
1380 if(postSafety < rcut) { yes =
true; }
1412 eloss, eadd, length);
1413 if(eloss < 0.0) { eloss = 0.5*eloss_before; }
1454 if(eloss >= esecfluo) {
1526 for(
G4int i=0; i<
n; ++i) {
1549 G4double subcut = (*theSubCuts)[idx];
1551 if(cut <= subcut) {
return esec; }
1557 *(((*theSubLambdaTable)[(*theDensityIdx)[idx]])->Value(e,
idxSubLambda));
1561 if(length*cross <
perMillion) {
return esec; }
1582 fragment += del/length;
1583 if (fragment > 1.0) {
break; }
1592 std::vector<G4DynamicParticle*>::iterator it;
1598 tracks.push_back(t);
1601 esec += 2.0*electron_mass_c2;
1614 }
while (fragment <= 1.0);
1714 for (
G4int i=0; i<num; ++i) {
1798 G4cout <<
"Physics tables are stored for "
1801 <<
" in the directory <" << directory
1805 G4cout <<
"Fail to store Physics Tables for "
1808 <<
" in the directory <" << directory
1826 G4cout <<
"G4VEnergyLossProcess::RetrievePhysicsTable() for "
1855 "InverseRange",fpi))
1871 if(!fpi) yes =
false;
1873 "SubIonisation",yes))
1910 G4bool isRetrieved =
false;
1918 for(
size_t i=0; i<
n; ++i) {
1919 if((*aTable)[i]) { (*aTable)[i]->SetSpline(
true); }
1924 <<
" is Retrieved from <" << filename <<
">"
1930 if(mandatory && !isRetrieved) {
1934 << filename <<
"> is not Retrieved"
1977 if(cross < 0.0) { cross = 0.0; }
2055 <<
" is added to the list of collaborative processes of "
2077 for (
size_t i=0; i<
n; ++i) {
2083 pv = (*p)[(*theDensityIdx)[i]];
2134 for (
size_t i=0; i<
n; ++i) {
2139 pv = (*p)[(*theDensityIdx)[i]];
2140 if(pv) { rmax = pv->
Value(emax,
idxCSDA)/(*theDensityFactor)[i]; }
2155 G4cout <<
"### Set Range table " << p
2167 G4cout <<
"### Set SecondaryRange table " << p
2179 G4cout <<
"### Set InverseRange table " << p
2190 G4cout <<
"### Set Lambda table " << p
2210 for (i=0; i<
n; ++i) {
2211 pv = (*theLambdaTable)[i];
2217 for (
size_t j=0; j<nb; ++j) {
2230 <<
" Max CS at i= " << i <<
" emax(MeV)= " << emax/
MeV
2231 <<
" lambda= " << smax <<
G4endl;
2236 for (i=0; i<
n; ++i) {
2237 pv = (*theLambdaTable)[i];
2239 G4int j = (*theDensityIdx)[i];
2253 G4cout <<
"### Set SebLambda table " << p
2277 G4cout <<
"### SetCrossSectionBiasingFactor: for "
2279 <<
" biasFactor= " << f <<
" weightFlag= " << flag
2294 G4cout <<
"### ActivateForcedInteraction: for "
2296 <<
" length(mm)= " << length/
mm
2297 <<
" in G4Region <" << region
2298 <<
"> weightFlag= " << flag
2312 if (0.0 <= factor) {
2321 G4cout <<
"### ActivateSecondaryBiasing: for "
2323 <<
" factor= " << factor
2324 <<
" in G4Region <" << region
2325 <<
"> energyLimit(MeV)= " << energyLimit/
MeV
2344 if(0.0 < val && val < 1.0) {
2357 if(0.0 < v1 && 0.0 < v2 && v2 < 1.e+50) {
2360 }
else if(v1 <= 0.0) {
2379 if(2 < n && n < 1000000000) {
2413 G4String ss =
"G4VEnergyLossProcess::" + tit;
2415 ed <<
"Parameter is out of range: " << val
2416 <<
" it will have no effect!\n" <<
" Process "
G4VEnergyLossProcess(const G4String &name="EnergyLoss", G4ProcessType type=fElectromagnetic)
G4double condition(const G4ErrorSymMatrix &m)
G4bool UseCutAsFinalRange() const
G4VSubCutProducer * SubCutProducer()
static constexpr double perMillion
G4double MaxSecondaryKinEnergy(const G4DynamicParticle *dynParticle)
G4int NumberOfBinsPerDecade() const
G4ParticleDefinition * GetDefinition() const
const G4VProcess * GetMasterProcess() const
G4LossTableManager * lManager
std::vector< G4double > theEnergyOfCrossSectionMax
void SetDEDXTable(G4PhysicsTable *p, G4EmTableType tType)
G4int GetParentID() const
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const
void InitializeForPostStep(const G4Track &)
G4double preStepKinEnergy
const G4String & GetName() const
G4SafetyHelper * GetSafetyHelper() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
const std::vector< G4double > * GetDensityFactors()
static void SetPhysicsVector(G4PhysicsTable *physTable, size_t idx, G4PhysicsVector *vec)
G4int WorkerVerbose() const
G4double MaxKinEnergy() const
static G4LossTableManager * Instance()
void ActivateForcedInteraction(G4double length=0.0, const G4String &r="")
G4GPILSelection aGPILSelection
virtual G4double SampleFluctuations(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmax, G4double length, G4double meanLoss)=0
static constexpr double mm
virtual void SampleSecondaries(const G4Step &step, std::vector< G4Track * > &tracks, G4double &eloss, G4double cut) const =0
void AlongStepDeexcitation(std::vector< G4Track * > &tracks, const G4Step &step, G4double &eLoss, G4int coupleIndex)
G4double ApplySecondaryBiasing(std::vector< G4DynamicParticle * > &, const G4Track &track, G4VEmModel *currentModel, G4ParticleChangeForGamma *pParticleChange, G4double &eloss, G4int coupleIdx, G4double tcut, G4double safety=0.0)
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin=0.0, G4double tmax=DBL_MAX)=0
std::ostringstream G4ExceptionDescription
G4double GetKineticEnergy() const
void PrintInfoDefinition(const G4ParticleDefinition &part)
CLHEP::Hep3Vector G4ThreeVector
void SetIonisation(G4bool val)
virtual void BuildPhysicsTable(const G4ParticleDefinition &) override
G4VEmModel * GetModel(G4int idx, G4bool ver=false)
G4double GetStepLength() const
G4double HighEnergyLimit() const
const G4DynamicParticle * GetDynamicParticle() const
G4bool SecondaryBiasingRegion(G4int coupleIdx)
void SetParticleChange(G4VParticleChange *, G4VEmFluctuationModel *f=nullptr)
G4bool IsPIXEActive() const
G4PhysicsTable * SubLambdaTable() const
G4double LowestElectronEnergy() const
G4VEmModel * currentModel
virtual G4double GetContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety) override
G4double GetProductionCut(G4int index) const
void DeRegister(G4VEnergyLossProcess *p)
G4PhysicsTable * RangeTableForLoss() const
const std::vector< G4double > * theDensityFactor
G4StepStatus GetStepStatus() const
void UpdateEmModel(const G4String &model_name, G4double emin, G4double emax)
const G4String & GetName() const
G4PhysicsTable * SecondaryRangeTable() const
void AddCollaborativeProcess(G4VEnergyLossProcess *)
const G4ThreeVector & GetPosition() const
const std::vector< G4int > * theDensityIdx
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel)
void SetLinearLossLimit(G4double val)
const G4ParticleDefinition * secondaryParticle
G4bool ForcedInteractionRegion(G4int coupleIdx)
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
G4PhysicsTable * CSDARangeTable() const
G4PhysicsTable * theSecondaryRangeTable
G4VEmFluctuationModel * fluctModel
G4ParticleChangeForLoss fParticleChange
virtual G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
G4VSubCutProducer * subcutProducer
G4double theNumberOfInteractionLengthLeft
void SelectModel(G4double kinEnergy)
G4bool GetFlag(size_t idx) const
G4PhysicsTable * theIonisationTable
void SetTouchableHandle(const G4TouchableHandle &apValue)
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *, const G4Region *)
G4VEmModel * GetModelByIndex(G4int idx=0, G4bool ver=false) const
size_t currentCoupleIndex
G4int NumberOfModels() const
void ResetForcedInteraction()
G4PhysicsTable * IonisationTableForSubsec() const
G4double GetParentWeight() const
virtual G4VParticleChange * AlongStepDoIt(const G4Track &, const G4Step &) override
const char * name(G4int ptype)
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
void ActivateSecondaryBiasing(const G4String ®ion, G4double factor, G4double energyLimit)
void DefineRegParamForLoss(G4VEnergyLossProcess *, G4bool isElectron) const
G4VEmFluctuationModel * GetModelOfFluctuations()
const G4DataVector * SubCutoff() const
size_t GetVectorLength() const
G4double preStepRangeEnergy
G4PhysicsVector * LambdaPhysicsVector(const G4MaterialCutsCouple *, G4double cut)
void InitializeForAlongStep(const G4Track &)
G4double GetProposedKineticEnergy() const
G4PhysicsTable * IonisationTable() const
void FillLambdaVector(G4PhysicsVector *, const G4MaterialCutsCouple *, G4bool startFromNull=true, G4EmTableType t=fRestricted)
G4VAtomDeexcitation * atomDeexcitation
void FillSecondDerivatives()
G4PhysicsTable * BuildLambdaTable(G4EmTableType tType=fRestricted)
void SetStepFunction(G4double v1, G4double v2, G4bool lock=true)
const G4String & GetPhysicsTableFileName(const G4ParticleDefinition *, const G4String &directory, const G4String &tableName, G4bool ascii=false)
static G4PhysicsTable * PreparePhysicsTable(G4PhysicsTable *physTable)
G4double MinSubRange() const
const G4String & GetParticleName() const
G4bool lossFluctuationFlag
G4LossTableBuilder * GetTableBuilder()
void SetWeight(G4double aValue)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
void SetCreatorModelIndex(G4int idx)
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
G4bool ExistPhysicsTable(const G4String &fileName) const
const G4ParticleDefinition * theGamma
static const G4double reg
const G4MaterialCutsCouple * currentCouple
void PrintWarning(G4String, G4double val)
void Initialise(const G4ParticleDefinition &part, const G4String &procName, G4int verbose)
const G4DataVector * theCuts
void SetHighEnergyLimit(G4double)
virtual G4double Dispersion(const G4Material *, const G4DynamicParticle *, G4double tmax, G4double length)=0
static constexpr double TeV
static G4RegionStore * GetInstance()
G4PhysicsTable * theSubLambdaTable
G4StepPoint * GetPreStepPoint() const
G4bool BuildCSDARange() const
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *fluc=0, const G4Region *region=nullptr)
G4PhysicsTable * LambdaTable() const
void ProposeWeight(G4double finalWeight)
void SetAngularGeneratorFlag(G4bool)
G4double LinearLossLimit() const
void SetSecondaryWeightByProcess(G4bool)
void SetInverseRangeTable(G4PhysicsTable *p)
G4double LambdaFactor() const
void SetCrossSectionBiasingFactor(G4double f, G4bool flag=true)
G4ProcessVector * GetAtRestProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
G4double GetKineticEnergy() const
G4double SampleSubCutSecondaries(std::vector< G4Track * > &, const G4Step &, G4VEmModel *model, G4int matIdx)
const G4ParticleDefinition * baseParticle
G4GLOB_DLL std::ostream G4cout
void FillDEDXVector(G4PhysicsVector *, const G4MaterialCutsCouple *, G4EmTableType t=fRestricted)
void FillSecondariesAlongStep(G4double &eloss, G4double &weight)
const G4DataVector * theSubCuts
G4PhysicsTable * DEDXTable() const
G4double ScaledKinEnergyForLoss(G4double range)
size_t GetTableSize() const
G4double GetDEDXForScaledEnergy(G4double scaledKinEnergy)
const G4ThreeVector & GetPosition() const
const G4Element * GetCurrentElement() const
G4double LowestMuHadEnergy() const
const G4ParticleDefinition * theGenericIon
const G4ParticleDefinition * thePositron
void ComputeLambdaForScaledEnergy(G4double scaledKinEnergy)
std::vector< G4Track * > scTracks
static constexpr double cm
G4double preStepScaledEnergy
G4double GetStepLimit(G4int coupleIdx, G4double previousStep)
G4double currentInteractionLength
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4double GetSubDEDXForScaledEnergy(G4double scaledKinEnergy)
const G4ParticleDefinition * GetParticleDefinition() const
G4PhysicsTable * theCSDARangeTable
void ActivateForcedInteraction(G4double length, const G4String ®ion, G4bool flag=true)
virtual ~G4VEnergyLossProcess()
const G4String & GetParticleType() const
void SetMaxKinEnergy(G4double e)
void Register(G4VEnergyLossProcess *p)
std::vector< G4double > theDEDXAtMaxEnergy
G4double MinKinEnergy() const
const G4ParticleDefinition * particle
virtual void ProcessDescription(std::ostream &outFile) const
G4double GetGlobalTime() const
G4PhysicsTable * DEDXTableForSubsec() const
G4double Energy(size_t index) const
G4double Value(G4double theEnergy, size_t &lastidx) const
const G4String & GetProcessName() const
void AddSecondary(G4Track *aSecondary)
virtual G4double ChargeSquareRatio(const G4Track &)
const G4TouchableHandle & GetTouchableHandle() const
G4Material * GetMaterial() const
void RegisterExtraParticle(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
G4bool IsActive(G4double kinEnergy)
void DumpModelList(G4int verb)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
std::vector< const G4Region * > scoffRegions
const G4DataVector * Initialise(const G4ParticleDefinition *part, const G4ParticleDefinition *secPart, G4double minSubRange, G4int verb)
G4double ComputeSafety(const G4ThreeVector &pGlobalPoint, G4double maxRadius=DBL_MAX)
G4PhysicsTable * theLambdaTable
static G4TransportationManager * GetTransportationManager()
static const G4double emax
void SetMasterThread(G4bool val)
G4double G4Log(G4double x)
const G4ParticleDefinition * theElectron
void ActivateSecondaryBiasing(const G4String ®ion, G4double factor, G4double energyLimit)
virtual G4double GetParticleCharge(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
static G4ProductionCutsTable * GetProductionCutsTable()
const G4Material * currentMaterial
void SetLambdaTable(G4PhysicsTable *p)
G4PhysicsTable * theInverseRangeTable
static G4Positron * Positron()
G4int NumberOfModels() const
G4SafetyHelper * safetyHelper
std::vector< G4double > theCrossSectionMax
G4bool LossFluctuation() const
virtual void PrintInfo()=0
G4PhysicsTable * InverseRangeTable() const
void BuildPhysicsTable(const G4ParticleDefinition *aParticle)
G4double GetPDGMass() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
virtual void StartTracking(G4Track *) override
static G4ParticleTable * GetParticleTable()
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double maxKinEnergyCSDA
G4ProcessManager * GetProcessManager() const
void InitialiseBaseMaterials(G4PhysicsTable *table)
void SetNumberOfSecondaries(G4int totSecondaries)
G4bool UseAngularGeneratorForIonisation() const
virtual G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii) override
static G4int Register(const G4String &)
G4double GetLocalEnergyDeposit() const
G4double MeanFreePath(const G4Track &track)
G4PhysicsTable * theDEDXunRestrictedTable
G4StepPoint * GetPostStepPoint() const
void UpdateEmModel(const G4String &, G4double, G4double)
G4bool StoreTable(const G4ParticleDefinition *p, G4PhysicsTable *, G4bool ascii, const G4String &directory, const G4String &tname)
static G4EmParameters * Instance()
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety, G4GPILSelection *selection) override
virtual void PreparePhysicsTable(const G4ParticleDefinition &) override
G4VParticleChange * pParticleChange
G4PhysicsTable * theRangeTableForLoss
void SetEmModel(G4VEmModel *, G4int index=1)
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
G4double ContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety)
std::vector< G4VEmModel * > emModels
static constexpr double GeV
G4double GetSafety() const
void SetProposedCharge(G4double theCharge)
void PreparePhysicsTable(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p, G4bool theMaster)
void SetCSDARangeTable(G4PhysicsTable *pRange)
G4double GetDEDXDispersion(const G4MaterialCutsCouple *couple, const G4DynamicParticle *dp, G4double length)
void LocalPhysicsTables(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
G4double GetLambdaForScaledEnergy(G4double scaledKinEnergy)
static G4Electron * Electron()
G4double GetGlobalTime() const
static constexpr double MeV
void SetSecondaryRangeTable(G4PhysicsTable *p)
G4bool StorePhysicsTable(const G4String &filename, G4bool ascii=false)
G4TrackStatus GetTrackStatus() const
G4VAtomDeexcitation * AtomDeexcitation()
G4PhysicsTable * DEDXunRestrictedTable() const
void ActivateSubCutoff(G4bool val, const G4Region *region=nullptr)
std::vector< G4double > theRangeAtMaxEnergy
G4bool RetrieveTable(const G4ParticleDefinition *p, G4PhysicsTable *, G4bool ascii, const G4String &directory, const G4String &tname, G4bool mandatory)
G4PhysicsTable * theDEDXTable
G4double theInitialNumberOfInteractionLength
G4bool GetFlag(size_t i) const
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &) override
void ProposeTrackStatus(G4TrackStatus status)
void SetLowestEnergyLimit(G4double)
void SetSubLambdaTable(G4PhysicsTable *p)
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition *, const G4Material *, G4double cut)
G4ProcessVector * GetAlongStepProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
G4Track * GetTrack() const
G4double MaxEnergyForCSDARange() const
G4double GetPDGCharge() const
G4EmBiasingManager * biasManager
void SetRangeTableForLoss(G4PhysicsTable *p)
static G4bool RetrievePhysicsTable(G4PhysicsTable *physTable, const G4String &fileName, G4bool ascii)
G4ProductionCuts * GetProductionCuts() const
G4PhysicsTable * theDEDXSubTable
static constexpr double keV
virtual G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false) override
G4EmParameters * theParameters
G4int GetProcessSubType() const
G4double GetScaledRangeForScaledEnergy(G4double scaledKinEnergy)
std::vector< G4VEnergyLossProcess * > scProcesses
G4PhysicsTable * BuildDEDXTable(G4EmTableType tType=fRestricted)
G4VEmModel * EmModel(G4int index=1) const
void DefineMaterial(const G4MaterialCutsCouple *couple)
void SetVerboseLevel(G4int value)
void SetDEDXBinning(G4int nbins)
virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition *, const G4ParticleDefinition *)=0
const G4Material * GetMaterial() const
G4PhysicsTable * theIonisationSubTable
G4double CrossSectionPerVolume(G4double kineticEnergy, const G4MaterialCutsCouple *couple)
std::vector< G4DynamicParticle * > secParticles
size_t idxDEDXunRestricted
const std::vector< G4int > * GetCoupleIndexes()
const G4Element * GetCurrentElement() const
G4bool IsIonisationProcess() const
void SetMinKinEnergy(G4double e)
G4EmModelManager * modelManager