{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Manipulating FileFunction Spectra" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This tutorial demonstrates some of the methods that can be used to manipulate FileFunction sources in fermipy. For this example we'll use the draco analysis." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-07-17T21:44:41.126609Z", "iopub.status.busy": "2026-07-17T21:44:41.126426Z", "iopub.status.idle": "2026-07-17T21:44:41.743782Z", "shell.execute_reply": "2026-07-17T21:44:41.742742Z" }, "scrolled": false }, "outputs": [], "source": [ "import os\n", "if os.path.isfile('../data/draco.tar.gz'):\n", " !tar xzf ../data/draco.tar.gz\n", "else:\n", " !curl -OL --output-dir ./../data/ https://raw.githubusercontent.com/fermiPy/fermipy-extras/master/data/draco.tar.gz\n", " !tar xzf ./../data/draco.tar.gz\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-07-17T21:44:41.745841Z", "iopub.status.busy": "2026-07-17T21:44:41.745615Z", "iopub.status.idle": "2026-07-17T21:44:54.221906Z", "shell.execute_reply": "2026-07-17T21:44:54.221130Z" }, "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:43 INFO GTAnalysis.__init__(): \n", "--------------------------------------------------------------------------------\n", "fermipy version 1.4.2+32.g764b \n", "ScienceTools version 2.5.1\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:43 INFO GTAnalysis.setup(): Running setup.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:43 INFO GTBinnedAnalysis.setup(): Running setup for component 00\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:43 INFO GTBinnedAnalysis._select_data(): Skipping data selection.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:43 INFO GTBinnedAnalysis.setup(): Using external LT cube.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "{'Prefactor': 0, 'Index1': 1, 'Scale': 2, 'Cutoff': 3, 'Index2': 4}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:44 INFO GTBinnedAnalysis._create_expcube(): Skipping gtexpcube.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING: FITSFixedWarning: 'datfix' made the change 'Set DATEREF to '2001-01-01T00:01:04.184' from MJDREF.\n", "Set MJD-OBS to 54682.655283 from DATE-OBS.\n", "Set MJD-END to 56874.155007 from DATE-END'. [astropy.wcs.wcs]\n", "2026-07-17 21:44:44 INFO GTBinnedAnalysis._create_srcmaps(): Skipping gtsrcmaps.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:44 INFO GTBinnedAnalysis.setup(): Finished setup for component 00\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:44 INFO GTBinnedAnalysis._create_binned_analysis(): Creating BinnedAnalysis for component 00.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:50 INFO GTAnalysis.setup(): Initializing source properties\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:54 INFO GTAnalysis.setup(): Finished setup.\n" ] } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "from fermipy.gtanalysis import GTAnalysis\n", "gta = GTAnalysis('draco/config.yaml')\n", "gta.setup()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default all sources are initialized with parametric spectral models (PowerLaw, etc.). The spectral model of a source an be updated by calling ``set_source_spectrum()``." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-07-17T21:44:54.223523Z", "iopub.status.busy": "2026-07-17T21:44:54.223346Z", "iopub.status.idle": "2026-07-17T21:44:54.226997Z", "shell.execute_reply": "2026-07-17T21:44:54.226216Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Name : 3FGL J1725.3+5853\n", "Associations : ['3FGL J1725.3+5853', '7C 1724+5854', '2FGL J1725.2+5853']\n", "RA/DEC : 261.332/ 58.887\n", "GLON/GLAT : 87.497/ 33.997\n", "TS : nan\n", "Npred : 278.21\n", "Flux : 9.942e-10 +/- nan\n", "EnergyFlux : 2.323e-06 +/- nan\n", "SpatialModel : PointSource\n", "SpectrumType : PowerLaw\n", "Spectral Parameters\n", "b'Prefactor' : 1.627e-13 +/- nan\n", "b'Index' : -2.179 +/- nan\n", "b'Scale' : 1701 +/- nan\n" ] } ], "source": [ "print(gta.roi['3FGL J1725.3+5853'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Running ``set_source_spectrum()`` with no additional arguments will substitute the source spectrum with a FileFunction with the same distribution in differential flux. The normalization parameter is defined such that 1.0 corresponds to the normalization of the original source spectrum. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-07-17T21:44:54.228440Z", "iopub.status.busy": "2026-07-17T21:44:54.228288Z", "iopub.status.idle": "2026-07-17T21:44:54.520461Z", "shell.execute_reply": "2026-07-17T21:44:54.519567Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Name : 3FGL J1725.3+5853\n", "Associations : ['3FGL J1725.3+5853', '7C 1724+5854', '2FGL J1725.2+5853']\n", "RA/DEC : 261.332/ 58.887\n", "GLON/GLAT : 87.497/ 33.997\n", "TS : 311.62\n", "Npred : 278.21\n", "Flux : 9.942e-10 +/- nan\n", "EnergyFlux : 2.323e-06 +/- nan\n", "SpatialModel : PointSource\n", "SpectrumType : FileFunction\n", "Spectral Parameters\n", "b'Normalization': 1 +/- 0\n" ] } ], "source": [ "gta.set_source_spectrum('3FGL J1725.3+5853','FileFunction')\n", "print(gta.roi['3FGL J1725.3+5853'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The differential flux of a FileFunction source can be accessed or modified at runtime by calling the ``get_source_dfde()`` and ``set_source_dfde()`` methods:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-07-17T21:44:54.521984Z", "iopub.status.busy": "2026-07-17T21:44:54.521827Z", "iopub.status.idle": "2026-07-17T21:44:54.957102Z", "shell.execute_reply": "2026-07-17T21:44:54.956279Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "60983.58840416614\n", "61078.53918366593\n" ] }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x, y = gta.get_source_dnde('3FGL J1725.3+5853')\n", "y1 = 1E-12*10**(-2.0*(x-3.0))*np.exp(-10**(x-3.0))\n", "\n", "plt.clf()\n", "plt.figure()\n", "plt.plot(x,y)\n", "plt.plot(x,y1)\n", "plt.gca().set_yscale('log')\n", "plt.gca().set_ylim(1E-17,1E-5)\n", "print(gta.like())\n", "gta.set_source_dnde('3FGL J1725.3+5853',y1)\n", "print(gta.like())\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calling ``set_source_spectrum()`` with the optional dictionary argument can be used to explicitly set the parameters of the new spectral model. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "execution": { "iopub.execute_input": "2026-07-17T21:44:54.958854Z", "iopub.status.busy": "2026-07-17T21:44:54.958654Z", "iopub.status.idle": "2026-07-17T21:44:55.106358Z", "shell.execute_reply": "2026-07-17T21:44:55.105554Z" } }, "outputs": [ { "data": { "text/plain": [ "60983.580120341634" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gta.set_source_spectrum('3FGL J1725.3+5853','PowerLaw',{'Index' : {'value' : -2.179}, 'Scale' : {'value' : 1701}, 'Prefactor' : {'value' : 1.627e-13}})\n", "gta.like()" ] } ], "metadata": { "kernelspec": { "display_name": "fermipy", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.15" } }, "nbformat": 4, "nbformat_minor": 0 }