ROOT  6.07/01
Reference Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
RooFirstMoment.cxx
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * @(#)root/roofitcore:$Id$
5  * Authors: *
6  * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7  * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8  * *
9  * Copyright (c) 2000-2005, Regents of the University of California *
10  * and Stanford University. All rights reserved. *
11  * *
12  * Redistribution and use in source and binary forms, *
13  * with or without modification, are permitted according to the terms *
14  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15  *****************************************************************************/
16 
17 /**
18 \file RooFirstMoment.cxx
19 \class RooFirstMoment
20 \ingroup Roofitcore
21 
22 RooFirstMoment represents the first, second, or third order derivative
23 of any RooAbsReal as calculated (numerically) by the MathCore Richardson
24 derivator class.
25 **/
26 
27 
28 #include "RooFit.h"
29 
30 #include "Riostream.h"
31 #include "Riostream.h"
32 #include <math.h>
33 #include <string>
34 
35 #include "RooFirstMoment.h"
36 #include "RooAbsReal.h"
37 #include "RooAbsPdf.h"
38 #include "RooErrorHandler.h"
39 #include "RooArgSet.h"
40 #include "RooMsgService.h"
41 #include "RooRealVar.h"
42 #include "RooFunctor.h"
43 #include "RooGlobalFunc.h"
44 #include "RooConstVar.h"
45 #include "RooRealIntegral.h"
46 #include "RooNumIntConfig.h"
47 #include "RooProduct.h"
48 #include <string>
49 using namespace std ;
50 
51 
53 ;
54 
55 
56 ////////////////////////////////////////////////////////////////////////////////
57 /// Default constructor
58 
60 {
61 }
62 
63 
64 
65 ////////////////////////////////////////////////////////////////////////////////
66 
68  RooAbsMoment(name, title,func,x,1,kFALSE),
69  _xf("!xf","xf",this,kFALSE,kFALSE),
70  _ixf("!ixf","ixf",this),
71  _if("!if","if",this)
72 {
74 
75  string pname=Form("%s_product",name) ;
76 
77  RooProduct* XF = new RooProduct(pname.c_str(),pname.c_str(),RooArgSet(x,func)) ;
79 
80  if (func.isBinnedDistribution(x)) {
81  XF->specialIntegratorConfig(kTRUE)->method1D().setLabel("RooBinIntegrator");
82  }
83 
86  intXF->setCacheNumeric(kTRUE) ;
87  intF->setCacheNumeric(kTRUE) ;
88 
89  _xf.setArg(*XF) ;
90  _ixf.setArg(*intXF) ;
91  _if.setArg(*intF) ;
92  addOwnedComponents(RooArgSet(*XF,*intXF,*intF)) ;
93 }
94 
95 ////////////////////////////////////////////////////////////////////////////////
96 
97 RooFirstMoment::RooFirstMoment(const char* name, const char* title, RooAbsReal& func, RooRealVar& x, const RooArgSet& nset, Bool_t intNSet) :
98  RooAbsMoment(name, title,func,x,1,kFALSE),
99  _xf("!xf","xf",this,kFALSE,kFALSE),
100  _ixf("!ixf","ixf",this),
101  _if("!if","if",this)
102 {
104 
105  _nset.add(nset) ;
106 
107  string pname=Form("%s_product",name) ;
108 
109  RooProduct* XF = new RooProduct(pname.c_str(),pname.c_str(),RooArgSet(x,func)) ;
111 
112  if (func.isBinnedDistribution(x)) {
113  XF->specialIntegratorConfig(kTRUE)->method1D().setLabel("RooBinIntegrator");
114  }
115 
116  if (intNSet && _nset.getSize()>0 && func.isBinnedDistribution(_nset)) {
117  XF->specialIntegratorConfig(kTRUE)->method2D().setLabel("RooBinIntegrator");
118  XF->specialIntegratorConfig(kTRUE)->methodND().setLabel("RooBinIntegrator");
119  }
120 
121  RooArgSet intSet(x) ;
122  if (intNSet) intSet.add(_nset,kTRUE) ;
123  RooRealIntegral* intXF = (RooRealIntegral*) XF->createIntegral(intSet,&_nset) ;
124  RooRealIntegral* intF = (RooRealIntegral*) func.createIntegral(intSet,&_nset) ;
125  intXF->setCacheNumeric(kTRUE) ;
126  intF->setCacheNumeric(kTRUE) ;
127 
128  _xf.setArg(*XF) ;
129  _ixf.setArg(*intXF) ;
130  _if.setArg(*intF) ;
131  addOwnedComponents(RooArgSet(*XF,*intXF,*intF)) ;
132 }
133 
134 
135 
136 ////////////////////////////////////////////////////////////////////////////////
137 
139  RooAbsMoment(other, name),
140  _xf("xf",this,other._xf),
141  _ixf("ixf",this,other._ixf),
142  _if("if",this,other._if)
143 {
144 }
145 
146 
147 
148 ////////////////////////////////////////////////////////////////////////////////
149 /// Destructor
150 
152 {
153 }
154 
155 
156 
157 ////////////////////////////////////////////////////////////////////////////////
158 /// Calculate value
159 
161 {
162  Double_t ratio = _ixf / _if ;
163  //cout << "\nRooFirstMoment::eval(" << GetName() << ") val = " << ratio << endl ;
164  return ratio ;
165 }
166 
167 
ClassImp(RooFirstMoment)
virtual Bool_t isBinnedDistribution(const RooArgSet &) const
Definition: RooAbsReal.h:277
RooCategory & methodND()
RooFirstMoment represents the first, second, or third order derivative of any RooAbsReal as calculate...
tuple pname
Definition: tree.py:131
RooCategory & method2D()
bool Bool_t
Definition: RtypesCore.h:59
RooRealProxy _ixf
const Bool_t kFALSE
Definition: Rtypes.h:92
Bool_t addOwnedComponents(const RooArgSet &comps)
Take ownership of the contents of 'comps'.
Definition: RooAbsArg.cxx:2282
RooAbsMoment represents the first, second, or third order derivative of any RooAbsReal as calculated ...
Definition: RooAbsMoment.h:27
RooExpensiveObjectCache & expensiveObjectCache() const
Definition: RooAbsArg.cxx:2342
virtual Bool_t setLabel(const char *label, Bool_t printError=kTRUE)
Set value by specifying the name of the desired state If printError is set, a message will be printed...
RooCategory & method1D()
Double_t x[n]
Definition: legend1.C:17
RooRealIntegral performs hybrid numerical/analytical integrals of RooAbsReal objects The class perfor...
friend class RooArgSet
Definition: RooAbsArg.h:469
RooRealProxy _xf
RooRealVar represents a fundamental (non-derived) real valued object.
Definition: RooRealVar.h:37
RooFirstMoment()
Default constructor.
virtual ~RooFirstMoment()
Destructor.
TPaveLabel title(3, 27.1, 15, 28.7,"ROOT Environment and Tools")
char * Form(const char *fmt,...)
virtual Bool_t setArg(RooAbsReal &newRef)
Change object held in proxy into newRef.
RooProduct a RooAbsReal implementation that represent the product of a given set of other RooAbsReal ...
Definition: RooProduct.h:32
RooSetProxy _nset
Definition: RooAbsMoment.h:44
virtual void setExpensiveObjectCache(RooExpensiveObjectCache &cache)
Definition: RooAbsArg.h:497
double Double_t
Definition: RtypesCore.h:55
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:53
double func(double *x, double *p)
Definition: stressTF1.cxx:213
RooRealProxy _if
#define name(a, b)
Definition: linkTestLib0.cpp:5
Int_t getSize() const
Double_t evaluate() const
Calculate value.
const Bool_t kTRUE
Definition: Rtypes.h:91
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add element to non-owning set.
Definition: RooArgSet.cxx:448
RooNumIntConfig * specialIntegratorConfig() const
Returns the specialized integrator configuration for this RooAbsReal.
RooAbsReal * createIntegral(const RooArgSet &iset, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) const
Create an object that represents the integral of the function over one or more observables listed in ...
Definition: RooAbsReal.cxx:503
void setCacheNumeric(Bool_t flag)
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Overloaded RooArgSet::add() method inserts 'var' into set and registers 'var' as server to owner with...