Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:59:15

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 //
0027 // -------------------------------------------------------------------
0028 //
0029 // Geant4 Header G4UAtomicDeexcitation
0030 //  
0031 // Authors: Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
0032 //
0033 // Created 22 April 2010 from old G4AtomicDeexcitation class 
0034 //
0035 // Modified:
0036 // ---------
0037 //  
0038 //
0039 // -------------------------------------------------------------------
0040 //
0041 // Class description:
0042 // Implementation of atomic deexcitation 
0043 //
0044 // -------------------------------------------------------------------
0045 
0046 #ifndef G4UAtomicDeexcitation_h
0047 #define G4UAtomicDeexcitation_h 1
0048 
0049 #include "G4VAtomDeexcitation.hh"
0050 #include "G4AtomicShell.hh"
0051 #include "globals.hh"
0052 #include "G4DynamicParticle.hh"
0053 #include <vector>
0054 
0055 class G4AtomicTransitionManager;
0056 class G4VhShellCrossSection;
0057 class G4EmCorrections;
0058 class G4Material;
0059 
0060 class G4UAtomicDeexcitation : public G4VAtomDeexcitation
0061 {  
0062 public: 
0063   explicit G4UAtomicDeexcitation();
0064   virtual ~G4UAtomicDeexcitation();
0065    
0066   //=================================================================
0067   // methods that are requested to be implemented by the interface
0068   //=================================================================
0069   /// initialisation methods
0070   void InitialiseForNewRun() override;
0071   void InitialiseForExtraAtom(G4int Z) override;
0072 
0073   /// Set threshold energy for fluorescence 
0074   void SetCutForSecondaryPhotons(G4double cut);
0075 
0076   /// Set threshold energy for Auger electron production
0077   void SetCutForAugerElectrons(G4double cut);
0078   
0079 
0080   /// Get atomic shell by shell index, used by discrete processes 
0081   /// (for example, photoelectric), when shell vacancy sampled by the model
0082   const G4AtomicShell* GetAtomicShell(G4int Z, 
0083                       G4AtomicShellEnumerator shell) override;
0084 
0085   /// generation of deexcitation for given atom, shell vacancy and cuts
0086   void GenerateParticles(std::vector<G4DynamicParticle*>* secVect,  
0087              const G4AtomicShell*, 
0088              G4int Z,
0089              G4double gammaCut,
0090              G4double eCut) override;
0091   
0092   ///  access or compute PIXE cross section 
0093   G4double GetShellIonisationCrossSectionPerAtom(const G4ParticleDefinition*, 
0094                          G4int Z, 
0095                          G4AtomicShellEnumerator shell,
0096                          G4double kinE,
0097                                                  const G4Material* mat = nullptr) override;
0098 
0099   ///  access or compute PIXE cross section 
0100   G4double ComputeShellIonisationCrossSectionPerAtom(const G4ParticleDefinition*, 
0101                              G4int Z, 
0102                              G4AtomicShellEnumerator shell,
0103                              G4double kinE,
0104                              const G4Material* mat = nullptr) override; 
0105 
0106   G4UAtomicDeexcitation(G4UAtomicDeexcitation &) = delete;
0107   G4UAtomicDeexcitation & operator=(const G4UAtomicDeexcitation &right) = delete;
0108 
0109 private:
0110   /// Decides wether a radiative transition is possible and, if it is,
0111   /// returns the identity of the starting shell for the transition
0112   G4int SelectTypeOfTransition(G4int Z, G4int shellId);
0113   
0114   /// Generates a particle from a radiative transition and returns it
0115   G4DynamicParticle* GenerateFluorescence(G4int Z, G4int shellId, 
0116                       G4int provShellId);
0117  
0118   /// Generates a particle from a non-radiative transition and returns it
0119   G4DynamicParticle* GenerateAuger(G4int Z, G4int shellId);
0120 
0121   ///Auger cascade by Burkhant Suerfu on March 24 2015 (Bugzilla 1727)
0122   ///Generates auger electron cascade.
0123   G4DynamicParticle* GenerateAuger(G4int Z, G4int shellId, G4int& newAugerShellId);
0124   G4AtomicTransitionManager* transitionManager;
0125 
0126   /// Data member for the calculation of the proton and alpha ionisation XS
0127   G4VhShellCrossSection* PIXEshellCS;
0128   G4VhShellCrossSection* anaPIXEshellCS;
0129   G4VhShellCrossSection* ePIXEshellCS;
0130   G4EmCorrections*       emcorr;
0131 
0132   const G4ParticleDefinition* theElectron;
0133   const G4ParticleDefinition* thePositron;
0134 
0135   //Auger cascade by Burkhant Suerfu on March 24 2015 (Bugzilla 1727)
0136   //Data member to keep track of cascading vacancies.
0137   std::vector<int> vacancyArray;
0138 
0139   /// Data member which stores the shells to be filled by 
0140   /// the radiative transition
0141   G4double minGammaEnergy;
0142   G4double minElectronEnergy;
0143   G4int newShellId;
0144 };
0145 
0146 #endif
0147 
0148 
0149 
0150