Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 /* 27 * File: G4FPYBiasedLightFragmentDist.cc 28 * Author: B. Wendt (wendbryc@isu.edu) 29 * 30 * Created on June 2, 2011, 11:02 AM 31 */ 32 33 #include "G4FPYBiasedLightFragmentDist.hh" 34 35 #include "G4FFGDebuggingMacros.hh" 36 #include "G4FFGEnumerations.hh" 37 #include "G4FissionProductYieldDist.hh" 38 #include "G4Ions.hh" 39 #include "Randomize.hh" 40 #include "globals.hh" 41 42 G4FPYBiasedLightFragmentDist::G4FPYBiasedLightFragmentDist( 43 G4int WhichIsotope, G4FFGEnumerations::MetaState WhichMetaState, 44 G4FFGEnumerations::FissionCause WhichCause, G4FFGEnumerations::YieldType WhichYieldType, 45 std::istringstream& dataStream) 46 : G4FissionProductYieldDist(WhichIsotope, WhichMetaState, WhichCause, WhichYieldType, dataStream) 47 { 48 // Initialize the class 49 Initialize(); 50 } 51 52 G4FPYBiasedLightFragmentDist::G4FPYBiasedLightFragmentDist( 53 G4int WhichIsotope, G4FFGEnumerations::MetaState WhichMetaState, 54 G4FFGEnumerations::FissionCause WhichCause, G4FFGEnumerations::YieldType WhichYieldType, 55 G4int Verbosity, std::istringstream& dataStream) 56 : G4FissionProductYieldDist(WhichIsotope, WhichMetaState, WhichCause, WhichYieldType, Verbosity, 57 dataStream) 58 { 59 // Initialize the class 60 Initialize(); 61 } 62 63 void G4FPYBiasedLightFragmentDist::Initialize() 64 { 65 G4FFG_FUNCTIONENTER__ 66 67 // Initialize the half-weight for fission product sampling 68 HalfWeight_ = (G4int)floor((Isotope_ % 1000) / 2.0); 69 70 G4FFG_FUNCTIONLEAVE__ 71 } 72 73 G4Ions* G4FPYBiasedLightFragmentDist::GetFissionProduct() 74 { 75 G4FFG_FUNCTIONENTER__ 76 77 G4Ions* Particle; 78 G4bool IsHeavy; 79 G4bool IsNotFeasable; 80 G4int Counter; 81 82 Counter = 0; 83 do { 84 // If we have sampled too many times then we may need to do something else 85 if (Counter == 1000) { 86 Particle = nullptr; 87 break; 88 } 89 90 // Generate a (0, 1] random number, then find the corresponding particle 91 Particle = FindParticle(RandomEngine_->G4SampleUniform()); 92 93 // If the daughter is heavier than half of the original nucleus weight 94 // or not physically feasable then set the flags to sample again 95 IsHeavy = (Particle->GetAtomicMass() > HalfWeight_); 96 IsNotFeasable = (Particle->GetAtomicMass() > RemainingA_ + 1 97 || Particle->GetAtomicNumber() > RemainingZ_ + 1); 98 99 Counter++; 100 } while (IsHeavy || IsNotFeasable); // Loop checking, 11.05.2015, T. Koi 101 102 // Something went wrong, so figure out how to fix it 103 if (Particle == nullptr) { 104 /// \todo Figure out what to do if a suitable particle is not found in 1000 iterations 105 } 106 107 // Return the G4ParticleDefintion pointer to the random light fragment 108 G4FFG_FUNCTIONLEAVE__ 109 return Particle; 110 } 111 112 G4FPYBiasedLightFragmentDist::~G4FPYBiasedLightFragmentDist() 113 { 114 G4FFG_FUNCTIONENTER__ 115 116 // Empty - all the data elements to be deconstructed are removed by 117 // ~G4FissionProductYieldDist() 118 G4FFG_FUNCTIONLEAVE__ 119 } 120