Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/event/include/G4SPSEneDistribution.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /event/include/G4SPSEneDistribution.hh (Version 11.3.0) and /event/include/G4SPSEneDistribution.hh (Version 8.2.p1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // G4SPSEneDistribution                        <<  26 ///////////////////////////////////////////////////////////////////////////////
                                                   >>  27 //
                                                   >>  28 // MODULE:        G4SPSEneDistribution.hh
                                                   >>  29 //
                                                   >>  30 // Version:      1.0
                                                   >>  31 // Date:         5/02/04
                                                   >>  32 // Author:       Fan Lei 
                                                   >>  33 // Organisation: QinetiQ ltd.
                                                   >>  34 // Customer:     ESA/ESTEC
                                                   >>  35 //
                                                   >>  36 ///////////////////////////////////////////////////////////////////////////////
                                                   >>  37 //
                                                   >>  38 // CHANGE HISTORY
                                                   >>  39 // --------------
                                                   >>  40 //
                                                   >>  41 //
                                                   >>  42 // Version 1.0, 05/02/2004, Fan Lei, Created.
                                                   >>  43 //    Based on the G4GeneralParticleSource class in Geant4 v6.0
                                                   >>  44 //
                                                   >>  45 ///////////////////////////////////////////////////////////////////////////////
                                                   >>  46 //
 27 //                                                 47 //
 28 // Class Description:                              48 // Class Description:
 29 //                                                 49 //
 30 // To generate the energy of a primary vertex  <<  50 // To generate the energy of a primary vertex according to the defined distribution 
 31 // defined distribution. This is a shared clas <<  51 //
 32 // Only one thread should use the set-methods  <<  52 ///////////////////////////////////////////////////////////////////////////////
 33 // Note that this is exactly what is achieved  <<  53 //
 34 // If you use the set methods to set defaults  <<  54 // MEMBER FUNCTIONS
 35 // care that only one thread is executing them <<  55 // ----------------
 36 // In addition take care of calling these meth <<  56 //
 37 // started. Do not use the setters during the  <<  57 // G4SPSEneDistribution ()
                                                   >>  58 //    Constructor: Initializes variables
                                                   >>  59 //
                                                   >>  60 // ~G4SPSEneDistribution ()
                                                   >>  61 //    Destructor: 
                                                   >>  62 //
                                                   >>  63 // void SetEnergyDisType(G4String)
                                                   >>  64 //    Allows the user to choose the energy distribution type. The arguments
                                                   >>  65 //    are Mono (mono-energetic), Lin (linear), Pow (power-law), Exp 
                                                   >>  66 //    (exponential), Gauss (gaussian), Brem (bremsstrahlung), BBody (black-body), Cdg
                                                   >>  67 //    (cosmic diffuse gamma-ray), User (user-defined), Arb (arbitrary
                                                   >>  68 //    point-wise), Epn (energy per nucleon).
                                                   >>  69 //
                                                   >>  70 // void SetEmin(G4double)
                                                   >>  71 //    Sets the minimum energy.
                                                   >>  72 //
                                                   >>  73 // void SetEmax(G4double)
                                                   >>  74 //    Sets the maximum energy.
                                                   >>  75 //
                                                   >>  76 // void SetMonoEnergy(G4double)
                                                   >>  77 //    Sets energy for mono-energetic distribution.
                                                   >>  78 //
                                                   >>  79 // void SetAlpha(G4double)
                                                   >>  80 //    Sets alpha for a power-law distribution.
                                                   >>  81 //
                                                   >>  82 // void SetTemp(G4double)
                                                   >>  83 //    Sets Temperature for a Brem or BBody distributions.
                                                   >>  84 //
                                                   >>  85 // void SetEzero(G4double)
                                                   >>  86 //    Sets Ezero for an exponential distribution.
                                                   >>  87 //
                                                   >>  88 // void SetGradient(G4double)
                                                   >>  89 //    Sets gradient for a linear distribution.
                                                   >>  90 //
                                                   >>  91 // void SetInterCept(G4double)
                                                   >>  92 //    Sets intercept for a linear distribution.
                                                   >>  93 //
                                                   >>  94 // void UserEnergyHisto(G4ThreeVector)
                                                   >>  95 //    Allows user to defined a histogram for the energy distribution.
                                                   >>  96 //
                                                   >>  97 // void ArbEnergyHisto(G4ThreeVector)
                                                   >>  98 //    Allows the user to define an Arbitrary set of points for the
                                                   >>  99 //    energy distribution.
                                                   >> 100 //
                                                   >> 101 // void EpnEnergyHisto(G4ThreeVector)
                                                   >> 102 //    Allows the user to define an Energy per nucleon histogram.
                                                   >> 103 //
                                                   >> 104 // void Calculate()
                                                   >> 105 //    Controls the calculation of Integral PDF for the Cdg and BBody
                                                   >> 106 //    distributions.
                                                   >> 107 //
                                                   >> 108 // void InputEnergySpectra(G4bool)
                                                   >> 109 //    Allows the user to choose between momentum and energy histograms
                                                   >> 110 //    for user-defined histograms and arbitrary point-wise spectr.
                                                   >> 111 //    The default is true (energy).
                                                   >> 112 //
                                                   >> 113 // void InputDifferentialSpectra(G4bool)
                                                   >> 114 //    Allows the user to choose between integral and differential 
                                                   >> 115 //    distributions when using the arbitrary point-wise option.
                                                   >> 116 //
                                                   >> 117 // void ArbInterpolate(G4String)
                                                   >> 118 //    ArbInterpolate allows the user to specify the type of function to
                                                   >> 119 //    interpolate the Arbitrary points spectrum with.
                                                   >> 120 //
                                                   >> 121 //  void SetBiasRndm (G4SPSRandomGenerator* a)
                                                   >> 122 //    Sets the biased random number generator
                                                   >> 123 //
                                                   >> 124 //  G4double GenerateOne(G4ParticleDefinition*);
                                                   >> 125 //    Generate one random energy for the specified particle
                                                   >> 126 //
                                                   >> 127 //  void ReSetHist(G4String);
                                                   >> 128 //    Re-sets the histogram for user defined distribution
                                                   >> 129 //
                                                   >> 130 // void SetVerbosity(G4int)
                                                   >> 131 //    Sets the verbosity level.
                                                   >> 132 //
                                                   >> 133 ///////////////////////////////////////////////////////////////////////////////
 38                                                   134 
 39 // Author:       Fan Lei, QinetiQ ltd.         << 135 #ifndef G4SPSEneDistribution_h
 40 // Customer:     ESA/ESTEC                     << 136 #define G4SPSEneDistribution_h 1
 41 // History:                                    << 
 42 // - 05/02/2004, Fan Lei - Created.            << 
 43 //     Based on the G4GeneralParticleSource cl << 
 44 // - 26/03/2014, Andrew Green.                 << 
 45 //     Modification to use STL vectors instead << 
 46 //     Also moved to dynamically allocated mem << 
 47 //     ExpInterpolation() and LogInterpolation << 
 48 // - 06/06/2014, Andrea Dotti.                 << 
 49 //     For thread safety: this is a shared obj << 
 50 //     Added mutex to control access to shared << 
 51 //     in Getters and Setters, mutex is NOT us << 
 52 //     is assumed that properties are not chan << 
 53 // - 24/11/2017, Fan Lei                       << 
 54 //    Added cutoff power-law distribution opti << 
 55 //    to that of the BlackBody one.            << 
 56 // ------------------------------------------- << 
 57 #ifndef G4SPSEneDistribution_hh                << 
 58 #define G4SPSEneDistribution_hh 1              << 
 59                                                   137 
 60 #include "G4PhysicsFreeVector.hh"              << 138 #include "G4PhysicsOrderedFreeVector.hh"
 61 #include "G4ParticleMomentum.hh"                  139 #include "G4ParticleMomentum.hh"
 62 #include "G4ParticleDefinition.hh"                140 #include "G4ParticleDefinition.hh"
 63 #include "G4DataInterpolation.hh"                 141 #include "G4DataInterpolation.hh"
 64 #include "G4Threading.hh"                      << 
 65 #include "G4Cache.hh"                          << 
 66 #include <vector>                              << 
 67                                                   142 
                                                   >> 143 //
 68 #include "G4SPSRandomGenerator.hh"                144 #include "G4SPSRandomGenerator.hh"
 69                                                   145 
 70 class G4SPSEneDistribution                        146 class G4SPSEneDistribution
 71 {                                                 147 {
 72   public:                                      << 148 public:
                                                   >> 149   G4SPSEneDistribution (); 
                                                   >> 150   ~G4SPSEneDistribution ();
                                                   >> 151 
                                                   >> 152   void SetEnergyDisType(G4String);
                                                   >> 153   inline G4String GetEnergyDisType() {return EnergyDisType;};
                                                   >> 154   void SetEmin(G4double);
                                                   >> 155   inline G4double GetEmin() {return Emin;} ;
                                                   >> 156   inline G4double GetArbEmin() {return ArbEmin;} ;
                                                   >> 157   void SetEmax(G4double);
                                                   >> 158   inline G4double GetEmax() {return Emax;} ;
                                                   >> 159   inline G4double GetArbEmax() {return ArbEmax;};
                                                   >> 160   void SetMonoEnergy(G4double);
                                                   >> 161   void SetAlpha(G4double);
                                                   >> 162   void SetTemp(G4double);
                                                   >> 163   void SetBeamSigmaInE(G4double);
                                                   >> 164   void SetEzero(G4double);
                                                   >> 165   void SetGradient(G4double);
                                                   >> 166   void SetInterCept(G4double);
                                                   >> 167   void UserEnergyHisto(G4ThreeVector);
                                                   >> 168   void ArbEnergyHisto(G4ThreeVector);
                                                   >> 169   void EpnEnergyHisto(G4ThreeVector);
                                                   >> 170 
                                                   >> 171   void InputEnergySpectra(G4bool);
                                                   >> 172   void InputDifferentialSpectra(G4bool);
                                                   >> 173   void ArbInterpolate(G4String);
                                                   >> 174   inline G4String GetIntType() {return IntType;};
                                                   >> 175   void Calculate();
                                                   >> 176   //
                                                   >> 177   void SetBiasRndm(G4SPSRandomGenerator* a) {eneRndm = a; };
                                                   >> 178   // method to re-set the histograms
                                                   >> 179   void ReSetHist(G4String);
                                                   >> 180   // Set the verbosity level.
                                                   >> 181   void SetVerbosity(G4int a) {verbosityLevel = a; } ;
                                                   >> 182   //x
                                                   >> 183   G4double GenerateOne(G4ParticleDefinition*);
                                                   >> 184   
                                                   >> 185 private:
                                                   >> 186   void LinearInterpolation();
                                                   >> 187   void LogInterpolation();
                                                   >> 188   void ExpInterpolation();
                                                   >> 189   void SplineInterpolation();
                                                   >> 190   void CalculateCdgSpectrum(); 
                                                   >> 191   void CalculateBbodySpectrum();
                                                   >> 192 
                                                   >> 193   // The following methods generate energies according to the spectral
                                                   >> 194   // parameters defined above.
                                                   >> 195   void GenerateMonoEnergetic();
                                                   >> 196   void GenerateLinearEnergies(G4bool);
                                                   >> 197   void GeneratePowEnergies(G4bool);
                                                   >> 198   void GenerateExpEnergies(G4bool );
                                                   >> 199   void GenerateGaussEnergies();
                                                   >> 200   void GenerateBremEnergies();
                                                   >> 201   void GenerateBbodyEnergies();
                                                   >> 202   void GenerateCdgEnergies();
                                                   >> 203   void GenUserHistEnergies();
                                                   >> 204   void GenEpnHistEnergies();
                                                   >> 205   void GenArbPointEnergies();
                                                   >> 206   // converts energy per nucleon to energy.
                                                   >> 207   void ConvertEPNToEnergy();
                                                   >> 208 
                                                   >> 209 private:
                                                   >> 210 
                                                   >> 211   G4String EnergyDisType; // energy dis type Variable  - Mono,Lin,Exp,etc
                                                   >> 212   G4double MonoEnergy; //Mono-energteic energy
                                                   >> 213   G4double SE ; // Standard deviation for Gaussion distrbution in energy
                                                   >> 214   G4double Emin, Emax; // emin and emax
                                                   >> 215   G4double alpha, Ezero, Temp; // alpha (pow), E0 (exp) and Temp (bbody,brem)
                                                   >> 216   G4double grad, cept; // gradient and intercept for linear spectra
                                                   >> 217   G4bool EnergySpec; // true - energy spectra, false - momentum spectra
                                                   >> 218   G4bool DiffSpec;  // true - differential spec, false integral spec
                                                   >> 219   G4bool ApplyRig; // false no rigidity cutoff, true then apply one
                                                   >> 220   G4double ERig; // energy of rigidity cutoff
                                                   >> 221   G4PhysicsOrderedFreeVector UDefEnergyH; // energy hist data
                                                   >> 222   G4PhysicsOrderedFreeVector IPDFEnergyH;  
                                                   >> 223   G4bool IPDFEnergyExist, IPDFArbExist, Epnflag;
                                                   >> 224   G4PhysicsOrderedFreeVector ArbEnergyH; // Arb x,y histogram
                                                   >> 225   G4PhysicsOrderedFreeVector IPDFArbEnergyH; // IPDF for Arb
                                                   >> 226   G4PhysicsOrderedFreeVector EpnEnergyH; 
                                                   >> 227   G4double CDGhist[3]; // cumulative histo for cdg
                                                   >> 228   G4double BBHist[10001], Bbody_x[10001];
                                                   >> 229   G4String IntType; // Interpolation type
                                                   >> 230   G4double Arb_grad[1024], Arb_cept[1024]; // grad and cept for 1024 segments
                                                   >> 231   G4double Arb_alpha[1024], Arb_Const[1024]; // alpha and constants
                                                   >> 232   G4double Arb_ezero[1024]; // ezero
                                                   >> 233   G4double ArbEmin, ArbEmax; // Emin and Emax for the whole arb distribution used primarily for debug.
                                                   >> 234 
                                                   >> 235   G4double               particle_energy;
                                                   >> 236   G4ParticleDefinition*  particle_definition;
                                                   >> 237 
                                                   >> 238   G4SPSRandomGenerator* eneRndm;
                                                   >> 239 
                                                   >> 240   // Verbosity
                                                   >> 241   G4int verbosityLevel;
                                                   >> 242 
                                                   >> 243   G4PhysicsOrderedFreeVector ZeroPhysVector ; // for re-set only 
                                                   >> 244 
                                                   >> 245   G4DataInterpolation *SplineInt; // holds Spline stuff
 73                                                   246 
 74     G4SPSEneDistribution();                    << 
 75       // Constructor: initializes variables    << 
 76    ~G4SPSEneDistribution();                    << 
 77       // Destructor                            << 
 78                                                << 
 79     void SetEnergyDisType(const G4String&);    << 
 80       // Allows the user to choose the energy  << 
 81       // The arguments are: Mono (mono-energet << 
 82       // Pow (power-law), Exp (exponential), G << 
 83       // Brem (bremsstrahlung), BBody (black-b << 
 84       // Cdg (cosmic diffuse gamma-ray), User  << 
 85       // Arb (arbitrary point-wise), Epn (ener << 
 86                                                << 
 87     const G4String& GetEnergyDisType();        << 
 88                                                << 
 89     void SetEmin(G4double);                    << 
 90       // Sets the minimum energy               << 
 91                                                << 
 92     G4double GetEmin() const;                  << 
 93     G4double GetArbEmin();                     << 
 94                                                << 
 95     void SetEmax(G4double);                    << 
 96       // Sets the maximum energy               << 
 97                                                << 
 98     G4double GetEmax() const;                  << 
 99     G4double GetArbEmax();                     << 
100                                                << 
101     void SetMonoEnergy(G4double);              << 
102       // Sets energy for mono-energetic distri << 
103                                                << 
104     void SetAlpha(G4double);                   << 
105       // Sets alpha for a power-law distributi << 
106                                                << 
107     void SetBiasAlpha(G4double);               << 
108                                                << 
109     void SetTemp(G4double);                    << 
110       // Sets Temperature for a Brem or BBody  << 
111                                                << 
112     void SetBeamSigmaInE(G4double);            << 
113                                                << 
114     void SetEzero(G4double);                   << 
115       // Sets Ezero for an exponential distrib << 
116                                                << 
117     void SetGradient(G4double);                << 
118       // Sets gradient for a linear distributi << 
119                                                << 
120     void SetInterCept(G4double);               << 
121       // Sets intercept for a linear distribut << 
122                                                << 
123     void UserEnergyHisto(const G4ThreeVector&) << 
124       // Allows user to defined a histogram fo << 
125                                                << 
126     void ArbEnergyHisto(const G4ThreeVector&); << 
127       // Allows the user to define an Arbitrar << 
128       // energy distribution                   << 
129                                                << 
130     void ArbEnergyHistoFile(const G4String&);  << 
131                                                << 
132     void EpnEnergyHisto(const G4ThreeVector&); << 
133       // Allows the user to define an Energy p << 
134                                                << 
135     void InputEnergySpectra(G4bool);           << 
136       // Allows the user to choose between mom << 
137       // for user-defined histograms and arbit << 
138       // The default is true (energy)          << 
139                                                << 
140     void InputDifferentialSpectra(G4bool);     << 
141       // Allows the user to choose between int << 
142       // distributions when using the arbitrar << 
143                                                << 
144     void ArbInterpolate(const G4String&);      << 
145       // Allows the user to specify the type o << 
146       // interpolate the Arbitrary points spec << 
147                                                << 
148     const G4String& GetIntType();              << 
149                                                << 
150     void Calculate();                          << 
151       // Controls the calculation of Integral  << 
152       // distributions                         << 
153                                                << 
154     void SetBiasRndm(G4SPSRandomGenerator* a); << 
155       // Sets the biased random number generat << 
156                                                << 
157     void ReSetHist(const G4String&);           << 
158       // Resets the histogram for user defined << 
159                                                << 
160     void SetVerbosity(G4int a);                << 
161       // Sets the verbosity level              << 
162                                                << 
163     G4double GetWeight() const;                << 
164                                                << 
165     G4double GetMonoEnergy();                  << 
166       // Mono-energetic energy                 << 
167                                                << 
168     G4double GetSE();                          << 
169       // Standard deviation for Gaussian distr << 
170                                                << 
171     G4double Getalpha() const;                 << 
172       // Alpha (pow)                           << 
173                                                << 
174     G4double GetEzero() const;                 << 
175       // E0 (exp)                              << 
176                                                << 
177     G4double GetTemp();                        << 
178       // Temp (bbody,brem)                     << 
179                                                << 
180     G4double Getgrad() const;                  << 
181       // Gradient and intercept for linear spe << 
182                                                << 
183     G4double Getcept() const;                  << 
184                                                << 
185     G4PhysicsFreeVector GetUserDefinedEnergyHi << 
186                                                << 
187     G4PhysicsFreeVector GetArbEnergyHisto();   << 
188                                                << 
189     G4double GenerateOne(G4ParticleDefinition* << 
190        // Generate one random energy for the s << 
191                                                << 
192     G4double GetProbability (G4double);        << 
193                                                << 
194     G4double GetArbEneWeight(G4double);        << 
195                                                << 
196     inline void ApplyEnergyWeight(G4bool val)  << 
197     inline G4bool IfApplyEnergyWeight() const  << 
198                                                << 
199   private:                                     << 
200                                                << 
201     void LinearInterpolation();                << 
202     void LogInterpolation();                   << 
203     void ExpInterpolation();                   << 
204     void SplineInterpolation();                << 
205     void CalculateCdgSpectrum();               << 
206     void CalculateBbodySpectrum();             << 
207     void CalculateCPowSpectrum();              << 
208                                                << 
209     // The following methods generate energies << 
210     // to the spectral parameters defined abov << 
211                                                << 
212     void GenerateMonoEnergetic();              << 
213     void GenerateBiasPowEnergies();            << 
214     void GenerateGaussEnergies();              << 
215     void GenerateBremEnergies();               << 
216     void GenerateBbodyEnergies();              << 
217     void GenerateCdgEnergies();                << 
218     void GenUserHistEnergies();                << 
219     void GenEpnHistEnergies();                 << 
220     void GenArbPointEnergies(); // NOTE: REQUI << 
221     void GenerateExpEnergies(G4bool);          << 
222     void GenerateLinearEnergies(G4bool);       << 
223     void GeneratePowEnergies(G4bool);          << 
224     void GenerateCPowEnergies();               << 
225                                                << 
226     void ConvertEPNToEnergy();                 << 
227       // Converts energy per nucleon to energy << 
228                                                << 
229     void BBInitHists();                        << 
230     void CPInitHists();                        << 
231                                                << 
232   private:  // Non invariant data members beco << 
233                                                << 
234     G4String EnergyDisType; // energy dis type << 
235     G4double weight; // particle weight //// N << 
236     G4double MonoEnergy; //Mono-energteic ener << 
237     G4double SE; // Standard deviation for Gau << 
238                                                << 
239     G4double Emin, Emax; // emin and emax //// << 
240     G4double alpha, Ezero;// alpha (pow), E0 ( << 
241     G4double Temp; // Temp (bbody,brem)        << 
242     G4double biasalpha; // biased power index  << 
243     G4double grad, cept; // gradient and inter << 
244     G4double prob_norm; // normalisation facto << 
245     G4bool Biased = false; // biased to power- << 
246     G4bool EnergySpec = true; // energy spectr << 
247     G4bool DiffSpec = true; // differential sp << 
248                                                << 
249     G4PhysicsFreeVector UDefEnergyH; // energy << 
250     G4PhysicsFreeVector IPDFEnergyH;           << 
251     G4bool IPDFEnergyExist = false, IPDFArbExi << 
252     G4PhysicsFreeVector ArbEnergyH; // Arb x,y << 
253     G4PhysicsFreeVector IPDFArbEnergyH; // IPD << 
254     G4PhysicsFreeVector EpnEnergyH;            << 
255     G4double CDGhist[3]; // cumulative histo f << 
256                                                << 
257     std::vector<G4double>* BBHist = nullptr;   << 
258     std::vector<G4double>* Bbody_x = nullptr;  << 
259     G4bool BBhistInit = false;                 << 
260     G4bool BBhistCalcd = false;                << 
261                                                << 
262     //  For cutoff power-law                   << 
263     //                                         << 
264     std::vector<G4double>* CPHist = nullptr;   << 
265     std::vector<G4double>* CP_x = nullptr;     << 
266     G4bool CPhistInit = false;                 << 
267     G4bool CPhistCalcd = false;                << 
268                                                << 
269     G4String IntType; // Interpolation type    << 
270     G4double* Arb_grad = nullptr;              << 
271     G4double* Arb_cept = nullptr;              << 
272     G4bool Arb_grad_cept_flag = false;         << 
273     G4double* Arb_alpha = nullptr;             << 
274     G4double* Arb_Const = nullptr;             << 
275     G4bool Arb_alpha_Const_flag = false;       << 
276     G4double* Arb_ezero = nullptr;             << 
277     G4bool Arb_ezero_flag = false;             << 
278                                                << 
279     G4bool applyEvergyWeight = false;          << 
280                                                << 
281     G4double ArbEmin, ArbEmax;                 << 
282       // Emin and Emax for the whole arb distr << 
283                                                << 
284     G4double particle_energy;                  << 
285                                                << 
286     G4SPSRandomGenerator* eneRndm = nullptr;   << 
287                                                << 
288     G4int verbosityLevel;                      << 
289                                                << 
290     G4PhysicsFreeVector ZeroPhysVector; // for << 
291                                                << 
292     std::vector<G4DataInterpolation*> SplineIn << 
293       // Holds Spline stuff required for sampl << 
294     G4DataInterpolation* Splinetemp = nullptr; << 
295       // Holds a temp Spline used for calculat << 
296                                                << 
297     G4Mutex mutex; // protect access to shared << 
298                                                << 
299     // Thread local data (non-invariant during << 
300     // These are copied from master one at the << 
301     // generation of each event                << 
302     //                                         << 
303     struct threadLocal_t                       << 
304     {                                          << 
305       G4double Emin;                           << 
306       G4double Emax;                           << 
307       G4double alpha;                          << 
308       G4double Ezero;                          << 
309       G4double grad;                           << 
310       G4double cept;                           << 
311       G4ParticleDefinition* particle_definitio << 
312       G4double weight;                         << 
313       G4double particle_energy;                << 
314     };                                         << 
315     G4Cache<threadLocal_t> threadLocalData;    << 
316 };                                                247 };
317                                                   248 
                                                   >> 249 
318 #endif                                            250 #endif
                                                   >> 251 
                                                   >> 252 
                                                   >> 253 
                                                   >> 254 
319                                                   255