.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "tutorials/starting/overview.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. or to run this example in your browser via Binder .. rst-class:: sphx-glr-example-title .. _sphx_glr_tutorials_starting_overview.py: Data structures =============== Introduction to basic data structures handling. Introduction ------------ This is a getting started tutorial for Gammapy. In this tutorial we will use the `Third Fermi-LAT Catalog of High-Energy Sources (3FHL) catalog `__, corresponding event list and images to learn how to work with some of the central Gammapy data structures. We will cover the following topics: - **Sky maps** - We will learn how to handle image based data with gammapy using a Fermi-LAT 3FHL example image. We will work with the following classes: - `~gammapy.maps.WcsNDMap` - `~astropy.coordinates.SkyCoord` - `~numpy.ndarray` - **Event lists** - We will learn how to handle event lists with Gammapy. Important for this are the following classes: - `~gammapy.data.EventList` - `~astropy.table.Table` - **Source catalogs** - We will show how to load source catalogs with Gammapy and explore the data using the following classes: - `~gammapy.catalog.SourceCatalog`, specifically `~gammapy.catalog.SourceCatalog3FHL` - `~astropy.table.Table` - **Spectral models and flux points** - We will pick an example source and show how to plot its spectral model and flux points. For this we will use the following classes: - `~gammapy.modeling.models.SpectralModel`, specifically the `~gammapy.modeling.models.PowerLaw2SpectralModel` - `~gammapy.estimators.FluxPoints` - `~astropy.table.Table` .. GENERATED FROM PYTHON SOURCE LINES 60-68 Setup ----- **Important**: to run this tutorial the environment variable ``GAMMAPY_DATA`` must be defined and point to the directory on your machine where the datasets needed are placed. To check whether your setup is correct you can execute the following cell: .. GENERATED FROM PYTHON SOURCE LINES 68-74 .. code-block:: Python import astropy.units as u from astropy.coordinates import SkyCoord import matplotlib.pyplot as plt .. GENERATED FROM PYTHON SOURCE LINES 75-77 Check setup ----------- .. GENERATED FROM PYTHON SOURCE LINES 77-85 .. code-block:: Python from gammapy.utils.check import check_tutorials_setup # %matplotlib inline check_tutorials_setup() .. rst-class:: sphx-glr-script-out .. code-block:: none System: python_executable : /Users/mregeard/Workspace/dev/code/gammapy/gammapy/.tox/build_docs/bin/python python_version : 3.11.10 machine : x86_64 system : Darwin Gammapy package: version : 1.3.dev1205+g00f44f94ac path : /Users/mregeard/Workspace/dev/code/gammapy/gammapy/.tox/build_docs/lib/python3.11/site-packages/gammapy Other packages: numpy : 1.26.4 scipy : 1.14.1 astropy : 5.2.2 regions : 0.10 click : 8.1.7 yaml : 6.0.2 IPython : 8.28.0 jupyterlab : not installed matplotlib : 3.9.2 pandas : not installed healpy : 1.17.3 iminuit : 2.30.1 sherpa : 4.16.1 naima : 0.10.0 emcee : 3.1.6 corner : 2.2.2 ray : 2.37.0 Gammapy environment variables: GAMMAPY_DATA : /Users/mregeard/Workspace/dev/code/gammapy/gammapy-data/ .. GENERATED FROM PYTHON SOURCE LINES 86-100 Maps ---- The `~gammapy.maps` package contains classes to work with sky images and cubes. In this section, we will use a simple 2D sky image and will learn how to: - Read sky images from FITS files - Smooth images - Plot images - Cutout parts from images .. GENERATED FROM PYTHON SOURCE LINES 100-106 .. code-block:: Python from gammapy.maps import Map gc_3fhl = Map.read("$GAMMAPY_DATA/fermi-3fhl-gc/fermi-3fhl-gc-counts.fits.gz") .. GENERATED FROM PYTHON SOURCE LINES 107-109 The image is a `~gammapy.maps.WcsNDMap` object: .. GENERATED FROM PYTHON SOURCE LINES 109-113 .. code-block:: Python print(gc_3fhl) .. rst-class:: sphx-glr-script-out .. code-block:: none WcsNDMap geom : WcsGeom axes : ['lon', 'lat'] shape : (400, 200) ndim : 2 unit : dtype : >i8 .. GENERATED FROM PYTHON SOURCE LINES 114-119 The shape of the image is 400 x 200 pixel and it is defined using a cartesian projection in galactic coordinates. The ``geom`` attribute is a `~gammapy.maps.WcsGeom` object: .. GENERATED FROM PYTHON SOURCE LINES 119-123 .. code-block:: Python print(gc_3fhl.geom) .. rst-class:: sphx-glr-script-out .. code-block:: none WcsGeom axes : ['lon', 'lat'] shape : (400, 200) ndim : 2 frame : galactic projection : CAR center : 0.0 deg, 0.0 deg width : 20.0 deg x 10.0 deg wcs ref : 0.0 deg, 0.0 deg .. GENERATED FROM PYTHON SOURCE LINES 124-126 Let’s take a closer look a the ``.data`` attribute: .. GENERATED FROM PYTHON SOURCE LINES 126-130 .. code-block:: Python print(gc_3fhl.data) .. rst-class:: sphx-glr-script-out .. code-block:: none [[0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] ... [0 0 0 ... 0 0 1] [0 0 0 ... 0 0 0] [0 0 0 ... 0 0 1]] .. GENERATED FROM PYTHON SOURCE LINES 131-134 That looks familiar! It just an *ordinary* 2 dimensional numpy array, which means you can apply any known numpy method to it: .. GENERATED FROM PYTHON SOURCE LINES 134-138 .. code-block:: Python print(f"Total number of counts in the image: {gc_3fhl.data.sum():.0f}") .. rst-class:: sphx-glr-script-out .. code-block:: none Total number of counts in the image: 32684 .. GENERATED FROM PYTHON SOURCE LINES 139-147 To show the image on the screen we can use the ``plot`` method. It basically calls `plt.imshow `__, passing the ``gc_3fhl.data`` attribute but in addition handles axis with world coordinates using `astropy.visualization.wcsaxes `__ and defines some defaults for nicer plots (e.g. the colormap ‘afmhot’): .. GENERATED FROM PYTHON SOURCE LINES 147-151 .. code-block:: Python gc_3fhl.plot(stretch="sqrt") plt.show() .. image-sg:: /tutorials/starting/images/sphx_glr_overview_001.png :alt: overview :srcset: /tutorials/starting/images/sphx_glr_overview_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 152-155 To make the structures in the image more visible we will smooth the data using a Gaussian kernel. .. GENERATED FROM PYTHON SOURCE LINES 155-161 .. code-block:: Python gc_3fhl_smoothed = gc_3fhl.smooth(kernel="gauss", width=0.2 * u.deg) gc_3fhl_smoothed.plot(stretch="sqrt") plt.show() .. image-sg:: /tutorials/starting/images/sphx_glr_overview_002.png :alt: overview :srcset: /tutorials/starting/images/sphx_glr_overview_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 162-168 The smoothed plot already looks much nicer, but still the image is rather large. As we are mostly interested in the inner part of the image, we will cut out a quadratic region of the size 9 deg x 9 deg around Vela. Therefore we use `~gammapy.maps.Map.cutout` to make a cutout map: .. GENERATED FROM PYTHON SOURCE LINES 168-176 .. code-block:: Python # define center and size of the cutout region center = SkyCoord(0, 0, unit="deg", frame="galactic") gc_3fhl_cutout = gc_3fhl_smoothed.cutout(center, 9 * u.deg) gc_3fhl_cutout.plot(stretch="sqrt") plt.show() .. image-sg:: /tutorials/starting/images/sphx_glr_overview_003.png :alt: overview :srcset: /tutorials/starting/images/sphx_glr_overview_003.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 177-187 For a more detailed introduction to `~gammapy.maps`, take a look a the :doc:`/tutorials/api/maps` notebook. Exercises ~~~~~~~~~ - Add a marker and circle at the position of ``Sgr A*`` (you can find examples in `astropy.visualization.wcsaxes `__). .. GENERATED FROM PYTHON SOURCE LINES 190-206 Event lists ----------- Almost any high level gamma-ray data analysis starts with the raw measured counts data, which is stored in event lists. In Gammapy event lists are represented by the `~gammapy.data.EventList` class. In this section we will learn how to: - Read event lists from FITS files - Access and work with the ``EventList`` attributes such as ``.table`` and ``.energy`` - Filter events lists using convenience methods Let’s start with the import from the `~gammapy.data` submodule: .. GENERATED FROM PYTHON SOURCE LINES 206-209 .. code-block:: Python from gammapy.data import EventList .. GENERATED FROM PYTHON SOURCE LINES 210-213 Very similar to the sky map class an event list can be created, by passing a filename to the `~gammapy.data.EventList.read()` method: .. GENERATED FROM PYTHON SOURCE LINES 213-217 .. code-block:: Python events_3fhl = EventList.read("$GAMMAPY_DATA/fermi-3fhl-gc/fermi-3fhl-gc-events.fits.gz") .. GENERATED FROM PYTHON SOURCE LINES 218-222 This time the actual data is stored as an `~astropy.table.Table ` object. It can be accessed with ``.table`` attribute: .. GENERATED FROM PYTHON SOURCE LINES 222-226 .. code-block:: Python print(events_3fhl.table) .. rst-class:: sphx-glr-script-out .. code-block:: none ENERGY RA DEC L B THETA PHI ... CONVERSION_TYPE LIVETIME DIFRSP0 DIFRSP1 DIFRSP2 DIFRSP3 DIFRSP4 MeV deg deg deg deg deg deg ... s --------- --------- ---------- ----------- ------------ --------- ---------- ... --------------- ------------------ ------- ------- ------- ------- ------- 12186.642 260.45935 -33.553337 353.36273 1.7538676 71.977325 125.50694 ... 0 238.57837238907814 0.0 0.0 0.0 0.0 0.0 25496.598 261.37506 -34.395004 353.09607 0.6520652 42.49406 278.49347 ... 1 176.16850754618645 0.0 0.0 0.0 0.0 0.0 15621.498 259.56973 -33.409416 353.05673 2.4450684 64.32412 234.22194 ... 1 9.392075657844543 0.0 0.0 0.0 0.0 0.0 12816.32 273.95883 -25.340391 6.45856 -4.0548873 43.292503 142.87392 ... 1 4.034786552190781 0.0 0.0 0.0 0.0 0.0 18988.387 260.8568 -36.355804 351.23734 -0.101912394 26.916113 290.39337 ... 0 131.60132896900177 0.0 0.0 0.0 0.0 0.0 11610.23 266.15518 -26.224436 2.1986027 1.6034819 35.77363 274.53387 ... 1 74.98110938072205 0.0 0.0 0.0 0.0 0.0 13960.802 271.44742 -29.615316 1.6267247 -4.1431155 25.917883 238.0368 ... 1 106.37336817383766 0.0 0.0 0.0 0.0 0.0 10477.372 266.3981 -28.96814 359.97003 -0.011748177 39.091587 275.5457 ... 0 214.62817406654358 0.0 0.0 0.0 0.0 0.0 13030.88 271.70428 -20.632627 9.59348 0.026241468 52.622505 161.3205 ... 0 94.68753063678741 0.0 0.0 0.0 0.0 0.0 11517.904 265.00894 -30.065119 358.40112 0.43904436 41.812317 276.02448 ... 0 123.15007302165031 0.0 0.0 0.0 0.0 0.0 19958.182 263.31854 -37.094856 351.71606 -2.153713 52.544586 121.415764 ... 0 17.113530546426773 0.0 0.0 0.0 0.0 0.0 23760.14 265.4694 -31.55994 357.34256 -0.68805 52.70319 248.87813 ... 1 225.2544113099575 0.0 0.0 0.0 0.0 0.0 32168.988 266.35397 -30.096745 358.98682 -0.56723064 64.830696 212.93645 ... 1 45.64776709675789 0.0 0.0 0.0 0.0 0.0 10165.9 266.15427 -19.829279 7.668937 4.9320326 51.85829 207.0177 ... 0 204.40402576327324 0.0 0.0 0.0 0.0 0.0 25277.545 269.68344 -24.668644 5.1628966 -0.34179303 42.77833 129.13857 ... 0 85.29761010408401 0.0 0.0 0.0 0.0 0.0 223713.7 261.1885 -31.794796 355.1619 2.239802 25.89418 284.8728 ... 0 166.99824661016464 0.0 0.0 0.0 0.0 0.0 15236.758 264.52255 -31.730831 356.7694 -0.09604572 51.646976 141.44576 ... 0 5.334206968545914 0.0 0.0 0.0 0.0 0.0 36314.297 264.79855 -31.116806 357.41434 0.032732587 48.567314 122.824875 ... 1 34.09180650115013 0.0 0.0 0.0 0.0 0.0 76511.96 269.20724 -26.198639 3.6230083 -0.7352153 54.72039 123.64289 ... 1 136.5931620001793 0.0 0.0 0.0 0.0 0.0 12432.439 266.09735 -32.71295 356.64053 -1.7461345 29.718775 225.30495 ... 0 57.99910423159599 0.0 0.0 0.0 0.0 0.0 14717.576 265.82196 -26.15737 2.0991938 1.8933698 50.693916 254.33784 ... 0 8.511121690273285 0.0 0.0 0.0 0.0 0.0 13233.963 269.8945 -23.260023 6.480208 0.19310227 45.217796 147.76228 ... 1 133.37614086270332 0.0 0.0 0.0 0.0 0.0 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 10941.6 265.99457 -28.765705 359.95795 0.3953491 53.88634 132.83992 ... 0 170.03486621379852 0.0 0.0 0.0 0.0 0.0 45478.75 271.7975 -22.14616 8.313876 -0.7867925 64.49326 140.47731 ... 1 164.58107435703278 0.0 0.0 0.0 0.0 0.0 13280.59 260.05453 -36.33665 350.88586 0.4406751 42.26522 219.64531 ... 1 22.002596974372864 0.0 0.0 0.0 0.0 0.0 74033.305 268.76508 -24.43612 4.944724 0.4974049 51.1174 225.20499 ... 0 65.83160126209259 0.0 0.0 0.0 0.0 0.0 47114.324 266.99127 -28.421051 0.70769924 -0.1726071 60.81272 212.27025 ... 1 77.02012866735458 0.0 0.0 0.0 0.0 0.0 14473.36 259.55792 -32.497227 353.79837 2.9774146 69.47437 136.79776 ... 0 13.922565162181854 0.0 0.0 0.0 0.0 0.0 20056.527 267.50372 -21.494694 6.888726 2.9924572 46.228405 129.99919 ... 1 115.29787397384644 0.0 0.0 0.0 0.0 0.0 10021.135 266.58603 -29.006046 0.023192262 -0.17183326 58.983257 139.42741 ... 0 115.27116513252258 0.0 0.0 0.0 0.0 0.0 11217.242 260.67258 -32.080307 354.67896 2.4407566 76.96116 214.30273 ... 1 64.04110872745514 0.0 0.0 0.0 0.0 0.0 18494.64 267.2745 -36.705185 353.7175 -4.6370916 38.942596 226.92189 ... 1 111.12007641792297 0.0 0.0 0.0 0.0 0.0 13333.997 265.57535 -31.519987 357.42413 -0.7436878 43.89681 230.49913 ... 1 23.238793969154358 0.0 0.0 0.0 0.0 0.0 13160.466 269.90778 -24.671898 5.2616706 -0.52015543 60.9269 226.45708 ... 0 1.9516496658325195 0.0 0.0 0.0 0.0 0.0 387834.72 270.3779 -21.56711 8.171749 0.64531475 56.755512 221.84715 ... 0 34.214694023132324 0.0 0.0 0.0 0.0 0.0 20559.74 268.5538 -26.345692 3.200638 -0.30328986 49.523575 233.67285 ... 0 103.17629969120026 0.0 0.0 0.0 0.0 0.0 27209.146 266.59344 -30.52607 358.72775 -0.96718174 62.1856 140.27434 ... 0 43.22334712743759 0.0 0.0 0.0 0.0 0.0 13911.061 269.30997 -27.239439 2.7684028 -1.3365301 65.15399 224.52101 ... 0 95.46356403827667 0.0 0.0 0.0 0.0 0.0 13226.425 265.16287 -27.344238 0.7796942 1.7680178 59.38332 126.7019 ... 1 3.733097553253174 0.0 0.0 0.0 0.0 0.0 17445.463 266.63342 -28.807201 0.21464892 -0.1039705 55.48627 135.59155 ... 1 80.52235281467438 0.0 0.0 0.0 0.0 0.0 13133.864 270.42474 -22.651058 7.251185 0.071358204 48.704975 134.73102 ... 1 117.88173341751099 0.0 0.0 0.0 0.0 0.0 32095.705 266.0002 -29.77206 359.1034 -0.13615231 45.013103 236.72498 ... 0 108.92976492643356 0.0 0.0 0.0 0.0 0.0 18465.783 266.39728 -29.105953 359.85202 -0.08294058 55.97552 135.87787 ... 0 70.72638684511185 0.0 0.0 0.0 0.0 0.0 14457.25 262.72217 -34.388405 353.7184 -0.26906812 45.683174 237.74162 ... 0 147.4274787902832 0.0 0.0 0.0 0.0 0.0 Length = 32843 rows .. GENERATED FROM PYTHON SOURCE LINES 227-230 You can do *len* over event_3fhl.table to find the total number of events. .. GENERATED FROM PYTHON SOURCE LINES 230-234 .. code-block:: Python print(len(events_3fhl.table)) .. rst-class:: sphx-glr-script-out .. code-block:: none 32843 .. GENERATED FROM PYTHON SOURCE LINES 235-237 And we can access any other attribute of the ``Table`` object as well: .. GENERATED FROM PYTHON SOURCE LINES 237-241 .. code-block:: Python print(events_3fhl.table.colnames) .. rst-class:: sphx-glr-script-out .. code-block:: none ['ENERGY', 'RA', 'DEC', 'L', 'B', 'THETA', 'PHI', 'ZENITH_ANGLE', 'EARTH_AZIMUTH_ANGLE', 'TIME', 'EVENT_ID', 'RUN_ID', 'RECON_VERSION', 'CALIB_VERSION', 'EVENT_CLASS', 'EVENT_TYPE', 'CONVERSION_TYPE', 'LIVETIME', 'DIFRSP0', 'DIFRSP1', 'DIFRSP2', 'DIFRSP3', 'DIFRSP4'] .. GENERATED FROM PYTHON SOURCE LINES 242-251 For convenience we can access the most important event parameters as properties on the ``EventList`` objects. The attributes will return corresponding Astropy objects to represent the data, such as `~astropy.units.Quantity`, `~astropy.coordinates.SkyCoord` or `~astropy.time.Time` objects: .. GENERATED FROM PYTHON SOURCE LINES 251-254 .. code-block:: Python print(events_3fhl.energy.to("GeV")) .. rst-class:: sphx-glr-script-out .. code-block:: none [12.186643 25.4966 15.621499 ... 32.095707 18.465784 14.457251] GeV .. GENERATED FROM PYTHON SOURCE LINES 255-258 .. code-block:: Python print(events_3fhl.galactic) # events_3fhl.radec .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 259-262 .. code-block:: Python print(events_3fhl.time) .. rst-class:: sphx-glr-script-out .. code-block:: none [54682.82946153 54682.89243456 54682.89709472 ... 57236.75267735 57233.37455141 57233.44802852] .. GENERATED FROM PYTHON SOURCE LINES 263-267 In addition ``EventList`` provides convenience methods to filter the event lists. One possible use case is to find the highest energy event within a radius of 0.5 deg around the vela position: .. GENERATED FROM PYTHON SOURCE LINES 267-281 .. code-block:: Python # select all events within a radius of 0.5 deg around center from gammapy.utils.regions import SphericalCircleSkyRegion region = SphericalCircleSkyRegion(center, radius=0.5 * u.deg) events_gc_3fhl = events_3fhl.select_region(region) # sort events by energy events_gc_3fhl.table.sort("ENERGY") # and show highest energy photon print("highest energy photon: ", events_gc_3fhl.energy[-1].to("GeV")) .. rst-class:: sphx-glr-script-out .. code-block:: none highest energy photon: 1917.85925 GeV .. GENERATED FROM PYTHON SOURCE LINES 282-288 Exercises ~~~~~~~~~ - Make a counts energy spectrum for the galactic center region, within a radius of 10 deg. .. GENERATED FROM PYTHON SOURCE LINES 291-306 Source catalogs --------------- Gammapy provides a convenient interface to access and work with catalog based data. In this section we will learn how to: - Load builtins catalogs from `~gammapy.catalog` - Sort and index the underlying Astropy tables - Access data from individual sources Let’s start with importing the 3FHL catalog object from the `~gammapy.catalog` submodule: .. GENERATED FROM PYTHON SOURCE LINES 306-309 .. code-block:: Python from gammapy.catalog import SourceCatalog3FHL .. GENERATED FROM PYTHON SOURCE LINES 310-313 First we initialize the Fermi-LAT 3FHL catalog and directly take a look at the ``.table`` attribute: .. GENERATED FROM PYTHON SOURCE LINES 313-318 .. code-block:: Python fermi_3fhl = SourceCatalog3FHL() print(fermi_3fhl.table) .. rst-class:: sphx-glr-script-out .. code-block:: none Source_Name RAJ2000 DEJ2000 GLON GLAT Conf_95_SemiMajor ... ASSOC2 ASSOC_PROB_BAY ASSOC_PROB_LR Redshift NuPeak_obs deg deg deg deg deg ... Hz ------------------ -------- -------- -------- -------- ----------------- ... -------------------------- -------------- ------------- -------- ------------------ 3FHL J0001.2-0748 0.3107 -7.8075 89.0094 -67.3118 0.0424 ... 0.9974 0.9721 -- 306196370000000.0 3FHL J0001.9-4155 0.4849 -41.9303 334.1216 -72.0697 0.1018 ... 0.9960 0.0000 -- 6309576500000000.0 3FHL J0002.1-6728 0.5283 -67.4825 310.0868 -48.9549 0.0357 ... 0.0000 0.9395 -- 4466832000000000.0 3FHL J0003.3-5248 0.8300 -52.8150 318.9245 -62.7936 0.0425 ... 0.9996 0.9716 -- 7.079464e+16 3FHL J0007.0+7303 1.7647 73.0560 119.6625 10.4666 0.0101 ... 1.0000 0.0000 -- -- 3FHL J0007.9+4711 1.9931 47.1920 115.3093 -15.0354 0.0196 ... 1.0000 0.9873 0.2800 2511884200000000.0 3FHL J0008.4-2339 2.1243 -23.6514 50.2908 -79.7021 0.0366 ... 0.9996 0.9673 0.1470 524807800000000.0 3FHL J0009.1+0628 2.2874 6.4814 104.4637 -54.8669 0.0385 ... 0.9993 0.9878 -- 663742400000000.0 3FHL J0009.4+5030 2.3504 50.5049 116.1257 -11.8105 0.0176 ... 1.0000 0.9698 -- 1412536400000000.0 3FHL J0009.7-4319 2.4450 -43.3195 327.7563 -71.7445 0.0496 ... 0.9985 0.9072 -- -- 3FHL J0013.0-3956 3.2523 -39.9381 332.3835 -74.9150 0.0517 ... 0.9998 0.9962 -- 1862089000000.0 3FHL J0013.8-1855 3.4684 -18.9169 74.5314 -78.0876 0.0485 ... 0.9995 0.9772 0.0950 5.260181e+16 3FHL J0014.0-5024 3.5038 -50.4003 317.4913 -65.6568 0.0597 ... 0.9998 0.8923 -- 8.413936e+16 3FHL J0014.7+5801 3.6951 58.0244 118.0788 -4.5015 0.0266 ... 1.0000 0.9778 -- 4.3651522e+16 3FHL J0014.9+6118 3.7366 61.3025 118.5645 -1.2594 0.0339 ... 0.9994 0.9996 -- 12971790000000.0 3FHL J0015.7+5551 3.9337 55.8649 117.9031 -6.6579 0.0335 ... 1.0000 0.9832 -- 6180169000000000.0 3FHL J0018.6+2946 4.6525 29.7821 114.4798 -32.5503 0.0312 ... 0.9985 0.9711 0.1000 5.9156075e+16 3FHL J0019.1-8151 4.7762 -81.8621 304.3273 -35.1783 0.0439 ... 0.9998 0.9878 -- 1393156900000000.0 3FHL J0021.4-2550 5.3693 -25.8471 42.0637 -83.1759 0.0428 ... 0.9996 0.9477 -- 337287200000000.0 3FHL J0021.8-5140 5.4639 -51.6755 313.7480 -64.8270 0.0321 ... 0.9997 0.9760 -- 4786304000000000.0 3FHL J0022.0+0006 5.5032 0.1058 107.1781 -61.8626 0.0350 ... 0.9999 0.9408 -- 1.584896e+18 3FHL J0022.1-1855 5.5260 -18.9170 82.0109 -79.3770 0.0266 ... 0.9987 0.8679 -- 1348963200000000.0 ... ... ... ... ... ... ... ... ... ... ... ... 3FHL J2334.8+1431 353.7183 14.5263 96.5607 -44.3897 0.0284 ... 0.9999 0.9674 -- 113501160000000.0 3FHL J2336.3-8427 354.0982 -84.4635 305.0370 -32.3548 0.0447 ... 0.0000 0.9733 -- -- 3FHL J2336.5-7620 354.1298 -76.3392 308.6093 -39.9520 0.0469 ... 0.9991 0.9921 -- 1.0 3FHL J2338.9+2123 354.7450 21.3966 101.2522 -38.4057 0.0284 ... 0.9998 0.9769 0.2910 524807800000000.0 3FHL J2339.2-7404 354.8159 -74.0796 309.5087 -42.1144 0.0332 ... 0.9999 0.9847 -- 1.56675e+16 3FHL J2339.5-0533 354.8927 -5.5577 81.3085 -62.4702 0.0448 ... 1.0000 0.0000 -- -- 3FHL J2340.8+8015 355.2244 80.2593 119.8457 17.8129 0.0167 ... 1.0000 0.9970 0.2740 3427676800000000.0 3FHL J2343.6+3439 355.9012 34.6513 107.4255 -26.1696 0.0286 ... 0.9998 0.9819 0.3660 1029200060000000.0 3FHL J2345.1-1554 356.2999 -15.9151 65.6780 -70.9813 0.0166 ... 0.9999 0.9978 0.6210 20535250000000.0 3FHL J2346.6+0705 356.6726 7.0844 95.9910 -52.3676 0.0232 ... 0.9999 0.9971 0.1720 568853050000000.0 3FHL J2347.0+5142 356.7688 51.7008 112.8895 -9.9116 0.0129 ... 1.0000 0.9985 0.0440 7079464000000000.0 3FHL J2347.9+5435 356.9805 54.5974 113.7400 -7.1368 0.0276 ... 0.0000 0.9766 -- 2.5118841e+16 3FHL J2347.9-1630 356.9978 -16.5106 65.5355 -71.8766 0.0288 ... 0.9994 0.9999 0.5760 9332549000000.0 3FHL J2350.5-3006 357.6354 -30.1070 16.7759 -76.3194 0.0491 ... 0.9998 0.9218 0.2237 3981075200000000.0 3FHL J2351.5-7559 357.8926 -75.9890 307.6546 -40.5855 0.0650 ... 0.0000 0.9625 -- -- 3FHL J2352.1+1753 358.0415 17.8865 103.5764 -42.7466 0.0838 ... 0.9926 0.0000 -- 1737799900000000.0 3FHL J2356.2+4035 359.0746 40.5985 111.7521 -21.0732 0.0298 ... 0.9998 0.9199 0.1310 6309576500000000.0 3FHL J2357.4-1717 359.3690 -17.2996 68.4009 -74.1285 0.0327 ... 0.9999 0.9631 -- 8.912525e+16 3FHL J2358.4-1808 359.6205 -18.1408 66.5520 -74.8501 0.0511 ... 0.0000 0.0000 -- -- 3FHL J2358.5+3829 359.6266 38.4963 111.6905 -23.2173 0.0584 ... 0.0000 0.9254 -- -- 3FHL J2359.1-3038 359.7760 -30.6397 12.7909 -78.0268 0.0231 ... 0.9999 0.9975 0.1650 2.818388e+17 3FHL J2359.3-2049 359.8293 -20.8256 58.0522 -76.5411 0.0722 ... 0.9894 0.9906 0.0960 4073799600000000.0 Length = 1556 rows .. GENERATED FROM PYTHON SOURCE LINES 319-325 This looks very familiar again. The data is just stored as an `~astropy.table.Table` object. We have all the methods and attributes of the ``Table`` object available. E.g. we can sort the underlying table by ``Signif_Avg`` to find the top 5 most significant sources: .. GENERATED FROM PYTHON SOURCE LINES 325-336 .. code-block:: Python # sort table by significance fermi_3fhl.table.sort("Signif_Avg") # invert the order to find the highest values and take the top 5 top_five_TS_3fhl = fermi_3fhl.table[::-1][:5] # print the top five significant sources with association and source class print(top_five_TS_3fhl[["Source_Name", "ASSOC1", "ASSOC2", "CLASS", "Signif_Avg"]]) .. rst-class:: sphx-glr-script-out .. code-block:: none Source_Name ASSOC1 ASSOC2 CLASS Signif_Avg ------------------ -------------------------- -------------------------- ------- ---------- 3FHL J0534.5+2201 Crab Nebula PWN 168.641 3FHL J1104.4+3812 Mkn 421 BLL 144.406 3FHL J0835.3-4510 PSR J0835-4510 Vela X field PSR 138.801 3FHL J0633.9+1746 PSR J0633+1746 PSR 99.734 3FHL J1555.7+1111 PG 1553+113 BLL 94.411 .. GENERATED FROM PYTHON SOURCE LINES 337-341 If you are interested in the data of an individual source you can access the information from catalog using the name of the source or any alias source name that is defined in the catalog: .. GENERATED FROM PYTHON SOURCE LINES 341-349 .. code-block:: Python mkn_421_3fhl = fermi_3fhl["3FHL J1104.4+3812"] # or use any alias source name that is defined in the catalog mkn_421_3fhl = fermi_3fhl["Mkn 421"] print(mkn_421_3fhl.data["Signif_Avg"]) .. rst-class:: sphx-glr-script-out .. code-block:: none 144.40611 .. GENERATED FROM PYTHON SOURCE LINES 350-364 Exercises ~~~~~~~~~ - Try to load the Fermi-LAT 2FHL catalog and check the total number of sources it contains. - Select all the sources from the 2FHL catalog which are contained in the Galactic Center region. The methods `~gammapy.maps.WcsGeom.contains()` and `~gammapy.catalog.SourceCatalog.positions` might be helpful for this. Add markers for all these sources and try to add labels with the source names. - Try to find the source class of the object at position ra=68.6803, dec=9.3331 .. GENERATED FROM PYTHON SOURCE LINES 367-380 Spectral models and flux points ------------------------------- In the previous section we learned how access basic data from individual sources in the catalog. Now we will go one step further and explore the full spectral information of sources. We will learn how to: - Plot spectral models - Compute integral and energy fluxes - Read and plot flux points As a first example we will start with the Crab Nebula: .. GENERATED FROM PYTHON SOURCE LINES 380-386 .. code-block:: Python crab_3fhl = fermi_3fhl["Crab Nebula"] crab_3fhl_spec = crab_3fhl.spectral_model() print(crab_3fhl_spec) .. rst-class:: sphx-glr-script-out .. code-block:: none PowerLawSpectralModel type name value unit error min max frozen link prior ---- --------- ---------- -------------- --------- --- --- ------ ---- ----- index 2.2202e+00 2.498e-02 nan nan False amplitude 1.7132e-10 cm-2 GeV-1 s-1 3.389e-12 nan nan False reference 2.2726e+01 GeV 0.000e+00 nan nan True .. GENERATED FROM PYTHON SOURCE LINES 387-394 The ``crab_3fhl_spec`` is an instance of the `~gammapy.modeling.models.PowerLaw2SpectralModel` model, with the parameter values and errors taken from the 3FHL catalog. Let’s plot the spectral model in the energy range between 10 GeV and 2000 GeV: .. GENERATED FROM PYTHON SOURCE LINES 394-399 .. code-block:: Python ax_crab_3fhl = crab_3fhl_spec.plot(energy_bounds=[10, 2000] * u.GeV, energy_power=0) plt.show() .. image-sg:: /tutorials/starting/images/sphx_glr_overview_004.png :alt: overview :srcset: /tutorials/starting/images/sphx_glr_overview_004.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 400-406 We assign the return axes object to variable called ``ax_crab_3fhl``, because we will re-use it later to plot the flux points on top. To compute the differential flux at 100 GeV we can simply call the model like normal Python function and convert to the desired units: .. GENERATED FROM PYTHON SOURCE LINES 406-410 .. code-block:: Python print(crab_3fhl_spec(100 * u.GeV).to("cm-2 s-1 GeV-1")) .. rst-class:: sphx-glr-script-out .. code-block:: none 6.3848912826152664e-12 1 / (cm2 GeV s) .. GENERATED FROM PYTHON SOURCE LINES 411-414 Next we can compute the integral flux of the Crab between 10 GeV and 2000 GeV: .. GENERATED FROM PYTHON SOURCE LINES 414-422 .. code-block:: Python print( crab_3fhl_spec.integral(energy_min=10 * u.GeV, energy_max=2000 * u.GeV).to( "cm-2 s-1" ) ) .. rst-class:: sphx-glr-script-out .. code-block:: none 8.67457342435522e-09 1 / (cm2 s) .. GENERATED FROM PYTHON SOURCE LINES 423-426 We can easily convince ourself, that it corresponds to the value given in the Fermi-LAT 3FHL catalog: .. GENERATED FROM PYTHON SOURCE LINES 426-430 .. code-block:: Python print(crab_3fhl.data["Flux"]) .. rst-class:: sphx-glr-script-out .. code-block:: none 8.658909145253801e-09 1 / (cm2 s) .. GENERATED FROM PYTHON SOURCE LINES 431-433 In addition we can compute the energy flux between 10 GeV and 2000 GeV: .. GENERATED FROM PYTHON SOURCE LINES 433-441 .. code-block:: Python print( crab_3fhl_spec.energy_flux(energy_min=10 * u.GeV, energy_max=2000 * u.GeV).to( "erg cm-2 s-1" ) ) .. rst-class:: sphx-glr-script-out .. code-block:: none 5.311489174710791e-10 erg / (cm2 s) .. GENERATED FROM PYTHON SOURCE LINES 442-444 Next we will access the flux points data of the Crab: .. GENERATED FROM PYTHON SOURCE LINES 444-448 .. code-block:: Python print(crab_3fhl.flux_points) .. rst-class:: sphx-glr-script-out .. code-block:: none FluxPoints ---------- geom : RegionGeom axes : ['lon', 'lat', 'energy'] shape : (1, 1, 5) quantities : ['norm', 'norm_errp', 'norm_errn', 'norm_ul', 'sqrt_ts', 'is_ul'] ref. model : pl n_sigma : 1 n_sigma_ul : 2 sqrt_ts_threshold_ul : 1 sed type init : flux .. GENERATED FROM PYTHON SOURCE LINES 449-456 If you want to learn more about the different flux point formats you can read the specification `here `__. No we can check again the underlying astropy data structure by accessing the ``.table`` attribute: .. GENERATED FROM PYTHON SOURCE LINES 456-460 .. code-block:: Python print(crab_3fhl.flux_points.to_table(sed_type="dnde", formatted=True)) .. rst-class:: sphx-glr-script-out .. code-block:: none e_ref e_min e_max dnde dnde_errp dnde_errn dnde_ul sqrt_ts is_ul GeV GeV GeV 1 / (cm2 GeV s) 1 / (cm2 GeV s) 1 / (cm2 GeV s) 1 / (cm2 GeV s) -------- ------- -------- --------------- --------------- --------------- --------------- ------- ----- 14.142 10.000 20.000 5.120e-10 1.321e-11 1.321e-11 nan 125.157 False 31.623 20.000 50.000 7.359e-11 2.842e-12 2.842e-12 nan 88.715 False 86.603 50.000 150.000 9.024e-12 5.367e-13 5.367e-13 nan 59.087 False 273.861 150.000 500.000 7.660e-13 8.707e-14 8.097e-14 nan 33.076 False 1000.000 500.000 2000.000 4.291e-14 1.086e-14 9.393e-15 nan 15.573 False .. GENERATED FROM PYTHON SOURCE LINES 461-465 Finally let’s combine spectral model and flux points in a single plot and scale with ``energy_power=2`` to obtain the spectral energy distribution: .. GENERATED FROM PYTHON SOURCE LINES 465-470 .. code-block:: Python ax = crab_3fhl_spec.plot(energy_bounds=[10, 2000] * u.GeV, sed_type="e2dnde") crab_3fhl.flux_points.plot(ax=ax, sed_type="e2dnde") plt.show() .. image-sg:: /tutorials/starting/images/sphx_glr_overview_005.png :alt: overview :srcset: /tutorials/starting/images/sphx_glr_overview_005.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 471-477 Exercises ~~~~~~~~~ - Plot the spectral model and flux points for PKS 2155-304 for the 3FGL and 2FHL catalogs. Try to plot the error of the model (aka “Butterfly”) as well. .. GENERATED FROM PYTHON SOURCE LINES 480-494 What next? ---------- This was a quick introduction to some of the high level classes in Astropy and Gammapy. - To learn more about those classes, go to the API docs (links are in the introduction at the top). - To learn more about other parts of Gammapy (e.g. Fermi-LAT and TeV data analysis), check out the other tutorial notebooks. - To see what’s available in Gammapy, browse the Gammapy docs or use the full-text search. - If you have any questions, ask on the mailing list. .. _sphx_glr_download_tutorials_starting_overview.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: binder-badge .. image:: images/binder_badge_logo.svg :target: https://mybinder.org/v2/gh/gammapy/gammapy-webpage/main?urlpath=lab/tree/notebooks/dev/tutorials/starting/overview.ipynb :alt: Launch binder :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: overview.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: overview.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: overview.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_