utils - Utilities¶

Introduction¶

gammapy.utils is a collection of utility functions that are used in many places or don’t fit in one of the other packages.

Since the various sub-modules of gammapy.utils are mostly unrelated, they are not imported into the top-level namespace. Here are some examples of how to import functionality from the gammapy.utils sub-modules:

from gammapy.utils.random import sample_sphere
sample_sphere(size=10)

from gammapy.utils import random
random.sample_sphere(size=10)


Time handling in Gammapy¶

Time format and scale¶

In Gammapy, astropy.time.Time objects are used to represent times:

from astropy.time import Time
Time(['1999-01-01T00:00:00.123456789', '2010-01-01T00:00:00'])


Note that Astropy chose format='isot' and scale='utc' as default and in Gammapy these are also the recommended format and time scale.

Warning

Actually what’s written here is not true. In CTA it hasn’t been decided if times will be in utc or tt (terrestrial time) format.

Here’s a reminder that this needs to be settled / updated: https://github.com/gammapy/gammapy/issues/284

When other time formats are needed it’s easy to convert, see the time format section and table in the Astropy docs.

E.g. sometimes in astronomy the modified Julian date mjd is used and for passing times to matplotlib for plotting the plot_date format should be used:

from astropy.time import Time
time = Time(['1999-01-01T00:00:00.123456789', '2010-01-01T00:00:00'])
print(time.mjd)
print(time.plot_date)

[51179.00000143 55197.        ]
[10592.00000143 14610.        ]


Converting to other time scales is also easy, see the time scale section, diagram and table in the Astropy docs.

E.g. when converting celestial (RA/DEC) to horizontal (ALT/AZ) coordinates, the sidereal time is needed. This is done automatically by astropy.coordinates.AltAz when the astropy.coordinates.AltAz.obstime is set with a Time object in any scale, no need for explicit time scale transformations in Gammapy (although if you do want to explicitly compute it, it’s easy, see here).

The Fermi-LAT time systems in a nutshell page gives a good, brief explanation of the differences between the relevant time scales UT1, UTC and TT.

Mission elapsed times (MET)¶

MET time references are times representing UTC seconds after a specific origin. Each experiment may have a different MET origin that should be included in the header of the corresponding data files. For more details see Fermi-LAT time systems in a nutshell.

It’s not clear yet how to best implement METs in Gammapy, it’s one of the tasks here: https://github.com/gammapy/gammapy/issues/284

For now, we use the gammapy.utils.time.time_ref_from_dict, gammapy.utils.time.time_relative_to_ref and gammapy.utils.time.absolute_time functions to convert MET floats to Time objects via the reference times stored in FITS headers.

Time differences¶

TODO: discuss when to use TimeDelta or Quantity or MET floats and where one needs to convert between those and what to watch out for.

Reference/API¶

gammapy.utils.units Module¶

Units and Quantity related helper functions

Functions¶

 Standardise unit. Read unit from a FITS image HDU.

gammapy.utils.coordinates Package¶

Astronomical coordinate calculation utility functions.

Functions¶

 cartesian(r, theta) Convert polar coordinates to cartesian coordinates. fov_to_sky(lon, lat, lon_pnt, lat_pnt) Transform field-of-view coordinates to sky coordinates. galactic(x, y, z[, obs_pos]) Compute galactic coordinates lon, lat and distance. motion_since_birth(v, age, theta, phi) Compute motion of a object with given velocity, direction and age. polar(x, y) Convert cartesian coordinates to polar coordinates. sky_to_fov(lon, lat, lon_pnt, lat_pnt) Transform sky coordinates to field-of-view coordinates. velocity_glon_glat(x, y, z, vx, vy, vz) Compute projected angular velocity in galactic coordinates.

Variables¶

 D_SUN_TO_GALACTIC_CENTER A Quantity represents a number with some associated unit.

gammapy.utils.integrate Module¶

Functions¶

 trapz_loglog(y, x[, axis]) Integrate using the composite trapezoidal rule in log-log space.

gammapy.utils.interpolation Module¶

Interpolation utilities

Functions¶

 interpolation_scale([scale]) Interpolation scaling. interpolate_profile(x, y[, interp_scale]) Helper function to interpolate one-dimensional profiles.

Classes¶

 ScaledRegularGridInterpolator(points, values) Thin wrapper around scipy.interpolate.RegularGridInterpolator.

gammapy.utils.table Module¶

Table helper utilities.

Functions¶

 hstack_columns(table, table_other) Stack the column data horizontally Standardise units for all columns in a table in a copy. Standardise units for all columns in a table in place. table_row_to_dict(row[, make_quantity]) Make one source data dict. table_from_row_data(rows, **kwargs) Helper function to create table objects from row data.

gammapy.utils.fits Module¶

Functions¶

 Create EarthLocation from FITS header dict.

Classes¶

 LazyFitsData([cache]) A lazy FITS data descriptor. HDULocation(hdu_class[, base_dir, file_dir, …]) HDU localisation, loading and Gammapy object mapper.

gammapy.utils.random Package¶

Random probability distribution helpers.

Functions¶

 draw(low, high, size, dist[, random_state]) Allows drawing of random numbers from any distribution. Get a numpy.random.RandomState instance. normalize(func, x_min, x_max) Normalize a 1D function over a given range. pdf(func) One-dimensional PDF of a given radial surface density. sample_powerlaw(x_min, x_max, gamma[, size, …]) Sample random values from a power law distribution. sample_sphere(size[, lon_range, lat_range, …]) Sample random points on the sphere. sample_sphere_distance([distance_min, …]) Sample random distances if the 3-dim space density is constant. sample_times(size, rate[, dead_time, …]) Make random times assuming a Poisson process.

Classes¶

 InverseCDFSampler(pdf[, axis, random_state]) Inverse CDF sampler.

gammapy.utils.regions Module¶

Regions helper functions.

Throughout Gammapy, we use regions to represent and work with regions.

We might add in other conveniences and features here, e.g. sky coord contains without a WCS (see “sky and pixel regions” in PIG 10), or some HEALPix integration.

TODO: before Gammapy v1.0, discuss what to do about gammapy.utils.regions. Options: keep as-is, hide from the docs, or to remove it completely (if the functionality is available in astropy-regions directly.

Functions¶

 Utility returning an array of regions to make orthogonal projections Make a list of concentric annulus regions. Create list of regions from compound regions. regions_to_compound_region(regions) Create compound region from list of regions, by creating the union.

gammapy.utils.scripts Module¶

Utils to create scripts and command-line tools

Functions¶

 get_images_paths([folder]) Generator yields a Path for each image used in notebook. get_notebooks_paths([folder]) Generator yields a Path for each notebook. read_yaml(filename[, logger]) Read YAML file. write_yaml(dictionary, filename[, logger, …]) Write YAML file. make_path(path) Expand environment variables on Path construction. Recursively merge two dictionaries.

gammapy.utils.testing Module¶

Utilities for testing

Functions¶

 Decorator to declare required dependencies for tests. requires_data([name]) Decorator to declare required data for tests. Matplotlib plotting test context manager. assert_quantity_allclose(actual, desired[, …]) Assert all-close for astropy.units.Quantity objects. assert_skycoord_allclose(actual, desired) Assert all-close for astropy.coordinates.SkyCoord objects. assert_time_allclose(actual, desired[, atol]) Assert all-close for astropy.time.Time objects.

Classes¶

 Checker Base class for checker classes in Gammapy.

gammapy.utils.time Module¶

Time related utility functions.

Functions¶

 time_ref_from_dict(meta[, format, scale]) Calculate the time reference from metadata. time_ref_to_dict(time[, scale]) TODO: document and test. time_relative_to_ref(time, meta) Convert a time using an existing reference. absolute_time(time_delta, meta) Convert a MET into human readable date and time.