Rs 8 0 1_ Hypo Test Inverter Original

An example of using the HypoTestInverterOriginal class

Author: Gregory Schott
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Thursday, June 30, 2022 at 09:58 AM.

In [ ]:
%%cpp -d
#include "RooRealVar.h"
#include "RooConstVar.h"
#include "RooProdPdf.h"
#include "RooWorkspace.h"
#include "RooDataSet.h"
#include "RooPolynomial.h"
#include "RooAddPdf.h"
#include "RooExtendPdf.h"

#include "RooStats/HypoTestInverterOriginal.h"
#include "RooStats/HypoTestInverterResult.h"
#include "RooStats/HypoTestInverterPlot.h"
#include "RooStats/HybridCalculatorOriginal.h"

#include "TGraphErrors.h"
In [ ]:
%%cpp -d
// This is a workaround to make sure the namespace is used inside functions
using namespace RooFit;
using namespace RooStats;

Prepare the model

In [ ]:
RooRealVar lumi("lumi", "luminosity", 1);
RooRealVar r("r", "cross-section ratio", 3.74, 0, 50);
RooFormulaVar ns("ns", "1*r*lumi", RooArgList(lumi, r));
RooRealVar nb("nb", "background yield", 1);
RooRealVar x("x", "dummy observable", 0, 1);
RooConstVar p0(RooFit::RooConst(0));
RooPolynomial flatPdf("flatPdf", "flat PDF", x, p0);
RooAddPdf totPdf("totPdf", "S+B model", RooArgList(flatPdf, flatPdf), RooArgList(ns, nb));
RooExtendPdf bkgPdf("bkgPdf", "B-only model", flatPdf, nb);
RooDataSet *data = totPdf.generate(x, 1);

Prepare the calculator

In [ ]:
HybridCalculatorOriginal myhc(*data, totPdf, bkgPdf, 0, 0);
myhc.SetTestStatistic(2);
myhc.SetNumberOfToys(1000);
myhc.UseNuisance(false);

Run the hypothesis-test inversion

In [ ]:
HypoTestInverterOriginal myInverter(myhc, r);
myInverter.SetTestSize(0.10);
myInverter.UseCLs(true);

Myinverter.runfixedscan(5,1,6); scan for a 95% UL

In [ ]:
myInverter.RunAutoScan(3., 5, myInverter.Size() / 2, 0.005);

Run an alternative autoscan algorithm myInverter.RunAutoScan(1,6,myInverter.Size()/2,0.005,1); myInverter.RunOnePoint(3.9);

In [ ]:
HypoTestInverterResult *results = myInverter.GetInterval();

HypoTestInverterPlot myInverterPlot("myInverterPlot", "", results);
TGraphErrors *gr1 = myInverterPlot.MakePlot();
gr1->Draw("ALP");

double ulError = results->UpperLimitEstimatedError();

double upperLimit = results->UpperLimit();
std::cout << "The computed upper limit is: " << upperLimit << std::endl;
std::cout << "an estimated error on this upper limit is: " << ulError << std::endl;

Expected result: 4.10

Draw all canvases

In [ ]:
%jsroot on
gROOT->GetListOfCanvases()->Draw()