55 result->
SetData(running++, x, y);
59 else if( left.
GetX(i)+right.
GetX(j) == 0
60 || std::abs((right.
GetX(j)-left.
GetX(i))/(left.
GetX(i)+right.
GetX(j))) > 0.001 )
64 result->
SetData(running++, x, y);
76 result->
SetData(running++, x, y);
93 the15percentBorderCash = -
DBL_MAX;
94 the50percentBorderCash = -
DBL_MAX;
108 the15percentBorderCash = -
DBL_MAX;
109 the50percentBorderCash = -
DBL_MAX;
118 delete [] theIntegral;
127 if(&right ==
this)
return *
this;
131 totalIntegral = right.totalIntegral;
132 if(right.theIntegral!=0) theIntegral =
new G4double[right.nEntries];
133 for(i=0; i<right.nEntries; i++)
136 if(right.theIntegral!=0) theIntegral[i] = right.theIntegral[i];
138 theManager = right.theManager;
141 Verbose = right.Verbose;
142 the15percentBorderCash = right.the15percentBorderCash;
143 the50percentBorderCash = right.the50percentBorderCash;
144 theHash = right.theHash;
151 if(nEntries == 0)
return 0;
162 for(i=min ; i<nEntries; i++)
165 if(theData[i].
GetX() >= e)
break;
180 if(e<theData[nEntries-1].
GetX())
184 if ( theData[high].
GetX() !=0
187 &&( std::abs( (theData[high].
GetX()-theData[low].
GetX())/theData[high].
GetX() ) < 0.000001 ) )
189 y = theData[low].
GetY();
194 theData[low].
GetX(), theData[high].
GetX(),
195 theData[low].
GetY(), theData[high].
GetY());
200 y=theData[nEntries-1].
GetY();
208 for(
G4int i=0; i<nEntries; i++)
218 void G4ParticleHPVector::Check(
G4int i)
220 if(i>nEntries)
throw G4HadronicException(__FILE__, __LINE__,
"Skipped some index numbers in G4ParticleHPVector");
223 nPoints =
static_cast<G4int>(1.2*nPoints);
225 for (
G4int j=0; j<nEntries; j++) buff[j] = theData[j];
229 if(i==nEntries) nEntries=i+1;
240 G4int s_tmp = 0,
n=0, m_tmp=0;
257 && std::abs(std::abs(xp-xa)/xa) < 0.0000001
262 active = passive; a=
p;
267 active = passive; a=
p;
276 anX = passive->
GetXsec(p)-deltaX;
303 G4int count = 0, current = 2, start = 1;
306 aBuff[0] = theData[0];
311 x1=aBuff[count].
GetX();
312 y1=aBuff[count].
GetY();
313 x2=theData[current].
GetX();
314 y2=theData[current].
GetY();
318 for (
G4int j=start; j<current; j++ ) {
320 if ( std::abs( y-theData[j].
GetY() ) > precision*y ) {
321 aBuff[++count] = theData[current-1];
327 for(
G4int j=start; j<current; j++)
329 x = theData[j].
GetX();
330 if(x1-x2 == 0) y = (y2+y1)/2.;
331 else y = theInt.
Lin(x, x1, x2, y1, y2);
332 if (std::abs(y-theData[j].
GetY())>precision*y)
334 aBuff[++count] = theData[current-1];
358 std::vector<G4double>::iterator i;
359 for(i=theBlocked.begin(); i!=theBlocked.end(); i++)
362 if(std::abs(aX-aBlock) < 0.1*
MeV)
383 result = theBuffered[0];
384 theBuffered.erase(theBuffered.begin());
389 result = theData[0].
GetX();
395 G4int icounter_max=1024;
399 if ( icounter > icounter_max ) {
400 G4cout <<
"Loop-counter exceeded the threshold value at " << __LINE__ <<
"th line of " << __FILE__ <<
"." <<
G4endl;
422 G4int jcounter_max=1024;
426 if ( jcounter > jcounter_max ) {
427 G4cout <<
"Loop-counter exceeded the threshold value at " << __LINE__ <<
"th line of " << __FILE__ <<
"." <<
G4endl;
434 if ( rand < theIntegral[i] )
440 if ( ibin < 0 )
G4cout <<
"TKDB 080807 " << rand <<
G4endl;
446 x1 = theData[ ibin ].
GetX();
452 x1 = theData[ ibin-1 ].
GetX();
455 x2 = theData[ ibin ].
GetX();
456 value = rand * ( x2 - x1 ) + x1;
474 while(IsBlocked(result));
481 if(the15percentBorderCash>-
DBL_MAX/2.)
return the15percentBorderCash;
485 result = theData[0].
GetX();
486 the15percentBorderCash =
result;
498 the15percentBorderCash =
result;
502 the15percentBorderCash =
result;
509 if(the50percentBorderCash>-
DBL_MAX/2.)
return the50percentBorderCash;
513 result = theData[0].
GetX();
514 the50percentBorderCash =
result;
537 y1 = theData[i-1].
GetX();
538 y2 = theData[i].
GetX();
539 result = theLin.
Lin(x, x1, x2, y1, y2);
541 the50percentBorderCash =
result;
545 the50percentBorderCash =
result;
G4double G4ParticleHPJENDLHEData::G4double result
G4double GetEnergy(G4int i) const
G4double Get15percentBorder()
G4int GetVectorLength() const
G4double Lin(G4double x, G4double x1, G4double x2, G4double y1, G4double y2)
std::vector< ExP01TrackerHit * > a
void SetData(G4int i, G4double x, G4double y)
BasicVector3D< float > operator+(const BasicVector3D< float > &v)
G4ParticleHPVector & operator=(const G4ParticleHPVector &right)
G4double GetXsec(G4int i)
void SetY(G4int i, G4double x)
void AppendScheme(G4int aPoint, const G4InterpolationScheme &aScheme)
G4GLOB_DLL std::ostream G4cout
const XML_Char int const XML_Char * value
G4InterpolationScheme GetScheme(G4int index) const
void Merge(G4ParticleHPVector *active, G4ParticleHPVector *passive)
G4double GetX(G4int i) const
void SetPoint(G4int i, const G4ParticleHPDataPoint &it)
G4double GetY(G4double x)
void IntegrateAndNormalise()
G4double Interpolate(G4InterpolationScheme aScheme, G4double x, G4double x1, G4double x2, G4double y1, G4double y2) const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
static constexpr double MeV
G4int GetMinIndex(G4double e) const
G4InterpolationScheme GetScheme(G4int anIndex)
const G4ParticleHPDataPoint & GetPoint(G4int i) const
void ThinOut(G4double precision)
G4double Get50percentBorder()