13 #ifndef ROOCFUNCTION1BINDING 14 #define ROOCFUNCTION1BINDING 42 template<
class VO,
class VI>
47 void add(
const char*
name, VO (*ptr)(VI),
const char* arg1name=
"x") {
50 _namemap[ptr] =
name ;
51 _argnamemap[ptr].push_back(arg1name) ;
57 return _namemap[ptr].c_str() ;
62 return _ptrmap[
name] ;
68 if (iarg<_argnamemap[ptr].size()) {
69 return (_argnamemap[ptr])[iarg].c_str() ;
82 std::map<std::string,VO (*)(VI)>
_ptrmap ;
90 template<
class VO,
class VI>
107 const char*
result = fmap().lookupName(_ptr) ;
108 if (result && strlen(result)) {
116 temp._funcptr = _ptr;
117 return Form(
"(%p)",temp._ptr) ;
122 return fmap().lookupArgName(_ptr,iarg) ;
135 typedef VO (*func_t)(VI);
144 template<
class VO,
class VI>
147 template<
class VO,
class VI>
159 typedef ::RooCFunction1Ref<VO,VI> thisClass;
169 tmpName.Streamer(R__b) ;
171 if (tmpName==
"UNKNOWN" && R__v>0) {
173 coutW(
ObjectHandling) <<
"WARNING: Objected embeds function pointer to unknown function, object will not be functional" << std::endl ;
174 _ptr = dummyFunction ;
179 _ptr = fmap().lookupPtr(tmpName.
Data()) ;
183 <<
" but no such function is registered, object will not be functional" << std::endl ;
196 TString tmpName = fmap().lookupName(_ptr) ;
197 if (tmpName.
Length()==0) {
203 temp._funcptr = _ptr;
205 <<
" written object will not be functional when read back" << std::endl ;
210 tmpName.Streamer(R__b) ;
219 template<
class VO,
class VI>
232 os <<
"[ function=" <<
func.name() <<
" " ;
233 for (
Int_t i=0 ; i<numProxies() ; i++) {
259 template<
class VO,
class VI>
263 x(
func.argName(0),
func.argName(0),this,_x)
272 template<
class VO,
class VI>
283 template<
class VO,
class VI>
296 os <<
"[ function=" <<
func.name() <<
" " ;
323 template<
class VO,
class VI>
327 x(
func.argName(0),
func.argName(0),this,_x)
336 template<
class VO,
class VI>
const char * name() const
RooCFunction1Ref< VO, VI > func
virtual TObject * clone(const char *newname) const
virtual const char * name() const
const char * argName(Int_t iarg)
RooAbsPdf * bindPdf(const char *name, CFUNCD1D func, RooAbsReal &x)
const char * lookupArgName(VO(*ptr)(VI), UInt_t iarg)
Buffer base class used for serializing objects.
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
static RooCFunction1Map< VO, VI > * _fmap
Pointer to embedded function.
void add(const char *name, VO(*ptr)(VI), const char *arg1name="x")
virtual UInt_t WriteVersion(const TClass *cl, Bool_t useBcnt=kFALSE)=0
RooAbsReal * bindFunction(const char *name, CFUNCD1D func, RooAbsReal &x)
Double_t(* CFUNCD1I)(Int_t)
std::map< VO(*)(VI), std::string > _namemap
virtual TObject * clone(const char *newname) const
#define ClassDef(name, id)
virtual ~RooCFunction1Binding()
void printArgs(std::ostream &os) const
Print object arguments, ie its proxies.
void printArgs(std::ostream &os) const
Print object arguments, ie its proxies.
Double_t evaluate() const
Double_t(* CFUNCD1D)(Double_t)
RooCFunction1Ref< VO, VI > func
RooAbsProxy is the abstact interface for proxy classes.
char * Form(const char *fmt,...)
std::map< VO(*)(VI), std::vector< std::string > > _argnamemap
virtual void SetByteCount(UInt_t cntpos, Bool_t packInVersion=kFALSE)=0
std::map< std::string, VO(*)(VI)> _ptrmap
VO operator()(VI x) const
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
RooCFunction1Binding is a templated implementation of class RooAbsReal that binds generic C(++) funct...
double func(double *x, double *p)
virtual ~RooCFunction1PdfBinding()
Double_t evaluate() const
VO(*)(VI) lookupPtr(const char *name)
RooAbsProxy * getProxy(Int_t index) const
Return the nth proxy from the proxy list.
Mother of all ROOT objects.
Int_t numProxies() const
Return the number of registered proxies.
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
RooRealProxy is the concrete proxy for RooAbsReal objects A RooRealProxy is the general mechanism to ...
static VO dummyFunction(VI)
RooCFunction1Ref(VO(*ptr)(VI)=0)
const char * lookupName(VO(*ptr)(VI))
virtual void print(std::ostream &os, Bool_t addContents=kFALSE) const
Print proxy name.
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
RooCFunction1PdfBinding()
const char * Data() const