Back to home page

EIC code displayed by LXR

 
 

    


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