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