{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "**This is a fixed-text formatted version of a Jupyter notebook**\n", "\n", "- Try online [![Binder](https://static.mybinder.org/badge.svg)](https://mybinder.org/v2/gh/gammapy/gammapy-webpage/v0.16?urlpath=lab/tree/catalog.ipynb)\n", "- You can contribute with your own notebooks in this\n", "[GitHub repository](https://github.com/gammapy/gammapy/tree/master/tutorials).\n", "- **Source files:**\n", "[catalog.ipynb](../_static/notebooks/catalog.ipynb) |\n", "[catalog.py](../_static/notebooks/catalog.py)\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Source catalogs\n", "\n", "`~gammapy.catalog` provides convenient access to common gamma-ray source catalogs. E.g. creating a spectral model and spectral points for a given Fermi-LAT catalog and source from the FITS table is tedious, `~gammapy.catalog` has this implemented and makes it easy.\n", "\n", "In this tutorial you will learn how to:\n", "\n", "- List available catalogs\n", "- Load a catalog\n", "- Select a source\n", "- Pretty-print the source information\n", "- Get source spectral and spatial models\n", "- Get flux points (if available)\n", "- Get lightcurves (if available)\n", "- Access the source catalog table data\n", "\n", "In this tutorial we will show examples using the following catalogs:\n", "\n", "- `~gammapy.catalog.SourceCatalogHGPS`\n", "- `~gammapy.catalog.SourceCatalogGammaCat`\n", "- `~gammapy.catalog.SourceCatalog3FHL`\n", "- `~gammapy.catalog.SourceCatalog4FGL`\n", "\n", "All catalog and source classes work the same, as long as some information is available. E.g. trying to access a lightcurve from a catalog and source that doesn't have that information will return ``None``.\n", "\n", "Further information is available at `~gammapy.catalog`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import astropy.units as u\n", "from gammapy.catalog import SOURCE_CATALOGS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## List available catalogs\n", "\n", "`~gammapy.catalog` contains a Python dictionary ``SOURCE_CATALOGS``, which maps catalog names (e.g. \"3fhl\") to catalog classes (e.g. ``SourceCatalog3FHL``). " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'gamma-cat': gammapy.catalog.gammacat.SourceCatalogGammaCat,\n", " 'hgps': gammapy.catalog.hess.SourceCatalogHGPS,\n", " '2hwc': gammapy.catalog.hawc.SourceCatalog2HWC,\n", " '3fgl': gammapy.catalog.fermi.SourceCatalog3FGL,\n", " '4fgl': gammapy.catalog.fermi.SourceCatalog4FGL,\n", " '2fhl': gammapy.catalog.fermi.SourceCatalog2FHL,\n", " '3fhl': gammapy.catalog.fermi.SourceCatalog3FHL}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SOURCE_CATALOGS" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['gamma-cat', 'hgps', '2hwc', '3fgl', '4fgl', '2fhl', '3fhl']" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(SOURCE_CATALOGS)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load catalogs\n", "\n", "If you have run `gammapy download datasets` or `gammapy download tutorials`,\n", "you have a copy of the catalogs as FITS files in `$GAMMAPY_DATA/catalogs`,\n", "and that is the default location where `~gammapy.catalog` loads from.\n", "\n", "You can load a catalog by name via `SOURCE_CATALOG[name]()` (not the `()` to instantiate a catalog object from the catalog class - only this will load the catalog and be useful), or by importing the catalog class (e.g. `SourceCatalog3FGL`) directly. The two ways are equivalent, the result will be the same.\n", "\n", "Note that `$GAMMAPY_DATA/catalogs` is just the default, you could pass a different `filename` when creating the catalog." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2HWC.ecsv\r\n", "2HWC.yaml\r\n", "README.rst\r\n", "\u001b[34mfermi\u001b[m\u001b[m\r\n", "\u001b[34mgammacat\u001b[m\u001b[m\r\n", "hgps_catalog_v1.fits.gz\r\n", "make_2hwc.py\r\n" ] } ], "source": [ "!ls -1 $GAMMAPY_DATA/catalogs" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Catalog object - FITS file is loaded\n", "catalog = SOURCE_CATALOGS[\"3fgl\"]()\n", "catalog" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from gammapy.catalog import SourceCatalog3FGL\n", "\n", "catalog = SourceCatalog3FGL()\n", "catalog" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Let's load the source catalogs we will use throughout this tutorial\n", "catalog_gammacat = SOURCE_CATALOGS[\"gamma-cat\"]\n", "catalog_3fhl = SOURCE_CATALOGS[\"3fhl\"]()\n", "catalog_4fgl = SOURCE_CATALOGS[\"4fgl\"]()\n", "catalog_hgps = SOURCE_CATALOGS[\"hgps\"]()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Select a source\n", "\n", "To create a source object, index into the catalog using `[]`, passing a catalog table row index (zero-based, first row is `[0]`), or a source name. If passing a name, catalog table columns with source names and association names (\"ASSOC1\" in the example below) are searched top to bottom. There is no name resolution web query." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "source = catalog_4fgl[42]\n", "source" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(42, '4FGL J0010.8-2154')" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "source.row_index, source.name" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "source = catalog_4fgl[\"4FGL J0010.8-2154\"]\n", "source" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(42, '4FGL J0010.8-2154')" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "source.row_index, source.name" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'PKS 0008-222 '" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "source.data[\"ASSOC1\"]" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(42, '4FGL J0010.8-2154')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "source = catalog_4fgl[\"PKS 0008-222\"]\n", "source.row_index, source.name" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pretty-print source information\n", "\n", "A source object has a nice string representation that you can print.\n", "You can also call `source.info()` instead and pass an option what information to print." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "*** Basic info ***\n", "\n", "Catalog row index (zero-based) : 18\n", "Source name : HESS J1514-591\n", "Analysis reference : HGPS\n", "Source class : PWN\n", "Identified object : MSH 15-52\n", "Gamma-Cat id : 79\n", "\n", "\n", "*** Info from map analysis ***\n", "\n", "RA : 228.499 deg = 15h14m00s\n", "DEC : -59.161 deg = -59d09m41s\n", "GLON : 320.315 +/- 0.008 deg\n", "GLAT : -1.188 +/- 0.007 deg\n", "Position Error (68%) : 0.020 deg\n", "Position Error (95%) : 0.033 deg\n", "ROI number : 13\n", "Spatial model : 3-Gaussian\n", "Spatial components : HGPSC 023, HGPSC 024, HGPSC 025\n", "TS : 1763.4\n", "sqrt(TS) : 42.0\n", "Size : 0.145 +/- 0.026 (UL: nan) deg\n", "R70 : 0.215 deg\n", "RSpec : 0.215 deg\n", "Total model excess : 3502.8\n", "Excess in RSpec : 2440.5\n", "Model Excess in RSpec : 2414.3\n", "Background in RSpec : 1052.5\n", "Livetime : 41.4 hours\n", "Energy threshold : 0.61 TeV\n", "Source flux (>1 TeV) : (6.434 +/- 0.211) x 10^-12 cm^-2 s^-1 = (28.47 +/- 0.94) % Crab\n", "\n", "Fluxes in RSpec (> 1 TeV):\n", "Map measurement : 4.552 x 10^-12 cm^-2 s^-1 = 20.14 % Crab\n", "Source model : 4.505 x 10^-12 cm^-2 s^-1 = 19.94 % Crab\n", "Other component model : 0.000 x 10^-12 cm^-2 s^-1 = 0.00 % Crab\n", "Large scale component model : 0.000 x 10^-12 cm^-2 s^-1 = 0.00 % Crab\n", "Total model : 4.505 x 10^-12 cm^-2 s^-1 = 19.94 % Crab\n", "Containment in RSpec : 70.0 %\n", "Contamination in RSpec : 0.0 %\n", "Flux correction (RSpec -> Total) : 142.8 %\n", "Flux correction (Total -> RSpec) : 70.0 %\n", "\n", "*** Info from spectral analysis ***\n", "\n", "Livetime : 13.7 hours\n", "Energy range: : 0.38 to 61.90 TeV\n", "Background : 1825.9\n", "Excess : 2061.1\n", "Spectral model : ECPL\n", "TS ECPL over PL : 10.2\n", "Best-fit model flux(> 1 TeV) : (5.720 +/- 0.417) x 10^-12 cm^-2 s^-1 = (25.31 +/- 1.84) % Crab\n", "Best-fit model energy flux(1 to 10 TeV) : (20.779 +/- 1.878) x 10^-12 erg cm^-2 s^-1\n", "Pivot energy : 1.54 TeV\n", "Flux at pivot energy : (2.579 +/- 0.083) x 10^-12 cm^-2 s^-1 TeV^-1 = (11.41 +/- 0.24) % Crab\n", "PL Flux(> 1 TeV) : (5.437 +/- 0.186) x 10^-12 cm^-2 s^-1 = (24.06 +/- 0.82) % Crab\n", "PL Flux(@ 1 TeV) : (6.868 +/- 0.241) x 10^-12 cm^-2 s^-1 TeV^-1 = (30.39 +/- 0.69) % Crab\n", "PL Index : 2.26 +/- 0.03\n", "ECPL Flux(@ 1 TeV) : (6.860 +/- 0.252) x 10^-12 cm^-2 s^-1 TeV^-1 = (30.35 +/- 0.72) % Crab\n", "ECPL Flux(> 1 TeV) : (5.720 +/- 0.417) x 10^-12 cm^-2 s^-1 = (25.31 +/- 1.84) % Crab\n", "ECPL Index : 2.05 +/- 0.06\n", "ECPL Lambda : 0.052 +/- 0.014 TeV^-1\n", "ECPL E_cut : 19.20 +/- 5.01 TeV\n", "\n", "*** Flux points info ***\n", "\n", "Number of flux points: 6\n", "Flux points table: \n", "\n", "e_ref e_min e_max dnde dnde_errn dnde_errp dnde_ul is_ul\n", " TeV TeV TeV 1 / (cm2 s TeV) 1 / (cm2 s TeV) 1 / (cm2 s TeV) 1 / (cm2 s TeV) \n", "------ ------ ------ --------------- --------------- --------------- --------------- -----\n", " 0.562 0.383 0.825 2.439e-11 1.419e-12 1.509e-12 2.732e-11 False\n", " 1.212 0.825 1.778 4.439e-12 2.489e-13 2.654e-13 4.970e-12 False\n", " 2.738 1.778 4.217 7.295e-13 4.788e-14 4.898e-14 8.302e-13 False\n", " 6.190 4.217 9.085 1.305e-13 1.220e-14 1.282e-14 1.571e-13 False\n", "13.991 9.085 21.544 1.994e-14 2.723e-15 2.858e-15 2.588e-14 False\n", "31.623 21.544 46.416 9.474e-16 3.480e-16 4.329e-16 1.919e-15 False\n", "\n", "*** Gaussian component info ***\n", "\n", "Number of components: 3\n", "Spatial components : HGPSC 023, HGPSC 024, HGPSC 025\n", "\n", "Component HGPSC 023:\n", "GLON : 320.303 +/- 0.005 deg\n", "GLAT : -1.124 +/- 0.007 deg\n", "Size : 0.057 +/- 0.005 deg\n", "Flux (>1 TeV) : (2.01 +/- 0.23) x 10^-12 cm^-2 s^-1 = (8.9 +/- 1.0) % Crab\n", "\n", "Component HGPSC 024:\n", "GLON : 320.298 +/- 0.020 deg\n", "GLAT : -1.168 +/- 0.021 deg\n", "Size : 0.206 +/- 0.020 deg\n", "Flux (>1 TeV) : (2.54 +/- 0.29) x 10^-12 cm^-2 s^-1 = (11.2 +/- 1.3) % Crab\n", "\n", "Component HGPSC 025:\n", "GLON : 320.351 +/- 0.005 deg\n", "GLAT : -1.284 +/- 0.007 deg\n", "Size : 0.055 +/- 0.005 deg\n", "Flux (>1 TeV) : (1.88 +/- 0.22) x 10^-12 cm^-2 s^-1 = (8.3 +/- 1.0) % Crab\n", "\n", "\n", "*** Source associations info ***\n", "\n", " Source_Name Association_Catalog Association_Name Separation\n", " deg \n", "---------------- ------------------- --------------------- ----------\n", " HESS J1514-591 2FHL 2FHL J1514.0-5915e 0.098903\n", " HESS J1514-591 3FGL 3FGL J1513.9-5908 0.026914\n", " HESS J1514-591 3FGL 3FGL J1514.0-5915e 0.094834\n", " HESS J1514-591 COMP G320.4-1.2 0.070483\n", " HESS J1514-591 PSR B1509-58 0.026891\n", "\n", "*** Source identification info ***\n", "\n", "Source_Name: HESS J1514-591\n", "Identified_Object: MSH 15-52\n", "Class: PWN\n", "Evidence: Morphology\n", "Reference: 2005A%26A...435L..17A\n", "Distance_Reference: SNRCat\n", "Distance: 5.199999809265137 kpc\n", "Distance_Min: 3.799999952316284 kpc\n", "Distance_Max: 6.599999904632568 kpc\n", "\n" ] } ], "source": [ "source = catalog_hgps[\"MSH 15-52\"]\n", "print(source)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "*** Source associations info ***\n", "\n", " Source_Name Association_Catalog Association_Name Separation\n", " deg \n", "---------------- ------------------- --------------------- ----------\n", " HESS J1514-591 2FHL 2FHL J1514.0-5915e 0.098903\n", " HESS J1514-591 3FGL 3FGL J1513.9-5908 0.026914\n", " HESS J1514-591 3FGL 3FGL J1514.0-5915e 0.094834\n", " HESS J1514-591 COMP G320.4-1.2 0.070483\n", " HESS J1514-591 PSR B1509-58 0.026891\n", "\n" ] } ], "source": [ "print(source.info(\"associations\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Source models\n", "\n", "The `~gammapy.catalog.SourceCatalogObject` classes have a `sky_model()` model\n", "which creates a `gammapy.modeling.models.SkyModel` object, with model parameter\n", "values and parameter errors from the catalog filled in.\n", "\n", "In most cases, the `spectral_model()` method provides the `gammapy.modeling.models.SpectralModel`\n", "part of the sky model, and the `spatial_model()` method the `gammapy.modeling.models.SpatialModel`\n", "part individually.\n", "\n", "We use the `gammapy.catalog.SourceCatalog3FHL` for the examples in this section." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "source = catalog_4fgl[\"PKS 2155-304\"]" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SkyModel(spatial_model=, spectral_model=)temporal_model=None)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = source.sky_model()\n", "model" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SkyModel\n", "\n", " Name : 4FGL J2158.8-3013\n", " Spectral model type : LogParabolaSpectralModel\n", " Spatial model type : PointSpatialModel\n", " Temporal model type : \n", " Parameters:\n", " lon_0 : 329.714 deg \n", " lat_0 : -30.225 deg \n", " amplitude : 1.38e-05 1 / (cm2 s TeV)\n", " reference (frozen) : 0.001 TeV \n", " alpha : 1.763 \n", " beta : 0.042 \n", "\n", "\n" ] } ], "source": [ "print(model)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PointSpatialModel\n", "\n", " name value error unit min max frozen\n", "----- ---------- --------- ---- ---------- --------- ------\n", "lon_0 3.297e+02 3.735e-03 deg nan nan False\n", "lat_0 -3.023e+01 3.227e-03 deg -9.000e+01 9.000e+01 False\n" ] } ], "source": [ "print(model.spatial_model)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LogParabolaSpectralModel\n", "\n", " name value error unit min max frozen\n", "--------- --------- --------- -------------- --- --- ------\n", "amplitude 1.377e-05 1.801e-07 cm-2 s-1 TeV-1 nan nan False\n", "reference 1.136e-03 0.000e+00 TeV nan nan True\n", " alpha 1.763e+00 1.332e-02 nan nan False\n", " beta 4.172e-02 4.680e-03 nan nan False\n" ] } ], "source": [ "print(model.spectral_model)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "energy_range = (100 * u.MeV, 100 * u.GeV)\n", "opts = dict(energy_power=2, flux_unit=\"erg-1 cm-2 s-1\")\n", "model.spectral_model.plot(energy_range, **opts)\n", "model.spectral_model.plot_error(energy_range, **opts)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Flux points\n", "\n", "The flux points are available via the `flux_points` property as a `gammapy.spectrum.FluxPoints` object." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "source = catalog_4fgl[\"PKS 2155-304\"]\n", "flux_points = source.flux_points" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "FluxPoints(sed_type='flux', n_points=7)" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flux_points" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Table length=7\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
e_mine_maxfluxflux_errn
MeVMeV1 / (cm2 s)1 / (cm2 s)
float64float64float32float32
50.0100.07.72853e-084.0041947e-08
100.0300.06.633264e-083.3468415e-09
300.01000.03.2824694e-086.9634254e-10
1000.03000.01.2609229e-082.4615918e-10
3000.010000.05.407803e-091.3989285e-10
10000.030000.01.7188525e-097.4735836e-11
30000.0300000.06.818578e-104.5728827e-11
" ], "text/plain": [ "\n", " e_min e_max flux flux_errn \n", " MeV MeV 1 / (cm2 s) 1 / (cm2 s) \n", "float64 float64 float32 float32 \n", "------- -------- ------------- -------------\n", " 50.0 100.0 7.72853e-08 4.0041947e-08\n", " 100.0 300.0 6.633264e-08 3.3468415e-09\n", " 300.0 1000.0 3.2824694e-08 6.9634254e-10\n", " 1000.0 3000.0 1.2609229e-08 2.4615918e-10\n", " 3000.0 10000.0 5.407803e-09 1.3989285e-10\n", "10000.0 30000.0 1.7188525e-09 7.4735836e-11\n", "30000.0 300000.0 6.818578e-10 4.5728827e-11" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flux_points.table[[\"e_min\", \"e_max\", \"flux\", \"flux_errn\"]]" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "flux_points.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lightcurves\n", "\n", "The Fermi catalogs contain lightcurves for each source. It is available via the `source.lightcurve` property as a `~gammapy.time.LightCurve` object." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "lightcurve = catalog_4fgl[\"4FGL J0349.8-2103\"].lightcurve" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LightCurve(len=8)" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lightcurve" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Table length=3\n", "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "
time_mintime_maxfluxflux_errpflux_errn
1 / (cm2 s)1 / (cm2 s)1 / (cm2 s)
float64float64float32float32float32
54682.65527777777655047.6032392938368.4104094e-084.119689e-094.119689e-09
55047.60323929383655412.551212383973.6117186e-083.434389e-093.434389e-09
55412.5512123839755777.49918547411.4224756e-082.7470255e-092.6878597e-09
" ], "text/plain": [ "\n", " time_min time_max flux flux_errp flux_errn \n", " 1 / (cm2 s) 1 / (cm2 s) 1 / (cm2 s) \n", " float64 float64 float32 float32 float32 \n", "------------------ ------------------ ------------- ------------- -------------\n", "54682.655277777776 55047.603239293836 8.4104094e-08 4.119689e-09 4.119689e-09\n", "55047.603239293836 55412.55121238397 3.6117186e-08 3.434389e-09 3.434389e-09\n", " 55412.55121238397 55777.4991854741 1.4224756e-08 2.7470255e-09 2.6878597e-09" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lightcurve.table[:3]" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "lightcurve.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Catalog table and source dictionary\n", "\n", "Source catalogs are given as `FITS` files that contain one or multiple tables.\n", "Above we showed how to get spectra, light curves and other information as Gammapy objects.\n", "\n", "However, you can also access the underlying `~astropy.table.Table` for a catalog,\n", "and the row data as a Python `dict`. This can be useful if you want to do something\n", "that is not pre-scripted by the `~gammapy.catalog` classes, such as e.g. selecting\n", "sources by sky position or association class, or accessing special source information\n", "(like e.g. `Npred` in the example below).\n", "\n", "Note that you can also do a `for source in catalog` loop, to find or process\n", "sources of interest." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "astropy.table.table.Table" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(catalog_3fhl.table)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1556" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(catalog_3fhl.table)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Table length=3\n", "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Source_NameRAJ2000DEJ2000
degdeg
bytes18float32float32
3FHL J0001.2-07480.3107-7.8075
3FHL J0001.9-41550.4849-41.9303
3FHL J0002.1-67280.5283-67.4825
" ], "text/plain": [ "\n", " Source_Name RAJ2000 DEJ2000 \n", " deg deg \n", " bytes18 float32 float32 \n", "------------------ -------- --------\n", "3FHL J0001.2-0748 0.3107 -7.8075\n", "3FHL J0001.9-4155 0.4849 -41.9303\n", "3FHL J0002.1-6728 0.5283 -67.4825" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "catalog_3fhl.table[:3][[\"Source_Name\", \"RAJ2000\", \"DEJ2000\"]]" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "source = catalog_3fhl[\"PKS 2155-304\"]" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'3FHL J2158.8-3013 '" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "source.data[\"Source_Name\"]" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "678.95544" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "source.data[\"Npred\"]" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "source.position" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "352 3FHL J0534.5+2201 2.99e-10 1 / (cm2 s)\n", "553 3FHL J0851.9-4620e 1.24e-10 1 / (cm2 s)\n", "654 3FHL J1036.3-5833e 1.57e-10 1 / (cm2 s)\n", "691 3FHL J1104.4+3812 3.34e-10 1 / (cm2 s)\n", "1111 3FHL J1653.8+3945 1.27e-10 1 / (cm2 s)\n", "1219 3FHL J1824.5-1351e 1.77e-10 1 / (cm2 s)\n", "1361 3FHL J2028.6+4110e 1.75e-10 1 / (cm2 s)\n" ] } ], "source": [ "# Find the brightest sources in the 100 to 200 GeV energy band\n", "for source in catalog_3fhl:\n", " flux = (\n", " source.spectral_model()\n", " .integral(100 * u.GeV, 200 * u.GeV)\n", " .to(\"cm-2 s-1\")\n", " )\n", " if flux > 1e-10 * u.Unit(\"cm-2 s-1\"):\n", " print(f\"{source.row_index:<7d} {source.name:20s} {flux:.3g}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercises\n", "\n", "- How many sources are in the 4FGL catalog? (try `len(catalog.table)`\n", "- What is the name of the source with row index 42?\n", "- What is the row index of the source with name \"4FGL J0536.1-1205\"?\n", "- What is the integral flux of \"4FGL J0536.1-1205\" in the energy range 100 GeV to 1 TeV according to the best-fit spectral model?\n", "- Which source in the HGPS catalog is closest to Galactic position `glon = 42 deg` and `glat = 0 deg`?" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "# Start coding here ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Next steps\n", "\n", "`~gammapy.catalog` is mostly independent from the rest of Gammapy.\n", "Typically you use it to compare new analyses against catalog results, e.g. overplot the spectral model, or compare the source position.\n", "\n", "You can also use `~gammapy.catalog` in your scripts to create initial source models for your analyses.\n", "This is very common for Fermi-LAT, to start with a catalog model.\n", "For TeV analysis, especially in crowded Galactic regions, using the HGPS, gamma-cat or 2HWC catalog in this way can also be useful.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.0" }, "nbsphinx": { "orphan": true } }, "nbformat": 4, "nbformat_minor": 4 }