// RooCFunction1Binding is a templated implementation of class RooAbsReal that binds
// generic C(++) functions to a RooAbsReal argument thus allowing generic C++
// functions to be used as RooFit functions. Instances of function binding
// classes are fully functional RooFit function objects with one exception:
// if the bound function is _not_ a standard TMath or MathMore function the
// class cannot be persisted in a RooWorkspace without registering the function
// pointer first using RooCFunction1Binding<T1,T2>::register().
// END_HTML
#include "Riostream.h"
#include "RooFunctor1DBinding.h"
using namespace std ;
ClassImp(RooFunctor1DBinding)
ClassImp(RooFunctor1DPdfBinding)
;
RooFunctor1DBinding::RooFunctor1DBinding(const char *name, const char *title, const ROOT::Math::IBaseFunctionOneDim& ftor, RooAbsReal& x) :
RooAbsReal(name,title),
func(&ftor),
var("x","x",this,x)
{
}
RooFunctor1DBinding::RooFunctor1DBinding(const RooFunctor1DBinding& other, const char* name) :
RooAbsReal(other,name),
func(other.func),
var("x",this,other.var)
{
}
void RooFunctor1DBinding::printArgs(ostream& os) const {
os << "[ function=" << func << " " ;
for (Int_t i=0 ; i<numProxies() ; i++) {
RooAbsProxy* p = getProxy(i) ;
if (!TString(p->name()).BeginsWith("!")) {
p->print(os) ;
os << " " ;
}
}
os << "]" ;
}
Double_t RooFunctor1DBinding::evaluate() const {
return (*func)(var.arg().getVal()) ;
}
RooFunctor1DPdfBinding::RooFunctor1DPdfBinding(const char *name, const char *title, const ROOT::Math::IBaseFunctionOneDim& ftor, RooAbsReal& x) :
RooAbsPdf(name,title),
func(&ftor),
var("x","x",this,x)
{
}
RooFunctor1DPdfBinding::RooFunctor1DPdfBinding(const RooFunctor1DPdfBinding& other, const char* name) :
RooAbsPdf(other,name),
func(other.func),
var("x",this,other.var)
{
}
void RooFunctor1DPdfBinding::printArgs(ostream& os) const {
os << "[ function=" << func << " " ;
for (Int_t i=0 ; i<numProxies() ; i++) {
RooAbsProxy* p = getProxy(i) ;
if (!TString(p->name()).BeginsWith("!")) {
p->print(os) ;
os << " " ;
}
}
os << "]" ;
}
Double_t RooFunctor1DPdfBinding::evaluate() const {
return (*func)(var.arg().getVal()) ;
}
namespace RooFit {
RooAbsReal* bindFunction(const char* name, const ROOT::Math::IBaseFunctionOneDim& ftor, RooAbsReal& var) {
return new RooFunctor1DBinding(name,name,ftor,var) ;
}
RooAbsPdf* bindPdf(const char* name, const ROOT::Math::IBaseFunctionOneDim& ftor, RooAbsReal& var) {
return new RooFunctor1DPdfBinding(name,name,ftor,var) ;
}
}
RooFunctor1DBinding.cxx:1 RooFunctor1DBinding.cxx:2 RooFunctor1DBinding.cxx:3 RooFunctor1DBinding.cxx:4 RooFunctor1DBinding.cxx:5 RooFunctor1DBinding.cxx:6 RooFunctor1DBinding.cxx:7 RooFunctor1DBinding.cxx:8 RooFunctor1DBinding.cxx:9 RooFunctor1DBinding.cxx:10 RooFunctor1DBinding.cxx:11 RooFunctor1DBinding.cxx:12 RooFunctor1DBinding.cxx:13 RooFunctor1DBinding.cxx:14 RooFunctor1DBinding.cxx:15 RooFunctor1DBinding.cxx:16 RooFunctor1DBinding.cxx:17 RooFunctor1DBinding.cxx:18 RooFunctor1DBinding.cxx:19 RooFunctor1DBinding.cxx:20 RooFunctor1DBinding.cxx:21 RooFunctor1DBinding.cxx:22 RooFunctor1DBinding.cxx:23 RooFunctor1DBinding.cxx:24 RooFunctor1DBinding.cxx:25 RooFunctor1DBinding.cxx:26 RooFunctor1DBinding.cxx:27 RooFunctor1DBinding.cxx:28 RooFunctor1DBinding.cxx:29 RooFunctor1DBinding.cxx:30 RooFunctor1DBinding.cxx:31 RooFunctor1DBinding.cxx:32 RooFunctor1DBinding.cxx:33 RooFunctor1DBinding.cxx:34 RooFunctor1DBinding.cxx:35 RooFunctor1DBinding.cxx:36 RooFunctor1DBinding.cxx:37 RooFunctor1DBinding.cxx:38 RooFunctor1DBinding.cxx:39 RooFunctor1DBinding.cxx:40 RooFunctor1DBinding.cxx:41 RooFunctor1DBinding.cxx:42 RooFunctor1DBinding.cxx:43 RooFunctor1DBinding.cxx:44 RooFunctor1DBinding.cxx:45 RooFunctor1DBinding.cxx:46 RooFunctor1DBinding.cxx:47 RooFunctor1DBinding.cxx:48 RooFunctor1DBinding.cxx:49 RooFunctor1DBinding.cxx:50 RooFunctor1DBinding.cxx:51 RooFunctor1DBinding.cxx:52 RooFunctor1DBinding.cxx:53 RooFunctor1DBinding.cxx:54 RooFunctor1DBinding.cxx:55 RooFunctor1DBinding.cxx:56 RooFunctor1DBinding.cxx:57 RooFunctor1DBinding.cxx:58 RooFunctor1DBinding.cxx:59 RooFunctor1DBinding.cxx:60 RooFunctor1DBinding.cxx:61 RooFunctor1DBinding.cxx:62 RooFunctor1DBinding.cxx:63 RooFunctor1DBinding.cxx:64 RooFunctor1DBinding.cxx:65 RooFunctor1DBinding.cxx:66 RooFunctor1DBinding.cxx:67 RooFunctor1DBinding.cxx:68 RooFunctor1DBinding.cxx:69 RooFunctor1DBinding.cxx:70 RooFunctor1DBinding.cxx:71 RooFunctor1DBinding.cxx:72 RooFunctor1DBinding.cxx:73 RooFunctor1DBinding.cxx:74 RooFunctor1DBinding.cxx:75 RooFunctor1DBinding.cxx:76 RooFunctor1DBinding.cxx:77 RooFunctor1DBinding.cxx:78 RooFunctor1DBinding.cxx:79 RooFunctor1DBinding.cxx:80 RooFunctor1DBinding.cxx:81 RooFunctor1DBinding.cxx:82 RooFunctor1DBinding.cxx:83 RooFunctor1DBinding.cxx:84 RooFunctor1DBinding.cxx:85 RooFunctor1DBinding.cxx:86 RooFunctor1DBinding.cxx:87 RooFunctor1DBinding.cxx:88 RooFunctor1DBinding.cxx:89 RooFunctor1DBinding.cxx:90 RooFunctor1DBinding.cxx:91 RooFunctor1DBinding.cxx:92 RooFunctor1DBinding.cxx:93 RooFunctor1DBinding.cxx:94 RooFunctor1DBinding.cxx:95 RooFunctor1DBinding.cxx:96 RooFunctor1DBinding.cxx:97 RooFunctor1DBinding.cxx:98 RooFunctor1DBinding.cxx:99 RooFunctor1DBinding.cxx:100 RooFunctor1DBinding.cxx:101 RooFunctor1DBinding.cxx:102 RooFunctor1DBinding.cxx:103 RooFunctor1DBinding.cxx:104 RooFunctor1DBinding.cxx:105 RooFunctor1DBinding.cxx:106 RooFunctor1DBinding.cxx:107 RooFunctor1DBinding.cxx:108 RooFunctor1DBinding.cxx:109 RooFunctor1DBinding.cxx:110 RooFunctor1DBinding.cxx:111 RooFunctor1DBinding.cxx:112 RooFunctor1DBinding.cxx:113 RooFunctor1DBinding.cxx:114 RooFunctor1DBinding.cxx:115 RooFunctor1DBinding.cxx:116 RooFunctor1DBinding.cxx:117 RooFunctor1DBinding.cxx:118 RooFunctor1DBinding.cxx:119 RooFunctor1DBinding.cxx:120 RooFunctor1DBinding.cxx:121 RooFunctor1DBinding.cxx:122 RooFunctor1DBinding.cxx:123 RooFunctor1DBinding.cxx:124 RooFunctor1DBinding.cxx:125 RooFunctor1DBinding.cxx:126