Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // INCL++ intra-nuclear cascade model 27 // Alain Boudard, CEA-Saclay, France 28 // Joseph Cugnon, University of Liege, Belgium 29 // Jean-Christophe David, CEA-Saclay, France 30 // Pekka Kaitaniemi, CEA-Saclay, France, and H 31 // Sylvie Leray, CEA-Saclay, France 32 // Davide Mancusi, CEA-Saclay, France 33 // 34 #define INCLXX_IN_GEANT4_MODE 1 35 36 #include "globals.hh" 37 38 /** \file G4INCLInterpolationTable.hh 39 * \brief Simple interpolation table 40 * 41 * \date 30 January 2014 42 * \author Davide Mancusi 43 */ 44 45 #ifndef G4INCLINTERPOLATIONTABLE_HH_ 46 #define G4INCLINTERPOLATIONTABLE_HH_ 47 48 #include "G4INCLIFunction1D.hh" 49 #include <algorithm> 50 #include <functional> 51 #include <sstream> 52 53 namespace G4INCL { 54 55 /// \brief Interpolation node 56 class InterpolationNode { 57 public: 58 InterpolationNode(const G4double x0, con 59 x(x0), 60 y(y0), 61 yPrime(yPrime0) 62 {} 63 64 virtual ~InterpolationNode() {} 65 66 G4bool operator<(const InterpolationNode 67 return (x < rhs.x); 68 } 69 70 G4bool operator<=(const InterpolationNod 71 return (x <= rhs.x); 72 } 73 74 G4bool operator>(const InterpolationNode 75 return (x > rhs.x); 76 } 77 78 G4bool operator>=(const InterpolationNod 79 return (x >= rhs.x); 80 } 81 82 G4double getX() const { return x; } 83 G4double getY() const { return y; } 84 G4double getYPrime() const { return yPri 85 86 void setX(const G4double x0) { x=x0; } 87 void setY(const G4double y0) { y=y0; } 88 void setYPrime(const G4double yPrime0) { 89 90 std::string print() const { 91 std::stringstream message; 92 message << "x, y, yPrime: " << x << '\ 93 return message.str(); 94 } 95 96 protected: 97 /// \brief abscissa 98 G4double x; 99 /// \brief function value 100 G4double y; 101 /// \brief function derivative 102 G4double yPrime; 103 }; 104 105 /// \brief Class for interpolating the of a 106 class InterpolationTable : public IFunction1 107 public: 108 InterpolationTable(std::vector<G4double> 109 virtual ~InterpolationTable() {} 110 111 std::size_t getNumberOfNodes() const { r 112 113 std::vector<G4double> getNodeAbscissae() 114 115 std::vector<G4double> getNodeValues() co 116 117 G4double operator()(const G4double x) co 118 119 std::string print() const; 120 121 protected: 122 InterpolationTable(); 123 124 /// \brief Initialise the values of the 125 void initDerivatives(); 126 127 /// \brief Interpolating nodes 128 std::vector<InterpolationNode> nodes; 129 130 }; 131 132 } 133 134 #endif // G4INCLINTERPOLATIONTABLE_HH_ 135