Mantid
Loading...
Searching...
No Matches
CubicSpline.h
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2007 ISIS Rutherford Appleton Laboratory UKRI,
4// NScD Oak Ridge National Laboratory, European Spallation Source,
5// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
6// SPDX - License - Identifier: GPL - 3.0 +
7#pragma once
8
9//----------------------------------------------------------------------
10// Includes
11//----------------------------------------------------------------------
14
15#include <valarray>
16
17namespace Mantid {
18namespace CurveFitting {
19namespace Functions {
29class MANTID_CURVEFITTING_DLL CubicSpline : public BackgroundFunction {
30
31public:
34
36 std::string name() const override { return "CubicSpline"; }
37 void function1D(double *out, const double *xValues, const size_t nData) const override;
38 void derivative1D(double *out, const double *xValues, size_t nData, const size_t order) const override;
39 void setParameter(size_t i, const double &value, bool explicitlySet = true) override;
40 using ParamFunction::setParameter;
41
43 void setAttribute(const std::string &attName, const Attribute &) override;
44
46 void setXAttribute(const size_t index, double x);
47
48private:
50 const int m_min_points;
51
54
57
59 mutable bool m_recalculateSpline;
60
62 void reallocGSLObjects(const int n);
63
65 void setupInput(int const n) const;
66
68 void calculateSpline(double *out, const double *xValues, const size_t nData) const;
69
71 void calculateDerivative(double *out, const double *xValues, const size_t nData, const size_t order) const;
72
74 void checkGSLError(const int status, const int errorType) const;
75
77 bool checkXInRange(double x) const;
78
80 double splineEval(const double x) const;
81};
82
83using CubicSpline_sptr = std::shared_ptr<CubicSpline>;
84using CubicSpline_const_sptr = const std::shared_ptr<CubicSpline>;
85
86} // namespace Functions
87} // namespace CurveFitting
88} // namespace Mantid
double value
The value of the point.
Definition FitMW.cpp:51
std::map< DeltaEMode::Type, std::string > index
Attribute is a non-fitting parameter.
Definition IFunction.h:285
A wrapper around GSL functions implementing cubic spline interpolation.
Definition CubicSpline.h:29
bool m_recalculateSpline
Flag for checking if the spline needs recalculating.
Definition CubicSpline.h:59
std::string name() const override
overwrite IFunction base class methods
Definition CubicSpline.h:36
Mantid::Kernel::spline::accel_uptr m_acc
GSL interpolation accelerator object.
Definition CubicSpline.h:53
const int m_min_points
Minimum number of data points in spline.
Definition CubicSpline.h:50
Mantid::Kernel::spline::spline_uptr m_spline
GSL data structure used to calculate spline.
Definition CubicSpline.h:56
const std::shared_ptr< CubicSpline > CubicSpline_const_sptr
Definition CubicSpline.h:84
std::shared_ptr< CubicSpline > CubicSpline_sptr
Definition CubicSpline.h:83
std::unique_ptr< gsl_interp_accel, GSLFree > accel_uptr
Definition GSL_Helpers.h:49
std::unique_ptr< gsl_spline, GSLFree > spline_uptr
Definition GSL_Helpers.h:50
Helper class which provides the Collimation Length for SANS instruments.