21#ifndef EVTCUBICSPLINE_HH
22#define EVTCUBICSPLINE_HH
51 static void setParams(
const vector<double> x,
const vector<double> ym,
52 const vector<double> yp );
53 static void setParams(
const int n,
const double* x,
const double* ym,
const double* yp );
76 inline double theta() {
return _theta; }
83 inline static void fprime(
const vector<double>& x,
const vector<ControlPoint>& y,
85 double s1 = x[
n - 1] - x[
n - 2], s2 = x[
n - 1] - x[
n - 3], s3 = x[
n - 1] - x[
n - 4],
86 s12 = s1 - s2, s13 = s1 - s3, s23 = s2 - s3;
87 yp2.
real = -( s1 * s2 / ( s13 * s23 * s3 ) ) * y[
n - 4].
real +
88 ( s1 * s3 / ( s12 * s2 * s23 ) ) * y[
n - 3].real -
89 ( s2 * s3 / ( s1 * s12 * s13 ) ) * y[
n - 2].
real +
90 ( 1. / s1 + 1. / s2 + 1. / s3 ) * y[
n - 1].real;
91 yp2.
imag = -( s1 * s2 / ( s13 * s23 * s3 ) ) * y[
n - 4].
imag +
92 ( s1 * s3 / ( s12 * s2 * s23 ) ) * y[
n - 3].imag -
93 ( s2 * s3 / ( s1 * s12 * s13 ) ) * y[
n - 2].
imag +
94 ( 1. / s1 + 1. / s2 + 1. / s3 ) * y[
n - 1].imag;
96 inline static void fprime(
const vector<double>& x,
const vector<ControlPoint>& y,
98 double s1 = x[0] - x[1], s2 = x[0] - x[2], s3 = x[0] - x[3], s12 = s1 - s2, s13 = s1 - s3,
101 yp2.
real = -( s1 * s2 / ( s13 * s23 * s3 ) ) * y[3].
real +
102 ( s1 * s3 / ( s12 * s2 * s23 ) ) * y[2].real -
103 ( s2 * s3 / ( s1 * s12 * s13 ) ) * y[1].
real +
104 ( 1. / s1 + 1. / s2 + 1. / s3 ) * y[0].real;
105 yp2.
imag = -( s1 * s2 / ( s13 * s23 * s3 ) ) * y[3].
imag +
106 ( s1 * s3 / ( s12 * s2 * s23 ) ) * y[2].imag -
107 ( s2 * s3 / ( s1 * s12 * s13 ) ) * y[1].
imag +
108 ( 1. / s1 + 1. / s2 + 1. / s3 ) * y[0].imag;
110 static int find_bin(
double mass1,
const vector<double>& x,
const int n ) {
114 if ( mass1 < x[mhi] )
break;
117 return mhi == 0 ? 1 : ( mhi ==
n ?
n - 1 : mhi );
119 static bool Complex_Derivative(
const vector<double>& x,
const vector<ControlPoint>& y,
120 const int n, vector<ControlPoint>& y2 );
124 double _ampl, _theta;
double imag(const EvtComplex &c)
static vector< ControlPoint > _yvalues
static vector< double > _mHHLimits
static int find_bin(double mass1, const vector< double > &x, const int n)
EvtCubicSpline(const EvtVector4R &p4_p, const EvtVector4R &p4_d1, const EvtVector4R &p4_d2)
virtual ~EvtCubicSpline()
EvtCubicSpline & operator=(const EvtCubicSpline &)
const EvtVector4R & p4_p()
static vector< ControlPoint > _y2values
static void setParams(const vector< double > x, const vector< double > ym, const vector< double > yp)
const EvtVector4R & p4_d2()
static bool Complex_Derivative(const vector< double > &x, const vector< ControlPoint > &y, const int n, vector< ControlPoint > &y2)
static void fprime(const vector< double > &x, const vector< ControlPoint > &y, const int n, ControlPoint &yp2)
const EvtVector4R & p4_d1()
static void fprime(const vector< double > &x, const vector< ControlPoint > &y, ControlPoint &yp2)
ControlPoint(double r=0, double i=0.)