Geant4  10.02.p03
G4ParticleHPPartial Class Reference

#include <G4ParticleHPPartial.hh>

Collaboration diagram for G4ParticleHPPartial:

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)
 

Private Attributes

G4doubleX
 
G4doubleT
 
G4ParticleHPVectordata
 
G4int nData
 
G4InterpolationManager theManager
 
G4ParticleHPInterpolator theInt
 

Detailed Description

Definition at line 41 of file G4ParticleHPPartial.hh.

Constructor & Destructor Documentation

◆ G4ParticleHPPartial() [1/2]

G4ParticleHPPartial::G4ParticleHPPartial ( G4int  n)
inline

Definition at line 45 of file G4ParticleHPPartial.hh.

46  {
47  X = new G4double[n];
48  data = new G4ParticleHPVector[n];
49  nData = n;
50  T=0;
51  }
G4ParticleHPVector * data
Char_t n[5]
double G4double
Definition: G4Types.hh:76

◆ G4ParticleHPPartial() [2/2]

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

Definition at line 53 of file G4ParticleHPPartial.hh.

54  {
55  T = new G4double[n2];
56  X = new G4double[n1];
57  data = new G4ParticleHPVector[n1];
58  nData = std::max(n1,n2);
59  }
G4ParticleHPVector * data
double G4double
Definition: G4Types.hh:76

◆ ~G4ParticleHPPartial()

G4ParticleHPPartial::~G4ParticleHPPartial ( )
inline

Definition at line 101 of file G4ParticleHPPartial.hh.

102  {
103  delete [] X;
104  if(T!=0) delete [] T;
105  delete [] data;
106  }
G4ParticleHPVector * data

Member Function Documentation

◆ DoneSetXY()

void G4ParticleHPPartial::DoneSetXY ( G4int  i)
inline

Definition at line 113 of file G4ParticleHPPartial.hh.

113 { data[i].Hash(); }
G4ParticleHPVector * data
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetNEntries()

G4int G4ParticleHPPartial::GetNEntries ( G4int  i)
inline

Definition at line 120 of file G4ParticleHPPartial.hh.

120 {return data[i].GetVectorLength();}
G4ParticleHPVector * data
G4int GetVectorLength() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetNumberOfEnergies()

G4int G4ParticleHPPartial::GetNumberOfEnergies ( )
inline

Definition at line 107 of file G4ParticleHPPartial.hh.

107 {return nData;}

◆ GetT()

G4double G4ParticleHPPartial::GetT ( G4int  i)
inline

Definition at line 116 of file G4ParticleHPPartial.hh.

116 {return T[i];}

◆ GetX() [1/2]

G4double G4ParticleHPPartial::GetX ( G4int  i)
inline

Definition at line 115 of file G4ParticleHPPartial.hh.

115 {return X[i];}
Here is the caller graph for this function:

◆ GetX() [2/2]

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

Definition at line 117 of file G4ParticleHPPartial.hh.

117 {return data[i].GetX(j);}
G4ParticleHPVector * data
G4double GetX(G4int i) const
Here is the call graph for this function:

◆ GetY() [1/3]

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

Definition at line 118 of file G4ParticleHPPartial.hh.

118 {return data[i].GetY(j);}
G4ParticleHPVector * data
G4double GetY(G4double x)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetY() [2/3]

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

Definition at line 119 of file G4ParticleHPPartial.hh.

119 {return data[i].GetY(e);}
G4ParticleHPVector * data
G4double GetY(G4double x)
Here is the call graph for this function:

◆ GetY() [3/3]

G4ParticleHPVector * G4ParticleHPPartial::GetY ( G4double  e1)

Definition at line 38 of file G4ParticleHPPartial.cc.

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

◆ Init()

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

Definition at line 71 of file G4ParticleHPPartial.hh.

72  {
73  G4int i;
74  G4double e;
75  for( i=0; i<nData; i++)
76  {
77  aDataFile >> e;
78  e *= CLHEP::eV;
79  SetX(i,e);
80  InitData(i, aDataFile, CLHEP::eV); // energy and probability for gammas
81  }
82  }
int G4int
Definition: G4Types.hh:78
void SetX(G4int i, G4double x)
void InitData(G4int i, std::istream &aDataFile, G4double unit=1.)
double G4double
Definition: G4Types.hh:76
static const double eV
Here is the call graph for this function:
Here is the caller graph for this function:

◆ InitData()

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

Definition at line 84 of file G4ParticleHPPartial.hh.

85  {
86  G4int ii;
87  G4double eg, pg;
88  G4int neg;
89  aDataFile >> neg;
90  data[i].InitInterpolation(aDataFile);
91  for (ii=0; ii<neg; ii++)
92  {
93  aDataFile >> eg >> pg;
94  eg *= unit;
95  SetX(i,ii,eg);
96  SetY(i,ii,pg);
97  }
98  data[i].Hash();
99  }
G4ParticleHPVector * data
void SetY(G4int i, G4int j, G4double y)
void InitInterpolation(std::istream &aDataFile)
int G4int
Definition: G4Types.hh:78
void SetX(G4int i, G4double x)
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ InitInterpolation() [1/2]

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

Definition at line 61 of file G4ParticleHPPartial.hh.

62  {
63  data[i].InitInterpolation(aDataFile);
64  }
G4ParticleHPVector * data
void InitInterpolation(std::istream &aDataFile)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ InitInterpolation() [2/2]

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

Definition at line 66 of file G4ParticleHPPartial.hh.

67  {
68  theManager.Init(aDataFile);
69  }
void Init(G4int aScheme, G4int aRange)
G4InterpolationManager theManager
Here is the call graph for this function:

◆ Sample()

G4double G4ParticleHPPartial::Sample ( G4double  x)

Definition at line 105 of file G4ParticleHPPartial.cc.

106  {
107  G4int i;
108  for (i=0; i<nData; i++)
109  {
110  if(x<X[i]) break;
111  }
112  G4ParticleHPVector theBuff;
113  if(i==0)
114  {
115  theBuff.SetInterpolationManager(data[0].GetInterpolationManager());
116  for(G4int ii=0;ii<GetNEntries(0);ii++)
117  {
118  theBuff.SetX(ii, GetX(0,ii));
119  theBuff.SetY(ii, GetY(0,ii));
120  }
121  }
122  //else if(i==nData-1) this line will be delete
123  else if ( i == nData )
124  {
125  for(i=0;i<GetNEntries(nData-1);i++)
126  {
127  theBuff.SetX(i, GetX(nData-1,i));
128  theBuff.SetY(i, GetY(nData-1,i));
129  theBuff.SetInterpolationManager(data[nData-1].GetInterpolationManager());
130  }
131  }
132  else
133  {
134  G4int low = i-1;
135  G4int high = low+1;
136  G4double x1,x2,y1,y2;
137  G4int i1=0, i2=0, ii=0;
138  x1 = X[low];
139  x2 = X[high];
140  while(i1<GetNEntries(low)||i2<GetNEntries(high)) // Loop checking, 11.05.2015, T. Koi
141  {
142  if( (GetX(low,i1)<GetX(high,i2) && i1<GetNEntries(low))
143  ||(i2==GetNEntries(high)) )
144  {
145  theBuff.SetX(ii, GetX(low,i1));
146  y1 = GetY(low,i1);
147  y2 = GetY(high, GetX(low,i1)); //prob at ident theta
148  theBuff.SetY(ii, theInt.Interpolate(theManager.GetScheme(high),
149  x, x1, x2, y1, y2)); //energy interpol
150  theBuff.SetScheme(ii, data[low].GetScheme(i1));
151  if(std::abs(GetX(low,i1)-GetX(high,i2))<0.001) i2++;
152  i1++;
153  ii++;
154  }
155  else
156  {
157  theBuff.SetX(ii, GetX(high,i2));
158  //*******************************************************************************
159  //Change by E.Mendoza and D.Cano (CIEMAT):
160  //y1 = GetY(high,i2);
161  //y2 = GetY(low, GetX(high,i2)); //prob at ident theta
162  y2 = GetY(high,i2);
163  y1 = GetY(low, GetX(high,i2)); //prob at ident theta
164  //*******************************************************************************
165  theBuff.SetY(ii, theInt.Interpolate(theManager.GetScheme(high),
166  x, x1, x2, y1, y2)); //energy interpol
167  theBuff.SetScheme(ii, data[high].GetScheme(i2));
168  if(std::abs(GetX(low,i1)-GetX(high,i2))<0.001) i1++;
169  i2++;
170  ii++;
171  }
172  }
173  }
174  //buff is full, now sample.
175  return theBuff.Sample();
176  }
Double_t y2[nxs]
Double_t y1[nxs]
Double_t x2[nxs]
G4ParticleHPVector * data
G4ParticleHPInterpolator theInt
void SetInterpolationManager(const G4InterpolationManager &aManager)
int G4int
Definition: G4Types.hh:78
G4double Interpolate(G4InterpolationScheme aScheme, G4double x, G4double x1, G4double x2, G4double y1, G4double y2) const
G4double GetX(G4int i)
void SetY(G4int i, G4double x)
Double_t x1[nxs]
G4InterpolationManager theManager
G4InterpolationScheme GetScheme(G4int index) const
double G4double
Definition: G4Types.hh:76
void SetX(G4int i, G4double e)
void SetScheme(G4int aPoint, const G4InterpolationScheme &aScheme)
G4double GetY(G4int i, G4int j)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetT()

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

Definition at line 110 of file G4ParticleHPPartial.hh.

Here is the caller graph for this function:

◆ SetX() [1/2]

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

Definition at line 109 of file G4ParticleHPPartial.hh.

Here is the caller graph for this function:

◆ SetX() [2/2]

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

Definition at line 111 of file G4ParticleHPPartial.hh.

111 {data[i].SetX(j,x);}
G4ParticleHPVector * data
void SetX(G4int i, G4double e)
Here is the call graph for this function:

◆ SetY()

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

Definition at line 112 of file G4ParticleHPPartial.hh.

112 {data[i].SetY(j,y);}
G4ParticleHPVector * data
Double_t y
void SetY(G4int i, G4double x)
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ data

G4ParticleHPVector* G4ParticleHPPartial::data
private

Definition at line 128 of file G4ParticleHPPartial.hh.

◆ nData

G4int G4ParticleHPPartial::nData
private

Definition at line 131 of file G4ParticleHPPartial.hh.

◆ T

G4double* G4ParticleHPPartial::T
private

Definition at line 127 of file G4ParticleHPPartial.hh.

◆ theInt

G4ParticleHPInterpolator G4ParticleHPPartial::theInt
private

Definition at line 133 of file G4ParticleHPPartial.hh.

◆ theManager

G4InterpolationManager G4ParticleHPPartial::theManager
private

Definition at line 132 of file G4ParticleHPPartial.hh.

◆ X

G4double* G4ParticleHPPartial::X
private

Definition at line 126 of file G4ParticleHPPartial.hh.


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