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: G4CompetitiveFission.hh 98739 2016-08-09 12:56:55Z gcosmo $ 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 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 inline G4ThreeVector IsotropicVector(G4double Magnitude); >> 93 >> 94 G4CompetitiveFission(const G4CompetitiveFission &right); >> 95 const G4CompetitiveFission & operator=(const G4CompetitiveFission &right); >> 96 G4bool operator==(const G4CompetitiveFission &right) const; >> 97 G4bool operator!=(const G4CompetitiveFission &right) const; 100 98 101 // Maximal Kinetic Energy that can be carrie 99 // Maximal Kinetic Energy that can be carried by fragment 102 G4double maxKineticEnergy{0.0}; << 100 G4double MaximalKineticEnergy; 103 G4double fissionBarrier{0.0}; << 104 G4double fissionProbability{0.0}; << 105 G4double fFactor{1.0}; << 106 101 107 // For Fission barrier 102 // For Fission barrier 108 G4VFissionBarrier* theFissionBarrierPtr; << 103 G4VFissionBarrier * theFissionBarrierPtr; >> 104 G4double FissionBarrier; >> 105 G4bool MyOwnFissionBarrier; 109 106 110 // For Fission probability emission 107 // For Fission probability emission 111 G4VEmissionProbability* theFissionProbabilit << 108 G4VEmissionProbability * theFissionProbabilityPtr; >> 109 G4double FissionProbability; >> 110 G4bool MyOwnFissionProbability; 112 111 113 // For Level Density calculation 112 // For Level Density calculation 114 G4VLevelDensityParameter* theLevelDensityPtr << 113 G4bool MyOwnLevelDensity; 115 G4PairingCorrection* pairingCorrection; << 114 G4VLevelDensityParameter * theLevelDensityPtr; >> 115 G4double LevelDensityParameter; 116 116 117 G4bool myOwnFissionProbability{true}; << 117 G4PairingCorrection* pairingCorrection; 118 G4bool myOwnFissionBarrier{true}; << 119 G4bool myOwnLevelDensity{true}; << 120 118 121 G4FissionParameters theParam; 119 G4FissionParameters theParam; 122 << 120 123 G4int theSecID; // Creator model ID for the << 124 G4bool isInitialised{false}; << 125 }; 121 }; 126 122 >> 123 inline void G4CompetitiveFission::SetFissionBarrier(G4VFissionBarrier * aBarrier) >> 124 { >> 125 if (MyOwnFissionBarrier) delete theFissionBarrierPtr; >> 126 theFissionBarrierPtr = aBarrier; >> 127 MyOwnFissionBarrier = false; >> 128 } >> 129 >> 130 inline void >> 131 G4CompetitiveFission::SetEmissionStrategy(G4VEmissionProbability * aFissionProb) >> 132 { >> 133 if (MyOwnFissionProbability) delete theFissionProbabilityPtr; >> 134 theFissionProbabilityPtr = aFissionProb; >> 135 MyOwnFissionProbability = false; >> 136 } >> 137 >> 138 inline void >> 139 G4CompetitiveFission::SetLevelDensityParameter(G4VLevelDensityParameter* aLevelDensity) >> 140 { >> 141 if (MyOwnLevelDensity) delete theLevelDensityPtr; >> 142 theLevelDensityPtr = aLevelDensity; >> 143 MyOwnLevelDensity = false; >> 144 } >> 145 127 inline G4double G4CompetitiveFission::GetFissi 146 inline G4double G4CompetitiveFission::GetFissionBarrier(void) const 128 { 147 { 129 return fissionBarrier; << 148 return FissionBarrier; >> 149 } >> 150 >> 151 inline G4double G4CompetitiveFission::GetLevelDensityParameter(void) const >> 152 { >> 153 return LevelDensityParameter; 130 } 154 } 131 155 132 inline G4double G4CompetitiveFission::GetMaxim 156 inline G4double G4CompetitiveFission::GetMaximalKineticEnergy(void) const 133 { 157 { 134 return maxKineticEnergy; << 158 return MaximalKineticEnergy; 135 } 159 } 136 160 137 inline 161 inline 138 G4double G4CompetitiveFission::Ratio(G4double 162 G4double G4CompetitiveFission::Ratio(G4double A, G4double A11, 139 G4double B1, G4double A00) const << 163 G4double B1, G4double A00) 140 { 164 { 141 G4double res; 165 G4double res; 142 if (A11 >= A*0.5 && A11 <= (A00+10.0)) { 166 if (A11 >= A*0.5 && A11 <= (A00+10.0)) { 143 G4double x = (A11-A00)/A; 167 G4double x = (A11-A00)/A; 144 res = 1.0 - B1*x*x; 168 res = 1.0 - B1*x*x; 145 } else { 169 } else { 146 G4double x = 10.0/A; 170 G4double x = 10.0/A; 147 res = 1.0 - B1*x*x - 2.0*x*B1*(A11-A00-10. 171 res = 1.0 - B1*x*x - 2.0*x*B1*(A11-A00-10.0)/A; 148 } 172 } 149 return res; 173 return res; 150 } 174 } 151 175 152 inline 176 inline 153 G4double G4CompetitiveFission::AsymmetricRatio << 177 G4double G4CompetitiveFission::AsymmetricRatio(G4int A, G4double A11) 154 { 178 { 155 return Ratio(G4double(A),A11,23.5,134.0); 179 return Ratio(G4double(A),A11,23.5,134.0); 156 } 180 } 157 181 158 inline 182 inline 159 G4double G4CompetitiveFission::SymmetricRatio( << 183 G4double G4CompetitiveFission::SymmetricRatio(G4int A, G4double A11) 160 { 184 { 161 G4double A0 = G4double(A); 185 G4double A0 = G4double(A); 162 return Ratio(A0,A11,5.32,A0*0.5); 186 return Ratio(A0,A11,5.32,A0*0.5); 163 } 187 } 164 188 165 inline G4double G4CompetitiveFission::LocalExp << 189 inline >> 190 G4ThreeVector G4CompetitiveFission::IsotropicVector(G4double Magnitude) 166 { 191 { 167 return (std::abs(x) < 8.) ? G4Exp(-0.5*x*x) << 192 G4double CosTheta = 1.0 - 2.0*G4UniformRand(); >> 193 G4double SinTheta = std::sqrt(1.0 - CosTheta*CosTheta); >> 194 G4double Phi = CLHEP::twopi*G4UniformRand(); >> 195 G4ThreeVector Vector(Magnitude*std::cos(Phi)*SinTheta, >> 196 Magnitude*std::sin(Phi)*SinTheta, >> 197 Magnitude*CosTheta); >> 198 return Vector; 168 } 199 } 169 200 170 #endif 201 #endif 171 202 172 203 173 204