Logo ROOT   6.16/01
Reference Guide
RooFoamGenerator.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 RooFoamGenerator.cxx
19\class RooFoamGenerator
20\ingroup Roofitcore
21
22Class RooFoamGenerator is a generic toy monte carlo generator that implement
23the TFOAM sampling technique on any positively valued function.
24The RooFoamGenerator generator is used by the various generator context
25classes to take care of generation of observables for which p.d.fs
26do not define internal methods
27**/
28
29
30#include "RooFit.h"
31#include "Riostream.h"
32
33#include "RooFoamGenerator.h"
34#include "RooAbsReal.h"
35#include "RooCategory.h"
36#include "RooRealVar.h"
37#include "RooDataSet.h"
38#include "RooRandom.h"
39#include "RooErrorHandler.h"
40
41#include "TString.h"
42#include "TIterator.h"
43#include "RooMsgService.h"
44#include "TClass.h"
45#include "TFoam.h"
46#include "RooTFoamBinding.h"
47#include "RooNumGenFactory.h"
48#include "RooNumGenConfig.h"
49
50#include <assert.h>
51
52using namespace std;
53
55 ;
56
57
58////////////////////////////////////////////////////////////////////////////////
59/// Register RooIntegrator1D, is parameters and capabilities with RooNumIntFactory
60
62{
63 // Register RooIntegrator1D, is parameters and capabilities with RooNumIntFactory
64 RooRealVar nSample("nSample","Number of samples per cell",200,0,1e6) ;
65 RooRealVar nCell1D("nCell1D","Number of cells for 1-dim generation",30,0,1e6) ;
66 RooRealVar nCell2D("nCell2D","Number of cells for 2-dim generation",500,0,1e6) ;
67 RooRealVar nCell3D("nCell3D","Number of cells for 3-dim generation",5000,0,1e6) ;
68 RooRealVar nCellND("nCellND","Number of cells for N-dim generation",10000,0,1e6) ;
69 RooRealVar chatLevel("chatLevel","TFOAM 'chat level' (verbosity)",0,0,2) ;
70
72 fact.storeProtoSampler(proto,RooArgSet(nSample,nCell1D,nCell2D,nCell3D,nCellND,chatLevel)) ;
73}
74
75
76
77
78////////////////////////////////////////////////////////////////////////////////
79
80RooFoamGenerator::RooFoamGenerator(const RooAbsReal &func, const RooArgSet &genVars, const RooNumGenConfig& config, Bool_t verbose, const RooAbsReal* maxFuncVal) :
81 RooAbsNumGenerator(func,genVars,verbose,maxFuncVal)
82{
85
86 _tfoam = new TFoam("TFOAM") ;
90 switch(_realVars.getSize()) {
91 case 1:_tfoam->SetnCells((Int_t)config.getConfigSection("RooFoamGenerator").getRealValue("nCell1D")) ; break ;
92 case 2:_tfoam->SetnCells((Int_t)config.getConfigSection("RooFoamGenerator").getRealValue("nCell2D")) ; break ;
93 case 3:_tfoam->SetnCells((Int_t)config.getConfigSection("RooFoamGenerator").getRealValue("nCell3D")) ; break ;
94 default:_tfoam->SetnCells((Int_t)config.getConfigSection("RooFoamGenerator").getRealValue("nCellND")) ; break ;
95 }
96 _tfoam->SetnSampl((Int_t)config.getConfigSection("RooFoamGenerator").getRealValue("nSample")) ;
98 _tfoam->SetChat((Int_t)config.getConfigSection("RooFoamGenerator").getRealValue("chatLevel")) ;
100
101 _vec = new Double_t[_realVars.getSize()] ;
104
106 RooRealVar* var ;
107 Int_t i(0) ;
108 while((var=(RooRealVar*)iter->Next())) {
109 _xmin[i] = var->getMin() ;
110 _range[i] = var->getMax() - var->getMin() ;
111 i++ ;
112 }
113 delete iter ;
114
115}
116
117
118////////////////////////////////////////////////////////////////////////////////
119/// Destructor
120
122{
123 delete[] _vec ;
124 delete[] _xmin ;
125 delete[] _range ;
126 delete _tfoam ;
127 delete _binding ;
128 delete _rvIter ;
129}
130
131
132
133////////////////////////////////////////////////////////////////////////////////
134/// are we actually generating anything? (the cache always contains at least our function value)
135
136const RooArgSet *RooFoamGenerator::generateEvent(UInt_t /*remaining*/, Double_t& /*resampleRatio*/)
137{
138 const RooArgSet *event= _cache->get();
139 if(event->getSize() == 1) return event;
140
141 _tfoam->MakeEvent() ;
143
144 // Transfer contents to dataset
145 RooRealVar* var ;
146 _rvIter->Reset() ;
147 Int_t i(0) ;
148 while((var=(RooRealVar*)_rvIter->Next())) {
149 var->setVal(_xmin[i] + _range[i]*_vec[i]) ;
150 i++ ;
151 }
152 return &_realVars ;
153}
int Int_t
Definition: RtypesCore.h:41
unsigned int UInt_t
Definition: RtypesCore.h:42
bool Bool_t
Definition: RtypesCore.h:59
double Double_t
Definition: RtypesCore.h:55
#define ClassImp(name)
Definition: Rtypes.h:363
const char * proto
Definition: civetweb.c:16604
Int_t getSize() const
TIterator * createIterator(Bool_t dir=kIterForward) const
Class RooAbsNumGenerator is the abstract base class for MC event generator implementations like RooAc...
virtual Double_t getMax(const char *name=0) const
virtual Double_t getMin(const char *name=0) const
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:53
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:28
Double_t getRealValue(const char *name, Double_t defVal=0, Bool_t verbose=kFALSE) const
Get value of a RooAbsReal stored in set with given name.
Definition: RooArgSet.cxx:472
virtual const RooArgSet * get(Int_t index) const
Return RooArgSet with coordinates of event 'index'.
Definition: RooDataSet.cxx:995
Class RooFoamGenerator is a generic toy monte carlo generator that implement the TFOAM sampling techn...
virtual ~RooFoamGenerator()
Destructor.
const RooArgSet * generateEvent(UInt_t remaining, Double_t &resampleRatio)
are we actually generating anything? (the cache always contains at least our function value)
RooTFoamBinding * _binding
static void registerSampler(RooNumGenFactory &fact)
Register RooIntegrator1D, is parameters and capabilities with RooNumIntFactory.
TIterator * _rvIter
RooNumGenConfig holds the configuration parameters of the various numeric integrators used by RooReal...
const RooArgSet & getConfigSection(const char *name) const
Retrieve configuration information specific to integrator with given name.
RooNumGenFactory is a factory to instantiate numeric integrators from a given function binding and a ...
Bool_t storeProtoSampler(RooAbsNumGenerator *proto, const RooArgSet &defConfig)
Method accepting registration of a prototype numeric integrator along with a RooArgSet of its default...
static TRandom * randomGenerator()
Return a pointer to a singleton random-number generator implementation.
Definition: RooRandom.cxx:54
RooRealVar represents a fundamental (non-derived) real valued object.
Definition: RooRealVar.h:36
virtual void setVal(Double_t value)
Set value of variable to 'value'.
Definition: RooRealVar.cxx:204
Lightweight interface adaptor that binds a RooAbsPdf to TFOAM.
Definition: TFoam.h:27
virtual void GetMCvect(Double_t *)
User may get generated MC point/vector with help of this method.
Definition: TFoam.cxx:1202
virtual void MakeEvent()
User subprogram.
Definition: TFoam.cxx:1152
virtual void Initialize()
Basic initialization of FOAM invoked by the user.
Definition: TFoam.cxx:357
virtual void SetnSampl(Long_t nSampl)
Definition: TFoam.h:126
virtual void SetChat(Int_t Chat)
Definition: TFoam.h:128
virtual void SetnCells(Long_t nCells)
Definition: TFoam.h:125
virtual void SetRho(TFoamIntegrand *Rho)
User may use this method to set the distribution object.
Definition: TFoam.cxx:1049
virtual void SetPseRan(TRandom *PseRan)
Definition: TFoam.h:121
virtual void SetkDim(Int_t kDim)
Definition: TFoam.h:124
Iterator abstract base class.
Definition: TIterator.h:30
virtual void Reset()=0
virtual TObject * Next()=0
STL namespace.