Source code for gammapy.data.obs_summary

# Licensed under a 3-clause BSD style license - see LICENSE.rst
import numpy as np
import astropy.units as u
from astropy.coordinates import SkyCoord

__all__ = ["ObservationTableSummary"]


[docs]class ObservationTableSummary: """Observation table summary. Class allowing to summarize informations contained in Observation index table (`~gammapy.data.ObservationTable`) Parameters ---------- obs_table : `~gammapy.data.ObservationTable` Observation index table target_pos : `~astropy.coordinates.SkyCoord` Target position """ def __init__(self, obs_table, target_pos=None): self.obs_table = obs_table self.target_pos = target_pos @property def offset(self): """Observation pointing ot target offset (`~astropy.coordinates.Angle`). """ t = self.obs_table pnt_pos = SkyCoord(t["RA_PNT"], t["DEC_PNT"], unit="deg") return pnt_pos.separation(self.target_pos) def __str__(self): ss = "*** Observation summary ***\n" ss += f"Target position: {self.target_pos}\n" ss += "Number of observations: {}\n".format(len(self.obs_table)) livetime = u.Quantity(sum(self.obs_table["LIVETIME"]), "second") ss += "Livetime: {:.2f}\n".format(livetime.to("hour")) zenith = self.obs_table["ZEN_PNT"] ss += "Zenith angle: (mean={:.2f}, std={:.2f})\n".format( zenith.mean(), zenith.std() ) offset = self.offset ss += "Offset: (mean={:.2f}, std={:.2f})\n".format(offset.mean(), offset.std()) return ss
[docs] def plot_zenith_distribution(self, ax=None, bins=None): """Construct the zenith distribution of the observations. Parameters ---------- ax : `~matplotlib.axes.Axes` or None, optional. The `~matplotlib.axes.Axes` object to be drawn on. If None, uses the current `~matplotlib.axes.Axes`. bins : integer or array_like, optional Binning specification, passed to `matplotlib.pyplot.hist`. By default, 30 bins from 0 deg to max zenith + 5 deg is used. Returns ------- ax : `~matplotlib.axes.Axes` Axis """ import matplotlib.pyplot as plt ax = plt.gca() if ax is None else ax zenith = self.obs_table["ZEN_PNT"] if bins is None: bins = np.linspace(0, zenith.max() + 5, 30) ax.hist(zenith, bins=bins) ax.set_title("Zenith distribution") ax.set_xlabel("Zenith (Deg)") ax.set_ylabel("#Entries") return ax
[docs] def plot_offset_distribution(self, ax=None, bins=None): """Construct the offset distribution of the observations. Parameters ---------- ax : `~matplotlib.axes.Axes` or None, optional. The `~matplotlib.axes.Axes` object to be drawn on. If None, uses the current `~matplotlib.axes.Axes`. bins : integer or array_like, optional Binning specification, passed to `matplotlib.pyplot.hist`. By default, 10 bins from 0 deg to max offset + 0.5 deg is used. Returns ------- ax : `~matplotlib.axes.Axes` Axis """ import matplotlib.pyplot as plt ax = plt.gca() if ax is None else ax offset = self.offset if bins is None: bins = np.linspace(0, offset.degree.max() + 0.5, 10) ax.hist(offset.degree, bins=bins) ax.set_title("Offset distribution") ax.set_xlabel("Offset (Deg)") ax.set_ylabel("#Entries") return ax