Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooTFnBinding.cxx
Go to the documentation of this file.
1/*
2 * Project: RooFit
3 *
4 * Copyright (c) 2023, CERN
5 *
6 * Redistribution and use in source and binary forms,
7 * with or without modification, are permitted according to the terms
8 * listed in LICENSE (http://roofit.sourceforge.net/license.txt)
9 */
10
11/** \class RooTFnBinding
12 \ingroup Roofit
13 Use TF1, TF2, TF3 functions as RooFit objects. To create a function binding,
14 either directly invoke RooTFnBinding::RooTFnBinding() or use the convenience
15 functions RooFit::bindFunction().
16**/
17
18#include "RooTFnBinding.h"
19#include "TF3.h"
20
21
22////////////////////////////////////////////////////////////////////////////////
23
24RooTFnBinding::RooTFnBinding(const char *name, const char *title, TF1* func, const RooArgList& list) :
25 RooAbsReal(name,title),
26 _olist("obs","obs",this),
27 _plist("params","params",this),
28 _func(func)
29{
30 _olist.add(list) ;
31}
32
33////////////////////////////////////////////////////////////////////////////////
34
35RooTFnBinding::RooTFnBinding(const char *name, const char *title, TF1* func, const RooArgList& obsList, const RooArgList& paramList) :
36 RooTFnBinding{name, title, func, obsList}
37{
38 _plist.add(paramList) ;
39}
40
41////////////////////////////////////////////////////////////////////////////////
42
45 _olist(this,other._olist),
46 _plist(this,other._plist),
47 _func(other._func)
48{
49}
50
51////////////////////////////////////////////////////////////////////////////////
52
54{
55 double x = _olist.at(0) ? (static_cast<RooAbsReal*>(_olist.at(0)))->getVal() : 0 ;
56 double y = _olist.at(1) ? (static_cast<RooAbsReal*>(_olist.at(1)))->getVal() : 0 ;
57 double z = _olist.at(2) ? (static_cast<RooAbsReal*>(_olist.at(2)))->getVal() : 0 ;
58 for (Int_t i=0 ; i<_func->GetNpar() ; i++) {
59 _func->SetParameter(i,_plist.at(i)?(static_cast<RooAbsReal*>(_plist.at(i)))->getVal() : 0) ;
60 }
61 return _func->Eval(x,y,z) ;
62}
63
64////////////////////////////////////////////////////////////////////////////////
65
66void RooTFnBinding::printArgs(std::ostream& os) const
67{
68 // Print object arguments and name/address of function pointer
69 os << "[ TFn={" << _func->GetName() << "=" << _func->GetTitle() << "} " ;
70 for (Int_t i=0 ; i<numProxies() ; i++) {
71 RooAbsProxy* p = getProxy(i) ;
72 if (!TString(p->name()).BeginsWith("!")) {
73 p->print(os) ;
74 os << " " ;
75 }
76 }
77 os << "]" ;
78}
79
80////////////////////////////////////////////////////////////////////////////////
81
82namespace RooFit {
83 /// Bind a TFx function to RooFit variables. Also see RooTFnBinding.
85 return new RooTFnBinding(func->GetName(),func->GetTitle(),func,x) ;
86 }
87 /// Bind a TFx function to RooFit variables. Also see RooTFnBinding.
89 return new RooTFnBinding(func->GetName(),func->GetTitle(),func,RooArgList(x,y)) ;
90 }
91 /// Bind a TFx function to RooFit variables. Also see RooTFnBinding.
93 return new RooTFnBinding(func->GetName(),func->GetTitle(),func,RooArgList(x,y,z)) ;
94 }
95 /// Bind a TFx function to RooFit variables. Also see RooTFnBinding.
97 return new RooTFnBinding(func->GetName(),func->GetTitle(),func,x,params) ;
98 }
99 /// Bind a TFx function to RooFit variables. Also see RooTFnBinding.
101 return new RooTFnBinding(func->GetName(),func->GetTitle(),func,RooArgList(x,y),params) ;
102 }
103 /// Bind a TFx function to RooFit variables. Also see RooTFnBinding.
105 return new RooTFnBinding(func->GetName(),func->GetTitle(),func,RooArgList(x,y,z),params) ;
106 }
107
108}
winID h TVirtualViewer3D TVirtualGLPainter p
char name[80]
Definition TGX11.cxx:142
Int_t numProxies() const
Return the number of registered proxies.
RooAbsProxy * getProxy(Int_t index) const
Return the nth proxy from the proxy list.
Abstract interface for proxy classes.
Definition RooAbsProxy.h:37
Abstract base class for objects that represent a real value and implements functionality common to al...
Definition RooAbsReal.h:63
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition RooArgList.h:22
RooAbsArg * at(Int_t idx) const
Return object at given index, or nullptr if index is out of range.
Definition RooArgList.h:110
bool add(const RooAbsArg &var, bool valueServer, bool shapeServer, bool silent)
Overloaded RooCollection_t::add() method insert object into set and registers object as server to own...
Use TF1, TF2, TF3 functions as RooFit objects.
double evaluate() const override
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
RooListProxy _plist
RooTFnBinding()=default
void printArgs(std::ostream &os) const override
Print object arguments, ie its proxies.
RooListProxy _olist
1-Dim function class
Definition TF1.h:182
virtual Int_t GetNpar() const
Definition TF1.h:446
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
Evaluate this function.
Definition TF1.cxx:1447
virtual void SetParameter(Int_t param, Double_t value)
Definition TF1.h:608
A 2-Dim function with parameters.
Definition TF2.h:29
TF3 defines a 3D Function with Parameters.
Definition TF3.h:28
const char * GetName() const override
Returns name of object.
Definition TNamed.h:49
const char * GetTitle() const override
Returns title of object.
Definition TNamed.h:50
Basic string class.
Definition TString.h:137
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
Definition TString.h:633
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
Definition CodegenImpl.h:73
RooAbsReal * bindFunction(const char *name, CFUNCD1D func, RooAbsReal &x)