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 // Author: E.Mendoza 30 // 31 // Creation date: May 2024 32 // 33 // Modifications: 34 // 35 // ------------------------------------------------------------------- 36 // 37 // NuDEX code (https://doi.org/10.1016/j.nima.2022.167894) 38 // 39 40 41 #ifndef NUDEXPSF_HH 42 #define NUDEXPSF_HH 1 43 44 #include <cstdlib> 45 #include <iostream> 46 #include <fstream> 47 #include <cmath> 48 49 //using namespace std; 50 51 class G4NuDEXLevelDensity; 52 53 /* 54 All energies in MeV 55 PSF are defined as in RIPL-3: PSF=Eg**(-2L-1) x Gamma width x level density 56 JL defines PSF x Eg**(2L+1) instead 57 58 PSFType=0 --> SLO 59 PSFType=1 --> EGLO, as defined in RIPL-3, but using always Tf in the formula 60 PSFType=2 --> SMLO, as defined in RIPL-3 61 PSFType=3 --> GLO (like EGLO, but k1=k2=1) 62 PSFType=4 --> MGLO (like EGLO, but k2=1) 63 PSFType=5 --> KMF 64 PSFType=6 --> GH 65 PSFType=7 --> EGLO, but the k parameter is provided (MEGLO) 66 PSFType=8 --> EGLO, but the "k1" and "k2" parameters are provided (MEGLO) 67 PSFType=9 --> EGLO, but the k parameter and a constant temperature of the nucleus is provided (MEGLO) 68 PSFType=10 --> EGLO, but the "k1" and "k2" parameters and a constant temperature of the nucleus are provided (MEGLO) 69 PSFType=11 --> SMLO, as defined in Eur. Phys. J. A (2019) 55: 172 70 PSFType=20 --> gaussian (to simulate small bumps or resonances) 71 PSFType=21 --> expo --> C*exp(-eta*Eg). It is defined with three entries: C eta dummy 72 PSFType=40 --> pointwise function type 1 (only input file) 73 PSFType=41 --> pointwise function type 2 (only input file) 74 75 Procedure to obtain the PSF, in order of hierarchy: 76 - Get the data from inputfname 77 - Get the data from PSF_param.dat file 78 - Get the data from IAEA-2019 PSF values (if PSFflag==0) 79 - Get the data from RIPL-3 experimental MLO values --> gdr-parameters&errors-exp-MLO.dat 80 - Get the data from RIPL-3 Theorethical values --> gdr-parameters-theor.dat 81 - Use RIPL-3 and RIPL-2 theoretical formulas 82 */ 83 84 85 86 class G4NuDEXPSF{ 87 88 public: 89 G4NuDEXPSF(G4int aZ,G4int aA); 90 ~G4NuDEXPSF(); 91 92 G4int Init(const char* dirname,G4NuDEXLevelDensity* aLD,const char* inputfname=0,const char* defaultinputfname=0,G4int PSFflag=0); 93 G4double GetE1(G4double Eg,G4double ExcitationEnergy); 94 G4double GetM1(G4double Eg,G4double ExcitationEnergy); 95 G4double GetE2(G4double Eg,G4double ExcitationEnergy); 96 void PrintPSFParameters(std::ostream &out); 97 void PrintPSFParametersInInputFileFormat(std::ostream &out); 98 99 private: 100 101 G4bool TakePSFFromInputFile(const char* fname); 102 G4bool TakePSFFromDetailedParFile(const char* fname); 103 G4bool TakePSFFromIAEA01(const char* fname); // IAEA - PSF values 2019 104 G4bool TakePSFFromRIPL01(const char* fname); // RIPL3-MLO values 105 G4bool TakePSFFromRIPL02(const char* fname); // RIPL3-Theorethical values 106 void GenerateM1AndE2FromE1(); // From RIPL-3 and RIPL-2 recommendations 107 108 109 //Shapes: 110 //Typical ones: 111 G4double SLO(G4double Eg,G4double Er,G4double Gr,G4double sr); //PSFType=0 112 G4double EGLO(G4double Eg,G4double Er,G4double Gr,G4double sr,G4double ExcitationEnergy); //PSFType=1 113 G4double SMLO(G4double Eg,G4double Er,G4double Gr,G4double sr,G4double ExcitationEnergy); //PSFType=2 114 G4double GLO(G4double Eg,G4double Er,G4double Gr,G4double sr,G4double ExcitationEnergy); //PSFType=3 115 G4double MGLO(G4double Eg,G4double Er,G4double Gr,G4double sr,G4double ExcitationEnergy); //PSFType=4 116 G4double KMF(G4double Eg,G4double Er,G4double Gr,G4double sr,G4double ExcitationEnergy); //PSFType=5 117 G4double GH(G4double Eg,G4double Er,G4double Gr,G4double sr,G4double ExcitationEnergy); //PSFType=6 118 G4double MEGLO(G4double Eg,G4double Er,G4double Gr,G4double sr,G4double ExcitationEnergy,G4double k_param1,G4double k_param2,G4double Temp=-1);//PSFType=6,7,8,9,10 119 G4double SMLO_v2(G4double Eg,G4double Er,G4double Gr,G4double sr,G4double ExcitationEnergy); //PSFType=11 120 121 122 G4double Gauss(G4double Eg,G4double Er,G4double Gr,G4double sr); //PSFType=20 123 G4double Expo(G4double Eg,G4double C,G4double eta); //PSFType=21 124 125 //PSFType=40, PSFType=41 are pointwise defined functions 126 127 //------------------------------ 128 G4double EGLO_GLO_MGLO(G4double Eg,G4double Er,G4double Gr,G4double sr,G4double ExcitationEnergy,G4int Opt); 129 G4double FlexibleGLOType(G4double Eg,G4double Er,G4double Gr,G4double sr,G4double Temp1,G4double k_param1,G4double Temp2,G4double k_param2); 130 G4double Gamma_k(G4double Eg,G4double Er,G4double Gr,G4double Temp,G4double k_param); 131 132 private: 133 G4int Z_Int,A_Int; 134 135 G4int nR_E1,nR_M1,nR_E2; 136 G4int PSFType_E1[10], PSFType_M1[10], PSFType_E2[10]; 137 G4double E_E1[10],G_E1[10],s_E1[10],p1_E1[10],p2_E1[10],p3_E1[10]; 138 G4double E_M1[10],G_M1[10],s_M1[10],p1_M1[10],p2_M1[10],p3_M1[10]; 139 G4double E_E2[10],G_E2[10],s_E2[10],p1_E2[10],p2_E2[10],p3_E2[10]; 140 141 //----------------------------------------------- 142 //PSF pointwise defined PSF --> PSFType=3,4,6 143 G4int np_E1,np_M1,np_E2; 144 G4double *x_E1,*y_E1; 145 G4double *x_M1,*y_M1; 146 G4double *x_E2,*y_E2; 147 G4double E1_normFac,M1_normFac,E2_normFac; 148 G4double NormEmin,NormEmax; 149 //----------------------------------------------- 150 151 G4double ScaleFactor_E1,ScaleFactor_M1,ScaleFactor_E2; 152 153 G4double EvaluateFunction(G4double xval,G4int np,G4double* x,G4double* y); 154 void Renormalize(); 155 156 G4NuDEXLevelDensity* theLD; 157 }; 158 159 160 161 162 #endif 163 164