0.20 (May 12th, 2022)#


  • Released May 12th, 2022

  • 15 contributors

  • 184 pull requests (not all listed below)

What’s new?#

Support for energy dependent ON region spectral extraction has been added

  • The RADMAX IRF is now fully supported.

  • A specific WobbleRegionFinder has been introduced to find OFF regions at symmetric positions from the center of the field-of-view.

  • A tutorial demonstrating how to perform a point-like analysis is provided. It uses a set of two test observations provided by the MAGIC collaboration to perform testing and validation of the method. We thank the Magic collaboration for their contribution.

New theme and re-structuration of the documentation

  • The documentation has been completely restructured. The PyData Sphinx theme is now applied.

  • An automated testing of docstring example code has been added. All docstrings have been fixed.

Package structure and dependencies#

This new release provides a release candidate for v1.0. It serves as the basis for the first long term stable (LTS) release of Gammapy. To ensure long term support, the minimal astropy version is 5.0, and the minimal python version is 3.8.

Because they are necessary to the vast majority of Gammapy use cases, iminuit and matplotlib are now required dependencies. Matplotlib >=3.5 is now supported as well as regions 0.6.

Bug fixes and improvements#


  • To correctly track observation information for simulations, Observation.create() now takes an observatory_location argument (default is None).

  • an EventList.write() convenience method has been added.

  • the observation table is now optional on the DataStore as per g.a.d.f.

  • a list of required irfs can be passed to DataStore.get_observations(). Predefined shortcuts are provided for full-containment (default) and point-like.


  • A method to resample the energy axis of a Dataset based on counts statistics criteria (e.g. minimum number of counts or counts_off): gammapy.estimators.utils.resample_energy_axis()`


  • The behaviour of the bkg-peak method of the SafeMaskMaker has been changed to avoid removing the first energy bin if the maximum number of background counts is in the first energy bin.


  • A new is_norm property has been added to the Parameter object. It is used to determine the parameter giving the flux normalization and solves a bug with the flux point estimation using a CompoundModel.

  • Fit.covariance() now correctly handles shared (linked) parameters.

  • FitResult now contains a copy of the Models after the fit. Its parameters attribute is not modified by further manipulation of the initial model.


  • DatasetsMaker is now internally used and can be configured in the yaml file.


  • The 4FGL data release 3 has been added.


  • Fabio Acero

  • Arnau Aguasca

  • Tyler Cahill

  • Alisha Chromey

  • Axel Donath

  • Luca Giunti

  • Cosimo Nigro

  • Maximilian Nöthe

  • Laura Olivera-Nieto

  • Dimitri Papadopoulos

  • Fabio Pintore

  • Quentin Rémy

  • Jose Enrique Ruiz

  • Atreyee Sinha

  • Régis Terrier

Pull Requests#

This list is incomplete. Small improvements and bug fixes are not listed here.

  • [#3941] Introduce matplotlib as required dependency (Régis Terrier)

  • [#3936] Introduce iminuit as required dependency (Axel Donath)

  • [#3933] Add support for regions v0.6 (Axel Donath)

  • [#3918] Improve fit results (Luca Giunti)

  • [#3915] Fix evaluate_containment calculation in class PSFKing(ParametricPSF) (Alisha Chromey)

  • [#3906] Require astropy v>=5.0 (Axel Donath)

  • [#3905] Use .is_norm property in FluxEstimator (Axel Donath)

  • [#3904] Fix bug on MC_ID when sampling IRF background events (Fabio Pintore)

  • [#3898] Add Map.resample method (Quentin Rémy)

  • [#3895] Add MapAxes .__eq__, .__neq__, and .copy() (Quentin Rémy)

  • [#3892] Allow for regular reflected region analysis with fixed rad_max IRFs (Régis Terrier)

  • [#3887] Implement __eq__ for DL3 IRFs (Atreyee Sinha)

  • [#3876] Add temporal model on flux point dataset (Atreyee Sinha)

  • [#3874] Allow MapDatasetOff in Datasets serialization and avoid read_lazy (Quentin Rémy)

  • [#3873] Modify SafeMaskMaker to ignore data only below the background peak (Atreyee Sinha)

  • [#3860] Introduce is_norm parameter property (Axel Donath)

  • [#3856] Make obs_table optional on DataStore (Régis Terrier)

  • [#3846] Allows DataStoreMaker to be used with IRFs not following CALDB structure (Quentin Rémy)

  • [#3842] Update SourceCatalog4FGL class to support changes in data release 3 (Quentin Rémy)

  • [#3837] Allow nearest neighbor interpolation with scalar data (Axel Donath)

  • [#3833] Automate generation of codemeta.json and .zenodo.json files (Jose Enrique Ruiz)

  • [#3817] Improve documentation theme (Jose Enrique Ruiz)

  • [#3810] Fix doc strings in estimators (Atreyee Sinha)

  • [#3806] Improve documentation for the DatasetsMaker (Quentin Rémy)

  • [#3804] Event wise rad max (Maximilian Nöthe)

  • [#3802] Use DatasetsMaker in Analysis class (Quentin Rémy)

  • [#3797] Refactor pointing information handling and Observation.create (Maximilian Nöthe)

  • [#3796] Helper function to rebin map axis (Luca Giunti)

  • [#3783] Speed docs building process (Jose Enrique Ruiz)

  • [#3777] Validate EnergyDispersion2D units (Fabio Pintore)

  • [#3761] Execute notebooks in parallel (Maximilian Nöthe)

  • [#3760] Fix issues reported by pyflakes and add pyflakes step to ci (Maximilian Nöthe)

  • [#3752] Human readable energy units string formatting for plot_interactive & plot_grid (Fabio Acero)

  • [#3748] Fix doc strings for makers and datasets (Atreyee Sinha)

  • [#3740] Common format axis labels (Fabio Pintore)

  • [#3733] Add new RegionsFinder that uses a fixed number of regions symmetrically distributed on the circle (Cosimo Nigro)

  • [#3728] Add missing required GADF headers in IRF classes (Maximilian Nöthe)

  • [#3722] Switch documentation to PyData Sphinx Theme (Jose Enrique Ruiz)

  • [#3720] Add convenience method to write EventLists to file (Laura Olivera Nieto)

  • [#3713] Fix matplotlib 3.5+ incompatibility with WcsNDMap.plot() (Tyler Cahill)

  • [#3712] Added a notebook tutorial showing an energy-dependent spectrum extraction (Cosimo Nigro)

  • [#3699] Use mamba in CI jobs (Maximilian Nöthe)

  • [#3684] Started to implement the energy-dependent 1D spectrum extraction (Cosimo Nigro)

  • [#3669] Add GeneralizedGaussianTemporalModel (Arnau Aguasca)

  • [#3535] Add TemplateNDSpectralModel (Quentin Rémy)