Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooIntegrator2D.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 RooIntegrator2D.cxx
19 \class RooIntegrator2D
20 \ingroup Roofitcore
21 
22 RooIntegrator2D implements a numeric two-dimensiona integrator
23 in terms of a recursive application of RooIntegrator1D
24 **/
25 
26 
27 #include "RooFit.h"
28 
29 #include "TClass.h"
30 #include "RooIntegrator2D.h"
31 #include "RooArgSet.h"
32 #include "RooIntegratorBinding.h"
33 #include "RooRealVar.h"
34 #include "RooNumber.h"
35 #include "RooNumIntFactory.h"
36 
37 #include <assert.h>
38 
39 using namespace std;
40 
41 ClassImp(RooIntegrator2D);
42 ;
43 
44 
45 ////////////////////////////////////////////////////////////////////////////////
46 /// Register RooIntegrator2D, is parameters and capabilities with RooNumIntFactory
47 
48 void RooIntegrator2D::registerIntegrator(RooNumIntFactory& fact)
49 {
50  RooIntegrator2D* proto = new RooIntegrator2D() ;
51  fact.storeProtoIntegrator(proto,RooArgSet(),RooIntegrator1D::Class()->GetName()) ;
52  RooNumIntConfig::defaultConfig().method2D().setLabel(proto->IsA()->GetName()) ;
53 }
54 
55 
56 ////////////////////////////////////////////////////////////////////////////////
57 /// Default constructor
58 
59 RooIntegrator2D::RooIntegrator2D() :
60  _xIntegrator(0), _xint(0)
61 {
62 }
63 
64 
65 ////////////////////////////////////////////////////////////////////////////////
66 /// Constructor with a given function binding, summation rule,
67 /// maximum number of steps and conversion tolerance. The integration
68 /// limits are taken from the definition in the function binding.
69 
70 RooIntegrator2D::RooIntegrator2D(const RooAbsFunc& function, RooIntegrator1D::SummationRule rule,
71  Int_t maxSteps, Double_t eps) :
72  RooIntegrator1D(*(_xint=new RooIntegratorBinding(*(_xIntegrator=new RooIntegrator1D(function,rule,maxSteps,eps)))),rule,maxSteps,eps)
73 {
74 }
75 
76 
77 ////////////////////////////////////////////////////////////////////////////////
78 /// Constructor with a given function binding, summation rule,
79 /// maximum number of steps, conversion tolerance and an explicit
80 /// choice of integration limits on both dimensions.
81 
82 RooIntegrator2D::RooIntegrator2D(const RooAbsFunc& function, Double_t xmin, Double_t xmax,
83  Double_t ymin, Double_t ymax,
84  SummationRule rule, Int_t maxSteps, Double_t eps) :
85  RooIntegrator1D(*(_xint=new RooIntegratorBinding(*(_xIntegrator=new RooIntegrator1D(function,ymin,ymax,rule,maxSteps,eps)))),xmin,xmax,rule,maxSteps,eps)
86 {
87 }
88 
89 
90 ////////////////////////////////////////////////////////////////////////////////
91 /// Constructor with a function binding and a configuration object.
92 /// The integration limits are taken from the definition in the function
93 /// binding
94 
95 RooIntegrator2D::RooIntegrator2D(const RooAbsFunc& function, const RooNumIntConfig& config) :
96  RooIntegrator1D(*(_xint=new RooIntegratorBinding(*(_xIntegrator=new RooIntegrator1D(function,config)))),config)
97 {
98 }
99 
100 
101 
102 ////////////////////////////////////////////////////////////////////////////////
103 /// Constructor with a function binding, a configuration object and
104 /// an explicit definition of the integration limits.
105 
106 RooIntegrator2D::RooIntegrator2D(const RooAbsFunc& function, Double_t xmin, Double_t xmax,
107  Double_t ymin, Double_t ymax,
108  const RooNumIntConfig& config) :
109  RooIntegrator1D(*(_xint=new RooIntegratorBinding(*(_xIntegrator=new RooIntegrator1D(function,ymin,ymax,config)))),xmin,xmax,config)
110 {
111 }
112 
113 
114 ////////////////////////////////////////////////////////////////////////////////
115 /// Clone integrator with new function and configuration. Needed to support RooNumIntFactory
116 
117 RooAbsIntegrator* RooIntegrator2D::clone(const RooAbsFunc& function, const RooNumIntConfig& config) const
118 {
119  return new RooIntegrator2D(function,config) ;
120 }
121 
122 
123 
124 ////////////////////////////////////////////////////////////////////////////////
125 /// Destructor
126 
127 RooIntegrator2D::~RooIntegrator2D()
128 {
129  delete _xint ;
130  delete _xIntegrator ;
131 }
132 
133 
134 ////////////////////////////////////////////////////////////////////////////////
135 /// Verify that the limits are OK for this integrator (i.e. no open-ended ranges)
136 
137 Bool_t RooIntegrator2D::checkLimits() const
138 {
139  Bool_t ret = RooIntegrator1D::checkLimits() ;
140  ret &= _xIntegrator->checkLimits() ;
141  return ret ;
142 }