Logo ROOT   6.18/05
Reference Guide
RooFunctor1DBinding.cxx
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * File: $Id$
5 * Authors: *
6 * WV, Wouter Verkerke, NIKHEF, verkerke@nikhef.nl *
7 * *
8 * Copyright (c) 2000-2008, NIKHEF, Regents of the University of California *
9 * and Stanford University. All rights reserved. *
10 * *
11 *****************************************************************************/
12
13/** \class RooFunctor1DBinding
14 \ingroup Roofit
15
16RooCFunction1Binding is a templated implementation of class RooAbsReal that binds
17generic C(++) functions to a RooAbsReal argument thus allowing generic C++
18functions to be used as RooFit functions. Instances of function binding
19classes are fully functional RooFit function objects with one exception:
20if the bound function is _not_ a standard TMath or MathMore function the
21class cannot be persisted in a RooWorkspace without registering the function
22pointer first using RooCFunction1Binding<T1,T2>::register().
23**/
24
25/** \class RooFunctor1DPdfBinding
26 \ingroup Roofit
27**/
28
29#include "Riostream.h"
30#include "RooFunctor1DBinding.h"
31
32using namespace std ;
33
36
37////////////////////////////////////////////////////////////////////////////////
38
40 RooAbsReal(name,title),
41 func(&ftor),
42 var("x","x",this,x)
43{
44}
45
46////////////////////////////////////////////////////////////////////////////////
47
49 RooAbsReal(other,name),
50 func(other.func),
51 var("x",this,other.var)
52{
53 // Copy constructor
54}
55
56////////////////////////////////////////////////////////////////////////////////
57
58void RooFunctor1DBinding::printArgs(ostream& os) const {
59 // Print object arguments and name/address of function pointer
60 os << "[ function=" << func << " " ;
61 for (Int_t i=0 ; i<numProxies() ; i++) {
62 RooAbsProxy* p = getProxy(i) ;
63 if (!TString(p->name()).BeginsWith("!")) {
64 p->print(os) ;
65 os << " " ;
66 }
67 }
68 os << "]" ;
69}
70
71////////////////////////////////////////////////////////////////////////////////
72
74 // Return value of embedded function using value of referenced variable x
75 return (*func)(var.arg().getVal()) ;
76 }
77
78////////////////////////////////////////////////////////////////////////////////
79
81 RooAbsPdf(name,title),
82 func(&ftor),
83 var("x","x",this,x)
84{
85}
86
87////////////////////////////////////////////////////////////////////////////////
88
90 RooAbsPdf(other,name),
91 func(other.func),
92 var("x",this,other.var)
93{
94 // Copy constructor
95}
96
97////////////////////////////////////////////////////////////////////////////////
98
99void RooFunctor1DPdfBinding::printArgs(ostream& os) const {
100 // Print object arguments and name/address of function pointer
101 os << "[ function=" << func << " " ;
102 for (Int_t i=0 ; i<numProxies() ; i++) {
103 RooAbsProxy* p = getProxy(i) ;
104 if (!TString(p->name()).BeginsWith("!")) {
105 p->print(os) ;
106 os << " " ;
107 }
108 }
109 os << "]" ;
110}
111
112////////////////////////////////////////////////////////////////////////////////
113
115 // Return value of embedded function using value of referenced variable x
116 return (*func)(var.arg().getVal()) ;
117 }
118
119namespace RooFit {
120
122 return new RooFunctor1DBinding(name,name,ftor,var) ;
123 }
124
126 return new RooFunctor1DPdfBinding(name,name,ftor,var) ;
127 }
128
129}
int Int_t
Definition: RtypesCore.h:41
double Double_t
Definition: RtypesCore.h:55
#define ClassImp(name)
Definition: Rtypes.h:365
char name[80]
Definition: TGX11.cxx:109
Interface (abstract class) for generic functions objects of one-dimension Provides a method to evalua...
Definition: IFunction.h:135
Int_t numProxies() const
Return the number of registered proxies.
Definition: RooAbsArg.cxx:1242
RooAbsProxy * getProxy(Int_t index) const
Return the nth proxy from the proxy list.
Definition: RooAbsArg.cxx:1229
RooAbsProxy is the abstact interface for proxy classes.
Definition: RooAbsProxy.h:31
virtual void print(std::ostream &os, Bool_t addContents=kFALSE) const
Print proxy name.
Definition: RooAbsProxy.cxx:75
virtual const char * name() const
Definition: RooAbsProxy.h:41
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:53
Double_t getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
Definition: RooAbsReal.h:81
RooCFunction1Binding is a templated implementation of class RooAbsReal that binds generic C(++) funct...
void printArgs(std::ostream &os) const
Print object arguments, ie its proxies.
const ROOT::Math::IBaseFunctionOneDim * func
Double_t evaluate() const
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
const ROOT::Math::IBaseFunctionOneDim * func
Double_t evaluate() const
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
void printArgs(std::ostream &os) const
Print object arguments, ie its proxies.
const RooAbsReal & arg() const
Definition: RooRealProxy.h:43
Basic string class.
Definition: TString.h:131
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
Definition: TString.h:610
Double_t x[n]
Definition: legend1.C:17
Template specialisation used in RooAbsArg:
RooAbsPdf * bindPdf(const char *name, CFUNCD1D func, RooAbsReal &x)
RooAbsReal * bindFunction(const char *name, CFUNCD1D func, RooAbsReal &x)