Commit 6e29bde1142081de5a4c36caf2d7caea8f0da381

Authored by Andreas Specovius
2 parents 44919bfd 8e99b211

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
... ... @@ -9,8 +9,9 @@ This documentation will guide you in the process of using ctools.
9 9 :maxdepth: 1
10 10  
11 11 tips/index
12   - tutorials/index
13 12 user_manual/index
  13 + tutorials/index
  14 + notebooks
14 15 reference_manual/index
15 16 user_contributed/index
16 17 glossary
... ...
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": "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\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
... ... @@ -13,9 +13,10 @@ analyses.
13 13 .. toctree::
14 14 :maxdepth: 1
15 15  
16   - beyond_combine
17   - beyond_stacked
  16 + combining-observations
  17 + stacked-analysis
18 18 beyond_tsmap
19 19 beyond_residual
  20 + advanced-python-fitting
20 21 beyond_irf
21 22 beyond_model
... ...
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

120 KB | W: | H:

30.7 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
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

22.7 KB | W: | H:

3.89 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
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
... ... @@ -22,4 +22,5 @@ examples should take about an hour, so grab some coffee before you start.
22 22 spectrum
23 23 unbinned
24 24 energy_dispersion
  25 + onoff
25 26 ctools-from-python
... ...
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

366 KB | W: | H:

16.7 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
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

184 KB | W: | H:

7.95 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
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

128 KB | W: | H:

6.97 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
doc/source/users/tutorials/quickstart/spectrum.jpg

117 KB | W: | H:

13.4 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
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
... ... @@ -21,6 +21,7 @@
21 21  
22 22 # Models to install
23 23 models = crab.xml \
  24 + crab_beyond.xml \
24 25 crab_poly.xml \
25 26 crab_profile.xml \
26 27 disk.xml \
... ...
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>
... ...