13#ifndef ROOCFUNCTION4BINDING
14#define ROOCFUNCTION4BINDING
44template<
class VO,
class VI1,
class VI2,
class VI3,
class VI4>
49 void add(
const char*
name, VO (*ptr)(VI1,VI2,VI3,VI4),
const char* arg1name=
"x",
const char* arg2name=
"y",
50 const char* arg3name=
"z",
const char* arg4name=
"w") {
89 std::map<std::string,VO (*)(VI1,VI2,VI3,VI4)>
_ptrmap ;
90 std::map<VO (*)(VI1,VI2,VI3,VI4),std::string>
_namemap ;
91 std::map<VO (*)(VI1,VI2,VI3,VI4),std::vector<std::string> >
_argnamemap ;
97template<
class VO,
class VI1,
class VI2,
class VI3,
class VI4>
114 const char* result =
fmap().lookupName(
_ptr) ;
115 if (result && strlen(result)) {
123 temp._funcptr =
_ptr;
124 return Form(
"(%p)",temp._ptr) ;
129 return fmap().lookupArgName(
_ptr,iarg) ;
157template<
class VO,
class VI1,
class VI2,
class VI3,
class VI4>
160template<
class VO,
class VI1,
class VI2,
class VI3,
class VI4>
172 typedef ::RooCFunction4Ref<VO,VI1,VI2,VI3,VI4> thisClass;
182 tmpName.Streamer(R__b) ;
184 if (tmpName==
"UNKNOWN" && R__v>0) {
186 coutW(
ObjectHandling) <<
"WARNING: Objected embeds function pointer to unknown function, object will not be functional" << std::endl ;
187 _ptr = dummyFunction ;
192 _ptr = fmap().lookupPtr(tmpName.
Data()) ;
196 <<
" but no such function is registered, object will not be functional" << std::endl ;
209 TString tmpName = fmap().lookupName(_ptr) ;
210 if (tmpName.
Length()==0) {
212 <<
" written object will not be functional when read back" << std::endl ;
217 tmpName.Streamer(R__b) ;
226template<
class VO,
class VI1,
class VI2,
class VI3,
class VI4>
239 os <<
"[ function=" <<
func.name() <<
" " ;
269template<
class VO,
class VI1,
class VI2,
class VI3,
class VI4>
270RooCFunction4Binding<VO,VI1,VI2,VI3,VI4>::RooCFunction4Binding(
const char *
name,
const char *title, VO (*_func)(VI1,VI2,VI3,VI4),
274 x(func.argName(0),func.argName(0),this,_x),
275 y(func.argName(1),func.argName(1),this,_y),
276 z(func.argName(2),func.argName(2),this,_z),
277 w(func.argName(3),func.argName(3),this,_w)
286template<
class VO,
class VI1,
class VI2,
class VI3,
class VI4>
299template<
class VO,
class VI1,
class VI2,
class VI3,
class VI4>
312 os <<
"[ function=" <<
func.name() <<
" " ;
342template<
class VO,
class VI1,
class VI2,
class VI3,
class VI4>
343RooCFunction4PdfBinding<VO,VI1,VI2,VI3,VI4>::RooCFunction4PdfBinding(
const char *
name,
const char *title, VO (*_func)(VI1,VI2,VI3,VI4),
347 x(func.argName(0),func.argName(0),this,_x),
348 y(func.argName(1),func.argName(1),this,_y),
349 z(func.argName(2),func.argName(2),this,_z),
350 w(func.argName(3),func.argName(3),this,_w)
359template<
class VO,
class VI1,
class VI2,
class VI3,
class VI4>
#define ClassDef(name, id)
char * Form(const char *fmt,...)
Int_t numProxies() const
Return the number of registered proxies.
RooAbsProxy * getProxy(Int_t index) const
Return the nth proxy from the proxy list.
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
RooAbsProxy is the abstact interface for proxy classes.
virtual void print(std::ostream &os, Bool_t addContents=kFALSE) const
Print proxy name.
virtual const char * name() const
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
RooCFunction4Binding is a templated implementation of class RooAbsReal that binds generic C(++) funct...
Double_t evaluate() const
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
virtual TObject * clone(const char *newname) const
void printArgs(std::ostream &os) const
Print object arguments, ie its proxies.
virtual ~RooCFunction4Binding()
RooCFunction4Ref< VO, VI1, VI2, VI3, VI4 > func
VO(*)(VI1, VI2, VI3, VI4) lookupPtr(const char *name)
std::map< std::string, VO(*)(VI1, VI2, VI3, VI4)> _ptrmap
const char * lookupName(VO(*ptr)(VI1, VI2, VI3, VI4))
void add(const char *name, VO(*ptr)(VI1, VI2, VI3, VI4), const char *arg1name="x", const char *arg2name="y", const char *arg3name="z", const char *arg4name="w")
const char * lookupArgName(VO(*ptr)(VI1, VI2, VI3, VI4), UInt_t iarg)
std::map< VO(*)(VI1, VI2, VI3, VI4), std::vector< std::string > > _argnamemap
std::map< VO(*)(VI1, VI2, VI3, VI4), std::string > _namemap
RooCFunction4PdfBinding()
Double_t evaluate() const
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
virtual ~RooCFunction4PdfBinding()
void printArgs(std::ostream &os) const
Print object arguments, ie its proxies.
virtual TObject * clone(const char *newname) const
RooCFunction4Ref< VO, VI1, VI2, VI3, VI4 > func
static RooCFunction4Map< VO, VI1, VI2, VI3, VI4 > * _fmap
Pointer to embedded function.
RooCFunction4Ref(VO(*ptr)(VI1, VI2, VI3, VI4)=0)
const char * argName(Int_t iarg)
const char * name() const
VO(* func_t)(VI1, VI2, VI3, VI4)
VO operator()(VI1 x, VI2 y, VI3 z, VI4 w) const
static RooCFunction4Map< VO, VI1, VI2, VI3, VI4 > & fmap()
static VO dummyFunction(VI1, VI2, VI3, VI4)
RooRealProxy is the concrete proxy for RooAbsReal objects A RooRealProxy is the general mechanism to ...
Buffer base class used for serializing objects.
virtual void SetByteCount(UInt_t cntpos, Bool_t packInVersion=kFALSE)=0
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
virtual UInt_t WriteVersion(const TClass *cl, Bool_t useBcnt=kFALSE)=0
Mother of all ROOT objects.
const char * Data() const
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
RooAbsPdf * bindPdf(const char *name, CFUNCD1D func, RooAbsReal &x)
Double_t(* CFUNCD4DDDD)(Double_t, Double_t, Double_t, Double_t)
Double_t(* CFUNCD4DDDI)(Double_t, Double_t, Double_t, Int_t)
RooAbsReal * bindFunction(const char *name, CFUNCD1D func, RooAbsReal &x)
Double_t(* CFUNCD4DDDB)(Double_t, Double_t, Double_t, Bool_t)