33 #define INCLXX_IN_GEANT4_MODE 1
60 nodes.push_back(firstNode);
61 G4int skippedNodes = 0;
62 for(
unsigned i = 1; i < nNodes; i++) {
72 nodes.push_back(node);
89 for(
unsigned i = 0; i < x.size(); ++i)
96 void InverseInterpolationTable::initDerivatives() {
97 for(
unsigned i = 0; i < nodes.size()-1; i++) {
98 if((nodes.at(i+1).getX() - nodes.at(i).getX()) == 0.0)
99 nodes[i].setYPrime(0.0);
101 nodes[i].setYPrime((nodes.at(i+1).getY() - nodes.at(i).getY())/(nodes.at(i+1).getX() - nodes.at(i).getX()));
103 nodes.back().setYPrime(nodes.at(nodes.size()-2).getYPrime());
106 void InverseInterpolationTable::setFunctionDomain() {
108 if(nodes.front()>nodes.back()) {
109 xMin = nodes.back().getX();
110 xMax = nodes.front().getX();
112 xMin = nodes.front().getX();
113 xMax = nodes.back().getX();
120 std::vector<InterpolationNode>::const_iterator iter =
121 std::lower_bound(nodes.begin(), nodes.end(), xNode);
123 if(iter==nodes.begin())
124 return nodes.front().getY();
126 if(iter==nodes.end())
127 return nodes.back().getY();
129 std::vector<InterpolationNode>::const_iterator previousIter = iter - 1;
130 const G4double dx = x - previousIter->getX();
131 return previousIter->getY() + previousIter->getYPrime()*dx;
136 for(std::vector<InterpolationNode>::const_iterator
n=nodes.begin(), e=nodes.end();
n!=e; ++
n)
137 message +=
n->print();
Simple interpolation table for the inverse of a IFunction1D functor.
InverseInterpolationTable(IFunction1D const &f, const unsigned int nNodes=30)
G4double operator()(const G4double x) const
Compute the value of the function.
G4double xMin
Minimum value of the independent variable.
std::string print() const
G4double xMax
Maximum value of the independent variable.
const XML_Char int const XML_Char * value
virtual G4double getXMinimum() const
Return the minimum allowed value of the independent variable.
virtual G4double getXMaximum() const
Return the maximum allowed value of the independent variable.