Commit 6e29bde1142081de5a4c36caf2d7caea8f0da381
Origin branch devel changed in meantime. Updated content.
Merge branch 'devel' of https://cta-gitlab.irap.omp.eu/ctools/ctools into 2284-csphagen-load-off-regions
Showing
37 changed files
with
2271 additions
and
896 deletions
doc/source/conf.py
| ... | ... | @@ -37,7 +37,7 @@ except: |
| 37 | 37 | |
| 38 | 38 | try: |
| 39 | 39 | import nbsphinx |
| 40 | - extensions += ['nbsphinx'] | |
| 40 | + extensions += ['nbsphinx','IPython.sphinxext.ipython_console_highlighting'] | |
| 41 | 41 | except: |
| 42 | 42 | print('WARNING: Python package `nbsphinx` not found.\n' |
| 43 | 43 | 'WARNING: Please install it to get fully-functional Sphinx docs.\n' |
| ... | ... | @@ -61,7 +61,7 @@ templates_path = ['_templates'] |
| 61 | 61 | source_suffix = '.rst' |
| 62 | 62 | |
| 63 | 63 | # The encoding of source files. |
| 64 | -#source_encoding = 'utf-8-sig' | |
| 64 | +source_encoding = 'utf-8' | |
| 65 | 65 | |
| 66 | 66 | # The master toctree document. |
| 67 | 67 | master_doc = 'contents' | ... | ... |
doc/source/users/index.rst
doc/source/users/notebooks.rst
| 1 | -.. _notebooks: | |
| 1 | +.. _sec_notebooks: | |
| 2 | 2 | |
| 3 | -Jupyter notebooks: | |
| 3 | +Jupyter notebooks | |
| 4 | +================= | |
| 4 | 5 | |
| 5 | - * :download:`ctools from Python <tutorials/quickstart/ctools-from-python.ipynb>` | |
| 6 | +Some of the tutorials are provided as Jupyter notebooks. If you see | |
| 7 | +this icon | |
| 8 | + | |
| 9 | +.. figure:: ../_static/download-notebook.jpg | |
| 10 | + :width: 100px | |
| 11 | + :align: center | |
| 12 | + | |
| 13 | +on top of a page, you can click on it to download the notebook and run | |
| 14 | +it on your computer. All notebooks are also available for download from | |
| 15 | +this page. | |
| 16 | + | |
| 17 | +* :download:`Using ctools from Python <tutorials/quickstart/ctools-from-python.ipynb>` | |
| 18 | +* :download:`Combining observations <tutorials/beyond/combining-observations.ipynb>` | |
| 19 | +* :download:`Performing a stacked analysis <tutorials/beyond/stacked-analysis.ipynb>` | |
| 20 | +* :download:`Advanced model manipulation and fitting in Python <tutorials/beyond/advanced-python-fitting.ipynb>` | ... | ... |
doc/source/users/reference_manual/index.rst
| ... | ... | @@ -4,10 +4,12 @@ Reference Manual |
| 4 | 4 | ================ |
| 5 | 5 | |
| 6 | 6 | This manual provides reference information for all ctools and csripts. |
| 7 | -General information on ctools usage can be found `here <usage.html>`__. | |
| 7 | +General information on ctools usage can be found `here | |
| 8 | +<../user_manual/introduction.html>`_. The description of user parameters in the reference | |
| 9 | +manual is documented `here <usage.html>`__. | |
| 8 | 10 | |
| 9 | -Below you find links to the command line reference for the tools and scripts | |
| 10 | -that are available. | |
| 11 | + | |
| 12 | +Below you find links to the command line reference for all available tools and scripts. | |
| 11 | 13 | |
| 12 | 14 | ctools |
| 13 | 15 | ------ | ... | ... |
doc/source/users/reference_manual/usage.rst
| 1 | -Basic ctools parameter usage | |
| 2 | -============================ | |
| 1 | +Description of ctools parameters in the reference manual | |
| 2 | +===================================== | |
| 3 | + | |
| 4 | +For a generic introduction to ctools and user parameters see `here <../user_manual/introduction.html>`__. | |
| 3 | 5 | |
| 4 | 6 | Automatic parameters |
| 5 | 7 | -------------------- |
| ... | ... | @@ -36,7 +38,7 @@ Examples |
| 36 | 38 | |
| 37 | 39 | .. note:: |
| 38 | 40 | |
| 39 | - To set hidden parameters at runtime, specify them explicitly at | |
| 41 | + You can set hidden parameters at runtime by specifying them explicitly on | |
| 40 | 42 | the command line; for example: |
| 41 | 43 | |
| 42 | 44 | ``ctobssim start_time=900`` | ... | ... |
doc/source/users/tips/index.rst
| ... | ... | @@ -54,7 +54,7 @@ the ctools software. Make sure that you read at least this section. |
| 54 | 54 | The Test Statistic value is useful for computing the detection significance |
| 55 | 55 | of a source, but for many sources in your region of interest you may actually |
| 56 | 56 | not be interested in that value. Computation of the Test Statistic value |
| 57 | - takes some extra time, so do not request the computation if you don't reaaly | |
| 57 | + takes some extra time, so do not request the computation if you don't really | |
| 58 | 58 | need it. |
| 59 | 59 | |
| 60 | 60 | ... | ... |
doc/source/users/tutorials/1dc/classical_analysis.rst
| ... | ... | @@ -56,7 +56,7 @@ region. You can do this using the :ref:`ctskymap` tool. |
| 56 | 56 | Output skymap file [skymap.fits] |
| 57 | 57 | |
| 58 | 58 | In the spirit of the classical analysis we have chosen to derive the background |
| 59 | -using the RING method (e.g., Berge et al. 2007 A&A 466 1219B), in which for each | |
| 59 | +using the RING method, in which for each | |
| 60 | 60 | point in the map (trial source position) the background is derived from a ring |
| 61 | 61 | centered at the same position. The RING method is fast and robust against linear |
| 62 | 62 | gradients of the background rates, but requires a model (from the :ref:`instrument response functions <glossary_irf>` |
| ... | ... | @@ -133,22 +133,7 @@ Below you can see the new significance map with the source/exclusion region. |
| 133 | 133 | |
| 134 | 134 | For a classical spectral analysis we need to derive count spectra for the source |
| 135 | 135 | region and for background regions. This is accomplished by the :ref:`csphagen` |
| 136 | -script. This script saves the source (On) and background (Off) count spectra | |
| 137 | -in `OGIP format <https://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/spectra/ogip_92_007/node5.html>`_, | |
| 138 | -along with the relevant information from the :ref:`instrument response functions <glossary_irf>` | |
| 139 | -refashioned according to this format conventions. | |
| 140 | - | |
| 141 | -:ref:`csphagen` calculates the background counts using the REFLECTED algorithm | |
| 142 | -(e.g., Berge et al. 2007 A&A 466 1219B), in which, for each individual | |
| 143 | -observation the background regions have the same shape as the source region, and | |
| 144 | -are rotated around the center of the camera keeping the same offset. As many | |
| 145 | -reflected regions as possible are used, excluding the area of the camera near | |
| 146 | -the source position. Since the background rates are expected to be approximately | |
| 147 | -radially symmetric in camera coordinates, this method minimizes the impact of | |
| 148 | -the background rate modeling from Monte Carlo. An optional exclusion map (in | |
| 149 | -FITS WCS format) can be provided as input through the ``inexclusion`` hidden | |
| 150 | -parameter if other regions of significant gamma-ray emission ought to be | |
| 151 | -excluded from the background computation. | |
| 136 | +script. | |
| 152 | 137 | |
| 153 | 138 | .. code-block:: bash |
| 154 | 139 | |
| ... | ... | @@ -183,33 +168,9 @@ looks like. |
| 183 | 168 | </observation> |
| 184 | 169 | </observation_list> |
| 185 | 170 | |
| 186 | -The observation entails four FITS files. ``onoff_stacked_pha_on.fits`` and | |
| 187 | -``onoff_stacked_pha_off.fits`` contain the On and Off spectra, respectively. | |
| 188 | -These are stored in the SPECTRUM extension of the FITS file, along with ancillary | |
| 189 | -information, notably the scaling factor to be applied to the background spectrum, | |
| 190 | -BACKSCAL. The third extension, EBOUNDS, contains the boundaries of the energy | |
| 191 | -bins, as defined by the binning parameters in input to csphagen. The file | |
| 192 | -``onoff_stacked_arf.fits`` contains the spectral response of the instrument | |
| 193 | -extracted fromt the :ref:`instrument response functions <glossary_irf>`, | |
| 194 | -including effective area for gamma-ray detection and background rates, in the | |
| 195 | -SPECRESP extension. The file ``onoff_stacked_rmf.fits`` contains the remaining | |
| 196 | -part of the instrument response, i.e., an energy redistribution matrix (MATRIX), | |
| 197 | -as well as another instance of the EBOUNDS table. Note that we are performing a | |
| 198 | -1D analysis: the effect of the PSF is already folded into the effective area | |
| 199 | -computation. | |
| 200 | - | |
| 201 | -.. note:: | |
| 202 | - | |
| 203 | - The parameters specified control the energy binning of the count spectra in | |
| 204 | - *reconstructed* energy. For the computation of the instrument response we | |
| 205 | - need a fine binning in *true* energy, which is controlled by the hidden | |
| 206 | - parameters ``etruemin``, ``etruemax``, and ``etruebins``. | |
| 207 | - | |
| 208 | 171 | .. note:: |
| 209 | 172 | |
| 210 | - The first part of the FITS files names (and a full path to the desired | |
| 211 | - location) can be set using the hidden ``prefix`` parameter of | |
| 212 | - :ref:`csphagen`. If you decide not to stack multiple observations the string | |
| 173 | + If you decide not to stack multiple observations the string | |
| 213 | 174 | ``stacked`` with be replaced in the file names by the observation id for |
| 214 | 175 | each of the original observations. |
| 215 | 176 | |
| ... | ... | @@ -226,12 +187,6 @@ the On and Off regions for a few observations (extracted using the |
| 226 | 187 | |
| 227 | 188 | *Sky map of the event counts in a larger region around Cas A (not background subtracted). The green crosses show the pointing directions, the magenta circles the Off regions, and the white circle the On region.* |
| 228 | 189 | |
| 229 | -.. note:: | |
| 230 | - | |
| 231 | - If you wish to limit the number of observations considered to those pointed | |
| 232 | - closer to the source, you can do this either at the observation selection | |
| 233 | - level (see :ref:`csobsselect`), or directly in :ref:`csphagen` via the | |
| 234 | - hidden ``maxoffset`` parameter. | |
| 235 | 190 | |
| 236 | 191 | Next we need a model to be fit to the observations. It must contain a model for the |
| 237 | 192 | source, and, optionally, a model for the background. Here is what such a |
| ... | ... | @@ -300,32 +255,9 @@ The output file ``CasA_results.xml`` contains the best fit parameter values. |
| 300 | 255 | Check the :ref:`ctlike` log file (by default ``ctlike.log``) to learn |
| 301 | 256 | about the fit convergence and investigate any issues. |
| 302 | 257 | |
| 303 | -:ref:`ctlike` has a hidden parameter called ``statistic`` that sets the | |
| 304 | -statistic used for the fit. | |
| 305 | - | |
| 306 | -- The DEFAULT for OnOff osbervations is CSTAT, i.e., Poisson signal and Poisson | |
| 307 | - background. A spectral model for the signal and a spectral model for the | |
| 308 | - background are jointly fit to the On and Off spectra. | |
| 309 | -- WSTAT is a special case of CSTAT, Poisson signal with Poisson background, in | |
| 310 | - which you do not need to have a spectral model for the background and | |
| 311 | - free parameters associated with it. The number of background counts in each | |
| 312 | - energy bin is treated as a nuisance parameter, derived from the On and Off | |
| 313 | - counts by profiling the likelihood function. In this case the only assumption | |
| 314 | - is that the background rate spectrum is the same in the On and Off regions. | |
| 315 | - | |
| 316 | -.. warning:: | |
| 317 | - Beware that the profiling may yield unphysical results (negative background | |
| 318 | - counts) if the number of events in the Off spectra are zero. In this case a | |
| 319 | - null number of expected background events must be enforced, | |
| 320 | - which can result in a bias on the source's parameters. You can address this | |
| 321 | - issue by stacking multiple observations, using a coarser energy binning, or | |
| 322 | - using CSTAT instead (if you have a spectral model for the background that is | |
| 323 | - good enough). See the `XSPEC manual Appendix B <https://heasarc.gsfc.nasa.gov/xanadu/xspec/manual/XSappendixStatistics.html>`_ | |
| 324 | - for more information. | |
| 325 | - | |
| 326 | -- You can also use CHI2, a classical chi square, i.e., a Gaussian signal and | |
| 327 | - Gaussian background. As for CSTAT, a spectral model for the signal and a | |
| 328 | - spectral model for the background are jointly fit to the On and Off spectra. | |
| 258 | +The hidden parameter ``statistic`` in :ref:`ctlike` can be used to | |
| 259 | +set the fit statistic and in particular how the background is treated | |
| 260 | +in the fit. | |
| 329 | 261 | |
| 330 | 262 | The :ref:`ctbutterfly` tool and :ref:`csspec` script can now be used to extract |
| 331 | 263 | the best-fit source spectrum. |
| ... | ... | @@ -360,4 +292,4 @@ matplotlib). |
| 360 | 292 | :width: 400px |
| 361 | 293 | :align: center |
| 362 | 294 | |
| 363 | - *Spectral Energy Distribution of the source: the best-fit function over the whole energy range and its uncertainty range, along with the spectral points in energy bins.* | |
| 364 | 295 | \ No newline at end of file |
| 296 | + *Spectral Energy Distribution of the source: the best-fit function over the whole energy range and its uncertainty range, along with the spectral points in energy bins.* | ... | ... |
doc/source/users/tutorials/beyond/advanced-python-fitting.ipynb
0 → 100644
| 1 | +{ | |
| 2 | + "cells": [ | |
| 3 | + { | |
| 4 | + "cell_type": "markdown", | |
| 5 | + "metadata": {}, | |
| 6 | + "source": [ | |
| 7 | + "# Advanced model manipulation and fitting in Python" | |
| 8 | + ] | |
| 9 | + }, | |
| 10 | + { | |
| 11 | + "cell_type": "raw", | |
| 12 | + "metadata": {}, | |
| 13 | + "source": [ | |
| 14 | + "<div align=\"right\"><a href=\"../../../_downloads/advanced-python-fitting.ipynb\" download=\"advanced-python-fitting.ipynb\"><img src=\"../../../_static/download-notebook.jpg\" alt=\"Download Notebook\" height=\"40\"></a></div>" | |
| 15 | + ] | |
| 16 | + }, | |
| 17 | + { | |
| 18 | + "cell_type": "markdown", | |
| 19 | + "metadata": {}, | |
| 20 | + "source": [ | |
| 21 | + "In this tutorial you will learn to perform some more advanced model manipulation and fitting from Python. You can use these methods in an interactive Python session to explore your dataset and improve the known model of the sky. You can also use them in a Python pipeline to test multiple model hypotheses and select the one that is most appropriate.\n", | |
| 22 | + "\n", | |
| 23 | + "As usual we start by importing the gammalib, ctools, and cscripts Python modules." | |
| 24 | + ] | |
| 25 | + }, | |
| 26 | + { | |
| 27 | + "cell_type": "code", | |
| 28 | + "execution_count": 30, | |
| 29 | + "metadata": { | |
| 30 | + "collapsed": true | |
| 31 | + }, | |
| 32 | + "outputs": [], | |
| 33 | + "source": [ | |
| 34 | + "import gammalib\n", | |
| 35 | + "import ctools\n", | |
| 36 | + "import cscripts" | |
| 37 | + ] | |
| 38 | + }, | |
| 39 | + { | |
| 40 | + "cell_type": "markdown", | |
| 41 | + "metadata": {}, | |
| 42 | + "source": [ | |
| 43 | + "For this tutorial we will also use the matplotlib package for plotting." | |
| 44 | + ] | |
| 45 | + }, | |
| 46 | + { | |
| 47 | + "cell_type": "code", | |
| 48 | + "execution_count": 31, | |
| 49 | + "metadata": { | |
| 50 | + "collapsed": true | |
| 51 | + }, | |
| 52 | + "outputs": [], | |
| 53 | + "source": [ | |
| 54 | + "%matplotlib inline\n", | |
| 55 | + "import matplotlib.pyplot as plt" | |
| 56 | + ] | |
| 57 | + }, | |
| 58 | + { | |
| 59 | + "cell_type": "markdown", | |
| 60 | + "metadata": {}, | |
| 61 | + "source": [ | |
| 62 | + "## Simulated dataset\n", | |
| 63 | + "\n", | |
| 64 | + "For the tutorial we will simulate a small dataset. We start by defining the Instrument Response Function and energy range that we will use all along." | |
| 65 | + ] | |
| 66 | + }, | |
| 67 | + { | |
| 68 | + "cell_type": "code", | |
| 69 | + "execution_count": 32, | |
| 70 | + "metadata": { | |
| 71 | + "collapsed": true | |
| 72 | + }, | |
| 73 | + "outputs": [], | |
| 74 | + "source": [ | |
| 75 | + "caldb = 'prod2'\n", | |
| 76 | + "irf = 'South_0.5h'\n", | |
| 77 | + "emin = 0.1 #TeV\n", | |
| 78 | + "emax = 160. #TeV" | |
| 79 | + ] | |
| 80 | + }, | |
| 81 | + { | |
| 82 | + "cell_type": "markdown", | |
| 83 | + "metadata": {}, | |
| 84 | + "source": [ | |
| 85 | + "Now we proceed to simulate the dataset. It consists of an hour of observations of the Crab nebula region, as usual pointed at a slightly offset position from the target. The input model is different from the one you have been using so far and contains some surprises. Don't look at it until you have completed the exercises at the end of the tutorial." | |
| 86 | + ] | |
| 87 | + }, | |
| 88 | + { | |
| 89 | + "cell_type": "code", | |
| 90 | + "execution_count": 33, | |
| 91 | + "metadata": { | |
| 92 | + "collapsed": true | |
| 93 | + }, | |
| 94 | + "outputs": [], | |
| 95 | + "source": [ | |
| 96 | + "evfile = 'events.fits'\n", | |
| 97 | + "\n", | |
| 98 | + "obssim = ctools.ctobssim()\n", | |
| 99 | + "\n", | |
| 100 | + "obssim['ra'] = 83.63\n", | |
| 101 | + "obssim['dec'] = 22.51\n", | |
| 102 | + "obssim['rad'] = 5.0\n", | |
| 103 | + "obssim['tmin'] = 0\n", | |
| 104 | + "obssim['tmax'] = 3600\n", | |
| 105 | + "obssim['emin'] = emin\n", | |
| 106 | + "obssim['emax'] = emax\n", | |
| 107 | + "obssim['caldb'] = caldb\n", | |
| 108 | + "obssim['irf'] = irf\n", | |
| 109 | + "obssim['inmodel'] = '$CTOOLS/share/models/crab_beyond.xml'\n", | |
| 110 | + "obssim['outevents'] = evfile\n", | |
| 111 | + "\n", | |
| 112 | + "obssim.execute()" | |
| 113 | + ] | |
| 114 | + }, | |
| 115 | + { | |
| 116 | + "cell_type": "markdown", | |
| 117 | + "metadata": {}, | |
| 118 | + "source": [ | |
| 119 | + "We have saved the events on disk in the file `events.fits`. In this way you can easily re-use the code below by substituting `events.fits` with your own event list of observation definition XML file.\n", | |
| 120 | + "\n", | |
| 121 | + "We will peek at the simulated dataset by displaying a skymap." | |
| 122 | + ] | |
| 123 | + }, | |
| 124 | + { | |
| 125 | + "cell_type": "code", | |
| 126 | + "execution_count": 34, | |
| 127 | + "metadata": { | |
| 128 | + "collapsed": true | |
| 129 | + }, | |
| 130 | + "outputs": [], | |
| 131 | + "source": [ | |
| 132 | + "skymap = ctools.ctskymap()\n", | |
| 133 | + "\n", | |
| 134 | + "skymap['inobs'] = evfile\n", | |
| 135 | + "skymap['emin'] = emin\n", | |
| 136 | + "skymap['emax'] = emax\n", | |
| 137 | + "skymap['nxpix'] = 40\n", | |
| 138 | + "skymap['nypix'] = 40\n", | |
| 139 | + "skymap['binsz'] = 0.02\n", | |
| 140 | + "skymap['proj'] = 'TAN'\n", | |
| 141 | + "skymap['coordsys'] = 'CEL'\n", | |
| 142 | + "skymap['xref'] = 83.63\n", | |
| 143 | + "skymap['yref'] = 22.01\n", | |
| 144 | + "skymap['bkgsubtract'] = 'IRF'\n", | |
| 145 | + "skymap['caldb'] = caldb\n", | |
| 146 | + "skymap['irf'] = irf\n", | |
| 147 | + "\n", | |
| 148 | + "skymap.run()" | |
| 149 | + ] | |
| 150 | + }, | |
| 151 | + { | |
| 152 | + "cell_type": "code", | |
| 153 | + "execution_count": 35, | |
| 154 | + "metadata": {}, | |
| 155 | + "outputs": [ | |
| 156 | + { | |
| 157 | + "data": { | |
| 158 | + "image/png": "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\n", | |
| 159 | + "text/plain": [ | |
| 160 | + "<matplotlib.figure.Figure at 0x10e220b00>" | |
| 161 | + ] | |
| 162 | + }, | |
| 163 | + "metadata": {}, | |
| 164 | + "output_type": "display_data" | |
| 165 | + } | |
| 166 | + ], | |
| 167 | + "source": [ | |
| 168 | + "# We slightly smooth the map for display to suppress statistical fluctuations\n", | |
| 169 | + "skymap.skymap().smooth('GAUSSIAN',0.02)\n", | |
| 170 | + "\n", | |
| 171 | + "from matplotlib.colors import SymLogNorm\n", | |
| 172 | + "# The SymLogNorm scale is a Log scale for both positive and negative values\n", | |
| 173 | + "# and is linear within a certain range around 0\n", | |
| 174 | + "\n", | |
| 175 | + "ax = plt.subplot()\n", | |
| 176 | + "plt.imshow(skymap.skymap().array(),origin='lower',\n", | |
| 177 | + " extent=[83.63+0.02*20,83.63-0.02*20,22.01-0.02*20,22.01+0.02*20],\n", | |
| 178 | + " # boundaries of the coord grid\n", | |
| 179 | + " norm=SymLogNorm(1)) # the scale will be linear within +-1 count \n", | |
| 180 | + "ax.set_xlabel('R.A. (deg)')\n", | |
| 181 | + "ax.set_ylabel('Dec (deg)')\n", | |
| 182 | + "cbar = plt.colorbar()\n", | |
| 183 | + "cbar.set_label('Counts')" | |
| 184 | + ] | |
| 185 | + }, | |
| 186 | + { | |
| 187 | + "cell_type": "markdown", | |
| 188 | + "metadata": {}, | |
| 189 | + "source": [ | |
| 190 | + "## Model fitting and residual inspection\n", | |
| 191 | + "\n", | |
| 192 | + "First, we will fit the usual Crab model to the data. We will be using a 3D unbinned analysis." | |
| 193 | + ] | |
| 194 | + }, | |
| 195 | + { | |
| 196 | + "cell_type": "code", | |
| 197 | + "execution_count": 36, | |
| 198 | + "metadata": { | |
| 199 | + "collapsed": true | |
| 200 | + }, | |
| 201 | + "outputs": [], | |
| 202 | + "source": [ | |
| 203 | + "like = ctools.ctlike()\n", | |
| 204 | + "\n", | |
| 205 | + "like['inobs'] = evfile\n", | |
| 206 | + "like['caldb'] = caldb\n", | |
| 207 | + "like['irf'] = irf\n", | |
| 208 | + "like['inmodel'] = '$CTOOLS/share/models/crab.xml'\n", | |
| 209 | + "\n", | |
| 210 | + "like.run()" | |
| 211 | + ] | |
| 212 | + }, | |
| 213 | + { | |
| 214 | + "cell_type": "markdown", | |
| 215 | + "metadata": {}, | |
| 216 | + "source": [ | |
| 217 | + "As usual it is wise to look at the output from the optimizer. We will also store the best-fit minus log-likelihood value for later usage." | |
| 218 | + ] | |
| 219 | + }, | |
| 220 | + { | |
| 221 | + "cell_type": "code", | |
| 222 | + "execution_count": 37, | |
| 223 | + "metadata": {}, | |
| 224 | + "outputs": [ | |
| 225 | + { | |
| 226 | + "name": "stdout", | |
| 227 | + "output_type": "stream", | |
| 228 | + "text": [ | |
| 229 | + "=== GOptimizerLM ===\n", | |
| 230 | + " Optimized function value ..: 310147.111\n", | |
| 231 | + " Absolute precision ........: 0.005\n", | |
| 232 | + " Acceptable value decrease .: 2\n", | |
| 233 | + " Optimization status .......: converged\n", | |
| 234 | + " Number of parameters ......: 10\n", | |
| 235 | + " Number of free parameters .: 4\n", | |
| 236 | + " Number of iterations ......: 10\n", | |
| 237 | + " Lambda ....................: 1e-09\n" | |
| 238 | + ] | |
| 239 | + } | |
| 240 | + ], | |
| 241 | + "source": [ | |
| 242 | + "print(like.opt())\n", | |
| 243 | + "\n", | |
| 244 | + "like1 = like.opt().value()" | |
| 245 | + ] | |
| 246 | + }, | |
| 247 | + { | |
| 248 | + "cell_type": "markdown", | |
| 249 | + "metadata": {}, | |
| 250 | + "source": [ | |
| 251 | + "The fit has properly converged after 10 iterations. Let's take a look at the best-fit model." | |
| 252 | + ] | |
| 253 | + }, | |
| 254 | + { | |
| 255 | + "cell_type": "code", | |
| 256 | + "execution_count": 38, | |
| 257 | + "metadata": {}, | |
| 258 | + "outputs": [ | |
| 259 | + { | |
| 260 | + "name": "stdout", | |
| 261 | + "output_type": "stream", | |
| 262 | + "text": [ | |
| 263 | + "=== GModels ===\n", | |
| 264 | + " Number of models ..........: 2\n", | |
| 265 | + " Number of parameters ......: 10\n", | |
| 266 | + "=== GModelSky ===\n", | |
| 267 | + " Name ......................: Crab\n", | |
| 268 | + " Instruments ...............: all\n", | |
| 269 | + " Instrument scale factors ..: unity\n", | |
| 270 | + " Observation identifiers ...: all\n", | |
| 271 | + " Model type ................: PointSource\n", | |
| 272 | + " Model components ..........: \"PointSource\" * \"PowerLaw\" * \"Constant\"\n", | |
| 273 | + " Number of parameters ......: 6\n", | |
| 274 | + " Number of spatial par's ...: 2\n", | |
| 275 | + " RA .......................: 83.6331 [-360,360] deg (fixed,scale=1)\n", | |
| 276 | + " DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1)\n", | |
| 277 | + " Number of spectral par's ..: 3\n", | |
| 278 | + " Prefactor ................: 3.53407186484023e-16 +/- 6.13239441118338e-18 [1e-23,1e-13] ph/cm2/s/MeV (free,scale=1e-16,gradient)\n", | |
| 279 | + " Index ....................: -2.28003948199797 +/- 0.0145823226642845 [-0,-5] (free,scale=-1,gradient)\n", | |
| 280 | + " PivotEnergy ..............: 300000 [10000,1000000000] MeV (fixed,scale=1000000,gradient)\n", | |
| 281 | + " Number of temporal par's ..: 1\n", | |
| 282 | + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n", | |
| 283 | + "=== GCTAModelIrfBackground ===\n", | |
| 284 | + " Name ......................: CTABackgroundModel\n", | |
| 285 | + " Instruments ...............: CTA\n", | |
| 286 | + " Instrument scale factors ..: unity\n", | |
| 287 | + " Observation identifiers ...: all\n", | |
| 288 | + " Model type ................: \"PowerLaw\" * \"Constant\"\n", | |
| 289 | + " Number of parameters ......: 4\n", | |
| 290 | + " Number of spectral par's ..: 3\n", | |
| 291 | + " Prefactor ................: 1.00695509680653 +/- 0.00831375832092445 [0.001,1000] ph/cm2/s/MeV (free,scale=1,gradient)\n", | |
| 292 | + " Index ....................: 0.00506439697818556 +/- 0.00509750451889964 [-5,5] (free,scale=1,gradient)\n", | |
| 293 | + " PivotEnergy ..............: 1000000 [10000,1000000000] MeV (fixed,scale=1000000,gradient)\n", | |
| 294 | + " Number of temporal par's ..: 1\n", | |
| 295 | + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n" | |
| 296 | + ] | |
| 297 | + } | |
| 298 | + ], | |
| 299 | + "source": [ | |
| 300 | + "print(like.obs().models())" | |
| 301 | + ] | |
| 302 | + }, | |
| 303 | + { | |
| 304 | + "cell_type": "markdown", | |
| 305 | + "metadata": {}, | |
| 306 | + "source": [ | |
| 307 | + "The background model reproduces well the data, since its best-fit normalization is 1 and the index/tilt is 0. The Crab nebula has a best-fit spectral index of 2.28.\n", | |
| 308 | + "\n", | |
| 309 | + "To assess whether the model reproduces well the data spatially we will calculate a residual map." | |
| 310 | + ] | |
| 311 | + }, | |
| 312 | + { | |
| 313 | + "cell_type": "code", | |
| 314 | + "execution_count": 39, | |
| 315 | + "metadata": { | |
| 316 | + "collapsed": true | |
| 317 | + }, | |
| 318 | + "outputs": [], | |
| 319 | + "source": [ | |
| 320 | + "resmap = cscripts.csresmap(like.obs())\n", | |
| 321 | + "\n", | |
| 322 | + "resmap['algorithm'] = 'SIGNIFICANCE'\n", | |
| 323 | + "resmap['emin'] = emin\n", | |
| 324 | + "resmap['emax'] = emax\n", | |
| 325 | + "resmap['nxpix'] = 40\n", | |
| 326 | + "resmap['nypix'] = 40\n", | |
| 327 | + "resmap['binsz'] = 0.02\n", | |
| 328 | + "resmap['proj'] = 'TAN'\n", | |
| 329 | + "resmap['coordsys'] = 'CEL'\n", | |
| 330 | + "resmap['xref'] = 83.63\n", | |
| 331 | + "resmap['yref'] = 22.01\n", | |
| 332 | + "\n", | |
| 333 | + "resmap.run()" | |
| 334 | + ] | |
| 335 | + }, | |
| 336 | + { | |
| 337 | + "cell_type": "markdown", | |
| 338 | + "metadata": {}, | |
| 339 | + "source": [ | |
| 340 | + "We will be inspecting several of these residual maps along the tutorial, so we define a function to plot them, and apply it to our latest run." | |
| 341 | + ] | |
| 342 | + }, | |
| 343 | + { | |
| 344 | + "cell_type": "code", | |
| 345 | + "execution_count": 40, | |
| 346 | + "metadata": { | |
| 347 | + "collapsed": true | |
| 348 | + }, | |
| 349 | + "outputs": [], | |
| 350 | + "source": [ | |
| 351 | + "def plot_residuals(resid):\n", | |
| 352 | + " # We slightly smooth the map for display to suppress statistical fluctuations\n", | |
| 353 | + " resid.smooth('GAUSSIAN',0.04)\n", | |
| 354 | + " #plotting\n", | |
| 355 | + " fig = plt.figure()\n", | |
| 356 | + " ax = plt.subplot()\n", | |
| 357 | + " plt.imshow(resid.array(),origin='lower',\n", | |
| 358 | + " cmap='bwr',vmin=-3,vmax=3,\n", | |
| 359 | + " extent=[83.63+0.02*20,83.63-0.02*20,22.01-0.02*20,22.01+0.02*20])\n", | |
| 360 | + " # boundaries of the coord grid\n", | |
| 361 | + " ax.set_xlabel('R.A. (deg)')\n", | |
| 362 | + " ax.set_ylabel('Dec (deg)')\n", | |
| 363 | + " cbar = plt.colorbar()\n", | |
| 364 | + " cbar.set_label('Significance ($\\sigma$)')" | |
| 365 | + ] | |
| 366 | + }, | |
| 367 | + { | |
| 368 | + "cell_type": "code", | |
| 369 | + "execution_count": 41, | |
| 370 | + "metadata": {}, | |
| 371 | + "outputs": [ | |
| 372 | + { | |
| 373 | + "data": { | |
| 374 | + "image/png": "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\nYII=\n", | |
| 375 | + "text/plain": [ | |
| 376 | + "<matplotlib.figure.Figure at 0x10befc748>" | |
| 377 | + ] | |
| 378 | + }, | |
| 379 | + "metadata": {}, | |
| 380 | + "output_type": "display_data" | |
| 381 | + } | |
| 382 | + ], | |
| 383 | + "source": [ | |
| 384 | + "plot_residuals(resmap._resmap)" | |
| 385 | + ] | |
| 386 | + }, | |
| 387 | + { | |
| 388 | + "cell_type": "markdown", | |
| 389 | + "metadata": {}, | |
| 390 | + "source": [ | |
| 391 | + "## Adding model components\n", | |
| 392 | + "\n", | |
| 393 | + "The residual map shows a cluster of positive residuals on the South-West of the Crab nebula. Is this another source? To test this hypothesis we will add a point source at the position that we can guess from the residual map." | |
| 394 | + ] | |
| 395 | + }, | |
| 396 | + { | |
| 397 | + "cell_type": "code", | |
| 398 | + "execution_count": 42, | |
| 399 | + "metadata": { | |
| 400 | + "collapsed": true | |
| 401 | + }, | |
| 402 | + "outputs": [], | |
| 403 | + "source": [ | |
| 404 | + "newpntsrc = gammalib.GModelSky(gammalib.GModelSpatialPointSource(83.7,21.9),\n", | |
| 405 | + " gammalib.GModelSpectralPlaw(1.e-17,-2.,gammalib.GEnergy(3.e5,'MeV')),\n", | |
| 406 | + " gammalib.GModelTemporalConst(1))" | |
| 407 | + ] | |
| 408 | + }, | |
| 409 | + { | |
| 410 | + "cell_type": "markdown", | |
| 411 | + "metadata": {}, | |
| 412 | + "source": [ | |
| 413 | + "We have defined a sky model object that has three components:\n", | |
| 414 | + "\n", | |
| 415 | + "- a spatial model, which is a point source at the position guessed from the residual map;\n", | |
| 416 | + "- a spectral model which is a power law with spectral index 2, and a flux which approximately 1/10 of the Crab nebula;\n", | |
| 417 | + "- a temporal model which is a constant.\n", | |
| 418 | + "\n", | |
| 419 | + "We will name this source Src1, and free its position (fixed by default when a new source is created), so that we can fit it to the data." | |
| 420 | + ] | |
| 421 | + }, | |
| 422 | + { | |
| 423 | + "cell_type": "code", | |
| 424 | + "execution_count": 43, | |
| 425 | + "metadata": { | |
| 426 | + "collapsed": true | |
| 427 | + }, | |
| 428 | + "outputs": [], | |
| 429 | + "source": [ | |
| 430 | + "newpntsrc.name('Src1')\n", | |
| 431 | + "newpntsrc['RA'].free()\n", | |
| 432 | + "newpntsrc['DEC'].free()" | |
| 433 | + ] | |
| 434 | + }, | |
| 435 | + { | |
| 436 | + "cell_type": "markdown", | |
| 437 | + "metadata": {}, | |
| 438 | + "source": [ | |
| 439 | + "Finally we append the new source to the model" | |
| 440 | + ] | |
| 441 | + }, | |
| 442 | + { | |
| 443 | + "cell_type": "code", | |
| 444 | + "execution_count": 44, | |
| 445 | + "metadata": {}, | |
| 446 | + "outputs": [ | |
| 447 | + { | |
| 448 | + "data": { | |
| 449 | + "text/plain": [ | |
| 450 | + "<gammalib.model.GModelSky; proxy of <Swig Object of type 'GModelSky *' at 0x10e91f9c0> >" | |
| 451 | + ] | |
| 452 | + }, | |
| 453 | + "execution_count": 44, | |
| 454 | + "metadata": {}, | |
| 455 | + "output_type": "execute_result" | |
| 456 | + } | |
| 457 | + ], | |
| 458 | + "source": [ | |
| 459 | + "like.obs().models().append(newpntsrc)" | |
| 460 | + ] | |
| 461 | + }, | |
| 462 | + { | |
| 463 | + "cell_type": "markdown", | |
| 464 | + "metadata": {}, | |
| 465 | + "source": [ | |
| 466 | + "and we fit the model including the new source to the data." | |
| 467 | + ] | |
| 468 | + }, | |
| 469 | + { | |
| 470 | + "cell_type": "code", | |
| 471 | + "execution_count": 45, | |
| 472 | + "metadata": { | |
| 473 | + "collapsed": true | |
| 474 | + }, | |
| 475 | + "outputs": [], | |
| 476 | + "source": [ | |
| 477 | + "like.run()" | |
| 478 | + ] | |
| 479 | + }, | |
| 480 | + { | |
| 481 | + "cell_type": "markdown", | |
| 482 | + "metadata": {}, | |
| 483 | + "source": [ | |
| 484 | + "Does the addition of the new source provide a better fit to the data? We can quantify this using the test statistic (TS) given by twice the log-likelihood difference." | |
| 485 | + ] | |
| 486 | + }, | |
| 487 | + { | |
| 488 | + "cell_type": "code", | |
| 489 | + "execution_count": 46, | |
| 490 | + "metadata": {}, | |
| 491 | + "outputs": [ | |
| 492 | + { | |
| 493 | + "name": "stdout", | |
| 494 | + "output_type": "stream", | |
| 495 | + "text": [ | |
| 496 | + "189.7624766129302\n" | |
| 497 | + ] | |
| 498 | + } | |
| 499 | + ], | |
| 500 | + "source": [ | |
| 501 | + "like2 = like.opt().value()\n", | |
| 502 | + "\n", | |
| 503 | + "ts = -2 * (like2 - like1)\n", | |
| 504 | + "print(ts)" | |
| 505 | + ] | |
| 506 | + }, | |
| 507 | + { | |
| 508 | + "cell_type": "markdown", | |
| 509 | + "metadata": {}, | |
| 510 | + "source": [ | |
| 511 | + "TS is expected to be distributed as a $\\chi^2$ with n degrees of freedom, where n is the additional number of degrees of freedom in the model including the new source, in our case 4 (RA, Dec, Prefactor, and Index). The integral of the $\\chi^2$ from TS to $\\infty$ is the chance probability that the likelihood improved by that much due to statistical fluctuations. A large value, like the one we got, means that the chance probability is very low, thus we are likely to have found a new source.\n", | |
| 512 | + "\n", | |
| 513 | + "To make sure the new source improves the data/model agreement we will look again at the residual map." | |
| 514 | + ] | |
| 515 | + }, | |
| 516 | + { | |
| 517 | + "cell_type": "code", | |
| 518 | + "execution_count": 47, | |
| 519 | + "metadata": {}, | |
| 520 | + "outputs": [ | |
| 521 | + { | |
| 522 | + "data": { | |
| 523 | + "image/png": "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\nnWa2bbbH0TY5r7nHfJ5bL5H0FcDJWMG1Zvb5CcddAywys/f2Yly5FZAkyZzFzC6peehO4GagJ4Y1\nxaskSeYlkn58wttXAw/06tpn2oq19t7MHCPnNfeYz3PrF35b0rMp3K2+C7ytVxc+o/ZYkyRJekFu\nBSRJkrRMGtYkSZKWmReGVdK7JN0n6V5Jn5a0aMLPrpZkkly/OUmXSfprSd+S9Ku9G3U9vLlJep+k\nuyXdJekWSRvrntvr8UfMcF6rJH1O0gOS9kp6ca/HHzGTeZXnD0r6hqQv9HLcScuY2Zx+AZuA7wCL\ny/efpYgJBtgCfJli43qdc+4g8CDwTGAh8E3gObM9p6nmBqyYcMwvAx9tcl9m+zWTeZU/+yTwL8r/\nLwRWzfac2phX+fN/Dfwh8IXZnk++pv+aFytWCu+GxZIWAEuA8UQL/xl4N3Eo2wuBb5nZt83sJPAZ\nCreMfqIyN6sfqhfdl35gWvOStBJ4GXA9gJmdNDMneeGsMe3PS9Jm4J8AH+/6KJOuMucNq5k9DPxH\n4HvAfuAJM7tF0quBh83sm5Ocvgn4uwnv95VtfUE0NyhC9ST9HfBzOMklJjt3tpnJvIBnAAeB/15+\nZf64pKU9GvqkzHBeAB+iWAjM86R68585b1glraZYZT4D2AgslfTzwHvoYTabbhDM7U0AZnatmW2h\niCj5xSbnzjYzmRfFivD5wH8zswuAJ4G+2Buf4ed1OXDAzHb3cMhJl5jzhhW4BPiOmR00s1PAjcBb\nKB7ub0p6CNgM7JHUGVP8MMU+7Diby7Z+wZvbSzqO2Qm8bprnzhYzmdc+YJ+Z3VG+/xyFoe0HZjKv\nC4FXlc/rZ4CLJP1BNwebdI/5YFi/B7xI0hJJAi4GbjSzDWa21cy2UvwyPt/Mvt9x7teBH5f0DEkL\ngTcAf9rLwU+BN7e9NUP13HO7PuJ6THte5Wf4d2VEDeW593d7wDWZybyuMbPN5fP6BuB/mllffMNI\nmjPnQ1rN7A5JnwP2ACPAN5gkXLB0dfm4mW03sxFJv0jhOTAIfMLM7uvFuOswydz+0AvV65hbo/vS\nS2Yyr7KLXwJ2ln8Mv03xDWXWaWFeyTwhQ1qTJElaZj5sBSRJkvQVaViTJElaJg1rkiRJy6RhTZIk\naZk0rEmSJC2ThjUJkTRaZmS6V9KfSVo1ybHnl1nELmvQ/4ckvcxp/+mZZHeS9JUyCipJZoU0rMlk\nHDOz883sucCjwDsmOfaNwG3lv1MiaS3wIjP72syHWeH3gbd3od8kqUUa1qQu/4cgQU0ZZfSzFCny\nLq2Z9/V1wJcm9HFZmV91D/DaCe1LJX1C0l+VSVdeXbYvkfRZSfdLuknSHZLGy0n/KTUNfJJ0gzSs\nyZRIGqQIz4zCfV9CESP/IPBVitR3U3EhsLvsfxHwu8ArgRdwep34aynCO18IvAL4QJnN6u3AY2b2\nHODflucBYGaPAcPlqjhJek4a1mQyFku6C/g+cBawKzjujRSJQyj/rbNaPIci/R/A36cwzH9rRSjg\nxOQj/wj41XIcXwUWAecCLx2/ppndC9zd0f8BigxTSdJz5nyugKSrHDOz8yUtocin8A7gwxMPKFez\nrwNeLelaQMBaScvN7MhkfVMYyakQ8Doz++uO60513qLyGknSc3LFmkyJmT1FUVLk6jIz/kQuBu42\nsy1lNrG/B9wAvGaKbvcCzyr//wCwVdKPle8nrni/DPxSuY+LpAvK9v8N/H9l23OAnxw/oTz2bOCh\n2pNMkhZJw5rUwsy+QfF1+40A5Vdzyvc3dRx+w4Tjbg6K530R+Omy7+PAlcAXS/HqwITj3gcMAXdL\nuq98D/A7wHpJ9wO/CdwHPFH+7AXA7WY2Mq3JJskMyexWyawh6Tbg8unUrCq3IIbM7Hi50v0K8Gwz\nOynpOuBPzezPWx5yktQi91iT2eRqCiFqOsUAlwC3Shqi2Id9e1kQEuDeNKrJbJIr1iRJkpbJPdYk\nSZKWScOaJEnSMmlYkyRJWiYNa5IkScukYU2SJGmZ/wvRV93bC3EYEwAAAABJRU5ErkJggg==\n", | |
| 524 | + "text/plain": [ | |
| 525 | + "<matplotlib.figure.Figure at 0x10e5bac50>" | |
| 526 | + ] | |
| 527 | + }, | |
| 528 | + "metadata": {}, | |
| 529 | + "output_type": "display_data" | |
| 530 | + } | |
| 531 | + ], | |
| 532 | + "source": [ | |
| 533 | + "resmap.models(like.obs().models())\n", | |
| 534 | + "resmap.run()\n", | |
| 535 | + "\n", | |
| 536 | + "plot_residuals(resmap._resmap)" | |
| 537 | + ] | |
| 538 | + }, | |
| 539 | + { | |
| 540 | + "cell_type": "markdown", | |
| 541 | + "metadata": {}, | |
| 542 | + "source": [ | |
| 543 | + "The addition of the new point source has flattened the spatial residuals, even though the fit is not perfect yet obviously. From now on we will fix the position of Scr1." | |
| 544 | + ] | |
| 545 | + }, | |
| 546 | + { | |
| 547 | + "cell_type": "code", | |
| 548 | + "execution_count": 48, | |
| 549 | + "metadata": { | |
| 550 | + "collapsed": true | |
| 551 | + }, | |
| 552 | + "outputs": [], | |
| 553 | + "source": [ | |
| 554 | + "like.obs().models()['Src1']['RA'].fix()\n", | |
| 555 | + "like.obs().models()['Src1']['DEC'].fix()" | |
| 556 | + ] | |
| 557 | + }, | |
| 558 | + { | |
| 559 | + "cell_type": "markdown", | |
| 560 | + "metadata": { | |
| 561 | + "collapsed": true | |
| 562 | + }, | |
| 563 | + "source": [ | |
| 564 | + "## Modifying the spectral models\n", | |
| 565 | + "\n", | |
| 566 | + "Next we will check if the model agrees well with the data at all energies. We will start by defining a function to make and plot residual maps in separate energy ranges." | |
| 567 | + ] | |
| 568 | + }, | |
| 569 | + { | |
| 570 | + "cell_type": "code", | |
| 571 | + "execution_count": 49, | |
| 572 | + "metadata": { | |
| 573 | + "collapsed": true | |
| 574 | + }, | |
| 575 | + "outputs": [], | |
| 576 | + "source": [ | |
| 577 | + "def resmap_erange(ebounds):\n", | |
| 578 | + " for elow, eup in ebounds:\n", | |
| 579 | + " resmap['emin'] = elow\n", | |
| 580 | + " resmap['emax'] = eup\n", | |
| 581 | + " resmap.models(like.obs().models()) # we make sure we are using the latest best-fit model\n", | |
| 582 | + " resmap.run()\n", | |
| 583 | + " plot_residuals(resmap._resmap)" | |
| 584 | + ] | |
| 585 | + }, | |
| 586 | + { | |
| 587 | + "cell_type": "code", | |
| 588 | + "execution_count": 50, | |
| 589 | + "metadata": {}, | |
| 590 | + "outputs": [ | |
| 591 | + { | |
| 592 | + "data": { | |
| 593 | + "image/png": "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\nQmCC\n", | |
| 594 | + "text/plain": [ | |
| 595 | + "<matplotlib.figure.Figure at 0x10e8f4518>" | |
| 596 | + ] | |
| 597 | + }, | |
| 598 | + "metadata": {}, | |
| 599 | + "output_type": "display_data" | |
| 600 | + }, | |
| 601 | + { | |
| 602 | + "data": { | |
| 603 | + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVYAAAEKCAYAAABJ430PAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXmUXUd95z9ftVq7vAjJNlocOYEh4YCxQaxmWLxMhGLw\nAGbGDDhjSOIwEGIzPgcwngkZCDnxOCGYkAQUTDBBGIgXTGwHWxAD4yRWsITwJod9MRbYwoskW1ur\nf/PHvQ+e+/6q+1a/e1+/bv0+57zT/aqr6lbVvf179eq3ycwIgiAImmPWVA8gCIJgphGCNQiCoGFC\nsAZBEDRMCNYgCIKGCcEaBEHQMCFYgyAIGiYEaxAE0xJJ8yT9m6RvSLpL0v+Z6jF1UNixBkEwHZEk\nYKGZ7ZY0DNwCnGdmt07x0Jg91QMIgiCYDFbsCneXb4fL10DsFFsTrJJWAZ8AjqaY7Hozu1TSJcDL\ngf3Ad4A3mNnDiT6GgNuAH5vZ6RNdc+nSpbZ69erHlaU25F75yIhfd2ioWjYrcYiS8wXAqytVy0ZH\n/fapco/UeOvirQHkjffgwWpZr1+YUvPyyrPWIDGwg6PVCXv95twzbw1T5am6Xr+ptc3pd+x9//73\nv8+OHTsSteuxVrIdNetuhruAvV1F681sfedNKSM2A08C/tLMNvUytqZoc8c6AlxgZlskLQY2S9oI\nbAQuNLMRSRcDFwLvSPRxHrANOKzOBVevXs2mTbc9riz1gO/dWy175BG/7sKF1bIFC/y6+/dXy2Yn\nVtmr6/2TemMF2LevWuYJL4BFi/zyuhyWuAPDs6v/vbt2+/93u3dXy1IfZh7eP//cuX5db75z5vh1\nh3AWLTGwhx6rXtB7FlL37LHHqmWp58Mbb+oDznsWvOcrdb3U2oxdx+c+d41fMYMdFLulOgj2mlny\nomZ2EDhB0hHANZKeZmZ39jzIHmlNeWVm281sS/n7LgoBucLMbjKzzlN7K7DSay9pJfAbwEfbGmMQ\nBFPErFn1XjUpv/XeDKxtbcwZ9MUqQNJq4ERg7Db9jcA/Jpp9AHg7MO4XXknnSrpN0m0PPPBAjyMN\ngqB1pGLbXOc1bjdaVu5UkTQfOA24pw8zmJDWBaukRcBVwPlmtrOr/CKK44INTpvTgfvNbPNE/ZvZ\nejNbY2Zrli1b1uDIgyBojWZ2rE8EbpZ0O/A1YKOZXdf62GvQqlVAaQJxFbDBzK7uKj8HOB04xXx7\nr5OAV0haB8wDDpP0STN7/UTXHJr1+O5GHWUDwLx51bLUeax3Xvewq27zz7VS57EeOedfOQqLHGVO\njlIshwk2IJNq791H8M8yU+fPu3ZVDy7nzfMPM71zYm8dc86Oc85YU8+CR+o+en2kzuCHRg88vqAJ\n80ypd20qYGa3U3wTHjha27GWNmaXAdvM7P1d5WspvuK/wsycxx/M7EIzW2lmq4GzgH+qI1SDIJgm\nNHzGOmi0OfKTgLOBkyVtLV/rgA8Bi4GNZdmHASQtl3RDi+MJgmBQmOGCtbWjADO7BfC+h7vC08zu\nA9Y55V8Gvtzk2IIgmEIaOgoYZMLzKgiC/tKxCpjBzOzZBUEwmMSOdXox1uUwpZ2dP6+q3Vy0qHeP\nIe+D+MEH/bqeRjvHfdZrn9KS79xZLUtpgnPmsHBhdc1SHj8evbqDpq6VMwbPWiC1ofI80Hbtqtcn\n+HNIafq9tRlr9dJheLh6H1Jj8KxUhh7+mV95yZLHv0/5vuYSgjUIgqBB4ow1CIKgBUKwBkEQNEgo\nr4IgCFogdqzTi7r3yxwT2ybinnoMD/vlixdXyx59tPnrp/pIrZWnn0htMHKUbV4f3rhSikGvPKWk\n8uqmlDmpcg9vbvPnV8ty3FRTc/CUpvc/5iuPvOulxuApMlct9f2uvfizPRNnrEEQBC0QgjUIgqBB\nYscaBEHQAiFYgyAIGiSsAoIgCFogdqzTCDM08vjAvPPn+VP82YNVbWdKG53jHulp1HMyxeY8bwcO\nTFxnPFKulJ5b7KKF/iQeerg64VQiPa/fnI2LZ0GQWoMcS4ocywSPHLdc71lKXcvrI7VeOVYBnkur\nzXNMG4CRMeNtIs51nLEGQRC0QQjWIAiChgnBGgRB0CChvAqCIGiYOGOdPJJWAZ8AjgYMWG9ml0q6\nBHg5sB/4DvAGM3t4TNt5wFeBueUYrzSzd090TUMc4PH+o6MJxZOnGMhReKTCUnruq6lnKBXjtC6e\nO2nKfXbu3GqZ59oIvounF3cV8rK/1s2ymlJ+eUqe1Hy9tUnhjSuVhdcjJwtvTkZXT7mYo7xKxeb1\nxnD//X7dseQo9cZlhgvWNmc3AlxgZk8Fnge8RdJTgY3A08zseOCbwIVO233AyWb2DOAEYK2k57U4\n1iAI+kkkE5wcZrYd2F7+vkvSNmCFmd3UVe1W4EynrQGdEBTD5asJQ48gCKaaQ+AooC+zk7QaOBHY\nNOZPbwT+MdFmSNJW4H5go5mNbdupd66k2yTdtmPHA80NOgiC9pjhO9bWRy5pEXAVcL6Z7ewqv4ji\nuGCD187MDprZCcBK4DmSnpaot97M1pjZmqVLlzU/gSAImqVjFVDnNU1pdeSShimE6gYzu7qr/Bzg\ndOCU8mt/EjN7WNLNwFrgzhaHGwRBv5jGu9E6tGkVIOAyYJuZvb+rfC3wduDFZvZYou0y4EApVOcD\npwEXT3TN0VF4bEyPKS3mvn3Vsl4DHoPvYpnSUNd1WcxJjJly8fTGkHJp9SwItN9ZMGDRomrlVL8p\nK4SxpFyImwj47dGrpjtHRnhzSD13vfabWkev35Rlw9hnL8faIklDZ6wpy6OeO26ANnesJwFnA3eU\nZ6UA7wI+SGFGtbGQvdxqZm+StBz4qJmtA54IXC5piOK44rNmdl2LYw2CoJ80s2PtWB5tkbQY2Cxp\no5nd3UTnvdCmVcAt4OQ/gRsS9e8D1pW/306h7AqCYKbR0I41ZXkEzFzBGgRBkKThM9ZxLI+mhBCs\nQRD0l7xYAUsl3db1fr2ZrX98d77l0VQyowSr9w0j9cHoHcKn7BM8xUCOQilHOZETVzPHLde7lqek\nAhgerSqq9uFXPrCnWpZaR09B8sgj9dt7c8tx20zRq1IsJx6rV95EjNMc5ZVHah0bib/qUf8G7TCz\nNak/piyPppoZJViDIJgGNGcV4FoeDQIz25gsCILBpBnPq47l0cmStpavde0PfmJixxoEQX9pziog\nZXk05YRgDYKg/0xjd9U6zOzZBUEweBwC0a1mlGAdHa1qQttyg2zCtc/TuHruoCntvdc+JwD3WPff\nDtt3VS+Ycvv0rpdaG88qwBtXTvbZlDa71yytORuq3burZSm54a1XygXYC7adE9g7Jyh23aDrEei6\nHjNKsAZBMA2IHWsQBEELhGANgiBomBCsQRAEDRLpr6cXBw/mZdesi/fhmlI4eIqQ1Idz3X5TyitP\nkZBSLnjujam6vSoocuLaeqSUX56yLqW8yomL661NWzFhvTnkKOtSc+jVhTf1PI+Vf41sNOOMNQiC\noAVCsAZBEDRMCNYgCIIGiaOAIAiCFpjhgrW12UlaJelmSXdLukvSeWX5JZLukXS7pGskHVG3bRAE\nM4BIf90TbqIvYCNwoZmNSLoYuBB4R522U5UkzLu/OVYBixbVr1vXtRDyrAI8vEy1kBdQOrUOHnUt\nNlLX8tYxpb1vzPVyDN7a5ARN98ipmyNrcoJt17XkaCzwdexYJ4eZbTezLeXvu4BtwAozu8nMOo/9\nrcDKum3bGmsQBH2kc8baezzWgaUve+1xEn29EfjMJNt2/n4ucC7A8uXH9jTOIAj6xDQWmnVofXap\nRF+SLqL4yr8ht203ZrbezNaY2ZolS5Y1O/ggCJondqy9kUr0Jekc4HTgFDP/1GZQk4QFQdAA01gx\nVYfWZpdK9CVpLfB24MVm5kYE7SVJWN0POa9eyl3w8MOrZalYpm77w/wT/6GRquZlyZKq/2pKoeW5\nQua4k+a4Z+a45fbab04c0ZRicO/e+v2mlHh18VyOU8oz7/7kKIRS9yFnzb3nJjWGsfNoRHl1CNix\ntjm7VKKvDwGLgY1l2YcBJC2XdMMEbYMgmAnEUcDkGCfR1w1OGWZ2H7BugrZBEEx3DoEd68w+6AiC\nYDAJwRoEQdAwIVgPHVIH8716XiXdg5zy2YuqmpAc76YUvSq1UsqRnP8Pr67nZbVkid9eu3dVC0d8\nN605c6pZ93bs8Pv15paTPNFLktiEksljp2t02D8aU16FVUAQBEGDxBlrEARBC4RgDYIgaJgQrEEQ\nBA1yCBwFzOzZBUEwmDTkICDpY5Lul3RnH0Zdm0N2x5qTTdXTyqeUml4fNstPsyqnsqeNTo3L06in\n6ubEJ/UsCFKxVL3rpcbgadS9tdXePX4Hu3dXyxITGzrsMGdcvs9yzuYpx0LEIyeGbq8WBANLs1YB\nH6fw5vxEUx02wSErWIMgmCIaPAows6+WoUUbRdJCYK+ZTSqZewjWIAj6T33BulTSbV3v15vZ+qaH\nI2kWcBbwOuDZwD5grqQdwPXAR8zs23X7C8EaBEH/qS9Yd5jZmjaHUnIz8EWKVFF3mtkogKQlwEuB\niyVdY2afrNNZCNYgCPrLYFoFnGpmByT9oZnd3ik0swcp4kJfVcaIrsWMF6w5sT1TSggv9moq4d3Q\naDXY5b4R/37MnVMdxIgTRzQVJ3a49m32SSlNvHidKbx1yEkGOHfvI9XCvQmtjae8OqKS5BeAPfur\ni5aar+eSmnoWvDl4ir0chVTK3bifSQb7qigbQJdWM+s89X8gaT6wBNgCfNrMHhpTZ0IG7mMjCIJD\ngObMra4A/hV4iqR7Jf1WjyMzYC9wI7AK+BdJz8jtZLA+NoIgODRozirgtY109AvuMbN3l79fKenj\nwIeBk3M6iR1rEAT9ZbCTCe6Q9KzOGzP7JpCdpTR2rEEQ9J/BU151+H3g05I2A3cAxwPfy+2ktdlJ\nWiXpZkl3S7pL0nll+SWS7pF0u6RrJLnah0F1VQuCoEcGeMdqZt8ATgCuKItuBrKPG9rcsY4AF5jZ\nFkmLgc2SNgIbgQvNbETSxRR2Y+9w2n+cBlzVUtpOTxOb0uTmuLTyYDUS8dxEx3bU0ZUyLyZ2jqtt\nar45Lq0eKU2/d71hEsrT3U6UZk+lnlLJO26qqYGNOAYEKe17r5lmc+5Djqzwxptqn6Nkz3kWWrMW\nGDCrAEkyK+wwzGwfhVPA9ak6E9HaR4KZbTezLeXvu4BtwAozu8nMOrf2VmBlov1XgUTi5yAIpi2D\nuWO9WdJbJR37+KFqjqSTJV0O/Pe6nfXlY6P05T0R2DTmT28EPtOPMQRBMEAM3hnrWgp5dIWk44CH\ngfkUm8+bgA+Y2dfrdta6YJW0iMJz4Xwz29lVfhHFccGGHvs/FzgXYPnyYyeoHQTBlDOAnldmthf4\nK+CvSg+rpcAeM0vEdRufCQVrGZzgGcByYA+FH+39dTovB3gVsMHMru4qPwc4HTil7plFijIgw3qA\npz99TROpzoIgaJsBE6zdlB5W23vpIylYJf0KhVLpVOBbwAPAPOA/SHoM+AhweSdYgdNewGXANjN7\nf1f5WuDtwIvNzHEWnTzeB2GOO2hKZ/Kgc9KbOtQ/3HtgPJ9YQI89WimbN2+h37HXfqSqJJo9u0c/\nV/y1eeIT/bruOqQUE16KUU8hlUrT6mldEhlwFznZblPDSiXR9dju/Lt5z1hKUTbXCc2bI2NS25Be\nFWh13Zi9mLrZDKBLa9OMd0v/CPgk8Ctm9utm9nozO9PMjgdeARwOnD1O+5PKv58saWv5Wkeh6V8M\nbCzLPgwgabmkGzqNW3BVC4JgUBg85VWjJD82xnMVK48CPjBex2Z2C+B9vt3glGFm9wHr6lw/CIJp\nzACesXYov2m/DvhlM3tPaSVwjJn9W04/dc5YX+UUPwLcUfesNQiC4HEMqGClUGCNUsQGeA+wi0JP\n9OycTuocdPwW8HwKDwSAlwCbgeMkvcfM/i7ngkEQBAMsWJ9rZs+U9HUAM3tIUkZWs4I6gnU28Gtm\n9lMASUdTeEM9F/gqEII1CIL6DPBRAHBA0hBF+EAkLaPYwWZRR7Cu6gjVkvvLsgclZYREnhpSWlRP\nC5q6157WN+XiyX0ZUY8dLfncBdW6Bxcd7jb/0X1V9X1Kw+2VpxSzXjDnIXw195C3ZiOJ59DT9ntW\nAQkrCu8GHZg9363qBQxPrU2vLq1eoOzULfesAnICi6fm4FkFNDHf3owhEwy2VcAHgWuAoyS9DzgT\n+F+5ndSZ3ZclXQf8ffn+zLJsIYV3QhAEQR4DumM1sw1lZKtTKJTv/9nMtuX2U0ewvgV4FfDC8v3l\nwFWlYf9Lcy8YBEEwqIIVwMzuAe7ppY8JZ1cK0NuA683sbRTmUs6XxSAIghoMZhCWcmi6vDuUqaQj\nJX0st58JRy7pd4ArKTytAFYAn8u9UBAEwc8ZUMEKHN8dH6BMJHhibid1jwKeQxmZysy+Jemo3Av1\ni7H3IuWC57ltekob8HUuKeXEvuXHVcrm7t/lV66ZKjZ1rZzzf6+uFwo1xXZ83+BjjqmWKTVgR1G1\n/SfVG7Rkie/WO3dOVZMyvOMBt+6sJdVsGjnrmFL8eIrMHOWVp/Tc6yjaUnVT/Xpu1zmKrr4y2FYB\nsyQd2cnMKmkJkwhWVafBPjPbr1JCSZpNaYoQBEEwKQbXKuDPgFslfZZCeXUm8Me5ndSZ3VckvQuY\nL+k04M3AP+ReKAiCABjoHauZfULSbRSeVwa8yszuzu2nzuzeSRHZ6g7gdymUV9l2XUEQBD9nQM9Y\nJc2lyHl1GPAE4ExJf5Dbz4Q71jIs4N+UryAIgt4Y4B0rcC1FLJTNwL7JdjJePNY7GOcstQwfGARB\nkM/gCtaVZra2107G27GeXv58S/mzExPg9cxQ5VXqPN1z5xya5fsAPvJY1dxgL4v9jh2t7aijIU49\ng14w5Zwsral+5zteoqnAzZ5lwaxZjt8mfuZUb81T92HX7qoFwaKlVe0/+Gdcixf5j63Xb0r77q3Z\n8Gh1YzM86newZ2/V4iHlwdtr8OqURYy3vnVdeA+BQNf/IunpZnZHL52MF4/1BwCSTjOzbjuud0ja\nQnH2GgRBkM/g7lhfCJwj6XsURwGi8JPK+oZe52NDkk4ys38u37yAFtNmB0Eww2nwjLVM9XQpMAR8\n1Mz+pMcuX9b7qOrHY/2YpE6IpYcp0sQGQRBMjgYEaxne7y+B04B7ga9J+vxkzKM6mNkPJB0JPJki\nx1+HH+T0U8cqYDPwjI5gNbNHci4QBEHwOJrbsT4H+LaZfbfoVp8GzgAmLVgl/TZwHrAS2Ao8jyL3\n3sk5/YxnFfB64FOdLKxjBWqZxfWJZW4rr/0qioDYR1Mou9ab2aWSLgFeTqG6+Q7wBi93d1Nb/FSW\n1iwyHgJP4XB/RgIb71Key2SKlNLFc29MKSwerSaPTY7B6yO1XJ5rcM64PNfPlNum55584ICveanp\nWZxk1/6qsm7ePF+Bt9dR4KXumUeO8irFQBxv1h/E0tJgv8P6MuU9FHFLftT1t3spAvD3wnkUaVhu\nNbOXSvpVGva8egLw9TI24WZ+kf76ScCLgR2Mr8AaAS4wsy2SFgObJW0ENgIXmtmIpIuBCynSbP+c\nNrb4QRAMDgdHa5sX7DCzNW2OZQx7zWyvJCTNNbN7JD0lt5PxrAIulfQhii3wScDxwB5gG3C2mf1w\nvI7NbDuwvfx9l6RtwAozu6mr2q0UvrhjaXyLHwTBYGCWl6FhHH4MrOp6v7Is64V7y7CBnwM2SnqI\nzPNVmOCM1cwOUuwwN05qiCWSVlOE3to05k9vBD7jNKm9xZd0LnAuwIoVx/YyzCAI+kRDgvVrwJMl\nHUchUM8C/lsvHZrZK8tf/1DSzcDhwBdy+2ndSlfSIor0seeb2c6u8osojgs29NJ/ed6yHuD449fM\nSMeFIJhJNLVjLY8Tfw+4kUIX8zEzu6v3nn/e/1cm27ZVwSppmEKobjCzq7vKz6Hw7DqlzFAwlklt\n8c2qioAmHDwOjFTPg0ZHfa1YSplSF8+zJUfZkFKEeN49e/b4dXMeem99jziiWgagn2yvlM11tES2\n5Am1x+XlIgSYO7vqKjZ3TmIhnY4PJuLPeuvrKbqG8TMEHnGEEwg4gaf0zLk3XsxhyIvD28v1+9GP\nmd1AERiqESRdDpzXUaiXpld/ZmZZJqatCVYVAVwvA7aZ2fu7ytcCbwdebGYJZ77mt/hBEAwOTQnW\nFqhkEJCUnUGgTmqWP3ZywPxRjb5PAs4GTpa0tXytAz4ELKY4GN4q6cNlv8sl3VBOZgTobPG3AZ9t\ncosfBMHU0flmWec1Bcwqd6lAuxkEXmZm7+q8KSX4OiaIyVrat3o2Fe623czuA9Z1vW90ix8EwWDQ\noFVAG/Qtg8BQac+1D0DSfMC3fg6CIKjBoArWrgwCLy2LXmlm23L7qSNYNwBfkvS35fs3AJfnXigI\nggAGc8cq6RYze6GkXRSeour6m5lZQk3qUydWwMWSvgGcWha918xuzLlIv/DCPKYyr3ra992OuyH4\nD0Hqwchx8fSycHqxUB96yG/vafpTc/DqpiwY5jrfR3KsK4b2J8wNPJ9U5yBNCVX/0UdlpFP1Hu1E\n4NN9s6sxUg/4Sn3XRdrTsqe0/wedmPQp7X0OqXi5Hr24tDYSj5XBE6xm9sLyZyJ4ch51/122ASNm\n9kVJCyQtNrNETucgCII0nlnkVCPp78zsbEnnmdmlvfZXxyrgd4ArgY+URSso3L2CIAgmxehovVcf\neZak5cAbS8unJd2v3M7q7FjfQuG7vwnAzL4l6ajcCwVBEMBgnrECHwa+BPwyRdCp7kMPK8trU0ew\n7jOz/SoPVyTNZobmvAqCoD8MmmA1sw8CH5T012b2P3rtr45g/YqkdwHzJZ0GvBn4h14vPNV4jrQp\nJYJXN6Uz6fXsyFOOpGKDemNIKZlykvZ5c0j9I3h92DxHAwfI83X1FFo7d1bLUhfzNID4Lql7rKqk\nAtiXUPh5eHFpvWnlKEITU+iZlEJrEOKxDppg7dCEUIV6uaveSRGL9Q7gdymM9sd1DgiCIEjROQoY\npDNWSbeUP3dJ2ln+7LwSn/Rp6phbjUr6HPA5M3tgEmMOgiD4OYNoFdA3c6syiMq7KXz2Z5VlB4G/\nMLP3NHHxIAgOTQb1KEDSXODVwGq65GOuzBvvKOBtFIFUnm1mS8xsCUWw6ZMkvS17xEEQBCWDdhTQ\nxbUU2UpGgEe7XlmMdxRwNnCame3oFJjZd8skgzcBf557sSAIggE1t+qw0szW9trJeIJ1uFuodjCz\nB8oA1gPH0FDVhTUnqO+RR/rlnjI69WDknB15/Xoa2yYycHqWBanMq542OdWvp9R/8EG/7mGHVRd4\n+IiqyYUXWDzFPsdFFGCuM17PVRd8q4/UffTWxnNDTmn6PUuOVCZh757lPF+pujlWCGPve1MWBQMs\nWP9F0tPN7I5eOhlPsI4XC7/HOPlBEByqDPiO9YXAGyR9F9hH4ShgZnZ8TifjCdZnJMwMRJEGOwiC\nYFIMmlVAFy9ropPx0l8nvqAEQRBMngHfsb7aKXtE0mYz21q3k9aztAZBEIxlgAXrmvLV8S49Hbgd\neJOkvzez/1unkzaTCa4CPgEcTRFbYL2ZXSrpNcAfAr8GPMfMbku0Pw/4HYqjh78xsw9MdE3P8Djn\nBqaUG3WVTClSrqNerFhP2ZZyj/SyrKZcbXuNE5uqm5NV1lNqjY5WO0h9TfSUi7sSwSs99+S5c/wQ\nFyOz64/BUzQNjVaDty5e5N/0PXur10o9H94cEiFl3fubip2ao4xtgwHfsa4EnmlmuwEkvRu4HngR\nRXCWqRWsFHZgF5jZFkmLgc2SNgJ3Aq/iF2EIK0h6GoVQfQ6FouwLkq4zs2+3ON4gCPrEAAvWoyiU\nVh0OAEeb2R5JCRuUKq0JVjPbDmwvf98laRuwwsw2Amj8UOS/BmzqpMeW9BUKYVzr0yIIgsFlEF1a\nu9gAbJJ0bfn+5cCnJC0E7q7bSV/OWCWtBk6kjOlagzuB90l6ArCHIntr6sjgXOBcgJUrj+11qEEQ\n9IFB3bGa2XslfQF4QVn0pq7jytfV7ad1wSppEXAVcL6Z1YoSY2bbJF1M4eH1KLAVcIOgmdl6YD3A\nCSesiTixQTDgDPgZK2b2NeBrvfTRamTG0kPrKmCDmV2d09bMLjOzZ5nZi4CHgG+2McYgCPrPoMUK\ncMIGdl7thA2cLGV0rMuAbWb2/km0P8rM7pd0LMX56vPqtBurkU6573ma61R85UTSUBdXa5ywCK5r\nAZDS9Odk5myLullLwb8XnoY6FdjbswDwXGohYZmQONibM6eqfk+tuduvp6pPDGy+40e8a8SPVJeT\nEdUbV+q5y7FoaUu49UNo1rVAgubDBra5Yz2JIpDLyZK2lq91kl4p6V7g+cD1km4EkLRc0g1d7a+S\ndDeFPdlbzCzD6z8IgkGlj4GuOxZIX52ooqRnSzqm6/1vSrpW0qVtJROcFGZ2C49PyNXNNU79+yiU\nVJ33/7GloQVBMIX0yyrAzLbBhBZIHT4CnFrWfxHwJ8BbgRModDhn5lw7PK+CIOg7GbvRpZK6v8Kv\nLxXWTTNkZh0Xlv9aXucqim/OtV1ZO4RgDYKg72QI1h1mtib1R0lfBI5x/nSRmV3rlKcYkjTbzEaA\nUyhNOEuy5eSMEqzeV4yUu6CnINlRiT5bkBMjNcd11Bub58aYegg95UTOuFJr06siJBXn1VPMefch\npbzylF+eWzDA8Oyq5d2evfXDCKeUnq6eatbhlbLDEy6t7qInFGULnaSyOUq11NdtT7mYqjv2W3QT\nSqcmza3M7NRmeuIKiozUOyhs5/8fgKQnAY/kdjajBGsQBNODQbNjNbP3SfoS8ETgJrOfhz+fRXHW\nmkUI1iAI+kq/lFeSXgn8BbCMwgJpq5n9enpcdqtTNin7+RCsQRD0lX55XpnZNTgWSP0gBGsQBH1n\n0I4CmiYEaxAEfScE6zRj7A3LuYEpDbOnRfW09+Brz1Nabq98seNQl6ORT43Ly0SaCprsnX+lLAi8\nfnPw7s8+FaKMAAAOu0lEQVSBatxowF+v5P11/jB7tr+QvQYB96xJDj+qvslFyn5do1Wf5Vmz/Dl4\nVhAp/xzvXqbco3u9v6k+Q7AGQRA0TAjWIAiCBhnwQNeNEII1CIK+EzvWIAiCBokz1mlGzlcML1xm\nzteTlJLIe2ByXDR7JXUtb25NfB3L+Qep6xqcWlsvLu6Qn1iCnz1cVfLkuIOm7o2nSDziCL+ui7Po\ni+b7mrKf7qheLKXYW7asqqhK3Zscl+W2vrKHYA2CIGiQ2LEGQRC0QAjWIAiCBgmrgCAIghaY6TvW\n1nJeSVol6WZJd0u6S9J5ZflryvejksYLYPu2st6dkq6Q1IKqJwiCftPHnFdTRps71hHgAjPbImkx\nsFnSRn6R4OsjqYaSVgC/DzzVzPZI+ixwFvDxiS469makvnLkZDjN0Rp7dRfP2efW3b1vbqUsJ9C1\nR8r11COlfffWJjWGHHfQuu1Tmm+/X/9iOcHJPVLPjWd1MX9e1e/z4Gj13oI/35GEtYJXN+Vi6t33\n1Bxy6rbFdBaadWgzmeB2YHv5+y5J24AVZrYRaiX4mg3Ml3QAWADc19ZYgyDoLyFYG0DSauBEYFOd\n+mb2Y0l/CvyQIk3CTWZ2U6Lvcynz06xYcWwTww2CoEUOBeVVa2esHSQtAq4CzjeznTXbHAmcARwH\nLAcWSnq9V9fM1pvZGjNbs2TJsqaGHQRBSxwKZ6ytClZJwxRCdYOZXZ3R9FTge2b2gJkdAK4GXtDG\nGIMg6D8zXbC2dhSg4hD1MmCbmb0/s/kPgedJWkBxFHAKcNv4TXxy3PqawL1e4nvP/PlVBYfnojn7\nsEQMTkf59NBD9ceV83WsV4VUTt3UtURVc2MZMUeb+Prpugw76Wcfwwmsiz/f1Hp510opTb0MuKl+\nPdfelMKwLeE2nYVmHdrcsZ4EnA2cLGlr+Von6ZWS7gWeT5Hg60YAScsl3QBgZpuAK4EtwB3lONe3\nONYgCPrEoXAU0KZVwC2kQpg7Cb7M7D5gXdf7dwPvbmd0QRBMJdNZaNYhPK+CIOgrh4JVQAjWIAj6\nTuxYZyieciPlteQpEVKxPb26B+YsdOuOOp/aD+6sKqpyHsK2FFI5pPr1yr01X7DAb79rd/2Yo73+\n4+b0O+RMIvWPlXN/vHVIre1Pf1otS3lp5SjQ6vaZQ4QNDIIgaIEQrEEQBA0SO9YgCIIWCMEaBEHQ\nIP2yCpB0CfByYD/wHeANZvZw+1fuQ6yAIAiCsfTJQWAj8DQzOx74JnBhzz3W5JDdsebE6/TKU9lQ\nvfIdO+qPK2Vt4NGWVj+HnHX0LAC89UpZBXjrmIqru9AxxEiNa64fOtVlmKrv5x7mV8oee8xv36tL\na6qul2W1CQuRNr6y9+uMdUxEvFuBM9u/asEhK1iDIJg6puCM9Y3AZ/p1sRCsQRD0nQzBulRSdwCm\n9Wb287ghkr4IHOO0u8jMri3rXESR0WTD5EabTwjWIAj6SqbyaoeZJXPjmdmp4zWWdA5wOnCKWRPu\nDfUIwRoEQV/p1xmrpLXA24EXm1ni1LsdDlnB6ilSUgf43qdrjstj6tN54rRf4zMItoC9jiFnbXPu\nWUoB5jF3lhOMNNHxnv3VILg7a+XFGLfb2qSUdV6/vT5fbdKnZ/dDwFxgY5lj71Yze1M/LnzICtYg\nCKaGPloFPKn9q/iEYA2CoO8MwretNgnBGgRB3wnBGgRB0CCHQqDr1nx3JK2SdLOkuyXdJem8svw1\n5ftRSa4ZhaSndOXJ2ippp6Tz2xprEAT9I3Je9cYIcIGZbZG0GNgsaSNwJ/Aq4COphmb278AJAJKG\ngB/j5MnqhZRLqkeOpj/nk9jT8OY8TIPg0urR67hyrAJSLsBzZ1cX12b52W7Z69y0xANS1705FTQ9\nlWXV48EHq2U5mVdT9PKMNWVpMJ2FZh3aTCa4Hdhe/r5L0jZghZltBFD9O3QK8B0z+0ErAw2CoO+E\nYG0ASauBE4FNk2h+FnDFOH2fC5wLsGLFsZPoPgiCfnIoBLpu/cukpEXAVcD5ZpZhSg2S5gCvAP4+\nVcfM1pvZGjNbs2TJst4GGwRBX4gz1h6QNEwhVDeY2dWT6OJlwBYzc1KlBUEwHTkUrAJaE6wqDlEv\nA7aZ2fsn2c1rGecYoBdysrTu21e/bo4SwSNH8dOroqstRVlKMejFSB2ueoiye3f9a6WUQUlFlYMX\nT3V/Ygze3HLi9Q7PqirVDuKPNUdZl3N/B0HpOZ13o3Voc4lPAs4GTu4ym1on6ZWS7gWeD1wv6UYA\nScsl3dBpLGkhcBowmZ1uEAQDSphb9YCZ3QKkVP8V0ykzuw9Y1/X+UeAJ7YwuCIKpZDoLzTqE51UQ\nBH3lULAKCMEaBEHfCeVVEARBg8SOdZohVbXEKe29l0Uzla0zFVzYw9O4psZQ91M7R7vblqY/p25q\nvt765ow3K4g41Swcljjyz3EznT+v2u/s2dV+h2cnsoDsdwY827cKyMmA2yt1M+uGS2s9ZpRgDYJg\n8IkdaxAEQQuEYA2CIGiYEKxBEAQNEi6t0wypegif+mT0XA5TyqucT9e9e6tlOQoHT1GWat/P2K05\nSouU8sor9+aQug8enksswAM76g94yZJqWWoO7NhRHYM3iaVL3eY/212dXErIHHCSxzZBW0rLusQZ\naxAEQQuEYA2CIGiYEKxBEAQNEkcBQRAELRCCNQiCoEHCKmCaMWsWzK/GLHZ5+OH6/Q45Hoep63h1\new1e3URGWM8KImfXkHL79OZ2+GG+O+cjO6uaem8OqXl510ppzj2tfuo+DO19tFrmV4VFi6plzkIe\nGPV7yFlzz+IhNYecdcxZmwULHv/ee74nQ+xYgyAIGiTOWIMgCFqgH4JV0nuBM4BR4H7gnDKgfusM\nQPabIAgOJfqYmuUSMzvezE4ArgP+oOceaxI71iAI+k4/lFdmtrPr7UJwYkm2hMz6dq3WkfQA8INx\nqiwFqj6J05+Y1/Rjus7tl8xsWS8dSPoCxfzrMA/odhRfb2brM671PuA3gUeAl5rZA7UH2gMzSrBO\nhKTbzGzNVI+jaWJe04+ZPLd+IumLwDHOny4ys2u76l0IzDOzd/djXHEUEATBtMXMTq1ZdQNwA9AX\nwRrKqyAIZiSSntz19gzgnn5d+1DbsdY+m5lmxLymHzN5boPCn0h6CoW51Q+AN/XrwofUGWsQBEE/\niKOAIAiChgnBGgRB0DAzQrBKepukuyTdKekKSfO6/naBJJPk2s1JWivp3yV9W9I7+zfqenhzk/Re\nSbdL2irpJknL67bt9/hT9DivIyRdKekeSdskPb/f40/Ry7zK9kOSvi7pun6OO2gYM5vWL2AF8D1g\nfvn+sxQ+wQCrgBspDq6XOm2HgO8AvwzMAb4BPHWq5zTR3IDDuur8PvDhnHWZ6lcv8yr/djnw2+Xv\nc4AjpnpOTcyr/Pv/BD4FXDfV84nX5F8zYsdKYd0wX9JsYAHQCbTw58DbSbuyPQf4tpl918z2A5+m\nMMsYJCpzs/queql1GQQmNS9JhwMvAi4DMLP9ZpYRBLJ1Jn2/JK0EfgP4aOujDFpl2gtWM/sx8KfA\nD4HtwCNmdpOkM4Afm9k3xmm+AvhR1/t7y7KBIDU3KFz1JP0IeB1OcInx2k41vcwLOA54APjb8ivz\nRyUt7NPQx6XHeQF8gGIjMMOD6s18pr1glXQkxS7zOGA5sFDSbwLvoo/RbNogMbfXA5jZRWa2isKj\n5Pdy2k41vcyLYkf4TOCvzexE4FFgIM7Ge7xfpwP3m9nmPg45aIlpL1iBU4HvmdkDZnYAuBp4A8XD\n/Q1J3wdWAlskjfUp/jHFOWyHlWXZoODN7QVj6mwAXj3JtlNFL/O6F7jXzDaV76+kELSDQC/zOgl4\nRfm8fho4WdIn2xxs0B4zQbD+EHiepAWSBJwCXG1mR5nZajNbTfHP+Ewz+8mYtl8DnizpOElzgLOA\nz/dz8BPgzW1bTVc9t23rI67HpOdV3sMflR41lG3vbnvANellXhea2cryeT0L+CczG4hvGEE+096l\n1cw2SboS2AKMAF9nHHfB0tTlo2a2zsxGJP0eheXAEPAxM7urH+Ouwzhz+5Tnqjdmblnr0k96mVfZ\nxVuBDeWH4XcpvqFMOQ3MK5ghhEtrEARBw8yEo4AgCIKBIgRrEARBw4RgDYIgaJgQrEEQBA0TgjUI\ngqBhQrAGSSQdLCMy3SnpHyQdMU7dE8ooYmsz+v+ApBc55S/pJbqTpC+WXlBBMCWEYA3GY4+ZnWBm\nTwMeBN4yTt3XAreUPydE0hOA55nZV3sfZoW/A97cQr9BUIsQrEFd/pVEgJrSy+g1FCHyTqsZ9/XV\nwBe6+lhbxlfdAryqq3yhpI9J+rcy6MoZZfkCSZ+VdLekayRtktRJJ/15agr4IGiDEKzBhEgaonDP\nTLn7voDCR/47wJcpQt9NxEnA5rL/ecDfAC8HnsXj88RfROHe+RzgpcAlZTSrNwMPmdlTgf9dtgPA\nzB4C5pa74iDoOyFYg/GYL2kr8BPgaGBjot5rKQKHUP6ss1t8IkX4P4BfpRDM37LCFbA7+Mh/At5Z\njuPLwDzgWOCFnWua2Z3A7WP6v58iwlQQ9J1pHysgaJU9ZnaCpAUU8RTeAnywu0K5m301cIakiwAB\nT5C02Mx2jdc3hZCcCAGvNrN/H3PdidrNK68RBH0ndqzBhJjZYxQpRS4oI+N3cwpwu5mtKqOJ/RJw\nFfDKCbrdBjyp/P0eYLWkXynfd+94bwTeWp7jIunEsvyfgf9Slj0VeHqnQVn3GOD7tScZBA0SgjWo\nhZl9neLr9msByq/mlO+vGVP9qq56NySS510PvKTsey9wLnB9qby6v6vee4Fh4HZJd5XvAf4KWCbp\nbuCPgLuAR8q/PQu41cxGJjXZIOiRiG4VTBmSbgFOn0zOqvIIYtjM9pY73S8CTzGz/ZIuBT5vZl9q\neMhBUIs4Yw2mkgsoFFGTSQa4ALhZ0jDFOeyby4SQAHeGUA2mktixBkEQNEycsQZBEDRMCNYgCIKG\nCcEaBEHQMCFYgyAIGiYEaxAEQcP8fylbjMqvtib2AAAAAElFTkSuQmCC\n", | |
| 604 | + "text/plain": [ | |
| 605 | + "<matplotlib.figure.Figure at 0x10af94278>" | |
| 606 | + ] | |
| 607 | + }, | |
| 608 | + "metadata": {}, | |
| 609 | + "output_type": "display_data" | |
| 610 | + }, | |
| 611 | + { | |
| 612 | + "data": { | |
| 613 | + "image/png": "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\n", | |
| 614 | + "text/plain": [ | |
| 615 | + "<matplotlib.figure.Figure at 0x10b67b940>" | |
| 616 | + ] | |
| 617 | + }, | |
| 618 | + "metadata": {}, | |
| 619 | + "output_type": "display_data" | |
| 620 | + } | |
| 621 | + ], | |
| 622 | + "source": [ | |
| 623 | + "resmap_erange([[emin,1.],\n", | |
| 624 | + " [1.,10.],\n", | |
| 625 | + " [10.,emax]])" | |
| 626 | + ] | |
| 627 | + }, | |
| 628 | + { | |
| 629 | + "cell_type": "markdown", | |
| 630 | + "metadata": {}, | |
| 631 | + "source": [ | |
| 632 | + "The most obvious problem is a negative residual cluster at the position of the Crab nebula at the highest energies. We will change the spectral model of the crab nebula and test if this improves the fit. We will use an exponentially cutoff power-law rather than a simple power law. We will use as starting values for the Prefactor and Index the current best-fit values and tentatively set the cutoff energy at 1 TeV." | |
| 633 | + ] | |
| 634 | + }, | |
| 635 | + { | |
| 636 | + "cell_type": "code", | |
| 637 | + "execution_count": 51, | |
| 638 | + "metadata": { | |
| 639 | + "collapsed": true | |
| 640 | + }, | |
| 641 | + "outputs": [], | |
| 642 | + "source": [ | |
| 643 | + "crab = like.obs().models()['Crab']\n", | |
| 644 | + "\n", | |
| 645 | + "expplaw = gammalib.GModelSpectralExpPlaw()\n", | |
| 646 | + "\n", | |
| 647 | + "expplaw['Prefactor'].value(crab['Prefactor'].value())\n", | |
| 648 | + "expplaw['Index'].value(crab['Index'].value())\n", | |
| 649 | + "expplaw['PivotEnergy'].value(crab['PivotEnergy'].value())\n", | |
| 650 | + "expplaw['CutoffEnergy'].value(1.e6)\n", | |
| 651 | + "\n", | |
| 652 | + "crab.spectral(expplaw)" | |
| 653 | + ] | |
| 654 | + }, | |
| 655 | + { | |
| 656 | + "cell_type": "markdown", | |
| 657 | + "metadata": {}, | |
| 658 | + "source": [ | |
| 659 | + "We will now fit the modified model to the data" | |
| 660 | + ] | |
| 661 | + }, | |
| 662 | + { | |
| 663 | + "cell_type": "code", | |
| 664 | + "execution_count": 52, | |
| 665 | + "metadata": { | |
| 666 | + "collapsed": true | |
| 667 | + }, | |
| 668 | + "outputs": [], | |
| 669 | + "source": [ | |
| 670 | + "like.run()" | |
| 671 | + ] | |
| 672 | + }, | |
| 673 | + { | |
| 674 | + "cell_type": "markdown", | |
| 675 | + "metadata": {}, | |
| 676 | + "source": [ | |
| 677 | + "and use TS to quantify the model improvement (in this case we have only one additional degree of freedom, the ctuoff energy)." | |
| 678 | + ] | |
| 679 | + }, | |
| 680 | + { | |
| 681 | + "cell_type": "code", | |
| 682 | + "execution_count": 53, | |
| 683 | + "metadata": {}, | |
| 684 | + "outputs": [ | |
| 685 | + { | |
| 686 | + "name": "stdout", | |
| 687 | + "output_type": "stream", | |
| 688 | + "text": [ | |
| 689 | + "310.5695030956995\n" | |
| 690 | + ] | |
| 691 | + } | |
| 692 | + ], | |
| 693 | + "source": [ | |
| 694 | + "like3 = like.opt().value()\n", | |
| 695 | + "\n", | |
| 696 | + "ts = -2 * (like3 - like2)\n", | |
| 697 | + "print(ts)" | |
| 698 | + ] | |
| 699 | + }, | |
| 700 | + { | |
| 701 | + "cell_type": "markdown", | |
| 702 | + "metadata": {}, | |
| 703 | + "source": [ | |
| 704 | + "The model improvement was again significant. Let's look at the fit results for the Crab nebula." | |
| 705 | + ] | |
| 706 | + }, | |
| 707 | + { | |
| 708 | + "cell_type": "code", | |
| 709 | + "execution_count": 54, | |
| 710 | + "metadata": {}, | |
| 711 | + "outputs": [ | |
| 712 | + { | |
| 713 | + "name": "stdout", | |
| 714 | + "output_type": "stream", | |
| 715 | + "text": [ | |
| 716 | + "=== GModelSky ===\n", | |
| 717 | + " Name ......................: Crab\n", | |
| 718 | + " Instruments ...............: all\n", | |
| 719 | + " Instrument scale factors ..: unity\n", | |
| 720 | + " Observation identifiers ...: all\n", | |
| 721 | + " Model type ................: PointSource\n", | |
| 722 | + " Model components ..........: \"PointSource\" * \"ExponentialCutoffPowerLaw\" * \"Constant\"\n", | |
| 723 | + " Number of parameters ......: 7\n", | |
| 724 | + " Number of spatial par's ...: 2\n", | |
| 725 | + " RA .......................: 83.6331 [-360,360] deg (fixed,scale=1)\n", | |
| 726 | + " DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1)\n", | |
| 727 | + " Number of spectral par's ..: 4\n", | |
| 728 | + " Prefactor ................: 3.58899978654062e-16 +/- 7.19484631702262e-18 [0,infty[ ph/cm2/s/MeV (free,scale=1,gradient)\n", | |
| 729 | + " Index ....................: -1.83073898300316 +/- 0.0225679479297 [-10,10] (free,scale=1,gradient)\n", | |
| 730 | + " CutoffEnergy .............: 3269842.84729316 +/- 121006.120369777 [0.1,infty[ MeV (free,scale=1,gradient)\n", | |
| 731 | + " PivotEnergy ..............: 300000 MeV (fixed,scale=1,gradient)\n", | |
| 732 | + " Number of temporal par's ..: 1\n", | |
| 733 | + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n" | |
| 734 | + ] | |
| 735 | + } | |
| 736 | + ], | |
| 737 | + "source": [ | |
| 738 | + "print(crab)" | |
| 739 | + ] | |
| 740 | + }, | |
| 741 | + { | |
| 742 | + "cell_type": "markdown", | |
| 743 | + "metadata": {}, | |
| 744 | + "source": [ | |
| 745 | + "The best-fit cutoff energy is 3.3 TeV, which seems consistent with the behavior in the energy-bands residual maps above. Note that this has changed significantly the Index value, that now is 1.83. We will check the residual maps again to make sure." | |
| 746 | + ] | |
| 747 | + }, | |
| 748 | + { | |
| 749 | + "cell_type": "code", | |
| 750 | + "execution_count": 55, | |
| 751 | + "metadata": {}, | |
| 752 | + "outputs": [ | |
| 753 | + { | |
| 754 | + "data": { | |
| 755 | + "image/png": "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\n", | |
| 756 | + "text/plain": [ | |
| 757 | + "<matplotlib.figure.Figure at 0x10ea2fe80>" | |
| 758 | + ] | |
| 759 | + }, | |
| 760 | + "metadata": {}, | |
| 761 | + "output_type": "display_data" | |
| 762 | + }, | |
| 763 | + { | |
| 764 | + "data": { | |
| 765 | + "image/png": "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\n", | |
| 766 | + "text/plain": [ | |
| 767 | + "<matplotlib.figure.Figure at 0x10ec15518>" | |
| 768 | + ] | |
| 769 | + }, | |
| 770 | + "metadata": {}, | |
| 771 | + "output_type": "display_data" | |
| 772 | + }, | |
| 773 | + { | |
| 774 | + "data": { | |
| 775 | + "image/png": "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\nAAAAAElFTkSuQmCC\n", | |
| 776 | + "text/plain": [ | |
| 777 | + "<matplotlib.figure.Figure at 0x10e47c7b8>" | |
| 778 | + ] | |
| 779 | + }, | |
| 780 | + "metadata": {}, | |
| 781 | + "output_type": "display_data" | |
| 782 | + } | |
| 783 | + ], | |
| 784 | + "source": [ | |
| 785 | + "resmap_erange([[emin,1.],\n", | |
| 786 | + " [1.,10.],\n", | |
| 787 | + " [10.,emax]])" | |
| 788 | + ] | |
| 789 | + }, | |
| 790 | + { | |
| 791 | + "cell_type": "markdown", | |
| 792 | + "metadata": {}, | |
| 793 | + "source": [ | |
| 794 | + "Now we actually have an excess at the highest energies. In spite of the significant likelihood improvement the model is not quite perfect yet. Is there perhaps a new spectral component appearing at high energies? We will test if the addition of a power-law spectral component with a hard index (2). It will be added to the exponentially-cutoff power law in a composite spectral model." | |
| 795 | + ] | |
| 796 | + }, | |
| 797 | + { | |
| 798 | + "cell_type": "code", | |
| 799 | + "execution_count": 56, | |
| 800 | + "metadata": { | |
| 801 | + "collapsed": true | |
| 802 | + }, | |
| 803 | + "outputs": [], | |
| 804 | + "source": [ | |
| 805 | + "expplaw2 = like.obs().models()['Crab'].spectral().clone() \n", | |
| 806 | + "\n", | |
| 807 | + "newcomp = gammalib.GModelSpectralPlaw(1.e-18,-2.,gammalib.GEnergy(1,'TeV'))\n", | |
| 808 | + "\n", | |
| 809 | + "comp_spec = gammalib.GModelSpectralComposite()\n", | |
| 810 | + "comp_spec.append(expplaw2)\n", | |
| 811 | + "comp_spec.append(newcomp)\n", | |
| 812 | + "\n", | |
| 813 | + "like.obs().models()['Crab'].spectral(comp_spec)" | |
| 814 | + ] | |
| 815 | + }, | |
| 816 | + { | |
| 817 | + "cell_type": "markdown", | |
| 818 | + "metadata": {}, | |
| 819 | + "source": [ | |
| 820 | + "Let's fit this new model to the data and check the likelihood improvement." | |
| 821 | + ] | |
| 822 | + }, | |
| 823 | + { | |
| 824 | + "cell_type": "code", | |
| 825 | + "execution_count": 57, | |
| 826 | + "metadata": {}, | |
| 827 | + "outputs": [ | |
| 828 | + { | |
| 829 | + "name": "stdout", | |
| 830 | + "output_type": "stream", | |
| 831 | + "text": [ | |
| 832 | + "305.8644116757205\n" | |
| 833 | + ] | |
| 834 | + } | |
| 835 | + ], | |
| 836 | + "source": [ | |
| 837 | + "like.run()\n", | |
| 838 | + "\n", | |
| 839 | + "like4 = like.opt().value()\n", | |
| 840 | + "ts = -2 * (like4 - like3)\n", | |
| 841 | + "print(ts)" | |
| 842 | + ] | |
| 843 | + }, | |
| 844 | + { | |
| 845 | + "cell_type": "markdown", | |
| 846 | + "metadata": {}, | |
| 847 | + "source": [ | |
| 848 | + "The likelihood improvement is again significant, but did we already find the best possible model of the sky?" | |
| 849 | + ] | |
| 850 | + }, | |
| 851 | + { | |
| 852 | + "cell_type": "markdown", | |
| 853 | + "metadata": {}, | |
| 854 | + "source": [ | |
| 855 | + "## Exercises \n", | |
| 856 | + "\n", | |
| 857 | + "- Test other spectral models for the Crab nebula, such as log-parabola and broken power law. Can you say what the best spectral model is?\n", | |
| 858 | + "- What can you say from the residual maps about the spectrum of Src1? Try looking at the residuals below and above 300 GeV.\n", | |
| 859 | + "- Replace the 2 sources with a single extended source (disk). Can you say which of the two hypotheses is describing the data better?" | |
| 860 | + ] | |
| 861 | + } | |
| 862 | + ], | |
| 863 | + "metadata": { | |
| 864 | + "kernelspec": { | |
| 865 | + "display_name": "Python 3", | |
| 866 | + "language": "python", | |
| 867 | + "name": "python3" | |
| 868 | + }, | |
| 869 | + "language_info": { | |
| 870 | + "codemirror_mode": { | |
| 871 | + "name": "ipython", | |
| 872 | + "version": 3 | |
| 873 | + }, | |
| 874 | + "file_extension": ".py", | |
| 875 | + "mimetype": "text/x-python", | |
| 876 | + "name": "python", | |
| 877 | + "nbconvert_exporter": "python", | |
| 878 | + "pygments_lexer": "ipython3", | |
| 879 | + "version": "3.6.2" | |
| 880 | + } | |
| 881 | + }, | |
| 882 | + "nbformat": 4, | |
| 883 | + "nbformat_minor": 2 | |
| 884 | +} | ... | ... |
doc/source/users/tutorials/beyond/beyond_combine.rst deleted
| 1 | -.. _sec_combining_obs: | |
| 2 | - | |
| 3 | -Combining observations | |
| 4 | -~~~~~~~~~~~~~~~~~~~~~~ | |
| 5 | - | |
| 6 | -Generally, the CTA data you may want to analyse will not only be composed of | |
| 7 | -a single observation (a.k.a. run) but of a list of observations that should | |
| 8 | -be combined in a joint analysis. | |
| 9 | -ctools has the capability to collect individual observations in a list and | |
| 10 | -to perform for example a joint maximum likelihood fit of all observations | |
| 11 | -in a single shot. | |
| 12 | -Here is an example that illustrates how to do that. | |
| 13 | - | |
| 14 | -Let's start with the simulation of two 30 min long observations of the Crab | |
| 15 | -nebula, each offset by 0.5° from the nebula in opposite directions: | |
| 16 | - | |
| 17 | -.. code-block:: bash | |
| 18 | - | |
| 19 | - $ ctobssim | |
| 20 | - RA of pointing (degrees) (0-360) [83.63] | |
| 21 | - Dec of pointing (degrees) (-90-90) [22.01] 21.51 | |
| 22 | - Radius of FOV (degrees) (0-180) [5.0] | |
| 23 | - Start time (MET in s) [0.0] | |
| 24 | - End time (MET in s) [1800.0] | |
| 25 | - Lower energy limit (TeV) [0.1] | |
| 26 | - Upper energy limit (TeV) [100.0] | |
| 27 | - Calibration database [prod2] | |
| 28 | - Instrument response function [South_0.5h] | |
| 29 | - Input model XML file [$CTOOLS/share/models/crab.xml] | |
| 30 | - Output event data file or observation definition XML file [events.fits] events1.fits | |
| 31 | - | |
| 32 | -.. code-block:: bash | |
| 33 | - | |
| 34 | - $ ctobssim | |
| 35 | - RA of pointing (degrees) (0-360) [83.63] | |
| 36 | - Dec of pointing (degrees) (-90-90) [21.51] 22.51 | |
| 37 | - Radius of FOV (degrees) (0-180) [5.0] | |
| 38 | - Start time (MET in s) [0.0] | |
| 39 | - End time (MET in s) [1800.0] | |
| 40 | - Lower energy limit (TeV) [0.1] | |
| 41 | - Upper energy limit (TeV) [100.0] | |
| 42 | - Calibration database [prod2] | |
| 43 | - Instrument response function [South_0.5h] | |
| 44 | - Input model XML file [$CTOOLS/share/models/crab.xml] | |
| 45 | - Output event data file or observation definition XML file [events1.fits] events2.fits | |
| 46 | - | |
| 47 | -This will produce the two event files ``events1.fits`` and ``events2.fits`` | |
| 48 | -on disk. | |
| 49 | - | |
| 50 | -As next step you have to create an **observation definition XML file** that | |
| 51 | -collects both observations in a list. | |
| 52 | -Here is how that file looks like: | |
| 53 | - | |
| 54 | -.. code-block:: xml | |
| 55 | - | |
| 56 | - <?xml version="1.0" standalone="no"?> | |
| 57 | - <observation_list title="observation library"> | |
| 58 | - <observation name="Crab" id="00001" instrument="CTA"> | |
| 59 | - <parameter name="EventList" file="events1.fits"/> | |
| 60 | - </observation> | |
| 61 | - <observation name="Crab" id="00002" instrument="CTA"> | |
| 62 | - <parameter name="EventList" file="events2.fits"/> | |
| 63 | - </observation> | |
| 64 | - </observation_list> | |
| 65 | - | |
| 66 | -The file contains a single ``<observation_list>`` tag that contains | |
| 67 | -two ``<observation>`` tags that each define an observation. | |
| 68 | -Each observation has a ``name``, an ``id`` and an ``instrument`` | |
| 69 | -attribute. | |
| 70 | -The ``name`` attribute can have any arbitrary value, and may be the | |
| 71 | -same for all observations. | |
| 72 | -**However, the** ``id`` **attribute needs to be a unique character | |
| 73 | -string for any given instrument.** | |
| 74 | -The ``instrument`` attribute is a case-sensitive string that identifies | |
| 75 | -the instrument with which the observation was taken. | |
| 76 | -**Please make sure that the instrument string is set correctly so that | |
| 77 | -ctools knows which instrument specific functions need to be called.** | |
| 78 | - | |
| 79 | -.. note:: | |
| 80 | - | |
| 81 | - The instrument string for a CTA observation is obviously ``CTA``. | |
| 82 | - In case that you want to analyse data from an existing Imaging Air | |
| 83 | - Cherenkov Telescope you can also set the instrument string to ``HESS``, | |
| 84 | - ``MAGIC``, or ``VERITAS``. You may also combine observations from different | |
| 85 | - telescopes for a joint analysis in an observation definition file. | |
| 86 | - **Please recall that instrument strings are case sensitive.** | |
| 87 | - | |
| 88 | -Now you are ready to do a joint maximum likelihood analysis using | |
| 89 | -:ref:`ctlike`. Type: | |
| 90 | - | |
| 91 | -.. code-block:: bash | |
| 92 | - | |
| 93 | - $ ctlike chatter=3 | |
| 94 | - Input event list, counts cube or observation definition XML file [events.fits] obs.xml | |
| 95 | - Calibration database [prod2] | |
| 96 | - Instrument response function [South_0.5h] | |
| 97 | - Input model XML file [$CTOOLS/share/models/crab.xml] | |
| 98 | - Output model XML file [crab_results.xml] | |
| 99 | - | |
| 100 | -Instead of providing an event list or a counts cube, you now provide the | |
| 101 | -filename of the observation definition XML file (here ``obs.xml``) as input | |
| 102 | -parameter. :ref:`ctlike` recognises this format and automatically performs a | |
| 103 | -joint maximum likelihood analysis. To see the result of this you needed to | |
| 104 | -specify the ``chatter=3`` parameter so that the chattiness is increased in | |
| 105 | -the log file: | |
| 106 | - | |
| 107 | -.. code-block:: none | |
| 108 | - | |
| 109 | - 2016-06-29T19:14:38: +==============+ | |
| 110 | - 2016-06-29T19:14:38: | Observations | | |
| 111 | - 2016-06-29T19:14:38: +==============+ | |
| 112 | - 2016-06-29T19:14:38: === GObservations === | |
| 113 | - 2016-06-29T19:14:38: Number of observations ....: 2 | |
| 114 | - 2016-06-29T19:14:38: Number of models ..........: 2 | |
| 115 | - 2016-06-29T19:14:38: Number of observed events .: 46028 | |
| 116 | - 2016-06-29T19:14:38: Number of predicted events : 0 | |
| 117 | - 2016-06-29T19:14:38: === GCTAObservation === | |
| 118 | - 2016-06-29T19:14:38: Name ......................: Crab | |
| 119 | - 2016-06-29T19:14:38: Identifier ................: 00001 | |
| 120 | - 2016-06-29T19:14:38: Instrument ................: CTA | |
| 121 | - 2016-06-29T19:14:38: Event file ................: events1.fits | |
| 122 | - 2016-06-29T19:14:38: Event type ................: EventList | |
| 123 | - 2016-06-29T19:14:38: Statistics ................: Poisson | |
| 124 | - 2016-06-29T19:14:38: Ontime ....................: 1800 s | |
| 125 | - 2016-06-29T19:14:38: Livetime ..................: 1710 s | |
| 126 | - 2016-06-29T19:14:38: Deadtime correction .......: 0.95 | |
| 127 | - 2016-06-29T19:14:38: User energy range .........: undefined | |
| 128 | - 2016-06-29T19:14:38: === GCTAPointing === | |
| 129 | - 2016-06-29T19:14:38: Pointing direction ........: (RA,Dec)=(83.63,21.51) | |
| 130 | - 2016-06-29T19:14:38: === GCTAResponseIrf === | |
| 131 | - 2016-06-29T19:14:38: Caldb mission .............: cta | |
| 132 | - 2016-06-29T19:14:38: Caldb instrument ..........: prod2 | |
| 133 | - 2016-06-29T19:14:38: Response name .............: South_0.5h | |
| 134 | - 2016-06-29T19:14:38: Energy dispersion .........: Not used | |
| 135 | - 2016-06-29T19:14:38: Save energy range .........: undefined | |
| 136 | - 2016-06-29T19:14:38: === GCTAEventList === | |
| 137 | - 2016-06-29T19:14:38: Number of events ..........: 23014 (disposed in "events1.fits") | |
| 138 | - 2016-06-29T19:14:38: Time interval .............: 51544.5 - 51544.5 days | |
| 139 | - 2016-06-29T19:14:38: Energy interval ...........: 0.1 - 100 TeV | |
| 140 | - 2016-06-29T19:14:38: Region of interest ........: RA=83.63, DEC=21.51 [0,0] Radius=5 deg | |
| 141 | - 2016-06-29T19:14:38: === GCTAObservation === | |
| 142 | - 2016-06-29T19:14:38: Name ......................: Crab | |
| 143 | - 2016-06-29T19:14:38: Identifier ................: 00002 | |
| 144 | - 2016-06-29T19:14:38: Instrument ................: CTA | |
| 145 | - 2016-06-29T19:14:38: Event file ................: events2.fits | |
| 146 | - 2016-06-29T19:14:38: Event type ................: EventList | |
| 147 | - 2016-06-29T19:14:38: Statistics ................: Poisson | |
| 148 | - 2016-06-29T19:14:38: Ontime ....................: 1800 s | |
| 149 | - 2016-06-29T19:14:38: Livetime ..................: 1710 s | |
| 150 | - 2016-06-29T19:14:38: Deadtime correction .......: 0.95 | |
| 151 | - 2016-06-29T19:14:38: User energy range .........: undefined | |
| 152 | - 2016-06-29T19:14:38: === GCTAPointing === | |
| 153 | - 2016-06-29T19:14:38: Pointing direction ........: (RA,Dec)=(83.63,21.51) | |
| 154 | - 2016-06-29T19:14:38: === GCTAResponseIrf === | |
| 155 | - 2016-06-29T19:14:38: Caldb mission .............: cta | |
| 156 | - 2016-06-29T19:14:38: Caldb instrument ..........: prod2 | |
| 157 | - 2016-06-29T19:14:38: Response name .............: South_0.5h | |
| 158 | - 2016-06-29T19:14:38: Energy dispersion .........: Not used | |
| 159 | - 2016-06-29T19:14:38: Save energy range .........: undefined | |
| 160 | - 2016-06-29T19:14:38: === GCTAEventList === | |
| 161 | - 2016-06-29T19:14:38: Number of events ..........: 23014 (disposed in "events2.fits") | |
| 162 | - 2016-06-29T19:14:38: Time interval .............: 51544.5 - 51544.5 days | |
| 163 | - 2016-06-29T19:14:38: Energy interval ...........: 0.1 - 100 TeV | |
| 164 | - 2016-06-29T19:14:38: Region of interest ........: RA=83.63, DEC=21.51 [0,0] Radius=5 deg | |
| 165 | - 2016-06-29T19:14:38: | |
| 166 | - 2016-06-29T19:14:38: +=================================+ | |
| 167 | - 2016-06-29T19:14:38: | Maximum likelihood optimisation | | |
| 168 | - 2016-06-29T19:14:38: +=================================+ | |
| 169 | - 2016-06-29T19:14:38: >Iteration 0: -logL=309355.758, Lambda=1.0e-03 | |
| 170 | - 2016-06-29T19:14:38: >Iteration 1: -logL=309352.158, Lambda=1.0e-03, delta=3.600, max(|grad|)=7.976081 [Index:7] | |
| 171 | - 2016-06-29T19:14:38: >Iteration 2: -logL=309352.157, Lambda=1.0e-04, delta=0.001, max(|grad|)=0.033525 [Index:3] | |
| 172 | - ... | |
| 173 | - 2016-06-29T19:14:38: +=========================================+ | |
| 174 | - 2016-06-29T19:14:38: | Maximum likelihood optimisation results | | |
| 175 | - 2016-06-29T19:14:38: +=========================================+ | |
| 176 | - 2016-06-29T19:14:38: === GOptimizerLM === | |
| 177 | - 2016-06-29T19:14:38: Optimized function value ..: 309352.157 | |
| 178 | - 2016-06-29T19:14:38: Absolute precision ........: 0.005 | |
| 179 | - 2016-06-29T19:14:38: Acceptable value decrease .: 2 | |
| 180 | - 2016-06-29T19:14:38: Optimization status .......: converged | |
| 181 | - 2016-06-29T19:14:38: Number of parameters ......: 10 | |
| 182 | - 2016-06-29T19:14:38: Number of free parameters .: 4 | |
| 183 | - 2016-06-29T19:14:38: Number of iterations ......: 2 | |
| 184 | - 2016-06-29T19:14:38: Lambda ....................: 1e-05 | |
| 185 | - 2016-06-29T19:14:38: Maximum log likelihood ....: -309352.157 | |
| 186 | - 2016-06-29T19:14:38: Observed events (Nobs) ...: 46028.000 | |
| 187 | - 2016-06-29T19:14:38: Predicted events (Npred) ..: 46027.996 (Nobs - Npred = 0.00423575) | |
| 188 | - 2016-06-29T19:14:38: === GModels === | |
| 189 | - 2016-06-29T19:14:38: Number of models ..........: 2 | |
| 190 | - 2016-06-29T19:14:38: Number of parameters ......: 10 | |
| 191 | - 2016-06-29T19:14:38: === GModelSky === | |
| 192 | - 2016-06-29T19:14:38: Name ......................: Crab | |
| 193 | - 2016-06-29T19:14:38: Instruments ...............: all | |
| 194 | - 2016-06-29T19:14:38: Instrument scale factors ..: unity | |
| 195 | - 2016-06-29T19:14:38: Observation identifiers ...: all | |
| 196 | - 2016-06-29T19:14:38: Model type ................: PointSource | |
| 197 | - 2016-06-29T19:14:38: Model components ..........: "PointSource" * "PowerLaw" * "Constant" | |
| 198 | - 2016-06-29T19:14:38: Number of parameters ......: 6 | |
| 199 | - 2016-06-29T19:14:38: Number of spatial par's ...: 2 | |
| 200 | - 2016-06-29T19:14:38: RA .......................: 83.6331 [-360,360] deg (fixed,scale=1) | |
| 201 | - 2016-06-29T19:14:38: DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1) | |
| 202 | - 2016-06-29T19:14:38: Number of spectral par's ..: 3 | |
| 203 | - 2016-06-29T19:14:38: Prefactor ................: 5.7909e-16 +/- 7.3315e-18 [1e-23,1e-13] ph/cm2/s/MeV (free,scale=1e-16,gradient) | |
| 204 | - 2016-06-29T19:14:38: Index ....................: -2.47181 +/- 0.0109973 [-0,-5] (free,scale=-1,gradient) | |
| 205 | - 2016-06-29T19:14:38: PivotEnergy ..............: 300000 [10000,1e+09] MeV (fixed,scale=1e+06,gradient) | |
| 206 | - 2016-06-29T19:14:38: Number of temporal par's ..: 1 | |
| 207 | - 2016-06-29T19:14:38: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 208 | - 2016-06-29T19:14:38: === GCTAModelIrfBackground === | |
| 209 | - 2016-06-29T19:14:38: Name ......................: CTABackgroundModel | |
| 210 | - 2016-06-29T19:14:38: Instruments ...............: CTA | |
| 211 | - 2016-06-29T19:14:38: Instrument scale factors ..: unity | |
| 212 | - 2016-06-29T19:14:38: Observation identifiers ...: all | |
| 213 | - 2016-06-29T19:14:38: Model type ................: "PowerLaw" * "Constant" | |
| 214 | - 2016-06-29T19:14:38: Number of parameters ......: 4 | |
| 215 | - 2016-06-29T19:14:38: Number of spectral par's ..: 3 | |
| 216 | - 2016-06-29T19:14:38: Prefactor ................: 1.01608 +/- 0.0084739 [0.001,1000] ph/cm2/s/MeV (free,scale=1,gradient) | |
| 217 | - 2016-06-29T19:14:38: Index ....................: 0.00524546 +/- 0.00516392 [-5,5] (free,scale=1,gradient) | |
| 218 | - 2016-06-29T19:14:38: PivotEnergy ..............: 1e+06 [10000,1e+09] MeV (fixed,scale=1e+06,gradient) | |
| 219 | - 2016-06-29T19:14:38: Number of temporal par's ..: 1 | |
| 220 | - 2016-06-29T19:14:38: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 221 | - | |
| 222 | -The log file indicates that the fit converged quickly, the spectral | |
| 223 | -parameters of the Crab nebula have now been constrained using the events | |
| 224 | -from both observations. | |
| 225 | -The computation time increases roughly linearly with the number of | |
| 226 | -observations that are combined, although ctools implements parallel | |
| 227 | -multi-core processing which will spread the likelihood computation for | |
| 228 | -the different observations over all CPU cores that are available. | |
| 229 | -**Doing a joint unbinned analysis is thus an efficient solution if | |
| 230 | -data from multiple observations should be combined.** | |
| 231 | - | |
| 232 | -Combining observations is not limited to unbinned data (i.e. event lists) | |
| 233 | -but may also be applied to binned data (i.e. counts cubes). | |
| 234 | -Using :ref:`ctbin` you can create counts cubes from both event lists which | |
| 235 | -may then be combined in an observation definition XML file: | |
| 236 | - | |
| 237 | -.. code-block:: xml | |
| 238 | - | |
| 239 | - <?xml version="1.0" standalone="no"?> | |
| 240 | - <observation_list title="observation library"> | |
| 241 | - <observation name="Crab" id="00001" instrument="CTA"> | |
| 242 | - <parameter name="CountsCube" file="cntcube1.fits"/> | |
| 243 | - </observation> | |
| 244 | - <observation name="Crab" id="00002" instrument="CTA"> | |
| 245 | - <parameter name="CountsCube" file="cntcube2.fits"/> | |
| 246 | - </observation> | |
| 247 | - </observation_list> | |
| 248 | - | |
| 249 | -Feeding the observation definition XML file to :ref:`ctlike` will then | |
| 250 | -lead to a joint binned analysis. | |
| 251 | -In the joint binned analysis, the events of individual observations are | |
| 252 | -not combined, but are kept separate in distinct counts cubes. | |
| 253 | -This is not very efficient, as generally counts cubes for short duration | |
| 254 | -observations are only sparsly populated and the likelihood computation | |
| 255 | -has to loop over a hugh number of data space bins (though also here | |
| 256 | -:ref:`ctlike` benefits from multi-core parallel processing). | |
| 257 | -**Though possible, a joint binned analysis is thus not the recommended | |
| 258 | -method for combining observations.** | |
| 259 | -An alternative is to stack the events of all observations into a single | |
| 260 | -counts cube. | |
| 261 | -The :ref:`following section <sec_stacked>` describes how such a stacked | |
| 262 | -analysis is done with ctools. | |
| 263 | - | |
| 264 | -.. note:: | |
| 265 | - | |
| 266 | - Given that logic, unbinned and binned observations may also be combined | |
| 267 | - in a joint analysis, although this Use Case may be a bit academic: | |
| 268 | - | |
| 269 | - .. code-block:: xml | |
| 270 | - | |
| 271 | - <?xml version="1.0" standalone="no"?> | |
| 272 | - <observation_list title="observation library"> | |
| 273 | - <observation name="Crab" id="00001" instrument="CTA"> | |
| 274 | - <parameter name="EventList" file="events1.fits"/> | |
| 275 | - </observation> | |
| 276 | - <observation name="Crab" id="00002" instrument="CTA"> | |
| 277 | - <parameter name="CountsCube" file="cntcube2.fits"/> | |
| 278 | - </observation> | |
| 279 | - </observation_list> |
doc/source/users/tutorials/beyond/beyond_stacked.rst deleted
| 1 | -.. _sec_stacked: | |
| 2 | - | |
| 3 | -Performing a stacked analysis | |
| 4 | -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 5 | - | |
| 6 | -A stacked analysis is a binned analysis where all data from multiple | |
| 7 | -observations are stacked into a single counts cube. | |
| 8 | -The event stacking is done using the :ref:`ctbin` tool. | |
| 9 | -Instead of providing to :ref:`ctbin` an event list you should now | |
| 10 | -specify the observation definition XML file ``obs.xml`` on input. | |
| 11 | -:ref:`ctbin` will then loop over all observations and collect all events | |
| 12 | -into a single counts cube: | |
| 13 | - | |
| 14 | -.. code-block:: bash | |
| 15 | - | |
| 16 | - $ ctbin | |
| 17 | - Input event list or observation definition XML file [events.fits] obs.xml | |
| 18 | - First coordinate of image center in degrees (RA or galactic l) (0-360) [83.63] | |
| 19 | - Second coordinate of image center in degrees (DEC or galactic b) (-90-90) [22.01] | |
| 20 | - Projection method (AIT|AZP|CAR|MER|MOL|STG|TAN) [CAR] | |
| 21 | - Coordinate system (CEL - celestial, GAL - galactic) (CEL|GAL) [CEL] | |
| 22 | - Image scale (in degrees/pixel) [0.02] | |
| 23 | - Size of the X axis in pixels [200] | |
| 24 | - Size of the Y axis in pixels [200] | |
| 25 | - Algorithm for defining energy bins (FILE|LIN|LOG) [LOG] | |
| 26 | - Start value for first energy bin in TeV [0.1] | |
| 27 | - Stop value for last energy bin in TeV [100.0] | |
| 28 | - Number of energy bins [20] | |
| 29 | - Output counts cube file [cntcube.fits] | |
| 30 | - | |
| 31 | -You now have a stacked counts cube ``cntcube.fits`` on disk. | |
| 32 | -Before you can use that counts cube in a maximum likelihood analysis, you have | |
| 33 | -to compute the instrument response function and the background model that is | |
| 34 | -needed for the analysis. | |
| 35 | - | |
| 36 | -For the instrument response function, you have to compute the total exposure | |
| 37 | -for the stacked cube (i.e. the sum of the effective areas for each observation | |
| 38 | -multiplied by the corresponding livetimes) and an effective point spread | |
| 39 | -function (i.e. the point spread function of the different observations | |
| 40 | -weighted by the corresponding exposures). | |
| 41 | -Optionally, you can also compute an effective energy dispersion (i.e. the | |
| 42 | -energy dispersion of the different observations weighted by the corresponding | |
| 43 | -exposures). | |
| 44 | -To get these informations you use the :ref:`ctexpcube`, :ref:`ctpsfcube` and | |
| 45 | -:ref:`ctedispcube` tools: | |
| 46 | - | |
| 47 | -.. code-block:: bash | |
| 48 | - | |
| 49 | - $ ctexpcube | |
| 50 | - Input event list or observation definition XML file [NONE] obs.xml | |
| 51 | - Calibration database [prod2] | |
| 52 | - Instrument response function [South_0.5h] | |
| 53 | - Input counts cube file to extract exposure cube definition [NONE] cntcube.fits | |
| 54 | - Output exposure cube file [expcube.fits] | |
| 55 | - | |
| 56 | -.. code-block:: bash | |
| 57 | - | |
| 58 | - $ ctpsfcube | |
| 59 | - Input event list or observation definition XML file [NONE] obs.xml | |
| 60 | - Calibration database [prod2] | |
| 61 | - Instrument response function [South_0.5h] | |
| 62 | - Input counts cube file to extract PSF cube definition [NONE] | |
| 63 | - First coordinate of image center in degrees (RA or galactic l) (0-360) [83.63] | |
| 64 | - Second coordinate of image center in degrees (DEC or galactic b) (-90-90) [22.01] | |
| 65 | - Projection method (AIT|AZP|CAR|MER|MOL|STG|TAN) [CAR] | |
| 66 | - Coordinate system (CEL - celestial, GAL - galactic) (CEL|GAL) [CEL] | |
| 67 | - Image scale (in degrees/pixel) [1.0] | |
| 68 | - Size of the X axis in pixels [10] | |
| 69 | - Size of the Y axis in pixels [10] | |
| 70 | - Lower energy limit (TeV) [0.1] | |
| 71 | - Upper energy limit (TeV) [100.0] | |
| 72 | - Number of energy bins [20] | |
| 73 | - Output PSF cube file [psfcube.fits] | |
| 74 | - | |
| 75 | -.. code-block:: bash | |
| 76 | - | |
| 77 | - $ ctedispcube | |
| 78 | - Input event list or observation definition XML file [NONE] obs.xml | |
| 79 | - Calibration database [prod2] | |
| 80 | - Instrument response function [South_0.5h] | |
| 81 | - Input counts cube file to extract energy dispersion cube definition [NONE] | |
| 82 | - First coordinate of image center in degrees (RA or galactic l) (0-360) [83.63] | |
| 83 | - Second coordinate of image center in degrees (DEC or galactic b) (-90-90) [22.01] | |
| 84 | - Projection method (AIT|AZP|CAR|MER|MOL|STG|TAN) [CAR] | |
| 85 | - Coordinate system (CEL - celestial, GAL - galactic) (CEL|GAL) [CEL] | |
| 86 | - Image scale (in degrees/pixel) [1.0] | |
| 87 | - Size of the X axis in pixels [10] | |
| 88 | - Size of the Y axis in pixels [10] | |
| 89 | - Lower energy limit (TeV) [0.1] | |
| 90 | - Upper energy limit (TeV) [100.0] | |
| 91 | - Number of energy bins [20] | |
| 92 | - Output energy dispersion cube file [edispcube.fits] | |
| 93 | - | |
| 94 | -.. note:: | |
| 95 | - | |
| 96 | - You may have noticed that for :ref:`ctexpcube` you provided an input counts | |
| 97 | - cube, while for the other tools you specified ``NONE``. | |
| 98 | - By providing an input counts cube you instructed :ref:`ctexpcube` to | |
| 99 | - extract the definition of the exposure cube from the counts cube. This is | |
| 100 | - a convenient trick to reduce the number of user parameters that you need | |
| 101 | - to specify. You did however not apply this trick for | |
| 102 | - :ref:`ctpsfcube` and :ref:`ctedispcube`. In fact, the point spread function | |
| 103 | - and energy dispersion do not vary significantly on spatial scales of 0.02°, | |
| 104 | - and using the counts cube definition for these cubes would lead to large | |
| 105 | - response cube files with a spatial precision that is actually not needed | |
| 106 | - (the point spread function and energy dispersion cubes are actually | |
| 107 | - 4-dimensional data cubes, hence their size increases quickly for a large | |
| 108 | - number of spatial pixels). Therefore, you have specified a larger image | |
| 109 | - scale of 1° for both cubes and only a small number of 10x10 spatial pixels, | |
| 110 | - leading to point spread function and energy dispersion cubes of modest size | |
| 111 | - (a few MB). | |
| 112 | - | |
| 113 | -You provided the ``obs.xml`` file that defines all observations on input | |
| 114 | -so that the tools know which observations were combined in the :ref:`ctbin` | |
| 115 | -run. | |
| 116 | -As final step of the analysis preparation, you need to generate a | |
| 117 | -background cube using the :ref:`ctbkgcube` tool: | |
| 118 | - | |
| 119 | -.. code-block:: bash | |
| 120 | - | |
| 121 | - $ ctbkgcube | |
| 122 | - Input event list or observation definition XML file [NONE] obs.xml | |
| 123 | - Calibration database [prod2] | |
| 124 | - Instrument response function [South_0.5h] | |
| 125 | - Input counts cube file to extract background cube definition [NONE] cntcube.fits | |
| 126 | - Input model XML file [NONE] $CTOOLS/share/models/crab.xml | |
| 127 | - Output background cube file [bkgcube.fits] | |
| 128 | - Output model XML file [NONE] model.xml | |
| 129 | - | |
| 130 | -The usage of :ref:`ctbkgcube` is very similar to that of :ref:`ctexpcube`, | |
| 131 | -yet it takes the model definition XML file as an additional input parameter. | |
| 132 | -You used here the usual ``$CTOOLS/share/models/crab.xml`` model | |
| 133 | -file that is shipped with the ctools. | |
| 134 | -:ref:`ctbkgcube` provides on output the background cube file | |
| 135 | -``bkgcube.fits`` and the model definition XML file ``model.xml`` that can | |
| 136 | -be used for further analysis. | |
| 137 | -Having a look at the ``model.xml`` file illustrates how the background | |
| 138 | -modelling works: | |
| 139 | - | |
| 140 | -.. code-block:: xml | |
| 141 | - | |
| 142 | - <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 143 | - <source_library title="source library"> | |
| 144 | - <source name="Crab" type="PointSource"> | |
| 145 | - <spectrum type="PowerLaw"> | |
| 146 | - <parameter name="Prefactor" value="5.7" error="0" scale="1e-16" min="1e-07" max="1000" free="1" /> | |
| 147 | - <parameter name="Index" value="2.48" error="0" scale="-1" min="0" max="5" free="1" /> | |
| 148 | - <parameter name="PivotEnergy" value="0.3" scale="1e+06" min="0.01" max="1000" free="0" /> | |
| 149 | - </spectrum> | |
| 150 | - <spatialModel type="SkyDirFunction"> | |
| 151 | - <parameter name="RA" value="83.6331" scale="1" min="-360" max="360" free="0" /> | |
| 152 | - <parameter name="DEC" value="22.0145" scale="1" min="-90" max="90" free="0" /> | |
| 153 | - </spatialModel> | |
| 154 | - </source> | |
| 155 | - <source name="BackgroundModel" type="CTACubeBackground" instrument="CTA,HESS,MAGIC,VERITAS"> | |
| 156 | - <spectrum type="PowerLaw"> | |
| 157 | - <parameter name="Prefactor" value="1" error="0" scale="1" min="0" free="1" /> | |
| 158 | - <parameter name="Index" value="0" error="0" scale="1" min="-10" max="10" free="1" /> | |
| 159 | - <parameter name="PivotEnergy" value="1" scale="1e+06" free="0" /> | |
| 160 | - </spectrum> | |
| 161 | - </source> | |
| 162 | - </source_library> | |
| 163 | - | |
| 164 | -The Crab source component is the same that is also present in | |
| 165 | -``$CTOOLS/share/models/crab.xml`` and is not modified. | |
| 166 | -The background component, however, has been replaced by a model of | |
| 167 | -type ``CTACubeBackground``. | |
| 168 | -This model is a 3-dimensional data cube that describes the expected | |
| 169 | -background rate as function of spatial position and energy. | |
| 170 | -The data cube is multiplied by a power law spectrum that allows to adjust | |
| 171 | -the normalization and slope of the background spectrum in the fit. | |
| 172 | -This power law could be replaced by any spectral model that is found | |
| 173 | -as an appropriate multiplicator to the background cube. | |
| 174 | - | |
| 175 | -.. note:: | |
| 176 | - | |
| 177 | - There is no constraint on providing the same spatial binning or | |
| 178 | - the same energy binning for an exposure cube, a PSF cube, an energy | |
| 179 | - dispersion cube, a background cube and a counts cube. | |
| 180 | - ctools interpolates internally all response cubes hence any arbitrary | |
| 181 | - appropriate binning may be used. | |
| 182 | - Using the same binning for the exposure cube, the background cube and | |
| 183 | - the counts cube is only a convenience. | |
| 184 | - | |
| 185 | -Now you have all files at hand to perform a stacked maximum likelihood | |
| 186 | -analysis using the :ref:`ctlike` tool: | |
| 187 | - | |
| 188 | -.. code-block:: bash | |
| 189 | - | |
| 190 | - $ ctlike | |
| 191 | - Input event list, counts cube or observation definition XML file [obs.xml] cntcube.fits | |
| 192 | - Input exposure cube file (only needed for stacked analysis) [NONE] expcube.fits | |
| 193 | - Input PSF cube file (only needed for stacked analysis) [NONE] psfcube.fits | |
| 194 | - Input background cube file (only needed for stacked analysis) [NONE] bkgcube.fits | |
| 195 | - Input model XML file [$CTOOLS/share/models/crab.xml] model.xml | |
| 196 | - Output model XML file [crab_results.xml] | |
| 197 | - | |
| 198 | -:ref:`ctlike` recognises that a counts cube should be analysed and queries | |
| 199 | -for the exposure cube, the PSF cube, and the background cube file names. | |
| 200 | -If you want to consider also the energy dispersion during the maximum likelihood | |
| 201 | -fitting you should pass the hidden ``edisp`` parameter to ctlike, and the tool | |
| 202 | -will also query of the energy dispersion cube: | |
| 203 | - | |
| 204 | -.. code-block:: bash | |
| 205 | - | |
| 206 | - $ ctlike edisp=yes | |
| 207 | - Input event list, counts cube or observation definition XML file [cntcube.fits] | |
| 208 | - Input exposure cube file (only needed for stacked analysis) [expcube.fits] | |
| 209 | - Input PSF cube file (only needed for stacked analysis) [psfcube.fits] | |
| 210 | - Input background cube file (only needed for stacked analysis) [bkgcube.fits] | |
| 211 | - Input energy dispersion cube file (only needed for stacked analysis) [NONE] edispcube.fits | |
| 212 | - Input model XML file [model.xml] | |
| 213 | - Output model XML file [crab_results.xml] | |
| 214 | - | |
| 215 | -.. warning:: | |
| 216 | - | |
| 217 | - The maximum likelihood computations including energy dispersion are | |
| 218 | - relatively time consuming, and in many situations the impact of the | |
| 219 | - energy dispersion on the analysis results will be very small. So make | |
| 220 | - sure that you really need energy dispersion before you are using it. | |
| 221 | - | |
| 222 | -The log file of the :ref:`ctlike` run (without energy dispersion) is shown | |
| 223 | -below. | |
| 224 | - | |
| 225 | -.. code-block:: none | |
| 226 | - | |
| 227 | - 2016-06-29T19:54:14: +=================================+ | |
| 228 | - 2016-06-29T19:54:14: | Maximum likelihood optimisation | | |
| 229 | - 2016-06-29T19:54:14: +=================================+ | |
| 230 | - 2016-06-29T19:54:15: >Iteration 0: -logL=83633.454, Lambda=1.0e-03 | |
| 231 | - 2016-06-29T19:54:15: >Iteration 1: -logL=83561.979, Lambda=1.0e-03, delta=71.475, max(|grad|)=153.136163 [Index:7] | |
| 232 | - 2016-06-29T19:54:16: >Iteration 2: -logL=83561.823, Lambda=1.0e-04, delta=0.156, max(|grad|)=-0.183495 [Prefactor:6] | |
| 233 | - 2016-06-29T19:54:16: >Iteration 3: -logL=83561.823, Lambda=1.0e-05, delta=0.000, max(|grad|)=-0.003347 [Index:3] | |
| 234 | - ... | |
| 235 | - 2016-06-29T19:54:17: +=========================================+ | |
| 236 | - 2016-06-29T19:54:17: | Maximum likelihood optimisation results | | |
| 237 | - 2016-06-29T19:54:17: +=========================================+ | |
| 238 | - 2016-06-29T19:54:17: === GOptimizerLM === | |
| 239 | - 2016-06-29T19:54:17: Optimized function value ..: 83561.823 | |
| 240 | - 2016-06-29T19:54:17: Absolute precision ........: 0.005 | |
| 241 | - 2016-06-29T19:54:17: Acceptable value decrease .: 2 | |
| 242 | - 2016-06-29T19:54:17: Optimization status .......: converged | |
| 243 | - 2016-06-29T19:54:17: Number of parameters ......: 10 | |
| 244 | - 2016-06-29T19:54:17: Number of free parameters .: 4 | |
| 245 | - 2016-06-29T19:54:17: Number of iterations ......: 3 | |
| 246 | - 2016-06-29T19:54:17: Lambda ....................: 1e-06 | |
| 247 | - 2016-06-29T19:54:17: Maximum log likelihood ....: -83561.823 | |
| 248 | - 2016-06-29T19:54:17: Observed events (Nobs) ...: 35946.000 | |
| 249 | - 2016-06-29T19:54:17: Predicted events (Npred) ..: 35946.000 (Nobs - Npred = 1.56502e-05) | |
| 250 | - 2016-06-29T19:54:17: === GModels === | |
| 251 | - 2016-06-29T19:54:17: Number of models ..........: 2 | |
| 252 | - 2016-06-29T19:54:17: Number of parameters ......: 10 | |
| 253 | - 2016-06-29T19:54:17: === GModelSky === | |
| 254 | - 2016-06-29T19:54:17: Name ......................: Crab | |
| 255 | - 2016-06-29T19:54:17: Instruments ...............: all | |
| 256 | - 2016-06-29T19:54:17: Instrument scale factors ..: unity | |
| 257 | - 2016-06-29T19:54:17: Observation identifiers ...: all | |
| 258 | - 2016-06-29T19:54:17: Model type ................: PointSource | |
| 259 | - 2016-06-29T19:54:17: Model components ..........: "PointSource" * "PowerLaw" * "Constant" | |
| 260 | - 2016-06-29T19:54:17: Number of parameters ......: 6 | |
| 261 | - 2016-06-29T19:54:17: Number of spatial par's ...: 2 | |
| 262 | - 2016-06-29T19:54:17: RA .......................: 83.6331 [-360,360] deg (fixed,scale=1) | |
| 263 | - 2016-06-29T19:54:17: DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1) | |
| 264 | - 2016-06-29T19:54:17: Number of spectral par's ..: 3 | |
| 265 | - 2016-06-29T19:54:17: Prefactor ................: 5.70255e-16 +/- 7.24185e-18 [1e-23,1e-13] ph/cm2/s/MeV (free,scale=1e-16,gradient) | |
| 266 | - 2016-06-29T19:54:17: Index ....................: -2.46568 +/- 0.0110458 [-0,-5] (free,scale=-1,gradient) | |
| 267 | - 2016-06-29T19:54:17: PivotEnergy ..............: 300000 [10000,1e+09] MeV (fixed,scale=1e+06,gradient) | |
| 268 | - 2016-06-29T19:54:17: Number of temporal par's ..: 1 | |
| 269 | - 2016-06-29T19:54:17: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 270 | - 2016-06-29T19:54:17: === GCTAModelCubeBackground === | |
| 271 | - 2016-06-29T19:54:17: Name ......................: BackgroundModel | |
| 272 | - 2016-06-29T19:54:17: Instruments ...............: CTA, HESS, MAGIC, VERITAS | |
| 273 | - 2016-06-29T19:54:17: Instrument scale factors ..: unity | |
| 274 | - 2016-06-29T19:54:17: Observation identifiers ...: all | |
| 275 | - 2016-06-29T19:54:17: Model type ................: "PowerLaw" * "Constant" | |
| 276 | - 2016-06-29T19:54:17: Number of parameters ......: 4 | |
| 277 | - 2016-06-29T19:54:17: Number of spectral par's ..: 3 | |
| 278 | - 2016-06-29T19:54:17: Prefactor ................: 0.964885 +/- 0.0109395 [0.01,100] ph/cm2/s/MeV (free,scale=1,gradient) | |
| 279 | - 2016-06-29T19:54:17: Index ....................: 0.0220427 +/- 0.00686292 [-5,5] (free,scale=1,gradient) | |
| 280 | - 2016-06-29T19:54:17: PivotEnergy ..............: 1e+06 MeV (fixed,scale=1e+06,gradient) | |
| 281 | - 2016-06-29T19:54:17: Number of temporal par's ..: 1 | |
| 282 | - 2016-06-29T19:54:17: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) |
doc/source/users/tutorials/beyond/combining-observations.ipynb
0 → 100644
| 1 | +{ | |
| 2 | + "cells": [ | |
| 3 | + { | |
| 4 | + "cell_type": "markdown", | |
| 5 | + "metadata": {}, | |
| 6 | + "source": [ | |
| 7 | + "# Combining observations" | |
| 8 | + ] | |
| 9 | + }, | |
| 10 | + { | |
| 11 | + "cell_type": "raw", | |
| 12 | + "metadata": {}, | |
| 13 | + "source": [ | |
| 14 | + "<div align=\"right\"><a href=\"../../../_downloads/combining-observations.ipynb\" download=\"combining-observations.ipynb\"><img src=\"../../../_static/download-notebook.jpg\" alt=\"Download Notebook\" height=\"40\"></a></div>" | |
| 15 | + ] | |
| 16 | + }, | |
| 17 | + { | |
| 18 | + "cell_type": "markdown", | |
| 19 | + "metadata": {}, | |
| 20 | + "source": [ | |
| 21 | + "Generally, the CTA data you may want to analyse will not only be composed of a single observation (a.k.a. run) but of a list of observations that should be combined in a joint analysis. ctools has the capability to collect individual observations in a list and to perform for example a joint maximum likelihood fit of all observations in a single shot. Here is an example that illustrates how to do that.\n", | |
| 22 | + "\n", | |
| 23 | + "We will start with the usual Python imports" | |
| 24 | + ] | |
| 25 | + }, | |
| 26 | + { | |
| 27 | + "cell_type": "code", | |
| 28 | + "execution_count": 2, | |
| 29 | + "metadata": { | |
| 30 | + "collapsed": true | |
| 31 | + }, | |
| 32 | + "outputs": [], | |
| 33 | + "source": [ | |
| 34 | + "import gammalib\n", | |
| 35 | + "import ctools\n", | |
| 36 | + "import cscripts" | |
| 37 | + ] | |
| 38 | + }, | |
| 39 | + { | |
| 40 | + "cell_type": "markdown", | |
| 41 | + "metadata": {}, | |
| 42 | + "source": [ | |
| 43 | + "## Simulating the dataset\n", | |
| 44 | + "\n", | |
| 45 | + "Let’s start with the simulation of two 30 min long observations of the Crab nebula, each offset by 0.5° from the nebula in opposite directions:" | |
| 46 | + ] | |
| 47 | + }, | |
| 48 | + { | |
| 49 | + "cell_type": "code", | |
| 50 | + "execution_count": 4, | |
| 51 | + "metadata": { | |
| 52 | + "collapsed": true | |
| 53 | + }, | |
| 54 | + "outputs": [], | |
| 55 | + "source": [ | |
| 56 | + "obssim = ctools.ctobssim()\n", | |
| 57 | + "\n", | |
| 58 | + "# first pointing\n", | |
| 59 | + "obssim['ra'] = 83.63\n", | |
| 60 | + "obssim['dec'] = 21.51\n", | |
| 61 | + "obssim['rad'] = 5.0\n", | |
| 62 | + "obssim['tmin'] = 0\n", | |
| 63 | + "obssim['tmax'] = 1800\n", | |
| 64 | + "obssim['caldb'] = 'prod2'\n", | |
| 65 | + "obssim['irf'] = 'South_0.5h'\n", | |
| 66 | + "obssim['inmodel'] = '$CTOOLS/share/models/crab.xml'\n", | |
| 67 | + "obssim['outevents'] = 'events1.fits'\n", | |
| 68 | + "\n", | |
| 69 | + "obssim.execute()\n", | |
| 70 | + "\n", | |
| 71 | + "# second pointing\n", | |
| 72 | + "obssim = ctools.ctobssim()\n", | |
| 73 | + "\n", | |
| 74 | + "obssim['ra'] = 83.63\n", | |
| 75 | + "obssim['dec'] = 22.51\n", | |
| 76 | + "obssim['rad'] = 5.0\n", | |
| 77 | + "obssim['tmin'] = 1800\n", | |
| 78 | + "obssim['tmax'] = 3600\n", | |
| 79 | + "obssim['caldb'] = 'prod2'\n", | |
| 80 | + "obssim['irf'] = 'South_0.5h'\n", | |
| 81 | + "obssim['inmodel'] = '$CTOOLS/share/models/crab.xml'\n", | |
| 82 | + "obssim['outevents'] = 'events2.fits'\n", | |
| 83 | + "\n", | |
| 84 | + "obssim.execute()" | |
| 85 | + ] | |
| 86 | + }, | |
| 87 | + { | |
| 88 | + "cell_type": "markdown", | |
| 89 | + "metadata": {}, | |
| 90 | + "source": [ | |
| 91 | + "This will produce the two event files `events1.fits` and `events2.fits` on disk.\n", | |
| 92 | + "\n", | |
| 93 | + "As next step you have to create an observation definition XML file that collects both observations in a list. We'll do it in Python, but for a simple observation definition file like this you could also create it using a text editor." | |
| 94 | + ] | |
| 95 | + }, | |
| 96 | + { | |
| 97 | + "cell_type": "code", | |
| 98 | + "execution_count": 1, | |
| 99 | + "metadata": { | |
| 100 | + "collapsed": true | |
| 101 | + }, | |
| 102 | + "outputs": [], | |
| 103 | + "source": [ | |
| 104 | + "xml = gammalib.GXml()\n", | |
| 105 | + "obslist = xml.append('observation_list title=\"observation library\"')\n", | |
| 106 | + "\n", | |
| 107 | + "for i in range(2):\n", | |
| 108 | + " obs = obslist.append('observation name=\"Crab\" id=\"%02d\" instrument=\"CTA\"' % (i+1))\n", | |
| 109 | + " obs.append('parameter name=\"EventList\" file=\"events%d.fits\"' % (i+1))\n", | |
| 110 | + "\n", | |
| 111 | + "xml.save('obs.xml')" | |
| 112 | + ] | |
| 113 | + }, | |
| 114 | + { | |
| 115 | + "cell_type": "markdown", | |
| 116 | + "metadata": {}, | |
| 117 | + "source": [ | |
| 118 | + "Let's peek at the observations definition file." | |
| 119 | + ] | |
| 120 | + }, | |
| 121 | + { | |
| 122 | + "cell_type": "code", | |
| 123 | + "execution_count": 5, | |
| 124 | + "metadata": {}, | |
| 125 | + "outputs": [ | |
| 126 | + { | |
| 127 | + "name": "stdout", | |
| 128 | + "output_type": "stream", | |
| 129 | + "text": [ | |
| 130 | + "=== GXml ===\n", | |
| 131 | + "GXmlDocument::version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"\n", | |
| 132 | + "GXmlElement::observation_list title=\"observation library\"\n", | |
| 133 | + " GXmlElement::observation id=\"01\" instrument=\"CTA\" name=\"Crab\"\n", | |
| 134 | + " GXmlElement::parameter file=\"events1.fits\" name=\"EventList\"\n", | |
| 135 | + " GXmlElement::observation id=\"02\" instrument=\"CTA\" name=\"Crab\"\n", | |
| 136 | + " GXmlElement::parameter file=\"events2.fits\" name=\"EventList\"\n" | |
| 137 | + ] | |
| 138 | + } | |
| 139 | + ], | |
| 140 | + "source": [ | |
| 141 | + "print(gammalib.GXml('obs.xml'))" | |
| 142 | + ] | |
| 143 | + }, | |
| 144 | + { | |
| 145 | + "cell_type": "markdown", | |
| 146 | + "metadata": {}, | |
| 147 | + "source": [ | |
| 148 | + "The file contains a single observation_list tag that contains two observation tags that each define an observation. Each observation has a name, an id and an instrument attribute. The name attribute can have any arbitrary value, and may be the same for all observations. However, **the id attribute needs to be a unique character string for any given instrument**. The instrument attribute is a case-sensitive string that identifies the instrument with which the observation was taken. Please make sure that the instrument string is set correctly so that ctools knows which instrument specific functions need to be called.\n", | |
| 149 | + "\n", | |
| 150 | + "Note: the instrument string for a CTA observation is unsurprisingly CTA. In case that you want to analyse data from an existing Imaging Air Cherenkov Telescope you can also set the instrument string to HESS, MAGIC, or VERITAS. You may also combine observations from different telescopes for a joint analysis in an observation definition file. Please recall that instrument strings are case sensitive.\n", | |
| 151 | + "\n", | |
| 152 | + "## Combined likelihood analysis\n", | |
| 153 | + "\n", | |
| 154 | + "Now you are ready to do a joint maximum likelihood analysis using `ctlike`." | |
| 155 | + ] | |
| 156 | + }, | |
| 157 | + { | |
| 158 | + "cell_type": "code", | |
| 159 | + "execution_count": 4, | |
| 160 | + "metadata": { | |
| 161 | + "collapsed": true | |
| 162 | + }, | |
| 163 | + "outputs": [], | |
| 164 | + "source": [ | |
| 165 | + "like = ctools.ctlike()\n", | |
| 166 | + "\n", | |
| 167 | + "like['inobs'] = 'obs.xml'\n", | |
| 168 | + "like['caldb'] = 'prod2'\n", | |
| 169 | + "like['irf'] = 'South_0.5h'\n", | |
| 170 | + "like['inmodel'] = '$CTOOLS/share/models/crab.xml'\n", | |
| 171 | + "like['outmodel'] = 'crab_results.xml'\n", | |
| 172 | + "\n", | |
| 173 | + "like.run()" | |
| 174 | + ] | |
| 175 | + }, | |
| 176 | + { | |
| 177 | + "cell_type": "markdown", | |
| 178 | + "metadata": {}, | |
| 179 | + "source": [ | |
| 180 | + "Instead of providing an event list or a counts cube, you now provide the filename of the observation definition XML file (here `obs.xml`) as input parameter. `ctlike` recognises this format and automatically performs a joint maximum likelihood analysis. " | |
| 181 | + ] | |
| 182 | + }, | |
| 183 | + { | |
| 184 | + "cell_type": "code", | |
| 185 | + "execution_count": 5, | |
| 186 | + "metadata": {}, | |
| 187 | + "outputs": [ | |
| 188 | + { | |
| 189 | + "name": "stdout", | |
| 190 | + "output_type": "stream", | |
| 191 | + "text": [ | |
| 192 | + "=== GObservations ===\n", | |
| 193 | + " Number of observations ....: 2\n", | |
| 194 | + " Number of models ..........: 2\n", | |
| 195 | + " Number of observed events .: 201962\n", | |
| 196 | + " Number of predicted events : 201961.992585133\n" | |
| 197 | + ] | |
| 198 | + } | |
| 199 | + ], | |
| 200 | + "source": [ | |
| 201 | + "print(like.obs())" | |
| 202 | + ] | |
| 203 | + }, | |
| 204 | + { | |
| 205 | + "cell_type": "markdown", | |
| 206 | + "metadata": {}, | |
| 207 | + "source": [ | |
| 208 | + "The fit converged quickly, the spectral parameters of the Crab nebula have now been constrained using the events from both observations. The computation time increases roughly linearly with the number of observations that are combined, although ctools implements parallel multi-core processing which will spread the likelihood computation for the different observations over all CPU cores that are available. Doing **a joint unbinned analysis is thus an efficient solution if data from multiple observations should be combined**." | |
| 209 | + ] | |
| 210 | + }, | |
| 211 | + { | |
| 212 | + "cell_type": "code", | |
| 213 | + "execution_count": 6, | |
| 214 | + "metadata": {}, | |
| 215 | + "outputs": [ | |
| 216 | + { | |
| 217 | + "name": "stdout", | |
| 218 | + "output_type": "stream", | |
| 219 | + "text": [ | |
| 220 | + "=== GOptimizerLM ===\n", | |
| 221 | + " Optimized function value ..: 756419.316\n", | |
| 222 | + " Absolute precision ........: 0.005\n", | |
| 223 | + " Acceptable value decrease .: 2\n", | |
| 224 | + " Optimization status .......: converged\n", | |
| 225 | + " Number of parameters ......: 10\n", | |
| 226 | + " Number of free parameters .: 4\n", | |
| 227 | + " Number of iterations ......: 2\n", | |
| 228 | + " Lambda ....................: 1e-05\n" | |
| 229 | + ] | |
| 230 | + } | |
| 231 | + ], | |
| 232 | + "source": [ | |
| 233 | + "print(like.opt())" | |
| 234 | + ] | |
| 235 | + }, | |
| 236 | + { | |
| 237 | + "cell_type": "markdown", | |
| 238 | + "metadata": {}, | |
| 239 | + "source": [ | |
| 240 | + "Note: since you only invoked the run() method the output XML file was not saved on disk. You can save it now by invoking the save() method, or save directly along with running by invoking the execute() method. \n", | |
| 241 | + "\n", | |
| 242 | + "Combining observations is not limited to unbinned data (i.e. event lists) but may also be applied to binned data (i.e. counts cubes). Using ctbin you can create counts cubes from both event lists which may then be combined in an observation definition XML file, that has \"CountsCube\" rather than \"EventList\" parameters describing each observation.\n", | |
| 243 | + "\n", | |
| 244 | + "Feeding the observation definition XML file to ctlike will then lead to a joint binned analysis. In the joint binned analysis, the events of individual observations are not combined, but are kept separate in distinct counts cubes. This is not very efficient, as generally counts cubes for short duration observations are only sparsly populated and the likelihood computation has to loop over a hugh number of data space bins (though also here ctlike benefits from multi-core parallel processing). Though possible, **a joint binned analysis is thus not the recommended method for combining observations**. An alternative is to stack the events of all observations into a single counts cube. The following section describes how such a stacked analysis is done with ctools.\n", | |
| 245 | + "\n", | |
| 246 | + "In principle, unbinned and binned observations may also be combined in a joint analysis, although this Use Case may be a bit academic." | |
| 247 | + ] | |
| 248 | + } | |
| 249 | + ], | |
| 250 | + "metadata": { | |
| 251 | + "kernelspec": { | |
| 252 | + "display_name": "Python 3", | |
| 253 | + "language": "python", | |
| 254 | + "name": "python3" | |
| 255 | + }, | |
| 256 | + "language_info": { | |
| 257 | + "codemirror_mode": { | |
| 258 | + "name": "ipython", | |
| 259 | + "version": 3 | |
| 260 | + }, | |
| 261 | + "file_extension": ".py", | |
| 262 | + "mimetype": "text/x-python", | |
| 263 | + "name": "python", | |
| 264 | + "nbconvert_exporter": "python", | |
| 265 | + "pygments_lexer": "ipython3", | |
| 266 | + "version": "3.6.2" | |
| 267 | + } | |
| 268 | + }, | |
| 269 | + "nbformat": 4, | |
| 270 | + "nbformat_minor": 2 | |
| 271 | +} | ... | ... |
doc/source/users/tutorials/beyond/index.rst
doc/source/users/tutorials/beyond/stacked-analysis.ipynb
0 → 100644
| 1 | +{ | |
| 2 | + "cells": [ | |
| 3 | + { | |
| 4 | + "cell_type": "markdown", | |
| 5 | + "metadata": {}, | |
| 6 | + "source": [ | |
| 7 | + "# Performing a stacked analysis" | |
| 8 | + ] | |
| 9 | + }, | |
| 10 | + { | |
| 11 | + "cell_type": "raw", | |
| 12 | + "metadata": {}, | |
| 13 | + "source": [ | |
| 14 | + "<div align=\"right\"><a href=\"../../../_downloads/stacked-analysis.ipynb\" download=\"stacked-analysis.ipynb\"><img src=\"../../../_static/download-notebook.jpg\" alt=\"Download Notebook\" height=\"40\"></a></div>" | |
| 15 | + ] | |
| 16 | + }, | |
| 17 | + { | |
| 18 | + "cell_type": "markdown", | |
| 19 | + "metadata": {}, | |
| 20 | + "source": [ | |
| 21 | + "A stacked analysis is a binned analysis where all data from multiple observations are stacked into a single counts cube.\n", | |
| 22 | + "\n", | |
| 23 | + "As usual we start with Python imports" | |
| 24 | + ] | |
| 25 | + }, | |
| 26 | + { | |
| 27 | + "cell_type": "code", | |
| 28 | + "execution_count": 25, | |
| 29 | + "metadata": { | |
| 30 | + "collapsed": true | |
| 31 | + }, | |
| 32 | + "outputs": [], | |
| 33 | + "source": [ | |
| 34 | + "import gammalib\n", | |
| 35 | + "import ctools\n", | |
| 36 | + "import cscripts" | |
| 37 | + ] | |
| 38 | + }, | |
| 39 | + { | |
| 40 | + "cell_type": "markdown", | |
| 41 | + "metadata": {}, | |
| 42 | + "source": [ | |
| 43 | + "The data and observation definition XML file obs.xml used here are those produced in the previous tutorial **Combining observations**.\n", | |
| 44 | + "\n", | |
| 45 | + "## Stacking Events\n", | |
| 46 | + "\n", | |
| 47 | + "The event stacking is done using the `ctbin` tool. Instead of providing to `ctbin` an event list you should specify the observation definition XML file on input. `ctbin` will then loop over all observations and collect all events into a single counts cube." | |
| 48 | + ] | |
| 49 | + }, | |
| 50 | + { | |
| 51 | + "cell_type": "code", | |
| 52 | + "execution_count": 26, | |
| 53 | + "metadata": { | |
| 54 | + "collapsed": true | |
| 55 | + }, | |
| 56 | + "outputs": [], | |
| 57 | + "source": [ | |
| 58 | + "evbin = ctools.ctbin()\n", | |
| 59 | + "\n", | |
| 60 | + "evbin['inobs'] = 'obs.xml'\n", | |
| 61 | + "# we center the cube at the position of the Crab nebula\n", | |
| 62 | + "evbin['xref'] = 83.63\n", | |
| 63 | + "evbin['yref'] = 22.01\n", | |
| 64 | + "evbin['proj'] = 'CAR'\n", | |
| 65 | + "evbin['coordsys'] = 'CEL'\n", | |
| 66 | + "evbin['binsz'] = 0.02 #deg/bin\n", | |
| 67 | + "evbin['nxpix'] = 200 \n", | |
| 68 | + "evbin['nypix'] = 200\n", | |
| 69 | + "evbin['ebinalg'] = 'LOG'\n", | |
| 70 | + "evbin['emin'] = 0.1 #TeV\n", | |
| 71 | + "evbin['emax'] = 100. #TeV\n", | |
| 72 | + "evbin['enumbins'] = 20\n", | |
| 73 | + "evbin['outcube'] = 'cntcube.fits'\n", | |
| 74 | + "\n", | |
| 75 | + "evbin.execute()" | |
| 76 | + ] | |
| 77 | + }, | |
| 78 | + { | |
| 79 | + "cell_type": "markdown", | |
| 80 | + "metadata": { | |
| 81 | + "collapsed": true | |
| 82 | + }, | |
| 83 | + "source": [ | |
| 84 | + "## Computing the stacked response and background\n", | |
| 85 | + "\n", | |
| 86 | + "You now have a stacked counts cube `cntcube.fits` on disk. Before you can use that counts cube in a maximum likelihood analysis, you need to compute the stacked instrument response function and the background model that is needed for the analysis.\n", | |
| 87 | + "\n", | |
| 88 | + "For the instrument response function, you have to compute the total exposure for the stacked cube (i.e. the sum of the effective areas for each observation multiplied by the corresponding livetimes) and an effective point spread function (i.e. the point spread function of the different observations weighted by the corresponding exposures). Optionally, you can also compute an effective energy dispersion (i.e. the energy dispersion of the different observations weighted by the corresponding exposures). To get these informations you use the `ctexpcube`, `ctpsfcube` and `ctedispcube` tools:" | |
| 89 | + ] | |
| 90 | + }, | |
| 91 | + { | |
| 92 | + "cell_type": "code", | |
| 93 | + "execution_count": 27, | |
| 94 | + "metadata": { | |
| 95 | + "collapsed": true | |
| 96 | + }, | |
| 97 | + "outputs": [], | |
| 98 | + "source": [ | |
| 99 | + "expcube = ctools.ctexpcube()\n", | |
| 100 | + "\n", | |
| 101 | + "expcube['inobs'] = 'obs.xml'\n", | |
| 102 | + "expcube['caldb'] = 'prod2'\n", | |
| 103 | + "expcube['irf'] = 'South_0.5h'\n", | |
| 104 | + "expcube['incube'] = 'cntcube.fits'\n", | |
| 105 | + "expcube['outcube'] = 'expcube.fits'\n", | |
| 106 | + "\n", | |
| 107 | + "expcube.execute()" | |
| 108 | + ] | |
| 109 | + }, | |
| 110 | + { | |
| 111 | + "cell_type": "code", | |
| 112 | + "execution_count": 28, | |
| 113 | + "metadata": { | |
| 114 | + "collapsed": true | |
| 115 | + }, | |
| 116 | + "outputs": [], | |
| 117 | + "source": [ | |
| 118 | + "psfcube = ctools.ctpsfcube()\n", | |
| 119 | + "\n", | |
| 120 | + "psfcube['inobs'] = 'obs.xml'\n", | |
| 121 | + "psfcube['caldb'] = 'prod2'\n", | |
| 122 | + "psfcube['irf'] = 'South_0.5h'\n", | |
| 123 | + "psfcube['incube'] = 'NONE'\n", | |
| 124 | + "psfcube['xref'] = 83.63\n", | |
| 125 | + "psfcube['yref'] = 22.01\n", | |
| 126 | + "psfcube['proj'] = 'CAR'\n", | |
| 127 | + "psfcube['coordsys'] = 'CEL'\n", | |
| 128 | + "psfcube['binsz'] = 1.0\n", | |
| 129 | + "psfcube['nxpix'] = 10\n", | |
| 130 | + "psfcube['nypix'] = 10\n", | |
| 131 | + "psfcube['emin'] = 0.1\n", | |
| 132 | + "psfcube['emax'] = 100.\n", | |
| 133 | + "psfcube['enumbins'] = 20\n", | |
| 134 | + "psfcube['outcube'] = 'psfcube.fits'\n", | |
| 135 | + "\n", | |
| 136 | + "psfcube.execute()" | |
| 137 | + ] | |
| 138 | + }, | |
| 139 | + { | |
| 140 | + "cell_type": "code", | |
| 141 | + "execution_count": 29, | |
| 142 | + "metadata": { | |
| 143 | + "collapsed": true | |
| 144 | + }, | |
| 145 | + "outputs": [], | |
| 146 | + "source": [ | |
| 147 | + "edispcube = ctools.ctedispcube()\n", | |
| 148 | + "\n", | |
| 149 | + "edispcube['inobs'] = 'obs.xml'\n", | |
| 150 | + "edispcube['caldb'] = 'prod2'\n", | |
| 151 | + "edispcube['irf'] = 'South_0.5h'\n", | |
| 152 | + "edispcube['incube'] = 'NONE'\n", | |
| 153 | + "edispcube['xref'] = 83.63\n", | |
| 154 | + "edispcube['yref'] = 22.01\n", | |
| 155 | + "edispcube['proj'] = 'CAR'\n", | |
| 156 | + "edispcube['coordsys'] = 'CEL'\n", | |
| 157 | + "edispcube['binsz'] = 1.0\n", | |
| 158 | + "edispcube['nxpix'] = 10\n", | |
| 159 | + "edispcube['nypix'] = 10\n", | |
| 160 | + "edispcube['emin'] = 0.1\n", | |
| 161 | + "edispcube['emax'] = 100.\n", | |
| 162 | + "edispcube['enumbins'] = 20\n", | |
| 163 | + "edispcube['outcube'] = 'edispcube.fits'\n", | |
| 164 | + "\n", | |
| 165 | + "edispcube.execute()" | |
| 166 | + ] | |
| 167 | + }, | |
| 168 | + { | |
| 169 | + "cell_type": "markdown", | |
| 170 | + "metadata": {}, | |
| 171 | + "source": [ | |
| 172 | + "You have noticed that for `ctexpcube` you provided an input counts cube, while for the other tools you specified NONE. By providing an input counts cube you instructed `ctexpcube` to extract the geometry of the cube from the counts cube. This is a convenient trick to reduce the number of user parameters that you need to specify. You did however not apply this trick for `ctpsfcube` and `ctedispcube`. In fact, the point spread function and energy dispersion do not vary significantly on spatial scales of 0.02°, and using the counts cube definition for these cubes would lead to large response cube files with a spatial precision that is actually not needed (the point spread function and energy dispersion cubes are actually 4-dimensional data cubes, hence their size increases quickly for a large number of spatial pixels). Therefore, you have specified a larger image scale of 1° for both cubes and only a small number of 10x10 spatial pixels, leading to point spread function and energy dispersion cubes of modest size (a few MB).\n", | |
| 173 | + "\n", | |
| 174 | + "You provided the `obs.xml` file that defines all observations on input so that the tools know which observations were combined in the `ctbin` run. As final step of the analysis preparation, you need to generate a background cube using the `ctbkgcube` tool." | |
| 175 | + ] | |
| 176 | + }, | |
| 177 | + { | |
| 178 | + "cell_type": "code", | |
| 179 | + "execution_count": 30, | |
| 180 | + "metadata": { | |
| 181 | + "collapsed": true | |
| 182 | + }, | |
| 183 | + "outputs": [], | |
| 184 | + "source": [ | |
| 185 | + "bkgcube = ctools.ctbkgcube()\n", | |
| 186 | + "\n", | |
| 187 | + "bkgcube['inobs'] = 'obs.xml'\n", | |
| 188 | + "bkgcube['caldb'] = 'prod2'\n", | |
| 189 | + "bkgcube['irf'] = 'South_0.5h'\n", | |
| 190 | + "bkgcube['incube'] = 'cntcube.fits'\n", | |
| 191 | + "bkgcube['inmodel'] = '$CTOOLS/share/models/crab.xml'\n", | |
| 192 | + "bkgcube['outcube'] = 'bkgcube.fits'\n", | |
| 193 | + "bkgcube['outmodel'] = 'model.xml'\n", | |
| 194 | + "\n", | |
| 195 | + "bkgcube.execute()" | |
| 196 | + ] | |
| 197 | + }, | |
| 198 | + { | |
| 199 | + "cell_type": "markdown", | |
| 200 | + "metadata": {}, | |
| 201 | + "source": [ | |
| 202 | + "The usage of `ctbkgcube` is very similar to that of `ctexpcube`, yet it takes the model definition XML file as an additional input parameter. You used here the usual `$CTOOLS/share/models/crab.xml` model file that is shipped with the ctools. `ctbkgcube` provides on output the background cube file `bkgcube.fits` and the model definition XML file `model.xml` that can be used for further analysis. Having a look at the `model.xml` file illustrates how the background modelling works:" | |
| 203 | + ] | |
| 204 | + }, | |
| 205 | + { | |
| 206 | + "cell_type": "code", | |
| 207 | + "execution_count": 31, | |
| 208 | + "metadata": {}, | |
| 209 | + "outputs": [ | |
| 210 | + { | |
| 211 | + "name": "stdout", | |
| 212 | + "output_type": "stream", | |
| 213 | + "text": [ | |
| 214 | + "=== GXml ===\n", | |
| 215 | + "GXmlDocument::version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"\n", | |
| 216 | + "GXmlElement::source_library title=\"source library\"\n", | |
| 217 | + " GXmlElement::source name=\"Crab\" type=\"PointSource\"\n", | |
| 218 | + " GXmlElement::spectrum type=\"PowerLaw\"\n", | |
| 219 | + " GXmlElement::parameter name=\"Prefactor\" value=\"5.7\" error=\"0\" scale=\"1e-16\" min=\"1e-07\" max=\"1000\" free=\"1\"\n", | |
| 220 | + " GXmlElement::parameter name=\"Index\" value=\"2.48\" error=\"0\" scale=\"-1\" min=\"0\" max=\"5\" free=\"1\"\n", | |
| 221 | + " GXmlElement::parameter name=\"PivotEnergy\" value=\"0.3\" scale=\"1000000\" min=\"0.01\" max=\"1000\" free=\"0\"\n", | |
| 222 | + " GXmlElement::spatialModel type=\"PointSource\"\n", | |
| 223 | + " GXmlElement::parameter name=\"RA\" value=\"83.6331\" scale=\"1\" min=\"-360\" max=\"360\" free=\"0\"\n", | |
| 224 | + " GXmlElement::parameter name=\"DEC\" value=\"22.0145\" scale=\"1\" min=\"-90\" max=\"90\" free=\"0\"\n", | |
| 225 | + " GXmlElement::source name=\"BackgroundModel\" type=\"CTACubeBackground\" instrument=\"CTA,HESS,MAGIC,VERITAS\"\n", | |
| 226 | + " GXmlElement::spectrum type=\"PowerLaw\"\n", | |
| 227 | + " GXmlElement::parameter name=\"Prefactor\" value=\"1\" error=\"0\" scale=\"1\" min=\"0.01\" max=\"100\" free=\"1\"\n", | |
| 228 | + " GXmlElement::parameter name=\"Index\" value=\"0\" error=\"0\" scale=\"1\" min=\"-5\" max=\"5\" free=\"1\"\n", | |
| 229 | + " GXmlElement::parameter name=\"PivotEnergy\" value=\"1\" scale=\"1000000\" free=\"0\"\n" | |
| 230 | + ] | |
| 231 | + } | |
| 232 | + ], | |
| 233 | + "source": [ | |
| 234 | + "print(gammalib.GXml('model.xml'))" | |
| 235 | + ] | |
| 236 | + }, | |
| 237 | + { | |
| 238 | + "cell_type": "markdown", | |
| 239 | + "metadata": {}, | |
| 240 | + "source": [ | |
| 241 | + "The Crab source component is the same that is also present in `$CTOOLS/share/models/crab.xml` and is not modified. The background component, however, has been replaced by a model of type \"CTACubeBackground\". This model is a 3-dimensional data cube that describes the expected background rate as function of spatial position and energy. The data cube is multiplied by a power law spectrum that allows to adjust the normalization and slope of the background spectrum in the fit. This power law could be replaced by any spectral model that is found as an appropriate multiplicator to the background cube.\n", | |
| 242 | + "\n", | |
| 243 | + "**There is no constraint on providing the same spatial binning or the same energy binning for an exposure cube, a PSF cube, an energy dispersion cube, a background cube and a counts cube**. ctools interpolates internally all response cubes hence any arbitrary appropriate binning may be used. Using the same binning for the exposure cube, the background cube and the counts cube is only a convenience.\n", | |
| 244 | + "\n", | |
| 245 | + "## Likelihood fitting\n", | |
| 246 | + "\n", | |
| 247 | + "Now you have all files at hand to perform a stacked maximum likelihood analysis using the `ctlike` tool:" | |
| 248 | + ] | |
| 249 | + }, | |
| 250 | + { | |
| 251 | + "cell_type": "code", | |
| 252 | + "execution_count": 34, | |
| 253 | + "metadata": { | |
| 254 | + "collapsed": true | |
| 255 | + }, | |
| 256 | + "outputs": [], | |
| 257 | + "source": [ | |
| 258 | + "like = ctools.ctlike()\n", | |
| 259 | + "\n", | |
| 260 | + "like['inobs'] = 'cntcube.fits'\n", | |
| 261 | + "like['expcube'] = 'expcube.fits'\n", | |
| 262 | + "like['psfcube'] = 'psfcube.fits'\n", | |
| 263 | + "like['bkgcube'] = 'bkgcube.fits'\n", | |
| 264 | + "like['inmodel'] = 'model.xml'\n", | |
| 265 | + "like['outmodel'] = 'crab_results.xml'\n", | |
| 266 | + "\n", | |
| 267 | + "like.execute()" | |
| 268 | + ] | |
| 269 | + }, | |
| 270 | + { | |
| 271 | + "cell_type": "markdown", | |
| 272 | + "metadata": {}, | |
| 273 | + "source": [ | |
| 274 | + "`ctlike` uses as input observations the counts cube and therefore needs also the exposure cube, the PSF cube, and the background cube file names.\n", | |
| 275 | + "\n", | |
| 276 | + "The results of the `ctlike` run are shown below." | |
| 277 | + ] | |
| 278 | + }, | |
| 279 | + { | |
| 280 | + "cell_type": "code", | |
| 281 | + "execution_count": 35, | |
| 282 | + "metadata": {}, | |
| 283 | + "outputs": [ | |
| 284 | + { | |
| 285 | + "name": "stdout", | |
| 286 | + "output_type": "stream", | |
| 287 | + "text": [ | |
| 288 | + "=== GOptimizerLM ===\n", | |
| 289 | + " Optimized function value ..: 86422.452\n", | |
| 290 | + " Absolute precision ........: 0.005\n", | |
| 291 | + " Acceptable value decrease .: 2\n", | |
| 292 | + " Optimization status .......: converged\n", | |
| 293 | + " Number of parameters ......: 10\n", | |
| 294 | + " Number of free parameters .: 4\n", | |
| 295 | + " Number of iterations ......: 3\n", | |
| 296 | + " Lambda ....................: 1e-06\n" | |
| 297 | + ] | |
| 298 | + } | |
| 299 | + ], | |
| 300 | + "source": [ | |
| 301 | + "print(like.opt())" | |
| 302 | + ] | |
| 303 | + }, | |
| 304 | + { | |
| 305 | + "cell_type": "code", | |
| 306 | + "execution_count": 42, | |
| 307 | + "metadata": {}, | |
| 308 | + "outputs": [ | |
| 309 | + { | |
| 310 | + "name": "stdout", | |
| 311 | + "output_type": "stream", | |
| 312 | + "text": [ | |
| 313 | + "=== GModels ===\n", | |
| 314 | + " Number of models ..........: 2\n", | |
| 315 | + " Number of parameters ......: 10\n", | |
| 316 | + "=== GModelSky ===\n", | |
| 317 | + " Name ......................: Crab\n", | |
| 318 | + " Instruments ...............: all\n", | |
| 319 | + " Instrument scale factors ..: unity\n", | |
| 320 | + " Observation identifiers ...: all\n", | |
| 321 | + " Model type ................: PointSource\n", | |
| 322 | + " Model components ..........: \"PointSource\" * \"PowerLaw\" * \"Constant\"\n", | |
| 323 | + " Number of parameters ......: 6\n", | |
| 324 | + " Number of spatial par's ...: 2\n", | |
| 325 | + " RA .......................: 83.6331 [-360,360] deg (fixed,scale=1)\n", | |
| 326 | + " DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1)\n", | |
| 327 | + " Number of spectral par's ..: 3\n", | |
| 328 | + " Prefactor ................: 5.40797211044735e-16 +/- 6.94846530224995e-18 [1e-23,1e-13] ph/cm2/s/MeV (free,scale=1e-16,gradient)\n", | |
| 329 | + " Index ....................: -2.47003134993771 +/- 0.0110330851626934 [-0,-5] (free,scale=-1,gradient)\n", | |
| 330 | + " PivotEnergy ..............: 300000 [10000,1000000000] MeV (fixed,scale=1000000,gradient)\n", | |
| 331 | + " Number of temporal par's ..: 1\n", | |
| 332 | + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n", | |
| 333 | + "=== GCTAModelCubeBackground ===\n", | |
| 334 | + " Name ......................: BackgroundModel\n", | |
| 335 | + " Instruments ...............: CTA, HESS, MAGIC, VERITAS\n", | |
| 336 | + " Instrument scale factors ..: unity\n", | |
| 337 | + " Observation identifiers ...: all\n", | |
| 338 | + " Model type ................: \"PowerLaw\" * \"Constant\"\n", | |
| 339 | + " Number of parameters ......: 4\n", | |
| 340 | + " Number of spectral par's ..: 3\n", | |
| 341 | + " Prefactor ................: 1.01204145198916 +/- 0.011383931508583 [0.01,100] ph/cm2/s/MeV (free,scale=1,gradient)\n", | |
| 342 | + " Index ....................: 0.0131705709801291 +/- 0.00679881308729772 [-5,5] (free,scale=1,gradient)\n", | |
| 343 | + " PivotEnergy ..............: 1000000 MeV (fixed,scale=1000000,gradient)\n", | |
| 344 | + " Number of temporal par's ..: 1\n", | |
| 345 | + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n" | |
| 346 | + ] | |
| 347 | + } | |
| 348 | + ], | |
| 349 | + "source": [ | |
| 350 | + "print(like.obs().models())" | |
| 351 | + ] | |
| 352 | + }, | |
| 353 | + { | |
| 354 | + "cell_type": "markdown", | |
| 355 | + "metadata": { | |
| 356 | + "collapsed": true | |
| 357 | + }, | |
| 358 | + "source": [ | |
| 359 | + "If you want to consider also the energy dispersion during the maximum likelihood fitting you should pass the hidden (i.e., not queried by the command line interface) `edisp` parameter to `ctlike`, and the energy dispersion cube:" | |
| 360 | + ] | |
| 361 | + }, | |
| 362 | + { | |
| 363 | + "cell_type": "code", | |
| 364 | + "execution_count": 33, | |
| 365 | + "metadata": { | |
| 366 | + "collapsed": true | |
| 367 | + }, | |
| 368 | + "outputs": [], | |
| 369 | + "source": [ | |
| 370 | + "like = ctools.ctlike()\n", | |
| 371 | + "\n", | |
| 372 | + "like['inobs'] = 'cntcube.fits'\n", | |
| 373 | + "like['expcube'] = 'expcube.fits'\n", | |
| 374 | + "like['psfcube'] = 'psfcube.fits'\n", | |
| 375 | + "like['bkgcube'] = 'bkgcube.fits'\n", | |
| 376 | + "like['edisp'] = True\n", | |
| 377 | + "like['edispcube'] = 'edispcube.fits'\n", | |
| 378 | + "like['inmodel'] = 'model.xml'\n", | |
| 379 | + "like['outmodel'] = 'crab_results.xml'\n", | |
| 380 | + "\n", | |
| 381 | + "# like.execute()" | |
| 382 | + ] | |
| 383 | + }, | |
| 384 | + { | |
| 385 | + "cell_type": "markdown", | |
| 386 | + "metadata": {}, | |
| 387 | + "source": [ | |
| 388 | + "**The maximum likelihood computation including energy dispersion is more time consuming**, and in many situations the impact of the energy dispersion on the analysis results will be very small. So make sure that you really need energy dispersion before you are using it. Uncomment the execute() call in the previous cell to perform the likelihood analysis including energy dispersion." | |
| 389 | + ] | |
| 390 | + } | |
| 391 | + ], | |
| 392 | + "metadata": { | |
| 393 | + "kernelspec": { | |
| 394 | + "display_name": "Python 3", | |
| 395 | + "language": "python", | |
| 396 | + "name": "python3" | |
| 397 | + }, | |
| 398 | + "language_info": { | |
| 399 | + "codemirror_mode": { | |
| 400 | + "name": "ipython", | |
| 401 | + "version": 3 | |
| 402 | + }, | |
| 403 | + "file_extension": ".py", | |
| 404 | + "mimetype": "text/x-python", | |
| 405 | + "name": "python", | |
| 406 | + "nbconvert_exporter": "python", | |
| 407 | + "pygments_lexer": "ipython3", | |
| 408 | + "version": "3.6.2" | |
| 409 | + } | |
| 410 | + }, | |
| 411 | + "nbformat": 4, | |
| 412 | + "nbformat_minor": 2 | |
| 413 | +} | ... | ... |
doc/source/users/tutorials/quickstart/butterfly.jpg
doc/source/users/tutorials/quickstart/butterfly.rst
| ... | ... | @@ -37,12 +37,11 @@ default is set to 100. Below an excerpt of the first lines of the |
| 37 | 37 | ``butterfly.txt`` file: |
| 38 | 38 | |
| 39 | 39 | .. code-block:: none |
| 40 | - | |
| 41 | - 103514.216667934 7.65729960995773e-15 7.45677281959723e-15 7.85782640031824e-15 | |
| 42 | - 110917.48152624 6.46256412586182e-15 6.2982352355303e-15 6.62689301619334e-15 | |
| 43 | - 118850.222743702 5.45423807455102e-15 5.3195999976704e-15 5.58887615143164e-15 | |
| 44 | - 127350.308101666 4.6032367949486e-15 4.49293900723421e-15 4.71353458266298e-15 | |
| 45 | - 136458.313658893 3.88501358040058e-15 3.7946590323386e-15 3.97536812846257e-15 | |
| 40 | + | |
| 41 | + 103514.216667934 8.08876441182872e-15 7.86364405017512e-15 8.31388477348232e-15 | |
| 42 | + 110917.48152624 6.81370736945431e-15 6.62965024227895e-15 6.99776449662967e-15 | |
| 43 | + 118850.222743702 5.73964152654309e-15 5.58918876927557e-15 5.89009428381061e-15 | |
| 44 | + 127350.308101666 4.83488401643174e-15 4.71191629605204e-15 4.95785173681143e-15 | |
| 46 | 45 | ... |
| 47 | 46 | |
| 48 | 47 | A graphical display of the results is shown below: | ... | ... |
doc/source/users/tutorials/quickstart/cntmap-map.jpg
doc/source/users/tutorials/quickstart/ctools-from-python.ipynb
| ... | ... | @@ -9,7 +9,9 @@ |
| 9 | 9 | }, |
| 10 | 10 | { |
| 11 | 11 | "cell_type": "raw", |
| 12 | - "metadata": {"jupyter.source_hidden": true}, | |
| 12 | + "metadata": { | |
| 13 | + "jupyter.source_hidden": true | |
| 14 | + }, | |
| 13 | 15 | "source": [ |
| 14 | 16 | "<div align=\"right\"><a href=\"../../../_downloads/ctools-from-python.ipynb\" download=\"ctools-from-python.ipynb\"><img src=\"../../../_static/download-notebook.jpg\" alt=\"Download Notebook\" height=\"40\"></a></div>" |
| 15 | 17 | ] |
| ... | ... | @@ -22,7 +24,7 @@ |
| 22 | 24 | "\n", |
| 23 | 25 | "ctools provides two Python modules that allow using all tools and scripts as Python classes. To use ctools from Python you have to import the `ctools` and `cscripts` modules into Python. You should also import the `gammalib` module, as ctools without GammaLib is generally not very useful.\n", |
| 24 | 26 | "\n", |
| 25 | - "__Warning:__ Always import gammalib before you import ctools and cscripts." | |
| 27 | + "__Warning:__ Always import `gammalib` before you import `ctools` and `cscripts`." | |
| 26 | 28 | ] |
| 27 | 29 | }, |
| 28 | 30 | { |
| ... | ... | @@ -60,8 +62,8 @@ |
| 60 | 62 | "sim['outevents'] = 'events.fits'\n", |
| 61 | 63 | "sim['caldb'] = 'prod2'\n", |
| 62 | 64 | "sim['irf'] = 'South_0.5h'\n", |
| 63 | - "sim['ra'] = 83.63\n", | |
| 64 | - "sim['dec'] = 22.01\n", | |
| 65 | + "sim['ra'] = 83.5\n", | |
| 66 | + "sim['dec'] = 22.8\n", | |
| 65 | 67 | "sim['rad'] = 5.0\n", |
| 66 | 68 | "sim['tmin'] = '2020-01-01T00:00:00'\n", |
| 67 | 69 | "sim['tmax'] = '2020-01-01T01:00:00'\n", | ... | ... |
doc/source/users/tutorials/quickstart/energy_dispersion.rst
| ... | ... | @@ -29,8 +29,8 @@ To simulate events taking the energy dispersion into account you run the |
| 29 | 29 | .. code-block:: bash |
| 30 | 30 | |
| 31 | 31 | $ ctobssim edisp=yes |
| 32 | - RA of pointing (degrees) (0-360) [83.63] | |
| 33 | - Dec of pointing (degrees) (-90-90) [22.01] | |
| 32 | + RA of pointing (degrees) (0-360) [83.5] | |
| 33 | + Dec of pointing (degrees) (-90-90) [22.8] | |
| 34 | 34 | Radius of FOV (degrees) (0-180) [5.0] |
| 35 | 35 | Start time (UTC string, JD, MJD or MET in seconds) [2020-01-01T00:00:00] |
| 36 | 36 | Stop time (UTC string, JD, MJD or MET in seconds) [2020-01-01T00:30:00] 2020-01-01T01:00:00 | ... | ... |
doc/source/users/tutorials/quickstart/fitting.rst
| ... | ... | @@ -24,12 +24,16 @@ typing: |
| 24 | 24 | Output model definition XML file [crab_results.xml] |
| 25 | 25 | |
| 26 | 26 | The data are fitted in *binned* mode, which means that the events |
| 27 | -have been binned into a counts cube and the fit computes the log-likelihood | |
| 27 | +have been binned into a 3D counts cube and the fit computes the log-likelihood | |
| 28 | 28 | function by summing over all 200 x 200 x 20 bins of the counts cube. There is |
| 29 | 29 | an alternative method, the so called *unbinned* mode, where the events are |
| 30 | 30 | not binned into a counts cube and the log-likelihood is computed directly by |
| 31 | 31 | summing over all events. |
| 32 | -:ref:`We will explore the unbinned mode later <start_unbinned>`. | |
| 32 | +:ref:`We will explore the unbinned mode later <start_unbinned>`. Yet a | |
| 33 | +third alternative method (*On/Off* mode) consists in binning the events only in energy | |
| 34 | +integrating over arrival direction within a Source (On) and one or | |
| 35 | +more Background (Off) regions to minimise the dependency on the IRF | |
| 36 | +background model. :ref:`We will explore the On/Off mode later <start_onoff>` | |
| 33 | 37 | |
| 34 | 38 | The :ref:`ctlike` tool produced a |
| 35 | 39 | :ref:`model definition XML output file <glossary_moddef>` |
| ... | ... | @@ -47,25 +51,25 @@ that was produced by the run: |
| 47 | 51 | |
| 48 | 52 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> |
| 49 | 53 | <source_library title="source library"> |
| 50 | - <source name="Crab" type="PointSource"> | |
| 51 | - <spectrum type="PowerLaw"> | |
| 52 | - <parameter name="Prefactor" value="5.61368377731832" error="0.0982975197293023" scale="1e-16" min="1e-07" max="1000" free="1" /> | |
| 53 | - <parameter name="Index" value="2.45569249143075" error="0.0145471260625612" scale="-1" min="0" max="5" free="1" /> | |
| 54 | - <parameter name="PivotEnergy" value="0.3" scale="1000000" min="0.01" max="1000" free="0" /> | |
| 55 | - </spectrum> | |
| 56 | - <spatialModel type="PointSource"> | |
| 57 | - <parameter name="RA" value="83.6331" scale="1" min="-360" max="360" free="0" /> | |
| 58 | - <parameter name="DEC" value="22.0145" scale="1" min="-90" max="90" free="0" /> | |
| 59 | - </spatialModel> | |
| 60 | - </source> | |
| 61 | - <source name="BackgroundModel" type="CTACubeBackground" instrument="CTA,HESS,MAGIC,VERITAS"> | |
| 62 | - <spectrum type="PowerLaw"> | |
| 63 | - <parameter name="Prefactor" value="0.945994938701748" error="0.0148673466828289" scale="1" min="0.01" max="100" free="1" /> | |
| 64 | - <parameter name="Index" value="0.0198073832868029" error="0.00948925246912034" scale="1" min="-5" max="5" free="1" /> | |
| 65 | - <parameter name="PivotEnergy" value="1" scale="1000000" free="0" /> | |
| 66 | - </spectrum> | |
| 67 | - </source> | |
| 68 | - </source_library> | |
| 54 | + <source name="Crab" type="PointSource"> | |
| 55 | + <spectrum type="PowerLaw"> | |
| 56 | + <parameter name="Prefactor" value="5.75838848465398" error="0.106769545262219" scale="1e-16" min="1e-07" max="1000" free="1" /> | |
| 57 | + <parameter name="Index" value="2.48329029246896" error="0.0156629819926589" scale="-1" min="0" max="5" free="1" /> | |
| 58 | + <parameter name="PivotEnergy" value="0.3" scale="1000000" min="0.01" max="1000" free="0" /> | |
| 59 | + </spectrum> | |
| 60 | + <spatialModel type="PointSource"> | |
| 61 | + <parameter name="RA" value="83.6331" scale="1" min="-360" max="360" free="0" /> | |
| 62 | + <parameter name="DEC" value="22.0145" scale="1" min="-90" max="90" free="0" /> | |
| 63 | + </spatialModel> | |
| 64 | + </source> | |
| 65 | + <source name="BackgroundModel" type="CTACubeBackground" instrument="CTA,HESS,MAGIC,VERITAS"> | |
| 66 | + <spectrum type="PowerLaw"> | |
| 67 | + <parameter name="Prefactor" value="1.01452697987952" error="0.0164053949309481" scale="1" min="0.01" max="100" free="1" /> | |
| 68 | + <parameter name="Index" value="0.0139985850735283" error="0.00978611932246665" scale="1" min="-5" max="5" free="1" /> | |
| 69 | + <parameter name="PivotEnergy" value="1" scale="1000000" free="0" /> | |
| 70 | + </spectrum> | |
| 71 | + </source> | |
| 72 | + </source_library> | |
| 69 | 73 | |
| 70 | 74 | In this example, the ``Prefactor`` and ``Index`` of the spectral model for the |
| 71 | 75 | Crab nebula as well as the ``Prefactor`` and ``Index`` of the background spectral |
| ... | ... | @@ -98,62 +102,63 @@ Below the last lines of the log file that was produced by this run: |
| 98 | 102 | |
| 99 | 103 | .. code-block:: none |
| 100 | 104 | |
| 101 | - 2017-08-08T20:24:06: +=================================+ | |
| 102 | - 2017-08-08T20:24:06: | Maximum likelihood optimisation | | |
| 103 | - 2017-08-08T20:24:06: +=================================+ | |
| 104 | - 2017-08-08T20:24:07: >Iteration 0: -logL=56488.484, Lambda=1.0e-03 | |
| 105 | - 2017-08-08T20:24:07: >Iteration 1: -logL=56431.025, Lambda=1.0e-03, delta=57.459, step=1.0e+00, max(|grad|)=128.772103 [Index:7] | |
| 106 | - 2017-08-08T20:24:08: >Iteration 2: -logL=56430.794, Lambda=1.0e-04, delta=0.232, step=1.0e+00, max(|grad|)=0.505741 [Index:7] | |
| 107 | - 2017-08-08T20:24:09: >Iteration 3: -logL=56430.794, Lambda=1.0e-05, delta=0.000, step=1.0e+00, max(|grad|)=0.017423 [Index:3] | |
| 108 | - 2017-08-08T20:24:09: | |
| 109 | - 2017-08-08T20:24:09: +=========================================+ | |
| 110 | - 2017-08-08T20:24:09: | Maximum likelihood optimisation results | | |
| 111 | - 2017-08-08T20:24:09: +=========================================+ | |
| 112 | - 2017-08-08T20:24:09: === GOptimizerLM === | |
| 113 | - 2017-08-08T20:24:09: Optimized function value ..: 56430.794 | |
| 114 | - 2017-08-08T20:24:09: Absolute precision ........: 0.005 | |
| 115 | - 2017-08-08T20:24:09: Acceptable value decrease .: 2 | |
| 116 | - 2017-08-08T20:24:09: Optimization status .......: converged | |
| 117 | - 2017-08-08T20:24:09: Number of parameters ......: 10 | |
| 118 | - 2017-08-08T20:24:09: Number of free parameters .: 4 | |
| 119 | - 2017-08-08T20:24:09: Number of iterations ......: 3 | |
| 120 | - 2017-08-08T20:24:09: Lambda ....................: 1e-06 | |
| 121 | - 2017-08-08T20:24:09: Maximum log likelihood ....: -56430.794 | |
| 122 | - 2017-08-08T20:24:09: Observed events (Nobs) ...: 18827.000 | |
| 123 | - 2017-08-08T20:24:09: Predicted events (Npred) ..: 18827.000 (Nobs - Npred = 1.92705083463807e-05) | |
| 124 | - 2017-08-08T20:24:09: === GModels === | |
| 125 | - 2017-08-08T20:24:09: Number of models ..........: 2 | |
| 126 | - 2017-08-08T20:24:09: Number of parameters ......: 10 | |
| 127 | - 2017-08-08T20:24:09: === GModelSky === | |
| 128 | - 2017-08-08T20:24:09: Name ......................: Crab | |
| 129 | - 2017-08-08T20:24:09: Instruments ...............: all | |
| 130 | - 2017-08-08T20:24:09: Instrument scale factors ..: unity | |
| 131 | - 2017-08-08T20:24:09: Observation identifiers ...: all | |
| 132 | - 2017-08-08T20:24:09: Model type ................: PointSource | |
| 133 | - 2017-08-08T20:24:09: Model components ..........: "PointSource" * "PowerLaw" * "Constant" | |
| 134 | - 2017-08-08T20:24:09: Number of parameters ......: 6 | |
| 135 | - 2017-08-08T20:24:09: Number of spatial par's ...: 2 | |
| 136 | - 2017-08-08T20:24:09: RA .......................: 83.6331 [-360,360] deg (fixed,scale=1) | |
| 137 | - 2017-08-08T20:24:09: DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1) | |
| 138 | - 2017-08-08T20:24:09: Number of spectral par's ..: 3 | |
| 139 | - 2017-08-08T20:24:09: Prefactor ................: 5.61368377731832e-16 +/- 9.82975197293023e-18 [1e-23,1e-13] ph/cm2/s/MeV (free,scale=1e-16,gradient) | |
| 140 | - 2017-08-08T20:24:09: Index ....................: -2.45569249143075 +/- 0.0145471260625612 [-0,-5] (free,scale=-1,gradient) | |
| 141 | - 2017-08-08T20:24:09: PivotEnergy ..............: 300000 [10000,1000000000] MeV (fixed,scale=1000000,gradient) | |
| 142 | - 2017-08-08T20:24:09: Number of temporal par's ..: 1 | |
| 143 | - 2017-08-08T20:24:09: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 144 | - 2017-08-08T20:24:09: === GCTAModelCubeBackground === | |
| 145 | - 2017-08-08T20:24:09: Name ......................: BackgroundModel | |
| 146 | - 2017-08-08T20:24:09: Instruments ...............: CTA, HESS, MAGIC, VERITAS | |
| 147 | - 2017-08-08T20:24:09: Instrument scale factors ..: unity | |
| 148 | - 2017-08-08T20:24:09: Observation identifiers ...: all | |
| 149 | - 2017-08-08T20:24:09: Model type ................: "PowerLaw" * "Constant" | |
| 150 | - 2017-08-08T20:24:09: Number of parameters ......: 4 | |
| 151 | - 2017-08-08T20:24:09: Number of spectral par's ..: 3 | |
| 152 | - 2017-08-08T20:24:09: Prefactor ................: 0.945994938701748 +/- 0.0148673466828289 [0.01,100] ph/cm2/s/MeV (free,scale=1,gradient) | |
| 153 | - 2017-08-08T20:24:09: Index ....................: 0.0198073832868029 +/- 0.00948925246912034 [-5,5] (free,scale=1,gradient) | |
| 154 | - 2017-08-08T20:24:09: PivotEnergy ..............: 1000000 MeV (fixed,scale=1000000,gradient) | |
| 155 | - 2017-08-08T20:24:09: Number of temporal par's ..: 1 | |
| 156 | - 2017-08-08T20:24:09: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 105 | + 2017-11-28T15:36:34: +=================================+ | |
| 106 | + 2017-11-28T15:36:34: | Maximum likelihood optimisation | | |
| 107 | + 2017-11-28T15:36:34: +=================================+ | |
| 108 | + 2017-11-28T15:36:34: >Iteration 0: -logL=52917.614, Lambda=1.0e-03 | |
| 109 | + 2017-11-28T15:36:35: >Iteration 1: -logL=52916.284, Lambda=1.0e-03, delta=1.330, step=1.0e+00, m | |
| 110 | + ax(|grad|)=-2.668420 [Prefactor:6] | |
| 111 | + 2017-11-28T15:36:35: >Iteration 2: -logL=52916.283, Lambda=1.0e-04, delta=0.001, step=1.0e+00, m | |
| 112 | + ax(|grad|)=-0.037269 [Index:7] | |
| 113 | + 2017-11-28T15:36:36: | |
| 114 | + 2017-11-28T15:36:36: +=========================================+ | |
| 115 | + 2017-11-28T15:36:36: | Maximum likelihood optimisation results | | |
| 116 | + 2017-11-28T15:36:36: +=========================================+ | |
| 117 | + 2017-11-28T15:36:36: === GOptimizerLM === | |
| 118 | + 2017-11-28T15:36:36: Optimized function value ..: 52916.283 | |
| 119 | + 2017-11-28T15:36:36: Absolute precision ........: 0.005 | |
| 120 | + 2017-11-28T15:36:36: Acceptable value decrease .: 2 | |
| 121 | + 2017-11-28T15:36:36: Optimization status .......: converged | |
| 122 | + 2017-11-28T15:36:36: Number of parameters ......: 10 | |
| 123 | + 2017-11-28T15:36:36: Number of free parameters .: 4 | |
| 124 | + 2017-11-28T15:36:36: Number of iterations ......: 2 | |
| 125 | + 2017-11-28T15:36:36: Lambda ....................: 1e-05 | |
| 126 | + 2017-11-28T15:36:36: Maximum log likelihood ....: -52916.283 | |
| 127 | + 2017-11-28T15:36:36: Observed events (Nobs) ...: 17279.000 | |
| 128 | + 2017-11-28T15:36:36: Predicted events (Npred) ..: 17278.995 (Nobs - Npred = 0.00451555556355743) | |
| 129 | + 2017-11-28T15:36:36: === GModels === | |
| 130 | + 2017-11-28T15:36:36: Number of models ..........: 2 | |
| 131 | + 2017-11-28T15:36:36: Number of parameters ......: 10 | |
| 132 | + 2017-11-28T15:36:36: === GModelSky === | |
| 133 | + 2017-11-28T15:36:36: Name ......................: Crab | |
| 134 | + 2017-11-28T15:36:36: Instruments ...............: all | |
| 135 | + 2017-11-28T15:36:36: Instrument scale factors ..: unity | |
| 136 | + 2017-11-28T15:36:36: Observation identifiers ...: all | |
| 137 | + 2017-11-28T15:36:36: Model type ................: PointSource | |
| 138 | + 2017-11-28T15:36:36: Model components ..........: "PointSource" * "PowerLaw" * "Constant" | |
| 139 | + 2017-11-28T15:36:36: Number of parameters ......: 6 | |
| 140 | + 2017-11-28T15:36:36: Number of spatial par's ...: 2 | |
| 141 | + 2017-11-28T15:36:36: RA .......................: 83.6331 [-360,360] deg (fixed,scale=1) | |
| 142 | + 2017-11-28T15:36:36: DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1) | |
| 143 | + 2017-11-28T15:36:36: Number of spectral par's ..: 3 | |
| 144 | + 2017-11-28T15:36:36: Prefactor ................: 5.75838848465398e-16 +/- 1.06769545262219e-17 [1e-23,1e-13] ph/cm2/s/MeV (free,scale=1e-16,gradient) | |
| 145 | + 2017-11-28T15:36:36: Index ....................: -2.48329029246896 +/- 0.0156629819926589 [-0,-5] (free,scale=-1,gradient) | |
| 146 | + 2017-11-28T15:36:36: PivotEnergy ..............: 300000 [10000,1000000000] MeV (fixed,scale=1000000,gradient) | |
| 147 | + 2017-11-28T15:36:36: Number of temporal par's ..: 1 | |
| 148 | + 2017-11-28T15:36:36: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 149 | + 2017-11-28T15:36:36: === GCTAModelCubeBackground === | |
| 150 | + 2017-11-28T15:36:36: Name ......................: BackgroundModel | |
| 151 | + 2017-11-28T15:36:36: Instruments ...............: CTA, HESS, MAGIC, VERITAS | |
| 152 | + 2017-11-28T15:36:36: Instrument scale factors ..: unity | |
| 153 | + 2017-11-28T15:36:36: Observation identifiers ...: all | |
| 154 | + 2017-11-28T15:36:36: Model type ................: "PowerLaw" * "Constant" | |
| 155 | + 2017-11-28T15:36:36: Number of parameters ......: 4 | |
| 156 | + 2017-11-28T15:36:36: Number of spectral par's ..: 3 | |
| 157 | + 2017-11-28T15:36:36: Prefactor ................: 1.01452697987952 +/- 0.0164053949309481 [0.01,100] ph/cm2/s/MeV (free,scale=1,gradient) | |
| 158 | + 2017-11-28T15:36:36: Index ....................: 0.0139985850735283 +/- 0.00978611932246665 [-5,5] (free,scale=1,gradient) | |
| 159 | + 2017-11-28T15:36:36: PivotEnergy ..............: 1000000 MeV (fixed,scale=1000000,gradient) | |
| 160 | + 2017-11-28T15:36:36: Number of temporal par's ..: 1 | |
| 161 | + 2017-11-28T15:36:36: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 157 | 162 | |
| 158 | 163 | The maximum likelihood optimizer required 3 iterations to converge. This |
| 159 | 164 | is pretty fast, but recall that you used the same model file for the simulation |
| ... | ... | @@ -182,10 +187,11 @@ are not too far from the best fitting values). |
| 182 | 187 | significance for sources in the XML model. This is done by computing |
| 183 | 188 | the Test Statistic value which is defined as twice the log-likelihood |
| 184 | 189 | difference between fitting a source at a given position on top of a |
| 185 | - (background) model or fitting no source. Roughly speaken, the square | |
| 190 | + (background) model or fitting no source. As a rule of thumb, the square | |
| 186 | 191 | root of the Test Statistic value gives the source detection significance |
| 187 | - in Gaussian sigmas, although the exact relation depends somewhat on | |
| 188 | - the formulation of the statistical problem. | |
| 192 | + in Gaussian sigmas, although the actual conversion depends somewhat on | |
| 193 | + the formulation of the statistical problem and the number of | |
| 194 | + degrees of freedom associated with the source. | |
| 189 | 195 | |
| 190 | 196 | To instruct :ref:`ctlike` to compute the Test Statistic value for a |
| 191 | 197 | given source you need to add the attribute ``tscalc="1"`` to the XML |
| ... | ... | @@ -200,14 +206,14 @@ are not too far from the best fitting values). |
| 200 | 206 | |
| 201 | 207 | .. code-block:: none |
| 202 | 208 | |
| 203 | - 2017-08-08T20:34:29: === GModelSky === | |
| 204 | - 2017-08-08T20:34:29: Name ......................: Crab | |
| 205 | - 2017-08-08T20:34:29: Instruments ...............: all | |
| 206 | - 2017-08-08T20:34:29: Test Statistic ............: 21873.9558591403 | |
| 209 | + 2017-11-28T15:47:53: Name ......................: Crab | |
| 210 | + 2017-11-28T15:47:53: Instruments ...............: all | |
| 211 | + 2017-11-28T15:47:53: Test Statistic ............: 19478.9230755261 | |
| 212 | + | |
| 207 | 213 | |
| 208 | 214 | The Test Statistic value will also be added as new attribute |
| 209 | 215 | ``ts`` to the XML result file: |
| 210 | 216 | |
| 211 | 217 | .. code-block:: xml |
| 212 | 218 | |
| 213 | - <source name="Crab" type="PointSource" ts="21873.956" tscalc="1"> | |
| 219 | + <source name="Crab" type="PointSource" ts="19478.923" tscalc="1"> | ... | ... |
doc/source/users/tutorials/quickstart/index.rst
doc/source/users/tutorials/quickstart/onoff.png
0 → 100644
40 KB
doc/source/users/tutorials/quickstart/onoff.rst
0 → 100644
| 1 | +.. _start_onoff: | |
| 2 | + | |
| 3 | +Doing an On/Off analysis | |
| 4 | +-------------------------- | |
| 5 | + | |
| 6 | + .. admonition:: What you will learn | |
| 7 | + | |
| 8 | + You will learn how to **adjust a parametrised spectral model to | |
| 9 | + the events deriving the background from the data**. | |
| 10 | + | |
| 11 | + Gamma-ray events are rare compared to the background events, | |
| 12 | + hence small imperfections of the background model can have a | |
| 13 | + large impact on the estimated source parameters. | |
| 14 | + | |
| 15 | + In classical IACT analyses the background has been normally | |
| 16 | + derived from the data, by defining On (source) and Off | |
| 17 | + (background) regions. An On/Off analysis is recommended if you | |
| 18 | + want to assure minimal dependency on the Monte Carlo background model. | |
| 19 | + | |
| 20 | +Last, we consider the classical technique for IACT spectral analysis, | |
| 21 | +in which 1D spectra for On and Off regions are used jointly to | |
| 22 | +determine the source parameters. | |
| 23 | + | |
| 24 | +The script :ref:`csphagen` is used to derive a set of On/Off | |
| 25 | +observations from the event lists. This script saves the source (On) and background (Off) count spectra | |
| 26 | +in `OGIP format <https://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/spectra/ogip_92_007/node5.html>`_, | |
| 27 | +along with the relevant information from the :ref:`instrument response functions <glossary_irf>` | |
| 28 | +refashioned according to this format conventions. | |
| 29 | + | |
| 30 | +:ref:`csphagen` calculates the background counts using the REFLECTED algorithm, in which, for each individual | |
| 31 | +observation the background regions have the same shape as the source region, and | |
| 32 | +are rotated around the center of the camera keeping the same offset. As many | |
| 33 | +reflected regions as possible are used, excluding the area of the camera near | |
| 34 | +the source position. Since the background rates are expected to be approximately | |
| 35 | +radially symmetric in camera coordinates, this method minimizes the impact of | |
| 36 | +the background rate modeling from Monte Carlo. An optional exclusion map (in | |
| 37 | +FITS WCS format) can be provided as input through the ``inexclusion`` hidden | |
| 38 | +parameter if other regions of significant gamma-ray emission ought to be | |
| 39 | +excluded from the background computation. | |
| 40 | + | |
| 41 | +.. code-block:: bash | |
| 42 | + | |
| 43 | + $ csphagen | |
| 44 | + Input event list or observation definition XML file [obs.xml] events_edisp.fits | |
| 45 | + Calibration database [prod2] | |
| 46 | + Instrument response function [South_0.5h] | |
| 47 | + Binning algorithm (LIN|LOG|FILE) [LOG] | |
| 48 | + Lower energy limit (TeV) [0.1] | |
| 49 | + Upper energy limit (TeV) [100.0] | |
| 50 | + Number of energy bins [120] 30 | |
| 51 | + Coordinate system (CEL - celestial, GAL - galactic) (CEL|GAL) [CEL] | |
| 52 | + Right Ascension of source region centre (deg) (0-360) [83.63] | |
| 53 | + Declination of source region centre (deg) (-90-90) [22.01] | |
| 54 | + Radius of source region circle (deg) (0-180) [0.2] | |
| 55 | + Stack multiple observations into single PHA, ARF and RMF files? [no] | |
| 56 | + Output observation definition XML file [onoff_obs.xml] | |
| 57 | + | |
| 58 | +.. note:: | |
| 59 | + | |
| 60 | + - We have used the events simulated accounting for energy | |
| 61 | + dispersion, since energy dispersion is always used in On/Off analysis. | |
| 62 | + | |
| 63 | + - If you wish to limit the number of observations considered to | |
| 64 | + those pointed closer to the source, you can do this either at the | |
| 65 | + observation selection level (see :ref:`csobsselect`), or directly | |
| 66 | + in :ref:`csphagen` via the hidden ``maxoffset`` parameter. | |
| 67 | + | |
| 68 | + - The parameters specified control the energy binning of the count | |
| 69 | + spectra in *reconstructed* energy. For the computation of the | |
| 70 | + instrument response we need a fine binning in *true* energy, | |
| 71 | + which is controlled by the hidden parameters ``etruemin``, | |
| 72 | + ``etruemax``, and ``etruebins``. | |
| 73 | + | |
| 74 | +This has produced in output several files. The xml observations file | |
| 75 | +contains a single On/Off observation. | |
| 76 | + | |
| 77 | +.. code-block:: bash | |
| 78 | + | |
| 79 | + <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 80 | + <observation_list title="observation list"> | |
| 81 | + <observation name="" id="" instrument="CTAOnOff" statistic="cstat"> | |
| 82 | + <parameter name="Pha_on" file="onoff_pha_on.fits" /> | |
| 83 | + <parameter name="Pha_off" file="onoff_pha_off.fits" /> | |
| 84 | + <parameter name="Arf" file="onoff_arf.fits" /> | |
| 85 | + <parameter name="Rmf" file="onoff_rmf.fits" /> | |
| 86 | + </observation> | |
| 87 | + </observation_list> | |
| 88 | + | |
| 89 | +The observation entails four FITS files. ``onoff_pha_on.fits`` and | |
| 90 | +``onoff_pha_off.fits`` contain the On and Off spectra, respectively. | |
| 91 | +These are stored in the SPECTRUM extension of the FITS file, along with ancillary | |
| 92 | +information, notably the scaling factor to be applied to the background spectrum, | |
| 93 | +BACKSCAL. The third extension, EBOUNDS, contains the boundaries of the energy | |
| 94 | +bins, as defined by the binning parameters in input to csphagen. The file | |
| 95 | +``onoff_arf.fits`` contains the spectral response of the instrument | |
| 96 | +extracted fromt the :ref:`instrument response functions <glossary_irf>`, | |
| 97 | +including effective area for gamma-ray detection and background rates, in the | |
| 98 | +SPECRESP extension. The file ``onoff_rmf.fits`` contains the remaining | |
| 99 | +part of the instrument response, i.e., an energy redistribution matrix (MATRIX), | |
| 100 | +as well as another instance of the EBOUNDS table. Note that we are performing a | |
| 101 | +1D analysis: the effect of the PSF is already folded into the effective area | |
| 102 | +computation. | |
| 103 | + | |
| 104 | +.. note:: | |
| 105 | + | |
| 106 | + The first part of the FITS files names (and a full path to the desired | |
| 107 | + location) can be set using the hidden ``prefix`` parameter of | |
| 108 | + :ref:`csphagen`. | |
| 109 | + | |
| 110 | +There are also come ancillary `ds9 <http://ds9.si.edu>`_ region files, that show | |
| 111 | +the On region and the Off regions, ``onoff_on.reg`` and | |
| 112 | +``onoff_off.reg``, respectively. Below there is | |
| 113 | +a skymap where you can see the pointing direction along with the position of | |
| 114 | +the On and Off regions. | |
| 115 | + | |
| 116 | +.. figure:: onoff.png | |
| 117 | + :width: 400px | |
| 118 | + :align: center | |
| 119 | + | |
| 120 | + *Sky map of the events. The cross shows the pointing direction, | |
| 121 | + the green circles the Off regions, and the white circle the On | |
| 122 | + region.* | |
| 123 | + | |
| 124 | +The model to be fit to the observations needs to specify for the | |
| 125 | +background component that we are dealing with a ``CTAOnOff`` analysis. | |
| 126 | + | |
| 127 | +.. code-block:: bash | |
| 128 | + | |
| 129 | + <?xml version="1.0" standalone="no"?> | |
| 130 | + <source_library title="source library"> | |
| 131 | + <source name="Crab" type="PointSource"> | |
| 132 | + <spectrum type="PowerLaw"> | |
| 133 | + <parameter name="Prefactor" scale="1e-16" value="5.7" min="1e-07" max="1000.0" free="1"/> | |
| 134 | + <parameter name="Index" scale="-1" value="2.48" min="0.0" max="+5.0" free="1"/> | |
| 135 | + <parameter name="PivotEnergy" scale="1e6" value="0.3" min="0.01" max="1000.0" free="0"/> | |
| 136 | + </spectrum> | |
| 137 | + <spatialModel type="PointSource"> | |
| 138 | + <parameter name="RA" scale="1.0" value="83.6331" min="-360" max="360" free="0"/> | |
| 139 | + <parameter name="DEC" scale="1.0" value="22.0145" min="-90" max="90" free="0"/> | |
| 140 | + </spatialModel> | |
| 141 | + </source> | |
| 142 | + <source name="CTABackgroundModel" type="CTAIrfBackground" instrument="CTAOnOff"> | |
| 143 | + <spectrum type="PowerLaw"> | |
| 144 | + <parameter name="Prefactor" scale="1.0" value="1.0" min="1e-3" max="1e+3" free="1"/> | |
| 145 | + <parameter name="Index" scale="1.0" value="0.0" min="-5.0" max="+5.0" free="1"/> | |
| 146 | + <parameter name="PivotEnergy" scale="1e6" value="1.0" min="0.01" max="1000.0" free="0"/> | |
| 147 | + </spectrum> | |
| 148 | + </source> | |
| 149 | + </source_library> | |
| 150 | + | |
| 151 | +At this point we can run an On/Off analysis just by passing the On/Off | |
| 152 | +observation container to :ref:`ctlike`. | |
| 153 | + | |
| 154 | +.. code-block:: bash | |
| 155 | + | |
| 156 | + Input event list, counts cube or observation definition XML file [selected_events.fits] onoff_obs.xml | |
| 157 | + Input model definition XML file [$CTOOLS/share/models/crab.xml] crab_onoff.xml | |
| 158 | + Output model definition XML file [crab_results.xml] | |
| 159 | + | |
| 160 | +Below you see the corresponding output from the ``ctlike.log`` | |
| 161 | +file.The fitted parameters are still the same within statistical | |
| 162 | +uncertainties as the ones found in binned/unbinned mode. This may not | |
| 163 | +always be the case, especially if the background is not well known a priori. | |
| 164 | + | |
| 165 | +.. code-block:: bash | |
| 166 | + | |
| 167 | + 2017-11-28T17:26:56: +=================================+ | |
| 168 | + 2017-11-28T17:26:56: | Maximum likelihood optimisation | | |
| 169 | + 2017-11-28T17:26:56: +=================================+ | |
| 170 | + 2017-11-28T17:26:56: >Iteration 0: -logL=-48350.908, Lambda=1.0e-03 | |
| 171 | + 2017-11-28T17:26:56: >Iteration 1: -logL=-48352.759, Lambda=1.0e-03, delta=1.852, step=1.0e+00, max(|grad|)=2.829489 [Index:7] | |
| 172 | + 2017-11-28T17:26:56: >Iteration 2: -logL=-48352.760, Lambda=1.0e-04, delta=0.000, step=1.0e+00, max(|grad|)=0.002408 [Index:3] | |
| 173 | + 2017-11-28T17:26:56: | |
| 174 | + 2017-11-28T17:26:56: +=========================================+ | |
| 175 | + 2017-11-28T17:26:56: | Maximum likelihood optimisation results | | |
| 176 | + 2017-11-28T17:26:56: +=========================================+ | |
| 177 | + 2017-11-28T17:26:56: === GOptimizerLM === | |
| 178 | + 2017-11-28T17:26:56: Optimized function value ..: -48352.760 | |
| 179 | + 2017-11-28T17:26:56: Absolute precision ........: 0.005 | |
| 180 | + 2017-11-28T17:26:56: Acceptable value decrease .: 2 | |
| 181 | + 2017-11-28T17:26:56: Optimization status .......: converged | |
| 182 | + 2017-11-28T17:26:56: Number of parameters ......: 10 | |
| 183 | + 2017-11-28T17:26:56: Number of free parameters .: 4 | |
| 184 | + 2017-11-28T17:26:56: Number of iterations ......: 2 | |
| 185 | + 2017-11-28T17:26:56: Lambda ....................: 1e-05 | |
| 186 | + 2017-11-28T17:26:56: Maximum log likelihood ....: 48352.760 | |
| 187 | + 2017-11-28T17:26:56: Observed events (Nobs) ...: 6656.000 | |
| 188 | + 2017-11-28T17:26:56: Predicted events (Npred) ..: 6655.663 (Nobs - Npred = 0.337440257160779) | |
| 189 | + 2017-11-28T17:26:56: === GModels === | |
| 190 | + 2017-11-28T17:26:56: Number of models ..........: 2 | |
| 191 | + 2017-11-28T17:26:56: Number of parameters ......: 10 | |
| 192 | + 2017-11-28T17:26:56: === GModelSky === | |
| 193 | + 2017-11-28T17:26:56: Name ......................: Crab | |
| 194 | + 2017-11-28T17:26:56: Instruments ...............: all | |
| 195 | + 2017-11-28T17:26:56: Instrument scale factors ..: unity | |
| 196 | + 2017-11-28T17:26:56: Observation identifiers ...: all | |
| 197 | + 2017-11-28T17:26:56: Model type ................: PointSource | |
| 198 | + 2017-11-28T17:26:56: Model components ..........: "PointSource" * "PowerLaw" * "Constant" | |
| 199 | + 2017-11-28T17:26:56: Number of parameters ......: 6 | |
| 200 | + 2017-11-28T17:26:56: Number of spatial par's ...: 2 | |
| 201 | + 2017-11-28T17:26:56: RA .......................: 83.6331 [-360,360] deg (fixed,scale=1) | |
| 202 | + 2017-11-28T17:26:56: DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1) | |
| 203 | + 2017-11-28T17:26:56: Number of spectral par's ..: 3 | |
| 204 | + 2017-11-28T17:26:56: Prefactor ................: 5.69533666063277e-16 +/- 7.77619410705106e-18 [1e-23,1e-13] ph/cm2/s/MeV (free,scale=1e-16,gradient) | |
| 205 | + 2017-11-28T17:26:56: Index ....................: -2.47347083803876 +/- 0.0114544870463654 [-0,-5] (free,scale=-1,gradient) | |
| 206 | + 2017-11-28T17:26:56: PivotEnergy ..............: 300000 [10000,1000000000] MeV (fixed,scale=1000000,gradient) | |
| 207 | + 2017-11-28T17:26:56: Number of temporal par's ..: 1 | |
| 208 | + 2017-11-28T17:26:56: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 209 | + 2017-11-28T17:26:56: === GCTAModelIrfBackground === | |
| 210 | + 2017-11-28T17:26:56: Name ......................: CTABackgroundModel | |
| 211 | + 2017-11-28T17:26:56: Instruments ...............: CTAOnOff | |
| 212 | + 2017-11-28T17:26:56: Instrument scale factors ..: unity | |
| 213 | + 2017-11-28T17:26:56: Observation identifiers ...: all | |
| 214 | + 2017-11-28T17:26:56: Model type ................: "PowerLaw" * "Constant" | |
| 215 | + 2017-11-28T17:26:56: Number of parameters ......: 4 | |
| 216 | + 2017-11-28T17:26:56: Number of spectral par's ..: 3 | |
| 217 | + 2017-11-28T17:26:56: Prefactor ................: 1.00017594707712 +/- 0.0373732914079376 [0.001,1000] ph/cm2/s/MeV (free,scale=1,gradient) | |
| 218 | + 2017-11-28T17:26:56: Index ....................: 0.0190520959815092 +/- 0.0220805114253248 [-5,5] (free,scale=1,gradient) | |
| 219 | + 2017-11-28T17:26:56: PivotEnergy ..............: 1000000 [10000,1000000000] MeV (fixed,scale=1000000,gradient) | |
| 220 | + 2017-11-28T17:26:56: Number of temporal par's ..: 1 | |
| 221 | + 2017-11-28T17:26:56: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 222 | + | |
| 223 | +:ref:`ctlike` has a hidden parameter called ``statistic`` that sets the | |
| 224 | +statistic used for the fit. | |
| 225 | + | |
| 226 | +- The DEFAULT for OnOff osbervations is CSTAT, i.e., Poisson signal and Poisson | |
| 227 | + background. A spectral model for the signal and a spectral model for the | |
| 228 | + background are jointly fit to the On and Off spectra. | |
| 229 | +- WSTAT is a special case of CSTAT, Poisson signal with Poisson background, in | |
| 230 | + which you do not need to have a spectral model for the background and | |
| 231 | + free parameters associated with it. The number of background counts in each | |
| 232 | + energy bin is treated as a nuisance parameter, derived from the On and Off | |
| 233 | + counts by profiling the likelihood function. In this case the only assumption | |
| 234 | + is that the background rate spectrum is the same in the On and Off regions. | |
| 235 | + | |
| 236 | +.. warning:: | |
| 237 | + Beware that the profiling may yield unphysical results (negative background | |
| 238 | + counts) if the number of events in the Off spectra are zero. In this case a | |
| 239 | + null number of expected background events must be enforced, | |
| 240 | + which can result in a bias on the source's parameters. You can address this | |
| 241 | + issue by stacking multiple observations, using a coarser energy binning, or | |
| 242 | + using CSTAT instead (if you have a spectral model for the background that is | |
| 243 | + good enough). See the `XSPEC manual Appendix B <https://heasarc.gsfc.nasa.gov/xanadu/xspec/manual/XSappendixStatistics.html>`_ | |
| 244 | + for more information. | |
| 245 | + | |
| 246 | +- You can also use CHI2, a classical chi square, i.e., a Gaussian signal and | |
| 247 | + Gaussian background. As for CSTAT, a spectral model for the signal and a | |
| 248 | + spectral model for the background are jointly fit to the On and Off | |
| 249 | + spectra. | |
| 250 | + | |
| 251 | +.. note:: | |
| 252 | + | |
| 253 | + Many scripts can also be used in On/Off mode, including | |
| 254 | + :ref:`ctbutterfly` and :ref:`csspec` that were used earlier. It is | |
| 255 | + sufficient to replace the input counts cube/event list with an | |
| 256 | + On/Off observation container to activate On/Off mode for these | |
| 257 | + tools. | |
| 258 | + | |
| 259 | + | ... | ... |
doc/source/users/tutorials/quickstart/residuals.jpg
doc/source/users/tutorials/quickstart/selecting.rst
| ... | ... | @@ -35,43 +35,44 @@ event selection: |
| 35 | 35 | |
| 36 | 36 | .. code-block:: none |
| 37 | 37 | |
| 38 | - 2017-08-08T19:48:43: +===================+ | |
| 39 | - 2017-08-08T19:48:43: | Input observation | | |
| 40 | - 2017-08-08T19:48:43: +===================+ | |
| 41 | - 2017-08-08T19:48:43: === GObservations === | |
| 42 | - 2017-08-08T19:48:43: Number of observations ....: 1 | |
| 43 | - 2017-08-08T19:48:43: Number of models ..........: 0 | |
| 44 | - 2017-08-08T19:48:43: Number of observed events .: 202766 | |
| 45 | - 2017-08-08T19:48:43: Number of predicted events : 0 | |
| 46 | - 2017-08-08T19:48:43: | |
| 47 | - 2017-08-08T19:48:43: +=================+ | |
| 48 | - 2017-08-08T19:48:43: | Event selection | | |
| 49 | - 2017-08-08T19:48:43: +=================+ | |
| 50 | - 2017-08-08T19:48:43: === CTA observation === | |
| 51 | - 2017-08-08T19:48:43: Input filename ............: events.fits | |
| 52 | - 2017-08-08T19:48:43: Event extension name ......: EVENTS | |
| 53 | - 2017-08-08T19:48:43: GTI extension name ........: GTI | |
| 54 | - 2017-08-08T19:48:43: === Event selection === | |
| 55 | - 2017-08-08T19:48:43: Time range (MJD) ..........: 58849.0077451852 - 58849.0285785185 days | |
| 56 | - 2017-08-08T19:48:43: Time range (UTC) ..........: 2020-01-01T00:10:00 - 2020-01-01T00:40:00 | |
| 57 | - 2017-08-08T19:48:43: Time range (MET) ..........: 631109469.184 - 631111269.184 seconds | |
| 58 | - 2017-08-08T19:48:43: Selected energy range .....: 0.1 - 100 TeV | |
| 59 | - 2017-08-08T19:48:43: Requested RoI .............: Centre(RA,DEC)=(83.63, 22.01) deg, Radius=3 deg | |
| 60 | - 2017-08-08T19:48:43: RoI of data ...............: Centre(RA,DEC)=(83.63, 22.01) deg, Radius=5 deg | |
| 61 | - 2017-08-08T19:48:43: Selected RoI ..............: Centre(RA,DEC)=(83.63, 22.01) deg, Radius=3 deg | |
| 62 | - 2017-08-08T19:48:43: cfitsio selection .........: TIME >= 631109469.18399978 && TIME <= 631111269.18400002 && ENERGY >= 0.10000000 && ENERGY <= 100.00000000 && ANGSEP(83.630000,22.010000,RA,DEC) <= 3.000000 | |
| 63 | - 2017-08-08T19:48:43: FITS filename .............: /var/tmp/tmp.0.FLddl1[EVENTS][TIME >= 631109469.18399978 && TIME <= 631111269.18400002 && ENERGY >= 0.10000000 && ENERGY <= 100.00000000 && ANGSEP(83.630000,22.010000,RA,DEC) <= 3.000000] | |
| 64 | - 2017-08-08T19:48:43: | |
| 65 | - 2017-08-08T19:48:43: +====================+ | |
| 66 | - 2017-08-08T19:48:43: | Output observation | | |
| 67 | - 2017-08-08T19:48:43: +====================+ | |
| 68 | - 2017-08-08T19:48:43: === GObservations === | |
| 69 | - 2017-08-08T19:48:43: Number of observations ....: 1 | |
| 70 | - 2017-08-08T19:48:43: Number of models ..........: 0 | |
| 71 | - 2017-08-08T19:48:43: Number of observed events .: 21991 | |
| 72 | - 2017-08-08T19:48:43: Number of predicted events : 0 | |
| 38 | + 2017-11-28T14:21:57: +===================+ | |
| 39 | + 2017-11-28T14:21:57: | Input observation | | |
| 40 | + 2017-11-28T14:21:57: +===================+ | |
| 41 | + 2017-11-28T14:21:57: === GObservations === | |
| 42 | + 2017-11-28T14:21:57: Number of observations ....: 1 | |
| 43 | + 2017-11-28T14:21:57: Number of models ..........: 0 | |
| 44 | + 2017-11-28T14:21:57: Number of observed events .: 200833 | |
| 45 | + 2017-11-28T14:21:57: Number of predicted events : 0 | |
| 46 | + 2017-11-28T14:21:57: | |
| 47 | + 2017-11-28T14:21:57: +=================+ | |
| 48 | + 2017-11-28T14:21:57: | Event selection | | |
| 49 | + 2017-11-28T14:21:57: +=================+ | |
| 50 | + 2017-11-28T14:21:57: === CTA observation === | |
| 51 | + 2017-11-28T14:21:57: Input filename ............: events.fits | |
| 52 | + 2017-11-28T14:21:57: Event extension name ......: EVENTS | |
| 53 | + 2017-11-28T14:21:57: GTI extension name ........: GTI | |
| 54 | + 2017-11-28T14:21:58: === Event selection === | |
| 55 | + 2017-11-28T14:21:58: Time range (MJD) ..........: 58849.0077451852 - 58849.0285785185 days | |
| 56 | + 2017-11-28T14:21:58: Time range (UTC) ..........: 2020-01-01T00:10:00 - 2020-01-01T00:40:00 | |
| 57 | + 2017-11-28T14:21:58: Time range (MET) ..........: 631109469.184 - 631111269.184 seconds | |
| 58 | + 2017-11-28T14:21:58: Selected energy range .....: 0.1 - 100 TeV | |
| 59 | + 2017-11-28T14:21:58: Requested RoI .............: Centre(RA,DEC)=(83.63, 22.01) deg, Radius=3 deg | |
| 60 | + 2017-11-28T14:21:58: RoI of data ...............: Centre(RA,DEC)=(83.5, 22.8) deg, Radius=5 deg | |
| 61 | + 2017-11-28T14:21:58: Selected RoI ..............: Centre(RA,DEC)=(83.63, 22.01) deg, Radius=3 deg | |
| 62 | + 2017-11-28T14:21:58: cfitsio selection .........: TIME >= 631109469.18399978 && TIME <= 631111269.18400002 && ENERGY >= 0.10000000 && ENERGY <= 100.00000000 && ANGSEP(83.630000,22.010000,RA,DEC) <= 3.000000 | |
| 63 | + 2017-11-28T14:21:58: FITS filename .............: /var/tmp/tmp.0.Nc6oWk[EVENTS][TIME >= 631109469.18399978 && TIME <= 631111269.18400002 && ENERGY >= 0.10000000 && ENERGY <= 100.00000000 && ANGSEP(83.630000,22.010000,RA,DEC) <= 3.000000] | |
| 64 | + 2017-11-28T14:21:58: | |
| 65 | + 2017-11-28T14:21:58: +====================+ | |
| 66 | + 2017-11-28T14:21:58: | Output observation | | |
| 67 | + 2017-11-28T14:21:58: +====================+ | |
| 68 | + 2017-11-28T14:21:58: === GObservations === | |
| 69 | + 2017-11-28T14:21:58: Number of observations ....: 1 | |
| 70 | + 2017-11-28T14:21:58: Number of models ..........: 0 | |
| 71 | + 2017-11-28T14:21:58: Number of observed events .: 20877 | |
| 72 | + 2017-11-28T14:21:58: Number of predicted events : 0 | |
| 73 | 73 | |
| 74 | -From the 202766 events in the input event list 21991 events were selected. | |
| 74 | + | |
| 75 | +From the 200833 events in the input event list 20877 events were selected. | |
| 75 | 76 | |
| 76 | 77 | .. note:: |
| 77 | 78 | ... | ... |
doc/source/users/tutorials/quickstart/simulating.rst
| ... | ... | @@ -24,18 +24,18 @@ characteristics of the simulation: |
| 24 | 24 | |
| 25 | 25 | .. code-block:: bash |
| 26 | 26 | |
| 27 | - $ ctobssim | |
| 28 | - RA of pointing (degrees) (0-360) [83.63] | |
| 29 | - Dec of pointing (degrees) (-90-90) [22.01] | |
| 30 | - Radius of FOV (degrees) (0-180) [5.0] | |
| 31 | - Start time (UTC string, JD, MJD or MET in seconds) [2020-01-01T00:00:00] | |
| 32 | - Stop time (UTC string, JD, MJD or MET in seconds) [2020-01-01T00:30:00] 2020-01-01T01:00:00 | |
| 33 | - Lower energy limit (TeV) [0.03] | |
| 34 | - Upper energy limit (TeV) [200.0] | |
| 35 | - Calibration database [prod2] | |
| 36 | - Instrument response function [South_0.5h] | |
| 37 | - Input model XML file [$CTOOLS/share/models/crab.xml] | |
| 38 | - Output event data file or observation definition XML file [events.fits] | |
| 27 | + $ ctobssim | |
| 28 | + RA of pointing (degrees) (0-360) [83.63] 83.5 | |
| 29 | + Dec of pointing (degrees) (-90-90) [22.01] 22.8 | |
| 30 | + Radius of FOV (degrees) (0-180) [5.0] | |
| 31 | + Start time (UTC string, JD, MJD or MET in seconds) [2020-01-01T00:00:00] | |
| 32 | + Stop time (UTC string, JD, MJD or MET in seconds) [2020-01-01T01:00:00] 2020-01-01T01:00:00 | |
| 33 | + Lower energy limit (TeV) [0.03] | |
| 34 | + Upper energy limit (TeV) [200.] | |
| 35 | + Calibration database [prod2] | |
| 36 | + Instrument response function [South_0.5h] | |
| 37 | + Input model definition XML file [$CTOOLS/share/models/crab.xml] | |
| 38 | + Output event data file or observation definition XML file [events.fits] | |
| 39 | 39 | |
| 40 | 40 | Each line represents a query for one parameter value. |
| 41 | 41 | The line starts with a short description of the parameter, followed by |
| ... | ... | @@ -160,6 +160,12 @@ where the parameters in the XML definition have the following mappings: |
| 160 | 160 | convention that can not be modified. So make sure you always use |
| 161 | 161 | MeV as energy unit in an XML file. |
| 162 | 162 | |
| 163 | + .. note:: | |
| 164 | + As customary for IACT observations, the pointing direction | |
| 165 | + was slightly offset from the source of interest, i.e., | |
| 166 | + the Crab. This makes it possible to better handle systematics due | |
| 167 | + to the instrumental background. | |
| 168 | + | |
| 163 | 169 | The instrumental background of CTA is modelled using the background |
| 164 | 170 | information provided in the |
| 165 | 171 | :ref:`instrument response function <glossary_irf>` |
| ... | ... | @@ -205,33 +211,33 @@ from this file are shown here: |
| 205 | 211 | |
| 206 | 212 | .. code-block:: none |
| 207 | 213 | |
| 208 | - 2017-08-08T19:28:54: === CTA observation === | |
| 209 | - 2017-08-08T19:28:54: Simulation cone ...........: RA=83.63 deg, Dec=22.01 deg, radius=5.5 deg | |
| 210 | - 2017-08-08T19:28:54: Time interval .............: 6.31109e+08 - 6.31112e+08 s | |
| 211 | - 2017-08-08T19:28:54: Photon energy range .......: 30 GeV - 72.3622611060088 GeV | |
| 212 | - 2017-08-08T19:28:54: Event energy range ........: 30 GeV - 72.3622611060088 GeV | |
| 213 | - 2017-08-08T19:28:54: Simulation area ..........: 1.97769e+09 cm2 | |
| 214 | - 2017-08-08T19:28:54: Use model ................: Crab | |
| 215 | - 2017-08-08T19:28:54: Normalization ............: 1 [Crab] | |
| 216 | - 2017-08-08T19:28:54: Flux .....................: 2.5413e-09 [Crab] photons/cm2/s | |
| 217 | - 2017-08-08T19:28:54: Normalized flux ..........: 2.5413e-09 [Crab] photons/cm2/s | |
| 218 | - 2017-08-08T19:28:54: Photon rate ..............: 5.0259 photons/s [Crab] | |
| 219 | - 2017-08-08T19:28:54: MC source photons ........: 18186 [Crab] | |
| 220 | - 2017-08-08T19:28:54: MC source events .........: 4175 [Crab] | |
| 221 | - 2017-08-08T19:28:54: MC source events .........: 4175 (all source models) | |
| 222 | - 2017-08-08T19:28:54: Photon energy range .......: 72.3622611060088 GeV - 174.543227745807 GeV | |
| 214 | + 2017-11-28T14:13:40: === CTA observation === | |
| 215 | + 2017-11-28T14:13:40: Simulation cone ...........: RA=83.5 deg, Dec=22.8 deg, radius=5.5 deg | |
| 216 | + 2017-11-28T14:13:40: Time interval .............: 6.31109e+08 - 6.31112e+08 s | |
| 217 | + 2017-11-28T14:13:40: Photon energy range .......: 30 GeV - 72.3622611060088 GeV | |
| 218 | + 2017-11-28T14:13:40: Event energy range ........: 30 GeV - 72.3622611060088 GeV | |
| 219 | + 2017-11-28T14:13:40: Simulation area ..........: 1.97769e+09 cm2 | |
| 220 | + 2017-11-28T14:13:40: Use model ................: Crab | |
| 221 | + 2017-11-28T14:13:40: Normalization ............: 1 [Crab] | |
| 222 | + 2017-11-28T14:13:40: Flux .....................: 2.5413e-09 [Crab] photons/cm2/s | |
| 223 | + 2017-11-28T14:13:40: Normalized flux ..........: 2.5413e-09 [Crab] photons/cm2/s | |
| 224 | + 2017-11-28T14:13:40: Photon rate ..............: 5.0259 photons/s [Crab] | |
| 225 | + 2017-11-28T14:13:40: MC source photons ........: 18186 [Crab] | |
| 226 | + 2017-11-28T14:13:40: MC source events .........: 3544 [Crab] | |
| 227 | + 2017-11-28T14:13:40: MC source events .........: 3544 (all source models) | |
| 228 | + 2017-11-28T14:13:40: Photon energy range .......: 72.3622611060088 GeV - 174.543227745807 GeV | |
| 223 | 229 | ... |
| 224 | - 2017-08-08T19:28:54: MC source photons .........: 47371 [Crab] | |
| 225 | - 2017-08-08T19:28:54: MC source events ..........: 13227 [Crab] | |
| 226 | - 2017-08-08T19:29:02: MC events outside ROI .....: 0 | |
| 227 | - 2017-08-08T19:29:02: MC background events ......: 189539 | |
| 228 | - 2017-08-08T19:29:02: MC identifier 1 ...........: Crab | |
| 229 | - 2017-08-08T19:29:02: MC identifier 2 ...........: CTABackgroundModel | |
| 230 | - 2017-08-08T19:29:02: MC events .................: 202766 (all models) | |
| 230 | + 2017-11-28T14:13:40: MC source photons .........: 47219 [Crab] | |
| 231 | + 2017-11-28T14:13:40: MC source events ..........: 11356 [Crab] | |
| 232 | + 2017-11-28T14:13:49: MC events outside ROI .....: 0 | |
| 233 | + 2017-11-28T14:13:49: MC background events ......: 189477 | |
| 234 | + 2017-11-28T14:13:49: MC identifier 1 ...........: Crab | |
| 235 | + 2017-11-28T14:13:49: MC identifier 2 ...........: CTABackgroundModel | |
| 236 | + 2017-11-28T14:13:49: MC events .................: 200833 (all models) | |
| 231 | 237 | |
| 232 | 238 | Each line starts with the UTC time at which the line has been written. In |
| 233 | -this run, 47371 Crab photons have been thrown. 13227 of these photons have been | |
| 234 | -registered by CTA as events. In the same time interval, 189539 background | |
| 239 | +this run, 47219 Crab photons have been thrown. 11356 of these photons have been | |
| 240 | +registered by CTA as events. In the same time interval, 189477 background | |
| 235 | 241 | events have been registred by CTA. |
| 236 | 242 | |
| 237 | 243 | .. note:: | ... | ... |
doc/source/users/tutorials/quickstart/skymap.jpg
doc/source/users/tutorials/quickstart/skymap.rst
| ... | ... | @@ -24,7 +24,7 @@ this with the :ref:`ctskymap` tool as follows: |
| 24 | 24 | Size of the Y axis in pixels [200] |
| 25 | 25 | Lower energy limit (TeV) [0.1] |
| 26 | 26 | Upper energy limit (TeV) [100.0] |
| 27 | - Background subtraction method (NONE|IRF) [NONE] | |
| 27 | + Background subtraction method (NONE|IRF|RING) [NONE] | |
| 28 | 28 | Output skymap file [skymap.fits] |
| 29 | 29 | |
| 30 | 30 | The tool produces the file ``skymap.fits`` which contains a sky map of the |
| ... | ... | @@ -67,7 +67,7 @@ example: |
| 67 | 67 | Size of the Y axis in pixels [200] |
| 68 | 68 | Lower energy limit (TeV) [0.1] |
| 69 | 69 | Upper energy limit (TeV) [100.0] |
| 70 | - Background subtraction method (NONE|IRF) [NONE] IRF | |
| 70 | + Background subtraction method (NONE|IRF|RING) [NONE] IRF | |
| 71 | 71 | Calibration database [prod2] |
| 72 | 72 | Instrument response function [South_0.5h] |
| 73 | 73 | Output skymap file [skymap.fits] skymap_subtracted.fits |
| ... | ... | @@ -80,5 +80,63 @@ kernel smoothing applied is shown below: |
| 80 | 80 | :width: 400px |
| 81 | 81 | :align: center |
| 82 | 82 | |
| 83 | - *Background subtracted sky map of the selected events* | |
| 83 | + *Sky map of the selected events with background subtraction from | |
| 84 | + the IRFs* | |
| 84 | 85 | |
| 86 | +If a reliable model of the instrumental background is not available, | |
| 87 | +you can estimate it from the data by running the :ref:`ctskymap` tool with | |
| 88 | +the background subtraction method set to `RING``. For each position in | |
| 89 | +the map the number of background counts is estimated from a ring, | |
| 90 | +scaled accroding to the acceptance model in the :ref:`instrument | |
| 91 | +response functions <glossary_irf>`, and subtracted from a circular | |
| 92 | +region centred on the trial source region. You need to avoid regions | |
| 93 | +with significant gamma-ray emission when deriving the background | |
| 94 | +rates, by providing an exclusion region (`ds9 <http://ds9.si.edu>`_ | |
| 95 | +region file, or FITS map) through the hidden inexclusion parameter. | |
| 96 | + | |
| 97 | +.. code-block:: bash | |
| 98 | + | |
| 99 | + $ ctskymap inexclusion=exclusion.reg | |
| 100 | + Input event list or observation definition XML file [events.fits] selected_events.fits | |
| 101 | + First coordinate of image center in degrees (RA or galactic l) (0-360) [83.63] | |
| 102 | + Second coordinate of image center in degrees (DEC or galactic b) (-90-90) [22.01] | |
| 103 | + Projection method (AIT|AZP|CAR|GLS|MER|MOL|SFL|SIN|STG|TAN) [CAR] | |
| 104 | + Coordinate system (CEL - celestial, GAL - galactic) (CEL|GAL) [CEL] | |
| 105 | + Image scale (in degrees/pixel) [0.02] | |
| 106 | + Size of the X axis in pixels [200] | |
| 107 | + Size of the Y axis in pixels [200] | |
| 108 | + Lower energy limit (TeV) [0.1] | |
| 109 | + Upper energy limit (TeV) [100.0] | |
| 110 | + Background subtraction method (NONE|IRF|RING) [NONE] RING | |
| 111 | + Source region radius for estimating on-counts (degrees) [0.0] 0.2 | |
| 112 | + Inner ring radius (degrees) [0.6] | |
| 113 | + Outer ring radius (degrees) [0.8] | |
| 114 | + Calibration database [prod2] | |
| 115 | + Instrument response function [South_0.5h] | |
| 116 | + Output skymap file [skymap.fits] skymap_ring.fits | |
| 117 | + | |
| 118 | +The exclusion file used contained just a circle centered on the Crab | |
| 119 | +nebula. | |
| 120 | + | |
| 121 | +.. code-block:: bash | |
| 122 | + | |
| 123 | + $ less exclusion.reg | |
| 124 | + # Region file format: DS9 version 4.1 | |
| 125 | + global color=green dashlist=8 3 width=1 font="helvetica 10 | |
| 126 | + normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 | |
| 127 | + delete=1 include=1 source=1 | |
| 128 | + fk5 | |
| 129 | + circle(83.63,22.01,720.000") | |
| 130 | + | |
| 131 | +The resulting sky map, displayed using | |
| 132 | +`ds9 <http://ds9.si.edu>`_ in logarithmic color scale is shown below. | |
| 133 | + | |
| 134 | +.. figure:: skymap_ring.jpg | |
| 135 | + :width: 400px | |
| 136 | + :align: center | |
| 137 | + | |
| 138 | + *Sky map of the selected events with background subtraction from | |
| 139 | + the ring method* | |
| 140 | + | |
| 141 | +Note that the map thus obtained is smoothed to the scale of the source | |
| 142 | +region size. | ... | ... |
doc/source/users/tutorials/quickstart/skymap_ring.jpg
0 → 100644
4.81 KB
doc/source/users/tutorials/quickstart/skymap_subtracted.jpg
doc/source/users/tutorials/quickstart/spectrum.jpg
doc/source/users/tutorials/quickstart/spectrum.rst
| ... | ... | @@ -31,14 +31,24 @@ bins between 100 GeV and 100 TeV: |
| 31 | 31 | Input exposure cube file [NONE] expcube.fits |
| 32 | 32 | Input PSF cube file [NONE] psfcube.fits |
| 33 | 33 | Input background cube file [NONE] bkgcube.fits |
| 34 | - Input model definition XML file [$CTOOLS/share/models/crab.xml] models.xml | |
| 34 | + Input model definition XML file [$CTOOLS/share/models/crab.xml] crab_results.xml | |
| 35 | 35 | Source name [Crab] |
| 36 | + Spectrum generation method (SLICE|NODES|AUTO) [AUTO] | |
| 36 | 37 | Binning algorithm (LIN|LOG|FILE) [LOG] |
| 37 | 38 | Lower energy limit (TeV) [0.1] |
| 38 | 39 | Upper energy limit (TeV) [100.0] |
| 39 | - Number of energy bins (0=unbinned) [20] 10 | |
| 40 | + Number of energy bins [20] 10 | |
| 40 | 41 | Output spectrum file [spectrum.fits] |
| 41 | 42 | |
| 43 | +There are different methods to create a binned spectrum: | |
| 44 | + | |
| 45 | +- SLICE splits the dataset in independent energy slices, and performs | |
| 46 | + an independent fit in each of them | |
| 47 | +- NODES performs an overall fit where the source of interest is | |
| 48 | + modeled spectrally using a node function, whit a free parameter for | |
| 49 | + the flux in each energy bin | |
| 50 | +- AUTO is SLICE for CTA and NODES for other instruments. | |
| 51 | + | |
| 42 | 52 | The :ref:`csspec` script creates the FITS file ``spectrum.fits`` that contains |
| 43 | 53 | the results of the SED fitting. A graphical display of the fit results is |
| 44 | 54 | shown below. | ... | ... |
doc/source/users/tutorials/quickstart/unbinned.rst
| ... | ... | @@ -16,11 +16,7 @@ Doing an unbinned analysis |
| 16 | 16 | |
| 17 | 17 | An unbinned analysis is generally preferred over a binned analysis for |
| 18 | 18 | short observation times (a few tens of hours) or if you want to assure |
| 19 | - that the analysis results are not biased by the selected binning. Also | |
| 20 | - the fitting of a light or phase curve is only be possible with an | |
| 21 | - unbinned maximum likelihood analysis | |
| 22 | - (see :ref:`light curve <1dc_howto_ligthcurve>` and | |
| 23 | - :ref:`phase curve <1dc_howto_phasecurve>` fitting). | |
| 19 | + that the analysis results are not biased by the selected binning. | |
| 24 | 20 | |
| 25 | 21 | An alternative analysis technique consists of working directly on the event |
| 26 | 22 | list without binning the events in a counts cube. |
| ... | ... | @@ -38,7 +34,7 @@ You do this with the :ref:`ctlike` tool as follows: |
| 38 | 34 | You will recognise that :ref:`ctlike` runs much faster in unbinned mode |
| 39 | 35 | compared to binned mode. |
| 40 | 36 | This is understandable as the selected event list contains |
| 41 | -only 21991 events, while the binned counts cube you used before had | |
| 37 | +only 20877 events, while the binned counts cube you used before had | |
| 42 | 38 | 200 x 200 x 20 = 800000 bins. As unbinned maximum likelihood fitting loops |
| 43 | 39 | over the events (while binned maximum likelihood loops over the bins), |
| 44 | 40 | there are much less operations to perform in unbinned than in binned mode |
| ... | ... | @@ -60,65 +56,64 @@ the same events for both analyses. |
| 60 | 56 | |
| 61 | 57 | .. code-block:: none |
| 62 | 58 | |
| 63 | - 2017-08-08T20:56:27: +=================================+ | |
| 64 | - 2017-08-08T20:56:27: | Maximum likelihood optimisation | | |
| 65 | - 2017-08-08T20:56:27: +=================================+ | |
| 66 | - 2017-08-08T20:56:27: >Iteration 0: -logL=140091.731, Lambda=1.0e-03 | |
| 67 | - 2017-08-08T20:56:28: >Iteration 1: -logL=140089.754, Lambda=1.0e-03, delta=1.977, step=1.0e+00, max(|grad|)=5.681267 [Index:3] | |
| 68 | - 2017-08-08T20:56:28: >Iteration 2: -logL=140089.751, Lambda=1.0e-04, delta=0.003, step=1.0e+00, max(|grad|)=0.255879 [Index:3] | |
| 69 | - 2017-08-08T20:56:28: | |
| 70 | - 2017-08-08T20:56:28: +=========================================+ | |
| 71 | - 2017-08-08T20:56:28: | Maximum likelihood optimisation results | | |
| 72 | - 2017-08-08T20:56:28: +=========================================+ | |
| 73 | - 2017-08-08T20:56:28: === GOptimizerLM === | |
| 74 | - 2017-08-08T20:56:28: Optimized function value ..: 140089.751 | |
| 75 | - 2017-08-08T20:56:28: Absolute precision ........: 0.005 | |
| 76 | - 2017-08-08T20:56:28: Acceptable value decrease .: 2 | |
| 77 | - 2017-08-08T20:56:28: Optimization status .......: converged | |
| 78 | - 2017-08-08T20:56:28: Number of parameters ......: 10 | |
| 79 | - 2017-08-08T20:56:28: Number of free parameters .: 4 | |
| 80 | - 2017-08-08T20:56:28: Number of iterations ......: 2 | |
| 81 | - 2017-08-08T20:56:28: Lambda ....................: 1e-05 | |
| 82 | - 2017-08-08T20:56:28: Maximum log likelihood ....: -140089.751 | |
| 83 | - 2017-08-08T20:56:28: Observed events (Nobs) ...: 21991.000 | |
| 84 | - 2017-08-08T20:56:28: Predicted events (Npred) ..: 21990.996 (Nobs - Npred = 0.00358908515045187) | |
| 85 | - 2017-08-08T20:56:28: === GModels === | |
| 86 | - 2017-08-08T20:56:28: Number of models ..........: 2 | |
| 87 | - 2017-08-08T20:56:28: Number of parameters ......: 10 | |
| 88 | - 2017-08-08T20:56:28: === GModelSky === | |
| 89 | - 2017-08-08T20:56:28: Name ......................: Crab | |
| 90 | - 2017-08-08T20:56:28: Instruments ...............: all | |
| 91 | - 2017-08-08T20:56:28: Instrument scale factors ..: unity | |
| 92 | - 2017-08-08T20:56:28: Observation identifiers ...: all | |
| 93 | - 2017-08-08T20:56:28: Model type ................: PointSource | |
| 94 | - 2017-08-08T20:56:28: Model components ..........: "PointSource" * "PowerLaw" * "Constant" | |
| 95 | - 2017-08-08T20:56:28: Number of parameters ......: 6 | |
| 96 | - 2017-08-08T20:56:28: Number of spatial par's ...: 2 | |
| 97 | - 2017-08-08T20:56:28: RA .......................: 83.6331 [-360,360] deg (fixed,scale=1) | |
| 98 | - 2017-08-08T20:56:28: DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1) | |
| 99 | - 2017-08-08T20:56:28: Number of spectral par's ..: 3 | |
| 100 | - 2017-08-08T20:56:28: Prefactor ................: 5.69800719463692e-16 +/- 9.95311294944208e-18 [1e-23,1e-13] ph/cm2/s/MeV (free,scale=1e-16,gradient) | |
| 101 | - 2017-08-08T20:56:28: Index ....................: -2.46101639180337 +/- 0.0145278326558106 [-0,-5] (free,scale=-1,gradient) | |
| 102 | - 2017-08-08T20:56:28: PivotEnergy ..............: 300000 [10000,1000000000] MeV (fixed,scale=1000000,gradient) | |
| 103 | - 2017-08-08T20:56:28: Number of temporal par's ..: 1 | |
| 104 | - 2017-08-08T20:56:28: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 105 | - 2017-08-08T20:56:28: === GCTAModelIrfBackground === | |
| 106 | - 2017-08-08T20:56:28: Name ......................: CTABackgroundModel | |
| 107 | - 2017-08-08T20:56:28: Instruments ...............: CTA | |
| 108 | - 2017-08-08T20:56:28: Instrument scale factors ..: unity | |
| 109 | - 2017-08-08T20:56:28: Observation identifiers ...: all | |
| 110 | - 2017-08-08T20:56:28: Model type ................: "PowerLaw" * "Constant" | |
| 111 | - 2017-08-08T20:56:28: Number of parameters ......: 4 | |
| 112 | - 2017-08-08T20:56:28: Number of spectral par's ..: 3 | |
| 113 | - 2017-08-08T20:56:28: Prefactor ................: 1.00310957843794 +/- 0.0134585839142799 [0.001,1000] ph/cm2/s/MeV (free,scale=1,gradient) | |
| 114 | - 2017-08-08T20:56:28: Index ....................: 0.00814622034405194 +/- 0.00817635016295375 [-5,5] (free,scale=1,gradient) | |
| 115 | - 2017-08-08T20:56:28: PivotEnergy ..............: 1000000 [10000,1000000000] MeV (fixed,scale=1000000,gradient) | |
| 116 | - 2017-08-08T20:56:28: Number of temporal par's ..: 1 | |
| 117 | - 2017-08-08T20:56:28: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 59 | + 2017-11-28T16:26:57: +=================================+ | |
| 60 | + 2017-11-28T16:26:57: | Maximum likelihood optimisation | | |
| 61 | + 2017-11-28T16:26:57: +=================================+ | |
| 62 | + 2017-11-28T16:26:57: >Iteration 0: -logL=134457.962, Lambda=1.0e-03 | |
| 63 | + 2017-11-28T16:26:57: >Iteration 1: -logL=134437.621, Lambda=1.0e-03, delta=20.342, step=1.0e+00, max(|grad|)=43.475634 [Index:7] | |
| 64 | + 2017-11-28T16:26:57: >Iteration 2: -logL=134437.595, Lambda=1.0e-04, delta=0.026, step=1.0e+00, max(|grad|)=0.121800 [Index:7] | |
| 65 | + 2017-11-28T16:26:57: >Iteration 3: -logL=134437.595, Lambda=1.0e-05, delta=0.000, step=1.0e+00, max(|grad|)=0.001202 [Index:7] | |
| 66 | + 2017-11-28T16:26:57: | |
| 67 | + 2017-11-28T16:26:57: +=========================================+ | |
| 68 | + 2017-11-28T16:26:57: | Maximum likelihood optimisation results | | |
| 69 | + 2017-11-28T16:26:57: +=========================================+ | |
| 70 | + 2017-11-28T16:26:57: === GOptimizerLM === | |
| 71 | + 2017-11-28T16:26:57: Optimized function value ..: 134437.595 | |
| 72 | + 2017-11-28T16:26:57: Absolute precision ........: 0.005 | |
| 73 | + 2017-11-28T16:26:57: Acceptable value decrease .: 2 | |
| 74 | + 2017-11-28T16:26:57: Optimization status .......: converged | |
| 75 | + 2017-11-28T16:26:57: Number of parameters ......: 10 | |
| 76 | + 2017-11-28T16:26:57: Number of free parameters .: 4 | |
| 77 | + 2017-11-28T16:26:57: Number of iterations ......: 3 | |
| 78 | + 2017-11-28T16:26:57: Lambda ....................: 1e-06 | |
| 79 | + 2017-11-28T16:26:57: Maximum log likelihood ....: -134437.595 | |
| 80 | + 2017-11-28T16:26:57: Observed events (Nobs) ...: 20877.000 | |
| 81 | + 2017-11-28T16:26:57: Predicted events (Npred) ..: 20877.000 (Nobs - Npred = -1.41397322295234e-07) | |
| 82 | + 2017-11-28T16:26:57: === GModels === | |
| 83 | + 2017-11-28T16:26:57: Number of models ..........: 2 | |
| 84 | + 2017-11-28T16:26:57: Number of parameters ......: 10 | |
| 85 | + 2017-11-28T16:26:57: === GModelSky === | |
| 86 | + 2017-11-28T16:26:57: Name ......................: Crab | |
| 87 | + 2017-11-28T16:26:57: Instruments ...............: all | |
| 88 | + 2017-11-28T16:26:57: Instrument scale factors ..: unity | |
| 89 | + 2017-11-28T16:26:57: Observation identifiers ...: all | |
| 90 | + 2017-11-28T16:26:57: Model type ................: PointSource | |
| 91 | + 2017-11-28T16:26:57: Model components ..........: "PointSource" * "PowerLaw" * "Constant" | |
| 92 | + 2017-11-28T16:26:57: Number of parameters ......: 6 | |
| 93 | + 2017-11-28T16:26:57: Number of spatial par's ...: 2 | |
| 94 | + 2017-11-28T16:26:57: RA .......................: 83.6331 [-360,360] deg (fixed,scale=1) | |
| 95 | + 2017-11-28T16:26:57: DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1) | |
| 96 | + 2017-11-28T16:26:57: Number of spectral par's ..: 3 | |
| 97 | + 2017-11-28T16:26:57: Prefactor ................: 5.85495471291474e-16 +/- 1.08121595582131e-17 [1e-23,1e-13] ph/cm2/s/MeV (free,scale=1e-16,gradient) | |
| 98 | + 2017-11-28T16:26:57: Index ....................: -2.48742680094013 +/- 0.0155955916697299 [-0,-5] (free,scale=-1,gradient) | |
| 99 | + 2017-11-28T16:26:57: PivotEnergy ..............: 300000 [10000,1000000000] MeV (fixed,scale=1000000,gradient) | |
| 100 | + 2017-11-28T16:26:57: Number of temporal par's ..: 1 | |
| 101 | + 2017-11-28T16:26:57: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 102 | + 2017-11-28T16:26:57: === GCTAModelIrfBackground === | |
| 103 | + 2017-11-28T16:26:57: Name ......................: CTABackgroundModel | |
| 104 | + 2017-11-28T16:26:57: Instruments ...............: CTA | |
| 105 | + 2017-11-28T16:26:57: Instrument scale factors ..: unity | |
| 106 | + 2017-11-28T16:26:57: Observation identifiers ...: all | |
| 107 | + 2017-11-28T16:26:57: Model type ................: "PowerLaw" * "Constant" | |
| 108 | + 2017-11-28T16:26:57: Number of parameters ......: 4 | |
| 109 | + 2017-11-28T16:26:57: Number of spectral par's ..: 3 | |
| 110 | + 2017-11-28T16:26:57: Prefactor ................: 0.966210894921824 +/- 0.0131220642906203 [0.001,1000] ph/cm2/s/MeV (free,scale=1,gradient) | |
| 111 | + 2017-11-28T16:26:57: Index ....................: 0.00879946195443994 +/- 0.00825144420159423 [-5,5] (free,scale=1,gradient) | |
| 112 | + 2017-11-28T16:26:57: PivotEnergy ..............: 1000000 [10000,1000000000] MeV (fixed,scale=1000000,gradient) | |
| 113 | + 2017-11-28T16:26:57: Number of temporal par's ..: 1 | |
| 114 | + 2017-11-28T16:26:57: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 118 | 115 | |
| 119 | -.. | |
| 120 | - | |
| 121 | - .. note:: | |
| 116 | +.. note:: | |
| 122 | 117 | |
| 123 | 118 | Many tools or scripts can also be used in unbinned mode, including |
| 124 | 119 | :ref:`csresmap`, :ref:`ctbutterfly` and :ref:`csspec` that were used | ... | ... |
doc/source/users/user_manual/introduction.rst
| ... | ... | @@ -5,7 +5,17 @@ Introduction |
| 5 | 5 | |
| 6 | 6 | ctools is a software package developed for the scientific analysis of |
| 7 | 7 | Cherenkov Telescope Array (CTA) data or any other Imaging Air Cherenkov |
| 8 | -Telescope. ctools comprises a set of ftools-like binary executables, | |
| 8 | +Telescope. | |
| 9 | + | |
| 10 | +In this User Manual you will now learn how to use the ctools package. | |
| 11 | +If you encounter any problems, please read the :ref:`sec_help` section. | |
| 12 | +And you should read the :ref:`sec_develop` section if you would like to | |
| 13 | +contribute to the ctools developments. | |
| 14 | + | |
| 15 | +Running ctools | |
| 16 | +--------------- | |
| 17 | + | |
| 18 | +ctools comprises a set of ftools-like binary executables, | |
| 9 | 19 | written in C++, with a command-line interface allowing for interactive |
| 10 | 20 | step-wise data analysis. To start a ctool from the command line, simply |
| 11 | 21 | type the name of the ctool: |
| ... | ... | @@ -53,7 +63,33 @@ command line or used as Python classes, as illustrated below: |
| 53 | 63 | >>> import cscripts |
| 54 | 64 | >>> pull = cscripts.cspull() |
| 55 | 65 | |
| 56 | -In this User Manual you will now learn how to use the ctools package. | |
| 57 | -If you encounter any problems, please read the :ref:`sec_help` section. | |
| 58 | -And you should read the :ref:`sec_develop` section if you would like to | |
| 59 | -contribute to the ctools developments. | |
| 66 | +User parameters and parameter files | |
| 67 | +----------------------------- | |
| 68 | + | |
| 69 | +Each ctool and cscript has a defined list of user parameters. You can | |
| 70 | +find a complete description `here | |
| 71 | +<../reference_manual/reference.html>`_. | |
| 72 | + | |
| 73 | +User parameters are stored in | |
| 74 | +par files. A ctools installation comprises a set of default par files | |
| 75 | +stored at ``$CTOOLS/syspfiles``. When you run a tool/script the latest | |
| 76 | +parameter values will be stored in a copy of the file at | |
| 77 | +``$HOME/pfiles`` (e.g., ``ctlike`` will save there a file called ``ctlike.par`` ). | |
| 78 | + | |
| 79 | +When a tool/script is executed again, it will look for a par file | |
| 80 | +first in ``$HOME/pfiles``, and propose you to use the latest values | |
| 81 | +stored there. If no par file is found there, it will use the default | |
| 82 | +in ``$CTOOLS/syspfiles``. | |
| 83 | + | |
| 84 | +If you update your ctools installation you may get an error such as | |
| 85 | + | |
| 86 | +.. code-block:: bash | |
| 87 | + | |
| 88 | + *** ERROR encounterted in the execution of ctlike. Run aborted ... | |
| 89 | + *** ERROR in GApplicationPars::load(GFilename&, | |
| 90 | + std::vector<std::string>&): Invalid command line parameter | |
| 91 | + encountered (invalid parameter name "XX"): XX=2 | |
| 92 | + | |
| 93 | +Remove the stale file ``ctlike.par`` from ``$HOME/pfiles`` and run | |
| 94 | +again to solve the issue. | |
| 95 | + | ... | ... |
examples/show_butterfly.py
| ... | ... | @@ -84,7 +84,7 @@ def plot_butterfly(filename, plotfile): |
| 84 | 84 | plt.plot(line_x,line_y,color='black',ls='-') |
| 85 | 85 | plt.fill(butterfly_x,butterfly_y,color='green',alpha=0.5) |
| 86 | 86 | plt.xlabel('Energy (TeV)') |
| 87 | - plt.ylabel(r'E $\times$ dN/dE (erg cm$^{-2}$ s$^{-1}$)') | |
| 87 | + plt.ylabel(r'E$^2$ $\times$ dN/dE (erg cm$^{-2}$ s$^{-1}$)') | |
| 88 | 88 | |
| 89 | 89 | # Show spectrum or save it into file |
| 90 | 90 | if len(plotfile) > 0: | ... | ... |
examples/show_spectrum.py
| ... | ... | @@ -103,7 +103,7 @@ def plot_spectrum(filename, plotfile): |
| 103 | 103 | plt.errorbar(ul_energies, ul_flux, xerr=[ul_ed_engs, ul_eu_engs], |
| 104 | 104 | yerr=yerr, uplims=True, fmt='ro') |
| 105 | 105 | plt.xlabel('Energy (TeV)') |
| 106 | - plt.ylabel(r'E $\times$ dN/dE (erg cm$^{-2}$ s$^{-1}$)') | |
| 106 | + plt.ylabel(r'E$^2$ $\times$ dN/dE (erg cm$^{-2}$ s$^{-1}$)') | |
| 107 | 107 | |
| 108 | 108 | # Show figure |
| 109 | 109 | if len(plotfile) > 0: | ... | ... |
models/Makefile.am
models/crab_beyond.xml
0 → 100644
| 1 | +<?xml version="1.0" standalone="no"?> | |
| 2 | +<source_library title="source library"> | |
| 3 | + <source name="Crab" type="PointSource"> | |
| 4 | + <spectrum type="Composite"> | |
| 5 | + <spectrum type="LogParabola"> | |
| 6 | + <parameter name="Prefactor" scale="1e-17" value="3.0" min="1e-07" max="1000.0" free="1"/> | |
| 7 | + <parameter name="Index" scale="-1" value="2.5" min="0.0" max="+5.0" free="1"/> | |
| 8 | + <parameter name="Curvature" scale="-1" value="0.45" min="-5.0" max="+5.0" free="1"/> | |
| 9 | + <parameter name="PivotEnergy" scale="1e6" value="1.0" min="0.01" max="1000.0" free="0"/> | |
| 10 | + </spectrum> | |
| 11 | + <spectrum type="PowerLaw"> | |
| 12 | + <parameter name="Prefactor" scale="1e-18" value="2.9" min="1.e-7" max="1000.0" free="1"/> | |
| 13 | + <parameter name="Index" scale="-1" value="2.05" min="0.0" max="+5.0" free="1"/> | |
| 14 | + <parameter name="PivotEnergy" scale="1e6" value="1.0" min="0.01" max="1000.0" free="0"/> | |
| 15 | + </spectrum> | |
| 16 | + </spectrum> | |
| 17 | + <spatialModel type="PointSource"> | |
| 18 | + <parameter name="RA" scale="1.0" value="83.6331" min="-360" max="360" free="0"/> | |
| 19 | + <parameter name="DEC" scale="1.0" value="22.0145" min="-90" max="90" free="0"/> | |
| 20 | + </spatialModel> | |
| 21 | + </source> | |
| 22 | + <source name="Src1" type="PointSource"> | |
| 23 | + <spectrum type="ExponentialCutoffPowerLaw"> | |
| 24 | + <parameter name="Prefactor" scale="1e-15" value="1.8" min="1e-07" max="1000.0" free="1"/> | |
| 25 | + <parameter name="Index" scale="-1" value="2.35" min="0.0" max="+5.0" free="1"/> | |
| 26 | + <parameter name="CutoffEnergy" scale="1e6" value="0.3" min="0.01" max="1000.0" free="1"/> | |
| 27 | + <parameter name="PivotEnergy" scale="1e6" value="0.1" min="0.01" max="1000.0" free="0"/> | |
| 28 | + </spectrum> | |
| 29 | + <spatialModel type="PointSource"> | |
| 30 | + <parameter name="RA" scale="1.0" value="83.72" min="-360" max="360" free="0"/> | |
| 31 | + <parameter name="DEC" scale="1.0" value="21.93" min="-90" max="90" free="0"/> | |
| 32 | + </spatialModel> | |
| 33 | + </source> | |
| 34 | + <source name="CTABackgroundModel" type="CTAIrfBackground" instrument="CTA"> | |
| 35 | + <spectrum type="PowerLaw"> | |
| 36 | + <parameter name="Prefactor" scale="1.0" value="1.0" min="1e-3" max="1e+3" free="1"/> | |
| 37 | + <parameter name="Index" scale="1.0" value="0.0" min="-5.0" max="+5.0" free="1"/> | |
| 38 | + <parameter name="PivotEnergy" scale="1e6" value="1.0" min="0.01" max="1000.0" free="0"/> | |
| 39 | + </spectrum> | |
| 40 | + </source> | |
| 41 | +</source_library> | ... | ... |