#ifndef __MAK_INTERPOLATE_HPP #define __MAK_INTERPOLATE_HPP #include "config.hpp" #include #include #include #include #include namespace CosmoTool { class Interpolate { public: Interpolate() : spline(0), accel_interp(0) { } Interpolate(double *xs, double *values, uint32_t N, bool autofree = false, bool logx = false, bool logy = false); ~Interpolate(); double compute(double x) throw (InvalidRangeException); const Interpolate& operator=(const Interpolate& a); uint32_t getNumPoints() const; void fillWithXY(double *x, double *y) const; double getMaxX() const; protected: gsl_interp_accel *accel_interp; gsl_spline *spline; bool autoFree; bool logx, logy; }; typedef std::vector< std::pair > InterpolatePairs; Interpolate buildInterpolateFromFile(const char *fname) throw (NoSuchFileException); Interpolate buildInterpolateFromColumns(const char *fname, uint32_t col1, uint32_t col2, bool logx = false, bool logy = false) throw (NoSuchFileException,InvalidRangeException); Interpolate buildFromVector(const InterpolatePairs& v); }; #endif