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;
© Hongyi Wu            updated: 2018-09-01 13:06:39

results matching ""

    No results matching ""