Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // ------------------------------------------------------------------- 28 // 29 // GEANT4 header file 30 // 31 // File name: G4NuclearLevelData 32 // 33 // Author: V.Ivanchenko 34 // 35 // Creation date: 9 February 2014 36 // 37 // Modifications: 38 // 39 // ------------------------------------------------------------------- 40 // 41 // Nuclear level data uploaded at initialisation of Geant4 from 42 // data files of the G4LEVELGAMMADATA 43 // 44 45 #ifndef G4NUCLEARLEVELDATA_HH 46 #define G4NUCLEARLEVELDATA_HH 1 47 48 #include "globals.hh" 49 #include "G4DeexPrecoParameters.hh" 50 #include <vector> 51 #include <iostream> 52 53 class G4LevelReader; 54 class G4LevelManager; 55 class G4PairingCorrection; 56 class G4ShellCorrection; 57 class G4Pow; 58 59 class G4NuclearLevelData 60 { 61 private: 62 63 G4NuclearLevelData(); 64 65 static G4NuclearLevelData* theInstance; 66 67 public: 68 69 static G4NuclearLevelData* GetInstance(); 70 71 ~G4NuclearLevelData(); 72 73 // run time call to access or to create level manager 74 // if data are not yet uploaded then lazy initialisation is used 75 const G4LevelManager* GetLevelManager(G4int Z, G4int A); 76 77 // add private data to isotope from master thread 78 G4bool AddPrivateData(G4int Z, G4int A, const G4String& filename); 79 80 // access to min/max A in the level DB 81 G4int GetMinA(G4int Z) const; 82 G4int GetMaxA(G4int Z) const; 83 84 // check max energy of a level without upload of the data 85 G4double GetMaxLevelEnergy(G4int Z, G4int A) const; 86 G4float MaxLevelEnergy(G4int Z, G4int A) const; 87 88 // check closest level if the energy is below the max level energy 89 G4double GetLevelEnergy(G4int Z, G4int A, G4double energy); 90 91 // check closest level below given energy 92 G4double GetLowEdgeLevelEnergy(G4int Z, G4int A, G4double energy); 93 94 // check if residual excitation energy corresponding to 95 // discrete level and if it is the case select closest level 96 G4double FindLevel(G4int Z, G4int A, G4double resMass, G4double Mass, 97 G4double partMass, G4double T); 98 99 // access to all model parameters 100 G4DeexPrecoParameters* GetParameters(); 101 G4PairingCorrection* GetPairingCorrection(); 102 G4ShellCorrection* GetShellCorrection(); 103 104 // access to correction values 105 G4double GetLevelDensity(G4int Z, G4int A, G4double U); 106 G4double GetPairingCorrection(G4int Z, G4int A); 107 108 // enable uploading of data for all Z <= Zlim 109 void UploadNuclearLevelData(G4int Zlim); 110 111 // stream only existing levels 112 void StreamLevels(std::ostream& os, G4int Z, G4int A); 113 114 G4NuclearLevelData(G4NuclearLevelData &) = delete; 115 G4NuclearLevelData & operator=(const G4NuclearLevelData &right) = delete; 116 117 private: 118 119 G4DeexPrecoParameters* fDeexPrecoParameters; 120 G4LevelReader* fLevelReader; 121 G4PairingCorrection* fPairingCorrection; 122 G4ShellCorrection* fShellCorrection; 123 G4Pow* fG4calc; 124 G4bool fInitialized = false; 125 126 static const G4int ZMAX = 118; 127 static const G4int AMIN[ZMAX]; 128 static const G4int AMAX[ZMAX]; 129 static const G4int LEVELIDX[ZMAX]; 130 131 std::vector<const G4LevelManager*> fLevelManagers[ZMAX]; 132 std::vector<G4bool> fLevelManagerFlags[ZMAX]; 133 }; 134 135 #endif 136