31 #ifndef G4NeutronHPVector_h
32 #define G4NeutronHPVector_h 1
73 for(i=0; i<nEntries; i++)
75 theData[i].
SetY(theData[i].
GetY()*factor);
79 theIntegral[i] *= factor;
94 if(y>maxValue) maxValue=
y;
110 if(x>maxValue) maxValue=
x;
116 if(x>maxValue) maxValue=
x;
125 return theData[i].
GetX();
133 for(i=0 ; i<nEntries; i++)
154 for(i=min ; i<nEntries; i++)
156 if(theData[i].
GetX()>e)
break;
171 if(e<theData[nEntries-1].
GetX())
174 if( (theData[high].
GetX()-theData[low].
GetX())/theData[high].
GetX() < 0.000001)
176 y = theData[low].
GetY();
181 theData[low].
GetX(), theData[high].
GetX(),
182 theData[low].
GetY(), theData[high].
GetY());
187 y=theData[nEntries-1].
GetY();
199 return theData[i].
GetY();
206 return theData[i].
GetY();
212 theManager.
Init(aDataFile);
218 for (
G4int i=0;i<total;i++)
226 theHash.
SetData(nEntries-1, x, y);
235 if(theData!=0)
delete [] theData;
239 theManager.
Init(aDataFile);
240 Init(aDataFile, total, ux, uy);
262 delete[] theIntegral;
270 G4int s_tmp = 0, n=0, m_tmp=0;
287 if ( !( xa == 0 ) && std::abs(std::abs(xp-xa)/xa)<0.001 ) p++;
324 result = theData[0].
GetX();
346 y1 = theData[i-1].
GetX();
347 x1 = theIntegral[i-1];
348 y2 = theData[i].
GetX();
350 if(std::abs((y2-y1)/y2)<0.0000001)
352 y1 = theData[i-2].
GetX();
353 x1 = theIntegral[i-2];
355 result = theLin.
Lin(rand, x1, x2, y1, y2);
370 if(theIntegral!=0)
return;
371 theIntegral =
new G4double[nEntries];
383 x1 = theData[i].
GetX();
384 x0 = theData[i-1].
GetX();
385 if (std::abs(x1-x0) > std::abs(x1*0.0000001) )
399 if(!_finite(integ)){integ=0;}
400 #elif defined __IBMCPP__
401 if(isinf(integ)||isnan(integ)){integ=0;}
403 if(std::isinf(integ)||std::isnan(integ)){integ=0;}
408 theIntegral[i] = sum;
413 theIntegral[i]/=total;
428 if(std::abs((theData[i].
GetX()-theData[i-1].
GetX())/theData[i].
GetX())>0.0000001)
437 sum+= 0.5*(y2+
y1)*(x2-x1);
443 sum+= (a-
b)*(x2-x1) + b*(x2*std::log(x2)-x1*std::log(x1));
448 G4double b = (std::log(y2)-std::log(y1))/(x2-x1);
449 sum += (std::exp(a)/
b)*(std::exp(b*x2)-std::exp(b*x1));
458 G4double b = (std::log(y2)-std::log(y1))/(std::log(x2)-std::log(x1));
459 sum += (std::exp(a)/(b+1))*(std::pow(x2,b+1)-std::pow(x1,b+1));
463 throw G4HadronicException(__FILE__, __LINE__,
"Unknown interpolation scheme in G4NeutronHPVector::Integrate");
474 return totalIntegral;
479 theManager = aManager;
507 for(
G4int i=1; i<nEntries; i++)
510 theData[i-1].
GetX(), theData[i].
GetX(),
511 theData[i-1].
GetY(), theData[i].
GetY());
513 theData[i-1].
GetX(), theData[i].
GetX(),
514 theData[i-1].
GetY(), theData[i].
GetY());
516 result = weighted / running;
570 std::vector<G4double> theBlocked;
571 std::vector<G4double> theBuffered;