34 #ifndef G4ParticleHPVector_h
35 #define G4ParticleHPVector_h 1
79 for(i=0; i<nEntries; i++)
81 theData[i].
SetY(theData[i].
GetY()*factor);
85 theIntegral[i] *= factor;
100 if(y>maxValue) maxValue=y;
116 if(x>maxValue) maxValue=x;
122 if(x>maxValue) maxValue=x;
131 return theData[i].
GetX();
139 for(i=0 ; i<nEntries; i++)
160 for(i=min ; i<nEntries; i++)
162 if(theData[i].
GetX()>e)
break;
177 if(e<theData[nEntries-1].
GetX())
180 if( (theData[high].
GetX()-theData[low].
GetX())/theData[high].
GetX() < 0.000001)
182 y = theData[low].
GetY();
187 theData[low].
GetX(), theData[high].
GetX(),
188 theData[low].
GetY(), theData[high].
GetY());
193 y=theData[nEntries-1].
GetY();
205 return theData[i].
GetY();
212 return theData[i].
GetY();
218 theManager.
Init(aDataFile);
232 theHash.
SetData(nEntries-1, x, y);
241 if(theData!=0)
delete [] theData;
245 theManager.
Init(aDataFile);
246 Init(aDataFile, total, ux, uy);
268 delete[] theIntegral;
276 G4int s_tmp = 0, n=0, m_tmp=0;
293 if ( !( xa == 0 ) && std::abs(std::abs(xp-xa)/xa)<0.001 ) p++;
330 result = theData[0].
GetX();
352 y1 = theData[i-1].
GetX();
353 x1 = theIntegral[i-1];
354 y2 = theData[i].
GetX();
356 if(std::abs((y2-y1)/y2)<0.0000001)
358 y1 = theData[i-2].
GetX();
359 x1 = theIntegral[i-2];
361 result = theLin.
Lin(rand, x1, x2, y1, y2);
376 if(theIntegral!=0)
return;
377 theIntegral =
new G4double[nEntries];
389 x1 = theData[i].
GetX();
390 x0 = theData[i-1].
GetX();
391 if (std::abs(x1-x0) > std::abs(x1*0.0000001) )
405 if(!_finite(integ)){integ=0;}
406 #elif defined __IBMCPP__
407 if(isinf(integ)||isnan(integ)){integ=0;}
409 if(std::isinf(integ)||std::isnan(integ)){integ=0;}
414 theIntegral[i] = sum;
419 theIntegral[i]/=
total;
434 if(std::abs((theData[i].
GetX()-theData[i-1].
GetX())/theData[i].
GetX())>0.0000001)
443 sum+= 0.5*(y2+y1)*(x2-x1);
449 sum+= (a-b)*(x2-x1) + b*(x2*
G4Log(x2)-x1*
G4Log(x1));
469 throw G4HadronicException(__FILE__, __LINE__,
"Unknown interpolation scheme in G4ParticleHPVector::Integrate");
480 return totalIntegral;
485 theManager = aManager;
513 for(
G4int i=1; i<nEntries; i++)
516 theData[i-1].
GetX(), theData[i].
GetX(),
517 theData[i-1].
GetY(), theData[i].
GetY());
519 theData[i-1].
GetX(), theData[i].
GetX(),
520 theData[i-1].
GetY(), theData[i].
GetY());
522 result = weighted / running;
576 std::vector<G4double> theBlocked;
577 std::vector<G4double> theBuffered;
G4double G4ParticleHPJENDLHEData::G4double result
void SetData(G4double e, G4double x)
G4double GetEnergy(G4int i) const
G4double Get15percentBorder()
static G4Pow * GetInstance()
G4double powA(G4double A, G4double y) const
G4int GetVectorLength() const
std::vector< G4double > GetBlocked()
G4double Lin(G4double x, G4double x1, G4double x2, G4double y1, G4double y2)
void SetEnergy(G4int i, G4double e)
G4double GetXsec(G4double e, G4int min)
void Init(G4int aScheme, G4int aRange)
void SetData(G4int i, G4double x, G4double y)
void InitInterpolation(std::istream &aDataFile)
void SetInterpolationManager(const G4InterpolationManager &aManager)
G4ParticleHPVector & operator=(const G4ParticleHPVector &right)
G4double GetXsec(G4int i)
void SetData(G4int index, G4double x, G4double y)
void SetY(G4int i, G4double x)
void AppendScheme(G4int aPoint, const G4InterpolationScheme &aScheme)
void Init(std::istream &aDataFile, G4int total, G4double ux=1., G4double uy=1.)
G4InterpolationScheme GetScheme(G4int index) const
void Times(G4double factor)
G4double GetY(G4int i) const
void Merge(G4ParticleHPVector *active, G4ParticleHPVector *passive)
friend G4ParticleHPVector & operator+(G4ParticleHPVector &left, G4ParticleHPVector &right)
G4double GetX(G4int i) const
void SetPoint(G4int i, const G4ParticleHPDataPoint &it)
G4double GetY(G4double x)
void IntegrateAndNormalise()
G4double GetWeightedBinIntegral(const G4InterpolationScheme &aScheme, const G4double x1, const G4double x2, const G4double y1, const G4double y2)
G4double Interpolate(G4InterpolationScheme aScheme, G4double x, G4double x1, G4double x2, G4double y1, G4double y2) const
void Init(std::istream &aDataFile, G4double ux=1., G4double uy=1.)
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
std::vector< G4double > GetBuffered()
G4double total(Particle const *const p1, Particle const *const p2)
void SetVerbose(G4int ff)
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
const G4InterpolationManager & GetInterpolationManager() const
void SetXsec(G4int i, G4double x)
G4double GetBinIntegral(const G4InterpolationScheme &aScheme, const G4double x1, const G4double x2, const G4double y1, const G4double y2)
G4InterpolationScheme GetScheme(G4int anIndex)
const G4ParticleHPDataPoint & GetPoint(G4int i) const
void SetX(G4int i, G4double e)
void SetScheme(G4int aPoint, const G4InterpolationScheme &aScheme)
void SetLabel(G4double aLabel)
void ThinOut(G4double precision)
G4double Get50percentBorder()
void SetInterpolationManager(G4InterpolationManager &aMan)