{
"cells": [
{
"cell_type": "markdown",
"id": "94785132",
"metadata": {},
"source": [
"# rf307_fullpereventerrors\n",
"Multidimensional models: full pdf with per-event errors\n",
"\n",
"\n",
"\n",
"\n",
"**Author:** Wouter Verkerke \n",
"This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Tuesday, March 19, 2024 at 07:15 PM."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "3a7cdd58",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:51.161038Z",
"iopub.status.busy": "2024-03-19T19:15:51.160694Z",
"iopub.status.idle": "2024-03-19T19:15:51.195652Z",
"shell.execute_reply": "2024-03-19T19:15:51.191244Z"
}
},
"outputs": [],
"source": [
"%%cpp -d\n",
"#include \"RooRealVar.h\"\n",
"#include \"RooDataSet.h\"\n",
"#include \"RooGaussian.h\"\n",
"#include \"RooGaussModel.h\"\n",
"#include \"RooDecay.h\"\n",
"#include \"RooLandau.h\"\n",
"#include \"RooProdPdf.h\"\n",
"#include \"RooHistPdf.h\"\n",
"#include \"RooPlot.h\"\n",
"#include \"TCanvas.h\"\n",
"#include \"TAxis.h\"\n",
"#include \"TH1.h\"\n",
"using namespace RooFit;"
]
},
{
"cell_type": "markdown",
"id": "011fd978",
"metadata": {},
"source": [
"B-physics pdf with per-event Gaussian resolution\n",
"----------------------------------------------------------------------------------------------"
]
},
{
"cell_type": "markdown",
"id": "a74d147e",
"metadata": {},
"source": [
"Observables"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "d00736f1",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:51.202593Z",
"iopub.status.busy": "2024-03-19T19:15:51.202300Z",
"iopub.status.idle": "2024-03-19T19:15:51.782540Z",
"shell.execute_reply": "2024-03-19T19:15:51.765580Z"
}
},
"outputs": [],
"source": [
"RooRealVar dt(\"dt\", \"dt\", -10, 10);\n",
"RooRealVar dterr(\"dterr\", \"per-event error on dt\", 0.01, 10);"
]
},
{
"cell_type": "markdown",
"id": "29542e79",
"metadata": {},
"source": [
"Build a gaussian resolution model scaled by the per-event error = gauss(dt,bias,sigma*dterr)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "51f6a95d",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:51.795846Z",
"iopub.status.busy": "2024-03-19T19:15:51.795461Z",
"iopub.status.idle": "2024-03-19T19:15:52.013889Z",
"shell.execute_reply": "2024-03-19T19:15:52.012743Z"
}
},
"outputs": [],
"source": [
"RooRealVar bias(\"bias\", \"bias\", 0, -10, 10);\n",
"RooRealVar sigma(\"sigma\", \"per-event error scale factor\", 1, 0.1, 10);\n",
"RooGaussModel gm(\"gm1\", \"gauss model scaled bt per-event error\", dt, bias, sigma, dterr);"
]
},
{
"cell_type": "markdown",
"id": "9dd23c01",
"metadata": {},
"source": [
"Construct decay(dt) (x) gauss1(dt|dterr)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "c79f9c76",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:52.018584Z",
"iopub.status.busy": "2024-03-19T19:15:52.018257Z",
"iopub.status.idle": "2024-03-19T19:15:52.235408Z",
"shell.execute_reply": "2024-03-19T19:15:52.232765Z"
}
},
"outputs": [],
"source": [
"RooRealVar tau(\"tau\", \"tau\", 1.548);\n",
"RooDecay decay_gm(\"decay_gm\", \"decay\", dt, tau, gm, RooDecay::DoubleSided);"
]
},
{
"cell_type": "markdown",
"id": "05cb4c88",
"metadata": {},
"source": [
"Construct empirical pdf for per-event error\n",
"-----------------------------------------------------------------"
]
},
{
"cell_type": "markdown",
"id": "659fe7ae",
"metadata": {},
"source": [
"Use landau pdf to get empirical distribution with long tail"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "ade6899b",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:52.242660Z",
"iopub.status.busy": "2024-03-19T19:15:52.242269Z",
"iopub.status.idle": "2024-03-19T19:15:52.593615Z",
"shell.execute_reply": "2024-03-19T19:15:52.592137Z"
}
},
"outputs": [],
"source": [
"RooLandau pdfDtErr(\"pdfDtErr\", \"pdfDtErr\", dterr, 1.0, 0.25);\n",
"std::unique_ptr expDataDterr{pdfDtErr.generate(dterr, 10000)};"
]
},
{
"cell_type": "markdown",
"id": "167e70d2",
"metadata": {},
"source": [
"Construct a histogram pdf to describe the shape of the dtErr distribution"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "46500292",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:52.599240Z",
"iopub.status.busy": "2024-03-19T19:15:52.598788Z",
"iopub.status.idle": "2024-03-19T19:15:52.813796Z",
"shell.execute_reply": "2024-03-19T19:15:52.812613Z"
}
},
"outputs": [],
"source": [
"std::unique_ptr expHistDterr{expDataDterr->binnedClone()};\n",
"RooHistPdf pdfErr(\"pdfErr\", \"pdfErr\", dterr, *expHistDterr);"
]
},
{
"cell_type": "markdown",
"id": "89d3677f",
"metadata": {},
"source": [
"Construct conditional product decay_dm(dt|dterr)*pdf(dter\n",
"r )\n",
"----------------------------------------------------------------------------------------------------------------------"
]
},
{
"cell_type": "markdown",
"id": "8a164d4f",
"metadata": {},
"source": [
"Construct production of conditional decay_dm(dt|dterr) with empirical pdfErr(dterr)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "367d8388",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:52.818457Z",
"iopub.status.busy": "2024-03-19T19:15:52.818134Z",
"iopub.status.idle": "2024-03-19T19:15:53.032395Z",
"shell.execute_reply": "2024-03-19T19:15:53.031208Z"
}
},
"outputs": [],
"source": [
"RooProdPdf model(\"model\", \"model\", pdfErr, Conditional(decay_gm, dt));"
]
},
{
"cell_type": "markdown",
"id": "ed8e8214",
"metadata": {},
"source": [
"(Alternatively you could also use the landau shape pdfDtErr)\n",
"RooProdPdf model(\"model\",\"model\",pdfDtErr,Conditional(decay_gm,dt)) ;"
]
},
{
"cell_type": "markdown",
"id": "0dec414e",
"metadata": {},
"source": [
"Sample, fit and plot product model\n",
"------------------------------------------------------------------"
]
},
{
"cell_type": "markdown",
"id": "7a147f7a",
"metadata": {},
"source": [
"Specify external dataset with dterr values to use model_dm as conditional pdf"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "9715a34e",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:53.039269Z",
"iopub.status.busy": "2024-03-19T19:15:53.038928Z",
"iopub.status.idle": "2024-03-19T19:15:53.258757Z",
"shell.execute_reply": "2024-03-19T19:15:53.257627Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"input_line_57:2:2: warning: 'data' shadows a declaration with the same name in the 'std' namespace; use '::data' to reference this declaration\n",
" std::unique_ptr data{model.generate({dt, dterr}, 10000)};\n",
" ^\n"
]
}
],
"source": [
"std::unique_ptr data{model.generate({dt, dterr}, 10000)};"
]
},
{
"cell_type": "markdown",
"id": "579859b1",
"metadata": {},
"source": [
"Fit conditional decay_dm(dt|dterr)\n",
"---------------------------------------------------------------------"
]
},
{
"cell_type": "markdown",
"id": "3706778a",
"metadata": {},
"source": [
"Specify dterr as conditional observable"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "8cb3c918",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:53.263589Z",
"iopub.status.busy": "2024-03-19T19:15:53.263205Z",
"iopub.status.idle": "2024-03-19T19:15:53.487361Z",
"shell.execute_reply": "2024-03-19T19:15:53.486145Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"input_line_61:2:15: error: reference to 'data' is ambiguous\n",
" model.fitTo(*data, PrintLevel(-1));\n",
" ^\n",
"input_line_57:2:30: note: candidate found by name lookup is 'data'\n",
" std::unique_ptr data{model.generate({dt, dterr}, 10000)};\n",
" ^\n",
"/usr/include/c++/9/bits/range_access.h:318:5: note: candidate found by name lookup is 'std::data'\n",
" data(initializer_list<_Tp> __il) noexcept\n",
" ^\n",
"/usr/include/c++/9/bits/range_access.h:289:5: note: candidate found by name lookup is 'std::data'\n",
" data(_Container& __cont) noexcept(noexcept(__cont.data()))\n",
" ^\n",
"/usr/include/c++/9/bits/range_access.h:299:5: note: candidate found by name lookup is 'std::data'\n",
" data(const _Container& __cont) noexcept(noexcept(__cont.data()))\n",
" ^\n",
"/usr/include/c++/9/bits/range_access.h:309:5: note: candidate found by name lookup is 'std::data'\n",
" data(_Tp (&__array)[_Nm]) noexcept\n",
" ^\n"
]
}
],
"source": [
"model.fitTo(*data, PrintLevel(-1));"
]
},
{
"cell_type": "markdown",
"id": "637dc867",
"metadata": {},
"source": [
"Plot conditional decay_dm(dt|dterr)\n",
"---------------------------------------------------------------------"
]
},
{
"cell_type": "markdown",
"id": "657e5daf",
"metadata": {},
"source": [
"Make two-dimensional plot of conditional pdf in (dt,dterr)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "585b0011",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:53.493905Z",
"iopub.status.busy": "2024-03-19T19:15:53.493517Z",
"iopub.status.idle": "2024-03-19T19:15:53.712404Z",
"shell.execute_reply": "2024-03-19T19:15:53.710316Z"
}
},
"outputs": [],
"source": [
"TH1 *hh_model = model.createHistogram(\"hh_model\", dt, Binning(50), YVar(dterr, Binning(50)));\n",
"hh_model->SetLineColor(kBlue);"
]
},
{
"cell_type": "markdown",
"id": "17ba9168",
"metadata": {},
"source": [
"Make projection of data an dt"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "3fd8dfc8",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:53.722858Z",
"iopub.status.busy": "2024-03-19T19:15:53.722445Z",
"iopub.status.idle": "2024-03-19T19:15:53.941325Z",
"shell.execute_reply": "2024-03-19T19:15:53.940133Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"input_line_63:3:1: error: reference to 'data' is ambiguous\n",
"data->plotOn(frame);\n",
"^\n",
"input_line_57:2:30: note: candidate found by name lookup is 'data'\n",
" std::unique_ptr data{model.generate({dt, dterr}, 10000)};\n",
" ^\n",
"/usr/include/c++/9/bits/range_access.h:318:5: note: candidate found by name lookup is 'std::data'\n",
" data(initializer_list<_Tp> __il) noexcept\n",
" ^\n",
"/usr/include/c++/9/bits/range_access.h:289:5: note: candidate found by name lookup is 'std::data'\n",
" data(_Container& __cont) noexcept(noexcept(__cont.data()))\n",
" ^\n",
"/usr/include/c++/9/bits/range_access.h:299:5: note: candidate found by name lookup is 'std::data'\n",
" data(const _Container& __cont) noexcept(noexcept(__cont.data()))\n",
" ^\n",
"/usr/include/c++/9/bits/range_access.h:309:5: note: candidate found by name lookup is 'std::data'\n",
" data(_Tp (&__array)[_Nm]) noexcept\n",
" ^\n"
]
}
],
"source": [
"RooPlot *frame = dt.frame(Title(\"Projection of model(dt|dterr) on dt\"));\n",
"data->plotOn(frame);\n",
"model.plotOn(frame);"
]
},
{
"cell_type": "markdown",
"id": "3e887500",
"metadata": {},
"source": [
"Draw all frames on canvas"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "c8e34720",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:53.949877Z",
"iopub.status.busy": "2024-03-19T19:15:53.949516Z",
"iopub.status.idle": "2024-03-19T19:15:54.171892Z",
"shell.execute_reply": "2024-03-19T19:15:54.165875Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"input_line_65:2:3: error: use of undeclared identifier 'frame'\n",
" (frame->GetYaxis()->SetTitleOffset(1.6000000000000001))\n",
" ^\n",
"Error in : Error evaluating expression (frame->GetYaxis()->SetTitleOffset(1.6000000000000001))\n",
"Execution of your code was aborted.\n"
]
}
],
"source": [
"TCanvas *c = new TCanvas(\"rf307_fullpereventerrors\", \"rf307_fullperventerrors\", 800, 400);\n",
"c->Divide(2);\n",
"c->cd(1);\n",
"gPad->SetLeftMargin(0.20);\n",
"hh_model->GetZaxis()->SetTitleOffset(2.5);\n",
"hh_model->Draw(\"surf\");\n",
"c->cd(2);\n",
"gPad->SetLeftMargin(0.15);\n",
"frame->GetYaxis()->SetTitleOffset(1.6);\n",
"frame->Draw();"
]
},
{
"cell_type": "markdown",
"id": "d87a3ed0",
"metadata": {},
"source": [
"Draw all canvases "
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "aa214f24",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:15:54.180843Z",
"iopub.status.busy": "2024-03-19T19:15:54.180450Z",
"iopub.status.idle": "2024-03-19T19:15:54.582758Z",
"shell.execute_reply": "2024-03-19T19:15:54.581654Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"gROOT->GetListOfCanvases()->Draw()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "ROOT C++",
"language": "c++",
"name": "root"
},
"language_info": {
"codemirror_mode": "text/x-c++src",
"file_extension": ".C",
"mimetype": " text/x-c++src",
"name": "c++"
}
},
"nbformat": 4,
"nbformat_minor": 5
}