Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 // Author: Luciano Pandola 27 // Author: Luciano Pandola 28 // 28 // 29 // History: 29 // History: 30 // ----------- 30 // ----------- 31 // 14 Mar 2012 L. Pandola 1st implementati 31 // 14 Mar 2012 L. Pandola 1st implementation. 32 // 32 // 33 // ------------------------------------------- 33 // ------------------------------------------------------------------- 34 // 34 // 35 //! Class description: 35 //! Class description: 36 //! Access to Penelope ionisation cross secti 36 //! Access to Penelope ionisation cross sections for e- and e+. To be 37 //! registered as a specific model in G4UAtom 37 //! registered as a specific model in G4UAtomicDeexcitation. 38 //! 38 //! 39 //! NOTICE: working only for e- at the moment 39 //! NOTICE: working only for e- at the moment (no interface available for 40 //! e+) 40 //! e+) 41 //! 41 //! 42 // ------------------------------------------- 42 // ------------------------------------------------------------------- 43 43 44 #ifndef G4PENELOPEIONISATIONCROSSSECTION_HH 44 #ifndef G4PENELOPEIONISATIONCROSSSECTION_HH 45 #define G4PENELOPEIONISATIONCROSSSECTION_HH 1 45 #define G4PENELOPEIONISATIONCROSSSECTION_HH 1 46 46 47 #include "globals.hh" 47 #include "globals.hh" 48 #include "G4VhShellCrossSection.hh" 48 #include "G4VhShellCrossSection.hh" 49 #include <map> 49 #include <map> 50 50 51 class G4AtomicTransitionManager; 51 class G4AtomicTransitionManager; 52 class G4PenelopeOscillatorManager; 52 class G4PenelopeOscillatorManager; 53 class G4PenelopeOscillator; 53 class G4PenelopeOscillator; 54 class G4PenelopeCrossSection; 54 class G4PenelopeCrossSection; 55 class G4PenelopeIonisationXSHandler; 55 class G4PenelopeIonisationXSHandler; 56 56 57 class G4PenelopeIonisationCrossSection : publi 57 class G4PenelopeIonisationCrossSection : public G4VhShellCrossSection 58 { 58 { 59 public: 59 public: 60 //! Constructor. 60 //! Constructor. 61 explicit G4PenelopeIonisationCrossSection(); 61 explicit G4PenelopeIonisationCrossSection(); 62 62 63 //! Destructor. Clean all tables. 63 //! Destructor. Clean all tables. 64 ~G4PenelopeIonisationCrossSection(); 64 ~G4PenelopeIonisationCrossSection(); 65 65 66 //! Purely virtual method from the base inte 66 //! Purely virtual method from the base interface. Returns the cross 67 //! section for all levels of element Z in m 67 //! section for all levels of element Z in material mat at the 68 //! given energy 68 //! given energy 69 std::vector<G4double> GetCrossSection(G4int 69 std::vector<G4double> GetCrossSection(G4int Z, 70 G4double incidentEnergy, 70 G4double incidentEnergy, 71 G4double mass, 71 G4double mass, 72 G4double deltaEnergy, 72 G4double deltaEnergy, 73 const G4Material* mat) override; 73 const G4Material* mat) override; 74 74 75 //! Purely virtual method from the base inte 75 //! Purely virtual method from the base interface. Returns the 76 //! cross section for the given shell in the 76 //! cross section for the given shell in the element Z of material 77 //! mat at the specified energy 77 //! mat at the specified energy 78 G4double CrossSection(G4int Z, 78 G4double CrossSection(G4int Z, 79 G4AtomicShellEnumerator shell, 79 G4AtomicShellEnumerator shell, 80 G4double incidentEnergy, 80 G4double incidentEnergy, 81 G4double mass, 81 G4double mass, 82 const G4Material* mat) override; 82 const G4Material* mat) override; 83 83 84 //! Purely virtual method from the base inte 84 //! Purely virtual method from the base interface. Returns the 85 //! shell ionisation probabilities for the g 85 //! shell ionisation probabilities for the given Z in the 86 //! material mat at the specified energy. 86 //! material mat at the specified energy. 87 std::vector<G4double> Probabilities(G4int Z, 87 std::vector<G4double> Probabilities(G4int Z, 88 G4double incidentEnergy, 88 G4double incidentEnergy, 89 G4double mass, 89 G4double mass, 90 G4double deltaEnergy, 90 G4double deltaEnergy, 91 const G4Material* mat) override; 91 const G4Material* mat) override; 92 //! Getter/setter for the verbosity level 92 //! Getter/setter for the verbosity level 93 void SetVerbosityLevel(G4int vl){fVerboseLev 93 void SetVerbosityLevel(G4int vl){fVerboseLevel = vl;}; 94 G4int GetVerbosityLevel(){return fVerboseLev 94 G4int GetVerbosityLevel(){return fVerboseLevel;}; 95 95 96 G4PenelopeIonisationCrossSection & operator= 96 G4PenelopeIonisationCrossSection & operator=(const G4PenelopeIonisationCrossSection &right) 97 = delete; 97 = delete; 98 G4PenelopeIonisationCrossSection(const G4Pen 98 G4PenelopeIonisationCrossSection(const G4PenelopeIonisationCrossSection&) = delete; 99 99 100 private: 100 private: 101 //!The shells in Penelope are organized per 101 //!The shells in Penelope are organized per *material*, rather than per 102 //!element, so given a material one has to f 102 //!element, so given a material one has to find the proper index for the 103 //!given Z and shellID. An appropriate look- 103 //!given Z and shellID. An appropriate look-up table is used to avoid 104 //!recalculation. 104 //!recalculation. 105 G4int FindShellIDIndex(const G4Material* mat 105 G4int FindShellIDIndex(const G4Material* mat,G4int Z,G4AtomicShellEnumerator shell); 106 106 107 std::map< std::pair<const G4Material*,G4int> 107 std::map< std::pair<const G4Material*,G4int>, G4DataVector*> *fShellIDTable; 108 108 109 //Oscillator manager 109 //Oscillator manager 110 G4PenelopeOscillatorManager* fOscManager; 110 G4PenelopeOscillatorManager* fOscManager; 111 G4PenelopeIonisationXSHandler* fCrossSection 111 G4PenelopeIonisationXSHandler* fCrossSectionHandler; 112 const G4AtomicTransitionManager* fTransition 112 const G4AtomicTransitionManager* fTransitionManager; 113 113 114 G4double fLowEnergyLimit; 114 G4double fLowEnergyLimit; 115 G4double fHighEnergyLimit; 115 G4double fHighEnergyLimit; 116 G4int fVerboseLevel; 116 G4int fVerboseLevel; 117 G4int fNMaxLevels; 117 G4int fNMaxLevels; 118 }; 118 }; 119 119 120 #endif 120 #endif 121 121 122 122