Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooTFnBinding.cxx
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * *
4  * This code was autogenerated by RooClassFactory *
5  *****************************************************************************/
6 
7 /** \class RooTFnBinding
8  \ingroup Roofit
9 
10 **/
11 
12 #include "Riostream.h"
13 
14 #include "RooTFnBinding.h"
15 #include "RooAbsReal.h"
16 #include "RooAbsCategory.h"
17 #include "TF3.h"
18 
19 using namespace std;
20 
21 ClassImp(RooTFnBinding);
22 
23 ////////////////////////////////////////////////////////////////////////////////
24 
25 RooTFnBinding::RooTFnBinding(const char *name, const char *title, TF1* func, const RooArgList& list) :
26  RooAbsReal(name,title),
27  _olist("obs","obs",this),
28  _func(func)
29 {
30  _olist.add(list) ;
31 }
32 
33 ////////////////////////////////////////////////////////////////////////////////
34 
35 RooTFnBinding::RooTFnBinding(const char *name, const char *title, TF1* func, const RooArgList& obsList, const RooArgList& paramList) :
36  RooAbsReal(name,title),
37  _olist("obs","obs",this),
38  _plist("params","params",this),
39  _func(func)
40 {
41  _olist.add(obsList) ;
42  _plist.add(paramList) ;
43 }
44 
45 ////////////////////////////////////////////////////////////////////////////////
46 
47 RooTFnBinding::RooTFnBinding(const RooTFnBinding& other, const char* name) :
48  RooAbsReal(other,name),
49  _olist("obs",this,other._olist),
50  _plist("params",this,other._plist),
51  _func(other._func)
52 {
53 }
54 
55 ////////////////////////////////////////////////////////////////////////////////
56 
57 Double_t RooTFnBinding::evaluate() const
58 {
59  Double_t x = _olist.at(0) ? ((RooAbsReal*)_olist.at(0))->getVal() : 0 ;
60  Double_t y = _olist.at(1) ? ((RooAbsReal*)_olist.at(1))->getVal() : 0 ;
61  Double_t z = _olist.at(2) ? ((RooAbsReal*)_olist.at(2))->getVal() : 0 ;
62  for (Int_t i=0 ; i<_func->GetNpar() ; i++) {
63  _func->SetParameter(i,_plist.at(i)?((RooAbsReal*)_plist.at(i))->getVal() : 0) ;
64  }
65  return _func->Eval(x,y,z) ;
66 }
67 
68 ////////////////////////////////////////////////////////////////////////////////
69 
70 void RooTFnBinding::printArgs(ostream& os) const
71 {
72  // Print object arguments and name/address of function pointer
73  os << "[ TFn={" << _func->GetName() << "=" << _func->GetTitle() << "} " ;
74  for (Int_t i=0 ; i<numProxies() ; i++) {
75  RooAbsProxy* p = getProxy(i) ;
76  if (!TString(p->name()).BeginsWith("!")) {
77  p->print(os) ;
78  os << " " ;
79  }
80  }
81  os << "]" ;
82 }
83 
84 ////////////////////////////////////////////////////////////////////////////////
85 
86 namespace RooFit {
87 
88  RooAbsReal* bindFunction(TF1* func,RooAbsReal& x) {
89  return new RooTFnBinding(func->GetName(),func->GetTitle(),func,x) ;
90  }
91 
92  RooAbsReal* bindFunction(TF2* func,RooAbsReal& x, RooAbsReal& y) {
93  return new RooTFnBinding(func->GetName(),func->GetTitle(),func,RooArgList(x,y)) ;
94  }
95 
96  RooAbsReal* bindFunction(TF3* func,RooAbsReal& x, RooAbsReal& y, RooAbsReal& z) {
97  return new RooTFnBinding(func->GetName(),func->GetTitle(),func,RooArgList(x,y,z)) ;
98  }
99 
100  RooAbsReal* bindFunction(TF1* func,RooAbsReal& x, const RooArgList& params) {
101  return new RooTFnBinding(func->GetName(),func->GetTitle(),func,x,params) ;
102  }
103 
104  RooAbsReal* bindFunction(TF2* func,RooAbsReal& x, RooAbsReal& y, const RooArgList& params) {
105  return new RooTFnBinding(func->GetName(),func->GetTitle(),func,RooArgList(x,y),params) ;
106  }
107 
108  RooAbsReal* bindFunction(TF3* func,RooAbsReal& x, RooAbsReal& y, RooAbsReal& z, const RooArgList& params) {
109  return new RooTFnBinding(func->GetName(),func->GetTitle(),func,RooArgList(x,y,z),params) ;
110  }
111 
112 }