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 * File: G4FPYBiasedLightFragmentDist.cc 27 * File: G4FPYBiasedLightFragmentDist.cc 28 * Author: B. Wendt (wendbryc@isu.edu) 28 * Author: B. Wendt (wendbryc@isu.edu) 29 * 29 * 30 * Created on June 2, 2011, 11:02 AM 30 * Created on June 2, 2011, 11:02 AM 31 */ 31 */ 32 << 32 33 #include "G4FPYBiasedLightFragmentDist.hh" << 33 #include "G4Ions.hh" >> 34 #include "Randomize.hh" >> 35 #include "globals.hh" 34 36 35 #include "G4FFGDebuggingMacros.hh" 37 #include "G4FFGDebuggingMacros.hh" 36 #include "G4FFGEnumerations.hh" 38 #include "G4FFGEnumerations.hh" >> 39 #include "G4FPYBiasedLightFragmentDist.hh" 37 #include "G4FissionProductYieldDist.hh" 40 #include "G4FissionProductYieldDist.hh" 38 #include "G4Ions.hh" << 39 #include "Randomize.hh" << 40 #include "globals.hh" << 41 41 42 G4FPYBiasedLightFragmentDist::G4FPYBiasedLight << 42 G4FPYBiasedLightFragmentDist:: 43 G4int WhichIsotope, G4FFGEnumerations::MetaS << 43 G4FPYBiasedLightFragmentDist( G4int WhichIsotope, 44 G4FFGEnumerations::FissionCause WhichCause, << 44 G4FFGEnumerations::MetaState WhichMetaState, 45 std::istringstream& dataStream) << 45 G4FFGEnumerations::FissionCause WhichCause, 46 : G4FissionProductYieldDist(WhichIsotope, Wh << 46 G4FFGEnumerations::YieldType WhichYieldType, >> 47 std::istringstream& dataStream ) >> 48 : G4FissionProductYieldDist( WhichIsotope, >> 49 WhichMetaState, >> 50 WhichCause, >> 51 WhichYieldType, >> 52 dataStream) 47 { 53 { 48 // Initialize the class << 54 // Initialize the class 49 Initialize(); << 55 Initialize(); 50 } 56 } 51 57 52 G4FPYBiasedLightFragmentDist::G4FPYBiasedLight << 58 G4FPYBiasedLightFragmentDist:: 53 G4int WhichIsotope, G4FFGEnumerations::MetaS << 59 G4FPYBiasedLightFragmentDist( G4int WhichIsotope, 54 G4FFGEnumerations::FissionCause WhichCause, << 60 G4FFGEnumerations::MetaState WhichMetaState, 55 G4int Verbosity, std::istringstream& dataStr << 61 G4FFGEnumerations::FissionCause WhichCause, 56 : G4FissionProductYieldDist(WhichIsotope, Wh << 62 G4FFGEnumerations::YieldType WhichYieldType, 57 dataStream) << 63 G4int Verbosity, >> 64 std::istringstream& dataStream) >> 65 : G4FissionProductYieldDist( WhichIsotope, >> 66 WhichMetaState, >> 67 WhichCause, >> 68 WhichYieldType, >> 69 Verbosity, >> 70 dataStream ) 58 { 71 { 59 // Initialize the class << 72 // Initialize the class 60 Initialize(); << 73 Initialize(); 61 } 74 } 62 75 63 void G4FPYBiasedLightFragmentDist::Initialize( << 76 void G4FPYBiasedLightFragmentDist:: >> 77 Initialize( void ) 64 { 78 { 65 G4FFG_FUNCTIONENTER__ << 79 G4FFG_FUNCTIONENTER__ 66 80 67 // Initialize the half-weight for fission pr << 81 // Initialize the half-weight for fission product sampling 68 HalfWeight_ = (G4int)floor((Isotope_ % 1000) << 82 HalfWeight_ = (G4int)floor((Isotope_ % 1000) / 2.0); 69 83 70 G4FFG_FUNCTIONLEAVE__ << 84 G4FFG_FUNCTIONLEAVE__ 71 } 85 } 72 86 73 G4Ions* G4FPYBiasedLightFragmentDist::GetFissi << 87 G4Ions* G4FPYBiasedLightFragmentDist:: >> 88 GetFissionProduct( void ) 74 { 89 { 75 G4FFG_FUNCTIONENTER__ << 90 G4FFG_FUNCTIONENTER__ 76 91 77 G4Ions* Particle; << 92 G4Ions* Particle; 78 G4bool IsHeavy; << 93 G4bool IsHeavy; 79 G4bool IsNotFeasable; << 94 G4bool IsNotFeasable; 80 G4int Counter; << 95 G4int Counter; 81 << 96 82 Counter = 0; << 97 Counter = 0; 83 do { << 98 do 84 // If we have sampled too many times then << 99 { 85 if (Counter == 1000) { << 100 // If we have sampled too many times then we may need to do something else 86 Particle = nullptr; << 101 if(Counter == 1000) 87 break; << 102 { >> 103 Particle = NULL; >> 104 break; >> 105 } >> 106 >> 107 // Generate a (0, 1] random number, then find the corresponding particle >> 108 Particle = FindParticle(RandomEngine_->G4SampleUniform()); >> 109 >> 110 // If the daughter is heavier than half of the original nucleus weight >> 111 // or not physically feasable then set the flags to sample again >> 112 IsHeavy = (Particle->GetAtomicMass() > HalfWeight_); >> 113 IsNotFeasable = (Particle->GetAtomicMass() > RemainingA_ + 1 >> 114 || Particle->GetAtomicNumber() > RemainingZ_ + 1); >> 115 } while (IsHeavy || IsNotFeasable); // Loop checking, 11.05.2015, T. Koi >> 116 >> 117 // Something went wrong, so figure out how to fix it >> 118 if(Particle == NULL) >> 119 { >> 120 /// \todo Figure out what to do if a suitable particle is not found in 1000 iterations 88 } 121 } 89 122 90 // Generate a (0, 1] random number, then f << 123 // Return the G4ParticleDefintion pointer to the random light fragment 91 Particle = FindParticle(RandomEngine_->G4S << 124 G4FFG_FUNCTIONLEAVE__ 92 << 125 return Particle; 93 // If the daughter is heavier than half of << 94 // or not physically feasable then set the << 95 IsHeavy = (Particle->GetAtomicMass() > Hal << 96 IsNotFeasable = (Particle->GetAtomicMass() << 97 || Particle->GetAtomicNum << 98 << 99 Counter++; << 100 } while (IsHeavy || IsNotFeasable); // Loop << 101 << 102 // Something went wrong, so figure out how t << 103 if (Particle == nullptr) { << 104 /// \todo Figure out what to do if a sui << 105 } << 106 << 107 // Return the G4ParticleDefintion pointer to << 108 G4FFG_FUNCTIONLEAVE__ << 109 return Particle; << 110 } 126 } 111 127 112 G4FPYBiasedLightFragmentDist::~G4FPYBiasedLigh << 128 G4FPYBiasedLightFragmentDist::~G4FPYBiasedLightFragmentDist( void ) 113 { 129 { 114 G4FFG_FUNCTIONENTER__ << 130 G4FFG_FUNCTIONENTER__ 115 131 116 // Empty - all the data elements to be decon << 132 // Empty - all the data elements to be deconstructed are removed by 117 // ~G4FissionProductYieldDist() << 133 // ~G4FissionProductYieldDist() 118 G4FFG_FUNCTIONLEAVE__ << 134 G4FFG_FUNCTIONLEAVE__ 119 } 135 } 120 136