G4VAtomDeexcitation
Abstract interface to energy loss models
class
public:
explicit G4VAtomDeexcitation(const G4String& modname = "Deexcitation");
virtual ~G4VAtomDeexcitation();
//========== initialization ==========
// Overall initialisation before new run
void InitialiseAtomicDeexcitation();
// Initialisation of deexcitation at the beginning of run
virtual void InitialiseForNewRun() = 0;
// Initialisation for a concrete atom
// May be called at run time
virtual void InitialiseForExtraAtom(G4int Z) = 0;
void SetDeexcitationActiveRegion(const G4String& rname,
G4bool valDeexcitation,
G4bool valAuger,
G4bool valPIXE);
// Activation of deexcitation
inline void SetFluo(G4bool);
inline G4bool IsFluoActive() const;
// Activation of Auger electron production
inline void SetAuger(G4bool);
inline G4bool IsAugerActive() const;
// Activation of Auger cascade
inline void SetAugerCascade(G4bool);
inline G4bool IsAugerCascadeActive() const;
// Activation of PIXE simulation
inline void SetPIXE(G4bool);
inline G4bool IsPIXEActive() const;
// Deexcitation model name
inline const G4String& GetName() const;
// Access to the list of atoms active for deexcitation
inline const std::vector<G4bool>& GetListOfActiveAtoms() const;
// Verbosity level
inline void SetVerboseLevel(G4int);
inline G4int GetVerboseLevel() const;
//========== Run time methods ==========
// Check if deexcitation is active for a given geometry volume
inline G4bool CheckDeexcitationActiveRegion(G4int coupleIndex);
inline G4bool CheckAugerActiveRegion(G4int coupleIndex);
// Get atomic shell by shell index, used by discrete processes
// (for example, photoelectric), when shell vacancy sampled by the model
virtual
const G4AtomicShell* GetAtomicShell(G4int Z,
G4AtomicShellEnumerator shell) = 0;
// generation of deexcitation for given atom and shell vacancy
inline void GenerateParticles(std::vector<G4DynamicParticle*>* secVect,
const G4AtomicShell*,
G4int Z,
G4int coupleIndex);
// generation of deexcitation for given atom and shell vacancy
virtual void GenerateParticles(std::vector<G4DynamicParticle*>* secVect,
const G4AtomicShell*,
G4int Z,
G4double gammaCut,
G4double eCut) = 0;
// access or compute PIXE cross section
virtual G4double
GetShellIonisationCrossSectionPerAtom(const G4ParticleDefinition*,
G4int Z,
G4AtomicShellEnumerator shell,
G4double kinE,
const G4Material* mat = nullptr) = 0;
// access or compute PIXE cross section
virtual G4double
ComputeShellIonisationCrossSectionPerAtom(
const G4ParticleDefinition*,
G4int Z,
G4AtomicShellEnumerator shell,
G4double kinE,
const G4Material* mat = nullptr) = 0;
// Sampling of PIXE for ionisation processes
void AlongStepDeexcitation(std::vector<G4Track*>& tracks,
const G4Step& step,
G4double& eLoss,
G4int coupleIndex);
private:
// copy constructor and hide assignment operator
G4VAtomDeexcitation(G4VAtomDeexcitation &) = delete;
G4VAtomDeexcitation & operator=(const G4VAtomDeexcitation &right) = delete;
G4EmParameters* theParameters;
const G4ParticleDefinition* gamma;
G4ProductionCutsTable* theCoupleTable;
G4int verbose;
G4String name;
G4bool isActive;
G4bool flagAuger;
G4bool flagAugerCascade;
G4bool flagPIXE;
G4bool ignoreCuts;
G4bool isActiveLocked;
G4bool isAugerLocked;
G4bool isAugerCascadeLocked;
G4bool isPIXELocked;
std::vector<G4bool> activeZ;
std::vector<G4bool> activeDeexcitationMedia;
std::vector<G4bool> activeAugerMedia;
std::vector<G4bool> activePIXEMedia;
std::vector<G4String> activeRegions;
std::vector<G4bool> deRegions;
std::vector<G4bool> AugerRegions;
std::vector<G4bool> PIXERegions;
std::vector<G4DynamicParticle*> vdyn;
static G4int pixeIDg;
static G4int pixeIDe;