Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4SmpNEngCf252.cc
Go to the documentation of this file.
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// This software was developed by Lawrence Livermore National Laboratory.
28//
29// Redistribution and use in source and binary forms, with or without
30// modification, are permitted provided that the following conditions are met:
31//
32// 1. Redistributions of source code must retain the above copyright notice,
33// this list of conditions and the following disclaimer.
34// 2. Redistributions in binary form must reproduce the above copyright notice,
35// this list of conditions and the following disclaimer in the documentation
36// and/or other materials provided with the distribution.
37// 3. The name of the author may not be used to endorse or promote products
38// derived from this software without specific prior written permission.
39//
40// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
41// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
42// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
43// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
45// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
46// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
47// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
48// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
49// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50//
51// Copyright (c) 2006 The Regents of the University of California.
52// All rights reserved.
53// UCRL-CODE-224807
54//
55//
56// $Id$
57//
58
59#include <cmath>
60#include "G4fissionEvent.hh"
61
62G4double G4fissionEvent::G4SmpNEngCf252(G4int option) {
63
64/*
65 Description
66 Sample energy spectrum for Cf-252.
67*/
68
69/*
70 Input
71 option - 0 Mannhart corrected Maxwellian spectrum
72 1 Madland-Nix theoretical spectrum
73 2 Froehner Watt spectrum
74 Return
75 energy of neutron emitted by spontaneous fission
76*/
77
78 G4double a,b;
79 G4double gpar;
80 G4double g2;
81 G4double ferg;
82 G4double r;
83
84 r = fisslibrng();
85
86/*
87 Mannhart Corrected Spectrum
88*/
89 if(option == 0) {
90 if(r == 0) return 0.000001;
91 if (r > 0.0 && r <= 0.0005)
92 return 0.00003 + 0.04992*(r/0.0005) - 0.59473*std::pow(r/0.0005,2)
93 + 5.44877*std::pow(r/0.0005,3) - 29.38086*std::pow(r/0.0005,4)
94 + 97.14014*std::pow(r/0.0005,5) - 202.82112*std::pow(r/0.0005,6)
95 + 268.2301*std::pow(r/0.0005,7) - 217.75316*std::pow(r/0.0005,8)
96 + 98.96285*std::pow(r/0.0005,9) - 19.27077*std::pow(r/0.0005,10);
97
98 if (r > 0.0005 && r <= 0.005)
99 return 0.01118 + 0.06715*((r-.0005)/.0045)
100 - 0.09236*std::pow((r-.0005)/.0045,2) + 0.26224*std::pow((r-.0005)/.0045,3)
101 - 0.64784*std::pow((r-.0005)/.0045,4) + 1.16830*std::pow((r-.0005)/.0045,5)
102 - 1.43858*std::pow((r-.0005)/.0045,6) + 1.13771*std::pow((r-.0005)/.0045,7)
103 - 0.51839*std::pow((r-.0005)/.0045,8) + 0.10302*std::pow((r-.0005)/.0045,9);
104
105 if (r > 0.005 && r <= 0.05)
106 return 0.05244+0.32101*((r-.005)/.045)
107 - 0.52574*std::pow((r-.005)/.045,2) + 2.80540*std::pow((r-.005)/.045,3)
108 - 14.88036*std::pow((r-.005)/.045,4) + 55.46869*std::pow((r-.005)/.045,5)
109 -133.64517*std::pow((r-.005)/.045,6) + 202.88434*std::pow((r-.005)/.045,7)
110 -186.86758*std::pow((r-.005)/.045,8) + 95.19530*std::pow((r-.005)/.045,9)
111 - 20.55275*std::pow((r-.005)/.045,10);
112
113 if(r > 0.05 && r <= 0.25) return 0.25585+0.75532*((r-.05)/.2)-0.73676*std::pow((r-.05)/.2,2)+3.65653*std::pow((r-.05)/.2,3)-13.80528*std::pow((r-.05)/.2,4)+33.35932*std::pow((r-.05)/.2,5)-50.0410*std::pow((r-.05)/.2,6)+45.13793*std::pow((r-.05)/.2,7)-22.4072*std::pow((r-.05)/.2,8)+4.70141*std::pow((r-.05)/.2,9);
114
115 if(r > 0.25 && r <= 0.50) return 0.87609+0.74687*((r-.25)/.25)+0.02849*std::pow((r-.25)/.25,2)+0.06145*std::pow((r-.25)/.25,3)-0.09589*std::pow((r-.25)/.25,4)+0.29798*std::pow((r-.25)/.25,5)-0.57707*std::pow((r-.25)/.25,6)+0.66181*std::pow((r-.25)/.25,7)-0.40720*std::pow((r-.25)/.25,8)+0.10370*std::pow((r-.25)/.25,9);
116
117 if(r > 0.5 && r <= 0.75) return 1.69622+0.93896*((r-.5)/.25)+0.16428*std::pow((r-.5)/.25,2)+0.21761*std::pow((r-.5)/.25,3)-0.96904*std::pow((r-.5)/.25,4)+3.34951*std::pow((r-.5)/.25,5)-6.35177*std::pow((r-.5)/.25,6)+6.90120*std::pow((r-.5)/.25,7)-3.98682*std::pow((r-.5)/.25,8)+0.95276*std::pow((r-.5)/.25,9);
118
119 if(r > 0.75 && r <= 0.95) return 2.91217+1.52474*((r-.75)/.2)-4.99340*std::pow((r-.75)/.2,2)+58.72977*std::pow((r-.75)/.2,3)-313.30984*std::pow((r-.75)/.2,4)+946.0791*std::pow((r-.75)/.2,5)-1679.85559*std::pow((r-.75)/.2,6)+1740.83984*std::pow((r-.75)/.2,7)-973.51886*std::pow((r-.75)/.2,8)+227.06831*std::pow((r-.75)/.2,9);
120 if(r > 0.95 && r <= 0.975) return 5.50137-0.99765*((r-.95)/.025)+27.57678*std::pow((r-.95)/.025,2)-218.47931*std::pow((r-.95)/.025,3)+1024.0426*std::pow((r-.95)/.025,4)-3005.86182*std::pow((r-.95)/.025,5)+5684.52295*std::pow((r-.95)/.025,6)-6919.36182*std::pow((r-.95)/.025,7)+5235.71777*std::pow((r-.95)/.025,8)-2240.06934*std::pow((r-.95)/.025,9)+413.9299*std::pow((r-.95)/.025,10);
121
122 if(r > 0.975 && r <= 0.995) return 6.52172+1.21273*((r-.975)/.02)+0.69998*std::pow((r-.975)/.02,2)-1.78886*std::pow((r-.975)/.02,3)+11.57883*std::pow((r-.975)/.02,4)-39.41592*std::pow((r-.975)/.02,5)+88.32992*std::pow((r-.975)/.02,6)-127.68685*std::pow((r-.975)/.02,7)+115.97678*std::pow((r-.975)/.02,8)-60.09069*std::pow((r-.975)/.02,9)+13.66798*std::pow((r-.975)/.02,10);
123 if(r > 0.995 && r <= 0.999) return 9.00502+1.31798*((r-.995)/.004)-1.17448*std::pow((r-.995)/.004,2)+20.15941*std::pow((r-.995)/.004,3)-114.27763*std::pow((r-.995)/.004,4)+370.04855*std::pow((r-.995)/.004,5)-701.888*std::pow((r-.995)/.004,6)+776.28204*std::pow((r-.995)/.004,7)-462.68823*std::pow((r-.995)/.004,8)+115.05296*std::pow((r-.995)/.004,9);
124 if(r > 0.999 && r <= 0.9997) return 11.83792-1.8952*((r-.999)/.0007)+50.30901*std::pow((r-.999)/.0007,2)-239.56978*std::pow((r-.999)/.0007,3)+514.90747*std::pow((r-.999)/.0007,4)-508.73672*std::pow((r-.999)/.0007,5)+191.09637*std::pow((r-.999)/.0007,6);
125 if(r > 0.9997) return 20.;
126 }
127/*
128 Madland-Nix Spectrum
129*/
130 if(option == 1) {
131 if(r <= 1.001065092e-03) return 1.946313876*std::pow(r,0.6667261950);
132 else if(r > 1.001065092e-03 && r <= 1.001389105e-02) return 2.00504119*std::pow(r,0.6709990736);
133 else if(r > 1.001389105e-02 && r <= 5.022359145e-02) return 2.107978578*std::pow(r,0.7077041191);
134 else if(r > 5.022359145e-02 && r <= 1.000989427e-01) return 2.280517358*std::pow(r,0.7077041191);
135 else if(r > 1.000989427e-01 && r <= 1.500872491e-01) return 2.444108408*std::pow(r,0.73764526215);
136 else if(r > 1.500872491e-01 && r <= 2.002079974e-01) return 2.621855634*std::pow(r,0.7745779546);
137 else if(r > 2.002079974e-01 && r <= 2.25221648e-01) return 2.753099265*std::pow(r,0.8044994010);
138 else if(r > 2.25221648e-01 && r <= 2.501564538e-01) return 2.834010751*std::pow(r,0.8239187384);
139 else if(r > 2.501564538e-01 && r <= 2.752546770e-01) return 2.911676280*std::pow(r,0.8434235719);
140 else if(r > 2.752546770e-01 && r <= 3.000964724e-01) return 2.988430135*std::pow(r,0.8635883266);
141 else if(r > 3.000964724e-01 && r <= 3.500470095e-01) return 3.099471293*std::pow(r,0.8942289512);
142 else if(r > 3.500470095e-01 && r <= 4.001118970e-01) return 3.244686176*std::pow(r,0.9378302608);
143 else if(r > 4.001118970e-01 && r <= 5.000461778e-01) return 3.543403932*std::pow(r,1.0411008510);
144 else if(r > 5.000461778e-01 && r <= 5.501318506e-01) return 3.708358099*std::pow(r,1.1068317830);
145 else if(r > 5.501318506e-01 && r <= 6.000655433e-01) return 3.889805304*std::pow(r,1.1868908770);
146 else if(r > 6.000655433e-01 && r <= 6.500147305e-01) return 4.092497225*std::pow(r,1.2865658570);
147 else if(r > 6.500147305e-01 && r <= 7.000271284e-01) return 4.322906068*std::pow(r,1.4140909190);
148 else if(r > 7.000271284e-01 && r <= 7.501159110e-01) return 4.589909069*std::pow(r,1.5828217210);
149 else if(r > 7.501159110e-01 && r <= 8.000662513e-01) return 4.906598744*std::pow(r,1.8162034790);
150 else if(r > 8.000662513e-01 && r <= 8.500772033e-01) return 5.297053797*std::pow(r,2.1626825870);
151 else if(r > 8.500772033e-01 && r <= 8.750123088e-01) return 5.650277904*std::pow(r,2.5517142900);
152 else if(r > 8.750123088e-01 && r <= 9.000106866e-01) return 5.947741976*std::pow(r,2.9383159800);
153 else if(r > 9.000106866e-01 && r <= 9.250286977e-01) return 6.317014169*std::pow(r,3.5155713570);
154 else if(r > 9.250286977e-01 && r <= 9.350074655e-01) return 6.625757778*std::pow(r,4.1118364020);
155 else if(r > 9.350074655e-01 && r <= 9.400070002e-01) return 6.784126941*std::pow(r,4.4594479870);
156 else if(r > 9.400070002e-01 && r <= 9.500026229e-01) return 6.969180156*std::pow(r,4.9019105900);
157 else if(r > 9.500026229e-01 && r <= 9.600065896e-01) return 7.254643542*std::pow(r,5.6894827520);
158 else if(r > 9.600065896e-01 && r <= 9.700165577e-01) return 7.613500497*std::pow(r,6.8841593900);
159 else if(r > 9.700165577e-01 && r <= 9.750157135e-01) return 7.944100103*std::pow(r,8.2544400860);
160 else if(r > 9.750157135e-01 && r <= 9.800101585e-01) return 8.228439642*std::pow(r,9.6531190300);
161 else if(r > 9.800101585e-01 && r <= 9.850018119e-01) return 8.586524083*std::pow(r,11.783756400);
162 else if(r > 9.850018119e-01 && r <= 9.875072929e-01) return 8.917364901*std::pow(r,14.240137310);
163 else if(r > 9.875072929e-01 && r <= 9.900006975e-01) return 9.202675761*std::pow(r,16.76089029);
164 else if(r > 9.900006975e-01 && r <= 9.925048152e-01) return 9.562781386*std::pow(r,20.61962568);
165 else if(r > 9.925048152e-01 && r <= 9.935030103e-01) return 9.867915664*std::pow(r,24.69147261);
166 else if(r > 9.935030103e-01 && r <= 9.945000177e-01) return 10.08727342*std::pow(r,28.07701487);
167 else if(r > 9.945000177e-01 && r <= 9.950025127e-01) return 10.27382614*std::pow(r,31.36001051);
168 else if(r > 9.950025127e-01 && r <= 9.955029368e-01) return 10.41724243*std::pow(r,34.13127669);
169 else if(r > 9.955029368e-01 && r <= 9.960005970e-01) return 10.57636221*std::pow(r,37.50088614);
170 else if(r > 9.960005970e-01 && r <= 9.965016080e-01) return 10.75639015*std::pow(r,41.72354164);
171 else if(r > 9.965016080e-01 && r <= 9.970001795e-01) return 10.96366661*std::pow(r,47.18729543);
172 else if(r > 9.970001795e-01 && r <= 9.975004375e-01) return 11.20771170*std::pow(r,54.54899604);
173 else if(r > 9.975004375e-01 && r <= 9.978504408e-01) return 11.45202216*std::pow(r,63.11906699);
174 else if(r > 9.978504408e-01 && r <= 9.989524675e-01)
175 return 2.72756636666e5-5.47258138432e5*r+2.74514044871e5*std::pow(r,2);
176 else if(r > 9.989524675e-01 && r <= 9.994929298e-01)
177 return 1.14946879661e6-2.30252188973e6*r+1.15306661788e6*std::pow(r,2);
178 else if(r > 9.994929298e-01 && r <= 9.997558922e-01)
179 return 4.90621526236e6-9.81982943883e6*r+4.91362868673e6*std::pow(r,2);
180 else if(r > 9.997558922e-01 && r <= 9.998830120e-01)
181 return 2.11365688795184e7-4.22884732250404e7*r+2.11519198434219e7*std::pow(r,2);
182 else if(r > 9.998830120e-01 && r <= 9.999441620e-01)
183 return 9.18987945911229e7-1.83829506875257e8*r+9.19307287711182e7*std::pow(r,2);
184 else if(r > 9.999441620e-01 && r <= 9.999734440e-01)
185 return 4.02781481130433e8-8.05629656768407e8*r+4.02848193115356e8*std::pow(r,2);
186 else if(r > 9.999734440e-01 && r <= 9.999874120e-01)
187 return 1.77804635135775e9-3.55623257045546e9*r+1.77818623756641e9*std::pow(r,2);
188 else if(r > 9.999874120e-01 && r <= 9.999940510e-01)
189 return 7.90099032702915e9-1.58022749659903e10*r+7.90128465842187e9*std::pow(r,2);
190 else if(r > 9.999940510e-01 && r <= 9.999971960e-01)
191 return 3.53223507413091e10-7.06453227162775e10*r+3.53229719954219e10*std::pow(r,2);
192 else if(r > 9.999971960e-01 && r <= 9.999986820e-01)
193 return 1.58786475903785e11-3.17574266841213e11*r+1.58787790958875e11*std::pow(r,2);
194 else if(r > 9.999986820e-01 && r <= 9.999993820e-01)
195 return 7.17433904438156e11-1.43487059972047e12*r+7.17436695304750e11*std::pow(r,2);
196 else if(r > 9.999993820e-01 && r <= 9.999997110e-01)
197 return 3.257374123945330e12-6.514754184993900e12*r+3.257380061072000e12*std::pow(r,2);
198 else if(r > 9.999997110e-01 && r <= 9.999998650e-01)
199 return 1.48641255466171e13-2.97282637539286e13*r+1.48641382073360e13*std::pow(r,2);
200 else if(r > 9.999998650e-01 && r <= 9.999999370e-01)
201 return 6.82056055248876e13-1.36411238119518e14*r+6.82056325946560e13*std::pow(r,2);
202 else if(r > 9.999999370e-01 && r <= 1.000000000e00)
203 return 3.14919363013517e14-6.29838784079090e14*r+3.14919421065600e14*std::pow(r,2);
204 }
205/*
206 Frohner Watt Spectrum
207*/
208 if (option == 2) {
209 a=1.175;
210 b=1.040;
211
212 do {
213 gpar = std::sqrt(std::pow(1+0.125*a*b,2.)-1)+(1+0.125*a*b);
214 g2=-std::log(fisslibrng());
215 ferg=a*gpar*g2;
216 } while (std::pow((1-gpar)*(1+g2)-std::log(fisslibrng()),2.) > b*ferg);
217 return ferg;
218 }
219
220 //
221 // Fall through
222 //
223
224 G4cout << " SmpNEngCf252: unrecognized option = " << option << G4endl;
225 return -1.0;
226}
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout