CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
RooSpline1D.cc
Go to the documentation of this file.
1 #include "../interface/RooSpline1D.h"
2 
3 #include <stdexcept>
4 
5 RooSpline1D::RooSpline1D(const char *name, const char *title, RooAbsReal &xvar, unsigned int npoints, const double *xvals, const double *yvals, const char *algo) :
6  RooAbsReal(name,title),
7  xvar_("xvar","Variable", this, xvar),
8  x_(npoints), y_(npoints), type_(algo),
9  interp_(0)
10 {
11  for (unsigned int i = 0; i < npoints; ++i) {
12  x_[i] = xvals[i];
13  y_[i] = yvals[i];
14  }
15 }
16 
17 RooSpline1D::RooSpline1D(const char *name, const char *title, RooAbsReal &xvar, unsigned int npoints, const float *xvals, const float *yvals, const char *algo) :
18  RooAbsReal(name,title),
19  xvar_("xvar","Variable", this, xvar),
20  x_(npoints), y_(npoints), type_(algo),
21  interp_(0)
22 {
23  for (unsigned int i = 0; i < npoints; ++i) {
24  x_[i] = xvals[i];
25  y_[i] = yvals[i];
26  }
27 }
28 
29 
31 {
32  delete interp_;
33 }
34 
35 
36 TObject *RooSpline1D::clone(const char *newname) const
37 {
38  return new RooSpline1D(newname, this->GetTitle(), const_cast<RooAbsReal &>(xvar_.arg()), x_.size(), &x_[0], &y_[0], type_.c_str());
39 }
40 
41 void RooSpline1D::init() const {
42  delete interp_;
43  if (type_ == "CSPLINE") interp_ = new ROOT::Math::Interpolator(x_, y_, ROOT::Math::Interpolation::kCSPLINE);
44  else if (type_ == "LINEAR") interp_ = new ROOT::Math::Interpolator(x_, y_, ROOT::Math::Interpolation::kLINEAR);
45  else if (type_ == "POLYNOMIAL") interp_ = new ROOT::Math::Interpolator(x_, y_, ROOT::Math::Interpolation::kPOLYNOMIAL);
46  else if (type_ == "CSPLINE_PERIODIC") interp_ = new ROOT::Math::Interpolator(x_, y_, ROOT::Math::Interpolation::kCSPLINE_PERIODIC);
47  else if (type_ == "AKIMA") interp_ = new ROOT::Math::Interpolator(x_, y_, ROOT::Math::Interpolation::kAKIMA);
48  else if (type_ == "AKIMA_PERIODIC") interp_ = new ROOT::Math::Interpolator(x_, y_, ROOT::Math::Interpolation::kAKIMA_PERIODIC);
49  else throw std::invalid_argument("Unknown interpolation type '"+type_+"'");
50 }
51 
52 Double_t RooSpline1D::evaluate() const {
53  if (interp_ == 0) init();
54  return interp_->Eval(xvar_);
55 }
56 
57 
58 ClassImp(RooSpline1D)
int i
Definition: DBlmapReader.cc:9
Double_t evaluate() const
Definition: RooSpline1D.cc:52
RooRealProxy xvar_
Definition: RooSpline1D.h:32
TObject * clone(const char *newname) const
Definition: RooSpline1D.cc:36
std::vector< double > y_
Definition: RooSpline1D.h:33
std::string type_
Definition: RooSpline1D.h:34
ROOT::Math::Interpolator * interp_
Definition: RooSpline1D.h:36
std::vector< double > x_
Definition: RooSpline1D.h:33
void init() const
not to be serialized
Definition: RooSpline1D.cc:41
LimitAlgo * algo
Definition: Combine.cc:60