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)
std::vector< ExP01TrackerHit * > a
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)