Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:58:17

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 /*
0027  * File:   G4FissionFragmentGenerator.hh
0028  * Author: B. Wendt (wendbryc@isu.edu)
0029  *
0030  * Created on May 11, 2011, 12:04 PM
0031  */
0032 
0033 #ifndef G4FISSIONFRAGMENTGENERATOR_HH
0034 #define G4FISSIONFRAGMENTGENERATOR_HH
0035 
0036 #include "G4FFGEnumerations.hh"
0037 #include "G4FissionProductYieldDist.hh"
0038 #include "G4HadFinalState.hh"
0039 #include "G4HadProjectile.hh"
0040 #include "G4Ions.hh"
0041 #include "G4TableTemplate.hh"
0042 #include "globals.hh"
0043 
0044 /** G4FissionFragmentGenerator is the front end class to be used by the user for
0045  *  handling all fission event generation.
0046  *
0047  *  This class is intended to be instantiated for one type of fission event for
0048  *  as specific isotope/isomer, fission type, and incident neutron energy. For
0049  *  this reason no functions exist to change or modify these values once the
0050  *  class in constructed. A new class must be created by the user for each type
0051  *  of fission event, if such functionality is desired.
0052  */
0053 class G4FissionFragmentGenerator
0054 {
0055   public:
0056     // Constructor definition
0057     /** Default constructor
0058      *  - Usage: No arguments required
0059      *
0060      *  - Notes:
0061      *      - There are methods that should be called to set operating
0062      *        parameters before generating any fission events with
0063      *        G4FissionFragmentGenerator. These are:
0064      *          - G4SetIsotope()
0065      *          - G4SetMetaState()
0066      *          - G4SetCause()
0067      *          - G4SetIncidentEnergy()
0068      *          - G4SetYieldType()
0069      *          - G4SetAlphaProduction()
0070      *          - G4SetAlphaProductionProbability()
0071      *          - G4SetSamplingScheme()
0072      *      - If any or all of these parameters are not set by the user, then
0073      *        default values will be used.
0074      *          - Isotope: \p 92238
0075      *          - Metastable state: \p GROUND_STATE
0076      *          - Cause: \p SPONTANEOUS
0077      *          - Incident energy: \p 0.025 eV
0078      *          - Yield type: \p INDEPENDENT
0079      *          - Alpha production: \p 0
0080      *          - Alpha production probability: \p 0
0081      *          - Sampling scheme: \p NORMAL
0082      */
0083     G4FissionFragmentGenerator();
0084     /** Overloaded constructor
0085      *  - Usage:
0086      *      - \p Verbosity: Verbosity level
0087      *
0088      *  - Notes:
0089             - Refer to the documentation for the default constructor for
0090      *        setting up the operating parameters.
0091      */
0092     G4FissionFragmentGenerator(G4int Verbosity);
0093 
0094   protected:
0095     /** Initialize is a common function called by all constructors. */
0096     void Initialize();
0097 
0098   public:
0099     // Functions
0100     /** Generates a single fission event
0101      *  - Usage: No arguments required
0102      *
0103      *  - Notes:
0104      *      - Generates a single fission event by calling the overloaded function
0105      *        and passing an argument of '1'
0106      */
0107     G4DynamicParticleVector* G4GenerateFission();
0108     /** Generates a single fission event
0109      *  - Usage:
0110      *      -\p Projectile: G4HadProjectile of the fission-inducing particle
0111      *
0112      *  - Notes:
0113      *      - Generates a single fission event by calling the overloaded function
0114      *        and passing an argument of '1'
0115      */
0116     G4DynamicParticleVector* G4GenerateFission(const G4HadProjectile& Projectile);
0117     /** Generates NumberOfFissions fission events
0118      *  - Usage:
0119      *      -\p NumberOfFissions: The number of fission events to generate
0120      *
0121      *  - Notes:
0122      *      - Generates \p NumberOfFissions fission events
0123      */
0124     const std::vector<G4DynamicParticleVector*>
0125     G4GenerateFission(G4long NumberOfFissions, const G4HadProjectile& Projectile);
0126     /** Returns a randomly sampled fission product */
0127     G4Ions* G4GenerateFissionProduct();
0128     /** Returns the production rate of alpha particles for fission events */
0129     G4double G4GetAlphaProduction();
0130     /** Returns the probability of ternary fission */
0131     G4double G4GetTernaryProbability();
0132     /** Returns the FissionCause of the fission event. */
0133     G4FFGEnumerations::FissionCause G4GetCause();
0134     /** Returns the energy of the fission inducing particle. */
0135     G4double G4GetIncidentEnergy();
0136     /** Returns the code of the fission isotope in ZZZAAA format. */
0137     G4int G4GetIsotope();
0138     /** Returns the MetaState of the fission isotope. */
0139     G4FFGEnumerations::MetaState G4GetMetaState();
0140     /** Returns the FissionSamplingScheme that is currently in use. */
0141     G4FFGEnumerations::FissionSamplingScheme G4GetSamplingScheme();
0142     /** Returns the yield type that is currently in use */
0143     G4FFGEnumerations::YieldType G4GetYieldType();
0144     /** Initializes a new \p G4FPY...Dist class based on the class descriptor
0145      *  variables of G4FissionFragmentGenerator.
0146      */
0147     bool InitializeFissionProductYieldClass(std::istringstream& dataFile);
0148     /** Converts the Z, A and M of an isotope into an integer representation **/
0149     static G4int G4MakeIsotopeCode(G4int Z, G4int A, G4int M);
0150     /** Sets the number of alpha particles produced in fission.
0151      *  - Usage:
0152      *      - if \p AlphaProduction is negative then alpha particles are sampled
0153      *        on a Gaussian with a mean of \p abs(AlphaProduction).
0154      *
0155      *  - Notes:
0156      *      - The maximum number of alpha particles that may be created is
0157      *        physically limited by the nucleons present in the parent nucleus.
0158      *        Setting the AlphaProduction too high will have unpredictable
0159      *        results on the sampling of the fission products.
0160      */
0161     void G4SetAlphaProduction(G4double WhatAlphaProduction);
0162     /** Sets the probability of ternary fission
0163      *  - Usage:
0164      *      - \p WhatAlphaProductionProbability: Probability of generating alpha
0165      *      particles for a fission event. 1 = 100% chance of alpha production
0166      *
0167      *  - Notes:
0168      */
0169     void G4SetTernaryProbability(G4double WhatTernaryProbability);
0170     /** Sets the cause of fission event.
0171      *  - Usage:
0172      *      - \p WhichCause: \p SPONTANEOUS, \p N_INDUCED, \p P_INDUCED, or
0173      *      \p G_INDUCED
0174      *
0175      *  - Notes:
0176      */
0177     void G4SetCause(G4FFGEnumerations::FissionCause WhichCause);
0178     /** Sets the incident energy, if any, of the particle that cause fission.
0179      *  - Usage:
0180      *      - \p WhatIncidentEnergy: Kinetic energy of the particle with units applied;
0181      *
0182      *  - Notes:
0183      */
0184     void G4SetIncidentEnergy(G4double WhatIncidentEnergy);
0185     /** Sets the fission isotope
0186      *  - Usage:
0187      *      - \p WhichIsotope: Code of the isotope in ZZZAAA format
0188      *
0189      *  - Notes:
0190      */
0191     void G4SetIsotope(G4int WhichIsotope);
0192     /** Sets the metastable state of the fission isotope.
0193      *  - Usage:
0194      *      - \p WhichMetaState: \p GROUND_STATE, \p META_1, or \p META_2
0195      *
0196      *  - Notes:
0197      */
0198     void G4SetMetaState(G4FFGEnumerations::MetaState WhichMetaState);
0199     /** Set the sampling scheme.
0200      *  - Usage:
0201      *      - NewScheme: The G4FissionSamplingScheme value for the sampling
0202      *        scheme to use.
0203      *
0204      *  - Notes:
0205      *      - \p NORMAL: Sets the parameters of this class to sample fission
0206      *           events without any biasing.
0207      *      - \p LIGHT_FRAGMENT: Sets the parameters of this class to bias the
0208      *           fragment generation by always selecting a light fragment
0209      *           (A \< 115) first.
0210      *      - \p WENDT: Sets the parameters of this class to sample fission
0211      *           events according to the Wendt sampling scheme. Please refer to
0212      *           the code documentation for G4FPYWendtSamplingDist for a more
0213      *           detailed explanation.
0214      */
0215     void G4SetSamplingScheme(G4FFGEnumerations::FissionSamplingScheme NewScheme);
0216     /** Sets the ENDF yield type to be used for the data
0217      *  - Usage:
0218      *      - \p WhichYieldType: \p INDEPENDENT or \p COMULATIVE
0219      *
0220      *  - Notes:
0221      */
0222     void G4SetYieldType(G4FFGEnumerations::YieldType WhichYieldType);
0223     /** Sets the verbosity levels
0224      *  - Usage:
0225      *      - \p WhichVerbosity: Combination of  levels
0226      *
0227      *  - Notes:
0228      *      - \p SILENT: All verbose output is repressed
0229      *      - \p UPDATES: Only high-level internal changes are reported
0230      *      - \p DAUGHTER_INFO: Displays information about daughter product sampling
0231      *      - \p NEUTRON_INFO: Displays information about neutron sampling
0232      *      - \p GAMMA_INFO: Displays information about gamma sampling
0233      *      - \p ALPHA_INFO: Displays information about alpha sampling
0234      *      - \p MOMENTUM_INFO: Displays information about momentum balancing
0235      *      - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation
0236      * or interpolation that occurs
0237      *      - \p DEBUG: Reports program flow as it steps through functions
0238      *      - \p PRINT_ALL: Displays any and all output
0239      */
0240     void G4SetVerbosity(G4int WhatVerbosity);
0241 
0242   protected:
0243     // Variables
0244     // Class descriptor variables
0245     /** Number in ZZZAAA format of the isotope that
0246      *  G4FissionFragmentGenerator references
0247      */
0248     G4int Isotope_;
0249     /** MetaState information of the isotope that G4FissionFragmentGenerator
0250      *  references
0251      *  \n A value of 0 refers to the ground state
0252      */
0253     G4FFGEnumerations::MetaState MetaState_;
0254     /** The cause of fission: \p SPONTANEOUS or \p N_INDUCED. */
0255     G4FFGEnumerations::FissionCause Cause_;
0256     /** Kinetic energy, if any, of the incident particle in GeV. */
0257     G4double IncidentEnergy_;
0258     /** The type of yield to be used: \p INDEPENDET or \p CUMULATIVE */
0259     G4FFGEnumerations::YieldType YieldType_;
0260     /** Sets the ternary fission probability. Valid ranges are [0, 1] */
0261     G4double TernaryProbability_;
0262     /** Controls whether alpha particles are emitted, and how many */
0263     G4double AlphaProduction_;
0264     /** If Isotope_, MetaState_, Cause_, or IncidentEnergy_ are changed in
0265      *  the middle of a run then the class pointed at by YieldData_ will
0266      *  need to be reconstructed
0267      */
0268     G4bool IsReconstructionNeeded_;
0269     /** Verbosity level */
0270     G4int Verbosity_;
0271 
0272     // Defines the current sampling scheme and the respective class
0273     /** The sampling scheme that is used: \p NORMAL, \p LIGHT_FRAGMENT, or
0274      *  \p WENDT.
0275      */
0276     G4FFGEnumerations::FissionSamplingScheme SamplingScheme_;
0277     /** Pointer to G4FissionProductYieldDist class that holds all the
0278      *  probabilistic yield data
0279      */
0280     G4FissionProductYieldDist* YieldData_;
0281 
0282     // Destructor function(s)
0283   public:
0284     /** Default deconstructor */
0285     ~G4FissionFragmentGenerator();
0286 };
0287 
0288 #endif /* G4FISSIONFRAGMENTGENERATOR_HH */