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 // 27 // 28 // Hadronic Process: Nuclear De-excitations 28 // Hadronic Process: Nuclear De-excitations 29 // by V. Lara (Oct 1998) 29 // by V. Lara (Oct 1998) 30 30 31 #ifndef G4CompetitiveFission_h 31 #ifndef G4CompetitiveFission_h 32 #define G4CompetitiveFission_h 1 32 #define G4CompetitiveFission_h 1 33 33 34 #include "G4VEvaporationChannel.hh" 34 #include "G4VEvaporationChannel.hh" 35 #include "G4Fragment.hh" 35 #include "G4Fragment.hh" >> 36 #include "G4VFissionBarrier.hh" >> 37 #include "G4FissionBarrier.hh" 36 #include "G4VEmissionProbability.hh" 38 #include "G4VEmissionProbability.hh" >> 39 #include "G4FissionProbability.hh" >> 40 #include "G4VLevelDensityParameter.hh" >> 41 #include "G4FissionLevelDensityParameter.hh" 37 #include "G4FissionParameters.hh" 42 #include "G4FissionParameters.hh" >> 43 #include "Randomize.hh" 38 #include <CLHEP/Units/SystemOfUnits.h> 44 #include <CLHEP/Units/SystemOfUnits.h> 39 #include "G4Exp.hh" << 40 << 41 class G4VFissionBarrier; << 42 class G4VEmissionProbability; << 43 class G4VLevelDensityParameter; << 44 class G4PairingCorrection; << 45 45 46 class G4CompetitiveFission : public G4VEvapora 46 class G4CompetitiveFission : public G4VEvaporationChannel 47 { 47 { 48 public: 48 public: 49 49 50 G4CompetitiveFission(); << 50 explicit G4CompetitiveFission(); 51 ~G4CompetitiveFission() override; << 51 virtual ~G4CompetitiveFission(); 52 52 53 void Initialise() override; << 53 virtual G4Fragment* EmittedFragment(G4Fragment* theNucleus); 54 << 55 G4Fragment* EmittedFragment(G4Fragment* theN << 56 54 57 G4double GetEmissionProbability(G4Fragment* << 55 virtual G4double GetEmissionProbability(G4Fragment* theNucleus); 58 56 59 void SetFissionBarrier(G4VFissionBarrier * a << 57 inline void SetFissionBarrier(G4VFissionBarrier * aBarrier); 60 58 61 void SetEmissionStrategy(G4VEmissionProbabil << 59 inline void SetEmissionStrategy(G4VEmissionProbability * aFissionProb); 62 60 63 void SetLevelDensityParameter(G4VLevelDensit << 61 inline void SetLevelDensityParameter(G4VLevelDensityParameter * aLevelDensity); 64 62 65 inline G4double GetFissionBarrier(void) cons 63 inline G4double GetFissionBarrier(void) const; 66 64 67 inline G4double GetLevelDensityParameter(voi 65 inline G4double GetLevelDensityParameter(void) const; 68 66 69 inline G4double GetMaximalKineticEnergy(void 67 inline G4double GetMaximalKineticEnergy(void) const; 70 68 71 G4CompetitiveFission(const G4CompetitiveFiss << 72 const G4CompetitiveFission & operator=(const << 73 G4bool operator==(const G4CompetitiveFission << 74 G4bool operator!=(const G4CompetitiveFission << 75 << 76 private: 69 private: 77 70 78 // Sample AtomicNumber of Fission products 71 // Sample AtomicNumber of Fission products 79 G4int FissionAtomicNumber(G4int A); 72 G4int FissionAtomicNumber(G4int A); 80 73 81 G4double MassDistribution(G4double x, G4int 74 G4double MassDistribution(G4double x, G4int A); 82 75 83 // Sample Charge of fission products 76 // Sample Charge of fission products 84 G4int FissionCharge(G4int A, G4int Z, G4doub 77 G4int FissionCharge(G4int A, G4int Z, G4double Af); 85 78 86 // Sample Kinetic energy of fission products 79 // Sample Kinetic energy of fission products 87 G4double FissionKineticEnergy(G4int A, G4int 80 G4double FissionKineticEnergy(G4int A, G4int Z, 88 G4int Af1, G4int Zf1, 81 G4int Af1, G4int Zf1, 89 G4int Af2, G4int Zf2, 82 G4int Af2, G4int Zf2, 90 G4double U, G4double Tmax); 83 G4double U, G4double Tmax); 91 84 92 inline G4double Ratio(G4double A, G4double A << 85 inline G4double Ratio(G4double A, G4double A11, G4double B1, G4double A00); 93 G4double B1, G4double << 94 86 95 inline G4double SymmetricRatio(G4int A, G4do << 87 inline G4double SymmetricRatio(G4int A, G4double A11); 96 88 97 inline G4double AsymmetricRatio(G4int A, G4d << 89 inline G4double AsymmetricRatio(G4int A, G4double A11); 98 90 99 inline G4double LocalExp(G4double x) const; << 91 G4CompetitiveFission(const G4CompetitiveFission &right) = delete; >> 92 const G4CompetitiveFission & operator=(const G4CompetitiveFission &right) = delete; >> 93 G4bool operator==(const G4CompetitiveFission &right) const = delete; >> 94 G4bool operator!=(const G4CompetitiveFission &right) const = delete; 100 95 101 // Maximal Kinetic Energy that can be carrie 96 // Maximal Kinetic Energy that can be carried by fragment 102 G4double maxKineticEnergy{0.0}; << 97 G4double MaximalKineticEnergy; 103 G4double fissionBarrier{0.0}; << 104 G4double fissionProbability{0.0}; << 105 G4double fFactor{1.0}; << 106 98 107 // For Fission barrier 99 // For Fission barrier 108 G4VFissionBarrier* theFissionBarrierPtr; << 100 G4VFissionBarrier * theFissionBarrierPtr; >> 101 G4double FissionBarrier; >> 102 G4bool MyOwnFissionBarrier; 109 103 110 // For Fission probability emission 104 // For Fission probability emission 111 G4VEmissionProbability* theFissionProbabilit << 105 G4VEmissionProbability * theFissionProbabilityPtr; >> 106 G4double FissionProbability; >> 107 G4bool MyOwnFissionProbability; 112 108 113 // For Level Density calculation 109 // For Level Density calculation 114 G4VLevelDensityParameter* theLevelDensityPtr << 110 G4bool MyOwnLevelDensity; >> 111 G4VLevelDensityParameter * theLevelDensityPtr; 115 G4PairingCorrection* pairingCorrection; 112 G4PairingCorrection* pairingCorrection; 116 113 117 G4bool myOwnFissionProbability{true}; << 118 G4bool myOwnFissionBarrier{true}; << 119 G4bool myOwnLevelDensity{true}; << 120 << 121 G4FissionParameters theParam; 114 G4FissionParameters theParam; 122 << 115 123 G4int theSecID; // Creator model ID for the << 124 G4bool isInitialised{false}; << 125 }; 116 }; 126 117 >> 118 inline void G4CompetitiveFission::SetFissionBarrier(G4VFissionBarrier * aBarrier) >> 119 { >> 120 if (MyOwnFissionBarrier) delete theFissionBarrierPtr; >> 121 theFissionBarrierPtr = aBarrier; >> 122 MyOwnFissionBarrier = false; >> 123 } >> 124 >> 125 inline void >> 126 G4CompetitiveFission::SetEmissionStrategy(G4VEmissionProbability * aFissionProb) >> 127 { >> 128 if (MyOwnFissionProbability) delete theFissionProbabilityPtr; >> 129 theFissionProbabilityPtr = aFissionProb; >> 130 MyOwnFissionProbability = false; >> 131 } >> 132 >> 133 inline void >> 134 G4CompetitiveFission::SetLevelDensityParameter(G4VLevelDensityParameter* aLevelDensity) >> 135 { >> 136 if (MyOwnLevelDensity) delete theLevelDensityPtr; >> 137 theLevelDensityPtr = aLevelDensity; >> 138 MyOwnLevelDensity = false; >> 139 } >> 140 127 inline G4double G4CompetitiveFission::GetFissi 141 inline G4double G4CompetitiveFission::GetFissionBarrier(void) const 128 { 142 { 129 return fissionBarrier; << 143 return FissionBarrier; 130 } 144 } 131 145 132 inline G4double G4CompetitiveFission::GetMaxim 146 inline G4double G4CompetitiveFission::GetMaximalKineticEnergy(void) const 133 { 147 { 134 return maxKineticEnergy; << 148 return MaximalKineticEnergy; 135 } 149 } 136 150 137 inline 151 inline 138 G4double G4CompetitiveFission::Ratio(G4double 152 G4double G4CompetitiveFission::Ratio(G4double A, G4double A11, 139 G4double B1, G4double A00) const << 153 G4double B1, G4double A00) 140 { 154 { 141 G4double res; 155 G4double res; 142 if (A11 >= A*0.5 && A11 <= (A00+10.0)) { 156 if (A11 >= A*0.5 && A11 <= (A00+10.0)) { 143 G4double x = (A11-A00)/A; 157 G4double x = (A11-A00)/A; 144 res = 1.0 - B1*x*x; 158 res = 1.0 - B1*x*x; 145 } else { 159 } else { 146 G4double x = 10.0/A; 160 G4double x = 10.0/A; 147 res = 1.0 - B1*x*x - 2.0*x*B1*(A11-A00-10. 161 res = 1.0 - B1*x*x - 2.0*x*B1*(A11-A00-10.0)/A; 148 } 162 } 149 return res; 163 return res; 150 } 164 } 151 165 152 inline 166 inline 153 G4double G4CompetitiveFission::AsymmetricRatio << 167 G4double G4CompetitiveFission::AsymmetricRatio(G4int A, G4double A11) 154 { 168 { 155 return Ratio(G4double(A),A11,23.5,134.0); 169 return Ratio(G4double(A),A11,23.5,134.0); 156 } 170 } 157 171 158 inline 172 inline 159 G4double G4CompetitiveFission::SymmetricRatio( << 173 G4double G4CompetitiveFission::SymmetricRatio(G4int A, G4double A11) 160 { 174 { 161 G4double A0 = G4double(A); 175 G4double A0 = G4double(A); 162 return Ratio(A0,A11,5.32,A0*0.5); 176 return Ratio(A0,A11,5.32,A0*0.5); 163 } << 164 << 165 inline G4double G4CompetitiveFission::LocalExp << 166 { << 167 return (std::abs(x) < 8.) ? G4Exp(-0.5*x*x) << 168 } 177 } 169 178 170 #endif 179 #endif 171 180 172 181 173 182