Logo ROOT   6.08/07
Reference Guide
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 
67 RooFirstMoment::RooFirstMoment(const char* name, const char* title, RooAbsReal& func, RooRealVar& x) :
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 
virtual Bool_t add(const RooAbsCollection &col, Bool_t silent=kFALSE)
Add a collection of arguments to this collection by calling add() for each element in the source coll...
Definition: RooArgSet.h:86
RooCategory & methodND()
RooFirstMoment represents the first, second, or third order derivative of any RooAbsReal as calculate...
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 &#39;comps&#39;.
Definition: RooAbsArg.cxx:2282
STL namespace.
RooAbsMoment represents the first, second, or third order derivative of any RooAbsReal as calculated ...
Definition: RooAbsMoment.h:27
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
RooNumIntConfig * specialIntegratorConfig() const
Returns the specialized integrator configuration for this RooAbsReal.
RooRealVar represents a fundamental (non-derived) real valued object.
Definition: RooRealVar.h:37
Int_t getSize() const
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
RooFirstMoment()
Default constructor.
RooExpensiveObjectCache & expensiveObjectCache() const
Definition: RooAbsArg.cxx:2342
virtual ~RooFirstMoment()
Destructor.
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
virtual Bool_t isBinnedDistribution(const RooArgSet &) const
Definition: RooAbsReal.h:277
#define ClassImp(name)
Definition: Rtypes.h:279
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
Double_t evaluate() const
Calculate value.
const Bool_t kTRUE
Definition: Rtypes.h:91
char name[80]
Definition: TGX11.cxx:109
void setCacheNumeric(Bool_t flag)
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Overloaded RooArgSet::add() method inserts &#39;var&#39; into set and registers &#39;var&#39; as server to owner with...