{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Binned fits solutions: Exercise 12.2 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Generate a file ```dati_2.txt``` containing 10,000 events\n", "distributed according to a Gaussian probability distribution.\n", " * Write a program that fits the events saved in the file ```dati_2.txt```\n", " using the binned and unbinned maximum likelihood methods,\n", " and compare the results of the two techniques." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### sample generation and file saving" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000\n", "Done\n" ] } ], "source": [ "from myrand import generate_TCL_ms\n", "\n", "N_evt = 10_000\n", "sample_gaus = generate_TCL_ms (1., 0.7, N_evt)\n", "print (len (sample_gaus))\n", "\n", "with open (r'dati_2.txt', 'w') as fp :\n", " for item in sample_gaus:\n", " # write each item on a new line\n", " fp.write(\"%s\\n\" % item)\n", " print('Done')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### fit with binned maximum likelihood" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 104.1 (χ²/ndof = 1.1) Nfcn = 34
EDM = 1.65e-09 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 N_signal 10.0e3 0.1e3 0
1 mu 1.003 0.007
2 sigma 0.699 0.005 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
N_signal mu sigma
N_signal 1e+04 0 0.119e-3
mu 0 4.88e-05 0
sigma 0.119e-3 0 2.45e-05
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-09-15T11:57:18.807497\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.7.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 104.1 (χ²/ndof = 1.1) │ Nfcn = 34 │\n", "│ EDM = 1.65e-09 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬──────────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼──────────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ N_signal │ 10.0e3 │ 0.1e3 │ │ │ 0 │ │ │\n", "│ 1 │ mu │ 1.003 │ 0.007 │ │ │ │ │ │\n", "│ 2 │ sigma │ 0.699 │ 0.005 │ │ │ 0 │ │ │\n", "└───┴──────────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌──────────┬────────────────────────────┐\n", "│ │ N_signal mu sigma │\n", "├──────────┼────────────────────────────┤\n", "│ N_signal │ 1e+04 0 0.119e-3 │\n", "│ mu │ 0 4.88e-05 0 │\n", "│ sigma │ 0.119e-3 0 2.45e-05 │\n", "└──────────┴────────────────────────────┘" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from iminuit import Minuit\n", "from math import floor, ceil\n", "from iminuit.cost import ExtendedBinnedNLL\n", "from matplotlib import pyplot as plt\n", "from scipy.stats import expon, norm\n", "\n", "\n", "bin_content, bin_edges = np.histogram (sample_gaus, bins = floor (N_evt/100), \n", " range = (floor (min (sample_gaus)), ceil (max (sample_gaus))))\n", "\n", "def mod_signal_bin (bin_edges, N_signal, mu, sigma):\n", " return N_signal * norm.cdf (bin_edges, mu, sigma)\n", "\n", "my_cost_func_bin = ExtendedBinnedNLL (bin_content, bin_edges, mod_signal_bin)\n", "my_minuit_bin = Minuit (\n", " my_cost_func_bin, \n", " N_signal = sum (bin_content), \n", " mu = np.mean (sample_gaus), \n", " sigma = np.std (sample_gaus),\n", " )\n", "my_minuit_bin.limits['N_signal', 'sigma'] = (0, None)\n", "my_minuit_bin.migrad ()\n", "assert my_minuit_bin.valid\n", "display (my_minuit_bin)\n", "\n", "# get the estimate of the N_background and tau parameter for the final fit\n", "mean_bin = [my_minuit_bin.values[1], my_minuit_bin.errors[1]]\n", "sigma_bin = [my_minuit_bin.values[2], my_minuit_bin.errors[2]]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### fit with unbinned maximum likelihood" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 2.12e+04 Nfcn = 22
EDM = 1.73e-15 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 mu 1.003 0.007
1 sigma 0.698 0.005 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mu sigma
mu 4.88e-05 0
sigma 0 2.44e-05
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-09-15T11:58:09.312357\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.7.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 2.12e+04 │ Nfcn = 22 │\n", "│ EDM = 1.73e-15 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ mu │ 1.003 │ 0.007 │ │ │ │ │ │\n", "│ 1 │ sigma │ 0.698 │ 0.005 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬───────────────────┐\n", "│ │ mu sigma │\n", "├───────┼───────────────────┤\n", "│ mu │ 4.88e-05 0 │\n", "│ sigma │ 0 2.44e-05 │\n", "└───────┴───────────────────┘" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from iminuit.cost import UnbinnedNLL\n", "\n", "def mod_signal_unb (x, mu, sigma) :\n", " return norm.pdf(x, mu, sigma)\n", "\n", "my_cost_func_unb = UnbinnedNLL (sample_gaus, mod_signal_unb)\n", "\n", "my_minuit_unb = Minuit (\n", " my_cost_func_unb, \n", " mu = np.mean (sample_gaus), \n", " sigma = np.std (sample_gaus)\n", " )\n", "my_minuit_unb.limits[\"sigma\"] = (0, None)\n", "my_minuit_unb.migrad ()\n", "assert my_minuit_unb.valid\n", "display (my_minuit_unb)\n", "\n", "mean_unb = [my_minuit_unb.values[0], my_minuit_unb.errors[0]]\n", "sigma_unb = [my_minuit_unb.values[1], my_minuit_unb.errors[1]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### comparison between the two" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAF6CAYAAAAd5oJ2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABKfklEQVR4nO3deVxU9f4/8NewzAwgi6hsKgKCCKmQGoQrKqWpKOEN85qKeS1NUyszlQxQyy3cuHorTXC5v7I0kUTUXHBJgQyX3BXJhbUSQWQRmM/vD7/MbQQEbIaR0+v5eMzjwZzzmc/5vD8gvDznc2ZkQggBIiIiIgkz0PcAiIiIiHSNgYeIiIgkj4GHiIiIJI+Bh4iIiCSPgYeIiIgkj4GHiIiIJI+Bh4iIiCSPgYeIiIgkj4GHiIiIJI+Bh4iIiCSPgYeIiIgkj4GHiIiIJI+Bh4iIiCSPgYeoiTpy5AiCgoJga2sLhUKBtm3bIjg4GMeOHdNod//+fYSHh6Njx45QKpWwtrbGkCFD8OOPP1brMyIiAjKZDElJSYiJiUHnzp1hYmICZ2dnrF69GgAghEBUVBTc3d2hVCrh5uaGTZs2VesrNDQUMpkM169fx9KlS+Hm5galUglnZ2fMnz8f5eXlGu0fPHiA6OhoDBw4EG3btoVCoYCNjQ2Cg4Nx6tSpav3HxsZCJpMhNjYW33//PXr27Alzc3M4OTlp9Ll8+XJ07doVZmZmMDc3R+/evREfH1/veX70OL6+vjA1NUXr1q0xb948qFQqAMDGjRvh5eUFExMTODo6YtmyZTX2J4TAhg0b0LNnT1hYWMDU1BTdu3fHhg0bqrXNyspCeHg4nn/+edjY2EChUMDJyQlvvfUW8vLyap3zjIwMrF69Gh07doRCoUC7du0QGRmpHmsVlUqF9evXw8fHB9bW1jAxMUGbNm0QGBiIpKSkes8RUZMgiKjJWblypZDJZMLU1FSMHj1azJkzR4wdO1a4uLiI6dOnq9uVlJQIHx8fAUB07dpVfPDBByI0NFSYmJgIQ0ND8c0332j0Gx4eLgCI4cOHC0tLSzF27Fgxbdo00bp1awFArFu3Trz11lvC1tZWTJgwQUyePFk0b95cABCHDx/W6GvcuHECgAgMDBTW1tZi0qRJYubMmcLd3V0AECNGjNBon52dLQwMDETfvn3FG2+8IT744APxyiuvCIVCIZRKpUhNTdVoHxMTIwCIwYMHCyMjIxEUFCRmzZolJk2aJIQQorS0VPj7+wsAwtvbW7z99tti0qRJom3btgKAiI6OrtdcVx1n2LBhQqlUildffVW88847okOHDgKACAsLE0uXLhUWFhZizJgxGvO1ceNGjb5UKpUYNWqUACDc3NzEm2++Kd5++23RsWNHAUC89957Gu2/+uorYWZmJoYNGyamTZsm3nvvPdG/f38BQLi4uIi7d+/WOOcjRowQLVu2FKGhoWLatGnC0dFRABBz587VaD9r1iwBQLRv315MmTJFzJ49W4wZM0Y4OzuLsLCwes0PUVPBwEPUxJw+fVoYGBgIBwcHkZGRobFPpVKJzMxM9fPIyEgBQIwePVqoVCr19rS0NCGXy4WVlZUoLCxUb68KPNbW1iI9PV29/ebNm0IulwtLS0vRoUMHkZeXp96XnJysDjZ/VvXHt1WrVuLWrVvq7WVlZaJPnz4CgNi2bZt6e2lpqbh9+3a1es+dOyeaNWsmAgICNLZXBREDAwPxww8/VHvd3LlzBQAxb948jdoLCwtF9+7dhVwu15ir2lQdx9jYWCN0FRYWChsbG2Fqairs7OxqnK/OnTtr9PXFF18IAGL8+PHiwYMHGnMSGBgoAIiTJ0+qt+fm5op79+5VG9PGjRsFALFw4UKN7VVz7uzsLLKystTbf/vtN2FlZSXMzc1FWVmZeru1tbVwcHAQ9+/fr3aMP/74o865IWpKGHiImpjJkycLAGLDhg11tnVxcRHGxsYagaPKxIkTBQCxadMm9baqwBMZGVmtfdWZhUfPWlQdx9HRUWNb1R/fR/8oCyHE0aNHBQAxdOjQOmsQQojAwEAhl8s1QkJVEHn55Zerta+srBTNmzcX7du31wg7VeLj4+t9lqfqOOPHj6+27/XXX3/sfBkaGory8nL1ti5duggzMzNRXFxcrf3Zs2drPMtTE5VKJSwsLIS/v7/G9qo5r+lno2rf2bNn1dusra2Fk5OTKC0trfOYRE2dkY6ulBGRjqSmpgIAXnzxxce2KywsxPXr1+Hh4YE2bdpU29+vXz+sW7cOp0+fxpgxYzT2eXt7V2tvb2//2H0pKSk1jqN3797Vtvn5+cHIyKja2pzTp09j6dKlOHbsGHJycqqt8/n999/V46ji4+NTrf/Lly8jPz8fDg4OiIyMrLb/t99+AwBcunSpxjHX5EnmpLKyErm5uWjdujWKi4vxyy+/wMHBAUuWLKnWvqrWR8f03Xff4fPPP0daWhry8/NRWVmp3peVlVXjWLt161ZtW9XPwN27d9XbXn31VaxduxadOnXCq6++in79+sHPzw8mJiY19kvUlDHwEDUxBQUFkMlk1f7wP6qwsBAAYGtrW+P+qtdXtfszCwuLatuMjIweu6+ioqLG49R0fENDQ7Ro0QIFBQXqbcePH0f//v0BPAxzbm5uaNasGWQyGeLi4nDmzBmUlZXVq/87d+4AAM6fP4/z58/XOC7g4YLu+nqSOQH+F2Ty8/MhhEBmZmaNIaymMUVFRWHmzJlo1aoVXnzxRbRp00YdRlauXFnjfNQ1nj8HplWrVsHZ2RkxMTFYuHAhFi5cCKVSiZCQEERFRaFly5a1jpOoqWHgIWpirKysIIRAdnY2WrduXWu7qj96ubm5Ne7PycnRaKcrubm5cHd319hWWVmJP/74QyOsfPzxxygrK8PRo0fRq1cvjfbJyck4c+ZMjf3LZLJq26pqGjFiBLZt2/ZXS9CKqjF169YNJ0+erLN9RUUFFixYAHt7e5w+fRo2NjbqfUIILF269C+PycjICDNnzsTMmTORlZWFw4cPIyYmBps2bUJOTg727t37l49B9LTgbelETUzVJZx9+/Y9tp2FhQVcXFxw7do1ZGZmVttfddtxTZdjtOno0aPVtp04cQIVFRV49tln1dvS09NhbW1dLewUFxcjLS2tQcf08PCAhYUFTp48We2ymL6Ym5vDw8MDFy9e1LisVJvff/8dBQUF8PPz0wg7AHDy5EmUlJRodXwODg4YNWoU9uzZA1dXV+zfv1/rxyDSJwYeoiZm0qRJMDQ0xIcffogbN25o7BNCaKzrGDduHMrLyzFnzhwIIdTbz549i9jYWFhaWiIoKEin4121ahVu376tfv7gwQOEhYUBePi+MVXatWuH/Px8jUtQlZWVmDlzpnrNTX0ZGRlh8uTJuHHjBmbOnFlj6Dl37lyN72WjS9OmTUNxcTEmTpxY4+W0jIwM/PrrrwAAGxsbmJiYIC0tDcXFxeo2+fn5ePvtt//yWMrKynD8+PFq2+/fv4+ioiIYGxvDwIB/Ikg6eEmLqInp3LkzVq5ciWnTpuGZZ55BUFAQ2rVrh5ycHBw5cgRDhgzBypUrAQCzZs1CQkICNm/ejIsXL2LAgAHIy8vD1q1bUVFRgXXr1sHc3Fyn433++efh5eWFkSNHwszMDN9//z0uX76M4OBgjBgxQt3u7bffxr59+9CrVy+EhIRAqVQiKSkJmZmZ8Pf3b/Ab4UVGRiItLQ2rV69GQkIC+vTpAxsbG2RmZuKXX37BmTNncOLEiWpnT3TpzTffRHJyMjZu3Igff/wRAQEBcHBwQG5uLi5duoSUlBT8v//3/+Dk5AQDAwO89dZbiIqKgpeXFwIDA1FYWIjExES0a9cODg4Of2ksJSUl6NmzJzp06IBu3brB0dERRUVF2LVrF3JycjBz5kwoFAotVU6kfww8RE3Q1KlT0alTJ0RFRSExMRFFRUWwsbGBr68vQkJC1O2USiUOHjyIJUuWYOvWrVixYgVMTU3Rt29fzJ07t9rlI11YuXIlvv32W6xfvx43b96Evb09IiIiMGfOHI12Q4cOxbZt2/DJJ59gy5YtMDU1Rf/+/bFjxw7Mnz+/wcdVKBRITEzEl19+iU2bNmH79u0oKyuDra0tPD09MWnSJHTu3FlbZdZL1Ts2Dx48GOvWrcOuXbvU3zs3Nzd8+umnCAgIULdftGgRrK2tERsbi7Vr18LW1hajRo1CREQEOnXq9JfGYmZmhiVLluDAgQM4evQo8vLy0Lx5c7i7u2PRokV49dVX/2q5RE8VmfjzeW4iIi0JDQ3Fxo0bkZGRofFxD0RE+sALtERERCR5DDxEREQkeQw8REREJHlcw0NERESSxzM8REREJHm8LV3LVCoVsrKyYG5uXuNb3hMREf2dCSFw7949ODg4NOqbWzLwaFlWVhbatm2r72EQERE91W7duoU2bdo02vEaNfAkJSWhX79+yM/Ph5WVVY1tYmNjMWPGjHp91oyuRUREIC4uDqdPn673a6retfbWrVs6/1BGIqqnS7uB/R8B93L+t83cDgiYD3QcrL9xEf0NFRYWom3btjp/l/dHPXVneEaOHInBg5vuL6Cqy1gWFhYMPERPgwvxwO5JAASg+NNl5gd5D7c32wR4DtPb8Ij+rhp72cdTF3hMTExgYmKi72E0HQ+qfwAhEf0fVSWQOAtATTejCgAyYM8HgIs/YGDYuGMjairkZvoegVY0KPA4OTlhxowZmDFjhnqbt7c3goKCEBERAZlMhnXr1iEhIQF79+5F69atERUVhWHDNP/39OOPP2LOnDm4cuUKvL29sX79evXnwjx6SavqstJ7772HefPmIT8/Hy+99JLGhx76+/ujS5cuUCqVWL9+PeRyOSZNmoSIiAj1Me/evYuZM2di586dKCsrQ/fu3bFixQp4eXmp2yxevBgrVqxAcXExQkJC0KpVqzrnpKysDGVlZernhYWFDZnSv+6Tv/YBgkR/bwIozAIWc90dUa0iCvQ9Aq3Q+vLoyMhIhISE4OzZsxg8eDBGjx6NO3fuaLR5//33ERUVhZ9++gmtWrVCYGAgysvLa+0zPT0dcXFx2LVrF3bt2oXDhw9j8eLFGm02btwIMzMzpKSkYOnSpZg/fz5++OEH9f5XXnkFeXl5SExMxM8//4yuXbtiwIAB6rF98803iIiIwCeffIKTJ0/C3t4ea9eurbPeRYsWwdLSUv3ggmUiIqKnj9YvaYWGhmLUqFEAgE8++QSrV69GamoqBg0apG4THh6OF154AcDDoNKmTRvs2LFD41Oe/0ylUiE2NlZ9RmfMmDE4cOAAPv74Y3WbLl26IDw8HADg5uaGf//73zhw4ABeeOEFHDt2DKmpqcjLy4NCoQAAfPrpp4iLi8O2bdvwxhtvYOXKlZgwYQImTJgAAFi4cCH279+P0tLSx9Y7Z84cvPvuu+rnVYuxGs3crMY7FlFTc+M48N9/1N1u9DagXQ/dj4eI9EbrgadLly7qr83MzGBhYYG8vDyNNn5+fuqvra2t4e7ujosXL9bap5OTk8Zqbnt7+2p9/vm4j7Y5c+YMioqK0KJFC402JSUlSE9PBwBcvHgRkyZNqjbOQ4cO1TouAFAoFOoQpRcSubZKpBPt+wMWDkBhNmpexyN7uL99f67hIZK4BgUeAwMDPPpJFI9eijI2NtZ4LpPJoFKpnnB49e/zcW2Kiopgb2+PpKSkan3Xdns8EUmAgSEwaAnwzVgAMmiGnv+7Q2TQYoYdor+BBq3hadWqFbKzs9XPCwsLkZGR0eCDJicnq7/Oz8/HlStX4OHh0eB+6qtr167IycmBkZERXF1dNR4tW7YEAHh4eCAlJaXWcRJRE+U5DAjZBFjYa263cHi4nbekE/0tNOgMT//+/REbG4vAwEBYWVnho48+gqFhw/9nNH/+fLRo0QK2trYICwtDy5YtERQU1OB+6isgIAB+fn4ICgrC0qVL0aFDB2RlZSEhIQEvv/wyunfvjunTpyM0NBTdu3dHz5498d///hfnz5+Hi4uLzsZFRI3EcxjQccjDNT1FuUAz24drdnhmh+hvo0GBZ86cOcjIyMDQoUNhaWmJBQsWPNEZnsWLF2P69Om4evUqvL298f3330Mulze4n/qSyWTYvXs3wsLCMH78ePz222+ws7NDnz59YGtrC+DhGx6mp6dj1qxZKC0txYgRIzB58mTs3btXZ+MiokZkYAg499b3KIhIT2Ti0UU59JcUFhbC0tISBQUFfKdlIiKiR+jr72TjfUwpERERkZ4w8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5DHwEBERkeQx8BAREZHkMfAQERGR5BnpewBERNpUqRJIzbiDvHulsDFXwsfZGoYGMn0Pi4j0TC9nePz9/TFjxoxa9zs5OWHlypWNNp7HkclkiIuL0/cwiKge9pzLRq8lBzFqXTKmf30ao9Ylo9eSg9hzLlvfQyMiPXsqz/D89NNPMDMz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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots (2, 1)\n", "\n", "# setting the two sub-figures apart\n", "fig.tight_layout (pad=5.0)\n", "\n", "# plot means\n", "axes[0].set_title ('compare means', size=14)\n", "axes[0].errorbar (mean_bin[0], 'binned', xerr = mean_bin[1], marker = 'o')\n", "axes[0].errorbar (mean_unb[0], 'unbinned', xerr = mean_unb[1], marker = 'o')\n", "\n", "#plot sigmas\n", "axes[1].set_title ('compare sigmas', size=14)\n", "axes[1].errorbar (sigma_bin[0], 'binned', xerr = sigma_bin[1], marker = 'o')\n", "axes[1].errorbar (sigma_unb[0], 'unbinned', xerr = sigma_unb[1], marker = 'o')\n", "\n", "plt.show ()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.9" } }, "nbformat": 4, "nbformat_minor": 4 }