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.
virtual Int_t numEntries() const
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)
RooArgList is a container object that can hold multiple RooAbsArg objects.
Bernstein basis polynomials are positive-definite in the range [0,1].
The RooDataHist is a container class to hold N-dimensional binned data.
RooDataSet is a container class to hold unbinned data.
The class RooEffProd implements the product of a PDF with an efficiency function.
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 variable that can be changed from the outside.
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)
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
MsgLevel
Verbosity level for RooMsgService::StreamConfig in RooMsgService.
Namespace for the RooStats classes.
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...