Geant4-11
Public Member Functions | Private Types | Static Private Attributes
G4AngularDistributionNP Class Reference

#include <G4AngularDistributionNP.hh>

Inheritance diagram for G4AngularDistributionNP:
G4VAngularDistribution

Public Member Functions

virtual G4double CosTheta (G4double s, G4double m1, G4double m2) const
 
 G4AngularDistributionNP ()
 
virtual G4double Phi () const
 
virtual ~G4AngularDistributionNP ()
 

Private Types

enum  { NENERGY =39 , NANGLE =180 }
 

Static Private Attributes

static const G4float dsigmax [NENERGY]
 
static const G4float elab [NENERGY]
 
static const G4float pcm [NENERGY]
 
static const G4float sig [NENERGY][NANGLE]
 
static const G4float sigtot [NENERGY]
 

Detailed Description

Definition at line 40 of file G4AngularDistributionNP.hh.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private
Enumerator
NENERGY 
NANGLE 

Definition at line 45 of file G4AngularDistributionNP.hh.

Constructor & Destructor Documentation

◆ G4AngularDistributionNP()

G4AngularDistributionNP::G4AngularDistributionNP ( )
inline

Definition at line 49 of file G4AngularDistributionNP.hh.

49{ }

◆ ~G4AngularDistributionNP()

virtual G4AngularDistributionNP::~G4AngularDistributionNP ( )
inlinevirtual

Definition at line 51 of file G4AngularDistributionNP.hh.

51{ }

Member Function Documentation

◆ CosTheta()

G4double G4AngularDistributionNP::CosTheta ( G4double  s,
G4double  m1,
G4double  m2 
) const
virtual

Implements G4VAngularDistribution.

Definition at line 37 of file G4AngularDistributionNP.cc.

38{
39 G4int verboseLevel=1;
40
41 G4double ek= ((S - sqr(m_1) -sqr(m_2) )/(2*m_1) - m_1 )/GeV ; // kinetic energy in GeV
42
43 // Find energy bin
44
45 G4int je1 = 0;
46 G4int je2 = NENERGY - 1;
47 G4int iterationsLeft=2*NENERGY +1;
48 do {
49 G4int midBin = (je1 + je2)/2;
50 if (ek < elab[midBin])
51 je2 = midBin;
52 else
53 je1 = midBin;
54 } while ( (je2 - je1) > 1 && --iterationsLeft > 0 ); /* Loop checking, 30-Oct-2015, G.Folger */
55 if ( iterationsLeft <= 0 ) {
56 G4Exception("G4AngularDistributionNP", "im_r_matrix010", FatalException,
57 "Problem with energy bin (elab) data");
58
59 }
60 // G4int j;
61 //std::abs(ek-elab[je1]) < std::abs(ek-elab[je2]) ? j = je1 : j = je2;
62 G4double delab = elab[je2] - elab[je1];
63
64 // Sample the angle
65
66 G4double sample = G4UniformRand();
67 G4int ke1 = 0;
68 G4int ke2 = NANGLE - 1;
69 G4double dsig = sig[je2][0] - sig[je1][0];
70 G4double rc = dsig/delab;
71 G4double b = sig[je1][0] - rc*elab[je1];
72 G4double sigint1 = rc*ek + b;
73 G4double sigint2 = 0.;
74
75 if (verboseLevel > 1) G4cout << "sample=" << sample << G4endl
76 << ek << " " << ke1 << " " << ke2 << " "
77 << sigint1 << " " << sigint2 << G4endl;
78 iterationsLeft= 2*NANGLE +1;
79 do {
80 G4int midBin = (ke1 + ke2)/2;
81 dsig = sig[je2][midBin] - sig[je1][midBin];
82 rc = dsig/delab;
83 b = sig[je1][midBin] - rc*elab[je1];
84 G4double sigint = rc*ek + b;
85 if (sample < sigint) {
86 ke2 = midBin;
87 sigint2 = sigint;
88 }
89 else {
90 ke1 = midBin;
91 sigint1 = sigint;
92 }
93 if (verboseLevel > 1)G4cout << ke1 << " " << ke2 << " "
94 << sigint1 << " " << sigint2 << G4endl;
95 } while ( (ke2 - ke1) > 1 && --iterationsLeft > 0); /* Loop checking, 30-Oct-2015, G.Folger */
96 if ( iterationsLeft <= 0 ) {
97 G4Exception("G4AngularDistributionNP", "im_r_matrix011", FatalException,
98 "Problem with angular distribution (sig) data");
99 }
100
101 // sigint1 and sigint2 should be recoverable from above loop
102
103 // G4double dsig = sig[je2][ke1] - sig[je1][ke1];
104 // G4double rc = dsig/delab;
105 // G4double b = sig[je1][ke1] - rc*elab[je1];
106 // G4double sigint1 = rc*ek + b;
107
108 // G4double dsig = sig[je2][ke2] - sig[je1][ke2];
109 // G4double rc = dsig/delab;
110 // G4double b = sig[je1][ke2] - rc*elab[je1];
111 // G4double sigint2 = rc*ek + b;
112
113 dsig = sigint2 - sigint1;
114 rc = 1./dsig;
115 b = ke1 - rc*sigint1;
116 G4double kint = rc*sample + b;
117 G4double theta = (0.5 + kint)*pi/180.;
118
119 // G4int k;
120 //std::abs(sample-sig[j][ke1]) < std::abs(sample-sig[j][ke2]) ? k = ke1 : k = ke2;
121 // G4double theta = (0.5 + k)*pi/180.;
122
123 if (verboseLevel > 1) {
124 G4cout << " energy bin " << je1 << " energy=" << elab[je1] << G4endl;
125 G4cout << " angle bin " << kint << " angle=" << theta/degree << G4endl;
126 }
127 G4double costh= std::cos(theta);
128 return costh;
129}
G4double S(G4double temp)
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
static constexpr double GeV
Definition: G4SIunits.hh:203
static constexpr double degree
Definition: G4SIunits.hh:124
static constexpr double pi
Definition: G4SIunits.hh:55
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
#define G4UniformRand()
Definition: Randomize.hh:52
static const G4float sig[NENERGY][NANGLE]
static const G4float elab[NENERGY]
T sqr(const T &x)
Definition: templates.hh:128

References degree, elab, FatalException, G4cout, G4endl, G4Exception(), G4UniformRand, GeV, NANGLE, NENERGY, pi, S(), sig, and sqr().

◆ Phi()

G4double G4AngularDistributionNP::Phi ( ) const
virtual

Reimplemented from G4VAngularDistribution.

Definition at line 131 of file G4AngularDistributionNP.cc.

132{
133 return twopi * G4UniformRand();
134}
static constexpr double twopi
Definition: G4SIunits.hh:56

References G4UniformRand, and twopi.

Field Documentation

◆ dsigmax

const G4float G4AngularDistributionNP::dsigmax
staticprivate
Initial value:
= {
79.0f, 43.0f, 29.8f, 20.0f, 16.3f, 14.5f, 13.3f,
12.6f, 11.9f, 11.3f, 11.1f, 10.7f, 9.69f, 10.1f,
11.4f, 12.5f, 13.3f, 14.5f, 15.6f, 16.9f, 18.3f,
20.070f, 21.620f, 23.090f, 24.460f, 25.710f, 26.870f, 27.950f,
28.990f, 30.950f, 32.790f, 34.570f, 36.370f, 38.090f, 40.810f,
40.950f, 40.230f, 39.840f, 39.010f
}

Definition at line 61 of file G4AngularDistributionNP.hh.

◆ elab

const G4float G4AngularDistributionNP::elab
staticprivate
Initial value:
= {
0.100E-01f, 0.200E-01f, 0.300E-01f, 0.500E-01f, 0.700E-01f, 0.100f, 0.140f,
0.180f, 0.240f, 0.340f, 0.420f, 0.500f, 0.580f, 0.620f,
0.680f, 0.740f, 0.800f, 0.900f, 1.00f, 1.10f, 1.200f,
1.300f, 1.400f, 1.500f, 1.600f, 1.700f, 1.800f, 1.900f,
2.000f, 2.200f, 2.400f, 2.600f, 2.800f, 3.000f, 3.400f,
3.800f, 4.200f, 4.600f, 5.000f
}

Definition at line 60 of file G4AngularDistributionNP.hh.

Referenced by CosTheta().

◆ pcm

const G4float G4AngularDistributionNP::pcm
staticprivate
Initial value:
= {
0.685E-01f, 0.969E-01f, 0.119f, 0.153f, 0.181f, 0.217f, 0.256f,
0.291f, 0.336f, 0.399f, 0.444f, 0.484f, 0.522f, 0.539f,
0.565f, 0.589f, 0.613f, 0.650f, 0.685f, 0.718f, 0.750f,
0.781f, 0.810f, 0.839f, 0.866f, 0.893f, 0.919f, 0.944f,
0.969f, 1.016f, 1.061f, 1.104f, 1.146f, 1.186f, 1.263f,
1.335f, 1.404f, 1.469f, 1.532f
}

Definition at line 60 of file G4AngularDistributionNP.hh.

◆ sig

const G4float G4AngularDistributionNP::sig
staticprivate

Definition at line 59 of file G4AngularDistributionNP.hh.

Referenced by CosTheta().

◆ sigtot

const G4float G4AngularDistributionNP::sigtot
staticprivate
Initial value:
= {
947.f, 485.f, 310.f, 168.f, 110.f, 75.7f, 55.2f,
45.9f, 39.1f, 34.1f, 32.3f, 31.3f, 30.1f, 29.5f,
28.4f, 27.4f, 26.4f, 24.8f, 23.4f, 22.4f, 21.9f,
22.074f, 22.182f, 22.380f, 22.589f, 22.777f, 22.939f, 23.072f,
23.182f, 23.339f, 23.443f, 23.561f, 23.752f, 23.996f, 24.841f,
25.406f, 24.742f, 24.314f, 23.695f
}

Definition at line 61 of file G4AngularDistributionNP.hh.


The documentation for this class was generated from the following files: