Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ParticleHPPartial Class Reference

#include <G4ParticleHPPartial.hh>

Public Member Functions

 G4ParticleHPPartial (G4int n)
 
 G4ParticleHPPartial (G4int n1, G4int n2)
 
void InitInterpolation (G4int i, std::istream &aDataFile)
 
void InitInterpolation (std::istream &aDataFile)
 
void Init (std::istream &aDataFile)
 
void InitData (G4int i, std::istream &aDataFile, G4double unit=1.)
 
 ~G4ParticleHPPartial ()
 
G4int GetNumberOfEnergies ()
 
void SetX (G4int i, G4double x)
 
void SetT (G4int i, G4double x)
 
void SetX (G4int i, G4int j, G4double x)
 
void SetY (G4int i, G4int j, G4double y)
 
void DoneSetXY (G4int i)
 
G4double GetX (G4int i)
 
G4double GetT (G4int i)
 
G4double GetX (G4int i, G4int j)
 
G4double GetY (G4int i, G4int j)
 
G4double GetY (G4int i, G4double e)
 
G4int GetNEntries (G4int i)
 
G4ParticleHPVectorGetY (G4double e1)
 
G4double Sample (G4double x)
 

Detailed Description

Definition at line 41 of file G4ParticleHPPartial.hh.

Constructor & Destructor Documentation

◆ G4ParticleHPPartial() [1/2]

G4ParticleHPPartial::G4ParticleHPPartial ( G4int n)
inline

Definition at line 44 of file G4ParticleHPPartial.hh.

45 {
46 X = new G4double[n];
47 data = new G4ParticleHPVector[n];
48 nData = n;
49 T = nullptr;
50 }
double G4double
Definition G4Types.hh:83

◆ G4ParticleHPPartial() [2/2]

G4ParticleHPPartial::G4ParticleHPPartial ( G4int n1,
G4int n2 )
inline

Definition at line 52 of file G4ParticleHPPartial.hh.

53 {
54 T = new G4double[n2];
55 X = new G4double[n1];
56 data = new G4ParticleHPVector[n1];
57 nData = std::max(n1, n2);
58 }

◆ ~G4ParticleHPPartial()

G4ParticleHPPartial::~G4ParticleHPPartial ( )
inline

Definition at line 95 of file G4ParticleHPPartial.hh.

96 {
97 delete[] X;
98 delete[] T;
99 delete[] data;
100 }

Member Function Documentation

◆ DoneSetXY()

void G4ParticleHPPartial::DoneSetXY ( G4int i)
inline

Definition at line 107 of file G4ParticleHPPartial.hh.

107{ data[i].Hash(); }

Referenced by G4ParticleHPElasticFS::Init().

◆ GetNEntries()

G4int G4ParticleHPPartial::GetNEntries ( G4int i)
inline

Definition at line 114 of file G4ParticleHPPartial.hh.

114{ return data[i].GetVectorLength(); }
G4int GetVectorLength() const

Referenced by Sample().

◆ GetNumberOfEnergies()

G4int G4ParticleHPPartial::GetNumberOfEnergies ( )
inline

Definition at line 101 of file G4ParticleHPPartial.hh.

101{ return nData; }

◆ GetT()

G4double G4ParticleHPPartial::GetT ( G4int i)
inline

Definition at line 110 of file G4ParticleHPPartial.hh.

110{ return T[i]; }

◆ GetX() [1/2]

G4double G4ParticleHPPartial::GetX ( G4int i)
inline

Definition at line 109 of file G4ParticleHPPartial.hh.

109{ return X[i]; }

Referenced by GetY(), and Sample().

◆ GetX() [2/2]

G4double G4ParticleHPPartial::GetX ( G4int i,
G4int j )
inline

Definition at line 111 of file G4ParticleHPPartial.hh.

111{ return data[i].GetX(j); }
G4double GetX(G4int i) const

◆ GetY() [1/3]

G4ParticleHPVector * G4ParticleHPPartial::GetY ( G4double e1)

Definition at line 39 of file G4ParticleHPPartial.cc.

40{
41 auto aBuffer = new G4ParticleHPVector();
42 G4int i;
43 if (nData == 1) {
44 for (i = 0; i < data[0].GetVectorLength(); i++) {
45 aBuffer->SetInterpolationManager(data[0].GetInterpolationManager());
46 aBuffer->SetData(i, data[0].GetX(i), data[0].GetY(i));
47 }
48 return aBuffer;
49 }
50 for (i = 0; i < nData; i++) {
51 if (X[i] > e1) break;
52 }
53 if (i == nData) i--;
54 if (0 == i) i = 1;
55 G4double x1, x2, y1, y2, y;
56 G4int i1 = 0, ib = 0;
57 G4double E1 = X[i - 1];
58 G4double E2 = X[i];
59 for (G4int ii = 0; ii < data[i].GetVectorLength(); ii++) {
60 x1 = data[i - 1].GetX(std::min(i1, data[i - 1].GetVectorLength() - 1));
61 x2 = data[i].GetX(ii);
62 if (x1 < x2 && i1 < data[i - 1].GetVectorLength()) {
63 y1 = data[i - 1].GetY(i1);
64 y2 = data[i].GetY(x1);
65 if (E2 - E1 != 0) {
66 y = theInt.Interpolate(theManager.GetScheme(i), e1, E1, E2, y1, y2);
67 }
68 else {
69 y = 0.5 * (y1 + y2);
70 }
71 aBuffer->SetData(ib, x1, y);
72 aBuffer->SetScheme(ib++, data[i - 1].GetScheme(i1));
73 i1++;
74 if (x2 - x1 > 0.001 * x1) {
75 ii--;
76 }
77 }
78 else {
79 y1 = data[i - 1].GetY(x2);
80 y2 = data[i].GetY(ii);
81 if (E2 - E1 != 0) {
82 y = theInt.Interpolate(theManager.GetScheme(i), e1, E1, E2, y1, y2);
83 }
84 else {
85 y = 0.5 * (y1 + y2);
86 }
87 aBuffer->SetData(ib, x2, y);
88 aBuffer->SetScheme(ib++, data[i].GetScheme(ii));
89 if (x1 - x2 < 0.001 * x2) i1++;
90 }
91 }
92 return aBuffer;
93}
int G4int
Definition G4Types.hh:85
G4InterpolationScheme GetScheme(G4int index) const
G4double Interpolate(G4InterpolationScheme aScheme, G4double x, G4double x1, G4double x2, G4double y1, G4double y2) const
G4double GetY(G4int i, G4int j)
G4double GetY(G4double x)

◆ GetY() [2/3]

G4double G4ParticleHPPartial::GetY ( G4int i,
G4double e )
inline

Definition at line 113 of file G4ParticleHPPartial.hh.

113{ return data[i].GetY(e); }

◆ GetY() [3/3]

G4double G4ParticleHPPartial::GetY ( G4int i,
G4int j )
inline

Definition at line 112 of file G4ParticleHPPartial.hh.

112{ return data[i].GetY(j); }

Referenced by G4ParticleHPPhotonDist::GetPhotons(), GetY(), and Sample().

◆ Init()

void G4ParticleHPPartial::Init ( std::istream & aDataFile)
inline

Definition at line 67 of file G4ParticleHPPartial.hh.

68 {
69 G4int i;
70 G4double e;
71 for (i = 0; i < nData; i++) {
72 aDataFile >> e;
73 e *= CLHEP::eV;
74 SetX(i, e);
75 InitData(i, aDataFile, CLHEP::eV); // energy and probability for gammas
76 }
77 }
void SetX(G4int i, G4double x)
void InitData(G4int i, std::istream &aDataFile, G4double unit=1.)

Referenced by G4ParticleHPPhotonDist::InitEnergies().

◆ InitData()

void G4ParticleHPPartial::InitData ( G4int i,
std::istream & aDataFile,
G4double unit = 1. )
inline

Definition at line 79 of file G4ParticleHPPartial.hh.

80 {
81 G4int ii;
82 G4double eg, pg;
83 G4int neg;
84 aDataFile >> neg;
85 data[i].InitInterpolation(aDataFile);
86 for (ii = 0; ii < neg; ii++) {
87 aDataFile >> eg >> pg;
88 eg *= unit;
89 SetX(i, ii, eg);
90 SetY(i, ii, pg);
91 }
92 data[i].Hash();
93 }
void SetY(G4int i, G4int j, G4double y)
void InitInterpolation(std::istream &aDataFile)

Referenced by G4ParticleHPAngular::Init(), and Init().

◆ InitInterpolation() [1/2]

void G4ParticleHPPartial::InitInterpolation ( G4int i,
std::istream & aDataFile )
inline

◆ InitInterpolation() [2/2]

void G4ParticleHPPartial::InitInterpolation ( std::istream & aDataFile)
inline

Definition at line 65 of file G4ParticleHPPartial.hh.

65{ theManager.Init(aDataFile); }
void Init(G4int aScheme, G4int aRange)

◆ Sample()

G4double G4ParticleHPPartial::Sample ( G4double x)

Definition at line 95 of file G4ParticleHPPartial.cc.

96{
97 G4int i;
98 for (i = 0; i < nData; i++) {
99 if (x < X[i]) break;
100 }
101 G4ParticleHPVector theBuff;
102 if (i == 0) {
103 theBuff.SetInterpolationManager(data[0].GetInterpolationManager());
104 for (G4int ii = 0; ii < GetNEntries(0); ii++) {
105 theBuff.SetX(ii, GetX(0, ii));
106 theBuff.SetY(ii, GetY(0, ii));
107 }
108 }
109 // else if(i==nData-1) this line will be delete
110 else if (i == nData) {
111 for (i = 0; i < GetNEntries(nData - 1); i++) {
112 theBuff.SetX(i, GetX(nData - 1, i));
113 theBuff.SetY(i, GetY(nData - 1, i));
114 theBuff.SetInterpolationManager(data[nData - 1].GetInterpolationManager());
115 }
116 }
117 else {
118 G4int low = i - 1;
119 G4int high = low + 1;
120 G4double x1, x2, y1, y2;
121 G4int i1 = 0, i2 = 0, ii = 0;
122 x1 = X[low];
123 x2 = X[high];
124 while (i1 < GetNEntries(low) || i2 < GetNEntries(high)) // Loop checking, 11.05.2015, T. Koi
125 {
126 if ((GetX(low, i1) < GetX(high, i2) && i1 < GetNEntries(low)) || (i2 == GetNEntries(high))) {
127 theBuff.SetX(ii, GetX(low, i1));
128 y1 = GetY(low, i1);
129 y2 = GetY(high, GetX(low, i1)); // prob at ident theta
130 theBuff.SetY(ii, theInt.Interpolate(theManager.GetScheme(high), x, x1, x2, y1,
131 y2)); // energy interpol
132 theBuff.SetScheme(ii, data[low].GetScheme(i1));
133 if (std::abs(GetX(low, i1) - GetX(high, i2)) < 0.001) i2++;
134 i1++;
135 ii++;
136 }
137 else {
138 theBuff.SetX(ii, GetX(high, i2));
139 //*******************************************************************************
140 // Change by E.Mendoza and D.Cano (CIEMAT):
141 // y1 = GetY(high,i2);
142 // y2 = GetY(low, GetX(high,i2)); //prob at ident theta
143 y2 = GetY(high, i2);
144 y1 = GetY(low, GetX(high, i2)); // prob at ident theta
145 //*******************************************************************************
146 theBuff.SetY(ii, theInt.Interpolate(theManager.GetScheme(high), x, x1, x2, y1,
147 y2)); // energy interpol
148 theBuff.SetScheme(ii, data[high].GetScheme(i2));
149 if (std::abs(GetX(low, i1) - GetX(high, i2)) < 0.001) i1++;
150 i2++;
151 ii++;
152 }
153 }
154 }
155 // buff is full, now sample.
156 return theBuff.Sample();
157}
void SetY(G4int i, G4double x)
void SetX(G4int i, G4double e)
void SetScheme(G4int aPoint, const G4InterpolationScheme &aScheme)
void SetInterpolationManager(const G4InterpolationManager &aManager)

Referenced by G4ParticleHPElasticFS::ApplyYourself(), and G4ParticleHPAngular::SampleAndUpdate().

◆ SetT()

void G4ParticleHPPartial::SetT ( G4int i,
G4double x )
inline

Definition at line 104 of file G4ParticleHPPartial.hh.

104{ T[i] = x; }

Referenced by G4ParticleHPAngular::Init(), and G4ParticleHPElasticFS::Init().

◆ SetX() [1/2]

void G4ParticleHPPartial::SetX ( G4int i,
G4double x )
inline

Definition at line 103 of file G4ParticleHPPartial.hh.

103{ X[i] = x; }

Referenced by G4ParticleHPAngular::Init(), G4ParticleHPElasticFS::Init(), Init(), and InitData().

◆ SetX() [2/2]

void G4ParticleHPPartial::SetX ( G4int i,
G4int j,
G4double x )
inline

Definition at line 105 of file G4ParticleHPPartial.hh.

105{ data[i].SetX(j, x); }

◆ SetY()

void G4ParticleHPPartial::SetY ( G4int i,
G4int j,
G4double y )
inline

Definition at line 106 of file G4ParticleHPPartial.hh.

106{ data[i].SetY(j, y); }

Referenced by G4ParticleHPElasticFS::Init(), and InitData().


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