Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4FissionProductYieldDist.hh
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 * File: G4FissionProductYieldDist.hh
28 * Author: B. Wendt ([email protected])
29 *
30 * Created on May 11, 2011, 12:04 PM
31 */
32
33#ifndef G4FISSIONPRODUCTYIELDDIST_HH
34#define G4FISSIONPRODUCTYIELDDIST_HH
35
36#include "G4Ions.hh"
37#include "G4Gamma.hh"
38#include "G4IonTable.hh"
39#include "G4ParticleHPNames.hh"
40#include "globals.hh"
41#include "G4DynamicParticle.hh"
43#include "G4ReactionProduct.hh"
44
45#include "G4ENDFTapeRead.hh"
47#include "G4FFGEnumerations.hh"
48#include "G4FPYNubarValues.hh"
49#include "G4FPYSamplingOps.hh"
51
52/** G4FissionProductYieldDist is the base class for storing all the fission
53 * data and generating fission events. */
55{
56public:
57// Constructor definition
58 /** Default constructor
59 * - Usage:
60 * - \p WhichIsotope: Isotope number of the element in ZZZAAA form
61 * - \p WhichMetaState: \p GROUND_STATE, \p META_1, or \p META_2
62 * - \p WhichCause: \p SPONTANEOUS or \p N_INDUCED
63 * - \p WhichYieldType: \p INDEPENDENT or \p CUMULATIVE
64 *
65 * - Notes:
66 */
67 G4FissionProductYieldDist( G4int WhichIsotope,
68 G4FFGEnumerations::MetaState WhichMetaState,
70 G4FFGEnumerations::YieldType WhichYieldType,
71 std::istringstream& dataStream);
72 /** Overloaded constructor
73 * - Usage:
74 * - \p WhichIsotope: Isotope number of the element in ZZZAAA form
75 * - \p WhichMetaState: \p GROUND_STATE, \p META_1, or \p META_2
76 * - \p WhichCause: \p SPONTANEOUS or \p N_INDUCED
77 * - \p WhichYieldType: \p INDEPENDENT or \p CUMULATIVE
78 * - \p Verbosity: Verbosity level
79 *
80 * - Notes:
81 */
82 G4FissionProductYieldDist( G4int WhichIsotope,
83 G4FFGEnumerations::MetaState WhichMetaState,
85 G4FFGEnumerations::YieldType WhichYieldType,
86 G4int Verbosity,
87 std::istringstream& dataStream);
88private:
89 /** Initialize is a common function called by all constructors. */
90 void Initialize( std::istringstream& dataStream );
91
92#ifdef G4MULTITHREADED
93 static G4Mutex fissprodMutex;
94#endif
95
96public:
97// Functions
98 /** Generates a fission event using default sampling and returns the pointer
99 * to that fission event.
100 * - Usage: No arguments required
101 *
102 * - Notes:
103 * - The fission products are loaded into FissionContainer in the
104 * following order:
105 * - First daughter product
106 * - Second daughter product
107 * - Alpha particles
108 * - Neutrons
109 * - Gamma rays
110 * - The last particle will have a NULL NextFragment pointer
111 */
113 /** Selects a fission fragment at random from the probability tree and
114 * returns the \p G4Ions pointer.
115 * - Usage: No arguments required
116 *
117 * - Notes:
118 */
120 /** Set the alpha production behavior for fission event generation.
121 * - Usage:
122 * - if \p AlphaProduction is negative then alpha particles are sampled
123 * randomly.
124 *
125 * - Notes:
126 * - The maximum number of alpha particles that may be created is
127 * physically limited by the nucleons present in the parent nucleus.
128 * Setting the AlphaProduction too high will have unpredictable
129 * results on the sampling of the fission products.
130 */
131 void G4SetAlphaProduction( G4double WhatAlphaProduction );
132 /** Sets the energy of the incident particle
133 * - Usage:
134 * - \p WhatIncidentEnergy: Kinetic energy, if any, of the incident
135 * neutron in GeV
136 *
137 * - Notes:
138 */
139 void G4SetEnergy( G4double WhatIncidentEnergy );
140 /** Sets the probability of ternary fission
141 * - Usage:
142 * - \p WhatTernaryProbability: Probability of generating a ternary
143 * fission event.
144 *
145 * - Notes:
146 */
147 void G4SetTernaryProbability( G4double TernaryProbability );
148 /** Sets the verbosity levels
149 * - Usage:
150 * - \p WhichVerbosity: Combination of levels
151 *
152 * - Notes:
153 * - \p SILENT: All verbose output is repressed
154 * - \p UPDATES: Only high-level internal changes are reported
155 * - \p DAUGHTER_INFO: Displays information about daughter product sampling
156 * - \p NEUTRON_INFO: Displays information about neutron sampling
157 * - \p GAMMA_INFO: Displays information about gamma sampling
158 * - \p ALPHA_INFO: Displays information about alpha sampling
159 * - \p MOMENTUM_INFO: Displays information about momentum balancing
160 * - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation or interpolation that occurs
161 * - \p DEBUG: Reports program flow as it steps through functions
162 * - \p PRINT_ALL: Displays any and all output
163 */
164 void G4SetVerbosity( G4int WhatVerbosity );
165
166protected:
167// Variables
168 // Class descriptor variables
169 /** Number in ZZZAAA format of the isotope that
170 * G4FissionProductYieldDist references
171 */
173 /** MetaState information of the isotope that G4FissionProductYieldDist
174 * references
175 * \n Possible values are \p GROUND_STATE, \p META_1, or \p META_2
176 */
178 /** The cause of fission: \p SPONTANEOUS or \p N_INDUCED. */
180 /** The type of yield to be used: \p INDEPENDET or \p CUMULATIVE */
182
183 // Datafile variables
184 /** Name of the fission yield product data file that
185 * G4FissionProductYieldDist references
186 */
188
189 // Fission generation variables
190 /** Contains the \p G4Ions pointer to an alpha particle */
192 /** Controls whether alpha particles are emitted, and how many */
194 /** Sets the ternary fission probability. Valid ranges are [0, 1] */
196 /** Contains the \p g4ParticleDefinition pointer to a gamma particle */
198 /** Kinetic energy, if any, of the incident particle in GeV. */
200 /** Sets the mean gamma energy, in MeV, produced by the fission of the
201 * isotope described by Isotope_
202 */
204 /** Contains the G4ParticleDefinition pointer to a neutron, cast as a
205 * G4Ion for compatibility*/
207 /** Nubar for the isotope and incident neutron energy that
208 * G4FissionProductYieldDist references.
209 */
211 /** Width of the gaussian distribution that samples nubar for the
212 * isotope and incident neutron energy that G4FissionProductYieldDist
213 * references.
214 */
216 /** Counter for the number of protons available to the fission event */
218 /** Counter for the number of nucleons available to the fission event */
220 /** Container for the energy remaining to be assigned in the fission generation */
222 /** Verbosity level */
224
225 // Pointers to the field of trees and relevant normalization data
226 /** An array, or 'field', of the probability trees */
228 /** Defines the smallest Z particle in the field of trees */
230 /** Defines the smallest A particle in the field of trees */
232 /** Defines the largest Z particle in the field of trees. */
234 /** Defines the largest Z particle in the field of trees */
236 /** Number of specific energy groups */
238 /** Energy values of each energy */
240 /** Variable for ensuring that the input data is normalized */
242 /** A running total of all the probabilities */
244 /** The number of trees in the field */
246 /** A run-time counter for the total number of branches stored */
248
249 // Pointers to runtime classes that G4FissionProductYieldDist needs to
250 // function properly
251 /** Pointer to \p G4IonTable
252 * \n All \p G4Ions are created using
253 * \p G4IonTable
254 */
256 /** Pointer to \p G4NeutronHPNames
257 * \n Provides access to the list of element names included in Geant4
258 */
260 /** Pointer to the \p CLHEP library random engine */
262
263//Functions
264 /** Checks to make sure that alpha overpopulation will not occur, which
265 * could result in an unsolvable zero momentum in the LAB system.
266 */
267 void CheckAlphaSanity( void );
268 /** Returns the \p G4Ions definitions pointer for the particle whose
269 * probability segment contains the (0, 1] random number \p RandomParticle
270 */
271 G4Ions* FindParticle( G4double RandomParticle );
272 /** Returns the \p G4Ions definitions pointer for the particle whose
273 * probability segment contains the (0, 1] random number \p RandomParticle
274 * by extrapolating values using the current data set.
275 * This function exists so that that different models of extrapolation
276 * may be more easily implemented in the future.
277 */
279 G4bool LowerEnergyGroupExists );
280 /** Returns the \p G4Ions definitions pointer for the particle whose
281 * probability segment contains the (0, 1] random number \p RandomParticle
282 * by interpolating values in the current data set.
283 * This function exists so that that different models of interpolation
284 * may be more easily implemented in the future.
285 */
287 G4int LowerEnergyGroup );
288 /** Returns the \p G4Ions definitions pointer for the particle whose
289 * probability segment contains the (0, 1] random number \p RandomParticle
290 * by searching through a branch. Both the extrapolation and interpolation
291 * schemes currently use this function to identify the particle.
292 */
294 G4double RandomParticle,
295 G4int EnergyGroup1,
296 G4int EnergyGroup2 );
297 /** Generates a \p G4DynamicParticleVector with the fission alphas
298 */
299 virtual void GenerateAlphas( std::vector< G4ReactionProduct* >* Alphas );
300 /** Generate a linked chain of neutrons and return the pointer to the last
301 * neutron in the chain.
302 */
303 virtual void GenerateNeutrons( std::vector< G4ReactionProduct* >* Neutrons );
304 /** Selects a fission product from the probability tree, limited by the
305 * number of nucleons available to the system
306 */
307 virtual G4Ions* GetFissionProduct( void ) = 0;
308 /** Returns the \p G4Ions definition pointer to the isotope defined by
309 * \p Product and \p MetaState.
310 * Searches the \p ParticleTable for the particle defined by \p Product
311 * (ZZZAAA) and \p MetaState and returns the \p G4Ions
312 * pointer to that particle. If the particle does not exist then it is
313 * created in \p G4ParticleTable and the pointer to the new particle is
314 * returned.
315 */
318 /** Generates the directory location for the data file referenced by
319 * G4FissionProductYieldDist
320 */
322 /** Generates the appropriate file name for the isotope requested */
323 G4String MakeFileName( G4int Isotope,
325 /** Creates a \p G4DynamicParticle from an existing \p G4ReactionProduct */
327 /** Generates the unique name for an isotope/isomer defined by \p Isotope\
328 * and \p MetaState in the following format: ZZZ_AAAmX_NAME
329 */
332 /** Dynamically allocates and initializes the 'field' of 'trees' with the
333 * 'trunks'
334 */
335 virtual void MakeTrees( void );
336 /** Reads in the probability data from the data file */
337 virtual void ReadProbabilities( void );
338 /** Renormalizes the data in a ProbabilityTree.
339 * Traverses the tree structure and renormalizes all the probability data
340 * into probability segments, ensuring that no segment overlaps the
341 * other.
342 */
343 void Renormalize( ProbabilityBranch* Branch );
344 /** Sample the energy of the alpha particles. The energy used by the alpha
345 * particles is subtracted from the available energy
346 */
347 void SampleAlphaEnergies( std::vector< G4ReactionProduct* >* Alphas );
348 /** Samples the energy of the gamma rays */
349 void SampleGammaEnergies( std::vector< G4ReactionProduct* >* Gammas );
350 /** Sample the energy of the neutrons using the Watt fission spectrum. The
351 * kinetic energy consumed is returned.
352 */
353 void SampleNeutronEnergies( std::vector< G4ReactionProduct* >* Neutrons );
354 /** Sets the nubar values for the isotope referenced by
355 * G4FissionProductYieldDistdefined from the data sets defined in
356 * SpecialOps.hh
357 */
358 void SetNubar( void );
359 /** Sorts information for a potential new particle into the correct tree */
360 virtual void SortProbability( G4ENDFYieldDataContainer* YieldData );
361
362// Destructor function(s)
363public:
364 /** Default deconstructor. It is a virtual function since
365 * G4FissionProductYieldDist is a parent class
366 */
367 virtual ~G4FissionProductYieldDist( void );
368protected:
369 /** Recursively burns each branch in a probability tree. */
370 void BurnTree( ProbabilityBranch* Branch );
371};
372
373#endif /* G4FISSIONPRODUCTYIELDDIST_HH */
374
std::vector< G4DynamicParticle * > G4DynamicParticleVector
std::mutex G4Mutex
Definition: G4Threading.hh:81
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
void Renormalize(ProbabilityBranch *Branch)
void BurnTree(ProbabilityBranch *Branch)
void G4SetEnergy(G4double WhatIncidentEnergy)
void SampleAlphaEnergies(std::vector< G4ReactionProduct * > *Alphas)
void SampleNeutronEnergies(std::vector< G4ReactionProduct * > *Neutrons)
const G4FFGEnumerations::MetaState MetaState_
G4Ions * FindParticleBranchSearch(ProbabilityBranch *Branch, G4double RandomParticle, G4int EnergyGroup1, G4int EnergyGroup2)
G4DynamicParticleVector * G4GetFission(void)
virtual void SortProbability(G4ENDFYieldDataContainer *YieldData)
G4String MakeFileName(G4int Isotope, G4FFGEnumerations::MetaState MetaState)
G4String MakeIsotopeName(G4int Isotope, G4FFGEnumerations::MetaState MetaState)
const G4FFGEnumerations::FissionCause Cause_
G4Ions * FindParticle(G4double RandomParticle)
G4Ions * FindParticleInterpolation(G4double RandomParticle, G4int LowerEnergyGroup)
virtual void GenerateNeutrons(std::vector< G4ReactionProduct * > *Neutrons)
G4Ions * GetParticleDefinition(G4int Product, G4FFGEnumerations::MetaState MetaState)
void G4SetAlphaProduction(G4double WhatAlphaProduction)
virtual void GenerateAlphas(std::vector< G4ReactionProduct * > *Alphas)
G4DynamicParticle * MakeG4DynamicParticle(G4ReactionProduct *)
virtual G4Ions * GetFissionProduct(void)=0
void SampleGammaEnergies(std::vector< G4ReactionProduct * > *Gammas)
void G4SetVerbosity(G4int WhatVerbosity)
const G4FFGEnumerations::YieldType YieldType_
void G4SetTernaryProbability(G4double TernaryProbability)
G4Ions * FindParticleExtrapolation(G4double RandomParticle, G4bool LowerEnergyGroupExists)
Definition: G4Ions.hh:52