{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# How to do advanced model manipulation and fitting in Python?" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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", "\n", "As usual start by importing the gammalib, ctools, and cscripts Python modules." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import gammalib\n", "import ctools\n", "import cscripts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now import the matplotlib package for plotting." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulated dataset\n", "\n", "For the tutorial you will simulate a small dataset. Start by defining the Instrument Response Function and energy range that will be used all along." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "caldb = 'prod2'\n", "irf = 'South_0.5h'\n", "emin = 0.1 # TeV\n", "emax = 160.0 # TeV" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now 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." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "evfile = 'events.fits'\n", "obssim = ctools.ctobssim()\n", "obssim['ra'] = 83.63\n", "obssim['dec'] = 22.51\n", "obssim['rad'] = 5.0\n", "obssim['tmin'] = 0\n", "obssim['tmax'] = 3600\n", "obssim['emin'] = emin\n", "obssim['emax'] = emax\n", "obssim['caldb'] = caldb\n", "obssim['irf'] = irf\n", "obssim['inmodel'] = '$CTOOLS/share/models/crab_beyond.xml'\n", "obssim['outevents'] = evfile\n", "obssim.execute()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You 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 or observation definition XML file.\n", "\n", "Let's first peek at the simulated dataset by displaying a skymap." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "skymap = ctools.ctskymap()\n", "skymap['inobs'] = evfile\n", "skymap['emin'] = emin\n", "skymap['emax'] = emax\n", "skymap['nxpix'] = 40\n", "skymap['nypix'] = 40\n", "skymap['binsz'] = 0.02\n", "skymap['proj'] = 'TAN'\n", "skymap['coordsys'] = 'CEL'\n", "skymap['xref'] = 83.63\n", "skymap['yref'] = 22.01\n", "skymap['bkgsubtract'] = 'IRF'\n", "skymap['caldb'] = caldb\n", "skymap['irf'] = irf\n", "skymap.run()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "