94 #ifndef G4VEnergyLossProcess_h
95 #define G4VEnergyLossProcess_h 1
216 G4bool ascii =
false)
override;
628 G4double kinEnergy,
size_t& idx)
const
G4double GetKineticEnergy(G4double &range, const G4MaterialCutsCouple *)
G4VEnergyLossProcess(const G4String &name="EnergyLoss", G4ProcessType type=fElectromagnetic)
G4double condition(const G4ErrorSymMatrix &m)
G4LossTableManager * lManager
std::vector< G4double > theEnergyOfCrossSectionMax
void SetDEDXTable(G4PhysicsTable *p, G4EmTableType tType)
void SetIntegral(G4bool val)
G4double preStepKinEnergy
G4GPILSelection aGPILSelection
void SetDynamicMassCharge(G4double massratio, G4double charge2ratio)
void PrintInfoDefinition(const G4ParticleDefinition &part)
void SetIonisation(G4bool val)
virtual void BuildPhysicsTable(const G4ParticleDefinition &) override
G4double GetDEDX(G4double &kineticEnergy, const G4MaterialCutsCouple *)
G4PhysicsTable * SubLambdaTable() const
G4VEmModel * currentModel
virtual G4double GetContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety) override
G4PhysicsTable * RangeTableForLoss() const
const std::vector< G4double > * theDensityFactor
G4PhysicsTable * SecondaryRangeTable() const
G4double GetRangeForLoss(G4double &kineticEnergy, const G4MaterialCutsCouple *)
void AddCollaborativeProcess(G4VEnergyLossProcess *)
const std::vector< G4int > * theDensityIdx
void SetLinearLossLimit(G4double val)
const G4ParticleDefinition * secondaryParticle
G4PhysicsTable * CSDARangeTable() const
G4PhysicsTable * theSecondaryRangeTable
G4VEmFluctuationModel * fluctModel
G4ParticleChangeForLoss fParticleChange
G4double GetCSDARange(G4double &kineticEnergy, const G4MaterialCutsCouple *)
virtual G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
G4VSubCutProducer * subcutProducer
void SelectModel(G4double kinEnergy)
G4PhysicsTable * theIonisationTable
G4VEmModel * GetModelByIndex(G4int idx=0, G4bool ver=false) const
size_t currentCoupleIndex
G4int NumberOfModels() const
virtual G4bool IsApplicable(const G4ParticleDefinition &p) override=0
G4PhysicsTable * IonisationTableForSubsec() const
G4double GetDEDXForSubsec(G4double &kineticEnergy, const G4MaterialCutsCouple *)
virtual G4VParticleChange * AlongStepDoIt(const G4Track &, const G4Step &) override
const char * name(G4int ptype)
void ActivateSecondaryBiasing(const G4String ®ion, G4double factor, G4double energyLimit)
G4double preStepRangeEnergy
void SetFluctModel(G4VEmFluctuationModel *)
G4PhysicsVector * LambdaPhysicsVector(const G4MaterialCutsCouple *, G4double cut)
G4PhysicsTable * IonisationTable() const
G4VAtomDeexcitation * atomDeexcitation
G4PhysicsTable * BuildLambdaTable(G4EmTableType tType=fRestricted)
void SetStepFunction(G4double v1, G4double v2, G4bool lock=true)
G4bool lossFluctuationFlag
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
const G4ParticleDefinition * theGamma
const G4MaterialCutsCouple * currentCouple
void PrintWarning(G4String, G4double val)
const G4DataVector * theCuts
G4PhysicsTable * theSubLambdaTable
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *fluc=0, const G4Region *region=nullptr)
G4PhysicsTable * LambdaTable() const
void SetInverseRangeTable(G4PhysicsTable *p)
const G4ParticleDefinition * SecondaryParticle() const
void SetCrossSectionBiasingFactor(G4double f, G4bool flag=true)
G4VEmFluctuationModel * FluctModel()
G4double SampleSubCutSecondaries(std::vector< G4Track * > &, const G4Step &, G4VEmModel *model, G4int matIdx)
const G4ParticleDefinition * baseParticle
void FillSecondariesAlongStep(G4double &eloss, G4double &weight)
const G4DataVector * theSubCuts
G4PhysicsTable * DEDXTable() const
G4double ScaledKinEnergyForLoss(G4double range)
G4double GetDEDXForScaledEnergy(G4double scaledKinEnergy)
const G4Element * GetCurrentElement() const
const G4ParticleDefinition * theGenericIon
const G4ParticleDefinition * thePositron
void ComputeLambdaForScaledEnergy(G4double scaledKinEnergy)
std::vector< G4Track * > scTracks
void SetLossFluctuations(G4bool val)
G4double preStepScaledEnergy
G4double GetIonisationForScaledEnergy(G4double scaledKinEnergy)
G4double GetSubDEDXForScaledEnergy(G4double scaledKinEnergy)
G4PhysicsTable * theCSDARangeTable
void ActivateForcedInteraction(G4double length, const G4String ®ion, G4bool flag=true)
virtual ~G4VEnergyLossProcess()
G4int NumberOfSubCutoffRegions() const
G4bool IsIntegral() const
void SetMaxKinEnergy(G4double e)
G4double GetLambda(G4double &kineticEnergy, const G4MaterialCutsCouple *)
std::vector< G4double > theDEDXAtMaxEnergy
const G4ParticleDefinition * BaseParticle() const
const G4ParticleDefinition * particle
virtual void ProcessDescription(std::ostream &outFile) const
G4PhysicsTable * DEDXTableForSubsec() const
G4double Energy(size_t index) const
G4double Value(G4double theEnergy, size_t &lastidx) const
void SetSecondaryParticle(const G4ParticleDefinition *p)
std::vector< const G4Region * > scoffRegions
G4PhysicsTable * theLambdaTable
const G4ParticleDefinition * theElectron
const G4Material * currentMaterial
void SetLambdaTable(G4PhysicsTable *p)
G4PhysicsTable * theInverseRangeTable
G4SafetyHelper * safetyHelper
std::vector< G4double > theCrossSectionMax
virtual void PrintInfo()=0
G4PhysicsTable * InverseRangeTable() const
G4double CrossSectionBiasingFactor() const
virtual void StartTracking(G4Track *) override
const G4ParticleDefinition * Particle() const
G4double maxKinEnergyCSDA
void SetCurrentCouple(const G4MaterialCutsCouple *)
virtual G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii) override
G4double MeanFreePath(const G4Track &track)
G4PhysicsTable * theDEDXunRestrictedTable
void UpdateEmModel(const G4String &, G4double, G4double)
G4bool StoreTable(const G4ParticleDefinition *p, G4PhysicsTable *, G4bool ascii, const G4String &directory, const G4String &tname)
G4bool TablesAreBuilt() const
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety, G4GPILSelection *selection) override
virtual void PreparePhysicsTable(const G4ParticleDefinition &) override
G4PhysicsTable * theRangeTableForLoss
void SetEmModel(G4VEmModel *, G4int index=1)
G4double ContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety)
G4double MinKinEnergy() const
std::vector< G4VEmModel * > emModels
G4double GetLimitScaledRangeForScaledEnergy(G4double scaledKinEnergy)
G4double MaxKinEnergy() const
G4VEmModel * SelectModel(G4double &energy, size_t &index)
void SetCSDARangeTable(G4PhysicsTable *pRange)
G4double GetDEDXDispersion(const G4MaterialCutsCouple *couple, const G4DynamicParticle *dp, G4double length)
G4double GetSubIonisationForScaledEnergy(G4double scaledKinEnergy)
G4double GetLambdaForScaledEnergy(G4double scaledKinEnergy)
void SetSecondaryRangeTable(G4PhysicsTable *p)
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
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &) override
void SetLowestEnergyLimit(G4double)
G4VEnergyLossProcess & operator=(const G4VEnergyLossProcess &right)=delete
void SetSubLambdaTable(G4PhysicsTable *p)
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition *, const G4Material *, G4double cut)
G4EmBiasingManager * biasManager
void SetRangeTableForLoss(G4PhysicsTable *p)
G4PhysicsTable * theDEDXSubTable
virtual G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false) override
G4EmParameters * theParameters
G4double GetScaledRangeForScaledEnergy(G4double scaledKinEnergy)
void SetParticle(const G4ParticleDefinition *p)
void SetBaseParticle(const G4ParticleDefinition *p)
std::vector< G4VEnergyLossProcess * > scProcesses
G4PhysicsTable * BuildDEDXTable(G4EmTableType tType=fRestricted)
G4VEmModel * EmModel(G4int index=1) const
void DefineMaterial(const G4MaterialCutsCouple *couple)
G4VEmModel * SelectModelForMaterial(G4double kinEnergy, size_t &idx) const
void SetDEDXBinning(G4int nbins)
G4double GetRange(G4double &kineticEnergy, const G4MaterialCutsCouple *)
virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition *, const G4ParticleDefinition *)=0
const G4Material * GetMaterial() const
G4PhysicsTable * theIonisationSubTable
size_t CurrentMaterialCutsCoupleIndex() const
G4double CrossSectionPerVolume(G4double kineticEnergy, const G4MaterialCutsCouple *couple)
std::vector< G4DynamicParticle * > secParticles
size_t idxDEDXunRestricted
G4bool IsIonisationProcess() const
void SetMinKinEnergy(G4double e)
G4EmModelManager * modelManager