146 #include "G4VParticleChange.hh" 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),
447 G4cout <<
"G4VEnergyLossProcess::PreparePhysicsTable for " 454 if(masterProcess && masterProcess !=
this) {
isMaster =
false; }
474 if(pname !=
"deuteron" && pname !=
"triton" &&
475 pname !=
"alpha+" && pname !=
"helium" &&
476 pname !=
"hydrogen") {
486 size_t n = v->
size();
487 for(
size_t j=0; j<
n; ++j) {
488 if((*v)[j] ==
this) {
502 G4cout <<
"### G4VEnergyLossProcess::PreparePhysicsTable()" 503 <<
" 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;
695 G4cout <<
"### G4VEnergyLossProcess::BuildPhysicsTable() for " 742 for(
G4int i=0; i<numberOfModels; ++i) {
758 num ==
"e+" || num ==
"mu+" ||
759 num ==
"mu-" || num ==
"proton"||
760 num ==
"pi+" || num ==
"pi-" ||
761 num ==
"kaon+" || num ==
"kaon-" ||
762 num ==
"alpha" || num ==
"anti_proton" ||
763 num ==
"GenericIon")))
790 G4cout <<
"### G4VEnergyLossProcess::BuildPhysicsTable() done for " 803 G4cout <<
"G4VEnergyLossProcess::BuildDEDXTable() of type " << tType
821 G4cout <<
"G4VEnergyLossProcess::BuildDEDXTable WARNING: wrong type " 831 G4cout << numOfCouples <<
" materials" 833 <<
" maxKinEnergy= " << emax
835 <<
" EmTableType= " << tType
836 <<
" table= " << table <<
" " <<
this 839 if(!table) {
return table; }
846 for(
size_t i=0; i<numOfCouples; ++i) {
849 G4cout <<
"G4VEnergyLossProcess::BuildDEDXVector Idx= " << i
850 <<
" flagTable= " << table->
GetFlag(i)
858 if((*table)[i]) {
delete (*table)[i]; }
876 G4cout <<
"G4VEnergyLossProcess::BuildDEDXTable(): table is built for " 897 G4cout <<
"G4VEnergyLossProcess::BuildLambdaTable WARNING: wrong type " 902 G4cout <<
"G4VEnergyLossProcess::BuildLambdaTable() of type " 903 << tType <<
" for process " 906 <<
" EmTableType= " << tType
907 <<
" table= " << table
910 if(!table) {
return table;}
925 for(
size_t i=0; i<numOfCouples; ++i) {
943 if(emax <= emin) { emax = 2*emin; }
958 G4cout <<
"Lambda table is built for " 972 G4cout << std::setprecision(6);
977 G4cout <<
" dE/dx and range tables from " 981 <<
" Lambda tables from threshold to " 984 <<
" bins per decade, spline: " 998 G4cout <<
" CSDA range table up" 1009 G4cout <<
"non restricted DEDXTable address= " 1052 reg = regionStore->
GetRegion(
"DefaultRegionForTheWorld",
false);
1091 G4double newmass = track->GetDefinition()->GetPDGMass();
1102 if(0 == track->GetParentID()) {
1114 G4GPILSelection* selection)
1149 const G4Track&
track,
1154 *condition = NotForced;
1184 if(0 == track.GetParentID()) {
1229 G4cout <<
"G4VEnergyLossProcess::PostStepGetPhysicalInteractionLength ";
1231 G4cout <<
" for " << track.GetDefinition()->GetParticleName()
1233 <<
" Ekin(MeV)= " << preStepKinEnergy/
MeV 1234 <<
" " << track.GetMaterial()->GetName()
1237 <<
"InteractionLength= " << x/
cm <<
"[cm] " <<
G4endl;
1255 G4double length = step.GetStepLength();
1293 if(eloss < 0.0) { eloss = 0.0; }
1350 G4StepPoint* prePoint = step.GetPreStepPoint();
1353 if(prePoint->GetStepStatus() == fGeomBoundary) { yes =
true; }
1357 G4double preSafety = prePoint->GetSafety();
1362 if(preSafety < rcut) {
1367 if(preSafety < rcut) { yes =
true; }
1371 G4double postSafety = preSafety - length;
1372 if(postSafety < rcut) {
1374 step.GetPostStepPoint()->GetPosition(), rcut);
1375 if(postSafety < rcut) { yes =
true; }
1407 eloss, eadd, length);
1408 if(eloss < 0.0) { eloss = 0.5*eloss_before; }
1449 if(eloss >= esecfluo) {
1521 for(
G4int i=0; i<
n; ++i) {
1524 t->SetWeight(weight);
1526 if(i >= n0) { t->SetCreatorModelIndex(
biasID); }
1544 G4double subcut = (*theSubCuts)[idx];
1546 if(cut <= subcut) {
return esec; }
1548 const G4Track*
track = step.GetTrack();
1552 *(((*theSubLambdaTable)[(*theDensityIdx)[idx]])->Value(e,
idxSubLambda));
1553 G4double length = step.GetStepLength();
1556 if(length*cross <
perMillion) {
return esec; }
1567 G4StepPoint* preStepPoint = step.GetPreStepPoint();
1568 G4StepPoint* postStepPoint = step.GetPostStepPoint();
1571 G4double pretime = preStepPoint->GetGlobalTime();
1572 G4double dt = postStepPoint->GetGlobalTime() - pretime;
1578 fragment += del/length;
1579 if (fragment > 1.0) {
break; }
1588 std::vector<G4DynamicParticle*>::iterator it;
1591 G4Track* t =
new G4Track((*it), pretime + fragment*dt, r);
1592 t->SetTouchableHandle(track->GetTouchableHandle());
1594 tracks.push_back(t);
1595 esec += t->GetKineticEnergy();
1610 }
while (fragment <= 1.0);
1624 G4double finalT = track.GetKineticEnergy();
1696 step.GetPostStepPoint()->GetSafety());
1711 for (
G4int i=0; i<num; ++i) {
1713 G4Track* t =
new G4Track(
secParticles[i], time, track.GetPosition());
1714 t->SetTouchableHandle(track.GetTouchableHandle());
1715 t->SetWeight(weight);
1716 if(i < num0) { t->SetCreatorModelIndex(
secID); }
1717 else { t->SetCreatorModelIndex(
biasID); }
1795 G4cout <<
"Physics tables are stored for " 1798 <<
" in the directory <" << directory
1802 G4cout <<
"Fail to store Physics Tables for " 1805 <<
" in the directory <" << directory
1823 G4cout <<
"G4VEnergyLossProcess::RetrievePhysicsTable() for " 1852 "InverseRange",fpi))
1868 if(!fpi) yes =
false;
1870 "SubIonisation",yes))
1907 G4bool isRetrieved =
false;
1915 for(
size_t i=0; i<
n; ++i) {
1916 if((*aTable)[i]) { (*aTable)[i]->SetSpline(
true); }
1921 <<
" is Retrieved from <" << filename <<
">" 1927 if(mandatory && !isRetrieved) {
1931 << filename <<
"> is not Retrieved" 1974 if(cross < 0.0) { cross = 0.0; }
1995 G4GPILSelection sel;
2002 const G4Track&
track,
2007 *condition = NotForced;
2052 <<
" is added to the list of collaborative processes of " 2074 for (
size_t i=0; i<
n; ++i) {
2080 pv = (*p)[(*theDensityIdx)[i]];
2131 for (
size_t i=0; i<
n; ++i) {
2136 pv = (*p)[(*theDensityIdx)[i]];
2137 if(pv) { rmax = pv->
Value(emax,
idxCSDA)/(*theDensityFactor)[i]; }
2152 G4cout <<
"### Set Range table " << p
2164 G4cout <<
"### Set SecondaryRange table " << p
2176 G4cout <<
"### Set InverseRange table " << p
2187 G4cout <<
"### Set Lambda table " << p
2207 for (i=0; i<
n; ++i) {
2208 pv = (*theLambdaTable)[i];
2214 for (
size_t j=0; j<nb; ++j) {
2227 <<
" Max CS at i= " << i <<
" emax(MeV)= " << emax/
MeV 2228 <<
" lambda= " << smax <<
G4endl;
2233 for (i=0; i<
n; ++i) {
2234 pv = (*theLambdaTable)[i];
2236 G4int j = (*theDensityIdx)[i];
2250 G4cout <<
"### Set SebLambda table " << p
2274 G4cout <<
"### SetCrossSectionBiasingFactor: for " 2276 <<
" biasFactor= " << f <<
" weightFlag= " << flag
2291 G4cout <<
"### ActivateForcedInteraction: for " 2293 <<
" length(mm)= " << length/
mm 2294 <<
" in G4Region <" << region
2295 <<
"> weightFlag= " << flag
2309 if (0.0 <= factor) {
2318 G4cout <<
"### ActivateSecondaryBiasing: for " 2320 <<
" factor= " << factor
2321 <<
" in G4Region <" << region
2322 <<
"> energyLimit(MeV)= " << energyLimit/
MeV 2341 if(0.0 < val && val < 1.0) {
2351 if(0.0 < v1 && 0.0 < v2 && v2 < 1.
e+50) {
2354 }
else if(v1 <= 0.0) {
2373 if(2 < n && n < 1000000000) {
2407 G4String ss =
"G4VEnergyLossProcess::" + tit;
2409 ed <<
"Parameter is out of range: " << val
2410 <<
" it will have no effect!\n" <<
" Process "
G4VEnergyLossProcess(const G4String &name="EnergyLoss", G4ProcessType type=fElectromagnetic)
G4double condition(const G4ErrorSymMatrix &m)
G4VSubCutProducer * SubCutProducer()
G4double MaxSecondaryKinEnergy(const G4DynamicParticle *dynParticle)
const G4Element * GetCurrentElement() const
G4LossTableManager * lManager
std::vector< G4double > theEnergyOfCrossSectionMax
void SetDEDXTable(G4PhysicsTable *p, G4EmTableType tType)
const G4VProcess * GetMasterProcess() const
G4PhysicsTable * InverseRangeTable() const
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
G4double preStepKinEnergy
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
const std::vector< G4double > * GetDensityFactors()
static void SetPhysicsVector(G4PhysicsTable *physTable, size_t idx, G4PhysicsVector *vec)
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
const G4Element * GetCurrentElement() const
G4ProcessVector * GetAtRestProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length)
void UpdateEmModel(const G4String &, G4double, G4double)
std::ostringstream G4ExceptionDescription
const G4Material * GetMaterial() const
void PrintInfoDefinition(const G4ParticleDefinition &part)
G4double MinSubRange() const
void SetIonisation(G4bool val)
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
G4bool SecondaryBiasingRegion(G4int coupleIdx)
G4double MaxEnergyForCSDARange() const
G4bool IsIonisationProcess() const
G4PhysicsTable * SecondaryRangeTable() const
G4VEmModel * currentModel
G4VEmModel * GetModel(G4int, G4bool ver=false)
void DeRegister(G4VEnergyLossProcess *p)
G4PhysicsTable * DEDXTableForSubsec() const
virtual G4double GetContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety)
const std::vector< G4double > * theDensityFactor
void AlongStepDeexcitation(std::vector< G4Track *> &tracks, const G4Step &step, G4double &eLoss, G4int coupleIndex)
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
void AddCollaborativeProcess(G4VEnergyLossProcess *)
const std::vector< G4int > * theDensityIdx
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel)
void ActivateForcedInteraction(G4double length=0.0, const G4String ®ion="", G4bool flag=true)
void SetLinearLossLimit(G4double val)
const G4ParticleDefinition * secondaryParticle
virtual G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
void SetStepFunction(G4double v1, G4double v2)
G4bool ForcedInteractionRegion(G4int coupleIdx)
G4bool UseAngularGeneratorForIonisation() const
G4PhysicsTable * theSecondaryRangeTable
virtual G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false)
G4VEmFluctuationModel * fluctModel
G4ProductionCuts * GetProductionCuts() const
G4ParticleChangeForLoss fParticleChange
G4VSubCutProducer * subcutProducer
G4double theNumberOfInteractionLengthLeft
void SelectModel(G4double kinEnergy)
G4PhysicsTable * theIonisationTable
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *, const G4Region *)
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
size_t currentCoupleIndex
void ResetForcedInteraction()
const G4String & GetParticleType() const
const G4DataVector * SubCutoff() const
G4bool LossFluctuation() const
G4ProcessManager * GetProcessManager() const
G4PhysicsTable * IonisationTableForSubsec() const
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
void ActivateSecondaryBiasing(const G4String ®ion, G4double factor, G4double energyLimit)
G4VEmFluctuationModel * GetModelOfFluctuations()
virtual void SampleSecondaries(std::vector< G4DynamicParticle *> *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin=0.0, G4double tmax=DBL_MAX)=0
G4double preStepRangeEnergy
G4PhysicsVector * LambdaPhysicsVector(const G4MaterialCutsCouple *, G4double cut)
G4int NumberOfBinsPerDecade() const
void FillLambdaVector(G4PhysicsVector *, const G4MaterialCutsCouple *, G4bool startFromNull=true, G4EmTableType t=fRestricted)
G4VAtomDeexcitation * atomDeexcitation
void FillSecondDerivatives()
G4PhysicsTable * BuildLambdaTable(G4EmTableType tType=fRestricted)
G4VEmModel * EmModel(G4int index=1) const
const G4String & GetPhysicsTableFileName(const G4ParticleDefinition *, const G4String &directory, const G4String &tableName, G4bool ascii=false)
static G4PhysicsTable * PreparePhysicsTable(G4PhysicsTable *physTable)
G4int GetProcessSubType() const
G4bool lossFluctuationFlag
G4LossTableBuilder * GetTableBuilder()
G4PhysicsTable * LambdaTable() const
const G4ParticleDefinition * theGamma
static const G4double reg
const G4MaterialCutsCouple * currentCouple
void PrintWarning(G4String, G4double val)
G4bool BuildCSDARange() const
G4double GetProductionCut(G4int index) const
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 G4RegionStore * GetInstance()
G4PhysicsTable * theSubLambdaTable
G4double ApplySecondaryBiasing(std::vector< G4DynamicParticle *> &, const G4Track &track, G4VEmModel *currentModel, G4ParticleChangeForGamma *pParticleChange, G4double &eloss, G4int coupleIdx, G4double tcut, G4double safety=0.0)
G4bool IsPIXEActive() const
void SetAngularGeneratorFlag(G4bool)
G4bool UseCutAsFinalRange() const
void SetInverseRangeTable(G4PhysicsTable *p)
const G4String & GetProcessName() const
void SetCrossSectionBiasingFactor(G4double f, G4bool flag=true)
G4double GetKineticEnergy() const
const G4String & GetParticleName() const
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
G4double ScaledKinEnergyForLoss(G4double range)
G4PhysicsTable * RangeTableForLoss() const
G4double GetDEDXForScaledEnergy(G4double scaledKinEnergy)
void SetParticleChange(G4VParticleChange *, G4VEmFluctuationModel *f=0)
const G4ParticleDefinition * theGenericIon
const G4ParticleDefinition * thePositron
G4double HighEnergyLimit() const
void ComputeLambdaForScaledEnergy(G4double scaledKinEnergy)
std::vector< G4Track * > scTracks
G4double preStepScaledEnergy
G4double GetStepLimit(G4int coupleIdx, G4double previousStep)
G4double currentInteractionLength
G4double MinKinEnergy() const
G4SafetyHelper * GetSafetyHelper() const
G4double GetSubDEDXForScaledEnergy(G4double scaledKinEnergy)
G4PhysicsTable * theCSDARangeTable
virtual ~G4VEnergyLossProcess()
virtual void ProcessDescription(std::ostream &outFile) const
G4bool ExistPhysicsTable(const G4String &fileName) const
void SetMaxKinEnergy(G4double e)
void Register(G4VEnergyLossProcess *p)
std::vector< G4double > theDEDXAtMaxEnergy
virtual G4VParticleChange * AlongStepDoIt(const G4Track &, const G4Step &)
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *fluc=0, const G4Region *region=0)
const G4ParticleDefinition * particle
size_t GetVectorLength() const
G4double Value(G4double theEnergy, size_t &lastidx) const
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety, G4GPILSelection *selection)
virtual G4double ChargeSquareRatio(const G4Track &)
G4int NumberOfBins() 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)
const G4String & GetName() const
G4PhysicsTable * theLambdaTable
static G4TransportationManager * GetTransportationManager()
virtual G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii)
static const G4double emax
void SetMasterThread(G4bool val)
virtual void PreparePhysicsTable(const G4ParticleDefinition &)
G4double G4Log(G4double x)
G4ProcessVector * GetAlongStepProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
const G4ParticleDefinition * theElectron
void ActivateSecondaryBiasing(const G4String ®ion, G4double factor, G4double energyLimit)
static const double perMillion
virtual G4double GetParticleCharge(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
static G4ProductionCutsTable * GetProductionCutsTable()
const G4Material * currentMaterial
void SetLambdaTable(G4PhysicsTable *p)
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
G4PhysicsTable * theInverseRangeTable
static G4Positron * Positron()
G4PhysicsTable * DEDXunRestrictedTable() const
G4SafetyHelper * safetyHelper
std::vector< G4double > theCrossSectionMax
static const G4double factor
virtual void PrintInfo()=0
void BuildPhysicsTable(const G4ParticleDefinition *aParticle)
static G4ParticleTable * GetParticleTable()
virtual void StartTracking(G4Track *)
G4double MaxKinEnergy() const
G4double LowestElectronEnergy() const
G4double maxKinEnergyCSDA
void InitialiseBaseMaterials(G4PhysicsTable *table)
G4PhysicsTable * DEDXTable() const
static G4int Register(const G4String &)
G4double MeanFreePath(const G4Track &track)
G4double GetPDGMass() const
G4PhysicsTable * theDEDXunRestrictedTable
void UpdateEmModel(const G4String &, G4double, G4double)
G4bool StoreTable(const G4ParticleDefinition *p, G4PhysicsTable *, G4bool ascii, const G4String &directory, const G4String &tname)
static G4EmParameters * Instance()
G4VParticleChange * pParticleChange
G4PhysicsTable * theRangeTableForLoss
void SetEmModel(G4VEmModel *, G4int index=1)
G4double ContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety)
std::vector< G4VEmModel * > emModels
void PreparePhysicsTable(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p, G4bool theMaster)
void SetCSDARangeTable(G4PhysicsTable *pRange)
G4double GetDEDXDispersion(const G4MaterialCutsCouple *couple, const G4DynamicParticle *dp, G4double length)
size_t GetTableSize() const
void LocalPhysicsTables(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
G4double GetLambdaForScaledEnergy(G4double scaledKinEnergy)
static G4Electron * Electron()
G4bool GetFlag(size_t idx) const
void SetSecondaryRangeTable(G4PhysicsTable *p)
G4bool StorePhysicsTable(const G4String &filename, G4bool ascii=false)
G4VAtomDeexcitation * AtomDeexcitation()
G4PhysicsTable * CSDARangeTable() const
G4bool GetFlag(size_t i) const
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const
G4PhysicsTable * SubLambdaTable() const
G4double Energy(size_t index) const
std::vector< G4double > theRangeAtMaxEnergy
G4bool RetrieveTable(const G4ParticleDefinition *p, G4PhysicsTable *, G4bool ascii, const G4String &directory, const G4String &tname, G4bool mandatory)
G4PhysicsTable * theDEDXTable
G4double theInitialNumberOfInteractionLength
G4int WorkerVerbose() const
void SetLowestEnergyLimit(G4double)
virtual void SampleSecondaries(const G4Step &step, std::vector< G4Track *> &tracks, G4double &eloss, G4double cut) const =0
G4PhysicsTable * IonisationTable() const
void SetSubLambdaTable(G4PhysicsTable *p)
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition *, const G4Material *, G4double cut)
const G4String & GetName() const
G4EmBiasingManager * biasManager
G4double LambdaFactor() const
void ActivateSubCutoff(G4bool val, const G4Region *region=0)
G4double LowestMuHadEnergy() const
void SetRangeTableForLoss(G4PhysicsTable *p)
G4double SampleSubCutSecondaries(std::vector< G4Track *> &, const G4Step &, G4VEmModel *model, G4int matIdx)
static G4bool RetrievePhysicsTable(G4PhysicsTable *physTable, const G4String &fileName, G4bool ascii)
G4PhysicsTable * theDEDXSubTable
G4double LinearLossLimit() const
G4EmParameters * theParameters
G4int NumberOfModels() const
G4VEmModel * GetModelByIndex(G4int idx=0, G4bool ver=false) const
G4double GetScaledRangeForScaledEnergy(G4double scaledKinEnergy)
G4double GetPDGCharge() const
G4int NumberOfModels() const
std::vector< G4VEnergyLossProcess * > scProcesses
G4PhysicsTable * BuildDEDXTable(G4EmTableType tType=fRestricted)
void DefineMaterial(const G4MaterialCutsCouple *couple)
void SetVerboseLevel(G4int value)
void SetDEDXBinning(G4int nbins)
virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition *, const G4ParticleDefinition *)=0
G4PhysicsTable * theIonisationSubTable
G4double CrossSectionPerVolume(G4double kineticEnergy, const G4MaterialCutsCouple *couple)
std::vector< G4DynamicParticle * > secParticles
size_t idxDEDXunRestricted
const std::vector< G4int > * GetCoupleIndexes()
void SetMinKinEnergy(G4double e)
G4EmModelManager * modelManager