66 flucModel(nullptr),anglModel(nullptr), name(nam), lowLimit(0.1*
CLHEP::keV),
67 highLimit(100.0*
CLHEP::TeV),eMinActive(0.0),eMaxActive(
DBL_MAX),
69 theLPMflag(false),flagDeexcitation(false),flagForceBuildTable(false),
70 isMaster(true),fElementData(nullptr),pParticleChange(nullptr),
71 xSectionTable(nullptr),pBaseMaterial(nullptr),idxTable(0),
73 fCurrentCouple(nullptr),fCurrentElement(nullptr),fCurrentIsotope(nullptr),
74 fTripletModel(nullptr),nsec(5)
78 elmSelectors =
nullptr;
79 localElmSelectors =
true;
81 useAngularGenerator =
false;
82 useBaseMaterials =
true;
96 if(localElmSelectors) {
97 for(
G4int i=0; i<nSelectors; ++i) {
98 delete (*elmSelectors)[i];
161 if(highLimit <= lowLimit) {
return; }
171 elmSelectors =
new std::vector<G4EmElementSelector*>;
173 if(numOfCouples > nSelectors) {
174 for(
G4int i=nSelectors; i<numOfCouples; ++i) {
175 elmSelectors->push_back(
nullptr);
177 nSelectors = numOfCouples;
181 for(
G4int i=0; i<numOfCouples; ++i) {
184 if(cuts[i] ==
DBL_MAX) {
continue; }
192 if((*elmSelectors)[i]) {
193 if(material == ((*elmSelectors)[i])->GetMaterial()) { create =
false; }
194 else {
delete (*elmSelectors)[i]; }
199 G4double emax = std::max(highLimit, 10*emin);
202 nbins = std::max(nbins, 3);
207 ((*elmSelectors)[i])->
Initialise(part, cuts[i]);
229 if(material !=
nullptr) {
231 for(
size_t i=0; i<n; ++i) {
262 const G4double* theAtomNumDensityVector =
269 for (
G4int i=0; i<nelm; ++i) {
270 cross += theAtomNumDensityVector[i]*
304 for(
size_t i=0; i<n; ++i) {
311 return fCurrentElement;
324 for(
size_t i=0; i<nn; ++i) {
346 for(; idx<ni; ++idx) {
354 return fCurrentIsotope->
GetN();
444 return kineticEnergy;
459 if(flucModel != f) { flucModel = f; }
473 localTable = isLocal;
480 outFile <<
"The description for this model has not been written yet.\n";
G4double G4Log(G4double x)
G4double * GetRelativeAbundanceVector() const
const G4Isotope * GetIsotope(G4int iso) const
size_t GetNumberOfIsotopes() const
static G4EmParameters * Instance()
G4int NumberOfBinsPerDecade() const
const std::vector< G4double > * GetDensityFactors() const
const std::vector< G4int > * GetCoupleIndexes() const
static G4LossTableManager * Instance()
G4LossTableBuilder * GetTableBuilder()
void DeRegister(G4VEnergyLossProcess *p)
void Register(G4VEnergyLossProcess *p)
const G4Material * GetMaterial() const
G4double GetTotNbOfAtomsPerVolume() const
const G4Element * GetElement(G4int iel) const
size_t GetNumberOfElements() const
const G4double * GetVecNbOfAtomsPerVolume() const
G4double GetPDGCharge() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
std::size_t GetTableSize() const
static G4ProductionCutsTable * GetProductionCutsTable()
const G4ParticleDefinition * GetParticleDefinition() const
G4Material * GetMaterial() const
G4double GetKineticEnergy() const
void SetCrossSectionTable(G4PhysicsTable *, G4bool isLocal)
virtual G4double MinPrimaryEnergy(const G4Material *, const G4ParticleDefinition *, G4double cut=0.0)
G4PhysicsTable * xSectionTable
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length)
const std::vector< G4double > * theDensityFactor
virtual G4double GetParticleCharge(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
virtual void InitialiseForMaterial(const G4ParticleDefinition *, const G4Material *)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
void SetCurrentCouple(const G4MaterialCutsCouple *)
void SetParticleChange(G4VParticleChange *, G4VEmFluctuationModel *f=nullptr)
virtual void InitialiseForElement(const G4ParticleDefinition *, G4int Z)
G4int SelectRandomAtomNumber(const G4Material *)
virtual G4double Value(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy)
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
virtual void DefineForRegion(const G4Region *)
virtual void ModelDescription(std::ostream &outFile) const
G4int SelectIsotopeNumber(const G4Element *)
virtual void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
G4ElementData * fElementData
G4VEmModel(const G4String &nam)
virtual G4double ComputeCrossSectionPerShell(const G4ParticleDefinition *, G4int Z, G4int shellIdx, G4double kinEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
const std::vector< G4int > * theDensityIdx
virtual G4double GetChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
virtual G4double GetPartialCrossSection(const G4Material *, G4int level, const G4ParticleDefinition *, G4double kineticEnergy)
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)=0
virtual void StartTracking(G4Track *)
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel)
virtual G4double MinEnergyCut(const G4ParticleDefinition *, const G4MaterialCutsCouple *)
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition *, G4double kineticEnergy)
virtual G4double ChargeSquareRatio(const G4Track &)
G4ParticleChangeForLoss * GetParticleChangeForLoss()