File indexing completed on 2025-01-18 09:58:53
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifndef G4ParticleHPSimpleEvapSpectrum_h
0030 #define G4ParticleHPSimpleEvapSpectrum_h 1
0031
0032 #include "G4Exp.hh"
0033 #include "G4Log.hh"
0034 #include "G4ParticleHPVector.hh"
0035 #include "G4VParticleHPEDis.hh"
0036 #include "G4ios.hh"
0037 #include "Randomize.hh"
0038 #include "globals.hh"
0039
0040 #include <CLHEP/Units/SystemOfUnits.h>
0041
0042 #include <fstream>
0043
0044
0045
0046 class G4ParticleHPSimpleEvapSpectrum : public G4VParticleHPEDis
0047 {
0048 public:
0049 G4ParticleHPSimpleEvapSpectrum() { expm1 = G4Exp(-1.); }
0050 ~G4ParticleHPSimpleEvapSpectrum() override = default;
0051
0052 inline void Init(std::istream& aDataFile) override
0053 {
0054 theFractionalProb.Init(aDataFile, CLHEP::eV);
0055 theThetaDist.Init(aDataFile, CLHEP::eV);
0056 }
0057
0058 inline G4double GetFractionalProbability(G4double anEnergy) override
0059 {
0060 return theFractionalProb.GetY(anEnergy);
0061 }
0062
0063 inline G4double Sample(G4double anEnergy) override
0064 {
0065 G4double theta = theThetaDist.GetY(anEnergy) * CLHEP::eV;
0066 G4double random, cut, max, result = 0.;
0067 max = 10. * theta;
0068 G4int icounter = 0;
0069 G4int icounter_max = 1024;
0070 do {
0071 icounter++;
0072 if (icounter > icounter_max) {
0073 G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of "
0074 << __FILE__ << "." << G4endl;
0075 break;
0076 }
0077 random = G4UniformRand();
0078 result = -theta * G4Log(random);
0079 cut = G4UniformRand();
0080 } while (cut > result / max);
0081 return result;
0082 }
0083
0084 private:
0085 inline G4double Evapo(G4double anEnergy, G4double theta)
0086 {
0087 G4double result = (anEnergy * CLHEP::eV) * G4Exp(-anEnergy * CLHEP::eV / theta);
0088 return result;
0089 }
0090
0091 private:
0092 G4double expm1;
0093
0094 G4ParticleHPVector theFractionalProb;
0095
0096 G4ParticleHPVector theThetaDist;
0097 };
0098
0099 #endif