Geant4  10.02.p03
G4fissionEvent Class Reference

#include <G4fissionEvent.hh>

Collaboration diagram for G4fissionEvent:

Public Member Functions

 G4fissionEvent (G4int isotope, G4double time, G4double nubar, G4double eng)
 
 ~G4fissionEvent ()
 
G4int getNeutronNu ()
 
G4int getPhotonNu ()
 
G4double getNeutronEnergy (G4int index)
 
G4double getNeutronVelocity (G4int index)
 
G4double getNeutronDircosu (G4int index)
 
G4double getNeutronDircosv (G4int index)
 
G4double getNeutronDircosw (G4int index)
 
G4double getPhotonEnergy (G4int index)
 
G4double getPhotonVelocity (G4int index)
 
G4double getPhotonDircosu (G4int index)
 
G4double getPhotonDircosv (G4int index)
 
G4double getPhotonDircosw (G4int index)
 
G4double getNeutronAge (G4int index)
 
G4double getPhotonAge (G4int index)
 

Static Public Member Functions

static void setDelayOption (G4int delay)
 
static void setCorrelationOption (G4int correlation)
 
static void setNudistOption (G4int nudist)
 
static void setCf252Option (G4int ndist, G4int neng)
 
static void setRNGf (float(*funcptr)(void))
 
static void setRNGd (G4double(*funcptr)(void))
 

Private Member Functions

G4int G4SmpNuDistDataU232_234_236_238 (G4double nubar)
 
G4int G4SmpNuDistDataU232_234_236_238_MC (G4double nubar)
 
G4int G4SmpNuDistDataU233_235 (G4double nubar)
 
G4int G4SmpNuDistDataU233_235_MC (G4double nubar)
 
G4int G4SmpNuDistDataU235 (G4double erg, G4int option)
 
G4int G4SmpNuDistDataPu239 (G4double erg)
 
G4double G4SmpNVel (G4double eng, G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
 
G4double G4SmpNEngCf252 (G4int option)
 
void G4SmpIsoDir (G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
 
G4double G4SmpGEng ()
 
G4int G4SmpNuDistDataPu239_241 (G4double nubar)
 
G4int G4SmpNuDistDataPu239_241_MC (G4double nubar)
 
G4int G4SmpNuDistDataU238 (G4double erg)
 
G4int G4SmpNugDist (G4int isotope, G4double nubar)
 
G4double G4SmpPVel (G4double eng, G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
 
G4int G4SmpSpNuDistData (G4int isotope, G4int Cf252option)
 
G4double G4SmpSpNubarData (G4int isotope)
 
G4int G4SmpSpNugDistData (G4int isotope)
 
G4double G4SmpTerrell (G4double nubar)
 
G4double G4SmpWatt (G4double ePart, G4int iso)
 
void G4fissionerr (G4int iSever, std::string chSubNam, std::string chMsg)
 

Static Private Member Functions

static G4double fisslibrng (void)
 
static G4double rngf2d (void)
 

Private Attributes

G4int neutronNu
 
G4doubleneutronEnergies
 
G4doubleneutronVelocities
 
G4doubleneutronDircosu
 
G4doubleneutronDircosv
 
G4doubleneutronDircosw
 
G4doubleneutronAges
 
G4int photonNu
 
G4doublephotonEnergies
 
G4doublephotonVelocities
 
G4doublephotonDircosu
 
G4doublephotonDircosv
 
G4doublephotonDircosw
 
G4doublephotonAges
 

Static Private Attributes

static G4int delayoption =0
 
static G4int correlationoption =0
 
static G4int nudistoption =3
 
static G4int Cf252ndistoption =0
 
static G4int Cf252nengoption =0
 
static G4double(* rngdptr )(void)
 
static float(* rngfptr )(void)
 

Detailed Description

Definition at line 61 of file G4fissionEvent.hh.

Constructor & Destructor Documentation

◆ G4fissionEvent()

G4fissionEvent::G4fissionEvent ( G4int  isotope,
G4double  time,
G4double  nubar,
G4double  eng 
)

Definition at line 66 of file G4fissionEvent.cc.

72 {
73  /*
74  * Constructs a fission event with neutronNu neutrons and photonNu
75  * photons.
76  */
77  G4int i;
78 
79  if (nubar == -1.) {
80  /* spontaneous fission */
82  photonNu = G4SmpSpNugDistData(isotope);
83  } else {
84  /* induced fission */
85  if (nudistoption == 0 || nudistoption == 1) {
86  switch (isotope) {
87  case 92235:
89  break;
90  case 92238:
92  break;
93  case 94239:
95  break;
96  default:
97  neutronNu = (G4int) G4SmpTerrell(nubar);
98  break;
99  }
100  } else if (nudistoption == 2) {
101  switch (isotope) {
102  case 92232:
103  case 92234:
104  case 92236:
105  case 92238:
107  break;
108  case 92233:
109  case 92235:
111  break;
112  case 94239:
113  case 94241:
115  break;
116  default:
117  neutronNu = (G4int) G4SmpTerrell(nubar);
118  break;
119  }
120  } else if (nudistoption == 3) {
121  switch (isotope) {
122  case 92232:
123  case 92234:
124  case 92236:
125  case 92238:
127  break;
128  case 92233:
129  case 92235:
131  break;
132  case 94239:
133  case 94241:
135  break;
136  default:
137  neutronNu = (G4int) G4SmpTerrell(nubar);
138  break;
139  }
140  }
141  photonNu = G4SmpNugDist(isotope, nubar);
142  }
143  if (neutronNu > 0) {
150  for (i=0; i<neutronNu; i++) {
151  if (isotope == 98252) neutronEnergies[i] = G4SmpNEngCf252(Cf252nengoption);
152  else neutronEnergies[i] = G4SmpWatt(eng, isotope);
154  neutronEnergies[i],
155  &(neutronDircosu[i]),
156  &(neutronDircosv[i]),
157  &(neutronDircosw[i])
158  );
159  neutronAges[i] = time;
160  }
161  }
162  if (photonNu > 0) {
169  for (i=0; i<photonNu; i++) {
170  photonEnergies[i] = G4SmpGEng();
172  photonEnergies[i],
173  &(photonDircosu[i]),
174  &(photonDircosv[i]),
175  &(photonDircosw[i])
176  );
177  photonAges[i] = time;
178  }
179  }
180 }
G4int G4SmpNuDistDataPu239_241(G4double nubar)
G4int G4SmpNuDistDataU232_234_236_238(G4double nubar)
G4double * neutronDircosw
int G4int
Definition: G4Types.hh:78
G4double G4SmpTerrell(G4double nubar)
Definition: G4SmpTerrell.cc:69
G4int G4SmpSpNuDistData(G4int isotope, G4int Cf252option)
G4double G4SmpWatt(G4double ePart, G4int iso)
Definition: G4SmpWatt.cc:67
G4double * neutronVelocities
static G4int nudistoption
G4double G4SmpGEng()
Definition: G4SmpGEng.cc:64
G4double * neutronDircosv
G4int G4SmpNuDistDataU232_234_236_238_MC(G4double nubar)
static G4int Cf252ndistoption
G4double G4SmpNEngCf252(G4int option)
G4double G4SmpPVel(G4double eng, G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
Definition: G4SmpPVel.cc:62
G4double * neutronDircosu
G4int G4SmpNuDistDataU233_235_MC(G4double nubar)
static G4int Cf252nengoption
G4int G4SmpNugDist(G4int isotope, G4double nubar)
Definition: G4SmpNugDist.cc:68
G4int G4SmpNuDistDataPu239(G4double erg)
G4double * photonAges
G4int G4SmpSpNugDistData(G4int isotope)
G4double * photonDircosv
G4int G4SmpNuDistDataU233_235(G4double nubar)
G4double * neutronEnergies
G4double * photonDircosw
G4double * neutronAges
G4int G4SmpNuDistDataU235(G4double erg, G4int option)
G4double G4SmpNVel(G4double eng, G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
Definition: G4SmpNVel.cc:62
G4int G4SmpNuDistDataPu239_241_MC(G4double nubar)
double G4double
Definition: G4Types.hh:76
G4double * photonVelocities
G4double * photonDircosu
G4int G4SmpNuDistDataU238(G4double erg)
G4double * photonEnergies
Here is the call graph for this function:

◆ ~G4fissionEvent()

G4fissionEvent::~G4fissionEvent ( )

Definition at line 182 of file G4fissionEvent.cc.

182  {
183  if (neutronNu > 0) {
184  delete [] neutronEnergies;
185  delete [] neutronVelocities;
186  delete [] neutronDircosu;
187  delete [] neutronDircosv;
188  delete [] neutronDircosw;
189  delete [] neutronAges;
190  }
191 
192  if (photonNu > 0) {
193  delete [] photonEnergies;
194  delete [] photonVelocities;
195  delete [] photonDircosu;
196  delete [] photonDircosv;
197  delete [] photonDircosw;
198  delete [] photonAges;
199  }
200 }
G4double * neutronDircosw
G4double * neutronVelocities
G4double * neutronDircosv
G4double * neutronDircosu
G4double * photonAges
G4double * photonDircosv
G4double * neutronEnergies
G4double * photonDircosw
G4double * neutronAges
G4double * photonVelocities
G4double * photonDircosu
G4double * photonEnergies

Member Function Documentation

◆ fisslibrng()

G4double G4fissionEvent::fisslibrng ( void  )
staticprivate

Definition at line 65 of file G4rngc.cc.

65  {
66  // if (rngdptr == 0) {
67  // return drand48();
68  // } else {
69  // return rngdptr();
70  // }
71 
72  return G4UniformRand();
73 }
#define G4UniformRand()
Definition: Randomize.hh:97
Here is the caller graph for this function:

◆ G4fissionerr()

void G4fissionEvent::G4fissionerr ( G4int  iSever,
std::string  chSubNam,
std::string  chMsg 
)
private

Definition at line 65 of file G4fissionerr.cc.

82 {
83  G4int doExit;
84  std::string ExitMsg;
85 
86 
87  if (iSever <= 5) { /* warning */
88  doExit = 0;
89  }
90  else {
91  doExit = 1;
92  }
93 
94  ExitMsg = "Error in Function "+chSubNam+", Severity=" + itoa(iSever) + " : "+chMsg;
95 
96  std::cerr << "Fission " << ExitMsg << std::endl;
97  if (doExit == 1) G4Exception("G4fissionEvent::G4fissionerr()", "601",
98  FatalException, "Fatal Error");
99 
100  return;
101 }
int G4int
Definition: G4Types.hh:78
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
std::string itoa(const G4int &x)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpGEng()

G4double G4fissionEvent::G4SmpGEng ( )
private

Definition at line 64 of file G4SmpGEng.cc.

64  {
65 
66 /*
67  Description
68  Sample energy spectrum for photons emitted by fission-induced reactions.
69  The energy spectrum of the prompt fission gamma rays is obtained from
70  Maienschein's measurements.
71 */
72 
73 /*
74  Input
75  Return
76  energy of photon emitted by neutron-induced fission
77 */
78 
79  G4double r;
80 /*
81  Calculate the energy of photons emitted from fission
82 */
84  r=fisslibrng();
85 
86  if (r == 0.0) return 0.085;
87 
88  if (r <= 0.0001) return 0.0855+0.01692*(r/0.0001)-0.02401*Pow->powA(r/0.0001,2.)+0.01274*Pow->powA(r/0.0001,3.);
89 
90  if (r > 0.0001 && r <= 0.01) return 0.09141 + 0.23846*((r-0.0001)/0.0099)
91  - 1.75947*Pow->powA((r-.0001)/0.0099,2.)
92  + 10.98611*Pow->powA((r-0.0001)/0.0099,3.)
93  - 43.19181*Pow->powA((r-.0001)/0.0099,4.)
94  +105.70005*Pow->powA((r-.0001)/.0099,5.)
95  -160.72894*Pow->powA((r-.0001)/.0099,6.)
96  +147.43399*Pow->powA((r-.0001)/.0099,7.)
97  - 74.60043*Pow->powA((r-.0001)/0.0099,8.)
98  + 15.97547*Pow->powA((r-.0001)/0.0099,9.);
99 
100  if (r > 0.01 && r <= 0.1537) return 0.14486 + 0.40914*((r-.01)/.1437)
101  - 1.28150*Pow->powA((r-0.01)/0.1437,2.)
102  + 5.07377*Pow->powA((r-0.01)/0.1437,3.)
103  -15.42031*Pow->powA((r-0.01)/0.1437,4.)
104  +31.96346*Pow->powA((r-0.01)/0.1437,5.)
105  -43.12605*Pow->powA((r-0.01)/0.1437,6.)
106  +36.02908*Pow->powA((r-0.01)/0.1437,7.)
107  -16.87185*Pow->powA((r-0.01)/0.1437,8.)
108  + 3.37941*Pow->powA((r-0.01)/0.1437,9.);
109 
110  if (r > 0.1537 && r <= 0.7114) return (-1./2.3)*G4Log(0.71956*(0.1537-r)+0.50158);
111 
112  if (r > 0.7114 && r <= 1.0) return (-1./1.1)*G4Log(1.15292*(0.7114-r)+0.33287);
113  //
114  // Fall through
115  //
116  G4cout << " Random number out of range in SmpGEng " << G4endl;
117  return -1.0;
118 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
Definition: G4Pow.hh:56
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
G4GLOB_DLL std::ostream G4cout
G4double G4Log(G4double x)
Definition: G4Log.hh:230
#define G4endl
Definition: G4ios.hh:61
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:259
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpIsoDir()

void G4fissionEvent::G4SmpIsoDir ( G4double cosdiru,
G4double cosdirv,
G4double cosdirw 
)
private

Definition at line 64 of file G4SmpIsoDir.cc.

64  {
65 
66 /*
67  Description
68  determine the 3 direction cosines of a particle emitted isotropically
69 */
70 
71 /*
72  Input
73  Output
74  - 3 components of the direction cosines
75  (cosdiru, cosdirv, cosdirw)
76 */
77 
78  G4double cospolang, sinpolang, phi;
79 
80 /*
81  Choose emission angle isotropically.
82  Select a polar angle direction cosine.
83 */
85  cospolang = 1.-2.*fisslibrng();
86  sinpolang = std::sqrt(1.-Pow->powA(cospolang, 2.));
87 /*
88  Select an azimuthal angle uniformly on (0,2*pi)
89 */
90  phi = twopi*fisslibrng();
91  *cosdiru = sinpolang * std::cos(phi);
92  *cosdirv = sinpolang * std::sin(phi);
93  *cosdirw = cospolang;
94 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
Definition: G4Pow.hh:56
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
static const double twopi
Definition: G4SIunits.hh:75
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:259
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNEngCf252()

G4double G4fissionEvent::G4SmpNEngCf252 ( G4int  option)
private

Definition at line 64 of file G4SmpNEngCf252.cc.

64  {
65 
66 /*
67  Description
68  Sample energy spectrum for Cf-252.
69 */
70 
71 /*
72  Input
73  option - 0 Mannhart corrected Maxwellian spectrum
74  1 Madland-Nix theoretical spectrum
75  2 Froehner Watt spectrum
76  Return
77  energy of neutron emitted by spontaneous fission
78 */
79 
81 
82  G4double a,b;
83  G4double gpar;
84  G4double g2;
85  G4double ferg;
86  G4double r;
87 
88  r = fisslibrng();
89 
90 /*
91  Mannhart Corrected Spectrum
92 */
93  if(option == 0) {
94  if(r == 0) return 0.000001;
95  if (r > 0.0 && r <= 0.0005)
96  return 0.00003 + 0.04992*(r/0.0005) - 0.59473*Pow->powN(r/0.0005,2)
97  + 5.44877*Pow->powN(r/0.0005,3) - 29.38086*Pow->powN(r/0.0005,4)
98  + 97.14014*Pow->powN(r/0.0005,5) - 202.82112*Pow->powN(r/0.0005,6)
99  + 268.2301*Pow->powN(r/0.0005,7) - 217.75316*Pow->powN(r/0.0005,8)
100  + 98.96285*Pow->powN(r/0.0005,9) - 19.27077*Pow->powN(r/0.0005,10);
101 
102  if (r > 0.0005 && r <= 0.005)
103  return 0.01118 + 0.06715*((r-.0005)/.0045)
104  - 0.09236*Pow->powN((r-.0005)/.0045,2) + 0.26224*Pow->powN((r-.0005)/.0045,3)
105  - 0.64784*Pow->powN((r-.0005)/.0045,4) + 1.16830*Pow->powN((r-.0005)/.0045,5)
106  - 1.43858*Pow->powN((r-.0005)/.0045,6) + 1.13771*Pow->powN((r-.0005)/.0045,7)
107  - 0.51839*Pow->powN((r-.0005)/.0045,8) + 0.10302*Pow->powN((r-.0005)/.0045,9);
108 
109  if (r > 0.005 && r <= 0.05)
110  return 0.05244+0.32101*((r-.005)/.045)
111  - 0.52574*Pow->powN((r-.005)/.045,2) + 2.80540*Pow->powN((r-.005)/.045,3)
112  - 14.88036*Pow->powN((r-.005)/.045,4) + 55.46869*Pow->powN((r-.005)/.045,5)
113  -133.64517*Pow->powN((r-.005)/.045,6) + 202.88434*Pow->powN((r-.005)/.045,7)
114  -186.86758*Pow->powN((r-.005)/.045,8) + 95.19530*Pow->powN((r-.005)/.045,9)
115  - 20.55275*Pow->powN((r-.005)/.045,10);
116 
117  if(r > 0.05 && r <= 0.25) return 0.25585+0.75532*((r-.05)/.2)-0.73676*Pow->powN((r-.05)/.2,2)+3.65653*Pow->powN((r-.05)/.2,3)-13.80528*Pow->powN((r-.05)/.2,4)+33.35932*Pow->powN((r-.05)/.2,5)-50.0410*Pow->powN((r-.05)/.2,6)+45.13793*Pow->powN((r-.05)/.2,7)-22.4072*Pow->powN((r-.05)/.2,8)+4.70141*Pow->powN((r-.05)/.2,9);
118 
119  if(r > 0.25 && r <= 0.50) return 0.87609+0.74687*((r-.25)/.25)+0.02849*Pow->powN((r-.25)/.25,2)+0.06145*Pow->powN((r-.25)/.25,3)-0.09589*Pow->powN((r-.25)/.25,4)+0.29798*Pow->powN((r-.25)/.25,5)-0.57707*Pow->powN((r-.25)/.25,6)+0.66181*Pow->powN((r-.25)/.25,7)-0.40720*Pow->powN((r-.25)/.25,8)+0.10370*Pow->powN((r-.25)/.25,9);
120 
121  if(r > 0.5 && r <= 0.75) return 1.69622+0.93896*((r-.5)/.25)+0.16428*Pow->powN((r-.5)/.25,2)+0.21761*Pow->powN((r-.5)/.25,3)-0.96904*Pow->powN((r-.5)/.25,4)+3.34951*Pow->powN((r-.5)/.25,5)-6.35177*Pow->powN((r-.5)/.25,6)+6.90120*Pow->powN((r-.5)/.25,7)-3.98682*Pow->powN((r-.5)/.25,8)+0.95276*Pow->powN((r-.5)/.25,9);
122 
123  if(r > 0.75 && r <= 0.95) return 2.91217+1.52474*((r-.75)/.2)-4.99340*Pow->powN((r-.75)/.2,2)+58.72977*Pow->powN((r-.75)/.2,3)-313.30984*Pow->powN((r-.75)/.2,4)+946.0791*Pow->powN((r-.75)/.2,5)-1679.85559*Pow->powN((r-.75)/.2,6)+1740.83984*Pow->powN((r-.75)/.2,7)-973.51886*Pow->powN((r-.75)/.2,8)+227.06831*Pow->powN((r-.75)/.2,9);
124  if(r > 0.95 && r <= 0.975) return 5.50137-0.99765*((r-.95)/.025)+27.57678*Pow->powN((r-.95)/.025,2)-218.47931*Pow->powN((r-.95)/.025,3)+1024.0426*Pow->powN((r-.95)/.025,4)-3005.86182*Pow->powN((r-.95)/.025,5)+5684.52295*Pow->powN((r-.95)/.025,6)-6919.36182*Pow->powN((r-.95)/.025,7)+5235.71777*Pow->powN((r-.95)/.025,8)-2240.06934*Pow->powN((r-.95)/.025,9)+413.9299*Pow->powN((r-.95)/.025,10);
125 
126  if(r > 0.975 && r <= 0.995) return 6.52172+1.21273*((r-.975)/.02)+0.69998*Pow->powN((r-.975)/.02,2)-1.78886*Pow->powN((r-.975)/.02,3)+11.57883*Pow->powN((r-.975)/.02,4)-39.41592*Pow->powN((r-.975)/.02,5)+88.32992*Pow->powN((r-.975)/.02,6)-127.68685*Pow->powN((r-.975)/.02,7)+115.97678*Pow->powN((r-.975)/.02,8)-60.09069*Pow->powN((r-.975)/.02,9)+13.66798*Pow->powN((r-.975)/.02,10);
127  if(r > 0.995 && r <= 0.999) return 9.00502+1.31798*((r-.995)/.004)-1.17448*Pow->powN((r-.995)/.004,2)+20.15941*Pow->powN((r-.995)/.004,3)-114.27763*Pow->powN((r-.995)/.004,4)+370.04855*Pow->powN((r-.995)/.004,5)-701.888*Pow->powN((r-.995)/.004,6)+776.28204*Pow->powN((r-.995)/.004,7)-462.68823*Pow->powN((r-.995)/.004,8)+115.05296*Pow->powN((r-.995)/.004,9);
128  if(r > 0.999 && r <= 0.9997) return 11.83792-1.8952*((r-.999)/.0007)+50.30901*Pow->powN((r-.999)/.0007,2)-239.56978*Pow->powN((r-.999)/.0007,3)+514.90747*Pow->powN((r-.999)/.0007,4)-508.73672*Pow->powN((r-.999)/.0007,5)+191.09637*Pow->powN((r-.999)/.0007,6);
129  if(r > 0.9997) return 20.;
130  }
131 /*
132  Madland-Nix Spectrum
133 */
134  if(option == 1) {
135  if(r <= 1.001065092e-03) return 1.946313876*Pow->powA(r,0.6667261950);
136  else if(r > 1.001065092e-03 && r <= 1.001389105e-02) return 2.00504119*Pow->powA(r,0.6709990736);
137  else if(r > 1.001389105e-02 && r <= 5.022359145e-02) return 2.107978578*Pow->powA(r,0.7077041191);
138  else if(r > 5.022359145e-02 && r <= 1.000989427e-01) return 2.280517358*Pow->powA(r,0.7077041191);
139  else if(r > 1.000989427e-01 && r <= 1.500872491e-01) return 2.444108408*Pow->powA(r,0.73764526215);
140  else if(r > 1.500872491e-01 && r <= 2.002079974e-01) return 2.621855634*Pow->powA(r,0.7745779546);
141  else if(r > 2.002079974e-01 && r <= 2.25221648e-01) return 2.753099265*Pow->powA(r,0.8044994010);
142  else if(r > 2.25221648e-01 && r <= 2.501564538e-01) return 2.834010751*Pow->powA(r,0.8239187384);
143  else if(r > 2.501564538e-01 && r <= 2.752546770e-01) return 2.911676280*Pow->powA(r,0.8434235719);
144  else if(r > 2.752546770e-01 && r <= 3.000964724e-01) return 2.988430135*Pow->powA(r,0.8635883266);
145  else if(r > 3.000964724e-01 && r <= 3.500470095e-01) return 3.099471293*Pow->powA(r,0.8942289512);
146  else if(r > 3.500470095e-01 && r <= 4.001118970e-01) return 3.244686176*Pow->powA(r,0.9378302608);
147  else if(r > 4.001118970e-01 && r <= 5.000461778e-01) return 3.543403932*Pow->powA(r,1.0411008510);
148  else if(r > 5.000461778e-01 && r <= 5.501318506e-01) return 3.708358099*Pow->powA(r,1.1068317830);
149  else if(r > 5.501318506e-01 && r <= 6.000655433e-01) return 3.889805304*Pow->powA(r,1.1868908770);
150  else if(r > 6.000655433e-01 && r <= 6.500147305e-01) return 4.092497225*Pow->powA(r,1.2865658570);
151  else if(r > 6.500147305e-01 && r <= 7.000271284e-01) return 4.322906068*Pow->powA(r,1.4140909190);
152  else if(r > 7.000271284e-01 && r <= 7.501159110e-01) return 4.589909069*Pow->powA(r,1.5828217210);
153  else if(r > 7.501159110e-01 && r <= 8.000662513e-01) return 4.906598744*Pow->powA(r,1.8162034790);
154  else if(r > 8.000662513e-01 && r <= 8.500772033e-01) return 5.297053797*Pow->powA(r,2.1626825870);
155  else if(r > 8.500772033e-01 && r <= 8.750123088e-01) return 5.650277904*Pow->powA(r,2.5517142900);
156  else if(r > 8.750123088e-01 && r <= 9.000106866e-01) return 5.947741976*Pow->powA(r,2.9383159800);
157  else if(r > 9.000106866e-01 && r <= 9.250286977e-01) return 6.317014169*Pow->powA(r,3.5155713570);
158  else if(r > 9.250286977e-01 && r <= 9.350074655e-01) return 6.625757778*Pow->powA(r,4.1118364020);
159  else if(r > 9.350074655e-01 && r <= 9.400070002e-01) return 6.784126941*Pow->powA(r,4.4594479870);
160  else if(r > 9.400070002e-01 && r <= 9.500026229e-01) return 6.969180156*Pow->powA(r,4.9019105900);
161  else if(r > 9.500026229e-01 && r <= 9.600065896e-01) return 7.254643542*Pow->powA(r,5.6894827520);
162  else if(r > 9.600065896e-01 && r <= 9.700165577e-01) return 7.613500497*Pow->powA(r,6.8841593900);
163  else if(r > 9.700165577e-01 && r <= 9.750157135e-01) return 7.944100103*Pow->powA(r,8.2544400860);
164  else if(r > 9.750157135e-01 && r <= 9.800101585e-01) return 8.228439642*Pow->powA(r,9.6531190300);
165  else if(r > 9.800101585e-01 && r <= 9.850018119e-01) return 8.586524083*Pow->powA(r,11.783756400);
166  else if(r > 9.850018119e-01 && r <= 9.875072929e-01) return 8.917364901*Pow->powA(r,14.240137310);
167  else if(r > 9.875072929e-01 && r <= 9.900006975e-01) return 9.202675761*Pow->powA(r,16.76089029);
168  else if(r > 9.900006975e-01 && r <= 9.925048152e-01) return 9.562781386*Pow->powA(r,20.61962568);
169  else if(r > 9.925048152e-01 && r <= 9.935030103e-01) return 9.867915664*Pow->powA(r,24.69147261);
170  else if(r > 9.935030103e-01 && r <= 9.945000177e-01) return 10.08727342*Pow->powA(r,28.07701487);
171  else if(r > 9.945000177e-01 && r <= 9.950025127e-01) return 10.27382614*Pow->powA(r,31.36001051);
172  else if(r > 9.950025127e-01 && r <= 9.955029368e-01) return 10.41724243*Pow->powA(r,34.13127669);
173  else if(r > 9.955029368e-01 && r <= 9.960005970e-01) return 10.57636221*Pow->powA(r,37.50088614);
174  else if(r > 9.960005970e-01 && r <= 9.965016080e-01) return 10.75639015*Pow->powA(r,41.72354164);
175  else if(r > 9.965016080e-01 && r <= 9.970001795e-01) return 10.96366661*Pow->powA(r,47.18729543);
176  else if(r > 9.970001795e-01 && r <= 9.975004375e-01) return 11.20771170*Pow->powA(r,54.54899604);
177  else if(r > 9.975004375e-01 && r <= 9.978504408e-01) return 11.45202216*Pow->powA(r,63.11906699);
178  else if(r > 9.978504408e-01 && r <= 9.989524675e-01)
179  return 2.72756636666e5-5.47258138432e5*r+2.74514044871e5*Pow->powN(r,2);
180  else if(r > 9.989524675e-01 && r <= 9.994929298e-01)
181  return 1.14946879661e6-2.30252188973e6*r+1.15306661788e6*Pow->powN(r,2);
182  else if(r > 9.994929298e-01 && r <= 9.997558922e-01)
183  return 4.90621526236e6-9.81982943883e6*r+4.91362868673e6*Pow->powN(r,2);
184  else if(r > 9.997558922e-01 && r <= 9.998830120e-01)
185  return 2.11365688795184e7-4.22884732250404e7*r+2.11519198434219e7*Pow->powN(r,2);
186  else if(r > 9.998830120e-01 && r <= 9.999441620e-01)
187  return 9.18987945911229e7-1.83829506875257e8*r+9.19307287711182e7*Pow->powN(r,2);
188  else if(r > 9.999441620e-01 && r <= 9.999734440e-01)
189  return 4.02781481130433e8-8.05629656768407e8*r+4.02848193115356e8*Pow->powN(r,2);
190  else if(r > 9.999734440e-01 && r <= 9.999874120e-01)
191  return 1.77804635135775e9-3.55623257045546e9*r+1.77818623756641e9*Pow->powN(r,2);
192  else if(r > 9.999874120e-01 && r <= 9.999940510e-01)
193  return 7.90099032702915e9-1.58022749659903e10*r+7.90128465842187e9*Pow->powN(r,2);
194  else if(r > 9.999940510e-01 && r <= 9.999971960e-01)
195  return 3.53223507413091e10-7.06453227162775e10*r+3.53229719954219e10*Pow->powN(r,2);
196  else if(r > 9.999971960e-01 && r <= 9.999986820e-01)
197  return 1.58786475903785e11-3.17574266841213e11*r+1.58787790958875e11*Pow->powN(r,2);
198  else if(r > 9.999986820e-01 && r <= 9.999993820e-01)
199  return 7.17433904438156e11-1.43487059972047e12*r+7.17436695304750e11*Pow->powN(r,2);
200  else if(r > 9.999993820e-01 && r <= 9.999997110e-01)
201  return 3.257374123945330e12-6.514754184993900e12*r+3.257380061072000e12*Pow->powN(r,2);
202  else if(r > 9.999997110e-01 && r <= 9.999998650e-01)
203  return 1.48641255466171e13-2.97282637539286e13*r+1.48641382073360e13*Pow->powN(r,2);
204  else if(r > 9.999998650e-01 && r <= 9.999999370e-01)
205  return 6.82056055248876e13-1.36411238119518e14*r+6.82056325946560e13*Pow->powN(r,2);
206  else if(r > 9.999999370e-01 && r <= 1.000000000e00)
207  return 3.14919363013517e14-6.29838784079090e14*r+3.14919421065600e14*Pow->powN(r,2);
208  }
209 /*
210  Frohner Watt Spectrum
211 */
212  if (option == 2) {
213  a=1.175;
214  b=1.040;
215 
216  G4int icounter=0;
217  G4int icounter_max=1024;
218  do {
219  gpar = std::sqrt(Pow->powA(1+0.125*a*b,2.)-1)+(1+0.125*a*b);
220  g2=-G4Log(fisslibrng());
221  ferg=a*gpar*g2;
222 
223  icounter++;
224  if ( icounter > icounter_max ) {
225  G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl;
226  break;
227  }
228 
229  } while (Pow->powA((1-gpar)*(1+g2)-G4Log(fisslibrng()),2.) > b*ferg);
230  // Loop checking, 11.03.2015, T. Koi
231  return ferg;
232  }
233 
234  //
235  // Fall through
236  //
237 
238  G4cout << " SmpNEngCf252: unrecognized option = " << option << G4endl;
239  return -1.0;
240 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
Definition: G4Pow.hh:56
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
G4double G4Log(G4double x)
Definition: G4Log.hh:230
#define G4endl
Definition: G4ios.hh:61
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:259
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNuDistDataPu239()

G4int G4fissionEvent::G4SmpNuDistDataPu239 ( G4double  erg)
private

Definition at line 63 of file G4SmpNuDistDataPu239.cc.

63  {
64 
65 /*
66  Description
67  Sample Number of Neutrons from fission in Pu-239 using
68  Zucker and Holden's tabulated data for Pu-239
69 */
70 
71 /*
72  Input
73  erg - incident neutron energy
74  Output
75  G4SmpNuDistDataPu239 - sampled multiplicity
76 
77 */
78 
79  G4double cpnu;
80  G4double pnu[8] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
81  G4double eng;
82  G4double r;
83 
84 /*
85  Check if energy is within the range of experimental values
86 */
87  if (erg > 10) eng=10.;
88  else eng=erg;
89 
90  r=fisslibrng();
91 
92 /*
93  Pu-239 nu distribution
94 */
96  if (eng <= 5.0) pnu[0] = 0.0108826e0 - 0.00207694e0*eng
97  - 6.5e-4*Pow->powN(eng,2) + 4.023e-4*Pow->powN(eng,3)
98  - 7.93e-5*Pow->powN(eng,4) + 5.53666667e-6*Pow->powN(eng,5);
99  if (eng > 5 && eng <= 10) pnu[0] = 0.078606e0 - 5.17531e-2*eng
100  + 1.42034e-2*Pow->powN(eng,2) - 1.96292e-3*Pow->powN(eng,3)
101  + 1.34512e-4*Pow->powN(eng,4) - 3.63416e-6*Pow->powN(eng,5);
102  if (r <= pnu[0]) return 0;
103 
104 
105  if (eng <= 5.0) pnu[1] = 0.0994916e0 - 0.01979542e0*eng
106  - 0.00236583e0*Pow->powN(eng,2) + 0.0020581e0*Pow->powN(eng,3)
107  - 4.14016667e-4*Pow->powN(eng,4) + 2.85666667e-5*Pow->powN(eng,5);
108  if (eng > 5 && eng <= 10) pnu[1] = 0.10052e0 - 2.61361e-2*eng
109  + 3.78355e-3*Pow->powN(eng,2) - 3.70667e-4*Pow->powN(eng,3)
110  + 1.95458e-5*Pow->powN(eng,4) - 3.87499e-7*Pow->powN(eng,5);
111  cpnu=pnu[0]+pnu[1];
112  if (r <= cpnu) return 1;
113 
114 
115  if (eng <= 5.0) pnu[2] = 0.2748898e0 - 0.01565248e0*eng
116  - 0.00749681e0*Pow->powN(eng,2) + 0.00217121e0*Pow->powN(eng,3)
117  - 3.13041667e-4*Pow->powN(eng,4) + 1.88183333e-5*Pow->powN(eng,5);
118  if (eng > 5 && eng <= 10) pnu[2] = 0.282487e0 - 0.0261342e0*eng
119  - 1.16895e-3*Pow->powN(eng,2) + 1.9888e-4*Pow->powN(eng,3)
120  - 6.41257e-6*Pow->powN(eng,4) + 1.02502e-7*Pow->powN(eng,5);
121  cpnu=cpnu+pnu[2];
122  if (r <= cpnu) return 2;
123 
124  if (eng <= 5.0) pnu[3] = 0.3269196e0 + 0.00428312e0*eng
125  - 0.00189322e0*Pow->powN(eng,2) - 4.31925001e-4*Pow->powN(eng,3)
126  + 1.18466667e-4*Pow->powN(eng,4) - 9.04166668e-6*Pow->powN(eng,5);
127  if (eng > 5 && eng <= 10) pnu[3] = 0.329058e0 + 4.023e-3*eng
128  - 3.06402e-3*Pow->powN(eng,2) + 2.2628e-4*Pow->powN(eng,3)
129  - 1.50875e-5*Pow->powN(eng,4) + 4.39168e-7*Pow->powN(eng,5);
130  cpnu=cpnu+pnu[3];
131  if (r <= cpnu) return 3;
132 
133  if (eng <= 5.0) pnu[4] = 0.2046061e0 + 0.02633899e0*eng
134  + 0.0041514e0*Pow->powN(eng,2) - 0.00275542e0*Pow->powN(eng,3)
135  + 5.0325e-4*Pow->powN(eng,4) - 3.32158333e-5*Pow->powN(eng,5);
136  if (eng > 5 && eng <= 10) pnu[4] = 0.18992e0 + 4.55188e-2*eng
137  - 7.06316e-3*Pow->powN(eng,2) + 7.29916e-4*Pow->powN(eng,3)
138  - 4.71791e-5*Pow->powN(eng,4) + 1.185e-6*Pow->powN(eng,5);
139  cpnu=cpnu+pnu[4];
140  if (r <= cpnu) return 4;
141 
142  if (eng <= 5.0) pnu[5] = 0.0726834e0 + 0.00116043e0*eng
143  + 0.007572e0*Pow->powN(eng,2) - 0.00161972e0*Pow->powN(eng,3)
144  + 2.3545e-4*Pow->powN(eng,4) - 1.546e-5*Pow->powN(eng,5);
145  if (eng > 5 && eng <= 10) pnu[5] = 0.0779212e0 - 1.35849e-3*eng
146  + 6.68583e-3*Pow->powN(eng,2) - 7.98649e-4*Pow->powN(eng,3)
147  + 4.88625e-5*Pow->powN(eng,4) - 1.54167e-6*Pow->powN(eng,5);
148  cpnu=cpnu+pnu[5];
149  if (r <= cpnu) return 5;
150 
151  if (eng <= 5.0) pnu[6] = 0.0097282e0 + 0.00494589e0*eng
152  + 0.00115294e0*Pow->powN(eng,2) - 3.25191667e-4*Pow->powN(eng,3)
153  + 6.00083333e-5*Pow->powN(eng,4) - 3.745e-6*Pow->powN(eng,5);
154  if (eng > 5 && eng <= 10) pnu[6] = 7.85432e-3 + 7.33182e-3*eng
155  - 2.03705e-4*Pow->powN(eng,2) + 8.73787e-5*Pow->powN(eng,3)
156  - 4.24164e-6*Pow->powN(eng,4) + 2.37499e-7*Pow->powN(eng,5);
157  cpnu=cpnu+pnu[6];
158  if (r <= cpnu) return 6;
159 
160  if (eng <= 5.0) pnu[7] = 6.301e-4 + 1.10666667e-4*eng
161  + 4.28016667e-4*Pow->powN(eng,2) + 1.12041667e-5*Pow->powN(eng,3)
162  - 4.31666667e-6*Pow->powN(eng,4) + 3.29166667e-7*Pow->powN(eng,5);
163  if (eng > 5 && eng <= 10) pnu[7] = 1.5323e-3 - 7.91857e-4*eng
164  + 8.01017e-4*Pow->powN(eng,2) - 6.82833e-5*Pow->powN(eng,3)
165  + 4.38333e-6*Pow->powN(eng,4) - 6.0e-8*Pow->powN(eng,5);
166  cpnu=cpnu+pnu[7];
167  if (r <= cpnu) return 7;
168  else return 8;
169 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
Definition: G4Pow.hh:56
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNuDistDataPu239_241()

G4int G4fissionEvent::G4SmpNuDistDataPu239_241 ( G4double  nubar)
private

Definition at line 63 of file G4SmpNuDistDataPu239_241.cc.

63  {
64 
65 /*
66  Description
67  Sample Number of Neutrons from fission in Pu-239 and Pu-241 using
68  Zucker and Holden's tabulated data for Pu-239
69  The P(nu) distribution is given as a function of the average
70  number of neutrons from fission, based on interpolation of the
71  Pu-239 data from Zucker and Holden.
72 */
73 
74 /*
75  Input
76  nubar - average number of neutrons per fission
77  Output
78  G4SmpNuDistDataPu239_241 - sampled multiplicity
79 
80 */
81 
82  G4double pnu[9], cpnu, sum;
83  G4double r;
84 
85 /*
86  Check if nubar is within the range of experimental values
87 */
88  if(nubar >= 2.85 && nubar <= 4.25) {
89 /*
90  Use Zucker and Holden Data
91 */
93  pnu[0]=-2.412937e-3*Pow->powN(nubar,3)+3.210687e-2*Pow->powN(nubar,2)-1.434037e-1*nubar+2.150733e-1;
94  pnu[1]=-2.650615e-2*Pow->powN(nubar,3)+3.290389e-1*Pow->powN(nubar,2)-1.389007*nubar+2.002327;
95  pnu[2]=3.232028e-2*Pow->powN(nubar,3)-3.176093e-1*Pow->powN(nubar,2)+8.605098e-1*nubar-3.411191e-1;
96  pnu[3]=1.623289e-2*Pow->powN(nubar,3)-2.414705e-1*Pow->powN(nubar,2)+1.007282*nubar-9.583769e-1;
97  pnu[4]=1.932275e-2*Pow->powN(nubar,3)-2.923666e-1*Pow->powN(nubar,2)+1.421383*nubar-1.924025;
98  pnu[5]=-6.185679e-2*Pow->powN(nubar,3)+6.82888e-1*Pow->powN(nubar,2)-2.347653*nubar+2.647049;
99  pnu[6]=1.79773e-2*Pow->powN(nubar,3)-1.60516e-1*Pow->powN(nubar,2)+5.228077e-1*nubar-5.939556e-1;
100  pnu[7]=3.530038e-3*Pow->powN(nubar,4)-4.925425e-2*Pow->powN(nubar,3)+2.726784e-1*Pow->powN(nubar,2)-6.81281e-1*nubar+6.347577e-1;
101  pnu[8]=2.837523e-3*Pow->powN(nubar,3)-2.678644e-2*Pow->powN(nubar,2)+8.545638e-2*nubar-9.156078e-2;
102 
103  sum=pnu[0]+pnu[1]+pnu[2]+pnu[3]+pnu[4]+pnu[5]+pnu[6]+pnu[7]+pnu[8];
104 
105  pnu[0]=pnu[0]/sum;
106  pnu[1]=pnu[1]/sum;
107  pnu[2]=pnu[2]/sum;
108  pnu[3]=pnu[3]/sum;
109  pnu[4]=pnu[4]/sum;
110  pnu[5]=pnu[5]/sum;
111  pnu[6]=pnu[6]/sum;
112  pnu[7]=pnu[7]/sum;
113  pnu[8]=pnu[8]/sum;
114 
115  r=fisslibrng();
116 
117  if(r <= pnu[0]) return 0;
118 
119  cpnu=pnu[0]+pnu[1];
120  if(r <= cpnu) return 1;
121 
122  cpnu=cpnu+pnu[2];
123  if(r <= cpnu) return 2;
124 
125  cpnu=cpnu+pnu[3];
126  if(r <= cpnu) return 3;
127 
128  cpnu=cpnu+pnu[4];
129  if(r <= cpnu) return 4;
130 
131  cpnu=cpnu+pnu[5];
132  if(r <= cpnu) return 5;
133 
134  cpnu=cpnu+pnu[6];
135  if(r <= cpnu) return 6;
136 
137  cpnu=cpnu+pnu[7];
138  if(r <= cpnu) return 7;
139  else return 8;
140 
141  } else {
142 /*
143  Use Terrell's formula
144 */
145  return (G4int) G4SmpTerrell(nubar);
146  }
147 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
Definition: G4Pow.hh:56
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
int G4int
Definition: G4Types.hh:78
G4double G4SmpTerrell(G4double nubar)
Definition: G4SmpTerrell.cc:69
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNuDistDataPu239_241_MC()

G4int G4fissionEvent::G4SmpNuDistDataPu239_241_MC ( G4double  nubar)
private

Definition at line 62 of file G4SmpNuDistDataPu239_241_MC.cc.

62  {
63 
64 /*
65  Description
66  Sample Number of Neutrons from fission in Pu-239 and Pu-241 using
67  Zucker and Holden's tabulated data for Pu-239
68  The 11 P(nu) distributions are given as a function of nubar,
69  the average number of neutrons from induced fission for the
70  11 different energies (0 to 10 MeV), based on the Pu-239 data
71  from Zucker and Holden.
72 */
73 
74 /*
75  Input
76  nubar - average number of neutrons per fission
77  Output
78  G4SmpNuDistDataPu239_241_MC - sampled multiplicity
79 
80 */
81 
82  static G4double Pu239nu [11] [9] = {
83  {.0108826, .0994916, .2748898, .3269196, .2046061, .0726834, .0097282, .0006301, .0001685},
84  {.0084842, .0790030, .2536175, .3289870, .2328111, .0800161, .0155581, .0011760, .0003469},
85  {.0062555, .0611921, .2265608, .3260637, .2588354, .0956070, .0224705, .0025946, .0005205},
86  {.0045860, .0477879, .1983002, .3184667, .2792811, .1158950, .0301128, .0048471, .0007233},
87  {.0032908, .0374390, .1704196, .3071862, .2948565, .1392594, .0386738, .0078701, .0010046},
88  {.0022750, .0291416, .1437645, .2928006, .3063902, .1641647, .0484343, .0116151, .0014149},
89  {.0014893, .0222369, .1190439, .2756297, .3144908, .1892897, .0597353, .0160828, .0029917},
90  {.0009061, .0163528, .0968110, .2558524, .3194566, .2134888, .0729739, .0213339, .0020017},
91  {.0004647, .0113283, .0775201, .2335926, .3213289, .2356614, .0886183, .0274895, .0039531},
92  {.0002800, .0071460, .0615577, .2089810, .3200121, .2545846, .1072344, .0347255, .0054786},
93  {.0002064, .0038856, .0492548, .1822078, .3154159, .2687282, .1295143, .0432654, .0075217}
94  };
95  static G4double Pu239nubar [11] = {
96  2.8760000,
97  3.0088800,
98  3.1628300,
99  3.3167800,
100  3.4707300,
101  3.6246800,
102  3.7786300,
103  3.9325800,
104  4.0865300,
105  4.2404900,
106  4.3944400
107  };
108  G4double fraction, r, cum;
109  G4int engind, nu;
110 
111 /*
112  Check if nubar is within the range of experimental values
113 */
114  if(nubar >= Pu239nubar[0] && nubar <= Pu239nubar[10]) {
115 /*
116  Use Zucker and Holden Data
117 */
118  engind = 1;
119  while (nubar > Pu239nubar[engind]){ engind++;}
120  // Loop checking, 11.03.2015, T. Koi
121  fraction = (nubar-Pu239nubar[engind-1])/(Pu239nubar[engind]-Pu239nubar[engind-1]);
122  if(fisslibrng() > fraction) engind--;
123 
124  r = fisslibrng();
125  nu = 0;
126  cum = Pu239nu[engind][0];
127  while (r > cum && nu < 8){
128  // Loop checking, 11.03.2015, T. Koi
129  nu++;
130  cum += Pu239nu[engind][nu];
131  }
132  return nu;
133  } else {
134 /*
135  Use Terrell's formula
136 */
137  return (G4int) G4SmpTerrell(nubar);
138  }
139 }
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
int G4int
Definition: G4Types.hh:78
G4double G4SmpTerrell(G4double nubar)
Definition: G4SmpTerrell.cc:69
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNuDistDataU232_234_236_238()

G4int G4fissionEvent::G4SmpNuDistDataU232_234_236_238 ( G4double  nubar)
private

Definition at line 63 of file G4SmpNuDistDataU232_234_236_238.cc.

63  {
64 
65 /*
66  Description
67  Sample Number of Neutrons from fission in U-232, U-234, U-236
68  and U-238 using Zucker and Holden's tabulated data for U-238
69  The P(nu) distribution is given as a function of the average
70  number of neutrons from fission, based on interpolation of the
71  U-238 data from Zucker and Holden.
72 */
73 
74 /*
75  Input
76  nubar - average number of neutrons per fission
77  Output
78  G4SmpNuDistDataU232_234_236_238 - sampled multiplicity
79 
80 */
81 
82  G4double pnu[9], cpnu, sum;
83  G4double r;
84 
85 /*
86  Check if nubar is within the range of experimental values
87 */
88  if (nubar >= 2.25 && nubar <= 3.80) {
89 /*
90  Use Zucker and Holden Data
91 */
93  pnu[0]=-7.705432e-3*Pow->powN(nubar,3)+8.904671e-2*Pow->powN(nubar,2)-3.488123e-1*nubar+4.627291e-1;
94  pnu[1]=-2.879938e-2*Pow->powN(nubar,3)+3.629189e-1*Pow->powN(nubar,2)-1.545284*nubar+2.229503;
95  pnu[2]=6.543684e-2*Pow->powN(nubar,3)-6.673117e-1*Pow->powN(nubar,2)+2.087358*nubar-1.771396;
96  pnu[3]=1.412971e-2*Pow->powN(nubar,3)-2.309842e-1*Pow->powN(nubar,2)+1.022451*nubar-1.032235;
97  pnu[4]=-5.163167e-2*Pow->powN(nubar,3)+4.457516e-1*Pow->powN(nubar,2)-1.114981*nubar+9.484241e-1;
98  pnu[5]=8.758841e-4*Pow->powN(nubar,3)+3.707461e-2*Pow->powN(nubar,2)-1.565149e-1*nubar+1.851039e-1;
99  pnu[6]=-3.871089e-5*Pow->powN(nubar,3)+1.936524e-2*Pow->powN(nubar,2)-8.091057e-2*nubar+9.019871e-2;
100  pnu[7]=3.945995e-3*Pow->powN(nubar,3)-2.697509e-2*Pow->powN(nubar,2)+6.237296e-2*nubar-4.820745e-2;
101  pnu[8]=1.708054e-3*Pow->powN(nubar,4)-1.706039e-2*Pow->powN(nubar,3)+6.550213e-2*Pow->powN(nubar,2)-1.135e-1*nubar+7.443828e-2;
102 
103  sum=pnu[0]+pnu[1]+pnu[2]+pnu[3]+pnu[4]+pnu[5]+pnu[6]+pnu[7]+pnu[8];
104 
105  pnu[0]=pnu[0]/sum;
106  pnu[1]=pnu[1]/sum;
107  pnu[2]=pnu[2]/sum;
108  pnu[3]=pnu[3]/sum;
109  pnu[4]=pnu[4]/sum;
110  pnu[5]=pnu[5]/sum;
111  pnu[6]=pnu[6]/sum;
112  pnu[7]=pnu[7]/sum;
113  pnu[8]=pnu[8]/sum;
114 
115  r=fisslibrng();
116 
117  if(r <= pnu[0]) return 0;
118 
119  cpnu=pnu[0]+pnu[1];
120  if(r <= cpnu) return 1;
121 
122  cpnu=cpnu+pnu[2];
123  if(r <= cpnu) return 2;
124 
125  cpnu=cpnu+pnu[3];
126  if(r <= cpnu) return 3;
127 
128  cpnu=cpnu+pnu[4];
129  if(r <= cpnu) return 4;
130 
131  cpnu=cpnu+pnu[5];
132  if(r <= cpnu) return 5;
133 
134  cpnu=cpnu+pnu[6];
135  if(r <= cpnu) return 6;
136 
137  cpnu=cpnu+pnu[7];
138  if(r <= cpnu) return 7;
139  else return 8;
140 
141  } else {
142 /*
143  Use Terrell's formula
144 */
145  return (G4int) G4SmpTerrell(nubar);
146  }
147 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
Definition: G4Pow.hh:56
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
int G4int
Definition: G4Types.hh:78
G4double G4SmpTerrell(G4double nubar)
Definition: G4SmpTerrell.cc:69
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNuDistDataU232_234_236_238_MC()

G4int G4fissionEvent::G4SmpNuDistDataU232_234_236_238_MC ( G4double  nubar)
private

Definition at line 62 of file G4SmpNuDistDataU232_234_236_238_MC.cc.

62  {
63 
64 /*
65  Description
66  Sample Number of Neutrons from fission in U-232, U-234, U-236,
67  and U-238 using Zucker and Holden's tabulated data for U-238
68  The 11 P(nu) distributions are given as a function of nubar,
69  the average number of neutrons from induced fission for the
70  11 different energies (0 to 10 MeV), based on the U-238 data
71  from Zucker and Holden.
72 */
73 
74 /*
75  Input
76  nubar - average number of neutrons per fission
77  Output
78  G4SmpNuDistDataU232_234_236_238_MC - sampled multiplicity
79 
80 */
81 
82  static G4double U238nu [11] [9] = {
83  {.0396484, .2529541, .2939544, .2644470, .1111758, .0312261, .0059347, .0005436, .0001158},
84  {.0299076, .2043215, .2995886, .2914889, .1301480, .0363119, .0073638, .0006947, .0001751},
85  {.0226651, .1624020, .2957263, .3119098, .1528786, .0434233, .0097473, .0009318, .0003159},
86  {.0170253, .1272992, .2840540, .3260192, .1779579, .0526575, .0130997, .0013467, .0005405},
87  {.0124932, .0984797, .2661875, .3344938, .2040116, .0640468, .0173837, .0020308, .0008730},
88  {.0088167, .0751744, .2436570, .3379711, .2297901, .0775971, .0225619, .0030689, .0013626},
89  {.0058736, .0565985, .2179252, .3368863, .2541575, .0933127, .0286200, .0045431, .0031316},
90  {.0035997, .0420460, .1904095, .3314575, .2760413, .1112075, .0355683, .0065387, .0031316},
91  {.0019495, .0309087, .1625055, .3217392, .2943792, .1313074, .0434347, .0091474, .0046284},
92  {.0008767, .0226587, .1356058, .3076919, .3080816, .1536446, .0522549, .0124682, .0067176},
93  {.0003271, .0168184, .1111114, .2892434, .3160166, .1782484, .0620617, .0166066, .0095665}
94  };
95  static G4double U238nubar [11] = {
96  2.2753781,
97  2.4305631,
98  2.5857481,
99  2.7409331,
100  2.8961181,
101  3.0513031,
102  3.2064881,
103  3.3616731,
104  3.5168581,
105  3.6720432,
106  3.8272281
107  };
108  G4double fraction, r, cum;
109  G4int engind, nu;
110 
111 /*
112  Check if nubar is within the range of experimental values
113 */
114  if(nubar >= U238nubar[0] && nubar <= U238nubar[10]) {
115 /*
116  Use Zucker and Holden Data
117 */
118  engind = 1;
119  while (nubar > U238nubar[engind]){ engind++;}
120  // Loop checking, 11.03.2015, T. Koi
121  fraction = (nubar-U238nubar[engind-1])/(U238nubar[engind]-U238nubar[engind-1]);
122  if(fisslibrng() > fraction) engind--;
123 
124  r = fisslibrng();
125  nu = 0;
126  cum = U238nu[engind][0];
127  while (r > cum && nu < 8){
128  // Loop checking, 11.03.2015, T. Koi
129  nu++;
130  cum += U238nu[engind][nu];
131  }
132  return nu;
133  } else {
134 /*
135  Use Terrell's formula
136 */
137  return (G4int) G4SmpTerrell(nubar);
138  }
139 }
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
int G4int
Definition: G4Types.hh:78
G4double G4SmpTerrell(G4double nubar)
Definition: G4SmpTerrell.cc:69
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNuDistDataU233_235()

int G4fissionEvent::G4SmpNuDistDataU233_235 ( G4double  nubar)
private

Definition at line 64 of file G4SmpNuDistDataU233_235.cc.

64  {
65 
66  G4Pow* Pow = G4Pow::GetInstance();
67 /*
68  Description
69  Sample Number of Neutrons from fission in U-233 and U-235 using
70  Zucker and Holden's tabulated data for U-235
71  The P(nu) distribution is given as a function of the average
72  number of neutrons from fission, based on interpolation of the
73  U-235 data from Zucker and Holden.
74 */
75 
76 /*
77  Input
78  nubar - average number of neutrons per fission
79  Output
80  G4SmpNuDistDataU233_235 - sampled multiplicity
81 
82 */
83 
84  G4double pnu[8], cpnu, sum;
85  G4double r;
86 
87 /*
88  Check if nubar is within the range of experimental values
89 */
90  if(nubar >= 2.25 && nubar <= 4.0) {
91 /*
92  Use Zucker and Holden Data
93 */
94  if(nubar <= 2.8738) pnu[0]=-9.279554e-02*Pow->powN(nubar,3)+8.036687e-01*Pow->powN(nubar,2)-2.342684*nubar+2.309035;
95  else if(nubar > 2.8738 && nubar <= 3.4272) pnu[0]=1.50072e-2*Pow->powN(nubar,2)-1.109109e-1*nubar+2.063133e-1;
96  else pnu[0]=1.498897e+3*G4Exp(-3.883864*nubar);
97 
98  if(nubar <= 3.2316) pnu[1]=3.531126e-2*Pow->powN(nubar,3)-2.787213e-1*Pow->powN(nubar,2)+5.824072e-1*nubar-1.067136e-1;
99  else pnu[1]=6.574492e-2*Pow->powN(nubar,2)-5.425741e-1*nubar+1.123199;
100 
101  pnu[2]=1.274643e-2*Pow->powN(nubar,3)-1.387954e-1*Pow->powN(nubar,2)+3.264669e-1*nubar+1.77148e-1;
102 
103  pnu[3]=5.473738e-2*Pow->powN(nubar,5)-8.835826e-1*Pow->powN(nubar,4)+5.657201*Pow->powN(nubar,3)-1.802669e+1*Pow->powN(nubar,2)+2.867937e+1*nubar-1.794296e+1;
104 
105  pnu[4]=-3.591076e-2*Pow->powN(nubar,3)+3.092624e-1*Pow->powN(nubar,2)-7.184805e-1*nubar+5.649400e-1;
106 
107  if(nubar <= 2.8738) pnu[5]=1.699374e-2*Pow->powN(nubar,2)-1.069558e-3*nubar-6.981430e-2;
108  else pnu[5]=2.100175e-2*Pow->powN(nubar,3)-1.705788e-1*Pow->powN(nubar,2)+5.575467e-1*nubar-6.245873e-1;
109 
110  if(nubar <= 3.0387) pnu[6]=9.431919e-7*Pow->powA(nubar,8.958848);
111  else pnu[6]=4.322428e-3*Pow->powN(nubar,3)-2.094790e-2*Pow->powN(nubar,2)+4.449671e-2*nubar-4.435987e-2;
112 
113  pnu[7]=5.689084e-3*Pow->powN(nubar,4)-6.591895e-2*Pow->powN(nubar,3)+2.886861e-1*Pow->powN(nubar,2)-5.588146e-1*nubar+4.009166e-1;
114 
115  sum=pnu[0]+pnu[1]+pnu[2]+pnu[3]+pnu[4]+pnu[5]+pnu[6]+pnu[7];
116 
117  pnu[0]=pnu[0]/sum;
118  pnu[1]=pnu[1]/sum;
119  pnu[2]=pnu[2]/sum;
120  pnu[3]=pnu[3]/sum;
121  pnu[4]=pnu[4]/sum;
122  pnu[5]=pnu[5]/sum;
123  pnu[6]=pnu[6]/sum;
124  pnu[7]=pnu[7]/sum;
125 
126  r=fisslibrng();
127 
128  if(r <= pnu[0]) return (int) 0;
129 
130  cpnu=pnu[0]+pnu[1];
131  if(r <= cpnu) return (int) 1;
132 
133  cpnu=cpnu+pnu[2];
134  if(r <= cpnu) return (int) 2;
135 
136  cpnu=cpnu+pnu[3];
137  if(r <= cpnu) return (int) 3;
138 
139  cpnu=cpnu+pnu[4];
140  if(r <= cpnu) return (int) 4;
141 
142  cpnu=cpnu+pnu[5];
143  if(r <= cpnu) return (int) 5;
144 
145  cpnu=cpnu+pnu[6];
146  if(r <= cpnu) return (int) 6;
147  else return (int) 7;
148  } else {
149 /*
150  Use Terrell's formula
151 */
152  return (int) G4SmpTerrell(nubar);
153  }
154 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
Definition: G4Pow.hh:56
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
G4double G4SmpTerrell(G4double nubar)
Definition: G4SmpTerrell.cc:69
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:259
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNuDistDataU233_235_MC()

G4int G4fissionEvent::G4SmpNuDistDataU233_235_MC ( G4double  nubar)
private

Definition at line 62 of file G4SmpNuDistDataU233_235_MC.cc.

62  {
63 
64 /*
65  Description
66  Sample Number of Neutrons from fission in U-233 and U-235 using
67  Zucker and Holden's tabulated data for U-235
68  The 11 P(nu) distributions are given as a function of nubar,
69  the average number of neutrons from induced fission for the
70  11 different energies (0 to 10 MeV), based on the U-235 data
71  from Zucker and Holden.
72 */
73 
74 /*
75  Input
76  nubar - average number of neutrons per fission
77  Output
78  G4SmpNuDistDataU233_235_MC - sampled multiplicity
79 
80 */
81 
82  static G4double U235nu [11] [8] = {
83  {.0317223, .1717071, .3361991, .3039695, .1269459, .0266793, .0026322, .0001449},
84  {.0237898, .1555525, .3216515, .3150433, .1444732, .0356013, .0034339, .0004546},
85  {.0183989, .1384891, .3062123, .3217566, .1628673, .0455972, .0055694, .0011093},
86  {.0141460, .1194839, .2883075, .3266568, .1836014, .0569113, .0089426, .0019504},
87  {.0115208, .1032624, .2716849, .3283426, .2021206, .0674456, .0128924, .0027307},
88  {.0078498, .0802010, .2456595, .3308175, .2291646, .0836912, .0187016, .0039148},
89  {.0046272, .0563321, .2132296, .3290407, .2599806, .1045974, .0265604, .0056322},
90  {.0024659, .0360957, .1788634, .3210507, .2892537, .1282576, .0360887, .0079244},
91  {.0012702, .0216090, .1472227, .3083032, .3123950, .1522540, .0462449, .0107009},
92  {.0007288, .0134879, .1231200, .2949390, .3258251, .1731879, .0551737, .0135376},
93  {.0004373, .0080115, .1002329, .2779283, .3342611, .1966100, .0650090, .0175099}
94  };
95  static G4double U235nubar [11] = {
96  2.4140000,
97  2.5236700,
98  2.6368200,
99  2.7623400,
100  2.8738400,
101  3.0386999,
102  3.2316099,
103  3.4272800,
104  3.6041900,
105  3.7395900,
106  3.8749800
107  };
108  G4double fraction, r, cum;
109  G4int engind, nu;
110 
111 /*
112  Check if nubar is within the range of experimental values
113 */
114  if(nubar >= U235nubar[0] && nubar <= U235nubar[10]) {
115 /*
116  Use Zucker and Holden Data
117 */
118  engind = 1;
119  while (nubar > U235nubar[engind]){ engind++;}
120  // Loop checking, 11.03.2015, T. Koi
121  fraction = (nubar-U235nubar[engind-1])/(U235nubar[engind]-U235nubar[engind-1]);
122  if(fisslibrng() > fraction) engind--;
123 
124  r = fisslibrng();
125  nu = 0;
126  cum = U235nu[engind][0];
127  while (r > cum && nu < 7){
128  // Loop checking, 11.03.2015, T. Koi
129  nu++;
130  cum += U235nu[engind][nu];
131  }
132  return nu;
133  } else {
134 /*
135  Use Terrell's formula
136 */
137  return (G4int) G4SmpTerrell(nubar);
138  }
139 }
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
int G4int
Definition: G4Types.hh:78
G4double G4SmpTerrell(G4double nubar)
Definition: G4SmpTerrell.cc:69
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNuDistDataU235()

G4int G4fissionEvent::G4SmpNuDistDataU235 ( G4double  erg,
G4int  option 
)
private

Definition at line 63 of file G4SmpNuDistDataU235.cc.

63  {
64 
65 /*
66  Description
67  Sample Number of Neutrons from fission in U-235 using probability
68  distributions based on either
69  (option 0) Zucker and Holden's tabulated data for U-235
70  (option 1) Zucker and Holden's tabulated data for U-235 and
71  Gwin, Spencer and Ingle tabulated data for U-235
72  at thermal energies
73 */
74 
75 /*
76  Input
77  erg - incident neutron energy
78  option - 0 for sampling Zucker and Holden probability distributions
79  1 for sampling probability distributions based on Zucker
80  and Holden tabulated distributions as well as Gwin,
81  Spencer and Ingle tabulated distributions at thermal
82  energies
83  Output
84  G4SmpNuDistDataU235 - sampled multiplicity
85 
86 */
87 
88  G4double cpnu;
89  G4double pnu[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
90  G4double eng;
91  G4double r;
92 
93 /*
94  Check if energy is within the range of experimental values
95 */
96  if (erg > 10) eng=10.;
97  else eng=erg;
98 
99  r=fisslibrng();
100 /*
101  U-235 nu distribution
102 */
103  G4Pow* Pow=G4Pow::GetInstance();
104  if (option == 0) {
105  if (eng <= 3.0) pnu[0]=0.0317223e0-9.67117e-3*eng+1.9726e-3*Pow->powN(eng,2)-2.33933e-4*Pow->powN(eng,3);
106  if (eng > 3 && eng <= 7) pnu[0]=-1.24147e-2+2.52982e-2*eng-7.88108e-3*Pow->powN(eng,2)+9.10008e-4*Pow->powN(eng,3)-3.67208e-5*Pow->powN(eng,4);
107  if (eng > 7 && eng <= 10) pnu[0]=6.31258e-2-1.89764e-2*eng+1.94475e-3*Pow->powN(eng,2)-6.74e-5*Pow->powN(eng,3);
108  if (r <= pnu[0]) return 0;
109 
110  if (eng <= 4.0) pnu[1]=0.171707e0-0.0178305e0*eng+3.42286e-3*Pow->powN(eng,2)-2.1168e-3*Pow->powN(eng,3)+3.84226e-4*Pow->powN(eng,4)-1.44289e-5*Pow->powN(eng,5);
111  if (eng > 4 && eng <= 7) pnu[1]=9.8633e-2+3.53323e-2*eng-1.15037e-2*Pow->powN(eng,2)+7.4e-4*Pow->powN(eng,3);
112  if (eng > 7 && eng <= 10) pnu[1]=0.628295-0.180677*eng+1.80664e-2*Pow->powN(eng,2)-6.2015e-4*Pow->powN(eng,3);
113  cpnu=pnu[0]+pnu[1];
114  if (r <= cpnu) return 1;
115 
116  if (eng <= 4.0) pnu[2]=0.336199e0-1.59569e-2*eng+2.78036e-3*Pow->powN(eng,2)-1.59278e-3*Pow->powN(eng,3)+2.21742e-4*Pow->powN(eng,4);
117  if (eng > 4 && eng <= 8) pnu[2]=0.229153e0+5.27561e-2*eng-1.29288e-2*Pow->powN(eng,2)+5.67233e-4*Pow->powN(eng,3)+8.06667e-6*Pow->powN(eng,4);
118  if (eng > 8 && eng <= 10) pnu[2]=-0.395206e0+0.227399e0*eng-2.86051e-2*Pow->powN(eng,2)+1.08196e-3*Pow->powN(eng,3);
119  cpnu=cpnu+pnu[2];
120  if (r <= cpnu) return 2;
121 
122  if (eng <= 5.0) pnu[3]=0.30395461e0+0.01348261e0*eng-0.00262298e0*Pow->powN(eng,2)+1.99482407e-4*Pow->powN(eng,3);
123  if (eng > 5 && eng <= 10) pnu[3]=0.10992355e0+0.09246839e0*eng-0.00885344e0*Pow->powN(eng,2)-7.60589252e-4*Pow->powN(eng,3)+1.50973591e-4*Pow->powN(eng,4)-6.20436503e-6*Pow->powN(eng,5);
124  cpnu=cpnu+pnu[3];
125  if (r <= cpnu) return 3;
126 
127  if (eng <= 4.0) pnu[4]=0.126946e0+1.64489e-2*eng+2.44029e-3*Pow->powN(eng,2)-2.1019e-3*Pow->powN(eng,3)+8.50104e-4*Pow->powN(eng,4)-1.10127e-4*Pow->powN(eng,5);
128  if (eng > 4 && eng <= 8) pnu[4]=0.263373e0-7.47799e-2*eng+2.0588e-2*Pow->powN(eng,2)-1.55132e-3*Pow->powN(eng,3)+3.025e-5*Pow->powN(eng,4);
129  if (eng > 8 && eng <= 10) pnu[4]=-0.277491e0+0.157606e0*eng-1.38467e-2*Pow->powN(eng,2)+4.20357e-4*Pow->powN(eng,3);
130  cpnu=cpnu+pnu[4];
131  if (r <= cpnu) return 4;
132 
133  if (eng <= 4.0) pnu[5]=0.0266793e0+9.05206e-3*eng-6.58754e-4*Pow->powN(eng,2)+6.26292e-4*Pow->powN(eng,3)-9.75958e-5*Pow->powN(eng,4);
134  if (eng > 4 && eng <= 8) pnu[5]=0.0693092e0-1.46524e-2*eng+3.2841e-3*Pow->powN(eng,2)+1.50833e-4*Pow->powN(eng,3)-2.13e-5*Pow->powN(eng,4);
135  if (eng > 8 && eng <= 10) pnu[5]=0.881442e0-0.271486e0*eng+3.15097e-2*Pow->powN(eng,2)-1.12095e-3*Pow->powN(eng,3);
136  cpnu=cpnu+pnu[5];
137  if (r <= cpnu) return 5;
138 
139 
140  if (eng <= 4.0) pnu[6]=0.0026322e0+2.44017e-4*eng+4.55992e-4*Pow->powN(eng,2)+1.25233e-4*Pow->powN(eng,3)-2.35417e-5*Pow->powN(eng,4);
141  if (eng > 4 && eng <= 8) pnu[6]=-5.3989e-3+9.48298e-3*eng-2.95864e-3*Pow->powN(eng,2)+5.43025e-4*Pow->powN(eng,3)-2.75625e-5*Pow->powN(eng,4);
142  if (eng > 8 && eng <= 10) pnu[6]=0.177058-5.57839e-2*eng+6.81359e-3*Pow->powN(eng,2)-2.35568e-4*Pow->powN(eng,3);
143  cpnu=cpnu+pnu[6];
144  if (r <= cpnu) return 6;
145  else return 7;
146 
147  } else if (option == 1) {
148  if (eng <= 3.0) pnu[0]=0.0291000e0-4.836167e-3*eng-6.72500e-4*Pow->powN(eng,2)+2.076667e-4*Pow->powN(eng,3);
149  if (eng > 3 && eng <= 7) pnu[0]=-1.23950e-2+2.52790e-2*eng-7.874333e-3*Pow->powN(eng,2)+9.09000e-4*Pow->powN(eng,3)-3.666667e-5*Pow->powN(eng,4);
150  if (eng > 7 && eng <= 10) pnu[0]=6.328200e-2-1.903283e-2*eng+1.951500e-3*Pow->powN(eng,2)-6.766667e-5*Pow->powN(eng,3);
151  if (r <= pnu[0]) return 0;
152 
153  if (eng <= 4.0) pnu[1]=0.166000e0-0.005591833e0*eng-5.624500e-3*Pow->powN(eng,2)+7.673333e-4*Pow->powN(eng,3)-2.00000e-6*Pow->powN(eng,4);
154  if (eng > 4 && eng <= 7) pnu[1]=9.860600e-2+3.534733e-2*eng-1.150650e-2*Pow->powN(eng,2)+7.401667e-4*Pow->powN(eng,3);
155  if (eng > 7 && eng <= 10) pnu[1]=0.628401e0-0.1807157e0*eng+1.807100e-2*Pow->powN(eng,2)-6.203333e-4*Pow->powN(eng,3);
156  cpnu=pnu[0]+pnu[1];
157  if (r <= cpnu) return 1;
158 
159  if (eng <= 4.0) pnu[2]=0.336200e0-1.596058e-2*eng+2.783625e-3*Pow->powN(eng,2)-1.593917e-3*Pow->powN(eng,3)+2.21875e-4*Pow->powN(eng,4);
160  if (eng > 4 && eng <= 8) pnu[2]=0.2292350e0+5.26925e-2*eng-1.291067e-2*Pow->powN(eng,2)+5.650000e-4*Pow->powN(eng,3)+8.166667e-6*Pow->powN(eng,4);
161  if (eng > 8 && eng <= 10) pnu[2]=0.3838230e0-3.4439e-2*eng+6.0800e-4*Pow->powN(eng,2);
162  cpnu=cpnu+pnu[2];
163  if (r <= cpnu) return 2;
164 
165  if (eng <= 4.0) pnu[3]=0.3074000e0+0.00794125e0*eng-0.0002580417e0*Pow->powN(eng,2)-1.875000e-5*Pow->powN(eng,3)-2.145833e-5*Pow->powN(eng,4);
166  if (eng > 4 && eng <= 7) pnu[3]=0.3152270e0-2.623667e-3*eng+2.785000e-3*Pow->powN(eng,2)-3.273333e-4*Pow->powN(eng,3);
167  if (eng > 7 && eng <= 10) pnu[3]=0.6476430e0-0.1046148e0*eng+1.181600e-2*Pow->powN(eng,2)-5.051667e-4*Pow->powN(eng,3);
168  cpnu=cpnu+pnu[3];
169  if (r <= cpnu) return 3;
170 
171  if (eng <= 4.0) pnu[4]=0.133300e0+5.853750e-3*eng+6.200875e-3*Pow->powN(eng,2)-8.95250e-4*Pow->powN(eng,3)+1.36250e-5*Pow->powN(eng,4);
172  if (eng > 4 && eng <= 7) pnu[4]=0.2379650e0-5.548167e-2*eng+1.517350e-2*Pow->powN(eng,2)-8.858333e-4*Pow->powN(eng,3);
173  if (eng > 7 && eng <= 10) pnu[4]=-0.5408690e0+0.2461313e0*eng-2.372350e-2*Pow->powN(eng,2)+7.861667e-4*Pow->powN(eng,3);
174  cpnu=cpnu+pnu[4];
175  if (r <= cpnu) return 4;
176 
177  if (eng <= 4.0) pnu[5]=0.025900e0+1.067450e-2*eng-1.794000e-3*Pow->powN(eng,2)+9.50500e-4*Pow->powN(eng,3)-1.3000e-4*Pow->powN(eng,4);
178  if (eng > 4 && eng <= 7) pnu[5]=0.0871960e0-2.823683e-2*eng+7.0955e-3*Pow->powN(eng,2)-3.176667e-4*Pow->powN(eng,3);
179  if (eng > 7 && eng <= 10) pnu[5]=-0.591650e0+0.2236360e0*eng-2.373100e-2*Pow->powN(eng,2)+9.25000e-4*Pow->powN(eng,3);
180  cpnu=cpnu+pnu[5];
181  if (r <= cpnu) return 5;
182 
183  if (eng <= 4.0) pnu[6]=0.002100e0+1.35500e-3*eng-3.235833e-4*Pow->powN(eng,2)+3.48500e-4*Pow->powN(eng,3)-4.591667e-5*Pow->powN(eng,4);
184  if (eng > 4 && eng <= 8) pnu[6]=1.767200e-2-8.055667e-3*eng+1.96650e-3*Pow->powN(eng,2)-6.283333e-5*Pow->powN(eng,3);
185  if (eng > 8 && eng <= 10) pnu[6]=-0.2485310e0+8.72590e-2*eng-9.14550e-3*Pow->powN(eng,2)+3.555000e-4*Pow->powN(eng,3);
186  cpnu=cpnu+pnu[6];
187  if (r <= cpnu) return 6;
188  else return 7;
189  }
190  //
191  // Fall through
192  //
193 
194  G4cout << " SmpNuDistDataU235: unrecognized option = " << option << G4endl;
195  return -1;
196 
197 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
Definition: G4Pow.hh:56
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNuDistDataU238()

G4int G4fissionEvent::G4SmpNuDistDataU238 ( G4double  erg)
private

Definition at line 63 of file G4SmpNuDistDataU238.cc.

63  {
64 
65 /*
66  Description
67  Sample Number of Neutrons from fission in U-238 using
68  Zucker and Holden's tabulated data for U-238
69 */
70 
71 /*
72  Input
73  erg - incident neutron energy
74  Output
75  G4SmpNuDistDataU238 - sampled multiplicity
76 
77 */
78 
79  G4double cpnu;
80  G4double pnu[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
81  G4double eng;
82  G4double r;
83 
84 /*
85  Check if energy is within the range of experimental values
86 */
87  if (erg > 10) eng=10.;
88  else eng=erg;
89 
90  r=fisslibrng();
91 /*
92  U-238 nu distribution
93 */
95  if (eng <= 5.0) pnu[0]=0.0396484e0-1.14202e-2*eng+1.94627e-3*Pow->powN(eng,2)-2.95412e-4*Pow->powN(eng,3)+2.98333e-5*Pow->powN(eng,4)-1.31417e-6*Pow->powN(eng,5);
96  if (eng > 5 && eng <= 10) pnu[0]=0.0360013e0-8.06662e-3*eng+6.59461e-4*Pow->powN(eng,2)-3.54123e-5*Pow->powN(eng,3)+2.03749e-6*Pow->powN(eng,4)-5.91663e-8*Pow->powN(eng,5);
97  if (r <= pnu[0]) return 0;
98 
99  if (eng <= 5.0) pnu[1]=0.252954e0-5.17151e-2*eng+2.84558e-3*Pow->powN(eng,2)+2.93563e-4*Pow->powN(eng,3)-5.99833e-5*Pow->powN(eng,4)+3.34417e-6*Pow->powN(eng,5);
100  if (eng > 5 && eng <= 10) pnu[1]=0.259093e0-5.7936e-2*eng+5.50734e-3*Pow->powN(eng,2)-3.09607e-4*Pow->powN(eng,3)+1.20957e-5*Pow->powN(eng,4)-2.49997e-7*Pow->powN(eng,5);
101  cpnu=pnu[0]+pnu[1];
102  if (r <= cpnu) return 1;
103 
104  pnu[2]=0.29395353e0+0.01098908e0*eng-0.00565976e0*Pow->powN(eng,2)+3.14515399e-4*Pow->powN(eng,3)-5.66793415e-6*Pow->powN(eng,4)+1.54070513e-7*Pow->powN(eng,5);
105  cpnu=cpnu+pnu[2];
106  if (r <= cpnu) return 2;
107 
108  if (eng <= 5.0) pnu[3]=0.264447e0+3.02825e-2*eng-3.12762e-3*Pow->powN(eng,2)-1.5875e-4*Pow->powN(eng,3)+4.91667e-5*Pow->powN(eng,4)-3.38667e-6*Pow->powN(eng,5);
109  if (eng > 5 && eng <= 10) pnu[3]=0.262024e0+3.37134e-2*eng-5.01711e-3*Pow->powN(eng,2)+3.58761e-4*Pow->powN(eng,3)-2.17959e-5*Pow->powN(eng,4)+5.10834e-7*Pow->powN(eng,5);
110  cpnu=cpnu+pnu[3];
111  if (r <= cpnu) return 3;
112 
113  if (eng <= 5) pnu[4]=0.111176e0+1.66321e-2*eng+2.56307e-3*Pow->powN(eng,2)-2.17754e-4*Pow->powN(eng,3)-5.96667e-6*Pow->powN(eng,4)+7.44167e-7*Pow->powN(eng,5);
114  if (eng > 5 && eng <= 10) pnu[4]=0.107859e0+1.88862e-2*eng+2.07521e-3*Pow->powN(eng,2)-2.08099e-4*Pow->powN(eng,3)+3.23745e-6*Pow->powN(eng,4)-1.24999e-7*Pow->powN(eng,5);
115  cpnu=cpnu+pnu[4];
116  if (r <= cpnu) return 4;
117 
118  if (eng <= 5.0) pnu[5]=0.0312261e0+4.12932e-3*eng+9.18413e-4*Pow->powN(eng,2)+4.36542e-5*Pow->powN(eng,3)-5.9125e-6*Pow->powN(eng,4)+3.20833e-7*Pow->powN(eng,5);
119  if (eng > 5 && eng <= 10) pnu[5]=0.0324008e0+3.04772e-3*eng+1.3327e-3*Pow->powN(eng,2)-3.96916e-5*Pow->powN(eng,3)+2.94583e-6*Pow->powN(eng,4)-7.66666e-8*Pow->powN(eng,5);
120  cpnu=cpnu+pnu[5];
121  if (r <= cpnu) return 5;
122 
123  if (eng <= 5.0) pnu[6]=5.9347e-3+9.80023e-4*eng+4.24667e-4*Pow->powN(eng,2)+3.04458e-5*Pow->powN(eng,3)-6.46667e-6*Pow->powN(eng,4)+4.30833e-7*Pow->powN(eng,5);
124  if (eng > 5 && eng <= 10) pnu[6]=6.5421e-3+3.07834e-4*eng+7.39454e-4*Pow->powN(eng,2)-4.70459e-5*Pow->powN(eng,3)+3.44583e-6*Pow->powN(eng,4)-8.91667e-8*Pow->powN(eng,5);
125  cpnu=cpnu+pnu[6];
126  if (r <= cpnu) return 6;
127 
128  if (eng <= 5.0) pnu[7]=5.436e-4+1.3756e-4*eng-5.0e-7*Pow->powN(eng,2)+1.35917e-5*Pow->powN(eng,3)+5.0e-7*Pow->powN(eng,4)-5.16667e-8*Pow->powN(eng,5);
129  if (eng > 5 && eng <= 10) pnu[7]=9.212e-4-1.57585e-4*eng+8.41126e-5*Pow->powN(eng,2)+4.14166e-6*Pow->powN(eng,3)+5.37501e-7*Pow->powN(eng,4)-6.66668e-9*Pow->powN(eng,5);
130  cpnu=cpnu+pnu[7];
131  if (r <= cpnu) return 7;
132  else return 8;
133 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
Definition: G4Pow.hh:56
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNugDist()

G4int G4fissionEvent::G4SmpNugDist ( G4int  isotope,
G4double  nubar 
)
private

Definition at line 68 of file G4SmpNugDist.cc.

68  {
69 
70 /*
71  Description
72  Sample Number of Photons from neutron induced fission in
73  all isotopes using Tim Valentine's model (negative binomial
74  distribution, using nubar as a model parameter)
75 */
76 
77 /*
78  Input
79  iso - isotope
80  Output
81  G4SmpNugDist - sampled multiplicity
82 */
83 
84  static G4double logcoeff[nfissg+1] = {
85  0.00000000000000e+00,
86  3.25809653802149e+00,
87  5.86078622346587e+00,
88  8.09437844497297e+00,
89  1.00753799138395e+01,
90  1.18671393830676e+01,
91  1.35093671183247e+01,
92  1.50291928720691e+01,
93  1.64462588918558e+01,
94  1.77753948391357e+01,
95  1.90281578076311e+01,
96  2.02137814732888e+01,
97  2.13397927361450e+01,
98  2.24124295384099e+01,
99  2.34369338549243e+01,
100  2.44177631079360e+01,
101  2.53587464524005e+01,
102  2.62632027266277e+01,
103  2.71340310844251e+01,
104  2.79737817391769e+01,
105  2.87847119553932e+01,
106  2.95688309141589e+01,
107  3.03279360625106e+01,
108  3.10636428574894e+01,
109  3.17774093252521e+01,
110  3.24705565058120e+01,
111  3.31442856005149e+01,
112  3.37996924530920e+01,
113  3.44377798564689e+01,
114  3.50594680730467e+01,
115  3.56656038766170e+01,
116  3.62569683628670e+01,
117  3.68342837279018e+01,
118  3.73982191769817e+01,
119  3.79493960962713e+01,
120  3.84883925970040e+01,
121  3.90157475227212e+01,
122  3.95319639951220e+01,
123  4.00375125617872e+01,
124  4.05328339990172e+01,
125  4.10183418147990e+01
126  };
127  G4int i, A, Z;
128  G4double cpi[nfissg+1];
129  G4double p, q, nubarg;
130  G4double r;
131 
132 /*
133  No data is available for induced fission gamma number
134  distributions. Sample the negative binomial cumulative
135  probability distribution.
136 */
137  A = (G4int) (isotope-1000*((G4int)(isotope/1000)));
138  Z = (G4int) ((isotope-A)/1000);
139  G4Pow* Pow = G4Pow::GetInstance();
140  nubarg = ((2.51-1.13e-5*Pow->powA(G4double(Z),2.)*std::sqrt(G4double(A)))*nubar+4.0)
141  /(-1.33+119.6*Pow->A13(G4double(Z))/G4double(A));
142  p = 1.*alphanegbin/(alphanegbin+nubarg);
143  q = 1.-p;
144  cpi[0] = G4Exp(logcoeff[0]+26.*G4Log(p));
145  for (i=1; i<=nfissg; i++) cpi[i] = cpi[i-1] + G4Exp(logcoeff[i]+26.*G4Log(p)+i*G4Log(q));
146  for (i=0; i<=nfissg; i++) cpi[i] = cpi[i]/cpi[nfissg-1];
147 
148  r=fisslibrng();
149 
150  for(i=0; i<=nfissg; i++) if (r <= cpi[i]) return i;
151 
152  //
153  // Fall through
154  //
155 
156  G4cout << " SmpNugDist: random number " << r << " out of range " << G4endl;
157  return -1;
158 
159 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
Definition: G4Pow.hh:56
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
int G4int
Definition: G4Types.hh:78
#define alphanegbin
Definition: G4SmpNugDist.cc:66
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
#define nfissg
Definition: G4SmpNugDist.cc:65
G4double G4Log(G4double x)
Definition: G4Log.hh:230
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
G4double A13(G4double A) const
Definition: G4Pow.hh:132
#define G4endl
Definition: G4ios.hh:61
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:259
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpNVel()

G4double G4fissionEvent::G4SmpNVel ( G4double  eng,
G4double cosdiru,
G4double cosdirv,
G4double cosdirw 
)
private

Definition at line 62 of file G4SmpNVel.cc.

62  {
63 
64 /*
65  Description
66  Knowing the neutron energy, determine its velocity and the 3 direction cosines
67 */
68 
69 /*
70  Input
71  eng - energy of neutron
72  Output
73  - velocity
74  - 3 components of the neutron velocity
75  in arguments (cosdiru, cosdirv, cosdirw)
76 */
77 
78  const G4double rme = 939.56563; /* Rest Mass Energy equivalents for neutrons (MeV) */
79  const G4double cspeed = 2.99792458e+8; /* speed of light (m/sec) */
80 
81  G4double vel;
82  G4double ratio = eng/rme;
83 
84  if (ratio > 1.e-8) {
85 /* Relativistic vel calculation */
86  vel = cspeed*std::sqrt(1.-rme*rme/((rme+eng)*(rme+eng)));
87  } else {
88 /* Non-relativistic vel calculation */
89  vel = cspeed*std::sqrt(2.*eng/rme);
90  }
91 
92  G4SmpIsoDir(cosdiru, cosdirv, cosdirw);
93 
94  return vel;
95 }
void G4SmpIsoDir(G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
Definition: G4SmpIsoDir.cc:64
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpPVel()

G4double G4fissionEvent::G4SmpPVel ( G4double  eng,
G4double cosdiru,
G4double cosdirv,
G4double cosdirw 
)
private

Definition at line 62 of file G4SmpPVel.cc.

62  {
63 
64 /*
65  Description
66  Knowing the photon energy, determine its velocity and the 3 direction cosines
67 */
68 
69 /*
70  Input
71  eng - energy of photon
72  Output
73  - velocity
74  - 3 components of the photon velocity
75  as arugments (cosdiru, cosdirv, cosdirw)
76 */
77 
78  const G4double cspeed = 2.99792458e+8; /* speed of light (m/sec) */
79 
80  G4SmpIsoDir(cosdiru, cosdirv, cosdirw);
81 
82  return cspeed;
83 }
void G4SmpIsoDir(G4double *cosdiru, G4double *cosdirv, G4double *cosdirw)
Definition: G4SmpIsoDir.cc:64
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpSpNubarData()

G4double G4fissionEvent::G4SmpSpNubarData ( G4int  isotope)
private

Definition at line 63 of file G4SmpSpNubarData.cc.

63  {
64 
65 /*
66  Description
67  Determine average number of neutrons from spontaneous fission for
68  Th-232,
69  U-232, U-233, U-234, U-235, U-236, U-238
70  Np-237,
71  Pu-239, Pu-240, Pu-241, Pu-242
72  Am-241,
73  Cm-242, Cm-244,
74  Bk-249,
75  Cf-252
76  Based on Ensslin's data.
77  N. Ensslin, et.al., "Application Guide to Neutron Multiplicity Counting,"
78  LA-13422-M (November 1998)
79 */
80 
81 /*
82  Input
83  iso - isotope
84  Output
85  G4SmpSpNubarData - average number of neutrons
86  -1. is the isotope has
87  no nubar data
88 */
89 
90  G4int i;
91 
92  static G4int spzaid [nSPfissNubarIso] = {
93  90232, 92232, 92233, 92234, 92235,
94  92236, 92238, 93237, 94238, 94239,
95  94240, 94241, 94242, 95241, 96242,
96  96244, 97249, 98252 };
97  static G4double spnubar [nSPfissNubarIso] = {
98  2.14, 1.71, 1.76, 1.81, 1.86,
99  1.91, 2.01, 2.05, 2.21, 2.16,
100  2.156, 2.25, 2.145, 3.22, 2.54,
101  2.72, 3.40, 3.757
102  };
103 
104 // Find nubar
105  for (i=0; i<nSPfissNubarIso; i++) {
106  if (isotope == spzaid[i]) {
107  return spnubar[i];
108  }
109  }
110 // no nubar available for that isotope
111  return -1.;
112 }
int G4int
Definition: G4Types.hh:78
#define nSPfissNubarIso
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ G4SmpSpNuDistData()

G4int G4fissionEvent::G4SmpSpNuDistData ( G4int  isotope,
G4int  Cf252option 
)
private

Definition at line 64 of file G4SmpSpNuDistData.cc.

64  {
65 
66 /*
67  Description
68  Sample Number of Neutrons from spontaneous fission
69  (a) from the neutron multiplicity data for
70  U-238, Pu-238, Pu-240, Pu-242, Cm-242, Cm-244
71  using Holden and Zucker's tabulated data
72  Cf-252 using either Spencer's tabulated data or
73  Boldeman's data
74  (b) from Terrell's approximation using nubar for
75  Th-232,
76  U-232, U-233, U-234, U-235, U-236,
77  Np-237,
78  Pu-239, Pu-241,
79  Am-241,
80  Bk-249
81  using Ensslin's data.
82 */
83 
84 /*
85  Input
86  iso - isotope
87  Cf252option - 0 to use Spencer's tabulated data
88  1 to use Boldeman's data
89  Output
90  G4SmpSpNuDistData - sampled multiplicity
91  -1 is the isotope has
92  no multiplicity data,
93  nor any nubar data
94 */
95 
96  G4int i, index;
97  G4double sum, nubar;
98  G4double r;
99 
100  static G4double sfnu [nSPfissIso][nSPfissn] = {
101  {0.0481677,0.2485215,0.4253044,0.2284094,0.0423438,0.0072533,
102  0.0000000,0.0000000,0.0000000,0.0000000,0.0000000},
103 
104  {0.0631852,0.2319644,0.3333230,0.2528207,0.0986461,0.0180199,
105  0.0020407,0.0000000,0.0000000,0.0000000,0.0000000},
106 
107  {0.0679423,0.2293159,0.3341228,0.2475507,0.0996922,0.0182398,
108  0.0031364,0.0000000,0.0000000,0.0000000,0.0000000},
109 
110  {0.0212550,0.1467407,0.3267531,0.3268277,0.1375090,0.0373815,
111  0.0025912,0.0007551,0.0001867,0.0000000,0.0000000},
112 
113  {0.0150050,0.1161725,0.2998427,0.3331614,0.1837748,0.0429780,
114  0.0087914,0.0002744,0.0000000,0.0000000,0.0000000},
115 
116  {0.0540647,0.2053880,0.3802279,0.2248483,0.1078646,0.0276366,
117  0.0000000,0.0000000,0.0000000,0.0000000,0.0000000},
118 
119  {0.0021100,0.0246700,0.1229000,0.2714400,0.3076300,0.1877000,
120  0.0677000,0.0140600,0.0016700,0.0001000,0.0000000},
121 
122  {0.0020900,0.0262100,0.1262000,0.2752000,0.3018000,0.1846000,
123  0.0668000,0.0150000,0.0021000,0.0000000,0.0000000} };
124 
125 /*
126  sample the spontaneous fission neutron number distribution
127 */
128  index = -1;
129 
130  if (isotope == 92238) index = 0;
131  else if (isotope == 94240) index = 1;
132  else if (isotope == 94242) index = 2;
133  else if (isotope == 96242) index = 3;
134  else if (isotope == 96244) index = 4;
135  else if (isotope == 94238) index = 5;
136  else if (isotope == 98252 && Cf252option == 0) index = 6;
137  else if (isotope == 98252 && Cf252option == 1) index = 7;
138 
139  if (index != -1) {
140  r=fisslibrng();
141 
142  sum = 0.;
143  for (i = 0; i < nSPfissn-1; i++) {
144  sum = sum + sfnu[index][i];
145  if (r <= sum || sfnu[index][i+1] == 0.) return i;
146  }
147  //
148  // Fall through
149  //
150  G4cout << " Random number out of range in SmpSpNuDistData " << G4endl;
151  return -1;
152 
153  } else {
154 // There is no full multiplicity distribution data available
155 // for that isotope, let's try to find a nubar for it in
156 // N. Ensslin, et.al., "Application Guide to Neutron
157 // Multiplicity Counting," LA-13422-M (November 1998)
158 // and use Terrell's approximation
159  nubar = G4SmpSpNubarData(isotope);
160  if (nubar != -1.) {
161  return (G4int) G4SmpTerrell(nubar);
162  } else {
163 // There is no nubar information for that isotope, return -1,
164 // meaning no data available for that isotope
165  return -1;
166  }
167  }
168 }
#define nSPfissIso
Int_t index
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
G4double G4SmpSpNubarData(G4int isotope)
int G4int
Definition: G4Types.hh:78
G4double G4SmpTerrell(G4double nubar)
Definition: G4SmpTerrell.cc:69
#define nSPfissn
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpSpNugDistData()

G4int G4fissionEvent::G4SmpSpNugDistData ( G4int  isotope)
private

Definition at line 63 of file G4SmpSpNugDistData.cc.

63  {
64 
65 /*
66  Description
67  Sample Number of Photons from spontaneous fission in
68  (a) Cf-252 using the double Poisson model from Brunson;
69  (b) Th-232,
70  U-232, U-233, U-234, U-235, U-236, U-238*,
71  Np-237,
72  Pu-238*, Pu-239, Pu-240*, Pu-241, Pu-242*,
73  Am-241,
74  Cm-242*, Cm-244*,
75  Bk-249
76  using the negative binomial distribution based on the
77  spontaneous fission neutron nubar from Ensslin's
78  tabulated data or Holden and Zucker's tabulated data
79  (for isotopes denoted with asterix *).
80 */
81 
82 /*
83  Input
84  iso - isotope
85  Output
86  G4SmpSpNugDistData - sampled multiplicity
87  -1 if there is no multiplicity data for that isotope
88 */
89 
90  G4int i;
91  G4double sum, nubar;
92  G4double r;
93 
94  static G4double Cf252spdist [nSPfissg] = {
95  5.162699e-4,3.742057e-3,1.360482e-2,3.312786e-2,6.090540e-2,
96  9.043537e-2,1.133984e-1,1.240985e-1,1.216759e-1,1.092255e-1,
97  9.137106e-2,7.219960e-2,5.438060e-2,3.923091e-2,2.714690e-2,
98  1.800781e-2,1.143520e-2,6.942099e-3,4.025720e-3,2.229510e-3,
99  1.179602e-3,5.966936e-4,2.888766e-4,1.340137e-4,5.965291e-5,
100  2.551191e-5,1.049692e-5,4.160575e-6,1.590596e-6,0.000000e+0
101  };
102 
103 /*
104  sample the spontaneous fission photon number distribution
105 */
106  nubar=0.;
107  if (isotope == 98252) {
108 // Cf-252 using the G4double Poisson model from Brunson;
109  r=fisslibrng();
110 
111  sum = 0.;
112  for (i = 0; i < nSPfissg-1; i++) {
113  sum = sum + Cf252spdist[i];
114  if (r <= sum || Cf252spdist[i+1] == 0.) return i;
115  }
116  } else if (isotope == 92238) {
117 /*
118  using the spontaneous fission nubar from
119  Holden and Zucker's tabulated data
120 */
121  nubar = 1.9900002;
122  } else if (isotope == 94240) {
123  nubar = 2.1540006;
124  } else if (isotope == 94242) {
125  nubar = 2.1489998;
126  } else if (isotope == 96242) {
127  nubar = 2.54;
128  } else if (isotope == 96244) {
129  nubar = 2.7200005;
130  } else if (isotope == 94238) {
131  nubar = 2.2100301;
132  }
133 
134  if (nubar != 0.) {
135  return G4SmpNugDist(isotope, nubar);
136  } else {
137 /*
138  using the spontaneous fission nubar from
139  N. Ensslin, et.al., "Application Guide to Neutron
140  Multiplicity Counting," LA-13422-M (November 1998)
141 */
142  nubar = G4SmpSpNubarData(isotope);
143  if (nubar != -1.) {
144  return G4SmpNugDist(isotope, nubar);
145  } else {
146 // There is no nubar information for that isotope, return -1,
147 // meaning no data available for that isotope
148  return -1;
149  }
150  }
151 }
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
G4double G4SmpSpNubarData(G4int isotope)
int G4int
Definition: G4Types.hh:78
G4int G4SmpNugDist(G4int isotope, G4double nubar)
Definition: G4SmpNugDist.cc:68
double G4double
Definition: G4Types.hh:76
#define nSPfissg
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpTerrell()

G4double G4fissionEvent::G4SmpTerrell ( G4double  nubar)
private

Definition at line 69 of file G4SmpTerrell.cc.

69  {
70 /*
71  Description
72  Sample Fission Number from Terrell's modified Gaussian distribution
73 
74  method uses Red Cullen's algoritm UCRL-TR-222526
75 */
76 
77 /*
78  Input
79  nubar - average number of neutrons per fission
80  Output
81  G4SmpTerrell - sampled multiplicity
82 
83 */
84 
86  G4double temp1, temp2, expo, cshift;
87  G4double rw, theta, sampleg;
88 
89 
90  if (nubar < WIDTH) {
91  std::ostringstream o;
92  o << nubar;
93  std::string errMsg = "fission nubar out of range, nubar=" + o.str();
94  G4fissionerr(6, "SmpTerrell", errMsg);
95  }
96 
97  width = SQRT2 * WIDTH;
98  temp1 = nubar + 0.5;
99  temp2 = temp1/width;
100  temp2 *= temp2;
101  expo = G4Exp(-temp2);
102  cshift = temp1 + BSHIFT * WIDTH * expo/(1. - expo);
103 
104  G4int icounter = 0;
105  G4int icounter_max = 1024;
106  do {
107  rw = std::sqrt(-G4Log(fisslibrng()));
108  theta = TWOPI * fisslibrng();
109  sampleg = width * rw * std::cos(theta) + cshift;
110  icounter++;
111  if ( icounter > icounter_max ) {
112  G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl;
113  break;
114  }
115  } while (sampleg < 0.0);
116  // Loop checking, 11.03.2015, T. Koi
117 
118  return std::floor(sampleg);
119 }
#define SQRT2
Definition: G4SmpTerrell.cc:65
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
#define width
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
#define BSHIFT
Definition: G4SmpTerrell.cc:66
void G4fissionerr(G4int iSever, std::string chSubNam, std::string chMsg)
Definition: G4fissionerr.cc:65
#define WIDTH
Definition: G4SmpTerrell.cc:67
G4double G4Log(G4double x)
Definition: G4Log.hh:230
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
#define TWOPI
Definition: G4SmpTerrell.cc:64
Here is the call graph for this function:
Here is the caller graph for this function:

◆ G4SmpWatt()

G4double G4fissionEvent::G4SmpWatt ( G4double  ePart,
G4int  iso 
)
private

Definition at line 67 of file G4SmpWatt.cc.

67  {
68 
69 /*
70  Description
71  Sample Watt Spectrum as in TART (Kalos algorithm)
72 */
73 
74 /*
75  Input
76  ePart - energy of incoming particle
77  iso - isotope
78  Output
79  - energy of incoming particle
80 */
81 
82  static G4int nZA [nZAfis]= {
83  90231, 90232, 90233,
84  91233,
85  92232, 92233, 92234, 92235, 92236, 92237, 92238, 92239, 92240,
86  93235, 93236, 93237, 93238,
87  94237, 94238, 94239, 94240, 94241, 94242, 94243,
88  95241, 95242, 95243,
89  96242, 96243, 96244, 96245, 96246, 96247, 96248,
90  97249,
91  98249, 98250, 98251, 98252};
92 
93  static G4double Watta [nZAfis][3] = {
94  {6.00949285e-05, -8.36695381e-03, 9.50939496e-01},
95  {6.54348443e-05, -8.86574327e-03, 9.55404490e-01},
96  {7.08173682e-05, -9.22676286e-03, 9.50088329e-01},
97  {6.35839062e-05, -8.63645973e-03, 9.24583535e-01},
98  {8.21929628e-05, 4.01922936e-03, 1.152121164e00},
99  {6.21335718e-05, -8.45651858e-03, 9.14717276e-01},
100  {6.81386135e-05, -8.99142394e-03, 9.21954824e-01},
101  {7.32627297e-05, -9.36908697e-03, 9.20107976e-01},
102  {8.06505279e-05, -9.95416671e-03, 9.27890410e-01},
103  {8.33208285e-05, -1.01073057e-02, 9.17691654e-01},
104  {8.96944680e-05, -1.06491070e-02, 9.25496030e-01},
105  {9.44608097e-05, -1.08940419e-02, 9.17795511e-01},
106  {1.01395704e-04, -1.15098159e-02, 9.29395462e-01},
107  {6.81110009e-05, -8.91619352e-03, 9.00047566e-01},
108  {7.21126359e-05, -9.20179363e-03, 8.95722889e-01},
109  {7.82371142e-05, -9.67050621e-03, 8.99574933e-01},
110  {8.27256297e-05, -9.99353009e-03, 8.97461897e-01},
111  {7.29458059e-05, -9.22415170e-03, 8.80996165e-01},
112  {8.02383914e-05, -9.78291439e-03, 8.88964070e-01},
113  {8.50641730e-05, -1.01099145e-02, 8.87304833e-01},
114  {9.10537157e-05, -1.05303084e-02, 8.89438514e-01},
115  {9.43014320e-05, -1.07133543e-02, 8.82632055e-01},
116  {1.02655616e-04, -1.13154691e-02, 8.91617174e-01},
117  {1.06118094e-04, -1.14971777e-02, 8.85181637e-01},
118  {9.08474473e-05, -1.04296303e-02, 8.71942958e-01},
119  {9.35633054e-05, -1.05612167e-02, 8.63930371e-01},
120  {1.01940441e-04, -1.11573929e-02, 8.73153437e-01},
121  {9.19501202e-05, -1.04229157e-02, 8.58681822e-01},
122  {9.42991674e-05, -1.05098872e-02, 8.49103546e-01},
123  {1.02747171e-04, -1.11371417e-02, 8.60434431e-01},
124  {1.05024967e-04, -1.12138980e-02, 8.51101942e-01},
125  {1.14130011e-04, -1.18692049e-02, 8.62838259e-01},
126  {1.15163673e-04, -1.18553822e-02, 8.51306646e-01},
127  {1.27169055e-04, -1.27033210e-02, 8.68623539e-01},
128  {1.24195213e-04, -1.24047085e-02, 8.48974077e-01},
129  {1.12616150e-04, -1.15135023e-02, 8.19708800e-01},
130  {1.23637465e-04, -1.22869889e-02, 8.35392018e-01},
131  {1.22724317e-04, -1.21677963e-02, 8.22569523e-01},
132  {1.33891595e-04, -1.29267762e-02, 8.37122909e-01} };
133 
134  G4double a; /* Watt Parameters */
135  G4double b=1.0;
136 
137  G4double rand1,rand2;
138  G4double x,y,z;
139  G4double eSmp;
140  G4int i;
141 
142 
143 /*
144  Find Watt parameters for isotope
145 */
146  G4int isoindex=-1;
147  for (i=0; isoindex == -1 && i<nZAfis; i++) {
148  if (iso == nZA[i]) isoindex = i;
149  }
150  if (isoindex == -1) {
151  std::ostringstream o;
152  o << iso;
153  std::string errMsg = "No Watt spectrum available for iso " + o.str();
154  G4fissionerr(6, "SmpWatt", errMsg);
155  }
156 
157  a= Watta[isoindex][2] + ePart*(Watta[isoindex][1] + ePart*Watta[isoindex][0]);
158 
159  x= 1. + (b/(8.*a));
160  y= (x + std::sqrt(x*x-1.))/a;
161  z= a*y - 1.;
162 
163  G4int icounter = 0;
164  G4int icounter_max = 1024;
165  do {
166 
167  rand1= -G4Log(fisslibrng());
168  rand2= -G4Log(fisslibrng());
169  eSmp= y*rand1;
170 
171  icounter++;
172  if ( icounter > icounter_max ) {
173  G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl;
174  break;
175  }
176 
177  } while ((rand2-z*(rand1+1.))*(rand2-z*(rand1+1.)) > b*y*rand1 ||
178  eSmp < WATTEMIN || eSmp > WATTEMAX);
179  // Loop checking, 11.03.2015, T. Koi
180 
181  return eSmp;
182 }
static G4double fisslibrng(void)
Definition: G4rngc.cc:65
int G4int
Definition: G4Types.hh:78
Double_t y
G4GLOB_DLL std::ostream G4cout
void G4fissionerr(G4int iSever, std::string chSubNam, std::string chMsg)
Definition: G4fissionerr.cc:65
G4double G4Log(G4double x)
Definition: G4Log.hh:230
#define nZAfis
Definition: G4SmpWatt.cc:59
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
#define WATTEMAX
Definition: G4SmpWatt.cc:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getNeutronAge()

G4double G4fissionEvent::getNeutronAge ( G4int  index)
inline

Definition at line 138 of file G4fissionEvent.hh.

138  {
139  if (index >= 0 && index < neutronNu) return neutronAges[index];
140  else return -1;
141  }
Int_t index
G4double * neutronAges

◆ getNeutronDircosu()

G4double G4fissionEvent::getNeutronDircosu ( G4int  index)
inline

Definition at line 106 of file G4fissionEvent.hh.

106  {
107  if (index >= 0 && index < neutronNu) return neutronDircosu[index];
108  else return -1;
109  }
Int_t index
G4double * neutronDircosu
Here is the caller graph for this function:

◆ getNeutronDircosv()

G4double G4fissionEvent::getNeutronDircosv ( G4int  index)
inline

Definition at line 110 of file G4fissionEvent.hh.

110  {
111  if (index >= 0 && index < neutronNu) return neutronDircosv[index];
112  else return -1;
113  }
Int_t index
G4double * neutronDircosv
Here is the caller graph for this function:

◆ getNeutronDircosw()

G4double G4fissionEvent::getNeutronDircosw ( G4int  index)
inline

Definition at line 114 of file G4fissionEvent.hh.

114  {
115  if (index >= 0 && index < neutronNu) return neutronDircosw[index];
116  else return -1;
117  }
Int_t index
G4double * neutronDircosw
Here is the caller graph for this function:

◆ getNeutronEnergy()

G4double G4fissionEvent::getNeutronEnergy ( G4int  index)
inline

Definition at line 98 of file G4fissionEvent.hh.

98  {
99  if (index >= 0 && index < neutronNu) return neutronEnergies[index];
100  else return -1;
101  }
Int_t index
G4double * neutronEnergies
Here is the caller graph for this function:

◆ getNeutronNu()

G4int G4fissionEvent::getNeutronNu ( )
inline

Definition at line 92 of file G4fissionEvent.hh.

92  {
93  return neutronNu;
94  }
Here is the caller graph for this function:

◆ getNeutronVelocity()

G4double G4fissionEvent::getNeutronVelocity ( G4int  index)
inline

Definition at line 102 of file G4fissionEvent.hh.

102  {
103  if (index >= 0 && index < neutronNu) return neutronVelocities[index];
104  else return -1;
105  }
Int_t index
G4double * neutronVelocities

◆ getPhotonAge()

G4double G4fissionEvent::getPhotonAge ( G4int  index)
inline

Definition at line 142 of file G4fissionEvent.hh.

142  {
143  if (index >= 0 && index < photonNu) return photonAges[index];
144  else return -1;
145  }
Int_t index
G4double * photonAges

◆ getPhotonDircosu()

G4double G4fissionEvent::getPhotonDircosu ( G4int  index)
inline

Definition at line 126 of file G4fissionEvent.hh.

126  {
127  if (index >= 0 && index < photonNu) return photonDircosu[index];
128  else return -1;
129  }
Int_t index
G4double * photonDircosu
Here is the caller graph for this function:

◆ getPhotonDircosv()

G4double G4fissionEvent::getPhotonDircosv ( G4int  index)
inline

Definition at line 130 of file G4fissionEvent.hh.

130  {
131  if (index >= 0 && index < photonNu) return photonDircosv[index];
132  else return -1;
133  }
Int_t index
G4double * photonDircosv
Here is the caller graph for this function:

◆ getPhotonDircosw()

G4double G4fissionEvent::getPhotonDircosw ( G4int  index)
inline

Definition at line 134 of file G4fissionEvent.hh.

134  {
135  if (index >= 0 && index < photonNu) return photonDircosw[index];
136  else return -1;
137  }
Int_t index
G4double * photonDircosw
Here is the caller graph for this function:

◆ getPhotonEnergy()

G4double G4fissionEvent::getPhotonEnergy ( G4int  index)
inline

Definition at line 118 of file G4fissionEvent.hh.

118  {
119  if (index >= 0 && index < photonNu) return photonEnergies[index];
120  else return -1;
121  }
Int_t index
G4double * photonEnergies
Here is the caller graph for this function:

◆ getPhotonNu()

G4int G4fissionEvent::getPhotonNu ( )
inline

Definition at line 95 of file G4fissionEvent.hh.

95  {
96  return photonNu;
97  }
Here is the caller graph for this function:

◆ getPhotonVelocity()

G4double G4fissionEvent::getPhotonVelocity ( G4int  index)
inline

Definition at line 122 of file G4fissionEvent.hh.

122  {
123  if (index >= 0 && index < photonNu) return photonVelocities[index];
124  else return -1;
125  }
Int_t index
G4double * photonVelocities

◆ rngf2d()

G4double G4fissionEvent::rngf2d ( void  )
staticprivate

Definition at line 75 of file G4rngc.cc.

75  {
76  return (G4double) rngfptr();
77 }
static float(* rngfptr)(void)
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ setCf252Option()

static void G4fissionEvent::setCf252Option ( G4int  ndist,
G4int  neng 
)
inlinestatic

Definition at line 155 of file G4fissionEvent.hh.

155  {
156  Cf252ndistoption = ndist;
157  Cf252nengoption = neng;
158  };
static G4int Cf252ndistoption
static G4int Cf252nengoption

◆ setCorrelationOption()

static void G4fissionEvent::setCorrelationOption ( G4int  correlation)
inlinestatic

Definition at line 149 of file G4fissionEvent.hh.

149  {
150  correlationoption = correlation;
151  };
static G4int correlationoption

◆ setDelayOption()

static void G4fissionEvent::setDelayOption ( G4int  delay)
inlinestatic

Definition at line 146 of file G4fissionEvent.hh.

146  {
147  delayoption = delay;
148  };
static G4int delayoption

◆ setNudistOption()

static void G4fissionEvent::setNudistOption ( G4int  nudist)
inlinestatic

Definition at line 152 of file G4fissionEvent.hh.

152  {
153  nudistoption = nudist;
154  };
static G4int nudistoption

◆ setRNGd()

static void G4fissionEvent::setRNGd ( G4double(*)(void)  funcptr)
inlinestatic

Definition at line 163 of file G4fissionEvent.hh.

163  {
164  rngdptr = funcptr;
165  }
static G4double(* rngdptr)(void)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ setRNGf()

static void G4fissionEvent::setRNGf ( float(*)(void)  funcptr)
inlinestatic

Definition at line 159 of file G4fissionEvent.hh.

159  {
160  rngfptr = funcptr;
161  rngdptr = rngf2d;
162  }
static float(* rngfptr)(void)
static G4double(* rngdptr)(void)
static G4double rngf2d(void)
Definition: G4rngc.cc:75
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ Cf252ndistoption

G4int G4fissionEvent::Cf252ndistoption =0
staticprivate

Definition at line 83 of file G4fissionEvent.hh.

◆ Cf252nengoption

G4int G4fissionEvent::Cf252nengoption =0
staticprivate

Definition at line 84 of file G4fissionEvent.hh.

◆ correlationoption

G4int G4fissionEvent::correlationoption =0
staticprivate

Definition at line 81 of file G4fissionEvent.hh.

◆ delayoption

G4int G4fissionEvent::delayoption =0
staticprivate

Definition at line 80 of file G4fissionEvent.hh.

◆ neutronAges

G4double* G4fissionEvent::neutronAges
private

Definition at line 69 of file G4fissionEvent.hh.

◆ neutronDircosu

G4double* G4fissionEvent::neutronDircosu
private

Definition at line 66 of file G4fissionEvent.hh.

◆ neutronDircosv

G4double* G4fissionEvent::neutronDircosv
private

Definition at line 67 of file G4fissionEvent.hh.

◆ neutronDircosw

G4double* G4fissionEvent::neutronDircosw
private

Definition at line 68 of file G4fissionEvent.hh.

◆ neutronEnergies

G4double* G4fissionEvent::neutronEnergies
private

Definition at line 64 of file G4fissionEvent.hh.

◆ neutronNu

G4int G4fissionEvent::neutronNu
private

Definition at line 63 of file G4fissionEvent.hh.

◆ neutronVelocities

G4double* G4fissionEvent::neutronVelocities
private

Definition at line 65 of file G4fissionEvent.hh.

◆ nudistoption

G4int G4fissionEvent::nudistoption =3
staticprivate

Definition at line 82 of file G4fissionEvent.hh.

◆ photonAges

G4double* G4fissionEvent::photonAges
private

Definition at line 77 of file G4fissionEvent.hh.

◆ photonDircosu

G4double* G4fissionEvent::photonDircosu
private

Definition at line 74 of file G4fissionEvent.hh.

◆ photonDircosv

G4double* G4fissionEvent::photonDircosv
private

Definition at line 75 of file G4fissionEvent.hh.

◆ photonDircosw

G4double* G4fissionEvent::photonDircosw
private

Definition at line 76 of file G4fissionEvent.hh.

◆ photonEnergies

G4double* G4fissionEvent::photonEnergies
private

Definition at line 72 of file G4fissionEvent.hh.

◆ photonNu

G4int G4fissionEvent::photonNu
private

Definition at line 71 of file G4fissionEvent.hh.

◆ photonVelocities

G4double* G4fissionEvent::photonVelocities
private

Definition at line 73 of file G4fissionEvent.hh.

◆ rngdptr

G4double(* G4fissionEvent::rngdptr)(void)=0
staticprivate

Definition at line 85 of file G4fissionEvent.hh.

◆ rngfptr

G4float(* G4fissionEvent::rngfptr)(void)=0
staticprivate

Definition at line 86 of file G4fissionEvent.hh.


The documentation for this class was generated from the following files: