225 G4int& numberOfRecoil);
393 [[deprecated(
"Use G4EmParameters::Instance()->SetLPM instead")]]
416 const G4Element* fCurrentElement =
nullptr;
417 std::vector<G4EmElementSelector*>* elmSelectors =
nullptr;
441 G4int nSelectors = 0;
452 G4bool flagDeexcitation =
false;
453 G4bool flagForceBuildTable =
false;
457 G4bool localElmSelectors =
true;
458 G4bool useAngularGenerator =
false;
459 G4bool useBaseMaterials =
false;
461 G4bool localChange =
false;
464 std::vector<G4double> xsec;
472 if(fCurrentCouple != ptr) {
473 fCurrentCouple = ptr;
477 if(useBaseMaterials) {
490 return fCurrentCouple;
497 fCurrentElement = elm;
530 cutEnergy,maxEnergy);
543 return (cross > 0.0) ? 1./cross :
DBL_MAX;
555 fCurrentElement = elm;
557 cutEnergy,maxEnergy);
570 fCurrentElement = (nSelectors > 0) ?
571 ((*elmSelectors)[couple->
GetIndex()])->SelectRandomAtom(kinEnergy) :
573 return fCurrentElement;
587 fCurrentElement = (nSelectors > 0)
588 ? ((*elmSelectors)[couple->
GetIndex()])->SelectRandomAtom(kinEnergy,logKinE)
590 return fCurrentElement;
621 return fTripletModel;
628 if(p != fTripletModel) {
629 delete fTripletModel;
666 return polarAngleLimit;
673 return secondaryThreshold;
680 return flagDeexcitation;
687 return flagForceBuildTable;
694 return useAngularGenerator;
701 useAngularGenerator = val;
722 useBaseMaterials = val;
729 return useBaseMaterials;
764 return (kinEnergy >= eMinActive && kinEnergy <= eMaxActive);
771 if(!isLocked) { polarAngleLimit = val; }
778 secondaryThreshold = val;
785 flagDeexcitation = val;
792 flagForceBuildTable = val;
814 if(p != elmSelectors) {
816 nSelectors = (
nullptr != elmSelectors) ?
G4int(elmSelectors->size()) : 0;
817 localElmSelectors =
false;
const G4ParticleDefinition * GetParticleDefinition() const
G4double GetKineticEnergy() const
const G4Material * GetMaterial() const
G4Region defines a region or a group of regions in the detector geometry setup, sharing properties as...
virtual void FillNumberOfSecondaries(G4int &numberOfTriplets, G4int &numberOfRecoil)
void SetMasterThread(G4bool)
void SetCrossSectionTable(G4PhysicsTable *, G4bool isLocal)
G4int SelectIsotopeNumber(const G4Element *) const
void SetPolarAngleLimit(G4double)
G4VEmModel(const G4VEmModel &)=delete
virtual G4double MinPrimaryEnergy(const G4Material *, const G4ParticleDefinition *, G4double cut=0.0)
G4PhysicsTable * xSectionTable
void SetHighEnergyLimit(G4double)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
const std::vector< G4double > * theDensityFactor
G4VEmFluctuationModel * GetModelOfFluctuations()
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
virtual G4double GetParticleCharge(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
std::size_t currentCoupleIndex
void SetActivationLowEnergyLimit(G4double)
G4double PolarAngleLimit() const
G4VEmAngularDistribution * GetAngularDistribution()
virtual void InitialiseForMaterial(const G4ParticleDefinition *, const G4Material *)
void SetForceBuildTable(G4bool val)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4double LowEnergyLimit() const
std::vector< G4EmElementSelector * > * GetElementSelectors()
G4int SelectRandomAtomNumber(const G4Material *) const
void SetSecondaryThreshold(G4double)
G4VEmModel * GetTripletModel()
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
void SetCurrentCouple(const G4MaterialCutsCouple *)
G4double ComputeMeanFreePath(const G4ParticleDefinition *, G4double kineticEnergy, const G4Material *, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
void SetAngularGeneratorFlag(G4bool)
void SetParticleChange(G4VParticleChange *, G4VEmFluctuationModel *f=nullptr)
std::size_t basedCoupleIndex
void SetFluctuationFlag(G4bool val)
virtual void InitialiseForElement(const G4ParticleDefinition *, G4int Z)
virtual G4double Value(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy)
G4double HighEnergyLimit() const
virtual void CorrectionsAlongStep(const G4Material *, const G4ParticleDefinition *, const G4double kinEnergy, const G4double cutEnergy, const G4double &length, G4double &eloss)
G4double ComputeDEDX(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
void SetCurrentElement(const G4Element *)
G4VParticleChange * pParticleChange
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
const G4Material * pBaseMaterial
const G4Isotope * GetCurrentIsotope(const G4Element *elm=nullptr) const
virtual void DefineForRegion(const G4Region *)
virtual void ModelDescription(std::ostream &outFile) const
void SetLowEnergyLimit(G4double)
virtual void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
void SetActivationHighEnergyLimit(G4double)
void SetTripletModel(G4VEmModel *)
G4ElementData * fElementData
G4double HighEnergyActivationLimit() const
void SetDeexcitationFlag(G4bool val)
G4double CrossSection(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
G4VEmModel(const G4String &nam)
void SetAngularDistribution(G4VEmAngularDistribution *)
G4bool IsActive(G4double kinEnergy) const
virtual G4double ComputeCrossSectionPerShell(const G4ParticleDefinition *, G4int Z, G4int shellIdx, G4double kinEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
const G4MaterialCutsCouple * CurrentCouple() const
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin=0.0, G4double tmax=DBL_MAX)=0
const std::vector< G4int > * theDensityIdx
G4bool DeexcitationFlag() const
virtual G4double GetChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
G4bool UseAngularGeneratorFlag() const
const G4String & GetName() const
const G4Element * GetCurrentElement(const G4Material *mat=nullptr) const
const G4Element * SelectTargetAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double logKineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
virtual G4double GetPartialCrossSection(const G4Material *, G4int level, const G4ParticleDefinition *, G4double kineticEnergy)
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
G4PhysicsTable * GetCrossSectionTable()
void SetUseBaseMaterials(G4bool val)
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)=0
G4bool UseBaseMaterials() const
G4double LowEnergyActivationLimit() const
virtual void StartTracking(G4Track *)
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel)
virtual G4double MinEnergyCut(const G4ParticleDefinition *, const G4MaterialCutsCouple *)
G4bool ForceBuildTableFlag() const
G4double MaxSecondaryKinEnergy(const G4DynamicParticle *dynParticle)
G4double SecondaryThreshold() const
G4VEmModel & operator=(const G4VEmModel &right)=delete
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition *, G4double kineticEnergy)
virtual G4double ChargeSquareRatio(const G4Track &)
G4ElementData * GetElementData()
G4ParticleChangeForLoss * GetParticleChangeForLoss()