ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4FPYBiasedLightFragmentDist.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4FPYBiasedLightFragmentDist.cc
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 "G4Ions.hh"
34 #include "Randomize.hh"
35 #include "globals.hh"
36 
37 #include "G4FFGDebuggingMacros.hh"
38 #include "G4FFGEnumerations.hh"
41 
44  G4FFGEnumerations::MetaState WhichMetaState,
46  G4FFGEnumerations::YieldType WhichYieldType,
47  std::istringstream& dataStream )
48 : G4FissionProductYieldDist( WhichIsotope,
49  WhichMetaState,
50  WhichCause,
51  WhichYieldType,
52  dataStream)
53 {
54  // Initialize the class
55  Initialize();
56 }
57 
60  G4FFGEnumerations::MetaState WhichMetaState,
62  G4FFGEnumerations::YieldType WhichYieldType,
64  std::istringstream& dataStream)
65 : G4FissionProductYieldDist( WhichIsotope,
66  WhichMetaState,
67  WhichCause,
68  WhichYieldType,
69  Verbosity,
70  dataStream )
71 {
72  // Initialize the class
73  Initialize();
74 }
75 
77 Initialize( void )
78 {
80 
81  // Initialize the half-weight for fission product sampling
82  HalfWeight_ = (G4int)floor((Isotope_ % 1000) / 2.0);
83 
85 }
86 
89 {
91 
92  G4Ions* Particle;
93  G4bool IsHeavy;
94  G4bool IsNotFeasable;
95  G4int Counter;
96 
97  Counter = 0;
98  do
99  {
100  // If we have sampled too many times then we may need to do something else
101  if(Counter == 1000)
102  {
103  Particle = NULL;
104  break;
105  }
106 
107  // Generate a (0, 1] random number, then find the corresponding particle
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 
116  Counter++;
117  } while (IsHeavy || IsNotFeasable); // Loop checking, 11.05.2015, T. Koi
118 
119  // Something went wrong, so figure out how to fix it
120  if(Particle == NULL)
121  {
123  }
124 
125  // Return the G4ParticleDefintion pointer to the random light fragment
127  return Particle;
128 }
129 
131 {
133 
134  // Empty - all the data elements to be deconstructed are removed by
135  // ~G4FissionProductYieldDist()
137 }