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