81BernsteinCorrection::BernsteinCorrection(
Double_t tolerance):
82 fMaxDegree(10), fMaxCorrection(100), fTolerance(tolerance){
90 const char* nominalName,
92 const char* dataName){
98 if (!
x || !nominal || !
data) {
99 cout <<
"Error: wrong name for pdf or variable or dataset - return -1 " << std::endl;
103 std::cout <<
"BernsteinCorrection::ImportCorrectedPdf - Doing initial Fit with nominal model " << std::endl;
112 if (nominalResult->
status() != 0 ) {
113 std::cout <<
"BernsteinCorrection::ImportCorrectedPdf - Error fit with nominal model failed - exit" << std::endl;
118 std::stringstream
log;
119 log <<
"------ Begin Bernstein Correction Log --------" << endl;
123 vector<RooRealVar*> coefficients;
128 bool keepGoing =
true;
133 std::stringstream str;
137 "Bernstein basis poly coefficient",
140 coefficients.push_back(newCoef);
157 if (result->
status() != 0) {
158 std::cout <<
"BernsteinCorrection::ImportCorrectedPdf - Error fit with corrected model failed" << std::endl;
165 q = 2*(lastNll - result->
minNll());
184 <<
" -log L("<<
degree-1<<
") = " << lastNll
191 lastNll = result->
minNll();
196 log <<
"------ End Bernstein Correction Log --------" << endl;
207 const char* nominalName,
209 const char* dataName,
211 TH1F* samplingDistExtra,
219 if (!
x || !nominal || !
data) {
220 cout <<
"Error: wrong name for pdf or variable or dataset ! " << std::endl;
225 std::stringstream
log;
226 log <<
"------ Begin Bernstein Correction Log --------" << endl;
232 vector<RooRealVar*> coefficients;
235 for(
int i = 0; i<=
degree+1; ++i) {
237 std::stringstream str;
241 "Bernstein basis poly coefficient",
247 coeffExtra.
add(*newCoef);
248 coefficients.push_back(newCoef);
257 =
new RooBernstein(
"polyNull",
"Bernstein poly", *
x, coeffNull);
261 =
new RooBernstein(
"polyExtra",
"Bernstein poly", *
x, coeffExtra);
265 =
new RooEffProd(
"corrected",
"",*nominal,*poly);
268 =
new RooEffProd(
"correctedNull",
"",*nominal,*polyNull);
271 =
new RooEffProd(
"correctedExtra",
"",*nominal,*polyExtra);
274 cout <<
"made pdfs, make toy generator" << endl;
284 if (printLevel < 0) {
292 for(
int i=0; i<nToys; ++i){
293 cout <<
"on toy " << i << endl;
317 samplingDist->
Fill(
q);
318 samplingDistExtra->
Fill(qExtra);
320 cout <<
"NLL Results: null " << resultNull->
minNll() <<
" ref = " << result->
minNll() <<
" extra" << resultExtra->
minNll() << endl;
static int DefaultPrintLevel()
static const std::string & DefaultMinimizerType()
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
RooAbsData is the common abstract base class for binned and unbinned datasets.
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
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&,...
virtual RooFitResult * fitTo(RooAbsData &data, 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(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none())
Fit PDF to given dataset.
void setConstant(Bool_t value=kTRUE)
Bernstein basis polynomials are positive-definite in the range [0,1].
RooDataSet is a container class to hold N-dimensional binned data.
RooDataSet is a container class to hold unbinned data.
RooFitResult is a container class to hold the input and output of a PDF fit to a dataset.
RooHistPdf implements a probablity density function sampled from a multidimensional histogram.
static RooMsgService & instance()
Return reference to singleton instance.
void setGlobalKillBelow(RooFit::MsgLevel level)
RooFit::MsgLevel globalKillBelow() const
RooRealVar represents a fundamental (non-derived) real valued object.
virtual void setVal(Double_t value)
Set value of variable to 'value'.
BernsteinCorrection is a utility in RooStats to augment a nominal PDF with a polynomial correction te...
Int_t ImportCorrectedPdf(RooWorkspace *, const char *, const char *, const char *)
Main method for Bernstein correction.
void CreateQSamplingDist(RooWorkspace *wks, const char *nominalName, const char *varName, const char *dataName, TH1F *, TH1F *, Int_t degree, Int_t nToys=500)
Create sampling distribution for q given degree-1 vs. degree corrections.
The RooWorkspace is a persistable container for RooFit projects.
RooAbsData * data(const char *name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found.
RooRealVar * var(const char *name) const
Retrieve real-valued variable (RooRealVar) with given name. A null pointer is returned if not found.
Bool_t import(const RooAbsArg &arg, const RooCmdArg &arg1=RooCmdArg(), const RooCmdArg &arg2=RooCmdArg(), const RooCmdArg &arg3=RooCmdArg(), const RooCmdArg &arg4=RooCmdArg(), const RooCmdArg &arg5=RooCmdArg(), const RooCmdArg &arg6=RooCmdArg(), const RooCmdArg &arg7=RooCmdArg(), const RooCmdArg &arg8=RooCmdArg(), const RooCmdArg &arg9=RooCmdArg())
Import a RooAbsArg object, e.g.
RooAbsPdf * pdf(const char *name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
1-D histogram with a float per channel (see TH1 documentation)}
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
RooCmdArg Hesse(Bool_t flag=kTRUE)
RooCmdArg Save(Bool_t flag=kTRUE)
RooCmdArg PrintLevel(Int_t code)
RooCmdArg Minimizer(const char *type, const char *alg=0)
RooCmdArg Minos(Bool_t flag=kTRUE)
@(#)root/roostats:$Id$ Author: George Lewis, Kyle Cranmer
static constexpr double degree
Double_t Prob(Double_t chi2, Int_t ndf)
Computation of the probability for a certain Chi-squared (chi2) and number of degrees of freedom (ndf...