|
||||
File indexing completed on 2025-01-18 09:58:54
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 // Author: Luciano Pandola 0028 // 0029 // History: 0030 // ----------- 0031 // 18 Mar 2010 L. Pandola 1st implementation. 0032 // 09 Mar 2012 L. Pandola Add public method (and machinery) to return 0033 // the absolute and the normalized shell cross 0034 // sections independently. 0035 // 0036 // ------------------------------------------------------------------- 0037 // 0038 // Class description: 0039 // This class is a container for cross sections and transport momenta 0040 // calculated by Penelope models (ionisation, bremsstrahlung). It stores 0041 // PhysicsTables/PhysicsVectors of 0042 // a) the "hard quantities" (above the threshold), 0-th order (cross section) 0043 // 1-st order (= stopping XS), 2-nd order (= straggling XS) 0044 // b) the "soft quantities" (below threshold), 0-th order (cross section) 0045 // 1-st order (= stopping XS), 2-nd order (= straggling XS) 0046 // c) total hard cross sections for individual oscillators 0047 // vs. energy. Two versions are available, one with normalized values 0048 // (good for sampling) and one with absolute values. 0049 // 0050 // The interface *always* uses energy and cross sections, while internally 0051 // log(energy) and log(XS) are used. 0052 // 0053 // One instance per each cut-material couple should be created by the 0054 // calling class. 0055 // 0056 // Public method to retrieve hard cross section, soft stopping power, 0057 // total cross section and hard shell cross sections. 0058 // 0059 // Notice: all quantities stored here are *per molecule* 0060 // 0061 // ------------------------------------------------------------------- 0062 0063 #ifndef G4PENELOPECROSSSECTION_HH 0064 #define G4PENELOPECROSSSECTION_HH 1 0065 0066 #include "globals.hh" 0067 0068 class G4PhysicsTable; 0069 class G4DataVector; 0070 0071 class G4PenelopeCrossSection 0072 { 0073 0074 public: 0075 //constructor: one has to give the number of points in each PhysicsVector 0076 //(= dimension of the energy grid) and the number of shells (0 is the 0077 //default). 0078 explicit G4PenelopeCrossSection(size_t nOfEnergyPoints,size_t nOfShells=0); 0079 // 0080 ~G4PenelopeCrossSection(); 0081 0082 //! Returns total cross section at the given energy 0083 G4double GetTotalCrossSection(G4double energy) const; 0084 //! Returns hard cross section at the given energy 0085 G4double GetHardCrossSection(G4double energy) const; 0086 //! Returns the total stopping power due to soft collisions 0087 G4double GetSoftStoppingPower(G4double energy) const; 0088 //! Returns the hard cross section for the given shell (per molecule) 0089 G4double GetShellCrossSection(size_t shellID,G4double energy) const; 0090 //! Returns the hard cross section for the given shell (normalized to 1) 0091 G4double GetNormalizedShellCrossSection(size_t shellID,G4double energy) const; 0092 0093 size_t GetNumberOfShells() const {return fNumberOfShells;}; 0094 0095 //! 0096 //! Public interface for the master thread 0097 //! 0098 void AddCrossSectionPoint(size_t binNumber, 0099 G4double energy,G4double XH0, G4double XH1, 0100 G4double XH2, 0101 G4double XS0, G4double XS1, G4double XS2); 0102 void AddShellCrossSectionPoint(size_t binNumber, 0103 size_t shellID,G4double energy,G4double xs); 0104 void NormalizeShellCrossSections(); 0105 0106 G4PenelopeCrossSection & operator=(const G4PenelopeCrossSection &right) = delete; 0107 G4PenelopeCrossSection(const G4PenelopeCrossSection&) = delete; 0108 0109 private: 0110 //all tables are log. XS vs. log E 0111 0112 //XS0, XS1, XS2 in Penelope nomenclature 0113 G4PhysicsTable* fSoftCrossSections; 0114 0115 //XH0, XH1, XH2 in Penelope nomenclature 0116 G4PhysicsTable* fHardCrossSections; 0117 0118 //XS for individual shells 0119 G4PhysicsTable* fShellCrossSections; 0120 G4PhysicsTable* fShellNormalizedCrossSections; 0121 0122 size_t fNumberOfEnergyPoints; 0123 size_t fNumberOfShells; 0124 G4bool fIsNormalized; 0125 }; 0126 0127 #endif 0128
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |