{
"cells": [
{
"cell_type": "markdown",
"id": "74a86fb5-4e54-4e3f-b349-3e60fbdd0279",
"metadata": {
"tags": []
},
"source": [
"# Spectral fitting example (GRB)"
]
},
{
"cell_type": "markdown",
"id": "e7df3443-3ce1-43f3-90b5-1bceb7bc9af0",
"metadata": {},
"source": [
"**To run this, you need the following files, which can be downloaded using the first few cells of this notebook:**\n",
"- orientation file (20280301_3_month_with_orbital_info.ori) \n",
"- binned data (grb_bkg_binned_data.hdf5, grb_binned_data.hdf5, & bkg_binned_data_1s_local.hdf5) \n",
"- detector response (SMEXv12.Continuum.HEALPixO3_10bins_log_flat.binnedimaging.imagingresponse.nonsparse_nside8.area.good_chunks_unzip.h5.zip) \n",
"\n",
"**The binned data are simulations of GRB090206620 and albedo photon background produced using the COSI SMEX mass model. The detector response needs to be unzipped before running the notebook.**"
]
},
{
"cell_type": "markdown",
"id": "ba543558-7de9-494c-8b72-8cdd368676e9",
"metadata": {},
"source": [
"This notebook fits the spectrum of a GRB simulated using MEGAlib and combined with background.\n",
"\n",
"[3ML](https://threeml.readthedocs.io/) is a high-level interface that allows multiple datasets from different instruments to be used coherently to fit the parameters of source model. A source model typically consists of a list of sources with parametrized spectral shapes, sky locations and, for extended sources, shape. Polarization is also possible. A \"coherent\" analysis, in this context, means that the source model parameters are fitted using all available datasets simultanously, rather than performing individual fits and finding a well-suited common model a posteriori. \n",
"\n",
"In order for a dataset to be included in 3ML, each instrument needs to provide a \"plugin\". Each plugin is responsible for reading the data, convolving the source model (provided by 3ML) with the instrument response, and returning a likelihood. In our case, we'll compute a binned Poisson likelihood:\n",
"\n",
"$$\n",
"\\log \\mathcal{L}(\\mathbf{x}) = \\sum_i \\log \\frac{\\lambda_i(\\mathbf{x})^{d_i} \\exp (-\\lambda_i)}{d_i!}\n",
"$$\n",
"\n",
"where $d_i$ are the counts on each bin and $\\lambda_i$ are the expected counts given a source model with parameters $\\mathbf{x}$. \n",
"\n",
"In this example, we will fit a single point source with a known location. We'll assume the background is known and fixed up to a scaling factor. Finally, we will fit a Band function:\n",
"\n",
"$$\n",
"f(x) = K \\begin{cases} \\left(\\frac{x}{E_{piv}}\\right)^{\\alpha} \\exp \\left(-\\frac{(2+\\alpha)\n",
" * x}{x_{p}}\\right) & x \\leq (\\alpha-\\beta) \\frac{x_{p}}{(\\alpha+2)} \\\\ \\left(\\frac{x}{E_{piv}}\\right)^{\\beta}\n",
" * \\exp (\\beta-\\alpha)\\left[\\frac{(\\alpha-\\beta) x_{p}}{E_{piv}(2+\\alpha)}\\right]^{\\alpha-\\beta}\n",
" * &x>(\\alpha-\\beta) \\frac{x_{p}}{(\\alpha+2)} \\end{cases}\n",
"$$\n",
"\n",
"\n",
"where $K$ (normalization), $\\alpha$ & $\\beta$ (spectral indeces), and $x_p$ (peak energy) are the free parameters, while $E_{piv}$ is the pivot energy which is fixed (and arbitrary).\n",
"\n",
"Considering these assumptions:\n",
"\n",
"$$\n",
"\\lambda_i(\\mathbf{x}) = B*b_i + s_i(\\mathbf{x})\n",
"$$\n",
"\n",
"where $B*b_i$ are the estimated counts due to background in each bin of the Compton data space with $B$ the amplitude and $b_i$ the shape of the background, and $s_i$ are the corresponding expected counts from the source, the goal is then to find the values of $\\mathbf{x} = [K, \\alpha, \\beta, x_p]$ and $B$ that maximize $\\mathcal{L}$. These are the best estimations of the parameters.\n",
"\n",
"The final module needs to also fit the time-dependent background, handle multiple point-like and extended sources, as well as all the spectral models supported by 3ML. Eventually, it will also fit the polarization angle. However, this simple example already contains all the necessary pieces to do a fit."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "ce42ab82-3bbd-4729-8f84-a4e32eb3bb24",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
08:46:50 WARNING The naima package is not available. Models that depend on it will not be functions.py : 48 \n",
" available \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m08:46:50\u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m The naima package is not available. Models that depend on it will not be \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=713174;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/astromodels/functions/functions_1D/functions.py\u001b\\\u001b[2mfunctions.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=413436;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/astromodels/functions/functions_1D/functions.py#48\u001b\\\u001b[2m48\u001b[0m\u001b]8;;\u001b\\\n",
"\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251mavailable \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" WARNING The GSL library or the pygsl wrapper cannot be loaded. Models that depend on it functions.py : 69 \n",
" will not be available. \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m \u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m The GSL library or the pygsl wrapper cannot be loaded. Models that depend on it \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=202856;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/astromodels/functions/functions_1D/functions.py\u001b\\\u001b[2mfunctions.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=855975;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/astromodels/functions/functions_1D/functions.py#69\u001b\\\u001b[2m69\u001b[0m\u001b]8;;\u001b\\\n",
"\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251mwill not be available. \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"08:46:53 WARNING The ebltable package is not available. Models that depend on it will not be absorption.py : 33 \n",
" available \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m08:46:53\u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m The ebltable package is not available. Models that depend on it will not be \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=395347;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/astromodels/functions/functions_1D/absorption.py\u001b\\\u001b[2mabsorption.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=263203;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/astromodels/functions/functions_1D/absorption.py#33\u001b\\\u001b[2m33\u001b[0m\u001b]8;;\u001b\\\n",
"\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251mavailable \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"08:46:54 INFO Starting 3ML! __init__.py : 39 \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m08:46:54\u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;49mINFO \u001b[0m \u001b[1;38;5;251m Starting 3ML! \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=638303;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=443065;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py#39\u001b\\\u001b[2m39\u001b[0m\u001b]8;;\u001b\\\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" WARNING WARNINGs here are NOT errors __init__.py : 40 \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m \u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m WARNINGs here are \u001b[0m\u001b[1;31mNOT\u001b[0m\u001b[1;38;5;251m errors \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=185403;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=745790;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py#40\u001b\\\u001b[2m40\u001b[0m\u001b]8;;\u001b\\\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" WARNING but are inform you about optional packages that can be installed __init__.py : 41 \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m \u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m but are inform you about optional packages that can be installed \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=437664;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=479019;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py#41\u001b\\\u001b[2m41\u001b[0m\u001b]8;;\u001b\\\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" WARNING to disable these messages, turn off start_warning in your config file __init__.py : 44 \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m \u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m \u001b[0m\u001b[1;31m to disable these messages, turn off start_warning in your config file\u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=949768;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=157059;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py#44\u001b\\\u001b[2m44\u001b[0m\u001b]8;;\u001b\\\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" WARNING no display variable set. using backend for graphics without display (agg) __init__.py : 50 \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m \u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m no display variable set. using backend for graphics without display \u001b[0m\u001b[1;38;5;251m(\u001b[0m\u001b[1;38;5;251magg\u001b[0m\u001b[1;38;5;251m)\u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=566653;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=944073;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py#50\u001b\\\u001b[2m50\u001b[0m\u001b]8;;\u001b\\\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"08:46:55 WARNING ROOT minimizer not available minimization.py : 1345 \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m08:46:55\u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m ROOT minimizer not available \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=508106;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/minimizer/minimization.py\u001b\\\u001b[2mminimization.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=126121;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/minimizer/minimization.py#1345\u001b\\\u001b[2m1345\u001b[0m\u001b]8;;\u001b\\\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" WARNING Multinest minimizer not available minimization.py : 1357 \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m \u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m Multinest minimizer not available \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=438750;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/minimizer/minimization.py\u001b\\\u001b[2mminimization.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=842981;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/minimizer/minimization.py#1357\u001b\\\u001b[2m1357\u001b[0m\u001b]8;;\u001b\\\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" WARNING PyGMO is not available minimization.py : 1369 \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m \u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m PyGMO is not available \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=709932;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/minimizer/minimization.py\u001b\\\u001b[2mminimization.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=813304;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/minimizer/minimization.py#1369\u001b\\\u001b[2m1369\u001b[0m\u001b]8;;\u001b\\\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"08:46:56 WARNING The cthreeML package is not installed. You will not be able to use plugins which __init__.py : 94 \n",
" require the C/C++ interface (currently HAWC) \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m08:46:56\u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m The cthreeML package is not installed. You will not be able to use plugins which \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=590709;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=892582;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py#94\u001b\\\u001b[2m94\u001b[0m\u001b]8;;\u001b\\\n",
"\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251mrequire the C/C++ interface \u001b[0m\u001b[1;38;5;251m(\u001b[0m\u001b[1;38;5;251mcurrently HAWC\u001b[0m\u001b[1;38;5;251m)\u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" WARNING Could not import plugin FermiLATLike.py. Do you have the relative instrument __init__.py : 144 \n",
" software installed and configured? \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m \u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m Could not import plugin FermiLATLike.py. Do you have the relative instrument \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=60242;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=580067;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py#144\u001b\\\u001b[2m144\u001b[0m\u001b]8;;\u001b\\\n",
"\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251msoftware installed and configured? \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" WARNING Could not import plugin HAWCLike.py. Do you have the relative instrument __init__.py : 144 \n",
" software installed and configured? \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m \u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m Could not import plugin HAWCLike.py. Do you have the relative instrument \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=639772;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=980755;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py#144\u001b\\\u001b[2m144\u001b[0m\u001b]8;;\u001b\\\n",
"\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251msoftware installed and configured? \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"08:47:00 WARNING No fermitools installed lat_transient_builder.py : 44 \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m08:47:00\u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m No fermitools installed \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=192331;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/utils/data_builders/fermi/lat_transient_builder.py\u001b\\\u001b[2mlat_transient_builder.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=693460;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/utils/data_builders/fermi/lat_transient_builder.py#44\u001b\\\u001b[2m44\u001b[0m\u001b]8;;\u001b\\\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"08:47:00 WARNING Env. variable OMP_NUM_THREADS is not set. Please set it to 1 for optimal __init__.py : 387 \n",
" performances in 3ML \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m08:47:00\u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m Env. variable OMP_NUM_THREADS is not set. Please set it to \u001b[0m\u001b[1;37m1\u001b[0m\u001b[1;38;5;251m for optimal \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=722668;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=575708;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py#387\u001b\\\u001b[2m387\u001b[0m\u001b]8;;\u001b\\\n",
"\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251mperformances in 3ML \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" WARNING Env. variable MKL_NUM_THREADS is not set. Please set it to 1 for optimal __init__.py : 387 \n",
" performances in 3ML \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m \u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m Env. variable MKL_NUM_THREADS is not set. Please set it to \u001b[0m\u001b[1;37m1\u001b[0m\u001b[1;38;5;251m for optimal \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=592563;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=331679;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py#387\u001b\\\u001b[2m387\u001b[0m\u001b]8;;\u001b\\\n",
"\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251mperformances in 3ML \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" WARNING Env. variable NUMEXPR_NUM_THREADS is not set. Please set it to 1 for optimal __init__.py : 387 \n",
" performances in 3ML \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m \u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m Env. variable NUMEXPR_NUM_THREADS is not set. Please set it to \u001b[0m\u001b[1;37m1\u001b[0m\u001b[1;38;5;251m for optimal \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=535932;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=9315;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/__init__.py#387\u001b\\\u001b[2m387\u001b[0m\u001b]8;;\u001b\\\n",
"\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251mperformances in 3ML \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from cosipy import COSILike, BinnedData\n",
"from cosipy.spacecraftfile import SpacecraftFile\n",
"from cosipy.response.FullDetectorResponse import FullDetectorResponse\n",
"from cosipy.util import fetch_wasabi_file\n",
"\n",
"from scoords import SpacecraftFrame\n",
"\n",
"from astropy.time import Time\n",
"import astropy.units as u\n",
"from astropy.coordinates import SkyCoord\n",
"from astropy.stats import poisson_conf_interval\n",
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"from threeML import Band, PointSource, Model, JointLikelihood, DataList\n",
"from cosipy import Band_Eflux\n",
"from astromodels import Parameter\n",
"\n",
"from pathlib import Path\n",
"\n",
"import os"
]
},
{
"cell_type": "markdown",
"id": "8d1c0168-9823-4eb7-930e-5dc61d6448ca",
"metadata": {},
"source": [
"## Download and read in binned data"
]
},
{
"cell_type": "markdown",
"id": "dc364649-56e4-4bb1-8403-74e90cf3ed05",
"metadata": {},
"source": [
"Define the path to the directory containing the data, detector response, orientation file, and yaml files if they have already been downloaded, or the directory to download the files into"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "cdd53b2a-5176-42cf-bb2c-feb3387fc0a4",
"metadata": {},
"outputs": [],
"source": [
"data_path = Path(\"/path/to/files\")"
]
},
{
"cell_type": "markdown",
"id": "463043e4-a0c8-49d7-8bcb-19e8d4d6e978",
"metadata": {},
"source": [
"Download the orientation file (684.38 MB)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "027c7744-e631-405f-be40-6c552d9392d1",
"metadata": {},
"outputs": [],
"source": [
"fetch_wasabi_file('COSI-SMEX/DC2/Data/Orientation/20280301_3_month_with_orbital_info.ori', output=str(data_path / '20280301_3_month_with_orbital_info.ori'))"
]
},
{
"cell_type": "markdown",
"id": "134234d9-8fba-42cb-ab71-dba774221201",
"metadata": {},
"source": [
"Download the binned GRB+background data (75.73 KB)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "5a05bea9-980e-429e-9375-ceb97532047e",
"metadata": {},
"outputs": [],
"source": [
"fetch_wasabi_file('COSI-SMEX/cosipy_tutorials/grb_spectral_fit_local_frame/grb_bkg_binned_data.hdf5', output=str(data_path / 'grb_bkg_binned_data.hdf5'))"
]
},
{
"cell_type": "markdown",
"id": "667a50b3-02c3-4b3c-8d56-607b8fddcb55",
"metadata": {},
"source": [
"Download the binned GRB data (76.90 KB)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "ff857371-5c1e-4065-93f6-2ae010c7501d",
"metadata": {},
"outputs": [],
"source": [
"fetch_wasabi_file('COSI-SMEX/cosipy_tutorials/grb_spectral_fit_local_frame/grb_binned_data.hdf5', output=str(data_path / 'grb_binned_data.hdf5'))"
]
},
{
"cell_type": "markdown",
"id": "cc399d10-f94c-4008-8f09-ce4aaf664514",
"metadata": {},
"source": [
"Download the binned background data (255.97 MB)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "a8a453a3-7e01-4c0d-9264-fc22bc29cef0",
"metadata": {},
"outputs": [],
"source": [
"fetch_wasabi_file('COSI-SMEX/cosipy_tutorials/grb_spectral_fit_local_frame/bkg_binned_data_1s_local.hdf5', output=str(data_path / 'bkg_binned_data_1s_local.hdf5'))"
]
},
{
"cell_type": "markdown",
"id": "32b1b135-2060-4d14-91fb-133b0786c596",
"metadata": {},
"source": [
"Download the response file (839.62 MB). This needs to be unzipped before running the rest of the notebook"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "6cb6c65e-2883-4a2d-b0ba-b28834a55bfa",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"fetch_wasabi_file('COSI-SMEX/DC2/Responses/SMEXv12.Continuum.HEALPixO3_10bins_log_flat.binnedimaging.imagingresponse.nonsparse_nside8.area.good_chunks_unzip.h5.zip', output=str(data_path / 'SMEXv12.Continuum.HEALPixO3_10bins_log_flat.binnedimaging.imagingresponse.nonsparse_nside8.area.good_chunks_unzip.h5.zip'))"
]
},
{
"cell_type": "markdown",
"id": "d898bbd7-9ed0-4a27-bd5a-67414178733d",
"metadata": {},
"source": [
"Read in the spacecraft orientation file & select the beginning and end times of the GRB"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "ed2c03a0-63e3-4044-9e16-50f0f17996af",
"metadata": {},
"outputs": [],
"source": [
"ori = SpacecraftFile.parse_from_file(data_path / \"20280301_3_month_with_orbital_info.ori\")\n",
"tmin = Time(1842597410.0,format = 'unix')\n",
"tmax = Time(1842597450.0,format = 'unix')\n",
"sc_orientation = ori.source_interval(tmin, tmax)"
]
},
{
"cell_type": "markdown",
"id": "f579870f-c854-450d-84e8-f1d5ef0753d1",
"metadata": {},
"source": [
"Create BinnedData objects for the GRB only, GRB+background, and background only. The GRB only simulation is not used for the spectral fit, but can be used to compare the fitted spectrum to the source simulation"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "3b5faaa1-1874-4d43-a6ae-7e1b0aaabb26",
"metadata": {},
"outputs": [],
"source": [
"grb = BinnedData(data_path / \"grb.yaml\")\n",
"grb_bkg = BinnedData(data_path / \"grb.yaml\")\n",
"bkg = BinnedData(data_path / \"background.yaml\")"
]
},
{
"cell_type": "markdown",
"id": "cf8b5ab1-7452-493e-b516-73fa72e455e5",
"metadata": {},
"source": [
"Load binned .hdf5 files"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "620159d2-f01a-453e-9e4c-075c99740086",
"metadata": {},
"outputs": [],
"source": [
"grb.load_binned_data_from_hdf5(binned_data=data_path / \"grb_binned_data.hdf5\")\n",
"grb_bkg.load_binned_data_from_hdf5(binned_data=data_path / \"grb_bkg_binned_data.hdf5\")\n",
"bkg.load_binned_data_from_hdf5(binned_data=data_path / \"bkg_binned_data_1s_local.hdf5\")"
]
},
{
"cell_type": "markdown",
"id": "a6bdaee8-45d7-41df-9835-413c1e397c12",
"metadata": {},
"source": [
"Define the path to the detector response"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "acccab93-7f9c-4167-a8f9-eedcf74b8a05",
"metadata": {},
"outputs": [],
"source": [
"dr = str(data_path / \"SMEXv12.Continuum.HEALPixO3_10bins_log_flat.binnedimaging.imagingresponse.nonsparse_nside8.area.good_chunks_unzip.h5\") # path to detector response"
]
},
{
"cell_type": "markdown",
"id": "31b5dbd7-8a50-43db-af66-7b8601f7e2fd",
"metadata": {
"tags": []
},
"source": [
"## Perform spectral fit"
]
},
{
"cell_type": "markdown",
"id": "2210f6ff-c988-455a-be15-882d0b795072",
"metadata": {},
"source": [
"Define time window of binned background simulation to use for background model"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "a29ec8c4-edea-40bf-8a3e-8038ba47bf8e",
"metadata": {},
"outputs": [],
"source": [
"bkg_tmin = 1842597310.0\n",
"bkg_tmax = 1842597550.0\n",
"bkg_min = np.where(bkg.binned_data.axes['Time'].edges.value == bkg_tmin)[0][0]\n",
"bkg_max = np.where(bkg.binned_data.axes['Time'].edges.value == bkg_tmax)[0][0]"
]
},
{
"cell_type": "markdown",
"id": "7441f3f1-ebe6-467f-b8ab-1baa70f20b15",
"metadata": {},
"source": [
"Set background parameter, which is used to fit the amplitude of the background, and instantiate the COSI 3ML plugin"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "a9f21e74-5f62-4030-9815-6c77ebaab16f",
"metadata": {},
"outputs": [],
"source": [
"bkg_par = Parameter(\"background_cosi\", # background parameter\n",
" 0.1, # initial value of parameter\n",
" min_value=0, # minimum value of parameter\n",
" max_value=5, # maximum value of parameter\n",
" delta=1e-3, # initial step used by fitting engine\n",
" desc=\"Background parameter for cosi\")\n",
"\n",
"cosi = COSILike(\"cosi\", # COSI 3ML plugin\n",
" dr = dr, # detector response\n",
" data = grb_bkg.binned_data.project('Em', 'Phi', 'PsiChi'), # data (source+background)\n",
" bkg = bkg.binned_data.slice[{'Time':slice(bkg_min,bkg_max)}].project('Em', 'Phi', 'PsiChi'), # background model \n",
" sc_orientation = sc_orientation, # spacecraft orientation\n",
" nuisance_param = bkg_par) # background parameter"
]
},
{
"cell_type": "markdown",
"id": "e6d55283-abb0-4295-9e5c-80a5c717f0ba",
"metadata": {},
"source": [
"Define a point source at the known location with a Band function spectrum and add it to the model"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "98b2d026-c24d-4cfe-8b7b-41415fce5d16",
"metadata": {},
"outputs": [],
"source": [
"l = 93.\n",
"b = -53.\n",
"\n",
"alpha = -1 # Setting parameters to something reasonable helps the fitting to converge\\n\",\n",
"beta = -3\n",
"xp = 450. * u.keV\n",
"piv = 500. * u.keV\n",
"K = 1 / u.cm / u.cm / u.s / u.keV\n",
"\n",
"spectrum = Band()\n",
"\n",
"spectrum.beta.min_value = -15.0\n",
"\n",
"spectrum.alpha.value = alpha\n",
"spectrum.beta.value = beta\n",
"spectrum.xp.value = xp.value\n",
"spectrum.K.value = K.value\n",
"spectrum.piv.value = piv.value\n",
"\n",
"spectrum.xp.unit = xp.unit\n",
"spectrum.K.unit = K.unit\n",
"spectrum.piv.unit = piv.unit\n",
"\n",
"source = PointSource(\"source\", # Name of source (arbitrary, but needs to be unique)\n",
" l = l, # Longitude (deg)\n",
" b = b, # Latitude (deg)\n",
" spectral_shape = spectrum) # Spectral model\n",
"\n",
"# Optional: free the position parameters\n",
"#source.position.l.free = True\n",
"#source.position.b.free = True\n",
"\n",
"model = Model(source) # Model with single source. If we had multiple sources, we would do Model(source1, source2, ...)\n",
"\n",
"# Optional: if you want to call get_log_like manually, then you also need to set the model manually\n",
"# 3ML does this internally during the fit though\n",
"cosi.set_model(model)"
]
},
{
"cell_type": "markdown",
"id": "27ded6d5-4551-4623-8483-b3f4e8b02040",
"metadata": {},
"source": [
"Gather all plugins and combine with the model in a JointLikelihood object, then perform maximum likelihood fit"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "d56d3ad6-7226-437a-a037-57fbcd80d196",
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"08:49:04 INFO set the minimizer to minuit joint_likelihood.py : 1045 \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m08:49:04\u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;49mINFO \u001b[0m \u001b[1;38;5;251m set the minimizer to minuit \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=947353;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/classicMLE/joint_likelihood.py\u001b\\\u001b[2mjoint_likelihood.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=786599;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/classicMLE/joint_likelihood.py#1045\u001b\\\u001b[2m1045\u001b[0m\u001b]8;;\u001b\\\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Adding 1e-12 to each bin of the expectation to avoid log-likelihood = -inf.\n"
]
},
{
"data": {
"text/html": [
"08:49:30 WARNING get_number_of_data_points not implemented, values for statistical plugin_prototype.py : 130 \n",
" measurements such as AIC or BIC are unreliable \n",
" \n"
],
"text/plain": [
"\u001b[38;5;46m08:49:30\u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m get_number_of_data_points not implemented, values for statistical \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=789908;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/plugin_prototype.py\u001b\\\u001b[2mplugin_prototype.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=222980;file:///discover/nobackup/ckarwin/Software/COSIPY/lib/python3.10/site-packages/threeML/plugin_prototype.py#130\u001b\\\u001b[2m130\u001b[0m\u001b]8;;\u001b\\\n",
"\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251mmeasurements such as AIC or BIC are unreliable \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"Best fit values: \n",
"\n",
" \n"
],
"text/plain": [
"\u001b[1;4;38;5;49mBest fit values:\u001b[0m\n",
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" result \n",
" unit \n",
" \n",
" \n",
" parameter \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" source.spectrum.main.Band.K \n",
" (3.10 -0.20 +0.21) x 10^-2 \n",
" 1 / (keV s cm2) \n",
" \n",
" \n",
" source.spectrum.main.Band.alpha \n",
" (-2.8 +/- 0.5) x 10^-1 \n",
" \n",
" \n",
" \n",
" source.spectrum.main.Band.xp \n",
" (4.75 +/- 0.05) x 10^2 \n",
" keV \n",
" \n",
" \n",
" source.spectrum.main.Band.beta \n",
" -6.8 +/- 1.2 \n",
" \n",
" \n",
" \n",
" background_cosi \n",
" (1.65 +/- 0.13) x 10^-1 \n",
" \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" result unit\n",
"parameter \n",
"source.spectrum.main.Band.K (3.10 -0.20 +0.21) x 10^-2 1 / (keV s cm2)\n",
"source.spectrum.main.Band.alpha (-2.8 +/- 0.5) x 10^-1 \n",
"source.spectrum.main.Band.xp (4.75 +/- 0.05) x 10^2 keV\n",
"source.spectrum.main.Band.beta -6.8 +/- 1.2 \n",
"background_cosi (1.65 +/- 0.13) x 10^-1 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"Correlation matrix: \n",
"\n",
" \n"
],
"text/plain": [
"\n",
"\u001b[1;4;38;5;49mCorrelation matrix:\u001b[0m\n",
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"1.00 0.97 -0.37 0.20 -0.00 \n",
"0.97 1.00 -0.16 0.17 -0.00 \n",
"-0.37 -0.16 1.00 -0.17 -0.02 \n",
"0.20 0.17 -0.17 1.00 0.00 \n",
"-0.00 -0.00 -0.02 0.00 1.00 \n",
"
"
],
"text/plain": [
" 1.00 0.97 -0.37 0.20 -0.00\n",
" 0.97 1.00 -0.16 0.17 -0.00\n",
"-0.37 -0.16 1.00 -0.17 -0.02\n",
" 0.20 0.17 -0.17 1.00 0.00\n",
"-0.00 -0.00 -0.02 0.00 1.00"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"Values of -log(likelihood) at the minimum: \n",
"\n",
" \n"
],
"text/plain": [
"\n",
"\u001b[1;4;38;5;49mValues of -\u001b[0m\u001b[1;4;38;5;49mlog\u001b[0m\u001b[1;4;38;5;49m(\u001b[0m\u001b[1;4;38;5;49mlikelihood\u001b[0m\u001b[1;4;38;5;49m)\u001b[0m\u001b[1;4;38;5;49m at the minimum:\u001b[0m\n",
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" -log(likelihood) \n",
" \n",
" \n",
" \n",
" \n",
" cosi \n",
" 42920.049338 \n",
" \n",
" \n",
" total \n",
" 42920.049338 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" -log(likelihood)\n",
"cosi 42920.049338\n",
"total 42920.049338"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"Values of statistical measures: \n",
"\n",
" \n"
],
"text/plain": [
"\n",
"\u001b[1;4;38;5;49mValues of statistical measures:\u001b[0m\n",
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" statistical measures \n",
" \n",
" \n",
" \n",
" \n",
" AIC \n",
" 85838.098676 \n",
" \n",
" \n",
" BIC \n",
" 85840.098676 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" statistical measures\n",
"AIC 85838.098676\n",
"BIC 85840.098676"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"( value negative_error positive_error \\\n",
" source.spectrum.main.Band.K 0.030997 -0.002034 0.002123 \n",
" source.spectrum.main.Band.alpha -0.276547 -0.052063 0.049971 \n",
" source.spectrum.main.Band.xp 474.654036 -4.933778 4.828668 \n",
" source.spectrum.main.Band.beta -6.755004 -1.205494 1.231109 \n",
" background_cosi 0.164940 -0.012464 0.012279 \n",
" \n",
" error unit \n",
" source.spectrum.main.Band.K 0.002079 1 / (keV s cm2) \n",
" source.spectrum.main.Band.alpha 0.051017 \n",
" source.spectrum.main.Band.xp 4.881223 keV \n",
" source.spectrum.main.Band.beta 1.218301 \n",
" background_cosi 0.012371 ,\n",
" -log(likelihood)\n",
" cosi 42920.049338\n",
" total 42920.049338)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plugins = DataList(cosi) # If we had multiple instruments, we would do e.g. DataList(cosi, lat, hawc, ...)\n",
"\n",
"like = JointLikelihood(model, plugins, verbose = False)\n",
"\n",
"like.fit()"
]
},
{
"cell_type": "markdown",
"id": "44542198-aba8-4a37-b9d0-31930718c2bb",
"metadata": {},
"source": [
"## Error propagation and plotting"
]
},
{
"cell_type": "markdown",
"id": "4ad20f51-3d3f-43e1-a6a3-037bf3ee9f8f",
"metadata": {},
"source": [
"Define Band function spectrum injected into MEGAlib"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "02e57ec8-4459-4f99-b62f-73a63aba83f3",
"metadata": {},
"outputs": [],
"source": [
"alpha_inj = -0.360\n",
"beta_inj = -11.921\n",
"E0_inj = 288.016 * u.keV\n",
"xp_inj = E0_inj * (alpha_inj + 2)\n",
"piv_inj = 1. * u.keV\n",
"K_inj = 0.283 / u.cm / u.cm / u.s / u.keV\n",
"\n",
"spectrum_inj = Band()\n",
"\n",
"spectrum_inj.beta.min_value = -15.0\n",
"\n",
"spectrum_inj.alpha.value = alpha_inj\n",
"spectrum_inj.beta.value = beta_inj\n",
"spectrum_inj.xp.value = xp_inj.value\n",
"spectrum_inj.K.value = K_inj.value\n",
"spectrum_inj.piv.value = piv_inj.value\n",
"\n",
"spectrum_inj.xp.unit = xp_inj.unit\n",
"spectrum_inj.K.unit = K_inj.unit\n",
"spectrum_inj.piv.unit = piv_inj.unit"
]
},
{
"cell_type": "markdown",
"id": "d626f871-fbdf-40b8-b865-140e3ea4b5c3",
"metadata": {},
"source": [
"The summary of the results above tell you the optimal values of the parameters, as well as the errors. Propogate the errors to the \"evaluate_at\" method of the spectrum"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "4e25c609-e754-43b8-8ea6-0a0a90811cda",
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"Best fit values: \n",
"\n",
" \n"
],
"text/plain": [
"\u001b[1;4;38;5;49mBest fit values:\u001b[0m\n",
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" result \n",
" unit \n",
" \n",
" \n",
" parameter \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" source.spectrum.main.Band.K \n",
" (3.10 -0.20 +0.21) x 10^-2 \n",
" 1 / (keV s cm2) \n",
" \n",
" \n",
" source.spectrum.main.Band.alpha \n",
" (-2.8 +/- 0.5) x 10^-1 \n",
" \n",
" \n",
" \n",
" source.spectrum.main.Band.xp \n",
" (4.75 +/- 0.05) x 10^2 \n",
" keV \n",
" \n",
" \n",
" source.spectrum.main.Band.beta \n",
" -6.8 +/- 1.2 \n",
" \n",
" \n",
" \n",
" background_cosi \n",
" (1.65 +/- 0.13) x 10^-1 \n",
" \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" result unit\n",
"parameter \n",
"source.spectrum.main.Band.K (3.10 -0.20 +0.21) x 10^-2 1 / (keV s cm2)\n",
"source.spectrum.main.Band.alpha (-2.8 +/- 0.5) x 10^-1 \n",
"source.spectrum.main.Band.xp (4.75 +/- 0.05) x 10^2 keV\n",
"source.spectrum.main.Band.beta -6.8 +/- 1.2 \n",
"background_cosi (1.65 +/- 0.13) x 10^-1 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"Correlation matrix: \n",
"\n",
" \n"
],
"text/plain": [
"\n",
"\u001b[1;4;38;5;49mCorrelation matrix:\u001b[0m\n",
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"1.00 0.97 -0.37 0.20 -0.00 \n",
"0.97 1.00 -0.16 0.17 -0.00 \n",
"-0.37 -0.16 1.00 -0.17 -0.02 \n",
"0.20 0.17 -0.17 1.00 0.00 \n",
"-0.00 -0.00 -0.02 0.00 1.00 \n",
"
"
],
"text/plain": [
" 1.00 0.97 -0.37 0.20 -0.00\n",
" 0.97 1.00 -0.16 0.17 -0.00\n",
"-0.37 -0.16 1.00 -0.17 -0.02\n",
" 0.20 0.17 -0.17 1.00 0.00\n",
"-0.00 -0.00 -0.02 0.00 1.00"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"Values of -log(likelihood) at the minimum: \n",
"\n",
" \n"
],
"text/plain": [
"\n",
"\u001b[1;4;38;5;49mValues of -\u001b[0m\u001b[1;4;38;5;49mlog\u001b[0m\u001b[1;4;38;5;49m(\u001b[0m\u001b[1;4;38;5;49mlikelihood\u001b[0m\u001b[1;4;38;5;49m)\u001b[0m\u001b[1;4;38;5;49m at the minimum:\u001b[0m\n",
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" -log(likelihood) \n",
" \n",
" \n",
" \n",
" \n",
" cosi \n",
" 42920.049338 \n",
" \n",
" \n",
" total \n",
" 42920.049338 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" -log(likelihood)\n",
"cosi 42920.049338\n",
"total 42920.049338"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"Values of statistical measures: \n",
"\n",
" \n"
],
"text/plain": [
"\n",
"\u001b[1;4;38;5;49mValues of statistical measures:\u001b[0m\n",
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" statistical measures \n",
" \n",
" \n",
" \n",
" \n",
" AIC \n",
" 85838.098676 \n",
" \n",
" \n",
" BIC \n",
" 85840.098676 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" statistical measures\n",
"AIC 85838.098676\n",
"BIC 85840.098676"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"None\n",
" * source (point source):\n",
" * position:\n",
" * l:\n",
" * value: 93.0\n",
" * desc: Galactic longitude\n",
" * min_value: 0.0\n",
" * max_value: 360.0\n",
" * unit: deg\n",
" * is_normalization: false\n",
" * b:\n",
" * value: -53.0\n",
" * desc: Galactic latitude\n",
" * min_value: -90.0\n",
" * max_value: 90.0\n",
" * unit: deg\n",
" * is_normalization: false\n",
" * equinox: J2000\n",
" * spectrum:\n",
" * main:\n",
" * Band:\n",
" * K:\n",
" * value: 0.03099749659547262\n",
" * desc: Differential flux at the pivot energy\n",
" * min_value: 1.0e-50\n",
" * max_value: null\n",
" * unit: keV-1 s-1 cm-2\n",
" * is_normalization: true\n",
" * alpha:\n",
" * value: -0.2765469834147527\n",
" * desc: low-energy photon index\n",
" * min_value: -1.5\n",
" * max_value: 3.0\n",
" * unit: ''\n",
" * is_normalization: false\n",
" * xp:\n",
" * value: 474.6540362662719\n",
" * desc: peak in the x * x * N (nuFnu if x is a energy)\n",
" * min_value: 10.0\n",
" * max_value: null\n",
" * unit: keV\n",
" * is_normalization: false\n",
" * beta:\n",
" * value: -6.755004044507031\n",
" * desc: high-energy photon index\n",
" * min_value: -15.0\n",
" * max_value: -1.6\n",
" * unit: ''\n",
" * is_normalization: false\n",
" * piv:\n",
" * value: 500.0\n",
" * desc: pivot energy\n",
" * min_value: null\n",
" * max_value: null\n",
" * unit: keV\n",
" * is_normalization: false\n",
" * polarization: {}\n",
"\n"
]
}
],
"source": [
"results = like.results\n",
"\n",
"print(results.display())\n",
"\n",
"parameters = {par.name:results.get_variates(par.path)\n",
" for par in results.optimized_model[\"source\"].parameters.values()\n",
" if par.free}\n",
"\n",
"results_err = results.propagate(results.optimized_model[\"source\"].spectrum.main.shape.evaluate_at, **parameters)\n",
"\n",
"print(results.optimized_model[\"source\"])"
]
},
{
"cell_type": "markdown",
"id": "5eaec533-b5b3-45c4-94df-75453e2df3bf",
"metadata": {},
"source": [
"Evaluate the flux and errors at a range of energies for the fitted and injected spectra, and the simulated source flux"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "cc7d6f50-06cd-450a-83d9-115b67d83b30",
"metadata": {},
"outputs": [],
"source": [
"energy = np.geomspace(100*u.keV,10*u.MeV).to_value(u.keV)\n",
"\n",
"flux_lo = np.zeros_like(energy)\n",
"flux_median = np.zeros_like(energy)\n",
"flux_hi = np.zeros_like(energy)\n",
"flux_inj = np.zeros_like(energy)\n",
"\n",
"for i, e in enumerate(energy):\n",
" flux = results_err(e)\n",
" flux_median[i] = flux.median\n",
" flux_lo[i], flux_hi[i] = flux.equal_tail_interval(cl=0.68)\n",
" flux_inj[i] = spectrum_inj.evaluate_at(e)\n",
" \n",
"binned_energy_edges = grb.binned_data.axes['Em'].edges.value\n",
"binned_energy = np.array([])\n",
"bin_sizes = np.array([])\n",
"\n",
"for i in range(len(binned_energy_edges)-1):\n",
" binned_energy = np.append(binned_energy, (binned_energy_edges[i+1] + binned_energy_edges[i]) / 2)\n",
" bin_sizes = np.append(bin_sizes, binned_energy_edges[i+1] - binned_energy_edges[i])\n",
"\n",
"expectation = cosi._expected_counts['source']"
]
},
{
"cell_type": "markdown",
"id": "8cb8c4aa-ef51-4f19-93dc-2ac7d7d2f189",
"metadata": {},
"source": [
"Plot the fitted and injected spectra"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "f8dbd36f-4b16-4bec-8835-8f6f876ab169",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlsAAAG7CAYAAAD0aVBuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACNGUlEQVR4nOzdd3hU1fbw8e+UTHrvBQIplAASQBAEIkhAEI14KbZXRaSIXCyAINgVr3gt2FFQL5brpfxQRKWGXlRQQUogJEBCCqmQnkx//4iMRgKkzGRS1ud5fGDO2efsNTFDVvbeZ22F2Ww2I4QQQgghbEJp7wCEEEIIIVozSbaEEEIIIWxIki0hhBBCCBuSZEsIIYQQwoYk2RJCCCGEsCFJtoQQQgghbEiSLSGEEEIIG5Jky86qqqpITk6mqqrK3qEIIYQQwgYk2bKz9PR0pkyZQnp6ur1DEUIIIYQNqO0dQFuVmJhIYmIiZWVl9g5FCCGEEDYkyZadxMfHEx8fT3JyMlOmTLF3OEIIIYSwEZlGFEIIIYSwIUm2hBBCCCFsSKYRhRBCiAYwGo3o9Xp7hyFsTKVSoVarUSgUDb6HJFtCCCFEPZWVlZGZmYnZbLZ3KKIJuLi4EBwcjEajadD1kmwJIYQQ9WA0GsnMzMTFxQV/f/9GjXiI5s1sNqPT6cjPz+fMmTNER0ejVNZ/BZYkW0IIIUQ96PV6zGYz/v7+ODs72zscYWPOzs44ODiQnp6OTqfDycmp3veQZMtOpM6WEEK0bDKi1XY0ZDTrryTZshOpsyWEEEK0DVL6QQghhGjhOnToQOfOnYmNjaVr167cfffdlJeXN/h+y5cv58SJE5c9/9NPP9GjRw969erFpk2buPnmm0lOTq7TtW2RJFtCCCFEK7By5UoOHTrEsWPHKC4uZvny5Q2+19USps8++4y7776bgwcPctNNN7F+/Xo6d+5cp2vbIplGFEIIIRph7VN7qSjW2rQPF09Hxrw8sE5tdTodFRUVeHt7W469/vrrrFq1CoPBQEBAAB999BHh4eF89913PPXUUyiVSgwGAy+//DL5+fn88ssvPP744zz//PP861//4uabb7bca9GiRaxcuRJnZ2dWrlzJjh07iI2NZe3atfzyyy9XvLatkmTLCl577TX27t1LVVUVgYGBTJ06lYED6/ahEEII0bJVFGupOG/bZKsu7rjjDpydnUlLS6NPnz5MmDABgK+++ork5GR+/PFHVCoVX3zxBQ8//DA//PADTz/9NB999BEDBgzAZDJRUlKCl5cXX375JY899hhjxoy5pJ8nn3ySEydOEBsby2OPPVbj3OTJk694bVslyZYVTJgwgUcffRSNRsPx48eZNWsWK1aswNPT096hCVGD2Wy+5Amqffv2kZOTQ1VVFRMmTECt/vOfhYMHD7J69WqqqqoYM2YMcXFxNa597LHHMJvNtG/fntmzZ9c4t3nzZo4fP46TkxPjx4/Hx8fHcq6yspLMzEy8vb3x8vKq0acQLY2Lp2Oz6GPlypXExsZiMBiYNm0a8+bN44033mDt2rUcOHCAPn36ANV1wi4aNmwYjz76KOPGjWPEiBHExsba6i20afIvnBWEh4db/q5QKNDr9RQUFEiyJZrM0aNH2bt3LwUFBYwbN86ydgIgJyeHXr16UVJSwqhRo1i9ejVGnQldhR5thYG5s59k70+7AegR3BcXR1eMOhMGvZGNm3bwyhuvAKA874LzuSD4S8Xsd995F5PZRExEDwaH3IJCASqNEpWDiiXvfszaLasB6ODRhS6duqByUKLWqDh47FduHjcCqE7YFi9eXOP9zJgxA7PZTHh4OPPmzbPp106Ixqrr9F5TUavVjB07lieeeII33ngDs9nM/PnzmTp16iVt33zzTY4dO8b27du5//77ueeee5g7d64dom7d2lyyVVFRwYoVK0hKSuL48eOUlpYyf/58Ro0adUlbnU7HJ598wubNmyktLSUyMpLJkyfTt2/fS9q++eabrF+/Hp1OR//+/YmIiGiKtyNaGbPZTEFBAXq9npCQkBrnZsyYwf79+ykrK+P48eMAmAwmqkp1rF31Hc+8tAAAhxJ3buyjoLJYR1WZjqLCInJycgBI/ukMn963CbPxz4SpPOPPvd22vPsLHk5eltfpZ/Mtf886UsDvulM14/3jz4oiLYe/O13jXPbJPMvff/vfKTLcKiyvf8/62fL3M9sL+O/0rWhcHXB0c8DR1YH/fv4/issuEOQfwoSh9+Pq44SrtyPOXo7865V/8Z///IeQkBDeeOMN+vXrd9WvqxBtzbZt2yy/dI0ZM4Y33niDcePG4ePjg16v5+jRo/Tq1YsTJ07QrVs3unXrhlqtZvPmzQB4eHhQXFzcoL4bc21r1eaSrYtPaAQGBhIVFcXBgwcv2/aVV15hx44djB8/nrCwMDZs2MDcuXN5++23ueaaa2q0nTVrFo8++iiHDh3i9OnTUuxO1MpgMJCVlUV6ejpdu3bF39/fci4lJYXY2FgqKiq4+667+XjJp5RfqKLivJby81X8tOMXfkv6BYAvH92MuUKJtrw6UTpzptByn4Nbj+OTEW15bTKb8HUNwEntjLeTf41EC2BAx3gi/brioNKgUdWcqugU0INZQ/+Fg8oBf7fgS97P/OFvAKBRX1pR+cZOt3FNyHUYTDrcHb1qnPNw8ua68KFU6MsIdmtPZbGOymIdUJ1wlpWXAOBscmfrW39+RhUKSPxtL6dPn+b06dMkJ2bhUXoWj2BXvIJdSc04yYgRI4iOjmbixIk8+OCDl/k/IUTrc3HNlsFgIDw8nA8//BCAe+65h8LCQoYOHQpU/zs0adIkevXqxYIFC0hOTkaj0eDi4sKSJUsAmDp1KrNnz2bx4sX1XuTemGtbK4W5je2iqdPpKC0txdfXlxMnTjB16tRaR7aSkpJ46KGHmD59OnfddRcAWq2WiRMn4uXlZfmGrM2TTz7JbbfdxoABA64az8WipsuWLasx9SNaroqKCk6fPk1GRsYl31cvv/wyTz/9NACfffIFNw0aTWleBaUFleSeLWDUo9XfM10CezL7xldqXLts36scSN+Fh5MXC0a8hY/rn4laXuk5kvMO4+7oQTvvCHxdA2tcq1Aq0Lio0Tirq/90dfjj7w44uKhRa1SoNUpUDtVTgKo//q7WqKqPqZUo1bVUivnjd4qLv1uYjGZMehMGvQmj3oRRb6z+U/fna73WiK5cj7bcgLZc/8ffq//UVxkxm81cqCykuPI8YKajb83PxRf73+WXjN1U6Mp4d9wanBz+3C7lUM4+3t++EIDpdz7OrH/OwTvMDe9QN5RqJRMnTsTPz49+/fpZFg8LUV9VVVWcOXOGjh07NmjrFtHyNPb/eZsb2dJoNPj6+l613c6dO1GpVCQkJFiOOTo6Mnr0aJYuXUpubi6BgYG1Xms0GsnKyrJazKL5MRgMpKWlodVq6datW41z8fHx/PjjjwBkn8rDWArFORUU55RTduzPEc/v3t2OLrHm92JH3864OLjR0bfTJX3e23cmk/rPQaWsToBcvB1x9nDEyVNDJ/cwhnsMxMlDg7OH5o8/HXFyd0Dj6oDaUdUiRluNBhO6cj1VZXoq/jKqVz3CV0X5BS1TveZwb/FMtPoqHP82olZVWYWnkzfFVRcwZjiy4/3fAVA5KHEOVPH5559jNpvp2T2WsbePReWgslx7/PhxPDw8CA0NbdL3LIRo/dpcslVXKSkphIWF4erqWuN4165dAUhNTSUwMJCysjJ+/PFHBg4ciEajYffu3Rw8eLDWhYgABQUFFBb+OeWTnp5uuzchGq28vByTyYS7u7vl2IULFwgKCkKn0zFs2DC+/2Y9RVllFGWVUZxTgYvWy9L2o3+uJsyro+W1c7EvvcKux9c1gHCfaP5uwYjFODircfNzrl6n5OOIq48TLj5OuHo74fLHa0dXhxaRPNWXSq3E2dMRZ09HvEPdLtvOZDBRUaSlOKec4nPllORUUJRdzojAWxgQcSOVugqUij8TKaPexOFDSVwcyHevCOCzSVvwbueOX0cP/CM8efRfj7Fl22YiIiLYt2/fZX+ZEkKI+pJk6zIKCwtrHQG7eKygoACofvrw+++/Z/HixZjNZkJDQ3nmmWeIjr70BynAunXrGlXVVzSNzZs389BDD5GWlsZbb73FzJkzqSjSUpRVxoXMUpwcnNHpdBz86TBfTtta49p2Dp3p36EKf7dgXBxqJgwhnu15JP453P2dcfN3xt3f5Y8/nXEPcMbdzwVHN4emfKstklKtxM3PGTc/Z0K7+9U4ZzSYKM2toPhcOUXnyjmfXkLBmRIiFF14fcyXnL1wCg8nL0xGM4VpJRSmlXB8azp7du8F4HzeBQqPVOFoLMMz2BWFQsHOnTs5duwYI0eOlIdfhBD1JsnWZWi1WhwcLv2hp9FoLOcBXF1defvtt+t834SEhBoFT9PT01m4cGEjoxUNsWLFClavXs2RI0fYtGkTHTtWj0DpKvTozps5c+YMAOs/34bX4a7oKgyWa2P8+6Dz0RLkEXZJ7aqBESOI6zwSjyAXPINc8QhyxTPIpfrPYFecPTWtclSquVCplXiFuuEV6kb4X47rKg1/JF7FFJypTsCKs8swm0Fv0nNjp1tJyTuKt4s/+z5NAsDZy5Hgrj68v/4Dvt64CoDExESGDRtmh3cmhGipJNm6DEdHR/R6/SXHdTqd5XxD+Pn54efnR2JiIomJiZSVlTUqTnFlBw4c4ODBg+Tl5VkWpl/0+++/8/XXXwPwzZJNdA/oy/mzpZQVVFKhK8dR7UyIZztcDd41Ei2ABwfMAap/GHv/8YPdK7Q6mfIMdsXV2wmFUhKq5kTjrCaoiw9BXf4srqqvMlCYXkruyQtEJrUjN/k8uso//19XFmk5/eM59uzZU30PtSPqs76cO36ewE5eKFVKTpw4wW+//cbIkSNrFG4VQoiLJNm6DF9fX/Lz8y85fnG9lZ+f3yXn6iM+Pp74+HjL04iicYqKiiguLq5RYBZg0qRJHD16FLVazaTx0yjNrqIwrYSC9BKKfqxOhjQqRw7vTMYj8s9rXTSuvDvu/ywjUK6+TniHuVlGTLxD3fAKcZMpvxbOwUlNUGdvgjp70/PWCExGEwVnSjh3/Dznks6Tm3wefZWRKdfPJSnnIJX6ClK2nCNlyzkc3Rxo3zuAVT9/wgfL30GpVLJ27VpuvfVWe78tIUQzI8nWZVyswVVeXl5jkXxSUpLlvLC/vLw8rr/+ek6dOkVCQgLffvstBp2R82dLKThdTLBLe45yFIPBwEePraKd95/rbbr69eal0UsJcAtGqaxeTO3grMK7nTs+7dzxaV/9p3eYuyRVbYRSpSQgyouAKK+ayVdSJzIP9yfnxAXMpupF9toyPSm7sli34TsATCYT3toQqkp0OHlULzeoqKjAZDLh5nb5xf6idfj1/1Jsdu8+42pfAyxaDkm2LmPIkCGsWLGCdevWWeps6XQ61q9fT0xMTKOfVJJpxLo7e/Ysq1at4sCBA9xxxx384x//sJzz9fYlP6/6YYWfdv/MNwv2cj6j1FK4M8a5P7592hPm1ZEA95oV2QND/YjpEIFvuAc+4dXJlZufs6ynEhY1kq+ESKrKdGQcyufsL3lkHs5HX2Xkzj4PcThrP0WVBZz4Oo+T326jXa8AogeHsn7/Gp6Y+wS33XYbTz311CVlQoSwlg4dOuDo6IizszNarZZevXqxbNmyS56or6vly5fTv39/unTpUuv5n376iSlTpqBWq1m0aBFvv/02ixcvpnPnzle9FmDOnDlce+213HnnnQ2Kz9rmzJlD7969ufvuu21y/zaZbK1Zs4aysjLLlODevXvJy6veWmTs2LG4ubkRExPD0KFDWbp0KUVFRYSGhrJx40ZycnKsslebTCNeSqfT8fvvvxMTE1PjH4hTp07xxBNPAODu7ME1AdeRd6qYglPFFKaXEO7eiQrHMtp7R5J7+jxq5Z/f1t1DrqWHArxC3fDt4IFvuIflTxmtEvXl5KYhelAo0YNCMeqNZB87T5df29Hrt2upuFD90IzJaCb9l1zSf8nl7W1LqKio4H//+5/le1gIW7m4EbXJZOLWW29l+fLlzJgxo0H3Wr58OV5eXpdNmD777DPuvvtu5s+fD8BNN91U52uzsrJYv349r732Wr1iMhgMl2xaX9ux+lx/0dy5cxk0aBB33HEHKpWq1jaN0SaTrZUrV1r2igPYtWsXu3btAmDEiBGWIf8FCxYQGBjIpk2bKCsrIyIigldffdUqu6LLyFZNr7/+Ok8//TRarZbNmzczfPhwtOV68k8Xo87ysrTb+cM++usO17j2kRtesPxd8Udi5RfhiX+EJ34Rnvi0c0ftaP0Pj2jbVA4q2sX60y7WH/MDZgrOFHP6pxxS92RTWazFZDIS4hFO1oV0PJy8Sf2qFFXmaSIHheDq7cTBgwdJSkpi/PjxlqechbAGnU5HRUUF3t7elmOvv/46q1atwmAwEBAQwEcffUR4eDjfffcdTz31FEqlEoPBwMsvv0x+fj6//PILjz/+OM8///wlW+4sWrSIlStX4uzszMqVK9mxYwexsbGsXbuWX3755YrXAnz66aeMHTvWMoug1+t55pln2LZtGzqdjk6dOvHRRx/h7e3NxIkTUSqVpKamkpeXx4cffsiMGTPo378/v/76K0899RQdO3bkkUceoaysDCcnJxYvXszAgQNJS0sjNjaWadOmsWXLFu677z4iIyMveb+33XYbAQEBREZGsnnz5lr3Sm6sNrddT3PTlrbr2bdvH9u3b+fQoUOsWLGixm8PX3z+Bffdfx8ADybMYGSnCRRllVvOHzi7i2D3dgR7tkel/PM6j0AX/CM98evoiX+kJ74dPHBwapO/Q4hmwmQ0kXWkkJRdWaT9kotOq+V8Rb5lGluhgLBYfz7Y9jLrNq61/ELXs2dPO0cu6qq2rVvsvWbrr9OIaWlp9OnTh02bNqFWq/nqq6/Yvn07H374ISqVii+++IIVK1bwww8/0LNnTz788EMGDBiAyWSipKQELy8vhgwZwmOPPcaYMWNq7W/ixInExsby2GOPWfpfu3YtsbGxV7122LBhPP7449xyyy0A/Otf/8JoNPLMM88A8NJLL5GTk8P777/PxIkTOXjwIHv27MHd3Z0dO3Zw4403sn37dm644QZ0Oh1RUVEsW7aMm266iT179jBu3DhSU1MpKCigY8eOfPbZZ9x3X/XPl8u9X4AXX3yRkpISXn/99Utilu16RLNjNpu5cOHCJY/Bv/7663zzzTcAHPn9KAGOYeSevEDuySJyfjUS4B5ChG9nXIr8ayRaAH3bx+Ho5mBZP+Mf5Yl/hJdMBYpmR6lSWka8tOV6zvx0jpO7s8g7WQSA2QzH9p3kh03VC+v1WgNREbIAWjTexWlEg8HAtGnTmDdvHm+88QZr167lwIED9OnTB6jeUu6iYcOG8eijjzJu3DhGjBhhlZmbq8nMzKyx7nnt2rUUFxezZs0aoHpkrkOHDpbz48ePr7GLR0REBDfccANQPWChVCot05iDBg0iMDCQQ4cOERYWhoODA//v//0/y7VXer9BQUGWh+CsTZItO2mN04hms5m7776b7du34+npSXJysuVc+fkqOod0B6qTrbdnfMbAjsMt573Vgbx8y8eW10qVAt9wD/yjvAiI8sQ/yguPQBdZvC5aFEdXB7oMa0+XYe0pzikndXcWyTuzMBd6MevGV9h2ch0hnu35Zs4+ug4Pp2t8e1y8HFm2bBkqlYr/9//+n0wxinpTq9WMHTuWJ554gjfeeAOz2cz8+fNr3UbuzTff5NixY2zfvp3777+fe+65h7lz59o0PhcXF6qqqiyvzWYz7777LiNGjKi1/d+f5r3a071//Tnh4uKCUqm0vL7S+62qqsLZ2fmS+1mDJFt20pIXyBcVFbFv3z7UanWND4dCoSA9PZ3c3Fxyc3P58Zvf0Z6D3OQLlOZX4lbangeum0WEXxcC3Wtu9uvkoSGwkzeB0V4EdPLGr6MHao2ssxKth2eQK33Gd6LX7VGcOZBLwAYvOgV0x2w2U1Wq5+DXqfz+7Sna9fXjqRefIr8wn4ULF/L777/X+K1eiLrYtm2bZWnKmDFjeOONNxg3bhw+Pj7o9XqOHj1Kr169OHHiBN26daNbt26o1Wo2b94MgIeHB8XFxQ3q+2rXXnPNNSQnJzN48GBLfIsXL2bQoEG4uLhQUVHBmTNn6vT0bufOnTGZTGzZsoXhw4ezb98+cnJyiI2NtWyr91eXe79QvRm9rabzJdkS9ZKXl0dQUBBms5kbbriBESNGYDKaKEwrIefEBUI1kTg7/E6Eb1e2fXqgRlIV6B5a/VoB3mHuBHbyqk6wOnnhHiCjVqJtUKqVRA4IJnJAMHkpFzi6IZ0z+89hNlU/yfjdmh/IL6wuqNw1qpskWi1Ec6iFdccdd+Ds7IzBYCA8PJwPP/wQgHvuuYfCwkKGDh0KVD+VN2nSJHr16sWCBQtITk5Go9Hg4uLCkiVLAJg6dSqzZ89m8eLFtS5yv5KrXTtu3Dg+//xzJk+eDMC8efPQarVcd911lp8D8+bNq1OypdFo+Prrr3nkkUeYPXs2Tk5O/N///R9ubm61JluXe79ms5mtW7fy5JNP1vl91ocskLez5rhAPj8/n7Vr17Jr1y5GjhzJPffcU+N8REQEZ86cwVHjyOpnt3H+VBn6quo1AFX6SjRqR5SKP4dtVQ5K/CM9CeriQ2Dn6tErjYustRLiorLCSpI2n+XE1rPoKgycKjjO90f/xz96TqR/XF/6jO9EQJQXAN999x0jRoxo8JZhovEau1i6rTOZTPTr14+1a9cSFhZm73AA2LhxI19++SVffvllredlgXwL1VzWbBmNRkwmU41Nt8+ePWuZ29fpdNw54U7yTxVXb2Fy/DzXeA4iotM1RPt3I/NwAQ6qP691cnBG46ImsLN39T50naunBFUOMiUoxOW4+TrT767O9Lo9kpTdWbj/4EykX1cAso4UknXkR9r18kfZqZSEMQmEhYXx6quv2qwAoxC2pFQq+eijj0hLS2s2yVZxcTH//ve/bXZ/GdmyM3uNbO3atYvXXnuN3bt38/HHHzNu3DjLOV2VDl8/X8rKywj2CePlWz7GqDdd9l7OXo4Ed/EhqGt1guUd6iabMAvRCCajidQ92fy2JoWygj8XEr+783kOZ+8HYMmSJTz00EP2CrFNk5GttkdGtsQVGQwGDh48SM+ePWs81VRaWsr3338PwM6dO4mLjedcUiHnks6Tk3yBu3vOwMc1gHDvqEsSLVcfJ4K6+hD8x38eQbLeSghrUqqUdLohjMiBIZzckclvX6dSWaQlocc9KBRKMi6comNlb4pzyvEMath2LEKIpiPJViv25ptv8vzzz1NaWsru3bsZNGgQUL0QsFt4T5RKJe7OHpzamcu6wh9rXNs3/AbL3119nQiJ8SW4qw9BXX1wD5D9A4VoCiq1kq7x7YmOC+XE1gwc1zrwT59nqdCVk3GgkMxfd9PtpnB6j41i2X+W8vPPP7No0SJCQkKufnMhRJORZMtOmmLNlre3N6WlpQBs+n4Lfvpwso8Wkn2skKoSHS/dvAx/t6BLEicXb0eCY3wJifEhOMZXkish7EytUdF9VAc6Dw0jaXM6v687ja7CgNlk5uiGNA4mHuepb56iuLSYb775hlOnThEQEGDvsIUQf5Bky05sXWerskRLR48YfDx86Rx4DUU/Kthz9miNNgHuwUB1javgGB9CuvkSEuMr04JCNFMOTmp6JkTSNb49h384w+HvzmAymDidlYpeW/1E8OgRt0qiJUQzI8lWK2Q2m/l63h4qirQsuvnzSxInBydV9chVN19CuvviHeYmyZUQLYjGxYFrx3ei8w1h7PssCQ724OVbPub7o//jWtPN7PnkKH3v7Iyja/WTwoWFhfj6+to5amFrf92f8HKeffZZOnfufElJn7rasWMHVVVVjBw5st7XHj16lFtuuYW0tLQG9d2SSbLVCikUCoK7+nL6p3MAKNUKAjt5VydX3Xzxj/REqVJe5S5CiObOPcCFm564loxD+ez99Bh3Ok4D4MTWDE7/dI7r7u7CBacshsUP49lnn2X27Nmo1fLPflv24osvNur6HTt2UFRU1KBkqy2Tn7itVOTAYK65NYKR8/ty37LhjH76OnrdHkVgJ29JtIRoZdrF+jP+jcH0mRCNyqH6860rN7Dtw98Yf+udVFRU8OSTT7J8+XL7BtqKvfnmm4SFhREWFsaOHTtqnDtz5ozl3MyZMy+5NiEhwXL+75YvX86bb75Zr1iGDBnCnDlzGDx4MJGRkTVKhEycOJG33noLAL1ez5NPPkm/fv2IjY1lwoQJXLhwAaiuOzV58mS6d+9Oz549mTRpEocOHeLDDz/kv//9L7GxsZbEbdOmTQwaNIg+ffrQr18/tm/fbunv+eefJzo6mj59+rBixYp6vY/WRH7FsRNbL5AP7xNIeJ/AqzcUQrQKKgcVvcZEET0olB8/SyL91zwAYvyvJet8Bl0iYrjv3vvsHGXrVVJSQlZWFgBarbbGOaPRaDl3MZn5q/z8fMv5vysvL6ekpKTe8Zw6dYrt27ej1+uJiYnhxx9/ZMCAATXavPbaa7i6urJ/f3Xttpdeeomnn36a999/n8ceewxnZ2cOHz6MUqkkPz8ff39/HnroIYqKiiwJ2+nTp3n++efZtGkTHh4epKamMnjwYNLS0khMTGT16tX8+uuvuLu7c++999b7fbQWkmzZSUveiFoI0Xy5+TkzfHYfso4WsOfjo4xXPUjvdtfj7ODK98/t58ZHYvEKcQOgsrISZ2dnO0fcOnh4eBAaWr0X7N+3UlKpVJZz3t7el1zr7+9vOf93rq6ulyRvdXHHHXegVqtRq9XExsZy6tSpS5KttWvXUlxczJo1a4DqHUM6dOgAwPfff8/PP/+MUqm0xFibjRs3kpqaSlxcnOWYUqnk7NmzbN26lQkTJuDh4QHAtGnT2LNnT73fS2sgyZYQQrRCod39GPfaYH5ZlQLrATOcP1vK10/u4doJnfDv7Uyfa/swc+ZMnnjiCVnL1UizZs1i1qxZtZ7r2LEjmZmZl7123bp1lz03ceLEBsXz1yrnKpUKg8FwSRuz2cy7777LiBEjGtTHxXsMHz6cr7766qpt2/KDWLJ4RwghWimVg4rr7unCrc/1x9W3+oevyWDm5/+e4PYb7+TcuXMsWLCA559/3r6BCrsYM2YMixcvpqKiAoCKigqOHTsGVK8je/311zGZqncQyc/PB6pH8IqLiy33uOmmm0hMTOTw4cOWYxenJePj41m9ejWlpaWYzWaWLl3aJO+rOZJkSwghWrnATt6Me20wnW9sB4DZbMJLGYBCocTH05dHH33UzhGKpnRxhGnevHn07duX6667jmuuuYb+/ftz6NAhABYvXoxWq6VHjx7ExsayYMECAG6//XYOHTpkWSAfFRXFV199xbRp0+jZsyddu3a1rOe6+eabGTduHL179+baa6+lffv29ni7zYJsRG1n9tqIWgjRNmUdKWDHB79TWazjdMEJKvTlDBsSz7BHYnHxlk2V66Ilb0R98803c8899zS4zlZb1dj/5zKyJYQQbUhoDz/GvxFHxIAgIvy60D24D7nJF1g9ZzdnD+Wh1+uZPn06p06dsneowsri4+MpLS0lISHB3qG0OZJsCSFEG6NxceDGmb2If7wXGtfqhfH6SgObX/uVB25/iA8//JDevXvzww8/2DlSYU2JiYns3r0bd3d3e4fS5sjjJ3bSFBtRCyHElXToG0RQZx+2LP6N3OQLaPVVbN29BaguCyFb/FyZrMJpOxr7/1pGtuwkPj6eRYsW1VpNWAghmoqTh4ZbnrmOngkRODo48dSIxfRtH8eEayfTzjXK3uE1SyqVCqiuSyXahotPbDo4ODToehnZEkKINk6hVND3zs4EdfFm27u/M+X6eQBsfPUA19wawbUTOqFQKEhOTpYHeQC1Wo2Liwv5+fk4ODhYCn+K1sdsNlNRUUFeXh5eXl6WRLu+JNkSQggBQLvYAMa+NohNr/7KhYxSzCb4/dvT5Jy4QEnEGe5/4F7ee++9GnvttUUKhYLg4GDOnDlDenq6vcMRTcDLy4ugoKAGXy/JlhBCCAs3H2du/9f17PnkGCd3VFc9T/otmedffhij0cj06dOJiIhoVNXx1kCj0RAdHS1TiW2Ag4NDg0e0LpJkq5F0Oh1vvvkmv/zyC2VlZXTo0IF//vOfdO/e3d6hCSFEgyhVSuKm9iA4xoc9y47i7eLHDZGj2HRiDbfceDvDhw+3d4jNglKpbHF1toR9SLLVSEajkaCgIN5//338/f3Zvn078+fPZ+XKlbi4uNg7PCGEaLDoQaH4d/Rg479/ZVyvB4nw68o1fn3Z9dERBj3YDZVD437bF6KtkFV9jeTs7MzEiRMJDAxEqVQybNgw1Go1GRkZ9g5NCCEazSvUnbH/HkRId196t7setcqBlF1Z/LBwP+Xnq0hLSyM1NdXeYQrRrLW5ZKuiooJPP/2UOXPmMHr0aOLi4tiwYUOtbXU6HUuWLOH2228nPj6eadOmceDAgSvePyMjg9LSUkJDQ20RvhBCNDkHRzWj5vela/yfe9vlpRSxYsEWRsTfRP/+/dm3b58dIxSieWtzyVZxcTHLly8nPT2dqKgr15B55ZVXWLVqFcOHD+eRRx5BqVQyd+7cGrub/5VWq2XhwoXcc889uLm52SJ8IYSwC4VCwcBJ3eh/b1cUyuqNjD/fuoSUUycpLCxkxowZmEwmO0cpRPPU5pItX19fvvnmG1avXs306dMv2y4pKYmtW7cydepUHn74YRISEnjrrbcICgpiyZIll7Q3GAw8++yzhIaGMnHiRBu+AyGEsJ/uozowfHZv1E4qxvacRNfAWNydPHn6/72Krtxg7/CEaJbaXLKl0WjqtAXFzp07UalUNTbsdHR0ZPTo0Rw7dozc3FzLcZPJxMKFC1EoFCxYsACFQmGT2IUQojlo3yuAW5/rj2+AD4/c8AJzh71G0W9G9nx8lPNnS+0dnhDNjjyNeBkpKSmEhYXh6upa43jXrl0BSE1NJTAwEIDXX3+dwsJCXn/9ddTqK39JCwoKKCwstLyWgnhCiJbIN9yD218ZyIZ/7Ued4YDZDGkHcqko1tLj5g4kF/7OTSNvkl8+hUCSrcsqLCysdQTs4rGCggIAcnJy+P7779FoNDVGwf7973/Ts2fPS65ft24dy5cvt03QQgjRhFw8HbntpQFsefMgWYer/03MO1nEvC0LWL1vOY8/Ops3Fr8mCZdo8yTZugytVlvrhpMajcZyHiAoKIhdu3bV+b4JCQkMHDjQ8jo9PZ2FCxc2MlohhLAPtUbNyHnXsvfTY5zYmkH6+RRW71sOwOK332DogGHcesco+wYphJ1JsnUZjo6O6PX6S45f3JrB0dGxQff18/PDz8+PxMREEhMTKSsra1ScQghhbwqFgkEPdsfV1wnF/8G9fWfy5YH3uHfwDAJNHTn90zna9w5ArZEiqKJtkmTrMnx9fcnPz7/k+MX1Vn5+fo26f3x8PPHx8SQnJzNlypRG3UsIIZqDXmOicHRxQPGlgki/roR6dSBlVxYmo5mKC1V06BeEm6+zvcMUoslJsnUZUVFRHDx4kPLy8hqL5JOSkiznG0NGtoQQrVHMiHAcnNXs/USBQWeisljHyZ1ZRA0KYefqn+kV153grr6yjku0KW2u9ENdDRkyBKPRyLp16yzHdDod69evJyYmxvIkYkPFx8ezaNEiZs6c2dhQhRCiWYkeHMoND/dE41L9+7yuXM/Wb3ZzzxO3M+ORh0nemYGu4tJlGkK0Vm1yZGvNmjWUlZVZpgT37t1LXl4eAGPHjsXNzY2YmBiGDh3K0qVLKSoqIjQ0lI0bN5KTk8O8efPsGb4QQjR7HfsFoXZUsvODwxRfKOWNzQsorixi7dbVtAvuwIMl02jXKwCfdu72DlUIm1OYzWazvYNoahMmTCAnJ6fWcytXriQ4OBiofuLwk08+YfPmzZSVlREREcHkyZPp169fo2P46zTi4cOHWbZsGZ07d270fYUQojnJTipkxwe/s/PgZj7+8TU6+Ebz1tyPCelYPTvg096ddrH+snhetGptMtlqTi4ukJdkSwjRWuWmXGDH+7/z4+97iPDtgoujKx36BuIdVj2qpXFR06FvIO7+LnaOVAjbkDVbQgghbCow2psbH+3FoL434KJxBTOk7c+lML0EAF2FgZRdWWQezsdkkt//RevTJtdsNQfyNKIQoi3x7+jJjf/syc6PjlB4pjrJOn0gm8UrX2LksJsZ1GcouSeLKM2rpEPfQJw9G1bLUIjmSKYR7UymEYUQbcn5zFL2LD1K5olcPtz7L45kH8DRwYmPXviC7tHVW5wpVQpCuvkSEO0lJSJEqyDTiEIIIZqMT5g7g6Z0I7SrPxpV9eiV0Wgk5ehpSxuT0Uzm4QJSdmWhLZcSEaLlk2lEO5FpRCFEW+XTzoPrJ3bjKfPLvPifJxneeQwdzD04l1RIUFcfy2hWaX4lxxPPEtbTD78OnnaOWoiGk2lEO5NpRCFEW5WXWsQvq06SfbTQciwg2ouQ7pdWmPcKcaV97wAcnGSMQLQ8Mo0ohBDCLgKivOh1exRhPf/cazYvpYidG/eg02trtC3KLidpy1kuZMlsgGh5JNkSQghhN8Fdfeh+c0fa9fIH4Jezu3ly+TTmLZyF0Wis0dagNXL6x3OkHcjBoDPWdjshmiVJtoQQQthVWA8/usa3x7OLhuU/L8ZgMrA7aQtLP/4Icy11twrTSzmeeJaS3Ao7RCtE/cnkt53IAnkhhPhTu1h/jPpuLDj7Cs9/OpuBHePp4zOUM/tz6NAvCKWy5houXYWB1D1Z+Ed6EdrdF6Vaxg5E8yUL5O1MFsgLIUQ1s8nM6Z/OseO7fZjPuoC5OsHyCHShY/8glKraEyondw0d+gbi6uPUlOEKUWfyq4AQQohmQaFU0PG6IOJuHkDk9aEoVNXJVkluBaf2ncNoMNV6XVWpjuQdGWQfK6x12lEIe5NkSwghRLOhVCmJHBBMSIwPUQNDUKoVlOtKWbH9E1J2Z2DU174w3myCc8fPk7w9g8oSba1thLAXWbMlhBCiWVGqlUQODMGoN3H6XAr/WvwYeaXnMJgM3G2eQuSgENQaVa3Xll/QcmJrhmz3I5oVSbbsRBbICyHE5ak1KqIGhbD3QCUFZbkA7ErdwPDOt2PaZSZqUMhlC5xe3O6n+Fw54dcG4ujq0JShC3EJqy2Q/+233/j11185evQoeXl5FBcX4+TkhJeXFxEREcTGxjJgwAB8fX2t0V2rIQvkhRDi8iqKtDz9+POs376OKX3n4+lQ/TPE0c2BqMGhaJyvPGagclDKdj/C7hqVbFVWVrJmzRq+++47cnNzuXgrjUaDh4cHWq2W8vJyTKbqRY1qtZrrr7+eCRMm0KNHD+u8gxZOki0hhLiyktxyju9Iw1AJqbuz0VcaANC4qokaFFqnkSvZ7kfYU4O/67799lv+85//cOHCBSIjI3nwwQfp1q0bXbp0wcXFxdLObDaTmZlJUlISBw4cYM+ePezevZuBAwcyY8YMQkJCrPJGhBBCtE4ega5EX9+etP05RMeFkronC125AV25gZRdWUQNCsHJXXPFexRll1NeeJb2fQLwCnFrosiFqNbgka2hQ4cSHx/PXXfdRURERJ2v02q1bNmyhS+//JKRI0cyceLEhnTfasjIlhBC1E3uyQtkHi6gqlzH6++8ilkPt3S/C7WjisiBIbh4OdbpPn4dPAjr6YfKofZF9kJYW4NHtj7//HPatWtX7+scHR255ZZbGDVqFLm5uQ3tXgghRBsT2MkbbbmO+6f9P3b8logCBe28I+gZeh2pu7OIuD4YN1/nq96nIK2E0vwKwq8Nwt3/6u2FaKwG19lqSKL1VyqVSqYQhRBC1Eu72AD69u1b/UIBedpMAIx6E6f2ZNd5v0RtuYGUXZlkHs7HZKy9WKoQ1iIrBYUQQrQYCoWCV95ZyLlz5xjUcxi9OvflzE/nKM2rxGQ0c/rHbDr0DcIr9OrrssxmyD1ZREluBR36BtV5GlKI+rLq3oilpaXs3buXkSNHWuuWrdZf62wdPnxY1mwJIUQ9GPVGkndkUlmsw2Q0k3Ygh+Lscsv59n0C8A33qPP9lEoFwTE+BHbyRqGUQqjCuqy6XU9ubi6LFi2y5i1brfj4eBYtWsTMmTPtHYoQQrQ4KgcVUQND0DirUaoUdOwXhE97d8v5s7/mkX+qqM73M5nMZB0t5OTOTKrKdDaIWLRl9Uq2cnNzr/hfQUGBreIUQgghatC4OBA5MASVg5KfDu/hlR+ewKP9n1OBmb8XkHPiPPWZwCkrrOJEYka9EjUhrqZea7YmTJhwxX2mzGaz7EMlhBCiybh4ObLh9zUseHkeAP8X+in3DvgnuckXADiXdB6j3kRId986/3wyGkycPZhP0blywvsEXrVKvRBXU6/vIHd3dx588EFiY2NrPZ+ens7zzz9vhbCEEEKIuhkz/lZe/NdzVGmryMo9S0BnD1QOSrKPFgKQl1KEUW+iXS//eg0IlORUcHxLOu16BeDTzv3qFwhxGfVKtjp16kRpaSkdO3as9bzRaKzXcG1rsXbtWr777jtOnz7Nvffey6RJk+wdkhBCtBldu3blnXffIed0AaN6j0WhUBDYyRuVg5KMg/kAFKaVYNSbCO8biLIeC+ANOhNnfs6hOLuMdr0CUGukEKqov3olW2PGjKGqquqy5wMDA3nyyScbHVRL4+vrywMPPEBiYqK9QxFCiDZpypQpmM1mzvycw4XMMgD8OnqiclCSfiAXsxmKssow6k107B+ESl2/58POZ5RRWlBFeO8APINdbfEWRCtWr2QrLi7uiufd3d0ZNWpUowJqiQYPHgzATz/9ZOdIhBCi7VIoFHToG4i+0kBZYfXAgHeYOyq1ktM/52A2minNq+DU3mwiBgTXe5RKX2kgdW82fh09CLtGtvsRdWfV0g8tQUVFBZ9++ilz5sxh9OjRxMXFsWHDhlrb6nQ6lixZwu233058fDzTpk3jwIEDTRyxEEKIulKqlEReH0JeSTbTX7iPM5mpeAS5EjUwBOUfo1nlhVWk7s5CX2VoUB8FZ0o4nniW0vy6VasXos0lW8XFxSxfvpz09HSioqKu2PaVV15h1apVDB8+nEceeQSlUsncuXM5fPhwE0UrhBCivg78tp8Jj97CgaM/8fQ7c9Drdbj5ORMdF4rasXo0qrJYR8quLHQV+gb1Ub3dTxYZv8t2P+LqGp1sDRkyhIyMDGvE0iR8fX355ptvWL16NdOnT79su6SkJLZu3crUqVN5+OGHSUhI4K233iIoKIglS5Y0YcRCCCHqIzY21rJ/b3llGbnnc4DqMhHRcaE4/FHKQVum5+TOLKpKG1bE1GyuftLxeGIG5ecvv55ZiEYnWy3t6UONRoOvr+9V2+3cuROVSkVCQoLlmKOjI6NHj+bYsWPk5ubaMkwhhBAN5OzszFdffcWUKVPYs+1H2gW1t5xzctfQ6YZQHN0cgOp1WCk7M6m40PBkqapUR/KODLKPFWIytayfiaJpSKW2y0hJSSEsLAxX15pPnXTt2hWA1NRUAgMDATAYDBiNRkwmE0ajEa1Wi1qtRqW6dPFkQUEBhYWFltfp6ek2fBdCCNE2xcbGsnTpUgA0nCf72J//7mpcHIiOC+XU3nNUFmsx6Eyk7M4i8voQ3PycG9Sf2QTnjp+n+Fw54X0DcfGUTa3FnyTZuozCwsJaR8AuHvvr1kSff/45y5cvt7z+4osvmD9/fq1PZq5bt65GWyGEELYV3NUHbZmewvQSyzEHJzXRcSGc2neO8sIqTAYzqXuy6dg/CM+ghpd2qCjSkrw1o3pT687esquKACTZuiytVouDg8MlxzUajeX8RZMmTapzIdOEhAQGDhxoeZ2ens7ChQsbGa0QQogr8enswktvPMetA8fRLjgc+HMz6zM/51CSW4HZZOb0j+fo0DcQ77CGV4y/uKl1cU454dcG4uSmsdbbEC2UJFuX4ejoiF5/6VMqOp3Ocr4h/Pz88PPzIzExkcTERMrKyhoVpxBCiCs7evQot9xyC+np6SQlH+XdBZ9aRpyUaiUdBwSTfiCXoqwyMEPa/lyMehN+HT0b1W9ZQfWm1qE9fPGP9LLCOxEtVZsr/VBXvr6+NdZWXXTxmJ+fX6PuHx8fz6JFi5g5c2aj7iOEEOLKOnToYPn7oRO/kp57qsZ5pVJBh36B+HbwsBzLOJhP7skLje774qbWKbsbXmZCtHySbF1GVFQUmZmZlJeX1zielJRkOd8YiYmJPPnkk7z77ruNuo8QQogrc3Nz44MPPmDYsGEcOXKEEXcMuWR/RIVCQbte/gREe1mOZR8tJPtYoVWeui/JreB44tka68ZE29HoZOvuu+/Gw8Pj6g1bmCFDhmA0Glm3bp3lmE6nY/369cTExFieRGwoGdkSQoimc/PNN7NlyxaioqJw93em/bUBl7RRKBSEdPclOMbHciw3+QKZvxdYJeEy6EykHcjl1I/nMGiNjb6faDkavWZr2rRp1oijSa1Zs4aysjLLlODevXvJy8sDYOzYsbi5uRETE8PQoUNZunQpRUVFhIaGsnHjRnJycpg3b549wxdCCNEAf30y0Le9B9oyPeeSzl/SJqiLDyoHJZm/Vz91XnC6GKPeRHifABTKxj9dWJRVRnlBJe17B+AV6tbo+4nmz+YL5M1mM5mZmWg0mkaPBlnLypUrycnJsbzetWsXu3btAmDEiBG4uVV/8y9YsIDAwEA2bdpEWVkZERERvPrqq8TGxjY6BlkgL4QQ9mM2m9l1eAvXhPSjMu/SUSb/SC9UDirSf80FM1zIKMWoN9LxuiCUqsavwNFrjZz68Ry+4R60i5VNrVs7hdlKJeB37tzJnj17eOSRR3B3r35k9ty5czz55JOWwp1DhgzhmWeeqbXYZ1uVnJzMlClTWLZsGZ07d7Z3OEII0eqdOXOGyZMns23bNubNnccDo2ZQVlB7Bfmi7DLS9udg/mP7Qzc/JyIGhKBysN6SZ42Lmg7XBuIe4GK1e4rmxWrfLd9++y0pKSmWRAvgvffeIy0tjV69ehEZGcmOHTtYv369tboUQggh6k2r1bJnzx4A3njzDdQhesv2PX/nFeJG5PUhKFXV04dlBVWk7M5Cb8U1V7oKAym7s8g4lI/JIJtat0ZWS7bS0tIsW9kAVFRU8OOPP3LjjTeyePFiPvroI8LDwyXZ+oM8jSiEEPbRpUsXnnrqKcLDw1m3bh2RnSKIGhiCWlP7j0T3ABeiBoei+uN8ZZGWlJ2ZVi3lYDZDXmoRx7fKptatkdWSrZKSEnx8/nyC4/DhwxiNRoYNGwaAWq3m2muvJSsry1pdtmjyNKIQQtjPvHnzOHbsmGVbNSd3DRED/hzB+jtXHyc6xYXh4FS9DEZbpufkziyqSnRWjUs2tW6drJZsubq6UlLyZ/2QgwcPolQq6dmzp+WYWq2mqkoydiGEEPbl6OiIq2vNPRDd/Z0J7xPI5bYzdPLQ0GlImGXKUV9p4OSuTKuPRF3c1Dp5ewaVxdqrXyCaPaslW+3bt2ffvn0UFxdTWlpKYmIinTp1qrGGKycnB29vb2t12aLJNKIQQjQvubm5+LR3JzjG97JtNC4ORMeF4uxVvWWbUWcidU8WpXkVVo+n4oKWE9syyEm+YJU6X8J+rJZsjR07loKCAsaOHcv48eMpLCxkzJgxNdokJSU1uvJ6ayHTiEII0TwUFhby6KOP0r59e3755ReCu/rg1+HyxbodnNREDw7Fzc8JAJPBzKl92dV7K1qZyWgm60gBJ3dmoi2T7X5aKqslW0OGDOHxxx+nY8eOtGvXjmnTplnmwgEOHTpEeXk5/fr1s1aXQgghRKP973//45133kGn0/H4449jNptp1zsAjyuUYlA5KIkcGIJncPVUpNkEZ37OoTDNNtvxlBVUcTzxLPmni21yf2FbVquzJRpG6mwJIYR96fV6unfvTmZmJnPnzmXBggU4ODhg0Bk5uSOTyissgjebzJz9LY/zZ0stx0K6+xLYyXZLZjyCXAjvE4jG2eZ1yYWVyP8pIYQQbZqDgwNfffUVQUFBhIaGWo6rNSoiB4aQvD0DfVXtdbUUSgXt+wSg0ijJT60edco+WohRZyS4m2+NLYKspSSnguNb0mkXG4BPe/erXyDsTpItO5HteoQQovno06dPrccdXR2IvD6Ek7syMRlqnwhSKBSE9vBDrVFZ9lrMPVmEQWeiXS9/myRcBp2JM/tzKMouo32vANSOsjNLcybTiHYm04hCCNH8FWWVcfqnc1ztJ2b+6WIyD+VbXnuFuhHeNxClFTawvhwHJxXhfQIt68dE82O9zZ2EEEKIVsBkMvHZZ5/x3HPPWY55hboR2sPvqtf6R3gS3jcQ/sitirLKOL0vG6MNt+HRVxlJ3ZtN+q+5GPXW20ZIWI9MIwohhBB/MJvNDBs2jB07dqBUKhk/fjzdu3cHILCTN7pyPXmnrvxEoE87d1QOSs78lIPZZKY0r5JTe7KJuD4YtcZ2030FZ0oozasg/Nog3P2dbdaPqD8Z2RJCCCH+oFAoGDFiBFA9wvXNN9/UOB/W079O03WeQa5EDQpB5VD9Y7b8fBUpu7LQVxqsH/RfaMsNpOzKJPP3fExG2dS6uZA1W3by1wXyhw8fljVbQgjRTFRVVTFhwgQee+wxbrzxxkvOGw0mTu7IpKLo6lvpVBRpObU3G4O2enpP46omalAojq4OVo/775w9NHToG4iLt5PN+xJXVu9ky2QykZaWhoeHB35+NeevDQYDR48eJTY21poxtmqyQF4IIVoeXYWe5O2Z6OowUlVVpuPUnmx0FdVt1U4qogaG4OzpaOswUSoVBHX1JqizDwobLtIXV1avacScnBwmTpzIAw88wLhx43jyyScpLv5z7rqkpITHHnvM2jEKIYQQzYrGxYHIgSGo1Ff/MerkpiE6Lgwn9+rRLEOVkZRdWVbfwLo2JpOZ7GPnSd6RSdUVirMK26pXsrVkyRL8/PxYsWIFy5YtQ6vVMmPGDAoKCixtZFZSCCFEa3Po0CGKiopqHHPxcqTjdUEo6vCTVOOiJjouDBfvPzaw1ptI3Z1FSa71N7CuTfn5Ko5vO0teapH8nLaDeiVbv//+Ow8//DDBwcFER0fzxhtvcM011/DPf/6T3NxcAJsUbxNCCCHsIS8vj8mTJ9O7d29efvnlS857BrvSrqd/ne6ldlQRNSgUtz+eFDQZzZzel80FG2xgXRuTwUzGoXxSd2ejq5BNrZtSvZKtqqoqHBz+XNSnVCqZO3cuffv2ZebMmWRlZVk9QCGEEMJeqqqq+O9//4vZbObtt9/m1KlTl7Txj/QiMNqrTvdTOSiJvD4Yz5A/NrA2Q9rPORScaboNpkvyKjieeJbCdNtsmi0uVa9kq3379iQnJ19yfPbs2fTv358nn3zSaoEJIYQQ9ta+fXtmzZqFt7c3L774IkFBQbW2C73GD6+QulVwV6qUdOwXhE/4n/saZhzMJzf5glVirguDzkTagVxO/3TO8qSksJ16JVtxcXFs2bKl1nOzZs1i2LBhMhcshBCiVVmwYAGnT5/mySefxNW19oRKoVDQsV8Qrj51K7OgUCpo3zuAgL+MiGUfKyTraEGT/hy9kFlG0pZ0is+VN1mfbZHU2bITqbMlhBCtj77KQPL2DLTldSteajabyT15gXPHzluO+XbwsNkG1lfi19GDsGv8UDnIptbWJsmWnUmdLSGEaF0qS7Sc3JGJQVf3Cu4Fp4vJqLGBtSvh1wahVDVtwuXo6kD4tYGy3Y+VyXY9QgghRB3pdDqWLFnCfffdd9k2zh6OdLwuGGU9ioj6RXjSod9fN7Au5/SPtt3Aujbacn31dj+HZbsfa2p0sjVkyBAyMjKsEYsQQgjRrI0ePZqHH36YL774gu3bt1+2nUegC+16160kxEXeYe5EDghG8cdoVmleJam7s5p8AbvZDLknizixLYOKC7YvvNoWNDrZkllIIYQQbcVfR7SulGwB+HXwJLirT73u7/G3DawrLmhJ2ZVpl7pYlcU6krdncu54IWaT/KxvDJlGbKSioiLmzp3LiBEjuOeee/j111/tHZIQQggbufvuu5k6dSr79+/nxRdfvGr74BgffNq7X7XdX7n5OhMdF4raqXqhelWpnpM7s6gqbfrtdizb/ezMtEv/rYUkW420ePFifHx8WLduHdOnT+e5556jpEQKxQkhRGukUqn46KOP6Nu3b53aKxQKwvsE4OZXt5IQFzl7OtLphjA0rtWFxPWVBlJ2ZtptWq+8sIrjW2W7n4aSZKsRKioq2L17N5MmTcLJyYlBgwYRERHBnj177B2aEEKIZkKpUhI5IMSyEXVdObo60OmGUJw9NUB1IdKU3VmU5jXNfop/J9v9NFybSrYqKir49NNPmTNnDqNHjyYuLo4NGzbU2vbiEye333478fHxTJs2jQMHDtRok5mZibOzMwEBAZZjERERnDlzxqbvQwghRPNx6NAhDIYr19VSO6qIHBiC2rF+NawcnNREx4VaRsZMBjOn9mVT1ET7KdbGst1Pmszi1FWbSraKi4tZvnw56enpREVFXbHtK6+8wqpVqxg+fDiPPPKIZR/Iw4cPW9pUVlZeUk3Y1dWVyspKm8QvhBCi+Th58iRjx46lV69efPnll1dt7+SmIXJAcL1rZ6kcqhM1z+A/9lM0wZkm3k/x7ww6E2m/5HJqXzb6qroVcG3L2lSy5evryzfffMPq1auZPn36ZdslJSWxdetWpk6dysMPP0xCQgJvvfUWQUFBLFmyxNLO2dmZ8vKaWxyUl5fj7CzF4IQQorXLzc3l66+/BuCFF15Ap7v6AnI3P2fCrw2kvsXhlSolHa8LqrHYPuNgPjknztt1DVVRdjnHt5zlgh1H2lqCRidbd999Nx4eHtaIxeY0Gg2+vr5Xbbdz505UKhUJCQmWY46OjowePZpjx46Rm5sLQFhYGJWVleTn/1n198yZM3Ts2NH6wQshhGhWBg8ezE033URQUBBz5syp8/Y6Pu3cCY65+s+iv1MoFbTvU3M/xXNJ58k6UmjXhEuvNXL6x3OkHcjBoJNNrWujbuwNpk2bZo04mpWUlBTCwsIumSLs2rUrAKmpqQQGBuLi4sKgQYP49NNPeeyxx/j11185deoUgwYNuuy9CwoKKCwstLxOT0+3zZsQQghhcx9//DE+Pj64uLjU67rgrj5oy/QUptdv3ZNCoSC0hx9qRxXZR6t/luSnFmHUGWnfOwBFParWW1theiml+ZWE9wnEI7B+X4/WrtHJVmtUWFhY6wjYxWMFBQWWY7NmzeLll1/mlltuwd/fn+eff/6KI33r1q1j+fLlVo9ZCCFE0wsLC2vwte37BKCr1FOaV/91voGdvFFrVJz9LQ+A82dLMepNdOgXiFJlvxVCugoDqXuy8I/wJLSHH0p1m1qtdFlWT7aMRiP5+fkUFBRc9umM2NhYa3drVVqtFgeHSx/R1Wg0lvMXeXl58dprr9X53gkJCQwcONDyOj09nYULFzYiWiGEEC2RUqkgon8wydsbVjDUt4MHKgclaQdyMJug+Fw5p/ZmEzEgGJVD/Z56tCazGfJOFVOSV0H4tYG4+co6ZqslWyaTiS+++IL/+7//o7S09Iptd+zYYa1ubcLR0RG9/tIaIhcXPzo6Ojb43n5+fvj5+ZGYmEhiYiJlZbKoUAghWoOKigref/991Go1jz/+eJ2uUWtURA0MIXl7BvoG7IHoFepGpEMIp386h8lgpqygipRdWUQODMHByb6TV1Wlek7uyCSwkzfB3XzrtTF3a2O1/xMfffQRK1aswNvbm1GjRuHr64tKZb/MujF8fX1rLHq/6OJaKz8/v0b3ER8fT3x8PMnJyUyZMqXR9xNCCGE/lZWVdO3albNnz+Lh4cF9991XpweyABzdHIi4PpiUXVmYjPVf6O4e4EL04FBO7c3GoDNRWawjZWcWkYNCcHStXyFVazObISf5AsU55XToG4SLV8MHK1oyqyVbmzZtol27dixdurTeCwWbm6ioKA4ePEh5eXmNRfJJSUmW840lI1tCCNF6ODs7M3LkSJYuXUppaSlbtmzhzjvvrPP1br7VJSHS9ufQkAcLXbydiL4hjNQ92egrDWjL9aTszCRyUAjOHvZPcCqLdSRvyyCoqw9Bnb3tupDfHqy2cq2yspIBAwa0+EQLYMiQIRiNRtatW2c5ptPpWL9+PTExMQQGBja6j/j4eBYtWsTMmTMbfS8hhBD298wzzzBhwgSOHDlSr0TrooaWhLjIyV1DpxtCcXT7Yz/FKiMpO7MoP2+f/RT/rnpT60KSd2RSVdK2NrW22shWREREjZIGzdWaNWsoKyuzxLp3717y8qqf5hg7dixubm7ExMQwdOhQli5dSlFREaGhoWzcuJGcnBzmzZtnz/CFEEI0U2FhYaxcubJR92hoSYiLNC4ORN8Qxum92VQUaTHqTaTuzqJj/+BmU46h/HwVx7edJbSbL/5RXnWuT9aSKcxWqoT2448/8uyzz/Lee+/RuXNna9zSJiZMmEBOTk6t51auXElwcDBQ/cThJ598wubNmykrKyMiIoLJkyfTr18/q8Tx12nEw4cPs2zZsmb9dRNCCNE0TCYzqXuyGlQS4iKj3sTpn85Rll99D4UCwvsG4h3mfpUrm5a7f/X0qb3Xltma1ZItgG3btvH2228zcOBAIiMjLykKetHIkSOt1WWLd3GBvCRbQgjR+pw6dYrIyMh6X2fQGRtcEuIik9FE2oFcirP/3FauXaw/fhGeDb6nLagclIRd44dfx+YVlzVZbRpRp9Oxb98+iouL+eGHHwAuGRo0m80oFApJtoQQQrRqv/zyC08//TSJiYmcOHGi3g9WNbYkBPyxn2K/IDIO5lumJTMO5WPQGQns7N1spu+MehPpv+ZRlFVG+z6BaJxbX711q72j9957jy1bthAZGckNN9zQoks/NAV5GlEIIVqv9evXs2nTJgCef/55vvzyy3rfo7ElIaB6P8V2vf1RaZTkpRQB1fspGnQmQnv4NpuEC6A4p4LjW9JpFxtQY8Pt1sBq04gJCQkEBQXxwQcfoFa3vqzUVmQaUQghWp+SkhIiIiJwd3fnhRde4L777mvwvc5nlDa4JMRf5Z68YNlPEcCnvbvd91O8HO8wN9r3CkDt2DoGbaw6jdirVy9JtIQQQrR5Hh4eJCYmEhMTY9nqraF82rmjK9eTdbRxT/wHdvJG5aAk42B10e7msp9ibS5kllFWUEn73gF4hbjZO5xGs1pm1LlzZzIzM611u1ZPphGFEKJ1s+Y+wEFdqktCFKQ1rCTERX4dPVFrVH/bT/HcH/spNq+ES19l5NS+c/h18CCsp59d93tsLKt9ZadMmcL+/fvZt2+ftW7ZqklRUyGEEPXRrncA7gGN39TZK9SNiOtDUKqqpw/LCipJ2Z3V4IX4tlaQVkLSlrOU5lXYO5QGs9rI1i+//EJsbCwLFiygd+/ely39oFAouP/++63VrRBCCNHsFRcX8+abbzJy5EgGDBjQoHsolQoi+gdzckcmlY2swO4R4ELU4FBO7cvGqDNRWaQlZWcmUYNC0Lg0v5pXugoDKbuz8I/wJLSHH0p18xqFuxqrLZC/4YYb6tahQsGOHTus0WWrIAvkhRCidTt8+DBDhgzhwoULDBkyhG3btjXqKUBtmb5RJSH+qrJEx6k9Weirqu/l4KQiclAozh6NW2dmS07uDoRfG4ibb+NH+ZqK1ZKtQ4cO1bmtNeexWyqpIC+EEG2DXq8nJiaG1NRU1Go1R48ebfS/9+WFlZxsREmIv9JV6Endk422TA+ASqMk8voQXH2cGn1vW1EoITDam+Buviib4dOUf2fVCvKi/mRkSwghWr8VK1awYcMGnnvuOSIiIqxyzwuZpZz5ufElIQD0VQZO7TtHZZEWAKVK0az2U7wcZ08NHfoF4eLpaO9QrqhlTXoKIYQQLdCdd97JZ599ZrVEC8A7zJ2Qbr5WuZeDk5rowaG4+VVPzZmMZk7vy+ZCZvN+Yr6yWEfy1gxyTpynOY8dWS3ZOnLkCO+99x6FhbXXASkoKOC9997j2LFj1upSCCGEaNOCuvjg19HDKvdSOSiJHBiMZ3D1w21mM6Ttz6HgdLFV7m8rJpOZrKOFnNyZSVVZ4x4csBWrJVsrV65k7969+PrWnmX7+fmxb98+Vq1aZa0uhRBCiBbJbDaTn59vlXu17xWAR4B1pvuUKiUdrwvCJ/zP7XIyDuU3+5EjgLKCKk4kZpDfDJNDqyVbJ06c4Jprrrlim549e5KUlGStLoUQQogWZ8eOHQwePJi4uDiMxsY/UahQKujYPwhnT+s8QahQKmjfO4CATl6WY+eSzpN1pKDZJ1xGg4mzv+WRuicLXaXB3uFYWK3OVlFREX5+flds4+Pjw4ULF6zVZYsmFeSFEKLtMZvNPPvss+zduxeA//73v43aN/EitUZF5PUh1SUhqqyQwCkUhHb3Q61RWfZTzE8txqAzEd5M91P8q4ubWrfvHYB3mP03tbbayJabmxt5eXlXbJObm4uzc8upi2FLUkFeCCHaHoVCwcKFCwHo2rUrAQEBVru3o6sDkdeHoFRbLxEK7ORN+95/xnjhbCmnfzqHyWiyWh+2YtCZOP1TDjnJ9h/ksVqyFRMTw65du8jNza31fG5uLrt376Z79+7W6lIIIYRoceLi4ti4cSNHjhxh5MiRVr23q48THfoG0YiaqZfw7eBBx/5BltGskpwKUvdkY9A1z+19/k5fobd3CNZLtiZMmIBWq2XGjBls3LiRgoICoPopxA0bNvDwww+j0+m44447rNWlEEII0SLddNNNqFS22VjZO9SN0B5XXtZTX14hbkQODLaMmpUXVpG6Owt9VfNZF9WcWW3NVmxsLDNmzOCDDz5g0aJFQPVw6cXFdAqFgpkzZ0r1eCGEEMLGAjt5oy3TW/XJPHd/F6IHh3JqbzYGnYnKYh0nd2YRNSgER9fmt59ic2LVoqbjx4/n448/JiEhgU6dOhEcHEynTp247bbb+OSTT/jHP/5hze6EEEKIFi8/P5+nnnrK6g9MtYv1xyPIuhXgXbydiL4hDAfn6rEaXbmekzszqSzWWrWf1sZqI1sXRUZGMmvWLGvfVgghhGh1Vq9ezaRJkygrK8PV1ZUFCxZY7d4KpYKI64JI3pFJZbH1in06uWvodEMYp/ZmUVWqx1BlJGVXFhHXB7eozaGbkmzXI4QQQthJjx49qKioAOC9995Dr7fuYm6Vg4qogSGWkShr0bioiY4Lw8W7ek9Co95E6p5sinPKrdpPa2H1kS1RN1JnSwghRJcuXZg8eTJqtZoFCxbg4GD9tU8aFweirg/m5M4sjAbrlWxQO6qIGhzKmZ/OUZpXidlo5vSP5wi/NhCfdvavbdWcKMzNvRxsK5ecnMyUKVNYtmwZnTt3tnc4QgghmpjZbEZhzVoNl1F8rpxTP2ZjtnKJLJPRTPovuRRl/Tl4ENbTH/9IT+t21EABkZ6062W9emYNIdOIQgghhB01RaIF4BnsSrue/la/r1KloEO/QHz/siF25u/5nDve/PdTbCqSbAkhhBDNiMlksqzjsjb/SC8C/7LnobUoFAraxfoT2Nnbcizn+HmyDjf//RSbQqOSLZ3Oek83CCGEEG2Z2Wzmhx9+4Nprr+WJJ56wWT+hPfzwDnOz+n0VCgUh3XwJ6eFrOZZ/qpj0X/Mwm9p2wtWoZOv2229n8eLFJCcnWyueFmnt2rU8+OCDDB06lE8//dTe4QghhGiBLly4wJ133snBgwdZtmwZaWlpNulHoVDQoW8gbr5ONrl/YHTL3U/RVho9srV27VqmTZvGgw8+yNdff01paam1YmsxfH19eeCBB7jhhhvsHYoQQogWysfHh8ceewyAa665hqKiIpv1pVQpiRgQjKObbSq/+3bwoON1QSj+yDJKcio4tTcbo75l7KdobY1Ktr799ltmzZpF586dSU1N5Z133uEf//gHL774Ir/++qu1Ymz2Bg8ezKBBg3Bzs/6wrBBCiLZj9uzZrFmzhgMHDth8ezsHJzVRA0NQa2yzfNsr1I3I60Ms+ymWFVSRsiu7Te6n2Kg6Wy4uLtx2223cdtttpKWl8cMPP7Blyxa2bt3Ktm3bCAgIYPTo0YwcOZLAwEBrxVyriooKVqxYQVJSEsePH6e0tJT58+czatSoS9rqdDo++eQTNm/eTGlpKZGRkUyePJm+ffvaNEYhhBDiSry8vJp0azsndw0RA0JI3ZOFyWj9dVXuAS5EDQrl1L5sjDoTlcVaUnZlETmwbe2naLV0tkOHDsyYMYM1a9awcOFC+vfvT0FBAZ9++il33nknTzzxBDt27MBgsE1GW1xczPLly0lPTycqKuqKbV955RVWrVrF8OHDeeSRR1AqlcydO5fDhw/bJDYhhBCiuXL3dya8TyC2qkDh6uNEp7g/91PUlulJ2ZlJZUnbecjO6hXkVSoVgwcPZvDgwZw/f55Nmzaxfv169u/fz4EDB/Dw8GDdunXW7hZfX1+++eYbfH19OXHiBFOnTq21XVJSElu3bmX69OncddddANx0001MnDiRJUuWsGTJEkvbGTNmcOTIkVrvc++99zJlyhSrvw8hhBDioszMTL777jumT59u03582rujLdeTfazQJvd38tDQ6YZQUvdkoy3To68ykrIrk8jrQ3D1sc1C/ebEptv1+Pj4cNddd9GvXz8WL17MkSNHKCkpsUlfGo0GX1/fq7bbuXMnKpWKhIQEyzFHR0dGjx7N0qVLyc3NtUx5vv/++zaJVQghhLiaV155hRdeeAGtVkufPn3o16+fTfsL7uqDrlxPQZqNfk67OBB9Qxin9mZTWaTFqDORujuLjv2D8Qh0sUmfzYXNkq2Kigq2bNnCDz/8wMmTJzGbzTg5OTF06FBbdVknKSkphIWF4erqWuN4165dAUhNTa33+jKDwYDRaMRkMmE0GtFqtajValQq1SVtCwoKKCz88zeH9PT0BrwLIYQQrZ23tzdarRaAf/3rX6xdu9bmfbbrHYC2Qk9pXqVN7u/gqCJ6cCinfzxHWUElJqOZ0/uyCe8bZJPaX82F1ZOt3377jfXr17N79260Wi1ms5mYmBhGjx7NjTfeiIuLfbPXwsLCWkfALh4rKCio9z0///xzli9fbnn9xRdfXHZx/rp162q0FUIIIWozadIk3nvvPW6++Wbmzp3bJH0qlQoi+gdzcoft1lSpHJREDgwmbX8uxefKMZshbX8ORp0/fhHNYz9Fa7NKspWXl8eGDRvYsGEDOTk5mM1mvLy8SEhIYPTo0XTo0MEa3ViFVqutdVd1jUZjOV9fkyZNYtKkSXVqm5CQwMCBAy2v09PTWbhwYb37FEII0bppNBp+//33WmdJbEmtURE5MITk7Rnoq2xTF0upUtLxuiDOHszjfHp1fc6MQ/kYdEYCO3s32X6RTaVRydbWrVtZv349v/32GyaTCaVSSd++fRk9ejSDBg1CrbbpkrAGcXR0RK/XX3L84tZDjo6ONu3fz88PPz8/EhMTSUxMpKys7OoXCSGEaJOaOtG6yNHVgcjrQzi5KxOTwTZb7SiUCtr3DkCtUZGXUgTAuaTzGHRGQnv4taqEq1HZ0IsvvghAcHAwo0aNYtSoUQQEBFzlKvvy9fUlPz//kuMX11H5+fk1SRzx8fHEx8eTnJwsTzUKIYSoE4PBgEqlapJExNXHiQ59gzjz0zlstZe0QqEgtIcfakcV2Uerfw7npxZj1Jlo3zsAhbJ1JFyNSraGDRvG6NGj6dOnj7XisbmoqCgOHjxIeXl5jUXySUlJlvNNQUa2hBBC1JXJZGL16tU899xzLFq0iDFjxjRJv96hbuh6+JF5uP7rmesjsJM3ao2Ks7/lAXD+bCkGnZGO1wWhVNmmwn1TatQ7ePbZZ1tUogUwZMgQjEZjjVpfOp2O9evXExMTY/NK9xfFx8ezaNEiZs6c2ST9CSGEaLm2bdvGnXfeSXJyMs888wwmU9Nt6hzYyRv/SNsvXK9tP8XUPdkYdC1/P0WrLqoyGAx8/fXXJCYmcvbsWbRaLdu3bweqSy589913jB8/nnbt2lmzW4s1a9ZQVlZmmRLcu3cveXnVWfLYsWNxc3MjJiaGoUOHsnTpUoqKiggNDWXjxo3k5OQwb948m8QlhBBCNMawYcO47rrr+Pnnn/H29qagoKBJl+206+mPrlxPcU6FTfvxCnUj0iGE0z+dw2QwU15YRcruLKKuD7FUoG+JrBa5Vqtl9uzZHD16FE9PT1xdXamqqrKcDw4OZv369bi7u9tsjdLKlSvJycmxvN61axe7du0CYMSIEZaNohcsWEBgYCCbNm2irKyMiIgIXn31VZtv+vlXMo0ohBCirhQKBW+99RYlJSUMHz68yRePK5QKOv5REqKiqP5P7deHe4AL0YNDObU3G4PORFWxjpO7MokaGIqjW8vcT1FhNltn2dvHH3/MF198wbRp07jrrrv4z3/+w+eff86OHTssbebMmUNJSQlLly61RpetwsUF8suWLaNz5872DkcIIYS4LF2FnuTtmegqbbPP8V9Vleo4tTcbXUV1X2rH6pIULl71qxoQEOlJu172fXjPaqvOtm3bRq9evbj77rtRKBS1Zt0hISHk5uZaq0shhBBCNCGNiwORA0NQqW2/aN3JXUP0DWE4eVTXwTRojaTsyqI03zbV7W3Jal+tvLy8q47MODs7U15ebq0uW7TExESefPJJ3n33XXuHIoQQogVKTU1ly5YtTd6vi5djjYXstqRxVhMdF2rZrNpkMHFqbzZF2S1rCY7VvlTOzs4UFRVdsU12djaenq2zFH99ydOIQgghGsJoNDJ16lS6dOnCfffdR0WFbRet18Yz2JV2Pf2bpC+1RkXkoBDLZtVmk5kzP+VQaKMNs23BaslWt27d2LdvH6WlpbWez83N5aeffqJnz57W6lIIIYRoc1QqFYWFhRiNRnJycvjoo4/sEod/pBeB0V5N0pdKrSRiQDDe7f7crPrsb3nknrzQJP03ltWSrTvvvJPS0lIef/xxjhw5gtFYXRejqqqKX3/9lTlz5mA0Grnjjjus1WWLJtOIQgghGurFF1/Ey8uLF154gQcffNBucYRe44dXqNvVG1qBQqkg/NrAGjW/so8WknWkACs962czVnsaEWDt2rW88847tRZbUyqVzJo1i1tuucVa3bUK8jSiEEKIhqioqMDFxcXeYWAymDi5K4vy81VXb2wFZrOZ3OQLnEs6bznmE+5O+161b+/THJ5GtGqFsDFjxhAbG8u3337L8ePHKSkpwdXVla5du3L77bfTsWNHa3YnhBBCtFnNIdECUKqVRF4fTPL2DLTlti8JoVAoCOrig9pRRcbB6r2Oz6eXYtSZ6NAvsFlu72P1cqwdOnTg0UcftfZthRBCCHEFZrO5yYudXuTgpCZyYAgnd2Ri0DXNVkJ+HT1RaVSkH8jBbILic+Wc2ptNxIBgVA6qJomhrpo8/bu4lqutkzVbQgghrMFgMPDpp5/SvXt3u9aydPZwpON1wShrmcqzFe9QNyKuD0Gpqu6zrKCKlF3Z6KtsP8JWH1ZLtr7++uurtjEajbzwwgvW6rJFk9IPQgghrGHhwoU8+OCDJCUlsWjRIrvG4hHoQrteTVMSwtJngAtRg0NRaapTmspiLSm7stCW65s0jiuxWrL1zjvv1Nia5+9MJhMvvPCCZa9CIYQQQjTeQw89hLOzMwBnz561+5N5fh09Cers3aR9uvo40SkuzLJZtbZMT8rOTCpLbLuPY11ZLdnq0aMHCxcu5Lfffrvk3MVEa+fOndx+++3W6lIIIYRo84KCgnj33XfZs2cPa9assdu6rb8K6e6Ld1jTlIS4yMlDQ6cb/tysWl9lJGVnFkVZ9q82b7Vka9GiRbRr146nn36alJQUy3GTycRLL73Ejh07GDNmjCyeF0IIIazswQcfZODAgfYOw0KhUNChbyCuvk5N2q/GxYHoG8Ism1Ub9SZ+WZ1C5u/5TRrH31kt2XJ1deX111/Hzc2NJ554guzsbMxmMy+++CLbtm3jtttu4/HHH7dWd0IIIYRoxpQqJZEDgnF0tXrhgytycFQRNTgUN//qqVWj3sTm138l+1hhk8bxV1YtagqQkZHBjBkzcHV1JTo6mp07d3LLLbfwxBNPWLObFi8xMZHExETKyso4fPiwFDUVQghhNUeOHMHFxYXIyEh7h0JlibZJS0JcZDKaSTuQQ3F2OYGdvBk1vy9qR/uUhLB6sgVw4sQJHnvsMaqqqhg9erQkWlcgFeSFEEJYS15eHo899hgrVqxg3LhxrFq1yt4hAVCSW0Hq3izMTZtvYTabKcuvZMB9MZa1XPbQ4LG95cuXX/F8165dSU1NxdfXt0ZbhULB/fff39BuhRBCCHEZrq6ubNu2DbPZzOrVqzl06BCxsbH2DguPQBfaxwaQ/ltek/arUCiqpzLtmGhBI5Kt//znP3Vq99lnn9V4LcmWEEIIYRuurq489dRTvPjii8yfP79ZzZj4RXhSVa4nN/mCvUNpcg1Ott5++21rxiGEEEIIK5g6dSoTJ07E3d3d3qFcIrS7L9oyfbMox9CUGpxsNYdhSSGEEELU5OjoiKOjo73DqJVCoaBj30BOVhooP19l73CaTPPbGlsIIYQQrZZSrSTy+mAcXe27jqopNTjZmjNnDsePH2/QtZWVlXz55Zd12k9RCCGEEA1TVVXF22+/ze233273bXz+ysFJTdTAENSatjHm0+BpxKKiIqZPn07Pnj256aabiIuLw83tyqX5jx07xubNm9m2bRtarZYFCxY0tPsW7691toQQQghbGDNmDJs2bQJg/fr1jB492s4R/cnJQ0PEgGBSd2djMjWfRNAWGlVna8OGDSxfvpycnByUSiXt2rWjc+fOeHt74+bmhk6no6SkhIyMDJKTk6moqECpVDJs2DAmT55MYGCgNd9LiyR1toQQQtjK119/zdixYwF46qmnWLhwoZ0julTh2RLS9ufa7P4BkZ606xVgs/vXRaNq6I8aNYqRI0fy008/sX79eg4dOsTmzZsvaadUKomIiCAuLo7Ro0fj5+fXmG6FEEIIUQe33347jz/+OPfdd1+zfbDNt70HunI92cfO2zsUm2n0hkUKhYIBAwYwYMAAANLS0sjPz6ekpASNRoOXlxcdO3a86hSjEEIIIaxLoVDw5ptv2juMqwru6ou2zEBheom9Q7EJq+8O2aFDBzp06GDt2wohhBCiFWvfJwB9pYGSvAp7h2J1beMxABvS6XQsWrSIcePGMXLkSB566CGOHj1q77CEEEKIWh04cAC9Xm/vMC6hVCro2D8IZ0+NvUOxOkm2GsloNBIUFMT777/P+vXrGT9+PPPnz6eiovVl5kIIIVquEydOkJCQQL9+/eq85V5TU2tURA0MwcHZ6hNvdiXJViM5OzszceJEAgMDLU9aqtVqMjIy7B2aEEIIYVFcXMx3330HwEsvvURVVfOs4K5xcSDy+mBU6taTorSa1LGiooIVK1aQlJTE8ePHKS0tZf78+YwaNeqStjqdjk8++YTNmzdTWlpKZGQkkydPpm/fvo2OIyMjg9LSUkJDQxt9LyGEEMJarrvuOm699VYOHjzIM888g0qlsndIl+Xq7USHfoGc/vEczagWa4O1mrSxuLiY5cuXk56eTlRU1BXbvvLKK6xatYrhw4fzyCOPoFQqmTt3LocPH25UDFqtloULF3LPPffI05dCCCGanaVLl5KSksLUqVNxcGje2+V4hbgR1tPf3mFYRasZ2fL19eWbb77B19eXEydOMHXq1FrbJSUlsXXrVqZPn85dd90FwE033cTEiRNZsmQJS5YssbSdMWMGR44cqfU+9957L1OmTLG8NhgMPPvss4SGhjJx4kTrvTEhhBDCSoKCguwdQr0ERHmhLdOTl1pk71AapdUkWxqNBl9f36u227lzJyqVioSEBMsxR0dHRo8ezdKlS8nNzbVUtn///ffr1LfJZGLhwoUoFAoWLFiAQqFo2JsQQgghRA1hPf3QVegpyi63dygNZvNpxCFDhti6i3pJSUkhLCwMV1fXGse7du0KQGpqar3v+frrr1NYWMgLL7yAWn3l/LWgoIDk5GTLf+np6fXuTwghhGissrIy/vWvf/H666/bO5QrUigUdOgXhIu3o71DaTCbj2w1p13GAQoLC2sdAbt4rKCgoF73y8nJ4fvvv0ej0dQYLfv3v/9Nz549L2m/bt06li9fXr+ghRBCCCuqrKykS5cuZGVl4ebmxsSJE5v1VnoqtZLI60NI3p6BrsJg73DqrV7J1uzZs+nUqROdOnUiOjqasLCwq17z1ym1L7/8kjvuuMOui/K0Wm2t/Ws0Gsv5+ggKCmLXrl11bp+QkMDAgQMtr9PT05vlxqBCCCFaL2dnZ2699VY+/PBDKioq2LZtGxMmTLB3WFekcVYTOTCEkzsyMepN9g6nXuqVbIWGhvL777/z9ddfo9VqcXFxITIyskYC1qFDB5TKP2cn/zqy9fHHHzN69Gi8vb0B+O9//8s//vEPnJ2drfR2rs7R0bHWyrk6nc5y3pb8/Pzw8/MjMTGRxMREysrKbNqfEEIIUZunnnqK0tJSnnnmGTp37mzvcOrExdORiP5BpO7NxtyC8q16JVuzZs0CqhOos2fPkpycTGpqKikpKWzatImysjI0Gg2bN2+u9fq/Tyl+8cUXDB061JJsXbhwgWnTprFq1aqGvJc68fX1JT8//5LjhYWFAE02jBofH098fDzJyck1nmoUQgghmkJYWBhffvmlvcOoN49AV9rHBpD+W569Q6mzBq3ZUigUhIeHEx4ezogRI0hJSWHXrl2sW7eOkpK679j99+TLbDaTl2fbL15UVBQHDx6kvLy8xiL5pKQky/mmICNbQgghRMP4RXhSVa4nN/mCvUOpkwY/jXj06FE++OAD7rrrLqZPn05ycjKTJ0/m66+/tmZ8VjdkyBCMRiPr1q2zHNPpdKxfv56YmBhL2Qdbi4+PZ9GiRcycObNJ+hNCCCGuJjk52d4h1Flod1+8w1pGAfF6jWz9+uuv7Ny5k927d1NZWcl1113H5MmTGTBgAC4uLnW6x759++jVqxchISENCvhK1qxZQ1lZmWVKcO/evZaRsrFjx+Lm5kZMTAxDhw5l6dKlFBUVERoaysaNG8nJyWHevHlWj0kIIYRo7n7++WcWLFjAzp07OX78ONHR0fYO6aoUCgUdrg1EV2mgvLB57vN4Ub3XbPn5+XHvvfdy66231umpwr8+jRgdHc3ixYsxGAy4uLig0+n473//S48ePYiOjm70FjcrV64kJyfH8nrXrl2WJwVHjBhhuf+CBQsIDAy0rDOLiIjg1VdfJTY2tlH914dMIwohhGgutmzZwrZt2wB4/vnn+e9//2vniOpGqVYSOSCY5O0ZaMubb0kIhbkehbAmT55MWloaBoMBd3d3oqOjiY6OtjyN2K5du0uuGTJkCDt27LC8NhgMpKWlcfLkSVJSUjh58iSpqalotVoUCgVms7lG+9bu4gL5ZcuWtZinQYQQQrQupaWlRERE4OXlxYsvvmjZzq6lqCzRcnJHJgbdpY8oBkR60q5XgB2i+lO9RrY+/vjjS5Klo0ePsnbtWrRaLc7OzkRFRfHuu+9evkO1mqioqBoL0c1mMxkZGZanG9sCGdkSQgjRXLi7u7N9+3Y6d+7c7Deoro2zhyMdrwvm1N5sTKbmVUwdGvA0YkOTpddee43IyEiioqKIjIys8SSgQqGgffv2tG/fnuHDhzfgbbQ8UvpBCCFEc9K9e3d7h9AoHoEutOvlT/qvza8kRJ2TrcYmS2azmU2bNvHRRx+h1WoJDAy03Oti8maLRfNCCCGEaBv8OnqiLdOT08xKQtRrZKsxydLcuXOB6qTr4MGDPPfcc1y4cIGDBw/y9ddfU1ZWhrOzMx07duSDDz5o3LsSQgghRIOdP3+e119/ndGjR9fYYq4lCOnui7Zcz4XM5rNMp87J1hNPPAE0PllSKBT85z//4eGHH2bUqFFA9aL5jRs38uGHH7aZReKyZksIIURzdPjwYQYPHkxJSQl79+5lx44dNSoLNHcKhYIOfQPRVxooayYlIeq9ZssaydLx48dZsGDBn0Go1dxyyy04OjqyadOm+obUIsmaLSGEEM1RTEwMQUFBlJSU8OOPP5KSkkKnTp3sHVa9KFVKIgYEk7w9096hAA2sIH/8+PEaNakuJkuPPvooGRkZV70+Kiqq1vIO3bp148iRIw0JSQghhBBWoFarWbhwIQ8++GCLTLQucnBSEzUwBJVGZe9QGpZsNTZZmjFjBsuXL+edd94hOzsbAJPJxLffftvowqZCCCGEaJzx48fz8ccfEx4ebu9QGsXJQ0NQF297h9GwjahnzJjBnDlzyM/PZ9y4cYSEhNQrWerRowcffPABixcv5q677sLV1RWDwYDBYGDOnDkNCanFkTVbQgghhO0pVQ3eBtpq6lVB/q9OnTrF4sWLOXLkyCXJ0s0332xp9/cK8n+XnZ1NSkoKCoWCzp07N9lG0M2FVJAXQgjR3JnNZnJzcwkKCrJ3KC1Sg0a2ACIjI3nvvfeumixdLZcLCQmR+lpCCCFEM2Q2m0lMTOTpp5+mqKiIY8eOoVY3OHVosxr9FbtasrRz587GdiGEEEIIO1m4cCH79+8H4IsvvuCBBx6wc0QtT70nMk0mE6dPn6agoOCScwaDgUOHDlkjLiGEEELYmUKhYOHChUD1euuwsDA7R9Qy1WtkKycnh7lz55Keno5CoaB///7Mnz8fT09PAEpKSnjssceuuEZLCCGEEC3H4MGD2bp1K0OGDEGptP9i85aoXl+1JUuW4Ofnx4oVK1i2bBlarZYZM2bUGOVq4Hr7NicxMZEnn3ySd999196hCCGEEFd04403SqLVCPX6yv3+++88/PDDBAcHEx0dzRtvvME111zDP//5T3JzcwFaVEl/e4qPj2fRokXMnDnT3qEIIYQQwobqlWxVVVXh4ODw58VKJXPnzqVv377MnDmTrKwsqwcohBBCiObj4pKi0tJSe4fSYtQr2Wrfvj3JycmXHJ89ezb9+/fnySeftFpgQgghhGheVq5cSUREBK+99hrvvPOOvcNpMeqVbMXFxbFly5Zaz82aNYthw4bJmi0hhBCilerduzc6nQ6oXset1+vtHFHL0OAK8sI6pIK8EEKIlmTGjBk4ODgwf/78NrfrS0M1qqjpmTNn6NChgyyKF0IIIdqI9957T37u11Ojkq0HHniABx54gPvvv99a8bQZshG1EEKIlkgSrfprVNEMs9l8yRqtdevW8dJLLzUqqLZASj8IIYRoDUwmkwwcXIXVK5QVFhaydevWWs99+eWXTJs2zdpdCiGEEKKJmc1m1q5dS8+ePXniiSfsHU6z1qTlYPV6fa2lI4QQQgjRsly4cIF7772Xo0eP8vHHH3P69Gl7h9RsSe19IYQQQtSbj48Pjz/+OAB9+vSRqcQraNQCeSGEEEK0XbNnz6Zfv36MHj1aFs5fgSRbVvDaa6+xd+9eqqqqCAwMZOrUqQwcONDeYQkhhBA25enpyS233GLvMJq9Ridb33zzDSkpKXTp0oXOnTu3yWHECRMm8Oijj6LRaDh+/DizZs1ixYoVeHp62js0IYQQQthZo5Kt6Oho0tLS2LNnD3v27KkxhPjcc88RGRlJZGQkUVFRrbrKbHh4uOXvCoUCvV5PQUGBJFtCCCHalPT0dL799lseeeQRe4fSrDQq2fr4448xGAycOnWKlJQUkpOTOXnyJKdOnWLHjh3s2LHDkoC5uLjg5ORklaBrU1FRwYoVK0hKSuL48eOUlpYyf/58Ro0adUlbnU7HJ598wubNmyktLSUyMpLJkyfTt2/fBvf/5ptvsn79enQ6Hf379yciIqIxb0cIIYRoUV566SVeeukl9Ho91113Hdddd529Q2o2Gj2NqFar6dy5M507d7bM2xqNRtLS0khOTq6RgBUWFtpsAV1xcTHLly8nMDCQqKgoDh48eNm2r7zyCjt27GD8+PGEhYWxYcMG5s6dy9tvv80111zToP5nzZrFo48+yqFDhzh9+rQsFBRCCNGmBAYGWjamXrRoEd98842dI2o+bLJAXqVSWaYQb775ZqC6wmx6errN6mz5+vryzTff4Ovry4kTJ5g6dWqt7ZKSkti6dSvTp0/nrrvuAuCmm25i4sSJLFmyhCVLlljazpgxgyNHjtR6n3vvvZcpU6bUOKZSqejTpw+rV68mLCyMAQMGWOndCSGEEM3bAw88wPvvv8+tt97K7Nmz7R1Os9JkTyMqlUo6duxIx44dbXJ/jUaDr6/vVdvt3LkTlUpFQkKC5ZijoyOjR49m6dKl5ObmWtaXvf/++w2KxWg0kpWV1aBrhRBCiJbIwcGBgwcPolRKCc+/a3NfkZSUFMLCwnB1da1xvGvXrgCkpqbW635lZWVs2bKFiooKDAYD27dv5+DBg/Ts2bPW9gUFBZbp1eTkZNLT0xv2RoQQQohmRhKt2rW5OluFhYW1joBdPFZQUFCv+ykUCr7//nsWL16M2WwmNDSUZ555hujo6Frbr1u3juXLl9c7biGEEKKl0ev1qNXqNr+Ouc0lW1qtFgcHh0uOazQay/n6cHV15e23365z+4SEhBoFT9PT01m4cGG9+hRCCCGaM6PRyP/+9z+ef/55/v3vf/OPf/zD3iHZVZtLthwdHS1PS/yVTqeznLclPz8//Pz8SExMJDExsU0WgRVCCNG6bd++nXvvvReAZ599lttuuw2VSmXnqOynzU2u+vr6UlhYeMnxi8f8/PyaJI74+HgWLVrEzJkzm6Q/IYQQoqkMGzaM/v37AxAcHMz58+ftHJF9tbmRrYs1uMrLy2sskk9KSrKcbwoysiWEEKK1UigUvP3225SXlzN06FB7h2N3bW5ka8iQIRiNRtatW2c5ptPpWL9+PTExMU22rZCMbAkhhGjN+vXrJ4nWH1rVyNaaNWsoKyuzTAnu3buXvLw8AMaOHYubmxsxMTEMHTqUpUuXUlRURGhoKBs3biQnJ4d58+Y1WawysiWEEEK0DQqz2Wy2dxDWMmHCBHJycmo9t3LlSoKDg4HqJw4v7o1YVlZGREQEkydPpl+/fk0ZLgDJyclMmTKFZcuW0blz5ybvXwghhGgKJ06cIC0tjZEjR9o7lCbXqpKtlkiSLSGEEK2Z0Whk8uTJfP755/j7+3Pq1KlLCou3dq1qGrElkWlEIYQQbYFKpaK0tBSTyURubi4fffQRs2bNsndYTUpGtuxMRraEEEK0dklJSdxwww3Mnj2bf/7zn7i5udk7pCYlI1tCCCGEsKmYmBgyMzNtXji8uWpzpR+EEEII0fTaaqIFMrJlN7JmSwghRFtmMplQKtvGmE/beJfNkBQ1FUII0RbpdDo+/PBDunTpctlyTa2NJFtCCCGEaDL/+te/mD59OikpKbzyyiv2DqdJSLIlhBBCiCYzffp0XFxcAMjJyaEtFEWQNVt2Imu2hBBCtEWBgYF88MEHdO3a1S47t9iD1NmyM6mzJYQQQrRuMo0ohBBCCGFDkmwJIYQQwq4OHjxIamqqvcOwGUm2hBBCCGEXubm5jBs3jt69ezNv3jx7h2MzkmwJIYQQwi7c3d3Zu3cvAF9//TW//fabnSOyDXka0U7kaUQhhBBtnYuLC0899RQvv/wyTz31FN26dbN3SDYhTyPamTyNKIQQoi3T6XQYDAZL7a3WSEa2hBBCCGE3Go0GjUZj7zBsStZsCSGEEELYkCRbQgghhGgWKioqeP3117nlllta1TY+Mo0ohBBCiGZhzJgxbNmyBYAffviBW265xc4RWYeMbAkhhBCiWXj44YcBUCgU/PLLL3aOxnpkZMtOpPSDEEIIUdNtt93G3Llzuffee+nevbu9w7EaKf1gZ1L6QQghhGjdZBpRCCGEEMKGJNkSQgghRLP1448/otPp7B1Go0iyJYQQQohm59ixY4waNYrrr7+eTz/91N7hNIokW0IIIYRodsrLy9m4cSMAL730EpWVlXaOqOEk2bKio0ePcsMNN/DZZ5/ZOxQhhBCiRevXrx8JCQmEh4ezcOFCHBwc7B1Sg0npBysxmUy89957dOnSxd6hCCGEEK3CsmXL8PLyavF7J0qyZSXfffcdXbt2pby83N6hCCGEEK1CQECAvUOwilYzjVhRUcGnn37KnDlzGD16NHFxcWzYsKHWtjqdjiVLlnD77bcTHx/PtGnTOHDgQIP7Li4uZvXq1UyaNKnB9xBCCCFE69Rqkq3i4mKWL19Oeno6UVFRV2z7yiuvsGrVKoYPH84jjzyCUqlk7ty5HD58uEF9L1u2jPHjx+Pu7t6g64UQQghxZSUlJTz//PO8+uqr9g6l3lrNNKKvry/ffPMNvr6+nDhxgqlTp9baLikpia1btzJ9+nTuuusuAG666SYmTpzIkiVLWLJkiaXtjBkzOHLkSK33uffee5kyZQonT57kxIkTPP7449Z/U0IIIYSgsrKSLl26cO7cOdzc3Jg0aRL+/v72DqvOWk2ypdFo8PX1vWq7nTt3olKpSEhIsBxzdHRk9OjRLF26lNzcXAIDAwF4//33r3q/Q4cOkZGRwdixYwEoKytDpVKRnZ3N/PnzG/huhBBCCHGRs7Mzt99+Ox988AFVVVXs3LmTcePG2TusOms1yVZdpaSkEBYWhqura43jXbt2BSA1NdWSbNVFQkICw4YNs7x+5513CA4O5p577qm1fUFBAYWFhZbX6enp9QlfCCGEaJOeeuopKioqePrpp4mMjLR3OPXS5pKtwsLCWkfALh4rKCio1/2cnJxwcnKyvHZ0dMTZ2fmy67fWrVvH8uXL69WHEEII0daFhITwn//8x95hNEibS7a0Wm2thdEu1vDQarWNuv+CBQuueD4hIYGBAwdaXqenp7Nw4cJG9SmEEEKI5qvNJVuOjo7o9fpLjl/c5NLR0dGm/fv5+eHn50diYiKJiYmUlZXZtD8hhBCiNTKbzRw7dozu3bvbO5SrajWlH+rK19e3xpqpiy4e8/Pza5I44uPjWbRoETNnzmyS/oQQQojWYu/evcTFxdGzZ0+Sk5PtHc5VtbmRraioKA4ePEh5eXmNRfJJSUmW801BRraEEEKIhtm5cyd79uwB4LnnnmPFihV2jujK2tzI1pAhQzAajaxbt85yTKfTsX79emJiYur1JGJjyMiWEEII0TCPPPII/v7+dOnSpUWUgGhVI1tr1qyhrKzMMiW4d+9e8vLyABg7dixubm7ExMQwdOhQli5dSlFREaGhoWzcuJGcnBzmzZvXZLHKyJYQQgjRMG5ubuzcuZNOnTqhUqnsHc5VKcxms9neQVjLhAkTyMnJqfXcypUrCQ4OBqqfOPzkk0/YvHkzZWVlREREMHnyZPr169eU4QKQnJzMlClTWLZsGZ07d27y/oUQQghhW60q2WqJJNkSQgghWrdWNY3Yksg0ohBCCGEdBQUFvPrqqyQkJDB48GB7h3MJSbbsJD4+nvj4eMvIlhBCCCHq79ChQwwePJiysjJ++ukndu3ahUKhsHdYNbS5pxGFEEII0Xp0796d0NBQAA4cOEBKSoqdI7qUJFtCCCGEaLHUajUvv/wy06dP59SpU3Tq1MneIV1CphHtRNZsCSGEENYxduxYxo4da+8wLkuSLTuRNVtCCCFE2yDTiEIIIYRoVUwmE1lZWfYOw0KSLSGEEEK0CmazmfXr13PttdcydOhQDAaDvUMCZBrRbmTNlhBCCGF9r732GgcPHgTg888/Z9KkSXaOSEa27EY2ohZCCCGsS6FQsHDhQgB69+5Nx44d7RxRNRnZEkIIIUSrMXDgQHbu3MngwYObTXFTSbaEEEII0arExcXZO4QaZBpRCCGEEMKGZGTLTmSBvBBCCNE2SLJlJ1LUVAghhGgbZBpRCCGEEMKGJNkSQgghhLAhSbaEEEIIIWxIki0hhBBCCBuSZEsIIYQQwoYk2RJCCCGEsCEp/WAnUmdLCCGEaBsk2bITqbMlhBBCtA0yjSiEEEIIYUOSbAkhhBBC2JAkW0IIIYQQNiTJlhBCCCGEDUmyJYQQQghhQ5JsCSGEEELYkCRbQgghhBA2JHW27Eyr1QKQnp5u50iEEEIIUV/h4eE4OTldsY0kW3aWk5MDwMKFC+0ciRBCCCHqa9myZXTu3PmKbRRms9ncRPGIWhQVFbF//37Wrl3Lo48+Wqdr3n33XWbOnHnVdunp6SxcuJCnn36a8PDwxobaKtT1a2cPTR2brfqz1n0bc5+GXFvfa+rSXj6Dl2rOn0GQz6E172Prz2Fz+VkoI1stgJeXFyNGjGDbtm1XzYwvcnNzq3NbqP5GqE/71qy+X7um1NSx2ao/a923MfdpyLX1vaY+7eUz+Kfm/BkE+Rxa8z62/hy2pJ+FskC+mYiPj7dJW1FTc/7aNXVsturPWvdtzH0acm19r2nO30vNWXP/usnn0Hr3sfXnsLl/L/2VTCO2Yhc3ua7LfLIQwvrkMyiE/TWHz6GMbLVivr6+TJw4EV9fX3uHIkSbJJ9BIeyvOXwOZWRLCCGEEMKGZGRLCCGEEMKGJNkSQgghhLAhSbbaMJ1Ox6JFixg3bhwjR47koYce4ujRo/YOS4g25bXXXmPMmDGMHDmS+++/n71799o7JCHarKNHj3LDDTfw2WefWfW+smarDausrGTlypWMGjUKf39/tm/fzltvvcXKlStxcXGxd3hCtAnp6ekEBwej0Wg4fvw4s2bNYsWKFXh6eto7NCHaFJPJxMMPP4zZbOb666/n/vvvt9q9ZWSrDXN2dmbixIkEBgaiVCoZNmwYarWajIwMe4cmRJsRHh6ORqMBQKFQoNfrKSgosHNUQrQ93333HV27drVJlXmpIN+CVFRUsGLFCpKSkjh+/DilpaXMnz+fUaNGXdJWp9PxySefsHnzZkpLS4mMjGTy5Mn07dv3svfPyMigtLSU0NBQW74NIVosW30G33zzTdavX49Op6N///5EREQ0xdsRokWyxeewuLiY1atXs2TJEt59912rxywjWy1IcXExy5cvJz09naioqCu2feWVV1i1ahXDhw/nkUceQalUMnfuXA4fPlxre61Wy8KFC7nnnntwc3OzRfhCtHi2+gzOmjWLTZs2sXjxYvr27YtCobDVWxCixbPF53DZsmWMHz8ed3d32wRtFi2GVqs1FxQUmM1ms/n48ePmwYMHm9evX39Ju2PHjpkHDx5s/uqrryzHqqqqzHfeeaf5oYceuqS9Xq83z5071/zCCy+YTSaT7d6AEC2crT6DfzVv3jzzvn37rBu4EK2ItT+HycnJ5gcffNBsMBjMZrPZ/PLLL5uXL19u1ZhlZKsF0Wg0daqAu3PnTlQqFQkJCZZjjo6OjB49mmPHjpGbm2s5bjKZWLhwIQqFggULFshv1EJcgS0+g39nNBrJysqySrxCtEbW/hweOnSIjIwMxo4dy5gxY9i2bRtfffUVr7zyitViljVbrVBKSgphYWG4urrWON61a1cAUlNTCQwMBOD111+nsLCQ119/HbVavh2EsIa6fgbLysr48ccfGThwIBqNht27d3Pw4EGmTp1qj7CFaFXq+jlMSEhg2LBhlvPvvPMOwcHB3HPPPVaLRX66tkKFhYW1Zv0Xj1180iknJ4fvv/8ejUZTI/P/97//Tc+ePZsmWCFaobp+BhUKBd9//z2LFy/GbDYTGhrKM888Q3R0dJPGK0RrVNfPoZOTE05OTpbzjo6OODs7W3X9liRbrZBWq8XBweGS4xcfL9dqtQAEBQWxa9euJo1NiLagrp9BV1dX3n777SaNTYi2oq6fw79bsGCB1WORNVutkKOjI3q9/pLjOp3Ocl4IYTvyGRTC/prT51CSrVbI19eXwsLCS45fPObn59fUIQnRpshnUAj7a06fQ0m2WqGoqCgyMzMpLy+vcTwpKclyXghhO/IZFML+mtPnUJKtVmjIkCEYjUbWrVtnOabT6Vi/fj0xMTGWJxGFELYhn0Eh7K85fQ5lgXwLs2bNGsrKyizDoHv37iUvLw+AsWPH4ubmRkxMDEOHDmXp0qUUFRURGhrKxo0bycnJYd68efYMX4gWTz6DQthfS/scKsxms7lJexSNMmHCBHJycmo9t3LlSoKDg4Hqpywu7gdVVlZGREQEkydPpl+/fk0ZrhCtjnwGhbC/lvY5lGRLCCGEEMKGZM2WEEIIIYQNSbIlhBBCCGFDkmwJIYQQQtiQJFtCCCGEEDYkyZYQQgghhA1JsiWEEEIIYUOSbAkhhBBC2JAkW0IIIYQQNiTJlhBCCCGEDUmyJYQQQghhQ5JsCSFEM7Vq1SpuvPFGzp07Zzm2YcMG4uLi2LBhgx0j+9P333/PkCFDOHXqlL1DEaLZkmRLCNEkzp07R1xc3BX/mzBhgr3DbDZKS0v5/PPPufnmmy2b6trK/v37iYuLY/bs2Vdt++KLLxIXF8eWLVsAGDlyJIGBgSxZssSmMQrRkqntHYAQom0JDQ1l+PDhtZ5zc3Nr4miar1WrVlFSUsJdd91l876uvfZaAgMD+fXXX8nNzSUwMLDWdmVlZezevRs3Nzfi4uIAUKvVTJgwgbfffpsjR47Qo0cPm8crREsjyZYQokmFhoYyadIke4fRrBkMBr7//nt69OhBaGiozftTKpWMGjWK5cuXs3HjRu6///5a2yUmJqLVarn55ptxdHS0HB82bBjvvfce3377rSRbQtRCphGFEM1WXFwcjzzyCOfPn+fll1/m1ltvJT4+noceeoiDBw/Wek1FRQWffvop9913H/Hx8dx8883Mnj2bw4cPX9L2kUceIS4uDq1Wy7Jly7jzzjsZOnQon376qaXNzp07mTJlCvHx8dx22238+9//prS0lAkTJtSY9nzppZeIi4sjKSmp1rg++eQT4uLiSExMvOr73r9/P4WFhQwZMuSqbS/Ky8vj/vvvJz4+nh07dliOX7hwgXfffZe77rqLYcOGceutt/L0009z+vTpGtfffPPNKBQKNmzYgNlsrrWP9evXAzB69Ogax728vOjVqxc7duygoqKizjEL0VZIsiWEaNbKysqYMWMGaWlpjBgxgri4OJKTk5kzZ84lCUNJSQnTp09n+fLluLu7c9tttxEXF8fJkyd59NFH2b17d619PPPMM2zcuJFevXoxbtw4yxqpH374gWeeeYbMzExuuukmRo4cybFjx5g1axYGg6HGPRISEizX/J3RaGT9+vV4enpapt+u5NdffwWgW7duV/8CAWlpaTz88MPk5eXx2muvWZK0rKwsJk+ezOrVqwkJCeEf//gH/fv3Z//+/UyfPr1GYhgUFESfPn3Izs6uNZE9ffo0J06cIDo6mk6dOl1yvlu3buh0Oo4ePVqnmIVoS2QaUQjRpLKysmqMHP1Vt27duO6662ocS01NZcyYMTz22GMoldW/H/bu3Zt///vffP3118yZM8fS9q233uLMmTPMnTuXW265xXL8woULTJkyhddee41+/frVmAIDKCws5D//+Q8eHh6WY6Wlpbzzzjs4OzuzdOlS2rVrB8CUKVOYM2cOycnJBAUFWdr37NmTDh06sHXrVv75z3/i7OxsObd//37y8/MZP348Go3m/7d3byFRbX8cwL86NmrjZGoFVlI4hqZhYahkSoyYRqYSYTdBCzKEysleeglDTKj0zbJ6EKQexBosyNt4LbK8pGE4pvSglCOoEzpjF8sc5zzIzGn+s/donb+dQ34/EOHaa++99n768ltrr1nwHfX29sLZ2RkBAQEL9u3r68PFixfh4uKC4uJim3MKCgowMTGBoqIiREREWNvT09ORmZmJ69evo6yszNqemJiIrq4u1NTUICwszOY+YlUti8DAQACAVqu1uRcRsbJFRL/ZyMgIysrKBP91dHTY9Xd3d0dWVpY1aAHzX8BJJBIMDAxY2wwGA1paWhAWFmYTtADAy8sLx44dg8FgsFaNfnTy5EmboAUAra2tmJ6exv79+61BC5hfEH7q1CnBZ0tOTsaXL1/Q1NRk015VVQUASEpKEnstNvR6PTw8PBYMZm1tbcjJyYFcLkdJSYlN0Hr79i20Wi0SEhLswo+fnx8OHDiAwcFBm+pgTEwMPD098fTpU3z+/NnaPjs7i/r6ekilUtGPG7y9vQHMT2cSkS1Wtojot4qIiEBRUdGi+2/cuBErV660aXNxcYG3tzc+ffpkbRsYGIDJZML3798FK2c6nQ4A8O7dO0RFRdkc27p1q11/y75RoaGhdseCg4MhkUjs2hMSEnDnzh1UVVVZA9/ExARevHiBbdu2YfPmzQs87bypqSmsXbvWYZ+Wlha8fPkSCoUChYWF8PLysjlumSKcnJwUfB/v37+3/u/v7w8A1jClVqvR2NiIlJQUAMDz589hMBgQFxcHuVwuOB5Lu9FoXNQzEi0nDFtE9J8mk8kE2yUSCebm5qx/T01NAZifguvt7RW93tevX+3aLFWZH1kqO/8bYoD5r/c8PT3t2uVyOZRKJerq6jA4OAh/f3/U1tbCZDItuqoFAK6urpiZmXHYp6+vDyaTCaGhoYJjtLyPtrY2tLW1iV5nenra5u/ExESo1WrU1NRYw9ZCU4gArON1c3NzOG6i5Yhhi4j+CJZQduTIEZw5c+anznVychK93uTkpN2xubk5GI1GwepTSkoK6urq8PjxY6hUKlRXV0Mmk0GpVC56PJ6entDr9Q77nD59Gq2trVCr1ZBIJHbPbBm/SqXCoUOHFn1vhUKBoKAg9Pf3Y2hoCHK5HJ2dnfD19bVbx/UjS7hbvXr1ou9FtFxwzRYR/RGCgoLg5OSEvr6+/8v1FAoFAAhWyfr7+2EymQTPCwkJgUKhQENDAzo7O6HT6bB3796fqvj4+/tjZmYGY2Njon2kUikKCgqwa9cuVFRU4MaNGzbHLVOjv/I+LBWs6upqaDQamEwm69YQYizTkpYpSSL6G8MWEf0RfHx8oFQqodVqUV5eLrhX1Js3bwSnEYVER0fD3d0d1dXVGBkZsbbPzs6itLTU4bnJycmYmprC1atXAcBuwf5CduzYYR2vI1KpFFeuXEFUVBTu37+P4uJi67Hg4GAEBwejqanJbsE+MF+d6+npEbxuXFwc3NzcUF9fj5qaGjg7O2Pfvn0Ox9Lf328zdiL6G6cRiei3crT1AwCkpaXZbc2wWBcuXMDw8DBu3boFjUaDkJAQeHh4QK/XY2BgADqdDg8fPlxUlUkul+Ps2bMoLCxEZmYmYmNjIZPJ0N7eDqlUijVr1ohWeuLj43H79m18+PABgYGBgvtSORIdHY2bN2+iq6trwenHFStWID8/H7m5uXjw4AHMZjOys7MBALm5uTh//jzy8vKgVquxZcsWuLq6Ynx8HFqtFkajUXCTVZlMhj179kCj0cBgMCAyMlL0J3wAwGw2o7u7G5s2bbL5cpOI5jFsEdFvZdn6QUxqauovh61Vq1ahpKQElZWVaG5uRmNjI+bm5uDt7Y2AgABkZGQILmwXk5SUBLlcjnv37qGurg4ymQy7d+9GVlYWUlNTRX9KRyaTISYmBvX19T9d1QIAX19fhIeH48mTJ1CpVAtuAWEJXJcvX4ZarYbZbIZKpcL69etRWlqKiooKPHv2DLW1tXB2doaPjw+2b9/ucIf6xMREaDQaAPO7yzvy+vVrjI2N4dy5cz/9rETLgZNZ7HcZiIhIkE6nw/Hjx6FUKpGXlyfYJyMjA6Ojo6isrBT9otKR7u5u5OTk4NKlS4iPj/+nQ15S+fn56OjoQHl5uejWEETLGddsERGJ+Pjxo90WDN++fbMuRo+JiRE8r729HUNDQ4iLi/uloAUAO3fuRGRkJO7evWuzxcV/zfDwMJqbm5Gens6gRSSC04hERCJ6enpw7do1hIeHY926dTAajXj16hVGR0cRFhaG2NhYm/6PHj3C+Pg4qqqqIJVKkZaW9o/un52djYaGBuj1eodrpv5N4+PjOHHiBA4ePPhvD4XoP4vTiEREIoaHh1FaWgqtVguDwQAA2LBhA2JjY3H06FG7tWWHDx+GXq+Hn58fsrKy7HaqJ6LliWGLiIiIaAlxzRYRERHREmLYIiIiIlpCDFtERERES4hhi4iIiGgJMWwRERERLSGGLSIiIqIlxLBFREREtIQYtoiIiIiW0F86C3E/Uk9vSgAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig,ax = plt.subplots()\n",
"\n",
"ax.plot(energy, energy*energy*flux_median, label = \"Best fit\")\n",
"ax.fill_between(energy, energy*energy*flux_lo, energy*energy*flux_hi, alpha = .5, label = \"Best fit (errors)\")\n",
"ax.plot(energy, energy*energy*flux_inj, color = 'black', ls = \":\", label = \"Injected\")\n",
"\n",
"ax.set_xscale(\"log\")\n",
"ax.set_yscale(\"log\")\n",
"\n",
"ax.set_xlabel(\"Energy (keV)\")\n",
"ax.set_ylabel(r\"$E^2 \\frac{dN}{dE}$ (keV cm$^{-2}$ s$^{-1}$)\")\n",
"\n",
"ax.legend()"
]
},
{
"cell_type": "markdown",
"id": "20a08b36-44d2-4fef-a82e-def1dfd7b9d9",
"metadata": {},
"source": [
"Plot the fitted spectrum convolved with the response, as well as the simulated source counts"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "7d1dd8d1-f86d-4e63-8286-db1d5bc14b04",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAG+CAYAAACOFDByAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB3F0lEQVR4nO3deVxV1f7/8RfzLCogIjgCIjhLWllOSY5lg+lt1kotNfU23Ex/dbNvVpaVDbfsWpbV7aaW17JySq9meetWojkwCIgICgiIyDy5f3/49XxDHBDPcXPg/Xw8etjZZ5213xw98GGttdd2MAzDQERERETOy9HsACIiIiL2QEWTiIiISB2oaBIRERGpAxVNIiIiInWgoklERESkDlQ0iYiIiNSBiiYRERGROlDRJCIiIlIHKprOYu/evQwaNIiPPvrI7CgiIiLSQKhoOsPJkyf529/+RpcuXcyOIiIiIg2IiqYzfP3110RGRtK+ffuLfm1ZWRmJiYmUlZXZIJmIiIiYyW6LppKSEj744AMef/xxRo8ezcCBA1m3bt1Z21ZUVLB48WJuueUWYmJiePDBB/n1119rtSsoKODzzz/n/vvvr1emtLQ0Jk+eTFpaWr1eLyIiIg2X3RZNBQUFLFu2jLS0NMLCws7b9sUXX2TlypVcf/31zJw5E0dHR5544gl2795do917773HuHHj8PHxsWV0ERERsUN2WzT5+fmxevVqPv/8c6ZOnXrOdnFxcWzevJkpU6Ywbdo0xowZw+uvv07r1q1ZvHixpd3+/ftJSEjghhtuuBzxRURExM44mx2gvlxdXfHz87tgu++//x4nJyfGjBljOebm5sbo0aNZsmQJ2dnZBAYGsmvXLtLT0xk7diwARUVFODk5ceTIEebMmWOzr0NERETsg90WTXWVlJRESEgIXl5eNY5HRkYCkJycTGBgIGPGjGHo0KGW5998802CgoK46667LmteERERaZgafdGUl5d31hGp08dyc3MBcHd3x93d3fK8m5sbHh4e513flJubS15enuWxFoCLSH1UV1dTWVlpdgyRRs/FxQUnJ6d6v77RF03l5eW4uLjUOu7q6mp5/mzmzp17wb7XrFnDsmXLLimfiDRtRUVFZGRkYBiG2VFEGj0HBwdCQkLw9vau1+sbfdHk5uZ21t/gKioqLM/X15gxY7jmmmssj9PS0pg/f369+xORpqW6upqMjAw8PT0JCAjAwcHB7EgijZZhGOTk5JCRkUF4eHi9RpwafdHk5+dHTk5OreOnp9X8/f3r3be/vz/+/v5s2rSJTZs2UVRUVO++RKTpqaysxDAMAgIC8PDwMDuOSKMXEBDAwYMHqaysrFfRZLdbDtRVWFgYGRkZFBcX1zgeFxdnef5SxcTEsGDBAmbMmHHJfYlI06MRJpHL41I/a42+aBo8eDDV1dWsWbPGcqyiooK1a9cSFRVFYGCgielERBqWDh06EBERQa9evYiMjOTOO++s9UvnxVi2bBkJCQnnfP7nn3+me/fu9O7dmw0bNjBq1CgSExPr9NqGYN68efz5z3+2ap9XXHEFW7durddrjxw5woABAyyP582bV+PWXhMnTuT111+/xIRNl11Pz61atYqioiLLVNv27ds5evQoAGPHjsXb25uoqCiGDBnCkiVLOH78OMHBwaxfv56srCxmz55tlRyanhORxmTFihX06tWLkydPcuONN7Js2TKmT59er76WLVtG8+bNz3kT9I8++og777zTsh/e8OHD6/xaqa1Nmzb88MMPlsfPPvssf/7zn2tcHV4fVVVVODvbdclgFXY90rRixQqWLl3Kl19+CcC2bdtYunQpS5cupbCw0NJu7ty5jBs3jg0bNvDmm29SVVXFSy+9RK9evaySQ9NzItIYVVRUUFJSQosWLSzHXnnlFfr160efPn0YMWKEZauVr7/+mh49etCrVy+6devGV199xfvvv89vv/3GI488Qq9evVi7dm2N/hcsWMCKFSv429/+Rq9evTh+/DgdOnRg165dF3wtQHx8PMOHD6dHjx706NGDd999Fzi1/15MTIwlz+mfEXBqeuaFF16gX79+dOzYkQ8//BCATz/9tMYdIQzDoFOnTvz+++8ALFy4kK5du9K9e3fuuusuCgoKauXp3Lkzv/32m+XxsmXLuOWWWwDIyspi/Pjx9OvXj+7du/PUU09Z2v3nP/+xvG/33XcfVVVVZ/37uPPOO/nnP/8JwDvvvIOrq6tlFPC6665j27ZtHDx4kObNmwPw0EMPATBgwAB69eplGVSIj49n6NChdO7cmVtvvdVyYdSZHBwceOaZZ+jbty9z5syhsLCQyZMn069fP3r06MGUKVMsr50/fz6RkZH06tWLXr16Wf5dODg48NRTT9G7d286d+7Mp59+aul/w4YN9OnThx49ejBo0CDLspmtW7fSrVs3pk2bRs+ePenatavlfc3JyWHYsGF0796dHj16cN9991n6O9e/TasyxGoSEhKMAQMGGAkJCWZHERE7UFpaasTFxRmlpaWGYRhGRXGFcWTHEZv9V1FcccFM7du3Nzp37mz07NnT8PX1Na677jqjsrLSMAzD+PTTT41JkyYZVVVVhmEYxscff2yMGjXKMAzD6NGjh/Gf//zHMAzDqK6uNvLz8w3DMIxBgwYZq1evPuf5JkyYYCxatKjG+Xfu3HnB11ZWVhrh4eHGP//5T8uxnJwcwzAMo1+/fsa7775rGIZh7N+/32jZsqVx8OBBwzAMAzBeeeUVwzAMIz4+3vD29jYqKyuNkpISw8/Pz8jMzDQMwzD+/e9/G3369DEMwzDWrl1rdOnSxfI1TZ482XjooYcMwzCMZ555xpg1a5ZhGIbx/PPPG9OnT7fkGThwoLFmzRrDMAxj2LBhxtatWy3Zhw8fbqxcudIoLy83QkJCjO+++84wDMPYsGGDARhbtmyp9TUvXbrUuO+++wzDMIybb77ZuPrqq41vv/3WKC4uNlq2bGlUVFQYqamphq+vr+U1gCX36fe7X79+RnFxsVFVVWX079+/xnv4R4Dx7LPPWh5PnjzZ+OijjwzDMIyTJ08aDzzwgPHyyy8bx44dM3x9fY2SkhLDMAyjuLjY8m8aMJ566inDMAwjJSXFaNGihZGammpkZ2cbLVu2NHbv3m0YhmH84x//MCIjI42TJ08aW7ZsMZycnIyff/7ZMAzDWLx4sTFs2DDDMAzjtddeM6ZMmWLJlJeXZxjG+f9t/tGZn7mLpbE2K9D0nIhYQ25CLkuil9is/yk7phDUJ+iC7U5Pz1VVVfHggw8ye/ZsXn31Vb788kt+/fVXoqOjgVNbJpw2dOhQZs2axW233cawYcOsNpJ/LomJiZSVlXHHHXdYjvn7+1NYWEhsbCzbt28HIDw8nGuvvZYffviB9u3bA1ju9NClSxecnZ3JysoiJCSEsWPH8sknn/CXv/yFZcuWWUYxNm3axJ/+9CfLCM7UqVMZN25crUz33nsvvXv35tVXX+Xw4cPs37+fkSNHUlxczObNm8nOzra0LSoqIjExkYSEBJydnYmJiQFg2LBhdOrU6axfc0xMDM8++yzV1dXExcXx/PPPs2nTJpycnOjXr99Z9yQ8m1tuuQVPT08A+vXrR0pKyjnb3n///Zb///LLL/npp5947bXXACgtLcXJyYlmzZoRHh7O3XffzbBhwxg9ejQhISGW102aNAmATp06MXDgQLZt20aLFi3o3r073bt3B079nUyfPp3Dhw8Dpy7SuvLKKwG4+uqreeWVVwC46qqrWLRoEY899hgDBw5kxIgRlmzn+rdpTSqarCAmJoaYmBgSExOZPHmy2XFExE75d/Fnyo4pNu3/Yjg7OzN27Fj+8pe/8Oqrr2IYBnPmzGHKlNoZX3vtNfbt28eWLVuYMGECd911F0888YS1ol+SM6+Y+uP6HicnJ8t02P333899993H1KlT+eabb1i0aFGd+jstJCSEK664gq+++op9+/Zx99134+zsbFmI/fPPP9daW7R79+4699+uXTvc3Nz49NNPiY6OZujQoTz//PM4OTnVuA3YhZzr6z+bP24CaRgGq1atonPnzrXa/fzzz/znP/9h69atXHXVVXz22Wc1FqT/UV2uYDtXxquvvppdu3axadMm/vWvf/H000+zc+fO8/7btCYVTSJ/sPenvRw7cozwjuEAxCXF4dfcj8CAQIpLiklJSyG8Yzge7h4cyT5CYVEhEaERACSmJNLMpxlBrYIoLSslKTWJsA5heHp4kp2TzbHjx4gMP3XPw/0H9uPl6UVw62DKysvYf2A/ndp1wtvLm5y8HI7mHaVr564AJB9Mxt3NnZCgECorK4lPjqdDSAea+TQjLz+PI9lHuPLaK/Ft52vOmyZW4+LpUqeRoMvp3//+NxERp/6N33zzzbz66qvcdttttGzZksrKSvbu3Uvv3r1JSEiga9eudO3aFWdnZzZu3AhAs2bNzrr+py7O99qIiAg8PT357LPPLKNNubm5+Pv706dPHz788EMmT55McnIyP/74I2+++eYFz3d6ZOPxxx8nJiaGli1bAqd+MX7sscd49NFHadasGX//+98ZNmzYWfu47777+OCDD0hMTLSsw/L29mbIkCEsWLCAefPmAaeucjt58iRdunShqqqKLVu2MGTIEDZt2nTekZ+YmBj++te/8te//pUWLVrg4uLC559/XmPd1h/5+PhQUFBgGSW7FDfffDMvvfQSf//733F2diY/P5+8vDwCAwMpLCxkwIABDBgwgH379rFz505L0fThhx8yb948Dh48yA8/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paysjLi4OMLDw/Hx8SE7O5usrCzLfccSExNxd3enffv2VFZWsmfPHkJDQ/H1rdsu9z169ODaa6+lffv2DBo0iP79+3PnnXcSHBxMRUUFt956K++99x7Dhw/nxx9/ZOzYsee9ueofOTk58euvvwKn7u/m4eHB7t27cXR0JCcnB4CFCxfi5eXFL7/8AsBzzz3HU089xdtvv12jr/3793Pfffexbds2unTpQmVlJSUlJRw9epQ777yTrVu30r17dz799FNuu+029u278JWlBQUF9OjRg2effZb169cza9YsRo0axbvvvsvf//53fvjhB0th+Nhjj5GQkEBQUBCVlZWUl5fX6T0Q+6eiSWwiLimOl3mZa5Ou1f3QbKzStZKvnb5m9WOruZu7qaaa53iOm7iJ3vRmH/v4nM95kidxx50v+IJiipnAqRtqPsdzDGc4/ejHfvbzT/7JYzyGDz58xVfkkMOf+BO/8Ru72c0VXME1XEMqqXzER8xgBn74sZa1HOQg05gGwKu8Sh/6MIQhHOYw7/EeD/EQrWnNt3xLikMKP//6M+HRGo38o7///e+8//77ZGScWg94++23M3jwYN58800yMjKIjo5my5YtDB48mI8//pgXX3yRY8dOrWebOHEiXbt25f333yc3N5fo6Gi++eYbRo8eXadzOzo6smrVKhISEvj+++9Zt24dzz//PL/99hulpaU4OjoyfPhwAK699loCAwPZtWsXISEhF+z79GgSwDfffMN///tfHB1PTXYEBAQA8OWXX1JQUMCqVasAqKiosIwG/dF3333HiBEj6NLl1NW5Li4u+Pr68vXXX9O9e3dLwXnXXXcxffp0Dh8+fMF87u7u3HrrrQBcffXVpKSknLPt0KFDueeee7jxxhsZOXIknTvb7x0F5OKoaBKb8G/hz9VcjX8L7Qhua+26tePzHz6n8GghHdp2wDAMrkm4psZI0wOHH7CMNI04PKLGSNPVCVfXGGm6N+Ney0jTqMxRlJWX4VzmzOFXDzNp3CR6RPewjDTdcegOy0jT6KzRNUaaBiQNqDHSNPbgWMtIU//t/flu5nd4O3ib+dY1SA8++CBjx461PF6+fDk+Pj4AhISEsGPHDsLDTxWa9957L8OGDbO0XbZsmWXdjb+/Pzt27CA0NPSiM3Tp0oUuXbrw4IMPMmLECNasWcP1119fq93pKThn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9lsOHz5sOV5VVcXSpUvP+9oxY8Zw4sQJFixYAFBrYfqF9OrVy5L3fFxdXZk/fz79+/dn5cqVvPXWW5bnoqKiiIqKYvPmzbUWpsOp0bJdu3adtd+YmBjc3d3ZuHEja9euxdHRkREjRpw3S3x8fI3sInKKpudEpN7Ot+UAwF133VVrS4C6evTRR0lPT2fx4sVs2LCBrl274u3tTU5ODgkJCWRkZLB69eo6jfr4+Pjw8MMPs3DhQiZPnsx1112Hl5cXP//8M66urvj7+59z5GXYsGG8++675ObmEhERcdZ9jc7n2muv5e233+a333674LSei4sLzz33HH/961/5/PPPMQyDmTNnAvDXv/6VP//5zzz77LN88cUXhIeH4+bmxtGjR9m7dy8FBQVn3WzTy8uLQYMGsWHDBo4fP86VV155zlurABiGwY4dO2jfvn2NKw1FREWTiFyC01sOnMu4cePqXTQ1a9aMd955h3/961/8+9//ZtOmTZw8eZKWLVsSFhbGhAkTzrqA+1xuvPFGfHx8+OSTT1i/fj1eXl5cc801PPTQQ4wbN+6ctzjx8vJiwIABbNy48aJHmQCCgoLo27cvW7duZdasWRfceuB04fTMM8/wxRdfYBgGs2bNok2bNixdupQVK1bwww8/sG7dOhwdHfHz86Nnz57n3XF89OjRbNiwATi1W/j5/P7772RnZzNjxoyL/lpFGjsH41x77IuINAEZGRnceeedDBkyhGefffasbSZMmEBWVhb/+te/znkF4Pns2LGDRx55hKeeeophw4ZdamSbeu655/jvf//LZ599ds4tCUSaKq1pEpEmobCwsNal/+Xl5ZZF1wMGDDjr637++WdSU1OJiYmpV8EEEB0dzZVXXsnHH39cY2uFhiY9PZ1///vf3HvvvSqYRM5C03Mi0iTs2rWLl156ib59+9KqVSsKCgqIjY0lKyuLPn36cN1119Vo/+WXX3L06FG++eYbXF1dueuuuy7p/DNnzuS7774jJyfnvGuKzHT06FEmTpzILbfcYnYUkQZJ03Mi0iSkp6ezdOlS9u7dy/HjxwEIDg7muuuu4/bbb6+19mr8+PHk5OTQtm1bHnrooVo7j4tI06OiSURERKQOtKZJREREpA5UNImIiIjUgYomERERkTpQ0SQiIiJSByqaREREROpARZOIiIhIHahoEhEREakDFU0iIiIidaCiSURERKQO/j+Rs8EUsIl3dQAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fit_poisson_error = np.zeros((2,len(expectation.project('Em').todense().contents)))\n",
"fit_gaussian_error = np.zeros(len(expectation.project('Em').todense().contents))\n",
"inj_poisson_error = np.zeros((2,len(grb.binned_data.project('Em').todense().contents)))\n",
"inj_gaussian_error = np.zeros(len(grb.binned_data.project('Em').todense().contents))\n",
"\n",
"for i, counts in enumerate(expectation.project('Em').todense().contents):\n",
" if counts > 5:\n",
" fit_gaussian_error[i] = np.sqrt(counts)\n",
" else:\n",
" poisson_error = poisson_conf_interval(counts, interval=\"frequentist-confidence\", sigma=1)\n",
" fit_poisson_error[0][i] = poisson_error[0]\n",
" fit_poisson_error[1][i] = poisson_error[1]\n",
"\n",
"for i, counts in enumerate(grb.binned_data.project('Em').todense().contents):\n",
" if counts > 5:\n",
" inj_gaussian_error[i] = np.sqrt(counts)\n",
" else:\n",
" poisson_error = poisson_conf_interval(counts, interval=\"frequentist-confidence\", sigma=1)\n",
" inj_poisson_error[0][i] = poisson_error[0]\n",
" inj_poisson_error[1][i] = poisson_error[1]\n",
" \n",
"fig,ax = plt.subplots()\n",
"\n",
"ax.stairs(expectation.project('Em').todense().contents, binned_energy_edges, color='purple', label = \"Best fit convolved with response\")\n",
"ax.errorbar(binned_energy, expectation.project('Em').todense().contents, yerr=fit_poisson_error, color='purple', linewidth=0, elinewidth=1)\n",
"ax.errorbar(binned_energy, expectation.project('Em').todense().contents, yerr=fit_gaussian_error, color='purple', linewidth=0, elinewidth=1)\n",
"ax.stairs(grb.binned_data.project('Em').todense().contents, binned_energy_edges, color = 'black', ls = \":\", label = \"Source counts\")\n",
"ax.errorbar(binned_energy, grb.binned_data.project('Em').todense().contents, yerr=inj_poisson_error, color='black', linewidth=0, elinewidth=1)\n",
"ax.errorbar(binned_energy, grb.binned_data.project('Em').todense().contents, yerr=inj_gaussian_error, color='black', linewidth=0, elinewidth=1)\n",
"\n",
"ax.set_xscale(\"log\")\n",
"ax.set_yscale(\"log\")\n",
"\n",
"ax.set_xlabel(\"Energy (keV)\")\n",
"ax.set_ylabel(\"Counts\")\n",
"\n",
"ax.legend()"
]
},
{
"cell_type": "markdown",
"id": "00234bec-2a9f-4557-8a41-0d1a9b71e9c9",
"metadata": {},
"source": [
"Plot the fitted spectrum convolved with the response plus the fitted background, as well as the simulated source+background counts"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "06df3b27-d2ed-4214-bda7-d4fda667e145",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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M0c3x3Y1WaWDgwOzZ8/mr3/9K0888QSGYXDXXXexaNGpRduTTz7Jnj172LJlC/PmzWPu3LncfvvtJqQ+1W8v9XVxcbF+b29vbz1Fdd1113Httddyww03sH79ep566qkm7e+kgIAAzjnnHD7++GP27NnD1VdfjYODg3UMz3fffVfv2AA7d+5s8v779++Ps7Mzb731FjExMUyePJmHHnoIe3t7Jk+efJpnf6rTPf+G/HpGYcMweP/9962rgf/ad999x3//+1+++uorRo8ezb///e96g7t/rSmXXp8u43nnnceOHTuIi4vjgw8+4J577uGnn35q9L3ZFA1lcnBwqFdYnfx/tLe3b9bzbeg4ixcvZvr06bz//vvY2dkRHR3dpLFeYWFh7N27l++++85aEDVFYzND//q5n+45n9TU944mme0YNIZIpBm+/PJL6yDnSy65hBdffJGjR48CUF1dzU8//QTA3r17GTRoEDfddBM33HAD3333HXDir+mGxts0RWOPjYiIwM3NjX//+9/Wbfn5+Xh6ehIdHW0dG5Samso333zD+PFnnjfkZI/EbbfdRmxsLL16nZgtLTY2lnXr1nH8+HEAXnrpJaZMmdLgPq699lpeffVVXn/9dWvvioeHB5MmTWLFihXWdllZWWRkZDBw4EBqamrYsmULcOKv98b+so6NjeVvf/sbsbGx9OzZE0dHR959911rD9NveXp6tvj1/61LLrmERx55xPpL8NixY6SmplJcXExubi7jxo3jnnvu4fzzz7e+LwDr/8XBgwfZtm0b48aNY/To0ezatYvdu3cD8M4775yyEnlD0tLS8PDwYM6cOaxcuZKUlBRKSkoafW82pKFMvxUWFsb//vc/AL7//nvr1Y9ner6/tmHDBmvP4CuvvGL9fzp27BiBgYHY2dmxdetW61g1gJkzZ/L4449TV1cHnBg3dVL//v3ZvHkzDz74oPU5jB49mp07d1rzvfnmm6cdFwYn3kOrV6/GMAxKS0t54403rO/nXz/ntLQ0vvnmm9Pu57f7fO211zAMg+PHj9f7XErDdibt5D7uY2fSqX8UnS0qiEyWuC+Rx3mcxH2JZkeR07jiiiusg3yTkpJ45plngBOnNebPn8+kSZMYNmwYw4cP58svvwRg+fLlDBo0iBEjRvDGG29YV7NetGgR//jHP047MLoxjT3WwcGBjz/+mNdee40hQ4YwbNgw3n//feDEAOm1a9cybNgwfv/73/PKK680+a/pa6+9lpdeeqneYN1p06Zx7bXXct555zFkyBCOHz/Oww8/3ODjZ82axQ8//ICfnx+RkZHW7W+99RapqakMHjyYIUOGcNlll1FQUICTkxNr167llltuYciQIbz99tsMGzbstPliY2NJT0+3/mKNjY2ltLT0tI+59dZbufDCC+sNqm6pp556CldXV4YPH87QoUOZPHkyBw8epKioiMsuu8w60Lm6upp58+ZZH1dbW8uIESOYMmUK//znPwkKCsLX15e33nqLa665hqFDh/LCCy/w7rvvnrFn4auvviImJobhw4czZswYHnvsMby8vBp9bzakoUy/9eCDD/Lcc88xbNgwXn31VQYNGgRwxuf7a+PGjeOqq65i4MCBpKen849//AM4cUHBnXfeyfDhw3n11VetxfjJ17myspIhQ4YwfPhwli9fXm+fFouFL7/8kueee45//vOf9O7dm1deeYVLLrmE4cOHs2vXLjw8PKyneH/rnnvuwdHRkSFDhnDuuecyc+ZM5syZA8Dtt9/Oli1bGDJkCHfddVe9XI255557KC8vZ+DAgUyfPp3zzz+/SY/ryvz7+HMxF+Pfp/E/AmzJzjAMw7SjdxAn1zJ7+eWXrb0DbWXHph38ZepfeHLjkwy/aHib7rsjqaioIC0tjeDg4FNOo4h0FnZ2dhw7duy0v5zN0B4ztVZxcTGenp7AifFUd911F0lJSSanOlVH/rm36a1NTL16Khvf3MhFcy9q9f6yE7JZFbOKRfGLTBsqoTFEjTgbq937+foxgQn4+XbttcxERNrKypUrWbt2LbW1tXTv3v20UwlIy/n5/P/fXW20Dmfh8UISSaTweKFpqzaoIGrE2VjtvrSslMMcprSs5bMfi0jH0B475NtjptZavnz5KafWpG35+foxiUlt9sf8ocxDrGMd12VeRySRZ36ADWgMkcn2p+9nNavZn65LMkVEpGuKCo/idm4nKtycdcxABZHpwoPDWcISXXYvIiJdloODA2644eBg3okrFUQmc3VxpTe9cXVxNTuKiIiIKQ5lHuJ93udQ5iHTMqggMllWbhZf8AVZuVlmRxERETFFdU01xzlOdU3z1phsSyqITFZcUkwyyRSXFJsdRURExBShgaFcy7WEBoaalkEFkckiQiNY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KWHbtm14eHgwfvx4ABwcHJgzZw7PPPMMu3btYsiQITbPK9LRqCASkVP4+/tz3XXXmR2jXaupqWH9+vUMGTIEf39/mx+vW7duTJs2jTVr1rBx40bmzZvXYLu4uDgqKyuZPn06zs7O1u2TJ0/m2Wef5eOPP1ZBJNIAnTITkVYZP348N998M0ePHuWhhx7i4osvJjY2lsWLF/PTTz81+JiysjJeffVVrrnmGmJjY5k+fTq33norO3fuPKXtzTffzPjx46msrOTll1/myiuvZNKkSbz66qvWNl9//TULFy4kNjaWWbNm8eijj1JcXMycOXPqneJ74IEHGD9+PImJiQ3mWr16NePHjycuLu6Mz/v777+noKCAiRMnnrHtSUeOHGHevHnExsby1VdfWbcfO3aMlStX8oc//IHJkydz8cUXc/fdd3PgwIF6j58+fTp2dnZ8/vnnGIbR4DE2bNgAwIwZM+pt79GjByNGjOCrr76irKysyZlFugoVRCLSaiUlJdx4440cPHiQKVOmMH78eJKTk7nttttO+aV+/PhxbrjhBtasWYOnpyezZs1i/PjxpKSksGzZMrZt29bgMe655x42btzIiBEj+P3vf28ds/PZZ59xzz33kJGRwUUXXcTUqVPZs2cPf/nLX6ipqam3j5kzZ1of81u1tbVs2LABLy8v66mmxsTHxwMwaNCgM79AwMGDB1myZAlHjhzhsccesxZSmZmZLFiwgHfffZe+ffty2WWXMXr0aL7//ntuuOGGesVbnz59iImJISsrq8Fi88CBA+zdu5fw8HAGDBhwyv2DBg2iqqqK3bt3NymzSFeiU2YicorMzMx6PTC/NmjQIM4999x621JTU7nkkkv485//TLduJ/7Oio6O5tFHH+WDDz7gtttus7Z9+umnSUtL4/bbb+d3v/uddfuxY8dYuHAhjz32GKNGjap3ugegoKCA1157je7du1u3FRcX889//hNXV1dWrVpFv379AFi4cCG33XYbycnJ9OnTx9p+2LBhBAUFsXnzZm666SZcXV2t933//ffk5eVx+eWX4+TkdMbXaNeuXXTr1o2wsLAztt2zZw933HEHDg4OrFy5st5jHnroIY4ePcrjjz/OqFGjrNuvueYaFi5cyKOPPsqaNWus22fMmMGPP/7Ihg0biI6Ornec0/UOnRQREQHA7t276x1LRNRDJCINyMzMZM2aNQ3++9///ndKe1dXVxYvXmwthuDElU329vbs3bvXuq2wsJAtW7YQHR1drxgC6NmzJ3/4wx8oLCy09r782rXXXluvGAL45ptvKC8vZ/r06dZiCE4MIl6wYEGDz23mzJmUlZWxefPmetvXr18PwMUXX3y6l6WevLw8PDw8zlg8ffvtt9xyyy14enry/PPP1yuGUlJS2L17NxdddNEpBUq/fv343e9+x4EDB+r1so0bNw4vLy++/vprSktLrdtramr44osvcHJyOu2A+F69egEnTt2JSH3qIRKRU4waNYrHH3+8ye0DAgJwc3Ort83BwYFevXpRUlJi3bZ3715qa2uprq5usAcqIyMDgPT0dMaMGVPvvsjIyFPan5xXZ+jQoafcFxUVhb29/SnbL7roIl566SXWr19vLcqOHj3Kf//7XwYPHkxQUNAZnu0Jx48fx9fXt9E2W7Zs4YcffiA0NJTHHnuMnj171rv/5OmwY8eONfh6HDp0yPo1JCQEwFrwvPfee8TFxTFr1iwAtm/fTmFhIbGxsXh6ejaY5+T2oqKiJj1Hka5EBZGItJq7u3uD2+3t7amrq7PePn78OHDidNOuXbtOu7+KiopTtp3s3fi1kz0kvy004MRVWV5eXqds9/T0ZNKkSWzcuJEDBw4QEhLC559/Tm1tbZN7hwCcnZ2pqqpqtM2ePXuora1l6NChDWY8+Xp8++23fPvtt6fdT3l5eb3bM2bM4L333mPDhg3WguhMp8sAa14XF5dGc4t0RSqIROSsOVk4XXHFFdx4443Neqydnd1p93fs2LFT7qurq6OoqKjBXpxZs2axceNGPv30U5YtW8Znn32Gu7s7kyZNanIeLy8v8vLyGm2zaNEivvnmG9577z3s7e1Pec4n8y9btozZs2c3+dihoaEMHDiQpKQk0tLS8PT05Pvvv8disZwyrujXThZgPXr0aPKxRLoKjSESkbNm4MCB2NnZsWfPnjbZX2hoKECDvU1JSUnU1tY2+LhBgwYRGhrKf/7zH77//nsyMjK48MILm9VzEhISQlVVFbm5uadt4+TkxEMPPcR5553H2rVrefbZZ+vdf/I0YEtej5M9QZ999hmbNm2itrbWeln+6Zw8BXfy9JuI/EIFkYicNd7e3kyaNIndu3fz73//u8G5dBITExs8ZdaQ888/H1dXVz777DMyMzOt22tqali9enWjj505cybHjx9nxYoVAKcM8j6T4cOHW/M2xsnJiQcffJAxY8awbt06Vq5cab0vKiqKqKgoNm/efMogbzjRy7Vjx44G9xsbG4uLiwtffPEFGzZsoFu3bkydOrXRLElJSfWyi8gvdMpMRE7R2GX3AHPnzj3lsvim+stf/sLhw4d54YUX2LRpE4MGDcLDw4O8vDz27t1LRkYGH374YZN6azw9Pbnpppt47LHHWLhwIRdccAHu7u589913ODk54ePjc9oekylTpvDiiy+Sn59PREREg/P2NOb888/nueee48cffzzjqTZHR0ceeOAB/va3v/Huu+9iGAY333wzAH/729/485//zP333897771HeHg4zs7OHDlyhN27d1NUVNTgRJHu7u5MmDCBTZs2UVhYyLnnnnva5TwADMMgPj6ewMDAelfkicgJKohE5BQnL7s/ncsvv7zFBVH37t15/vnn+eCDD/jyyy+Ji4ujrq6OXr16ERYWxrx58xocDH06F198MZ6enrzxxhts3LgRd3d3xo4dy+LFi7n88stPu6yGu7s748aN44svvmh27xCAxWJh5MiRfPXVVyxbtuyMl9+fLIruvfde3nvvPQzDYNmyZfTt25fVq1ezdu1atm3bxueff063bt3w9vZm2LBhjc6EPWPGDDZt2gScmMW6MT///DO5ubksXbq02c9VpCuwM043/7uISAeWkZHBVVddxaRJk7j//vsbbDNv3jxycnL44IMPTnulXGPi4+O55ZZbuPvuu5kyZUprI9vUAw88wP/+9z/+/e9/n/ayfJGuTGOIRKRDKy4uPuXy98rKSusA5nHjxjX4uO+++460tDRiY2NbVAwBxMTEcO655/L666/Xm16gvTl8+DBffvkl11xzjYohkdPQKTMR6dB27NjBI488wsiRI+nduzdFRUUkJCSQk5NDdHQ0F1xwQb32H330EUeOHGH9+vU4OTkxd+7cVh3/5ptv5j//+Q95eXmNjuEx05EjR5g/fz6XXnqp2VFE2i2dMhORDu3w4cOsXr2a3bt3U1hYCIC/vz8XXHABV1555SljnebMmUNeXh79+vVj8eLFp8yILSJdkwoiERER6fI0hkhERES6PBVEIiIi0uWpIBIREZEuTwWRiIiIdHkqiERERKTLU0EkIiIiXZ4KIhEREenyVBCJiIhIl/f/AHYJ5XyVjIPqAAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fit_bkg_poisson_error = np.zeros((2,len(expectation.project('Em').todense().contents+(bkg_par.value * bkg.binned_data.slice[{'Time':slice(bkg_min,bkg_max)}].project('Em').todense().contents))))\n",
"fit_bkg_gaussian_error = np.zeros(len(expectation.project('Em').todense().contents+(bkg_par.value * bkg.binned_data.slice[{'Time':slice(bkg_min,bkg_max)}].project('Em').todense().contents)))\n",
"inj_bkg_poisson_error = np.zeros((2,len(grb_bkg.binned_data.project('Em').todense().contents)))\n",
"inj_bkg_gaussian_error = np.zeros(len(grb_bkg.binned_data.project('Em').todense().contents))\n",
"\n",
"for i, counts in enumerate(expectation.project('Em').todense().contents+(bkg_par.value * bkg.binned_data.slice[{'Time':slice(bkg_min,bkg_max)}].project('Em').todense().contents)):\n",
" if counts > 5:\n",
" fit_bkg_gaussian_error[i] = np.sqrt(counts)\n",
" else:\n",
" poisson_error = poisson_conf_interval(counts, interval=\"frequentist-confidence\", sigma=1)\n",
" fit_bkg_poisson_error[0][i] = poisson_error[0]\n",
" fit_bkg_poisson_error[1][i] = poisson_error[1]\n",
"\n",
"for i, counts in enumerate(grb_bkg.binned_data.project('Em').todense().contents):\n",
" if counts > 5:\n",
" inj_bkg_gaussian_error[i] = np.sqrt(counts)\n",
" else:\n",
" poisson_error = poisson_conf_interval(counts, interval=\"frequentist-confidence\", sigma=1)\n",
" inj_bkg_poisson_error[0][i] = poisson_error[0]\n",
" inj_bkg_poisson_error[1][i] = poisson_error[1]\n",
" \n",
"fig,ax = plt.subplots()\n",
"\n",
"ax.stairs(expectation.project('Em').todense().contents+(bkg_par.value * bkg.binned_data.slice[{'Time':slice(bkg_min,bkg_max)}].project('Em').todense().contents), binned_energy_edges, color='purple', label = \"Best fit convolved with response plus background\")\n",
"ax.errorbar(binned_energy, expectation.project('Em').todense().contents+(bkg_par.value * bkg.binned_data.slice[{'Time':slice(bkg_min,bkg_max)}].project('Em').todense().contents), yerr=fit_bkg_poisson_error, color='purple', linewidth=0, elinewidth=1)\n",
"ax.errorbar(binned_energy, expectation.project('Em').todense().contents+(bkg_par.value * bkg.binned_data.slice[{'Time':slice(bkg_min,bkg_max)}].project('Em').todense().contents), yerr=fit_bkg_gaussian_error, color='purple', linewidth=0, elinewidth=1)\n",
"ax.stairs(grb_bkg.binned_data.project('Em').todense().contents, binned_energy_edges, color = 'black', ls = \":\", label = \"Total counts\")\n",
"ax.errorbar(binned_energy, grb_bkg.binned_data.project('Em').todense().contents, yerr=inj_bkg_poisson_error, color='black', linewidth=0, elinewidth=1)\n",
"ax.errorbar(binned_energy, grb_bkg.binned_data.project('Em').todense().contents, yerr=inj_bkg_gaussian_error, color='black', linewidth=0, elinewidth=1)\n",
"\n",
"ax.set_xscale(\"log\")\n",
"ax.set_yscale(\"log\")\n",
"\n",
"ax.set_xlabel(\"Energy (keV)\")\n",
"ax.set_ylabel(\"Counts\")\n",
"\n",
"ax.legend()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:COSIPY]",
"language": "python",
"name": "conda-env-COSIPY-py"
},
"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.15"
}
},
"nbformat": 4,
"nbformat_minor": 5
}