%%cpp -d #include "RooGlobalFunc.h" #include "RooStats/ConfInterval.h" #include "RooStats/PointSetInterval.h" #include "RooStats/ConfidenceBelt.h" #include "RooStats/FeldmanCousins.h" #include "RooStats/ModelConfig.h" #include "RooWorkspace.h" #include "RooDataSet.h" #include "RooRealVar.h" #include "RooConstVar.h" #include "RooAddition.h" #include "RooDataHist.h" #include "RooPoisson.h" #include "RooPlot.h" #include "TCanvas.h" #include "TTree.h" #include "TH1F.h" #include "TMarker.h" #include "TStopwatch.h" #include using namespace RooFit; using namespace RooStats; TStopwatch t; t.Start(); RooRealVar x("x", "", 1, 0, 50); RooRealVar mu("mu", "", 2.5, 0, 15); // with a limit on mu>=0 RooConstVar b("b", "", 3.); RooAddition mean("mean", "", RooArgList(mu, b)); RooPoisson pois("pois", "", x, mean); RooArgSet parameters(mu); std::unique_ptr data{pois.generate({x}, 1)}; data->Print("v"); TCanvas *dataCanvas = new TCanvas("dataCanvas"); RooPlot *frame = x.frame(); data->plotOn(frame); frame->Draw(); dataCanvas->Update(); RooWorkspace *w = new RooWorkspace(); ModelConfig modelConfig("poissonProblem", w); modelConfig.SetPdf(pois); modelConfig.SetParametersOfInterest(parameters); modelConfig.SetObservables(RooArgSet(x)); w->Print(); RooStats::FeldmanCousins fc(*data, modelConfig); fc.SetTestSize(.05); // set size of test fc.UseAdaptiveSampling(true); fc.FluctuateNumDataEntries(false); // number counting analysis: dataset always has 1 entry with N events observed fc.SetNBins(100); // number of points to test per parameter PointSetInterval *interval = (PointSetInterval *)fc.GetInterval(); TCanvas *intervalCanvas = new TCanvas("intervalCanvas"); std::cout << "is this point in the interval? " << interval->IsInInterval(parameters) << std::endl; std::cout << "interval is [" << interval->LowerLimit(mu) << ", " << interval->UpperLimit(mu) << "]" << endl; RooDataHist *parameterScan = (RooDataHist *)fc.GetPointsToScan(); TH1F *hist = (TH1F *)parameterScan->createHistogram("mu", Binning(30)); hist->Draw(); RooArgSet *tmpPoint; for (Int_t i = 0; i < parameterScan->numEntries(); ++i) { // cout << "on parameter point " << i << " out of " << parameterScan->numEntries() << endl; // get a parameter point from the list of points to test. tmpPoint = (RooArgSet *)parameterScan->get(i)->clone("temp"); TMarker *mark = new TMarker(tmpPoint->getRealValue("mu"), 1, 25); if (interval->IsInInterval(*tmpPoint)) mark->SetMarkerColor(kBlue); else mark->SetMarkerColor(kRed); mark->Draw("s"); // delete tmpPoint; // delete mark; } t.Stop(); t.Print(); gROOT->GetListOfCanvases()->Draw()