{ "cells": [ { "cell_type": "markdown", "id": "8cb3f07c", "metadata": { "tags": [] }, "source": [ "# Spectral fitting example (GRB)" ] }, { "cell_type": "markdown", "id": "8f37244c", "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.fits) \n", "- binned data (grb_binned_data.hdf5 & bkg_binned_data_1s_local.hdf5) \n", "- detector response (SMEXv12.Continuum.HEALPixO3_10bins_log_flat.binnedimaging.imagingresponse.h5) \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": "b39db505", "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": "90ad8f0e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
14:46:32 WARNING   The naima package is not available. Models that depend on it will not be         functions.py:43\n",
       "                  available                                                                                        \n",
       "
\n" ], "text/plain": [ "\u001b[38;5;46m14:46:32\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=764513;file:///home/juan/miniconda3/envs/cosi_env/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=86945;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/astromodels/functions/functions_1D/functions.py#43\u001b\\\u001b[2m43\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:65\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=166159;file:///home/juan/miniconda3/envs/cosi_env/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=220494;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/astromodels/functions/functions_1D/functions.py#65\u001b\\\u001b[2m65\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": [ "
14:46:33 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;46m14:46:33\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=930592;file:///home/juan/miniconda3/envs/cosi_env/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=261086;file:///home/juan/miniconda3/envs/cosi_env/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": [ "
14:46:33 INFO      Starting 3ML!                                                                     __init__.py:44\n",
       "
\n" ], "text/plain": [ "\u001b[38;5;46m14:46:33\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=677705;file:///home/juan/miniconda3/envs/cosi_env/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=372519;file:///home/juan/miniconda3/envs/cosi_env/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   WARNINGs here are NOT errors                                                      __init__.py:45\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=623845;file:///home/juan/miniconda3/envs/cosi_env/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=322969;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/__init__.py#45\u001b\\\u001b[2m45\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:46\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=92461;file:///home/juan/miniconda3/envs/cosi_env/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=766722;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/__init__.py#46\u001b\\\u001b[2m46\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:47\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=250885;file:///home/juan/miniconda3/envs/cosi_env/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=387583;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/__init__.py#47\u001b\\\u001b[2m47\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
         WARNING   ROOT minimizer not available                                                minimization.py:1208\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 ROOT minimizer not available \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=104133;file:///home/juan/miniconda3/envs/cosi_env/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=89787;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/minimizer/minimization.py#1208\u001b\\\u001b[2m1208\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
         WARNING   Multinest minimizer not available                                           minimization.py:1218\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=284878;file:///home/juan/miniconda3/envs/cosi_env/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=559084;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/minimizer/minimization.py#1218\u001b\\\u001b[2m1218\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
         WARNING   PyGMO is not available                                                      minimization.py:1228\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=446337;file:///home/juan/miniconda3/envs/cosi_env/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=933362;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/minimizer/minimization.py#1228\u001b\\\u001b[2m1228\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
         WARNING   The cthreeML package is not installed. You will not be able to use plugins which  __init__.py:95\n",
       "                  require the C/C++ interface (currently HAWC)                                                     \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 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=612140;file:///home/juan/miniconda3/envs/cosi_env/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=173603;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/__init__.py#95\u001b\\\u001b[2m95\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:136\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=665741;file:///home/juan/miniconda3/envs/cosi_env/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=124977;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/__init__.py#136\u001b\\\u001b[2m136\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:136\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=644299;file:///home/juan/miniconda3/envs/cosi_env/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=812695;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/__init__.py#136\u001b\\\u001b[2m136\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   No fermitools installed                                              lat_transient_builder.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 No fermitools installed \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=268409;file:///home/juan/miniconda3/envs/cosi_env/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=206299;file:///home/juan/miniconda3/envs/cosi_env/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": [ "
         WARNING   Env. variable OMP_NUM_THREADS is not set. Please set it to 1 for optimal         __init__.py:345\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 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=408008;file:///home/juan/miniconda3/envs/cosi_env/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=275614;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/__init__.py#345\u001b\\\u001b[2m345\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:345\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=364279;file:///home/juan/miniconda3/envs/cosi_env/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=10681;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/__init__.py#345\u001b\\\u001b[2m345\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:345\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=698476;file:///home/juan/miniconda3/envs/cosi_env/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=467794;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/__init__.py#345\u001b\\\u001b[2m345\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 BinnedData\n", "from cosipy.spacecraftfile import SpacecraftHistory\n", "from cosipy.response.FullDetectorResponse import FullDetectorResponse\n", "from cosipy.util import fetch_wasabi_file\n", "\n", "from cosipy.statistics import PoissonLikelihood\n", "from cosipy.background_estimation import FreeNormBinnedBackground\n", "from cosipy.interfaces import ThreeMLPluginInterface\n", "from cosipy.response import BinnedThreeMLModelFolding, BinnedInstrumentResponse, BinnedThreeMLPointSourceResponse\n", "from cosipy.data_io import EmCDSBinnedData\n", "\n", "import sys\n", "\n", "import astropy.units as u\n", "from astropy.time import Time\n", "from astropy.stats import poisson_conf_interval\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from threeML import Band, PointSource, Model, JointLikelihood, DataList\n", "from astromodels import Parameter, Powerlaw\n", "\n", "from pathlib import Path\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "id": "f19d1cd6", "metadata": {}, "source": [ "## Download and read in binned data" ] }, { "cell_type": "markdown", "id": "13c7a807", "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": 2, "id": "a5064ee2", "metadata": {}, "outputs": [], "source": [ "data_path = Path(\"\") # /path/to/files. Current dir by default" ] }, { "cell_type": "markdown", "id": "efda3f7e", "metadata": {}, "source": [ "Download the orientation file (684.38 MB)" ] }, { "cell_type": "code", "execution_count": 3, "id": "56c5d6e6", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "A file named 20280301_3_month_with_orbital_info.fits already exists with the specified checksum (5e69bc1d55fab9390f90635690f62896). Skipping.\n" ] } ], "source": [ "fetch_wasabi_file('COSI-SMEX/develop/Data/Orientation/20280301_3_month_with_orbital_info.fits', output=str(data_path / '20280301_3_month_with_orbital_info.fits'), checksum = '5e69bc1d55fab9390f90635690f62896')" ] }, { "cell_type": "markdown", "id": "7aa9d355", "metadata": {}, "source": [ "Download the binned GRB data (76.90 KB)" ] }, { "cell_type": "code", "execution_count": 4, "id": "e1e6b68d", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "A file named grb_binned_data.hdf5 already exists with the specified checksum (fcf7022369b6fb378d67b780fc4b5db8). Skipping.\n" ] } ], "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'), checksum = 'fcf7022369b6fb378d67b780fc4b5db8')\n" ] }, { "cell_type": "markdown", "id": "d658d5ad", "metadata": {}, "source": [ "Download the binned background data (255.97 MB)" ] }, { "cell_type": "code", "execution_count": 5, "id": "7645cccb", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "A file named bkg_binned_data_1s_local.hdf5 already exists with the specified checksum (b842a7444e6fc1a5dd567b395c36ae7f). Skipping.\n" ] } ], "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'), checksum = 'b842a7444e6fc1a5dd567b395c36ae7f')" ] }, { "cell_type": "markdown", "id": "04fe3d75", "metadata": {}, "source": [ "Download the response file (596.06 MB)" ] }, { "cell_type": "code", "execution_count": 6, "id": "0807d49a", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "A file named SMEXv12.Continuum.HEALPixO3_10bins_log_flat.binnedimaging.imagingresponse.h5 already exists with the specified checksum (eb72400a1279325e9404110f909c7785). Skipping.\n" ] } ], "source": [ "fetch_wasabi_file('COSI-SMEX/develop/Data/Responses/SMEXv12.Continuum.HEALPixO3_10bins_log_flat.binnedimaging.imagingresponse.h5', output=str(data_path / 'SMEXv12.Continuum.HEALPixO3_10bins_log_flat.binnedimaging.imagingresponse.h5'), checksum = 'eb72400a1279325e9404110f909c7785')" ] }, { "cell_type": "markdown", "id": "3bf22e57", "metadata": {}, "source": [ "Read in the spacecraft orientation file & select the beginning and end times of the GRB" ] }, { "cell_type": "code", "execution_count": 7, "id": "8fe2c80b", "metadata": {}, "outputs": [], "source": [ "tmin = Time(1842597410.0, format='unix')\n", "tmax = Time(1842597450.0, format='unix')\n", "sc_orientation = SpacecraftHistory.open(data_path / \"20280301_3_month_with_orbital_info.fits\", tmin, tmax)\n", "sc_orientation = sc_orientation.select_interval(tmin, tmax) # Function changed name during refactoring" ] }, { "cell_type": "markdown", "id": "9a7fbcc9", "metadata": {}, "source": [ "Create BinnedData objects for the GRB only 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": 8, "id": "e70fb69f", "metadata": {}, "outputs": [], "source": [ "grb = BinnedData(data_path / \"grb.yaml\")\n", "bkg = BinnedData(data_path / \"background.yaml\")" ] }, { "cell_type": "markdown", "id": "44bc64e6", "metadata": {}, "source": [ "Load binned .hdf5 files" ] }, { "cell_type": "code", "execution_count": 9, "id": "87c1cee5", "metadata": {}, "outputs": [], "source": [ "grb.load_binned_data_from_hdf5(binned_data=data_path / \"grb_binned_data.hdf5\")\n", "bkg.load_binned_data_from_hdf5(binned_data=data_path / \"bkg_binned_data_1s_local.hdf5\")" ] }, { "cell_type": "markdown", "id": "7155d7c0", "metadata": {}, "source": [ "Define the path to the detector response" ] }, { "cell_type": "code", "execution_count": 10, "id": "ea2c7a7e", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "A file named SMEXv12.Continuum.HEALPixO3_10bins_log_flat.binnedimaging.imagingresponse.h5 already exists with the specified checksum (eb72400a1279325e9404110f909c7785). Skipping.\n" ] } ], "source": [ "dr_path = data_path / \"SMEXv12.Continuum.HEALPixO3_10bins_log_flat.binnedimaging.imagingresponse.h5\" # path to detector response\n", "fetch_wasabi_file(\n", " 'COSI-SMEX/develop/Data/Responses/SMEXv12.Continuum.HEALPixO3_10bins_log_flat.binnedimaging.imagingresponse.h5',\n", " output=str(dr_path),\n", " checksum='eb72400a1279325e9404110f909c7785')\n", "\n", "dr = FullDetectorResponse.open(dr_path)" ] }, { "cell_type": "markdown", "id": "224bb49c", "metadata": { "tags": [] }, "source": [ "## Perform spectral fit" ] }, { "cell_type": "markdown", "id": "e7f94a21", "metadata": {}, "source": [ "Define time window of binned background simulation to use for background model" ] }, { "cell_type": "code", "execution_count": 11, "id": "438c5473", "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]\n", "bkg_dist = bkg.binned_data.slice[{'Time': slice(bkg_min, bkg_max)}].project('Em', 'Phi', 'PsiChi')\n", "\n", "# Workaround to avoid inf values. Out bkg should be smooth, but currently it's not.\n", "# Reproduces results before refactoring. It's not _exactly_ the same, since this fudge value was 1e-12, and\n", "# it was added to the expectation, not the normalized bkg\n", "bkg_dist += sys.float_info.min" ] }, { "cell_type": "markdown", "id": "863bf057", "metadata": {}, "source": [ "Find the overlap between binned background simulation and the grb signal" ] }, { "cell_type": "code", "execution_count": 12, "id": "ac162ea8", "metadata": {}, "outputs": [], "source": [ "bkg_overlap_tmin = 1842597410.0\n", "bkg_overlap_tmax = 1842597450.0\n", "\n", "bkg_overlap_min, bkg_overlap_max = np.searchsorted(bkg.binned_data.axes['Time'].edges.value,\n", " (bkg_overlap_tmin, bkg_overlap_tmax), side='left')\n", "\n", "bkg_overlap = bkg.binned_data.slice[{'Time': slice(bkg_overlap_min, bkg_overlap_max)}]" ] }, { "cell_type": "markdown", "id": "c70c507b", "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": 13, "id": "bb640c5d", "metadata": {}, "outputs": [], "source": [ "# Wrap the raw BinnedData objects into the appropiate data interface.\n", "data = EmCDSBinnedData(grb.binned_data.project('Em', 'Phi', 'PsiChi') + bkg_overlap.project('Em', 'Phi', 'PsiChi'))\n", "\n", "# Use the background model to initialize a background expectation interface.\n", "# For this particular background interface implementation, only the normalization values are free.\n", "bkg_model = FreeNormBinnedBackground(bkg_dist,\n", " sc_history=sc_orientation,\n", " copy = False)\n", "\n", "instrument_response = BinnedInstrumentResponse(dr, data)\n", "\n", "# Currently using the same NnuLambda, Ei and Pol axes as the underlying FullDetectorResponse,\n", "# matching the behavior of v0.3. This is all the current BinnedInstrumentResponse can do.\n", "# In principle, this can be decoupled, and a BinnedInstrumentResponseInterface implementation\n", "# can provide the response for an arbitrary directions, Ei and Pol values.\n", "# NOTE: this is currently only implemented for data in local coords\n", "psr = BinnedThreeMLPointSourceResponse(data = data,\n", " instrument_response = instrument_response,\n", " sc_history=sc_orientation,\n", " energy_axis = dr.axes['Ei'],\n", " polarization_axis = dr.axes['Pol'] if 'Pol' in dr.axes.labels else None,\n", " nside = 2*data.axes['PsiChi'].nside)\n", "\n", "response = BinnedThreeMLModelFolding(data = data, point_source_response = psr)\n", "\n", "like_fun = PoissonLikelihood(data, response, bkg_model)\n", "\n", "cosi = ThreeMLPluginInterface('cosi',\n", " like_fun,\n", " response,\n", " bkg_model)\n", "\n", "# Nuisance parameter guess, bounds, etc.\n", "cosi.bkg_parameter['bkg_norm'] = Parameter(\"bkg_norm\", # background parameter\n", " 1,\n", " unit = u.Hz,# 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", " )" ] }, { "cell_type": "markdown", "id": "ccef9f70", "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": 14, "id": "78339955", "metadata": {}, "outputs": [], "source": [ "# Set model to fit\n", "l = 93.\n", "b = -53.\n", "\n", "alpha = -1\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", "spectrum.beta.min_value = -15.0\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", "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", "model = Model(source) # Model with single source. If we had multiple sources, we would do Model(source1, source2, ...)" ] }, { "cell_type": "markdown", "id": "335b57bf", "metadata": {}, "source": [ "Gather all plugins and combine with the model in a JointLikelihood object, then perform maximum likelihood fit" ] }, { "cell_type": "code", "execution_count": 15, "id": "f67d1c61", "metadata": { "scrolled": true, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
14:46:50 INFO      set the minimizer to minuit                                              joint_likelihood.py:994\n",
       "
\n" ], "text/plain": [ "\u001b[38;5;46m14:46:50\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=659767;file:///home/juan/miniconda3/envs/cosi_env/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=366138;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/classicMLE/joint_likelihood.py#994\u001b\\\u001b[2m994\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
14:47:58 WARNING   50.94 percent of samples have been thrown away because they failed the  analysis_results.py:1645\n",
       "                  constraints on the parameters. This results might not be suitable for                            \n",
       "                  error propagation. Enlarge the boundaries until you loose less than 1                            \n",
       "                  percent of the samples.                                                                          \n",
       "
\n" ], "text/plain": [ "\u001b[38;5;46m14:47:58\u001b[0m\u001b[38;5;46m \u001b[0m\u001b[38;5;134mWARNING \u001b[0m \u001b[1;38;5;251m \u001b[0m\u001b[1;37m50.94\u001b[0m\u001b[1;38;5;251m percent of samples have been thrown away because they failed the \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b]8;id=751050;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/analysis_results.py\u001b\\\u001b[2manalysis_results.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=749447;file:///home/juan/miniconda3/envs/cosi_env/lib/python3.10/site-packages/threeML/analysis_results.py#1645\u001b\\\u001b[2m1645\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251mconstraints on the parameters. This results might not be suitable for \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n", "\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251merror propagation. Enlarge the boundaries until you loose less than \u001b[0m\u001b[1;37m1\u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[1;38;5;251m \u001b[0m\u001b[2m \u001b[0m\n", "\u001b[38;5;46m \u001b[0m \u001b[1;38;5;251mpercent of the samples. \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
resultunit
parameter
source.spectrum.main.Band.K(3.08 -0.20 +0.21) x 10^-21 / (keV s cm2)
source.spectrum.main.Band.alpha(-2.8 +/- 0.5) x 10^-1
source.spectrum.main.Band.xp(4.76 +/- 0.05) x 10^2keV
source.spectrum.main.Band.beta-6.8 +/- 1.2
bkg_norm5.000000 +/- 0.000010Hz
\n", "
" ], "text/plain": [ " result unit\n", "parameter \n", "source.spectrum.main.Band.K (3.08 -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.76 +/- 0.05) x 10^2 keV\n", "source.spectrum.main.Band.beta -6.8 +/- 1.2 \n", "bkg_norm 5.000000 +/- 0.000010 Hz" ] }, "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", "\n", "\n", "\n", "\n", "\n", "
1.000.97-0.370.190.00
0.971.00-0.160.170.00
-0.37-0.161.00-0.17-0.00
0.190.17-0.171.000.00
0.000.00-0.000.001.00
" ], "text/plain": [ " 1.00 0.97 -0.37 0.19 0.00\n", " 0.97 1.00 -0.16 0.17 0.00\n", "-0.37 -0.16 1.00 -0.17 -0.00\n", " 0.19 0.17 -0.17 1.00 0.00\n", " 0.00 0.00 -0.00 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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
-log(likelihood)
cosi42873.90843683667
total42873.90843683667
\n", "
" ], "text/plain": [ " -log(likelihood)\n", "cosi 42873.90843683667\n", "total 42873.90843683667" ] }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
statistical measures
AIC85757.81709069194
BIC85810.46634249632
\n", "
" ], "text/plain": [ " statistical measures\n", "AIC 85757.81709069194\n", "BIC 85810.46634249632" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 24min 47s, sys: 1.35 s, total: 24min 48s\n", "Wall time: 1min 7s\n" ] } ], "source": [ "%%time\n", "\n", "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": "bcdff7dc", "metadata": {}, "source": [ "## Error propagation and plotting" ] }, { "cell_type": "markdown", "id": "b52939bb", "metadata": {}, "source": [ "Define Band function spectrum injected into MEGAlib" ] }, { "cell_type": "code", "execution_count": 16, "id": "bcabdfd4", "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": "4bf3adae", "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": 17, "id": "de3ccfc2", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
resultunit
parameter
source.spectrum.main.Band.K(3.08 -0.20 +0.21) x 10^-21 / (keV s cm2)
source.spectrum.main.Band.alpha(-2.8 +/- 0.5) x 10^-1
source.spectrum.main.Band.xp(4.76 +/- 0.05) x 10^2keV
source.spectrum.main.Band.beta-6.8 +/- 1.2
bkg_norm5.000000 +/- 0.000010Hz
\n", "
" ], "text/plain": [ " result unit\n", "parameter \n", "source.spectrum.main.Band.K (3.08 -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.76 +/- 0.05) x 10^2 keV\n", "source.spectrum.main.Band.beta -6.8 +/- 1.2 \n", "bkg_norm 5.000000 +/- 0.000010 Hz" ] }, "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", "\n", "\n", "\n", "\n", "\n", "
1.000.97-0.370.190.00
0.971.00-0.160.170.00
-0.37-0.161.00-0.17-0.00
0.190.17-0.171.000.00
0.000.00-0.000.001.00
" ], "text/plain": [ " 1.00 0.97 -0.37 0.19 0.00\n", " 0.97 1.00 -0.16 0.17 0.00\n", "-0.37 -0.16 1.00 -0.17 -0.00\n", " 0.19 0.17 -0.17 1.00 0.00\n", " 0.00 0.00 -0.00 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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
-log(likelihood)
cosi42873.90843683667
total42873.90843683667
\n", "
" ], "text/plain": [ " -log(likelihood)\n", "cosi 42873.90843683667\n", "total 42873.90843683667" ] }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
statistical measures
AIC85757.81709069194
BIC85810.46634249632
\n", "
" ], "text/plain": [ " statistical measures\n", "AIC 85757.81709069194\n", "BIC 85810.46634249632" ] }, "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.03075834274428146\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.2772934236796841\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: 475.55032499581745\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.787918153546224\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": "a1355b6e", "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": 18, "id": "9cbe7c20", "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 = response.expectation()" ] }, { "cell_type": "markdown", "id": "184bcd78", "metadata": {}, "source": [ "Plot the fitted and injected spectra" ] }, { "cell_type": "code", "execution_count": 19, "id": "bc6b8ced", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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", "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": "code", "execution_count": 20, "id": "e748b53b", "metadata": {}, "outputs": [], "source": [ "def compute_errors(counts):\n", " gaussian_error = np.zeros(len(counts))\n", " poisson_error = np.zeros((2, len(counts)))\n", "\n", " hi_mask = (counts > 5)\n", " gaussian_error[hi_mask] = np.sqrt(counts[hi_mask])\n", " poisson_error[:,~hi_mask] = poisson_conf_interval(counts[~hi_mask], interval=\"frequentist-confidence\", sigma=1)\n", "\n", " return gaussian_error, poisson_error" ] }, { "cell_type": "markdown", "id": "8984de35", "metadata": {}, "source": [ "Plot the fitted spectrum convolved with the response, as well as the simulated source counts" ] }, { "cell_type": "code", "execution_count": 21, "id": "fea4749b", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAG+CAYAAACOFDByAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAd3lJREFUeJzt3Xlc1VX+x/EXIjuICAgIigqI4JqkrW5JrmWL2VRWWqmlprZNpb+a7JeVrVZO2ViW1VRqOZaVWzSa5dRUouPCIiASKCAgIPvm9/eHP++EuCDe65eL7+fj0cPu9557vm+uXPlwzvmer4NhGAYiIiIiclqtzA4gIiIiYg9UNImIiIg0goomERERkUZQ0SQiIiLSCCqaRERERBpBRZOIiIhII6hoEhEREWkEFU0iIiIijaCi6SR2797N4MGD+eCDD8yOIiIiIs2EiqYTHD16lL/+9a90797d7CgiIiLSjKhoOsFXX31FVFQUoaGhZ/3ayspKkpOTqaystEEyERERMZPdFk3l5eW89957PPLII4wZM4ZBgwaxbt26k7atrq5m8eLF3HDDDcTGxnLvvffy66+/NmhXXFzMZ599xt13392kTBkZGUyZMoWMjIwmvV5ERESaL7stmoqLi1m2bBkZGRmEh4eftu3zzz/PypUrufrqq5k1axatWrXi0UcfZefOnfXavfPOO4wfPx4vLy9bRhcRERE7ZLdFk6+vL6tXr+azzz5j2rRpp2yXkJDAd999x9SpU5k+fTpjx47ltddeIzAwkMWLF1va7d27l6SkJK655przEV9ERETsTGuzAzSVs7Mzvr6+Z2z3/fff4+joyNixYy3HXFxcGDNmDEuWLCE3N5eAgAB27NhBZmYm48aNA6C0tBRHR0cOHjzInDlzbPZ1iIiIiH2w26KpsVJSUggJCcHDw6Pe8aioKABSU1MJCAhg7NixDBs2zPL8G2+8QVBQEBMmTDiveUVERKR5avFFU0FBwUlHpI4fy8/PB8DV1RVXV1fL8y4uLri5uZ12fVN+fj4FBQWWx1oALiJNUVdXR01NjdkxRFo8JycnHB0dm/z6Fl80VVVV4eTk1OC4s7Oz5fmTmTt37hn7XrNmDcuWLTunfCJyYSstLSUrKwvDMMyOItLiOTg4EBISgqenZ5Ne3+KLJhcXl5P+BlddXW15vqnGjh3LFVdcYXmckZHB/Pnzm9yfiFxY6urqyMrKwt3dHX9/fxwcHMyOJNJiGYZBXl4eWVlZRERENGnEqcUXTb6+vuTl5TU4fnxazc/Pr8l9+/n54efnR1xcHHFxcZSWlja5LxG58NTU1GAYBv7+/ri5uZkdR6TF8/f3Z//+/dTU1DSpaLLbLQcaKzw8nKysLMrKyuodT0hIsDx/rmJjY1mwYAEzZ848575E5MKjESaR8+NcP2stvmgaMmQIdXV1rFmzxnKsurqatWvXEh0dTUBAgInpRESal86dOxMZGUnfvn2Jioritttua/BL59lYtmwZSUlJp3z+559/plevXlx00UVs2LCB0aNHk5yc3KjXNgfz5s3jgQcesGqfF198MZs3b27Saw8ePMjAgQMtj+fNm1fv1l6TJk3itddeO8eEFy67np5btWoVpaWllqm2rVu3cujQIQDGjRuHp6cn0dHRDB06lCVLllBUVERwcDDr168nJyeHxx57zCo5ND0nIi3JihUr6Nu3L0ePHuXaa69l2bJlzJgxo0l9LVu2jLZt257yJugffPABt912m2U/vBEjRjT6tdJQhw4d+OGHHyyPn376aR544IF6V4c3RW1tLa1b23XJYBV2PdK0YsUKli5dyhdffAHAli1bWLp0KUuXLqWkpMTSbu7cuYwfP54NGzbwxhtvUFtbywsvvEDfvn2tkkPTcyLSElVXV1NeXo6Pj4/l2Msvv8yAAQPo168fI0eOtGy18tVXX9G7d2/69u1Lz549+fLLL3n33Xf57bffePDBB+nbty9r166t1/+CBQtYsWIFf/3rX+nbty9FRUV07tyZHTt2nPG1AImJiYwYMYLevXvTu3dv3n77beDY/nuxsbGWPMd/RsCx6ZnnnnuOAQMG0KVLF95//30APv7443p3hDAMg65du/Kf//wHgJdeeokePXrQq1cvJkyYQHFxcYM83bp147fffrM8XrZsGTfccAMAOTk53HzzzQwYMIBevXrxxBNPWNr961//srxvd911F7W1tSf9+7jtttv45JNPAHjrrbdwdna2jAJeddVVbNmyhf3799O2bVsA7rvvPgAGDhxI3759LYMKiYmJDBs2jG7dunHjjTdaLow6kYODA0899RT9+/dnzpw5lJSUMGXKFAYMGEDv3r2ZOnWq5bXz588nKiqKvn370rdvX8v3hYODA0888QQXXXQR3bp1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DBo0iIcffviMbf/3f/+XQYMG8e233wIwcuRIAgICWLx4sU0zitir1mYHEBH7FRwczNVXX33S5zw9Pc9zmuZr5cqVHDlyhFtvvdXm57r44osJCAhg27Zt5ObmEhAQcNJ2paWl/PDDD3h6ejJo0CAAWrduzc0338zrr7/Orl276NWrl83zitgTFU0i0mTBwcHcfffdZsdo1mpra/n666/p1asXwcHBNj9fq1atGDVqFMuWLWP9+vVMnDjxpO3i4uKoqqpi9OjRuLi4WI4PGzaMv/71r3z55ZcqmkROoOk5ETkvBg0axKxZszh8+DDPPvss1157LbGxsdx3331s3779pK8pLy/nvffe48477yQ2NpbRo0fz8MMPs3PnzgZtZ82axaBBg6iqquKdd97hlltuYejQobz33nuWNt9//z1TpkwhNjaW6667jhdffJGSkhJuvvnmetOJzzzzDIMGDSIhIeGkuZYuXcqgQYOIi4s749f9yy+/UFBQwJAhQ87Y9rhDhw4xceJEYmNj2bx5s+V4YWEhixYt4tZbb2XYsGFce+21PPHEE+zbt6/e60ePHo2DgwPr1q3DMIyTnmPt2rUAjBkzpt7xtm3bctFFF7F582bKy8sbnVnkQqCiSUTOm9LSUmbMmMH+/fsZPnw4gwYNIjk5mUceeaTBD/4jR44wbdo0li1bhpeXF9dddx2DBg1i7969zJ49mx9++OGk53jyySdZv349F110ETfddJNlDdE333zDk08+SVZWFiNGjGDkyJHs2bOHhx56iNra2np9jB071vKaE9XV1bF27Vq8vb0t01qns23bNgB69Ohx5jcI2L9/P9OnT+fQoUO89NJLlmLrwIEDTJ48mc8++4wOHTpw4403cumll/LLL78wbdq0egVeYGAgMTExHDx48KQF6b59+0hKSiIiIoJu3bo1eL5Hjx5UV1eze/fuRmUWuVBoek5EmuzAgQP1RnL+qEePHlxyySX1jqWmpnL99dfzwAMP0KrVsd/Z+vXrx4svvsg//vEPHnnkEUvb1157jfT0dB599FGuueYay/HCwkKmTJnCSy+9xIABA+pNLQEUFBTw/vvv06ZNG8uxkpIS3njjDdzc3FiyZAkdO3YEYMqUKTzyyCMkJycTGBhoad+nTx86d+7Md999x/3334+bm5vluV9++YW8vDzGjx+Ps7PzGd+jXbt20apVK8LDw8/Yds+ePTz22GO0bt2aRYsW1XvNs88+y+HDh3n55ZcZMGCA5fidd97JlClTePHFF1m2bJnl+JgxY/jtt99Yu3Yt/fr1q3eeU40yHRcZGQnA7t27651L5EKnkSYRabIDBw6wbNmyk/7373//u0F7Nzc37rvvPkvBBMeu2HJ0dCQpKclyrKioiE2bNtGvX796BROAj48Pt956K0VFRZZRnD+666676hVMAD/++CMVFRWMHj3aUjDBsYXPkydPPunXNnbsWMrLy/nuu+/qHf/6668BuPbaa0/1ttSTl5eHp6fnGQusn376iQcffBAvLy/eeuutegXT3r172b17NyNGjGhQxHTs2JFrrrmGffv21RutGzhwIN7e3nz//feUlZVZjtfW1rJx40acnZ1PuYi/Xbt2wLFpQhH5L400iUiTDRgwgJdffrnR7UNCQnB3d693rHXr1rRr147S0lLLsaSkJOrq6qipqTnpSFZWVhYAGRkZXH755fWei4qKatD++L5DvXv3bvBcdHQ0jo6ODY6PGDGCv/3tb3z99deWwu3w4cP861//omfPnnTu3PkMX+0xR44cwd/f/7RtNm3axK+//kpYWBgvvfQSPj4+9Z4/PvVWWFh40vfj999/t/zZtWtXAEtR9PnnnxMXF8d1110HwNatWykqKiI2NhYvL6+T5jl+vLi4uFFfo8iFQkWTiJw3Hh4eJz3u6OjI0aNHLY+PHDkCHJva2rVr1yn7q6ysbHDs+CjJHx0faTmxGIFjV5t5e3s3OO7l5cXQoUNZv349+/bto2vXrqxbt466urpGjzIBuLi4UF1dfdo2e/bsoa6ujt69e5804/H346effuKnn346ZT8VFRX1Ho8ZM4bPP/+ctWvXWoqmM03NAZa8rq6up80tcqFR0SQizc7x4upPf/oTM2bMOKvXOjg4nLK/wsLCBs8dPXqU4uLik44GXXfddaxfv56vvvqK2bNn88033+Dh4cHQoUMbncfb25u8vLzTtpk6dSo//vgjn3/+OY6Ojg2+5uP5Z8+ezbhx4xp97rCwMLp3705iYiLp6el4eXnxyy+/EBQU1GCd0x8dL9Latm3b6HOJXAi0pklEmp3u3bvj4ODAnj17rNJfWFgYwElHrRITE6mrqzvp63r06EFYWBjffvstv/zyC1lZWVx99dVnNQLTtWtXqquryc3NPWUbZ2dnnn32WS677DJWrFjBX//613rPH59ybMr7cXxE6ZtvvmHDhg3U1dVZtiQ4lePTfcen+kTkGBVNItLs+Pr6MnToUHbv3s2nn3560r2GEhISTjo9dzJXXnklbm5ufPPNNxw4cMByvLa2lqVLl572tWPHjuXIkSMsWLAAoMHC9DPp27evJe/pODs7M3/+fC6//HJWrlzJokWLLM9FR0cTHR3Nd99912BhOhwbLduxY8dJ+42NjcXV1ZWNGzeydu1aWrVqxciRI0+bJTExsV52ETlG03Mi0mSn23IAYMKECQ22BGishx56iMzMTBYvXsyGDRvo0aMHnp6e5OXlkZSURFZWFqtXr27UqI+Xlxf3338/L730ElOmTOGqq67Cw8ODn3/+GWdnZ/z8/E458jJ8+HDefvtt8vPziYyMPOm+Rqdz5ZVX8uabb/Lbb7+dcVrPycmJZ555hr/85S989tlnGIbBrFmzAPjLX/7CAw88wNNPP83nn39OREQELi4uHDp0iN27d1NcXHzSzTY9PDwYPHgwGzZsoKioiEsuueSUt1YBMAyDbdu2ERoaWu9KQxFR0SQi5+D4lgOnMn78+CYXTW3atOGtt97iH//4B//85z+Ji4vj6NGjtGvXjvDwcCZOnHjSBdyncu211+Ll5cVHH33E+vXr8fDw4IorruC+++5j/Pjxp7zFiYeHBwMHDmTjxo1nPcoEEBQURP/+/dm8eTOzZ88+49YDxwunp556is8//xzDMJg9ezYdOnRg6dKlrFixgh9++IF169bRqlUrfH196dOnz2l3HB8zZgwbNmwAju0Wfjr/+c9/yM3NZebMmWf9tYq0dA7GqfbYFxG5AGRlZXHbbbcxdOhQnn766ZO2mThxIjk5OfzjH/845RWAp7Nt2zYefPBBnnjiCYYPH36ukW3qmWee4d///jeffvrpKbckELlQaU2TiFwQSkpKGlz6X1VVZVl0PXDgwJO+7ueffyY9PZ3Y2NgmFUwAMTExXHLJJXz44Yf1tlZobjIzM/nnP//JnXfeqYJJ5CQ0PSciF4QdO3bwwgsv0L9/f9q3b09xcTHx8fHk5OTQr18/rrrqqnrtv/jiCw4dOsTXX3+Ns7MzEyZMOKfzz5o1i2+//Za8vLzTriky06FDh5g0aRI33HCD2VFEmiVNz4nIBSEzM5OlS5eye/duioqKAAgODuaqq67illtuabD26uabbyYvL4+OHTty3333Ndh5XEQuPCqaRERERBpBa5pEREREGkFFk4iIiEgjqGgSERERaQQVTSIiIiKNoKJJREREpBFUNImIiIg0goomERERkUZQ0SQiIiLSCCqaRERERBrh/wCSS9QD1u1kKAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "em_inj = grb.binned_data.project('Em').todense().contents\n", "em_fit = expectation.project('Em').todense().contents\n", "\n", "fit_gaussian_error, fit_poisson_error = compute_errors(em_fit)\n", "inj_gaussian_error, inj_poisson_error = compute_errors(em_inj)\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=fit_poisson_error, color='black', linewidth=0, elinewidth=1)\n", "ax.errorbar(binned_energy, grb.binned_data.project('Em').todense().contents, yerr=fit_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": "eaa331ed", "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": 22, "id": "bace668f", "metadata": {}, "outputs": [ { "data": { "image/png": "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np6eADz//PPk5eXx/PPP07Wr/peJtIamfgdLSkrYtWsXl112GdbW1uzcuZM9e/awcOFCI2KLdCpN/R5OnTqV8ePHm57/5z//iZeXF7Nnz261LPrb1SB5eXkNVs+njp26gyUrK4svv/wSa2vrehX0c889x+DBgy9MWJFOqKnfQQsLC7788ktWr15NXV0d3t7eLF++nODg4AuaV6Qzaur30NbWFltbW9PzNjY22NnZtep8IhVEBqmsrMTKyuqM46du7a2srASgZ8+efP/99xc0m4g5aOp30MHBgZdeeumCZhMxF039Hv7RsmXLWj2L5hAZxMbGhurq6jOOV1VVmZ4Xkbaj76CI8drT91AFkUHc3NzIy8s74/ipY+7u7hc6kohZ0XdQxHjt6XuogsggQUFBpKenU1paWu94bGys6XkRaTv6DooYrz19D1UQGWTs2LHU1tby+eefm45VVVWxefNmwsLCTHeYiUjb0HdQxHjt6XuoSdVt4OOPP6akpMQ05Pfjjz9y7NgxAGbMmIGjoyNhYWGMGzeOtWvXUlBQgLe3N1u2bCErK4ulS5caGV+kw9N3UMR4He17qN3u28DMmTPJyspq8LmNGzfi5eUFnJw9f2r/lpKSEgICApg/fz6XXHLJhYwr0unoOyhivI72PVRBJCIiImZPc4hERETE7KkgEhEREbOngkhERETMngoiERERMXsqiERERMTsqSASERERs6eCSERERMyeCiIRERExeyqIRERExOypIBIRERGzp4JIROQ8bNq0iSuuuILMzEzTsa+//prRo0fz9ddfG5jsd19++SVjx47l4MGDRkcRabdUEImISWZmJqNHj270v5kzZxods90oLi7m3XffZfLkyaaNKtvK7t27GT16NA888MA52/7tb39j9OjR/Pe//wVg4sSJeHp68tprr7VpRpGOrKvRAUSk/fH29ubKK69s8DlHR8cLnKb92rRpE0VFRfzpT39q83NddNFFeHp6EhUVRXZ2Np6eng22KykpYefOnTg6OjJ69GgAunbtysyZM3nppZfYv38/AwcObPO8Ih2NCiIROYO3tze33Xab0THatZqaGr788ksGDhyIt7d3m5+vS5cuTJo0ifXr17Nlyxbmzp3bYLvIyEgqKyuZPHkyNjY2puPjx4/n5Zdf5rPPPlNBJNIAXTITkfMyevRo7r33Xo4fP87TTz/NNddcQ0REBIsWLWLPnj0NvqasrIy3336bW265hYiICCZPnswDDzzAvn37zmh77733Mnr0aCorK3nzzTeZNWsW48aN4+233za1+e6771iwYAERERFMmzaN5557juLiYmbOnFnvEt+TTz7J6NGjiY2NbTDXunXrGD16NJGRked837t37yYvL4+xY8ees+0px44dY+7cuURERLBjxw7T8fz8fNasWcOf/vQnxo8fzzXXXMNjjz3GoUOH6r1+8uTJWFhY8PXXX1NXV9fgOTZv3gzAlClT6h13cXFh6NCh7Nixg7KysiZnFjEXKohE5LyVlJRw1113cfjwYSZMmMDo0aNJSEjgwQcfPOMv9aKiIu68807Wr1+Pk5MT06ZNY/To0SQmJrJkyRJ27tzZ4DmWL1/Oli1bGDp0KNdff71pzs5XX33F8uXLSU9P56qrrmLixInExMTw5z//mZqamnp9TJ061fSaP6qtrWXz5s04OzubLjU1JioqCoD+/fuf+wMCDh8+zOLFizl27BirVq0yFVIZGRnMnz+fjz76iF69ejF9+nSGDx/O7t27ufPOO+sVbz179iQ8PJyjR482WGweOnSI+Ph4goOD6du37xnP9+/fn6qqKg4cONCkzCLmRJfMROQMGRkZ9UZgTte/f38uvfTSeseSk5O59tprue++++jS5eS/s4YNG8Zzzz3Hf/7zHx588EFT2xdffJGUlBQefvhhrr76atPx/Px8FixYwKpVq7jkkkvqXe4ByMvL45133qFbt26mY8XFxfzzn//Ezs6OtWvX0rt3bwAWLFjAgw8+SEJCAj179jS1Hzx4MH5+fmzbto27774bOzs703O7d+8mJyeHG264AWtr63N+Rvv376dLly4EBQWds21MTAxLly6la9eurFmzpt5rnn76aY4fP87zzz/PJZdcYjp+yy23sGDBAp577jnWr19vOj5lyhR+/fVXNm/ezLBhw+qd52yjQ6eEhIQAcODAgXrnEhGNEIlIAzIyMli/fn2D//38889ntLezs2PRokWmYghO3tlkaWlJfHy86VhBQQHbt29n2LBh9YohAFdXV/70pz9RUFBgGn053a233lqvGAL44YcfKC8vZ/LkyaZiCE5OIp4/f36D723q1KmUlZWxbdu2ese//PJLAK655pqzfSz15OTk4OjoeM7iadeuXdx///04OTnx6quv1iuGEhMTOXDgAFddddUZBUrv3r25+uqrOXToUL1RtlGjRuHs7Mx3331HaWmp6XhNTQ3ffPMN1tbWZ50Q3717d+DkpTsRqU8jRCJyhksuuYTnn3++ye19fHywt7evd6xr1650796dkpIS07H4+Hhqa2uprq5ucAQqPT0dgNTUVEaOHFnvudDQ0DPan1pXZ9CgQWc8FxYWhqWl5RnHr7rqKt544w2+/PJLU1F2/Phx/ve//zFgwAD8/PzO8W5PKioqwsPDo9E227dv55dffiEwMJBVq1bh6upa7/lTl8Py8/Mb/DyOHDli+jUgIADAVPD8+9//JjIykmnTpgHw448/UlBQQEREBE5OTg3mOXW8sLCwSe9RxJyoIBKR8+bg4NDgcUtLS06cOGF6XFRUBJy83LR///6z9ldRUXHGsVOjG6c7NULyx0IDTt6V5ezsfMZxJycnxo0bx5YtWzh06BABAQF8/fXX1NbWNnl0CMDGxoaqqqpG28TExFBbW8ugQYMazHjq89i1axe7du06az/l5eX1Hk+ZMoV///vfbN682VQQnetyGWDKa2tr22huEXOkgkhELphThdONN97IXXfd1azXWlhYnLW//Pz8M547ceIEhYWFDY7iTJs2jS1btvDFF1+wZMkSvvrqKxwcHBg3blyT8zg7O5OTk9Nom4ULF/LDDz/w73//G0tLyzPe86n8S5YsYcaMGU0+d2BgIP369SMuLo6UlBScnJzYvXs3Xl5eZ8wrOt2pAszFxaXJ5xIxF5pDJCIXTL9+/bCwsCAmJqZV+gsMDARocLQpLi6O2traBl/Xv39/AgMD+e9//8vu3btJT0/nyiuvbNbISUBAAFVVVWRnZ5+1jbW1NU8//TQjRoxg48aNvPzyy/WeP3UZsCWfx6mRoK+++oqtW7dSW1trui3/bE5dgjt1+U1EfqeCSEQuGDc3N8aNG8eBAwf417/+1eBaOrGxsQ1eMmvI5Zdfjp2dHV999RUZGRmm4zU1Naxbt67R106dOpWioiJWrlwJcMYk73MZMmSIKW9jrK2teeqppxg5ciSbNm1izZo1pufCwsIICwtj27ZtZ0zyhpOjXHv37m2w34iICGxtbfnmm2/YvHkzXbp0YeLEiY1miYuLq5ddRH6nS2YicobGbrsHmD179hm3xTfVn//8Z9LS0njttdfYunUr/fv3x9HRkZycHOLj40lPT+eTTz5p0miNk5MTd999N6tWrWLBggVcccUVODg48NNPP2FtbY27u/tZR0wmTJjA66+/Tm5uLiEhIQ2u29OYyy+/nFdeeYVff/31nJfarKysePLJJ/nrX//KRx99RF1dHffeey8Af/3rX7nvvvt44okn+Pe//01wcDA2NjYcO3aMAwcOUFhY2OBCkQ4ODowZM4atW7dSUFDApZdeetbtPADq6uqIiorC19e33h15InKSCiIROcOp2+7P5oYbbmhxQdStWzdeffVV/vOf//Dtt98SGRnJiRMn6N69O0FBQcydO7fBydBnc8011+Dk5MR7773Hli1bcHBw4LLLLmPRokXccMMNZ91Ww8HBgVGjRvHNN980e3QIwMvLi4svvpgdO3awZMmSc95+f6ooevzxx/n3v/9NXV0dS5YsoVevXqxbt46NGzeyc+dOvv76a7p06YKbmxuDBw9udCXsKVOmsHXrVuDkKtaN+e2338jOzuaee+5p9nsVMQcWdWdb/11EpANLT0/npptuYty4cTzxxBMNtpk7dy5ZWVn85z//Oeudco2Jiori/vvv57HHHmPChAnnG7lNPfnkk/z888/861//Outt+SLmTHOIRKRDKy4uPuP298rKStME5lGjRjX4up9++omUlBQiIiJaVAwBhIeHc+mll/Luu+/WW16gvUlLS+Pbb7/llltuUTEkcha6ZCYiHdrevXt59tlnufjii+nRoweFhYVER0eTlZXFsGHDuOKKK+q1//TTTzl27Bhffvkl1tbWzJ49+7zOf++99/Lf//6XnJycRufwGOnYsWPMmzeP6667zugoIu2WLpmJSIeWlpbGunXrOHDgAAUFBQB4e3tzxRVXMGvWrDPmOs2cOZOcnBx69+7NokWLzlgRW0TMkwoiERERMXuaQyQiIiJmTwWRiIiImD0VRCIiImL2VBCJiIiI2VNBJCIiImZPBZGIiIiYPRVEIiIiYvZUEImIiIjZ+3+QF6JSCwgaZAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "expectation_bkg = bkg_model.expectation(copy = True)\n", "\n", "fit_bkg_gaussian_error, fit_bkg_poisson_error = compute_errors(expectation.project('Em').todense().contents + expectation_bkg.project('Em').todense().contents)\n", "inj_bkg_gaussian_error, inj_bkg_poisson_error = compute_errors(data.data.project('Em').todense().contents)\n", "\n", "fig,ax = plt.subplots()\n", "ax.stairs(expectation.project('Em').todense().contents + expectation_bkg.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+expectation_bkg.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+expectation_bkg.project('Em').todense().contents, yerr=fit_bkg_gaussian_error, color='purple', linewidth=0, elinewidth=1)\n", "ax.stairs(data.data.project('Em').todense().contents, binned_energy_edges, color = 'black', ls = \":\", label = \"Total counts\")\n", "ax.errorbar(binned_energy, data.data.project('Em').todense().contents, yerr=inj_bkg_poisson_error, color='black', linewidth=0, elinewidth=1)\n", "ax.errorbar(binned_energy, data.data.project('Em').todense().contents, yerr=inj_bkg_gaussian_error, color='black', linewidth=0, elinewidth=1)\n", "\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()\n", "\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "cosi_env", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.19" } }, "nbformat": 4, "nbformat_minor": 5 }