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 89550 2015-04-17 08:38:15Z 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 G4FragmentVector * BreakUp(const G4Fragment &theNucleus); 54 << 55 55 G4Fragment* EmittedFragment(G4Fragment* theN << 56 virtual G4Fragment* EmittedFragment(G4Fragment* theNucleus); 56 57 57 G4double GetEmissionProbability(G4Fragment* << 58 virtual G4double GetEmissionProbability(G4Fragment* theNucleus); 58 59 59 void SetFissionBarrier(G4VFissionBarrier * a << 60 inline void SetFissionBarrier(G4VFissionBarrier * aBarrier); 60 61 61 void SetEmissionStrategy(G4VEmissionProbabil << 62 inline void SetEmissionStrategy(G4VEmissionProbability * aFissionProb); 62 63 63 void SetLevelDensityParameter(G4VLevelDensit << 64 inline void SetLevelDensityParameter(G4VLevelDensityParameter * aLevelDensity); 64 65 65 inline G4double GetFissionBarrier(void) cons 66 inline G4double GetFissionBarrier(void) const; 66 67 67 inline G4double GetLevelDensityParameter(voi 68 inline G4double GetLevelDensityParameter(void) const; 68 69 69 inline G4double GetMaximalKineticEnergy(void 70 inline G4double GetMaximalKineticEnergy(void) const; 70 71 71 G4CompetitiveFission(const G4CompetitiveFiss << 72 const G4CompetitiveFission & operator=(const << 73 G4bool operator==(const G4CompetitiveFission << 74 G4bool operator!=(const G4CompetitiveFission << 75 << 76 private: 72 private: 77 73 78 // Sample AtomicNumber of Fission products 74 // Sample AtomicNumber of Fission products 79 G4int FissionAtomicNumber(G4int A); 75 G4int FissionAtomicNumber(G4int A); 80 76 81 G4double MassDistribution(G4double x, G4int 77 G4double MassDistribution(G4double x, G4int A); 82 78 83 // Sample Charge of fission products 79 // Sample Charge of fission products 84 G4int FissionCharge(G4int A, G4int Z, G4doub 80 G4int FissionCharge(G4int A, G4int Z, G4double Af); 85 81 86 // Sample Kinetic energy of fission products 82 // Sample Kinetic energy of fission products 87 G4double FissionKineticEnergy(G4int A, G4int 83 G4double FissionKineticEnergy(G4int A, G4int Z, 88 G4int Af1, G4int Zf1, 84 G4int Af1, G4int Zf1, 89 G4int Af2, G4int Zf2, 85 G4int Af2, G4int Zf2, 90 G4double U, G4double Tmax); 86 G4double U, G4double Tmax); 91 87 92 inline G4double Ratio(G4double A, G4double A << 88 inline G4double Ratio(G4double A, G4double A11, G4double B1, G4double A00); 93 G4double B1, G4double << 89 >> 90 inline G4double SymmetricRatio(G4int A, G4double A11); 94 91 95 inline G4double SymmetricRatio(G4int A, G4do << 92 inline G4double AsymmetricRatio(G4int A, G4double A11); 96 93 97 inline G4double AsymmetricRatio(G4int A, G4d << 94 inline G4ThreeVector IsotropicVector(G4double Magnitude); 98 95 99 inline G4double LocalExp(G4double x) const; << 96 G4CompetitiveFission(const G4CompetitiveFission &right); >> 97 const G4CompetitiveFission & operator=(const G4CompetitiveFission &right); >> 98 G4bool operator==(const G4CompetitiveFission &right) const; >> 99 G4bool operator!=(const G4CompetitiveFission &right) const; 100 100 101 // Maximal Kinetic Energy that can be carrie 101 // Maximal Kinetic Energy that can be carried by fragment 102 G4double maxKineticEnergy{0.0}; << 102 G4double MaximalKineticEnergy; 103 G4double fissionBarrier{0.0}; << 104 G4double fissionProbability{0.0}; << 105 G4double fFactor{1.0}; << 106 103 107 // For Fission barrier 104 // For Fission barrier 108 G4VFissionBarrier* theFissionBarrierPtr; << 105 G4VFissionBarrier * theFissionBarrierPtr; >> 106 G4double FissionBarrier; >> 107 G4bool MyOwnFissionBarrier; 109 108 110 // For Fission probability emission 109 // For Fission probability emission 111 G4VEmissionProbability* theFissionProbabilit << 110 G4VEmissionProbability * theFissionProbabilityPtr; >> 111 G4double FissionProbability; >> 112 G4bool MyOwnFissionProbability; 112 113 113 // For Level Density calculation 114 // For Level Density calculation 114 G4VLevelDensityParameter* theLevelDensityPtr << 115 G4bool MyOwnLevelDensity; 115 G4PairingCorrection* pairingCorrection; << 116 G4VLevelDensityParameter * theLevelDensityPtr; >> 117 G4double LevelDensityParameter; 116 118 117 G4bool myOwnFissionProbability{true}; << 119 G4PairingCorrection* pairingCorrection; 118 G4bool myOwnFissionBarrier{true}; << 119 G4bool myOwnLevelDensity{true}; << 120 120 121 G4FissionParameters theParam; 121 G4FissionParameters theParam; 122 << 122 123 G4int theSecID; // Creator model ID for the << 124 G4bool isInitialised{false}; << 125 }; 123 }; 126 124 >> 125 inline void G4CompetitiveFission::SetFissionBarrier(G4VFissionBarrier * aBarrier) >> 126 { >> 127 if (MyOwnFissionBarrier) delete theFissionBarrierPtr; >> 128 theFissionBarrierPtr = aBarrier; >> 129 MyOwnFissionBarrier = false; >> 130 } >> 131 >> 132 inline void >> 133 G4CompetitiveFission::SetEmissionStrategy(G4VEmissionProbability * aFissionProb) >> 134 { >> 135 if (MyOwnFissionProbability) delete theFissionProbabilityPtr; >> 136 theFissionProbabilityPtr = aFissionProb; >> 137 MyOwnFissionProbability = false; >> 138 } >> 139 >> 140 inline void >> 141 G4CompetitiveFission::SetLevelDensityParameter(G4VLevelDensityParameter* aLevelDensity) >> 142 { >> 143 if (MyOwnLevelDensity) delete theLevelDensityPtr; >> 144 theLevelDensityPtr = aLevelDensity; >> 145 MyOwnLevelDensity = false; >> 146 } >> 147 127 inline G4double G4CompetitiveFission::GetFissi 148 inline G4double G4CompetitiveFission::GetFissionBarrier(void) const 128 { 149 { 129 return fissionBarrier; << 150 return FissionBarrier; >> 151 } >> 152 >> 153 inline G4double G4CompetitiveFission::GetLevelDensityParameter(void) const >> 154 { >> 155 return LevelDensityParameter; 130 } 156 } 131 157 132 inline G4double G4CompetitiveFission::GetMaxim 158 inline G4double G4CompetitiveFission::GetMaximalKineticEnergy(void) const 133 { 159 { 134 return maxKineticEnergy; << 160 return MaximalKineticEnergy; 135 } 161 } 136 162 137 inline 163 inline 138 G4double G4CompetitiveFission::Ratio(G4double 164 G4double G4CompetitiveFission::Ratio(G4double A, G4double A11, 139 G4double B1, G4double A00) const << 165 G4double B1, G4double A00) 140 { 166 { 141 G4double res; 167 G4double res; 142 if (A11 >= A*0.5 && A11 <= (A00+10.0)) { 168 if (A11 >= A*0.5 && A11 <= (A00+10.0)) { 143 G4double x = (A11-A00)/A; 169 G4double x = (A11-A00)/A; 144 res = 1.0 - B1*x*x; 170 res = 1.0 - B1*x*x; 145 } else { 171 } else { 146 G4double x = 10.0/A; 172 G4double x = 10.0/A; 147 res = 1.0 - B1*x*x - 2.0*x*B1*(A11-A00-10. 173 res = 1.0 - B1*x*x - 2.0*x*B1*(A11-A00-10.0)/A; 148 } 174 } 149 return res; 175 return res; 150 } 176 } 151 177 152 inline 178 inline 153 G4double G4CompetitiveFission::AsymmetricRatio << 179 G4double G4CompetitiveFission::AsymmetricRatio(G4int A, G4double A11) 154 { 180 { 155 return Ratio(G4double(A),A11,23.5,134.0); 181 return Ratio(G4double(A),A11,23.5,134.0); 156 } 182 } 157 183 158 inline 184 inline 159 G4double G4CompetitiveFission::SymmetricRatio( << 185 G4double G4CompetitiveFission::SymmetricRatio(G4int A, G4double A11) 160 { 186 { 161 G4double A0 = G4double(A); 187 G4double A0 = G4double(A); 162 return Ratio(A0,A11,5.32,A0*0.5); 188 return Ratio(A0,A11,5.32,A0*0.5); 163 } 189 } 164 190 165 inline G4double G4CompetitiveFission::LocalExp << 191 inline >> 192 G4ThreeVector G4CompetitiveFission::IsotropicVector(G4double Magnitude) 166 { 193 { 167 return (std::abs(x) < 8.) ? G4Exp(-0.5*x*x) << 194 G4double CosTheta = 1.0 - 2.0*G4UniformRand(); >> 195 G4double SinTheta = std::sqrt(1.0 - CosTheta*CosTheta); >> 196 G4double Phi = CLHEP::twopi*G4UniformRand(); >> 197 G4ThreeVector Vector(Magnitude*std::cos(Phi)*SinTheta, >> 198 Magnitude*std::sin(Phi)*SinTheta, >> 199 Magnitude*CosTheta); >> 200 return Vector; 168 } 201 } 169 202 170 #endif 203 #endif 171 204 172 205 173 206