Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooGenFitStudy.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 RooGenFitStudy.cxx
19\class RooGenFitStudy
20\ingroup Roofitcore
21
22RooGenFitStudy is an abstract base class for RooStudyManager modules
23
24**/
25
26#include "Riostream.h"
27
28#include "RooGenFitStudy.h"
29#include "RooWorkspace.h"
30#include "RooMsgService.h"
31#include "RooDataSet.h"
32#include "RooAbsPdf.h"
33#include "RooRealVar.h"
34#include "RooGlobalFunc.h"
35#include "RooFitResult.h"
36
37
38using namespace std ;
39
41 ;
42
43
44////////////////////////////////////////////////////////////////////////////////
45/// Constructor
46
47RooGenFitStudy::RooGenFitStudy(const char* name, const char* title) :
48 RooAbsStudy(name?name:"RooGenFitStudy",title?title:"RooGenFitStudy"),
49 _genPdf(0),
50 _fitPdf(0),
51 _genSpec(0),
52 _nllVar(0),
53 _ngenVar(0),
54 _initParams(0)
55{
56}
57
58
59
60////////////////////////////////////////////////////////////////////////////////
61/// Copy constructor
62
64 RooAbsStudy(other),
65 _genPdfName(other._genPdfName),
66 _genObsName(other._genObsName),
67 _fitPdfName(other._fitPdfName),
68 _fitObsName(other._fitObsName),
69 _genPdf(0),
70 _fitPdf(0),
71 _genSpec(0),
72 _nllVar(0),
73 _ngenVar(0),
74 _initParams(0)
75{
76 for(TObject * o : other._genOpts) _genOpts.Add(o->Clone());
77 for(TObject * o : other._fitOpts) _fitOpts.Add(o->Clone());
78}
79
80
81
82////////////////////////////////////////////////////////////////////////////////
83
85{
86}
87
88
89
90////////////////////////////////////////////////////////////////////////////////
91/// Function called after insertion into workspace
92
94{
95 bool ret = false ;
96
97 RooAbsPdf* pdf = w.pdf(_genPdfName.c_str()) ;
98 if (pdf) {
99 _genPdf = pdf ;
100 } else {
101 coutE(InputArguments) << "RooGenFitStudy(" << GetName() << ") ERROR: generator p.d.f named " << _genPdfName << " not found in workspace " << w.GetName() << endl ;
102 ret = true ;
103 }
104
105 _genObs.add(w.argSet(_genObsName)) ;
106 if (_genObs.empty()) {
107 coutE(InputArguments) << "RooGenFitStudy(" << GetName() << ") ERROR: no generator observables defined" << endl ;
108 ret = true ;
109 }
110
111 pdf = w.pdf(_fitPdfName.c_str()) ;
112 if (pdf) {
113 _fitPdf = pdf ;
114 } else {
115 coutE(InputArguments) << "RooGenFitStudy(" << GetName() << ") ERROR: fitting p.d.f named " << _fitPdfName << " not found in workspace " << w.GetName() << endl ;
116 ret = true ;
117 }
118
119 _fitObs.add(w.argSet(_fitObsName)) ;
120 if (_fitObs.empty()) {
121 coutE(InputArguments) << "RooGenFitStudy(" << GetName() << ") ERROR: no fitting observables defined" << endl ;
122 ret = true ;
123 }
124
125 return ret ;
126}
127
128
129
130////////////////////////////////////////////////////////////////////////////////
131
132void RooGenFitStudy::setGenConfig(const char* pdfName, const char* obsName, const RooCmdArg& arg1,const RooCmdArg& arg2,const RooCmdArg& arg3)
133{
134 _genPdfName = pdfName ;
135 _genObsName = obsName ;
136 _genOpts.Add(arg1.Clone()) ;
137 _genOpts.Add(arg2.Clone()) ;
138 _genOpts.Add(arg3.Clone()) ;
139}
140
141
142
143////////////////////////////////////////////////////////////////////////////////
144
145void RooGenFitStudy::setFitConfig(const char* pdfName, const char* obsName, const RooCmdArg& arg1,const RooCmdArg& arg2,const RooCmdArg& arg3)
146{
147 _fitPdfName = pdfName ;
148 _fitObsName = obsName ;
149 _fitOpts.Add(arg1.Clone()) ;
150 _fitOpts.Add(arg2.Clone()) ;
151 _fitOpts.Add(arg3.Clone()) ;
152}
153
154
155
156////////////////////////////////////////////////////////////////////////////////
157/// One-time initialization of study
158
160{
161 _nllVar = new RooRealVar("NLL","-log(Likelihood)",0) ;
162 _ngenVar = new RooRealVar("ngen","number of generated events",0) ;
163
164 _params = std::unique_ptr<RooArgSet>{_fitPdf->getParameters(_genObs)};
165 RooArgSet modelParams(*_params) ;
167 _params->add(*_nllVar) ;
168 _params->add(*_ngenVar) ;
169
171
172 registerSummaryOutput(*_params,modelParams) ;
173 return false ;
174}
175
176
177
178////////////////////////////////////////////////////////////////////////////////
179/// Execute one study iteration
180
182{
183 _params->assign(*_initParams) ;
184 std::unique_ptr<RooDataSet> data{_genPdf->generate(*_genSpec)};
185 std::unique_ptr<RooFitResult> fr{_fitPdf->fitTo(*data,RooFit::Save(true),(RooCmdArg&)*_fitOpts.At(0),(RooCmdArg&)*_fitOpts.At(1),(RooCmdArg&)*_fitOpts.At(2))};
186
187 if (fr->status()==0) {
188 _ngenVar->setVal(data->sumEntries()) ;
189 _nllVar->setVal(fr->minNll()) ;
191 storeDetailedOutput(std::move(fr)) ;
192 }
193
194 return false ;
195}
196
197
198
199////////////////////////////////////////////////////////////////////////////////
200/// Finalization of study
201
203{
204 delete _nllVar ;
205 delete _ngenVar ;
206 delete _initParams ;
207 delete _genSpec ;
208 _params.reset();
209 _nllVar = 0 ;
210 _ngenVar = 0 ;
211 _initParams = 0 ;
212 _genSpec = 0 ;
213
214
215 return false ;
216}
217
218
219////////////////////////////////////////////////////////////////////////////////
220
221void RooGenFitStudy::Print(Option_t* /*options*/) const
222{
223}
224
225
#define coutE(a)
const char Option_t
Definition RtypesCore.h:66
#define ClassImp(name)
Definition Rtypes.h:377
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
char name[80]
Definition TGX11.cxx:110
RooFit::OwningPtr< RooArgSet > getParameters(const RooAbsData *data, bool stripDisconnected=true) const
Create a list of leaf nodes in the arg tree starting with ourself as top node that don't match any of...
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
GenSpec * prepareMultiGen(const RooArgSet &whatVars, const RooCmdArg &arg1=RooCmdArg::none(), 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())
Prepare GenSpec configuration object for efficient generation of multiple datasets from identical spe...
RooFit::OwningPtr< RooDataSet > generate(const RooArgSet &whatVars, Int_t nEvents, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none())
See RooAbsPdf::generate(const RooArgSet&,const RooCmdArg&,const RooCmdArg&,const RooCmdArg&,...
Definition RooAbsPdf.h:60
virtual RooFit::OwningPtr< RooFitResult > fitTo(RooAbsData &data, const RooLinkedList &cmdList={})
Fit PDF to given dataset.
RooAbsStudy is an abstract base class for RooStudyManager modules.
Definition RooAbsStudy.h:33
void storeDetailedOutput(bool flag)
Definition RooAbsStudy.h:47
void storeSummaryOutput(const RooArgSet &vars)
void registerSummaryOutput(const RooArgSet &allVars, const RooArgSet &varsWithError=RooArgSet(), const RooArgSet &varsWithAsymError=RooArgSet())
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:55
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
Definition RooArgSet.h:178
RooCmdArg is a named container for two doubles, two integers two object points and three string point...
Definition RooCmdArg.h:26
TObject * Clone(const char *newName=nullptr) const override
Make a clone of an object using the Streamer facility.
Definition RooCmdArg.h:57
RooGenFitStudy is an abstract base class for RooStudyManager modules.
bool initialize() override
One-time initialization of study.
void setGenConfig(const char *pdfName, const char *obsName, const RooCmdArg &arg1=RooCmdArg(), const RooCmdArg &arg2=RooCmdArg(), const RooCmdArg &arg3=RooCmdArg())
RooArgSet * _initParams
!
RooAbsPdf * _fitPdf
!
RooArgSet _fitObs
!
std::string _fitPdfName
std::string _genPdfName
std::string _fitObsName
~RooGenFitStudy() override
RooLinkedList _genOpts
RooGenFitStudy(const char *name=nullptr, const char *title=nullptr)
Constructor.
RooAbsPdf::GenSpec * _genSpec
!
RooRealVar * _nllVar
!
std::unique_ptr< RooArgSet > _params
!
bool execute() override
Execute one study iteration.
RooLinkedList _fitOpts
RooRealVar * _ngenVar
!
void setFitConfig(const char *pdfName, const char *obsName, const RooCmdArg &arg1=RooCmdArg(), const RooCmdArg &arg2=RooCmdArg(), const RooCmdArg &arg3=RooCmdArg())
RooArgSet _genObs
!
bool finalize() override
Finalization of study.
RooAbsPdf * _genPdf
!
std::string _genObsName
bool attach(RooWorkspace &w) override
Function called after insertion into workspace.
void Print(Option_t *options=nullptr) const override
This method must be overridden when a class wants to print itself.
TObject * At(int index) const
Return object stored in sequential position given by index.
virtual void Add(TObject *arg)
RooRealVar represents a variable that can be changed from the outside.
Definition RooRealVar.h:40
void setVal(double value) override
Set value of variable to 'value'.
The RooWorkspace is a persistable container for RooFit projects.
const char * GetName() const override
Returns name of object.
Definition TNamed.h:47
Mother of all ROOT objects.
Definition TObject.h:41
RooCmdArg Save(bool flag=true)