47#define G4VEmProcess_h 1
126 G4bool ascii =
false)
override;
208 size_t idxCouple)
const;
353 const std::vector<G4double>* theCuts =
nullptr;
354 const std::vector<G4double>* theCutsGamma =
nullptr;
355 const std::vector<G4double>* theCutsElectron =
nullptr;
356 const std::vector<G4double>* theCutsPositron =
nullptr;
369 const std::vector<G4double>* theDensityFactor =
nullptr;
370 const std::vector<G4int>* theDensityIdx =
nullptr;
395 G4int numberOfModels = 0;
396 G4int nLambdaBins = 84;
416 G4bool buildLambdaTable =
true;
418 G4bool startFromNull =
false;
420 G4bool actMinKinEnergy =
false;
421 G4bool actMaxKinEnergy =
false;
422 G4bool actBinning =
false;
425 G4bool weightFlag =
false;
436 std::vector<G4VEmModel*> emModels;
478 fFactor = biasFactor;
494 if(1 < numberOfModels) {
505 size_t idxCouple)
const
507 return modelManager->
SelectModel(kinEnergy, idxCouple);
535 return ((*theLambdaTablePrim)[
basedCoupleIndex])->LogVectorValue(e, loge)/e;
552 if(e >= minKinEnergyPrim) { fLambda = GetLambdaFromTablePrim(e); }
553 else if(
nullptr != theLambdaTable) { fLambda = GetLambdaFromTable(e); }
554 else { fLambda = ComputeCurrentLambda(e); }
567 if(e >= minKinEnergyPrim) { fLambda = GetLambdaFromTablePrim(e, loge); }
568 else if(
nullptr != theLambdaTable) { fLambda = GetLambdaFromTable(e, loge); }
569 else { fLambda = ComputeCurrentLambda(e); }
591 return GetCurrentLambda(kinEnergy, logKinEnergy);
600 const G4double xs = GetCurrentLambda(kinEnergy,
602 return (0.0 < xs) ? 1.0/xs :
DBL_MAX;
644 return theLambdaTable;
651 return theLambdaTablePrim;
658 theLambdaTable = ptr;
665 theLambdaTablePrim = ptr;
694 return secondaryParticle;
715 buildLambdaTable = val;
737 secondaryParticle = p;
758 return (*theDensityIdx)[idx];
765 return (*theDensityFactor)[idx];
793 return numberOfModels;
800 return (index < emModels.size()) ? emModels[index] :
nullptr;
807 return modelManager->
GetModel(idx, ver);
G4double condition(const G4ErrorSymMatrix &m)
G4double GetLogKineticEnergy() const
G4VEmModel * SelectModel(G4double energy, std::size_t index)
G4VEmModel * GetModel(G4int idx, G4bool ver=false) const
const G4Material * GetMaterial() const
const G4Material * GetBaseMaterial() const
const G4DynamicParticle * GetDynamicParticle() const
G4double GetKineticEnergy() const
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
void SetCurrentCouple(const G4MaterialCutsCouple *)
G4CrossSectionType CrossSectionType() const
void DefineMaterial(const G4MaterialCutsCouple *couple)
G4double GetGammaEnergyCut()
G4VEmModel * GetModelByIndex(G4int idx=0, G4bool ver=false) const
G4double MeanFreePath(const G4Track &track)
G4PhysicsVector * LambdaPhysicsVector(const G4MaterialCutsCouple *)
void CurrentSetup(const G4MaterialCutsCouple *, G4double energy)
const G4ParticleDefinition * Particle() const
virtual void StreamProcessInfo(std::ostream &) const
G4VEmModel * SelectModel(G4double kinEnergy, size_t)
G4EmBiasingManager * biasManager
void BuildPhysicsTable(const G4ParticleDefinition &) override
void SetLambdaTablePrim(G4PhysicsTable *)
G4VEmModel * EmModel(size_t index=0) const
void SetBuildTableFlag(G4bool val)
G4double preStepLogKinEnergy
G4double ComputeCrossSectionPerAtom(G4double kineticEnergy, G4double Z, G4double A=0., G4double cut=0.0)
G4VEmProcess(G4VEmProcess &)=delete
void SetEnergyOfCrossSectionMax(std::vector< G4double > *)
G4PhysicsTable * LambdaTable() const
std::vector< G4double > * theEnergyOfCrossSectionMax
virtual G4bool IsApplicable(const G4ParticleDefinition &p) override=0
void SetMinKinEnergy(G4double e)
G4double GetElectronEnergyCut()
G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &) override
G4int DensityIndex(G4int idx) const
void StartTracking(G4Track *) override
G4double GetCrossSection(const G4double kinEnergy, const G4MaterialCutsCouple *couple) override
G4double CrossSectionBiasingFactor() const
void AddEmModel(G4int, G4VEmModel *, const G4Region *region=nullptr)
void SetEmModel(G4VEmModel *, G4int index=0)
void SetCrossSectionBiasingFactor(G4double f, G4bool flag=true)
void SetEmMasterProcess(const G4VEmProcess *)
virtual void InitialiseProcess(const G4ParticleDefinition *)=0
void StreamInfo(std::ostream &outFile, const G4ParticleDefinition &, G4bool rst=false) const
void SetLambdaBinning(G4int nbins)
G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii) override
void SetSecondaryParticle(const G4ParticleDefinition *p)
const G4VEmModel * GetCurrentModel() const
void SetSplineFlag(G4bool val)
G4VEmModel * SelectModelForMaterial(G4double kinEnergy, size_t idxCouple) const
std::vector< G4double > * EnergyOfCrossSectionMax() const
G4bool UseBaseMaterial() const
G4int NumberOfModels() const
void SetCrossSectionType(G4CrossSectionType val)
void ProcessDescription(std::ostream &outFile) const override
G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
G4VEmProcess & operator=(const G4VEmProcess &right)=delete
G4double GetLambda(G4double kinEnergy, const G4MaterialCutsCouple *couple, G4double logKinEnergy)
const G4Element * GetTargetElement() const
G4double DensityFactor(G4int idx) const
virtual G4VEmProcess * GetEmProcess(const G4String &name)
G4double MaxKinEnergy() const
G4ParticleChangeForGamma * GetParticleChange()
const G4Isotope * GetTargetIsotope() const
G4double MinKinEnergy() const
std::vector< G4DynamicParticle * > secParticles
void ActivateForcedInteraction(G4double length=0.0, const G4String &r="", G4bool flag=true)
const G4MaterialCutsCouple * currentCouple
void SetStartFromNullFlag(G4bool val)
G4PhysicsTable * LambdaTablePrim() const
G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false) override
void ActivateSecondaryBiasing(const G4String ®ion, G4double factor, G4double energyLimit)
const G4MaterialCutsCouple * MaterialCutsCouple() const
G4double preStepKinEnergy
G4double PolarAngleLimit() const
size_t currentCoupleIndex
G4ParticleChangeForGamma fParticleChange
void SetLambdaTable(G4PhysicsTable *)
G4int LambdaBinning() const
void SetParticle(const G4ParticleDefinition *p)
void SetMinKinEnergyPrim(G4double e)
void PreparePhysicsTable(const G4ParticleDefinition &) override
void SetMaxKinEnergy(G4double e)
const G4Material * currentMaterial
size_t CurrentMaterialCutsCoupleIndex() const
const G4Element * GetCurrentElement() const
G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
const G4ParticleDefinition * SecondaryParticle() const