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();
119 std::vector<InterpolationNode>::const_iterator iter =
120 std::lower_bound(nodes.begin(), nodes.end(),
x);
122 if(iter==nodes.begin())
123 return nodes.front().getY();
125 if(iter==nodes.end())
126 return nodes.back().getY();
128 std::vector<InterpolationNode>::const_iterator previousIter = iter - 1;
129 const G4double dx = x - previousIter->getX();
130 return previousIter->getY() + previousIter->getYPrime()*dx;
135 for(std::vector<InterpolationNode>::const_iterator
n=nodes.begin();
n!=nodes.end(); ++
n)
136 message +=
n->print();