{
"cells": [
{
"cell_type": "markdown",
"id": "c47e7901",
"metadata": {},
"source": [
"# multifit\n",
" Fitting multiple functions to different ranges of a 1-D histogram\n",
" Example showing how to fit in a sub-range of an histogram\n",
" A histogram is created and filled with the bin contents and errors\n",
" defined in the table below.\n",
" Three Gaussians are fitted in sub-ranges of this histogram.\n",
" A new function (a sum of 3 Gaussians) is fitted on another subrange\n",
" Note that when fitting simple functions, such as Gaussians, the initial\n",
" values of parameters are automatically computed by ROOT.\n",
" In the more complicated case of the sum of 3 Gaussians, the initial values\n",
" of parameters must be given. In this particular case, the initial values\n",
" are taken from the result of the individual fits.\n",
"\n",
"\n",
"\n",
"\n",
"**Author:** Jonas Rembser, Rene Brun (C++ version) \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:08 PM."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "d803499c",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:00.844772Z",
"iopub.status.busy": "2024-03-19T19:09:00.844373Z",
"iopub.status.idle": "2024-03-19T19:09:03.456854Z",
"shell.execute_reply": "2024-03-19T19:09:03.453217Z"
}
},
"outputs": [],
"source": [
"import ROOT\n",
"\n",
"import numpy as np\n",
"\n",
"n_x = 49"
]
},
{
"cell_type": "markdown",
"id": "3c60402e",
"metadata": {},
"source": [
"fmt: off"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "589adaf9",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:03.471459Z",
"iopub.status.busy": "2024-03-19T19:09:03.470957Z",
"iopub.status.idle": "2024-03-19T19:09:03.590443Z",
"shell.execute_reply": "2024-03-19T19:09:03.588990Z"
}
},
"outputs": [],
"source": [
"x = np.array( [ 1.913521, 1.953769, 2.347435, 2.883654, 3.493567, 4.047560,\n",
" 4.337210, 4.364347, 4.563004, 5.054247, 5.194183, 5.380521, 5.303213,\n",
" 5.384578, 5.563983, 5.728500, 5.685752, 5.080029, 4.251809, 3.372246,\n",
" 2.207432, 1.227541, 0.8597788, 0.8220503, 0.8046592, 0.7684097, 0.7469761,\n",
" 0.8019787, 0.8362375, 0.8744895, 0.9143721, 0.9462768, 0.9285364,\n",
" 0.8954604, 0.8410891, 0.7853871, 0.7100883, 0.6938808, 0.7363682,\n",
" 0.7032954, 0.6029015, 0.5600163, 0.7477068, 1.188785, 1.938228, 2.602717,\n",
" 3.472962, 4.465014, 5.177035, ], dtype=np.float32,)"
]
},
{
"cell_type": "markdown",
"id": "cee2e1b3",
"metadata": {},
"source": [
"fmt: on"
]
},
{
"cell_type": "markdown",
"id": "07b5a836",
"metadata": {},
"source": [
"The histogram are filled with bins defined in the array x."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "b8ced6bf",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:03.596004Z",
"iopub.status.busy": "2024-03-19T19:09:03.595594Z",
"iopub.status.idle": "2024-03-19T19:09:03.809197Z",
"shell.execute_reply": "2024-03-19T19:09:03.807678Z"
}
},
"outputs": [],
"source": [
"h = ROOT.TH1F(\"h\", \"Example of several fits in subranges\", n_x, 85, 134)\n",
"h.SetMaximum(7)\n",
"\n",
"for i, x_i in enumerate(x):\n",
" h.SetBinContent(i + 1, x[i])"
]
},
{
"cell_type": "markdown",
"id": "5fe06a38",
"metadata": {},
"source": [
"Define the parameter array for the total function."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "2c2ffaf7",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:03.814612Z",
"iopub.status.busy": "2024-03-19T19:09:03.814205Z",
"iopub.status.idle": "2024-03-19T19:09:03.946111Z",
"shell.execute_reply": "2024-03-19T19:09:03.927740Z"
}
},
"outputs": [],
"source": [
"par = np.zeros(9)"
]
},
{
"cell_type": "markdown",
"id": "752ef672",
"metadata": {},
"source": [
"Three TF1 objects are created, one for each subrange."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "34016b8b",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:03.951273Z",
"iopub.status.busy": "2024-03-19T19:09:03.950868Z",
"iopub.status.idle": "2024-03-19T19:09:04.140486Z",
"shell.execute_reply": "2024-03-19T19:09:04.135134Z"
}
},
"outputs": [],
"source": [
"g1 = ROOT.TF1(\"g1\", \"gaus\", 85, 95)\n",
"g2 = ROOT.TF1(\"g2\", \"gaus\", 98, 108)\n",
"g3 = ROOT.TF1(\"g3\", \"gaus\", 110, 121)"
]
},
{
"cell_type": "markdown",
"id": "e0b21051",
"metadata": {},
"source": [
"The total is the sum of the three, each has three parameters."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "009b68be",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:04.168017Z",
"iopub.status.busy": "2024-03-19T19:09:04.167595Z",
"iopub.status.idle": "2024-03-19T19:09:04.304675Z",
"shell.execute_reply": "2024-03-19T19:09:04.302168Z"
}
},
"outputs": [],
"source": [
"total = ROOT.TF1(\"total\", \"gaus(0)+gaus(3)+gaus(6)\", 85, 125)\n",
"total.SetLineColor(2)"
]
},
{
"cell_type": "markdown",
"id": "1ac1373d",
"metadata": {},
"source": [
"The canvas that the histograms and fit functions are drawn on."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "89b4a956",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:04.310517Z",
"iopub.status.busy": "2024-03-19T19:09:04.310125Z",
"iopub.status.idle": "2024-03-19T19:09:04.507287Z",
"shell.execute_reply": "2024-03-19T19:09:04.506003Z"
}
},
"outputs": [],
"source": [
"c = ROOT.TCanvas(\"multifit\", \"multifit\", 800, 400)"
]
},
{
"cell_type": "markdown",
"id": "90092950",
"metadata": {},
"source": [
"Fit each function and add it to the list of functions. By default, TH1::Fit()\n",
"fits the function on the defined histogram range. You can specify the \"R\"\n",
"option in the second parameter of TH1::Fit() to restrict the fit to the range\n",
"specified in the TF1 constructor. Alternatively, you can also specify the\n",
"range in the call to TH1::Fit(), which we demonstrate here with the 3rd\n",
"Gaussian. The \"+\" option needs to be added to the later fits to not replace\n",
"existing fitted functions in the histogram."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "0b0403c8",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:04.513643Z",
"iopub.status.busy": "2024-03-19T19:09:04.513067Z",
"iopub.status.idle": "2024-03-19T19:09:04.767901Z",
"shell.execute_reply": "2024-03-19T19:09:04.766581Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************\n",
"Minimizer is Minuit2 / Migrad\n",
"Chi2 = 0.0848003\n",
"NDf = 7\n",
"Edm = 8.86911e-08\n",
"NCalls = 106\n",
"Constant = 4.96664 +/- 2.83221 \n",
"Mean = 95.4663 +/- 12.3905 \n",
"Sigma = 6.82779 +/- 7.49131 \t (limited)\n",
"****************************************\n",
"Minimizer is Minuit2 / Migrad\n",
"Chi2 = 0.0771026\n",
"NDf = 7\n",
"Edm = 1.00182e-07\n",
"NCalls = 73\n",
"Constant = 5.96312 +/- 1.14355 \n",
"Mean = 100.467 +/- 1.53372 \n",
"Sigma = 3.54806 +/- 1.16899 \t (limited)\n",
"****************************************\n",
"Minimizer is Minuit2 / Migrad\n",
"Chi2 = 0.00877492\n",
"NDf = 8\n",
"Edm = 4.98832e-06\n",
"NCalls = 87\n",
"Constant = 0.912053 +/- 0.435309 \n",
"Mean = 116.304 +/- 8.32344 \n",
"Sigma = 8.38103 +/- 18.5139 \t (limited)\n"
]
}
],
"source": [
"h.Fit(g1, \"R\")\n",
"h.Fit(g2, \"R+\")\n",
"h.Fit(g3, \"+\", \"\", 110, 121);"
]
},
{
"cell_type": "markdown",
"id": "bb126654",
"metadata": {},
"source": [
"Get the parameters from the fit."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "d7867090",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:04.772897Z",
"iopub.status.busy": "2024-03-19T19:09:04.772556Z",
"iopub.status.idle": "2024-03-19T19:09:04.905981Z",
"shell.execute_reply": "2024-03-19T19:09:04.903033Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 4.96663958 95.46632975 6.8277931 5.9631179 100.46745499\n",
" 3.54806038 0.91205321 116.30403822 8.3810307 ]\n"
]
}
],
"source": [
"g1.GetParameters(par[:3])\n",
"g2.GetParameters(par[3:6])\n",
"g3.GetParameters(par[6:])\n",
"\n",
"print(par)"
]
},
{
"cell_type": "markdown",
"id": "4e72418e",
"metadata": {},
"source": [
"Use the parameters on the sum."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "b84ed7c3",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:04.912122Z",
"iopub.status.busy": "2024-03-19T19:09:04.911189Z",
"iopub.status.idle": "2024-03-19T19:09:05.156150Z",
"shell.execute_reply": "2024-03-19T19:09:05.154490Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************\n",
"Minimizer is Minuit2 / Migrad\n",
"Chi2 = 0.31282\n",
"NDf = 31\n",
"Edm = 3.25006e-06\n",
"NCalls = 495\n",
"p0 = 4.91052 +/- 1.41324 \n",
"p1 = 94.4492 +/- 3.71244 \n",
"p2 = 5.9461 +/- 2.41662 \n",
"p3 = 3.22456 +/- 3.11384 \n",
"p4 = 101.662 +/- 1.67862 \n",
"p5 = 2.48631 +/- 1.91151 \n",
"p6 = 0.911626 +/- 0.368736 \n",
"p7 = 117.581 +/- 5.06092 \n",
"p8 = 7.59194 +/- 8.78217 \n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n",
"Error in : TFitResult is empty - use the fit option S\n"
]
}
],
"source": [
"total.SetParameters(par)\n",
"\n",
"h.Draw()\n",
"h.Fit(total, \"R+\")"
]
},
{
"cell_type": "markdown",
"id": "2ec55f98",
"metadata": {},
"source": [
"Save the plot for later inspection."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "f4f57712",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:05.160393Z",
"iopub.status.busy": "2024-03-19T19:09:05.160002Z",
"iopub.status.idle": "2024-03-19T19:09:05.450567Z",
"shell.execute_reply": "2024-03-19T19:09:05.449344Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Info in : png file multifit.png has been created\n"
]
}
],
"source": [
"c.SaveAs(\"multifit.png\")"
]
},
{
"cell_type": "markdown",
"id": "0dc75b93",
"metadata": {},
"source": [
"Draw all canvases "
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "b9636dc7",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:09:05.455641Z",
"iopub.status.busy": "2024-03-19T19:09:05.455188Z",
"iopub.status.idle": "2024-03-19T19:09:05.689601Z",
"shell.execute_reply": "2024-03-19T19:09:05.688490Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from ROOT import gROOT \n",
"gROOT.GetListOfCanvases().Draw()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}