Commit dad5f0ebf1aea7262187922d415e9a93fda736c1
1 parent
b70128d1
Classical analysis moved to notebook
Showing
6 changed files
with
314 additions
and
132 deletions
doc/source/users/tutorials/hess_dr1/classical.ipynb
0 → 100644
| 1 | +{ | |
| 2 | + "cells": [ | |
| 3 | + { | |
| 4 | + "cell_type": "markdown", | |
| 5 | + "metadata": {}, | |
| 6 | + "source": [ | |
| 7 | + "# Performing a classical On/Off analysis" | |
| 8 | + ] | |
| 9 | + }, | |
| 10 | + { | |
| 11 | + "cell_type": "raw", | |
| 12 | + "metadata": {}, | |
| 13 | + "source": [ | |
| 14 | + "<div align=\"right\"><a href=\"../../../_downloads/classical.ipynb\" download=\"classical.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 a classical On/Off analysis of the data.**\n", | |
| 22 | + "\n", | |
| 23 | + "We start by importing the gammalib, ctools, and cscripts Python modules." | |
| 24 | + ] | |
| 25 | + }, | |
| 26 | + { | |
| 27 | + "cell_type": "code", | |
| 28 | + "execution_count": 4, | |
| 29 | + "metadata": {}, | |
| 30 | + "outputs": [], | |
| 31 | + "source": [ | |
| 32 | + "import gammalib\n", | |
| 33 | + "import ctools\n", | |
| 34 | + "import cscripts" | |
| 35 | + ] | |
| 36 | + }, | |
| 37 | + { | |
| 38 | + "cell_type": "markdown", | |
| 39 | + "metadata": {}, | |
| 40 | + "source": [ | |
| 41 | + "We will also use matplotlib to display the results." | |
| 42 | + ] | |
| 43 | + }, | |
| 44 | + { | |
| 45 | + "cell_type": "code", | |
| 46 | + "execution_count": 5, | |
| 47 | + "metadata": {}, | |
| 48 | + "outputs": [], | |
| 49 | + "source": [ | |
| 50 | + "%matplotlib inline\n", | |
| 51 | + "import matplotlib.pyplot as plt" | |
| 52 | + ] | |
| 53 | + }, | |
| 54 | + { | |
| 55 | + "cell_type": "markdown", | |
| 56 | + "metadata": {}, | |
| 57 | + "source": [ | |
| 58 | + "And finally we add to our path the directory containing the example plotting scripts provided with the ctools installation." | |
| 59 | + ] | |
| 60 | + }, | |
| 61 | + { | |
| 62 | + "cell_type": "code", | |
| 63 | + "execution_count": 6, | |
| 64 | + "metadata": {}, | |
| 65 | + "outputs": [], | |
| 66 | + "source": [ | |
| 67 | + "import sys\n", | |
| 68 | + "import os\n", | |
| 69 | + "sys.path.append(os.environ['CTOOLS']+'/share/examples/python/')" | |
| 70 | + ] | |
| 71 | + }, | |
| 72 | + { | |
| 73 | + "cell_type": "markdown", | |
| 74 | + "metadata": {}, | |
| 75 | + "source": [ | |
| 76 | + "## Preparing the binned observations\n", | |
| 77 | + "\n", | |
| 78 | + "The first step for a classical analysis is to bin the events in bins of energy for an On (signal) region, and one or several Off (background regions).\n", | |
| 79 | + "\n", | |
| 80 | + "We will use the event selection performed in the previous tutorial." | |
| 81 | + ] | |
| 82 | + }, | |
| 83 | + { | |
| 84 | + "cell_type": "code", | |
| 85 | + "execution_count": 21, | |
| 86 | + "metadata": {}, | |
| 87 | + "outputs": [], | |
| 88 | + "source": [ | |
| 89 | + "obsfile = \"obs_crab_selected.xml\"\n", | |
| 90 | + "\n", | |
| 91 | + "phagen = cscripts.csphagen()\n", | |
| 92 | + "phagen['inobs'] = obsfile\n", | |
| 93 | + "phagen['inmodel'] = 'NONE' # assume that the source is pointlike\n", | |
| 94 | + "phagen['ebinalg'] = 'LOG'\n", | |
| 95 | + "phagen['emin'] = 0.66\n", | |
| 96 | + "phagen['emax'] = 30.\n", | |
| 97 | + "phagen['enumbins'] = 20\n", | |
| 98 | + "phagen['coordsys'] = 'CEL'\n", | |
| 99 | + "phagen['ra'] = 83.63\n", | |
| 100 | + "phagen['dec'] = 22.01\n", | |
| 101 | + "phagen['rad'] = 0.2\n", | |
| 102 | + "phagen['bkgmethod'] = 'REFLECTED'\n", | |
| 103 | + "phagen['use_irf_bkg'] = False\n", | |
| 104 | + "phagen['maxoffset'] = 2.0\n", | |
| 105 | + "phagen['stack'] = True # treat observations separately in joint likelihood fit\n", | |
| 106 | + "\n", | |
| 107 | + "phagen.run()" | |
| 108 | + ] | |
| 109 | + }, | |
| 110 | + { | |
| 111 | + "cell_type": "markdown", | |
| 112 | + "metadata": {}, | |
| 113 | + "source": [ | |
| 114 | + "Note that we have used the hidden parameter *use_irf_bkg* to specify that no background model should be used in the computation of the background normalisation factor, which is simply assumed to be the ratio of the solid angles of On/Off regions.\n", | |
| 115 | + "\n", | |
| 116 | + "## Likelihood fit\n", | |
| 117 | + "\n", | |
| 118 | + "The next step will be to fit a model for the source to the On data (along with a model for the background derived directly from the On/Off data). The model for the source is" | |
| 119 | + ] | |
| 120 | + }, | |
| 121 | + { | |
| 122 | + "cell_type": "code", | |
| 123 | + "execution_count": 22, | |
| 124 | + "metadata": {}, | |
| 125 | + "outputs": [ | |
| 126 | + { | |
| 127 | + "name": "stdout", | |
| 128 | + "output_type": "stream", | |
| 129 | + "text": [ | |
| 130 | + "=== GModels ===\n", | |
| 131 | + " Number of models ..........: 1\n", | |
| 132 | + " Number of parameters ......: 6\n", | |
| 133 | + "=== GModelSky ===\n", | |
| 134 | + " Name ......................: Crab\n", | |
| 135 | + " Instruments ...............: all\n", | |
| 136 | + " Instrument scale factors ..: unity\n", | |
| 137 | + " Observation identifiers ...: all\n", | |
| 138 | + " Model type ................: PointSource\n", | |
| 139 | + " Model components ..........: \"PointSource\" * \"PowerLaw\" * \"Constant\"\n", | |
| 140 | + " Number of parameters ......: 6\n", | |
| 141 | + " Number of spatial par's ...: 2\n", | |
| 142 | + " RA .......................: 83.6331 [-360,360] deg (fixed,scale=1)\n", | |
| 143 | + " DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1)\n", | |
| 144 | + " Number of spectral par's ..: 3\n", | |
| 145 | + " Prefactor ................: 5.7e-17 +/- 0 [1e-24,1e-14] ph/cm2/s/MeV (free,scale=1e-17,gradient)\n", | |
| 146 | + " Index ....................: -2.48 +/- 0 [-0,-5] (free,scale=-1,gradient)\n", | |
| 147 | + " PivotEnergy ..............: 1000000 [10000,1000000000] MeV (fixed,scale=1000000,gradient)\n", | |
| 148 | + " Number of temporal par's ..: 1\n", | |
| 149 | + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n" | |
| 150 | + ] | |
| 151 | + } | |
| 152 | + ], | |
| 153 | + "source": [ | |
| 154 | + "srcmodel = os.environ['CTOOLS']+'/share/models/crab_nobkg.xml'\n", | |
| 155 | + "\n", | |
| 156 | + "print(gammalib.GModels(srcmodel))" | |
| 157 | + ] | |
| 158 | + }, | |
| 159 | + { | |
| 160 | + "cell_type": "markdown", | |
| 161 | + "metadata": {}, | |
| 162 | + "source": [ | |
| 163 | + "We can now fit this model to the data. Note that we have to specify WSTAT as statistic to derive the background model from the data without prior information." | |
| 164 | + ] | |
| 165 | + }, | |
| 166 | + { | |
| 167 | + "cell_type": "code", | |
| 168 | + "execution_count": 23, | |
| 169 | + "metadata": {}, | |
| 170 | + "outputs": [], | |
| 171 | + "source": [ | |
| 172 | + "like = ctools.ctlike(phagen.obs())\n", | |
| 173 | + "\n", | |
| 174 | + "like['statistic'] = 'WSTAT'\n", | |
| 175 | + "like['inmodel'] = srcmodel\n", | |
| 176 | + "\n", | |
| 177 | + "like.run()" | |
| 178 | + ] | |
| 179 | + }, | |
| 180 | + { | |
| 181 | + "cell_type": "markdown", | |
| 182 | + "metadata": {}, | |
| 183 | + "source": [ | |
| 184 | + "We can now look at the results from the optimisation and the fitted model." | |
| 185 | + ] | |
| 186 | + }, | |
| 187 | + { | |
| 188 | + "cell_type": "code", | |
| 189 | + "execution_count": 24, | |
| 190 | + "metadata": {}, | |
| 191 | + "outputs": [ | |
| 192 | + { | |
| 193 | + "name": "stdout", | |
| 194 | + "output_type": "stream", | |
| 195 | + "text": [ | |
| 196 | + "=== GOptimizerLM ===\n", | |
| 197 | + " Optimized function value ..: 16.457\n", | |
| 198 | + " Absolute precision ........: 0.005\n", | |
| 199 | + " Acceptable value decrease .: 2\n", | |
| 200 | + " Optimization status .......: converged\n", | |
| 201 | + " Number of parameters ......: 6\n", | |
| 202 | + " Number of free parameters .: 2\n", | |
| 203 | + " Number of iterations ......: 4\n", | |
| 204 | + " Lambda ....................: 1e-07\n", | |
| 205 | + "=== GModels ===\n", | |
| 206 | + " Number of models ..........: 1\n", | |
| 207 | + " Number of parameters ......: 6\n", | |
| 208 | + "=== GModelSky ===\n", | |
| 209 | + " Name ......................: Crab\n", | |
| 210 | + " Instruments ...............: all\n", | |
| 211 | + " Instrument scale factors ..: unity\n", | |
| 212 | + " Observation identifiers ...: all\n", | |
| 213 | + " Model type ................: PointSource\n", | |
| 214 | + " Model components ..........: \"PointSource\" * \"PowerLaw\" * \"Constant\"\n", | |
| 215 | + " Number of parameters ......: 6\n", | |
| 216 | + " Number of spatial par's ...: 2\n", | |
| 217 | + " RA .......................: 83.6331 [-360,360] deg (fixed,scale=1)\n", | |
| 218 | + " DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1)\n", | |
| 219 | + " Number of spectral par's ..: 3\n", | |
| 220 | + " Prefactor ................: 4.58230817013557e-17 +/- 3.14037370499303e-18 [1e-24,1e-14] ph/cm2/s/MeV (free,scale=1e-17,gradient)\n", | |
| 221 | + " Index ....................: -2.6252889331251 +/- 0.0832081186871608 [-0,-5] (free,scale=-1,gradient)\n", | |
| 222 | + " PivotEnergy ..............: 1000000 [10000,1000000000] MeV (fixed,scale=1000000,gradient)\n", | |
| 223 | + " Number of temporal par's ..: 1\n", | |
| 224 | + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n" | |
| 225 | + ] | |
| 226 | + } | |
| 227 | + ], | |
| 228 | + "source": [ | |
| 229 | + "print(like.opt())\n", | |
| 230 | + "print(like.obs().models())" | |
| 231 | + ] | |
| 232 | + }, | |
| 233 | + { | |
| 234 | + "cell_type": "markdown", | |
| 235 | + "metadata": {}, | |
| 236 | + "source": [ | |
| 237 | + "The fit has properly converged and the results are consistent with those obtained with the unbinned analysis.\n", | |
| 238 | + "\n", | |
| 239 | + "We will also check the spectral residuals." | |
| 240 | + ] | |
| 241 | + }, | |
| 242 | + { | |
| 243 | + "cell_type": "code", | |
| 244 | + "execution_count": 26, | |
| 245 | + "metadata": {}, | |
| 246 | + "outputs": [ | |
| 247 | + { | |
| 248 | + "data": { | |
| 249 | + "image/png": "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UuDuvZZIJJLyuEgk0us4KX9quZas5VLCT0REwk/jZLYJqjyv/g9KTyiT61IpxSeqMiIiIgIqzyvbhDK5LqVSfJUs1yoj+ZpuXUREwqVcW1sbGxsTybUahipXKJNrKQ3ZVhn5jyv+lLfp1qF8H9IiIiISPkqupegG66sdT5TfeeedfvvUVzv8qqqqmDhxIu5OVVUVV111FUcccUTG1znnnHOYNWsWp556agGizM1OO+2UKBkoIlKq1DBVOKoWIiUl09HUfWtjJ69L6dlxxx1ZtmwZzz//PN///vf5xje+UfQYPvroo6LfU0REKoeSawmtgWpjK8EOh40bN7LrrrsC0clhZsyYwdSpU5k4cSJ333134rhf/vKXTJo0iYMPPpgvfvGL/a7z7W9/m3POOYePP/6Ye++9lwMOOIAjjzySr3zlK8yaNQuIDqBtbm7m2GOP5ayzzmLz5s3MnTuXiRMnMmXKFBYvXgzA/PnzueiiixLXnjVrFo899hgQbZG+/PLLOfjggznssMN48803AfjLX/7C4YcfziGHHMK3v/3tgvysREQkPNQtRAKRS5WR5Alq+tJsWGm67zJYuyK/19xzIhx3xaCHvP/++0yePJnNmzfzxhtv8OijjwIwfPhw7rrrLkaOHMn69es57LDDOOGEE3jppZdoa2vjD3/4A6NGjeLtt9/udb2vf/3rdHd3c+ONN/LBBx9w/vnn88QTTzBu3DjOPPPMXscuXbqUJ598kh133JEf//jHAKxYsYJXXnmFY489lldffXXQ2N977z0OO+ww2tra+PrXv87111/Pt771LS6++GL+9V//lbPOOourr74605+aiIiUGbVcS9GdOHlvJuw1MugwJADxbiGvvPIK999/P2eddVaiK9A3v/lNJk2axDHHHMPf/vY33nzzTR599FFOPfVURo2KTli02267Ja71ve99j3feeYfrrrsOM+OVV15h3333Zdy4cQD9kusTTjiBHXfcEYAnn3wy0Qp+wAEHEIlEhkyud9hhh0RL+LRp0xKVAP7whz8k7pWqZV1ERCpLKFuuVec63LKtMtLa+mCv+tiqjZ2DIVqYi+Hwww9n/fr1rFu3jnvvvZd169axdOlSqqurqaurY/Pmzbj7gDNzHnLIISxdupS3336b3XbbbchPKEaMGJH4eqBjt99+ez7++OPE+ubNmxNfV1dXJ2Kpqqrq1Xdbs4eKiEhcKFuu3X2RuzfX1tYGHYoEoLW1ldbWVqZNm0Z1dXWvfcm1sePLggULAopUBvPKK6+wdetWdt99d7q7u9ljjz2orq5m8eLFiT+aZsyYwe23386GDRsAenULmTlzJpdddhnHH388mzZt4oADDmDVqlWJP6xuu+22Ae991FFHJfrmv/rqq/z1r39l//33p66ujmXLlvHxxx+zevVqnn322SG/j0996lPceuutAOrvL6GkgeEi+RXKlmupTJuGjepVHzuX2tgSjHifa4i2Ht90001UVVXR2NjI7NmzaWhoYPLkyRxwwAEAHHjggVx++eUcffTRVFVVMWXKFObPn5+43he+8AU2bdrECSecwL333svPfvYzZs6cyahRozj00EMHjOPCCy/kggsuYOLEiWy//fbMnz+fYcOG8alPfYpx48YxceJEDjroIKZOnTrk9/STn/yEOXPm8JOf/IRTTjkltx+QSJENNDAc0MyCIlmyMA/2amho8CVLlhTlXvEay8lTdktxxQdA9q2PPVitTv2/bfPyyy/zyU9+MugwCurdd99lp512wt35t3/7N+rr67n00kuDDivlz97Mlrp7Q0AhBaKYz+xSkk094WxrEA91XrZdmIa6Xr7jDLNif2/6PyiedJ/barmWUElVZeS0a58CSFl9ZEJRopJScf3113PTTTfx4YcfMmXKFM4///ygQxIRkQqj5FpC48TJewcdgpS4Sy+9tCRaqiuFmd0AzALecveDgo5Hhta3lVIDw0XyT8m1hEY2VUZaWx8sUDQiAswHrgJ+GXAcJavvYMG2traS6svc1tZGc3MzPT09iW01NTW0tbUFGJVIuIWyWoiIiATP3Z8A3h7ywAqV7Syyxaze0djYSHt7e2I9EonQ3t5eUn8AiISNWq6lIsQHNmaivr6eOXPmFCAakcphZs1AM8DYsZnXtx/i2kDpDMhKZ7Bg31lk+8aeS/WObFvJGxsbE/GoK4hI7tRyLWVt07BRA+4baip1lfCLJguaIEVy4e7t7t7g7g2jR48OOpySE3+PxZempqZeXTRgW0KefFxf2baSi0j+qeVaytrqXaN1ivuW7wMSiXWqMn3ZtHTL0Kqqqpg4cSJbtmxh++235+yzz+aSSy5hu+0G/ju/s7OTp556Sp8iSMnLZrBgtn+8ZtNKnipGEck/JddS9lKV70uW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\n", | |
| 250 | + "text/plain": [ | |
| 251 | + "<matplotlib.figure.Figure at 0x110a33908>" | |
| 252 | + ] | |
| 253 | + }, | |
| 254 | + "metadata": {}, | |
| 255 | + "output_type": "display_data" | |
| 256 | + } | |
| 257 | + ], | |
| 258 | + "source": [ | |
| 259 | + "residuals = 'residuals_classical.fits'\n", | |
| 260 | + "res = cscripts.csresspec(like.obs())\n", | |
| 261 | + "\n", | |
| 262 | + "res['statistic'] = 'WSTAT'\n", | |
| 263 | + "res['components'] = True\n", | |
| 264 | + "res['algorithm'] = 'SIGNIFICANCE'\n", | |
| 265 | + "res['outfile'] = residuals\n", | |
| 266 | + "\n", | |
| 267 | + "res.execute()\n", | |
| 268 | + "\n", | |
| 269 | + "from show_residuals import plot_residuals\n", | |
| 270 | + "plot_residuals(residuals,'',0)" | |
| 271 | + ] | |
| 272 | + } | |
| 273 | + ], | |
| 274 | + "metadata": { | |
| 275 | + "kernelspec": { | |
| 276 | + "display_name": "Python 3", | |
| 277 | + "language": "python", | |
| 278 | + "name": "python3" | |
| 279 | + }, | |
| 280 | + "language_info": { | |
| 281 | + "codemirror_mode": { | |
| 282 | + "name": "ipython", | |
| 283 | + "version": 3 | |
| 284 | + }, | |
| 285 | + "file_extension": ".py", | |
| 286 | + "mimetype": "text/x-python", | |
| 287 | + "name": "python", | |
| 288 | + "nbconvert_exporter": "python", | |
| 289 | + "pygments_lexer": "ipython3", | |
| 290 | + "version": "3.5.4" | |
| 291 | + } | |
| 292 | + }, | |
| 293 | + "nbformat": 4, | |
| 294 | + "nbformat_minor": 2 | |
| 295 | +} | ... | ... |
doc/source/users/tutorials/hess_dr1/classical.rst deleted
| 1 | -.. _hess_dr1_classical: | |
| 2 | - | |
| 3 | -Performing a classical On/Off analysis | |
| 4 | --------------------------------------- | |
| 5 | - | |
| 6 | - .. admonition:: What you will learn | |
| 7 | - | |
| 8 | - You will learn **how to perform a classical On/Off analysis of the | |
| 9 | - data**. | |
| 10 | - | |
| 11 | - | |
| 12 | -.. code-block:: bash | |
| 13 | - | |
| 14 | - $ csphagen use_irf_bkg=no | |
| 15 | - Input event list or observation definition XML file [obs.xml] obs_crab_selected.xml | |
| 16 | - Input model definition XML file (if NONE, use point source) [NONE] crab_models.xml | |
| 17 | - Source name [Crab] | |
| 18 | - Algorithm for defining energy bins (FILE|LIN|LOG) [LOG] | |
| 19 | - Start value for first energy bin in TeV [0.1] 0.66 | |
| 20 | - Stop value for last energy bin in TeV [100.0] | |
| 21 | - Number of energy bins [120] 40 | |
| 22 | - Stack multiple observations into single PHA, ARF and RMF files? [no] | |
| 23 | - Output observation definition XML file [onoff_obs.xml] onoff_obs_crab.xml | |
| 24 | - Method for background estimation (REFLECTED|CUSTOM) [REFLECTED] | |
| 25 | - Coordinate system (CEL - celestial, GAL - galactic) (CEL|GAL) [CEL] | |
| 26 | - Right Ascension of source region centre (deg) (0-360) [83.63] | |
| 27 | - Declination of source region centre (deg) (-90-90) [22.01] | |
| 28 | - Radius of source region circle (deg) (0-180) [0.2] | |
| 29 | - | |
| 30 | -.. code-block:: xml | |
| 31 | - | |
| 32 | - <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 33 | - <source_library title="source library"> | |
| 34 | - <source name="Crab" type="PointSource"> | |
| 35 | - <spectrum type="PowerLaw"> | |
| 36 | - <parameter name="Prefactor" value="1" scale="5.7e-18" min="0" free="1" /> | |
| 37 | - <parameter name="Index" value="1" scale="-2.48" min="-4" max="4" free="1" /> | |
| 38 | - <parameter name="PivotEnergy" value="1" scale="1000000" free="0" /> | |
| 39 | - </spectrum> | |
| 40 | - <spatialModel type="PointSource"> | |
| 41 | - <parameter name="RA" value="83.633" scale="1" free="0" /> | |
| 42 | - <parameter name="DEC" value="22.015" scale="1" free="0" /> | |
| 43 | - </spatialModel> | |
| 44 | - </source> | |
| 45 | - </source_library> | |
| 46 | - | |
| 47 | -.. code-block:: bash | |
| 48 | - | |
| 49 | - $ ctlike statistic=wstat | |
| 50 | - Input event list, counts cube or observation definition XML file [events.fits] onoff_obs_crab.xml | |
| 51 | - Input model definition XML file [$CTOOLS/share/models/crab.xml] crab_models_onoff.xml | |
| 52 | - Output model definition XML file [crab_results.xml] | |
| 53 | - | |
| 54 | -.. code-block:: none | |
| 55 | - | |
| 56 | - 2018-09-13T11:49:06: +=========================================+ | |
| 57 | - 2018-09-13T11:49:06: | Maximum likelihood optimisation results | | |
| 58 | - 2018-09-13T11:49:06: +=========================================+ | |
| 59 | - 2018-09-13T11:49:06: === GOptimizerLM === | |
| 60 | - 2018-09-13T11:49:06: Optimized function value ..: 60.048 | |
| 61 | - 2018-09-13T11:49:06: Absolute precision ........: 0.005 | |
| 62 | - 2018-09-13T11:49:06: Acceptable value decrease .: 2 | |
| 63 | - 2018-09-13T11:49:06: Optimization status .......: converged | |
| 64 | - 2018-09-13T11:49:06: Number of parameters ......: 6 | |
| 65 | - 2018-09-13T11:49:06: Number of free parameters .: 2 | |
| 66 | - 2018-09-13T11:49:06: Number of iterations ......: 5 | |
| 67 | - 2018-09-13T11:49:06: Lambda ....................: 1e-08 | |
| 68 | - 2018-09-13T11:49:06: Maximum log likelihood ....: -60.048 | |
| 69 | - 2018-09-13T11:49:06: Observed events (Nobs) ...: 605.000 | |
| 70 | - 2018-09-13T11:49:06: Predicted events (Npred) ..: 604.191 (Nobs - Npred = 0.808986318662733) | |
| 71 | - 2018-09-13T11:49:06: === GModels === | |
| 72 | - 2018-09-13T11:49:06: Number of models ..........: 1 | |
| 73 | - 2018-09-13T11:49:06: Number of parameters ......: 6 | |
| 74 | - 2018-09-13T11:49:06: === GModelSky === | |
| 75 | - 2018-09-13T11:49:06: Name ......................: Crab | |
| 76 | - 2018-09-13T11:49:06: Instruments ...............: all | |
| 77 | - 2018-09-13T11:49:06: Instrument scale factors ..: unity | |
| 78 | - 2018-09-13T11:49:06: Observation identifiers ...: all | |
| 79 | - 2018-09-13T11:49:06: Model type ................: PointSource | |
| 80 | - 2018-09-13T11:49:06: Model components ..........: "PointSource" * "PowerLaw" * "Constant" | |
| 81 | - 2018-09-13T11:49:06: Number of parameters ......: 6 | |
| 82 | - 2018-09-13T11:49:06: Number of spatial par's ...: 2 | |
| 83 | - 2018-09-13T11:49:06: RA .......................: 83.633 deg (fixed,scale=1) | |
| 84 | - 2018-09-13T11:49:06: DEC ......................: 22.015 deg (fixed,scale=1) | |
| 85 | - 2018-09-13T11:49:06: Number of spectral par's ..: 3 | |
| 86 | - 2018-09-13T11:49:06: Prefactor ................: 4.77687464316323e-17 +/- 3.12433509735449e-18 [0,infty[ ph/cm2/s/MeV (free,scale=5.7e-18,gradient) | |
| 87 | - 2018-09-13T11:49:06: Index ....................: -2.60709757251519 +/- 0.0767624316833204 [9.92,-9.92] (free,scale=-2.48,gradient) | |
| 88 | - 2018-09-13T11:49:06: PivotEnergy ..............: 1000000 MeV (fixed,scale=1000000,gradient) | |
| 89 | - 2018-09-13T11:49:06: Number of temporal par's ..: 1 | |
| 90 | - 2018-09-13T11:49:06: Normalization ............: 1 (relative value) (fixed,scale=1,gradient) | |
| 91 | - | |
| 92 | -The intensity at 1 TeV of the Crab was fitted to | |
| 93 | -:math:`(4.78 \pm 0.31) \times 10^{-11}\,{\rm photons}\,{\rm cm}^{-2}\,{\rm s}^{-1}\,{\rm TeV}^{-1}` | |
| 94 | -the spectral index of the power law is | |
| 95 | -:math:`-2.61 \pm 0.08`. | |
| 96 | -This can be compared to the values | |
| 97 | -:math:`(4.64 \pm 0.26) \times 10^{-11}\,{\rm photons}\,{\rm cm}^{-2}\,{\rm s}^{-1}\,{\rm TeV}^{-1}` | |
| 98 | -and | |
| 99 | -:math:`-2.61 \pm 0.07` | |
| 100 | -that were obtained before with the unbinned maximum likelihood fit using the | |
| 101 | -energy dispersion. | |
| 102 | - | |
| 103 | -.. code-block:: bash | |
| 104 | - | |
| 105 | - $ csresspec components=yes | |
| 106 | - Input event list, counts cube, or observation definition XML file [events.fits] onoff_obs_crab.xml | |
| 107 | - Stack observations? [no] yes | |
| 108 | - Input model definition XML file [$CTOOLS/share/models/crab.xml] crab_results_onoff.xml | |
| 109 | - Residuals computation algorithm (SUB|SUBDIV|SUBDIVSQRT|SIGNIFICANCE) [SIGNIFICANCE] | |
| 110 | - Output residual spectrum file [resspec.fits] resspec_onoff.fits | |
| 111 | - | |
| 112 | -The script will produce the FITS file ``resspec.fits`` that contains the | |
| 113 | -spectral residuals for each of the model components. | |
| 114 | -To display the residuals you can use the ``show_residuals.py`` script in the | |
| 115 | -example folder as follows: | |
| 116 | - | |
| 117 | -.. code-block:: bash | |
| 118 | - | |
| 119 | - $CTOOLS/share/examples/python/show_residuals.py resspec.fits | |
| 120 | - | |
| 121 | -The figure below shows the resulting residual spectrum. | |
| 122 | -Although the model provides a reasonable first order approximation of the | |
| 123 | -spectral distribution of the data, there are still significant spectral | |
| 124 | -residuals that cannot be explained by the model. | |
| 125 | - | |
| 126 | -.. figure:: classical_resspec.png | |
| 127 | - :width: 600px | |
| 128 | - :align: center | |
| 129 | - | |
| 130 | - *Residual counts spectrum after model fitting* |
doc/source/users/tutorials/hess_dr1/selecting_events.ipynb
| ... | ... | @@ -11,7 +11,7 @@ |
| 11 | 11 | "cell_type": "raw", |
| 12 | 12 | "metadata": {}, |
| 13 | 13 | "source": [ |
| 14 | - "<div align=\"right\"><a href=\"../../../_downloads/howto_advanced_python_fitting.ipynb\" download=\"selecting_events_HESSDR1.ipynb\"><img src=\"../../../_static/download-notebook.jpg\" alt=\"Download Notebook\" height=\"40\"></a></div>" | |
| 14 | + "<div align=\"right\"><a href=\"../../../_downloads/selecting_events.ipynb\" download=\"selecting_events.ipynb\"><img src=\"../../../_static/download-notebook.jpg\" alt=\"Download Notebook\" height=\"40\"></a></div>" | |
| 15 | 15 | ] |
| 16 | 16 | }, |
| 17 | 17 | { | ... | ... |
doc/source/users/tutorials/notebooks.rst
| ... | ... | @@ -20,4 +20,6 @@ this page. |
| 20 | 20 | * :download:`How to perform a stacked analysis? <howto/howto_stacked_analysis.ipynb>` |
| 21 | 21 | * :download:`How to do advanced model manipulation and fitting in Python? <howto/howto_advanced_python_fitting.ipynb>` |
| 22 | 22 | * :download:`Data preparation for 1DC How-tos <howto/howto_prepare_1dc.ipynb>` |
| 23 | -* :download:`Selecting events for H.E.S.S. public data <hess_dr1/selecting_events.ipynb>` | |
| 23 | +* :download:`Selecting events for H.E.S.S. public data <hess_dr1/selecting_events.ipynb>` | |
| 24 | +* :download:`Classical analysis of H.E.S.S. public data <hess_dr1/classical.ipynb>` | |
| 25 | + | ... | ... |
models/Makefile.am
models/crab_nobkg.xml
0 → 100755
| 1 | +<?xml version="1.0" standalone="no"?> | |
| 2 | +<source_library title="source library"> | |
| 3 | + <source name="Crab" type="PointSource"> | |
| 4 | + <spectrum type="PowerLaw"> | |
| 5 | + <parameter name="Prefactor" scale="1e-17" value="5.7" min="1e-07" max="1000.0" free="1"/> | |
| 6 | + <parameter name="Index" scale="-1" value="2.48" min="0.0" max="+5.0" free="1"/> | |
| 7 | + <parameter name="PivotEnergy" scale="1e6" value="1." min="0.01" max="1000.0" free="0"/> | |
| 8 | + </spectrum> | |
| 9 | + <spatialModel type="PointSource"> | |
| 10 | + <parameter name="RA" scale="1.0" value="83.6331" min="-360" max="360" free="0"/> | |
| 11 | + <parameter name="DEC" scale="1.0" value="22.0145" min="-90" max="90" free="0"/> | |
| 12 | + </spatialModel> | |
| 13 | + </source> | |
| 14 | +</source_library> | ... | ... |