def from_table(cls, table): """Create from `~astropy.table.Table`. Parameters ---------- table : `~astropy.table.Table` Table with effective area. Returns ------- aeff : `EffectiveArea2D` Effective area """ if "ENERG_LO" in table.colnames: column_prefixes = ["ENERG", "THETA", "MIGRA"] elif "ETRUE_LO" in table.colnames: column_prefixes = ["ETRUE", "THETA", "MIGRA"] else: raise ValueError( 'Invalid column names. Need "ENERG_LO/ENERG_HI" or "ETRUE_LO/ETRUE_HI"' ) axes = MapAxes.from_table(table, column_prefixes=column_prefixes, format="gadf-dl3") data = table["MATRIX"].quantity[0].transpose() return cls( energy_axis_true=axes["energy_true"], offset_axis=axes["offset"], migra_axis=axes["migra"], data=data, )
def from_table(cls, table, format="gadf-dl3"): """Read from `~astropy.table.Table`. Parameters ---------- table : `~astropy.table.Table` Table with irf data format : {"gadf-dl3"} Format specification Returns ------- irf : `IRF` IRF class. """ axes = MapAxes.from_table(table=table, format=format)[cls.required_axes] column_name = IRF_DL3_HDU_SPECIFICATION[cls.tag]["column_name"] data = table[column_name].quantity[0].transpose() return cls( axes=axes, data=data.value, meta=table.meta, unit=data.unit, is_pointlike=gadf_is_pointlike(table.meta), fov_alignment=table.meta.get("FOVALIGN", "RADEC"), )
def from_table(cls, table): """Create from `~astropy.table.Table` in ARF format. Data format specification: :ref:`gadf:ogip-arf` """ axes = MapAxes.from_table(table, format="ogip-arf")[cls.required_axes] data = table["SPECRESP"].quantity return cls(axes=axes, data=data.value, unit=data.unit)
def from_table(cls, table, format="gadf-dl3"): """Read from `~astropy.table.Table`. Parameters ---------- table : `~astropy.table.Table` Table with background data format : {"gadf-dl3"} Format specification Returns ------- bkg : `Background2D` or `Background2D` Background IRF class. """ # TODO: some of the existing background files have missing HDUCLAS keywords # which are required to define the correct Gammapy axis names if "HDUCLAS2" not in table.meta: log.warning("Missing 'HDUCLAS2' keyword assuming 'BKG'") table = table.copy() table.meta["HDUCLAS2"] = "BKG" axes = MapAxes.from_table(table, format=format)[cls.required_axes] # TODO: spec says key should be "BKG", but there are files around # (e.g. CTA 1DC) that use "BGD". For now we support both if "BKG" in table.colnames: bkg_name = "BKG" elif "BGD" in table.colnames: bkg_name = "BGD" else: raise ValueError("Invalid column names. Need 'BKG' or 'BGD'.") data = table[bkg_name].quantity[0].T if data.unit == "" or isinstance(data.unit, u.UnrecognizedUnit): data = u.Quantity(data.value, "s-1 MeV-1 sr-1", copy=False) log.warning( "Invalid unit found in background table! Assuming (s-1 MeV-1 sr-1)" ) # TODO: The present HESS and CTA background fits files # have a reverse order (lon, lat, E) than recommended in GADF(E, lat, lon) # For now, we support both. if axes.shape == axes.shape[::-1]: log.error("Ambiguous axes order in Background fits files!") if np.shape(data) != axes.shape: log.debug("Transposing background table on read") data = data.transpose() return cls( axes=axes, data=data.value, meta=table.meta, unit=data.unit, is_pointlike=gadf_is_pointlike(table.meta), fov_alignment=table.meta.get("FOVALIGN", "RADEC"), )
def from_table(cls, table): """Read from `~astropy.table.Table`.""" axes = MapAxes.from_table(table=table, column_prefixes=["ENERG", "THETA"], format="gadf-dl3") return cls( energy_axis_true=axes["energy_true"], offset_axis=axes["offset"], data=table["EFFAREA"].quantity[0].transpose(), meta=table.meta, )
def from_table(cls, table, format="gadf-dl3"): """Read from `~astropy.table.Table`. Parameters ---------- table : `~astropy.table.Table` Table with background data format : {"gadf-dl3"} Format specification Returns ------- bkg : `Background2D` or `Background2D` Background IRF class. """ axes = MapAxes.from_table(table, format=format)[cls.required_axes] # Spec says key should be "BKG", but there are files around # (e.g. CTA 1DC) that use "BGD". For now we support both if "BKG" in table.colnames: bkg_name = "BKG" elif "BGD" in table.colnames: bkg_name = "BGD" else: raise ValueError('Invalid column names. Need "BKG" or "BGD".') data = table[bkg_name].quantity[0].T if data.unit == "" or isinstance(data.unit, u.UnrecognizedUnit): data = u.Quantity(data.value, "s-1 MeV-1 sr-1", copy=False) log.warning( "Invalid unit found in background table! Assuming (s-1 MeV-1 sr-1)" ) # TODO: The present HESS and CTA backgroundfits files # have a reverse order (lon, lat, E) than recommened in GADF(E, lat, lon) # For now, we suport both. if axes.shape == axes.shape[::-1]: log.error("Ambiguous axes order in Background fits files!") if np.shape(data) != axes.shape: log.debug("Transposing background table on read") data = data.transpose() return cls( axes=axes, data=data.value, meta=table.meta, unit=data.unit )
def from_table(cls, table): """Read from `~astropy.table.Table`.""" # Spec says key should be "BKG", but there are files around # (e.g. CTA 1DC) that use "BGD". For now we support both if "BKG" in table.colnames: bkg_name = "BKG" elif "BGD" in table.colnames: bkg_name = "BGD" else: raise ValueError('Invalid column names. Need "BKG" or "BGD".') data_unit = table[bkg_name].unit if data_unit is not None: data_unit = u.Unit(table[bkg_name].unit, parse_strict="silent") if isinstance(data_unit, u.UnrecognizedUnit) or (data_unit is None): data_unit = u.Unit("s-1 MeV-1 sr-1") log.warning( "Invalid unit found in background table! Assuming (s-1 MeV-1 sr-1)" ) axes = MapAxes.from_table( table, column_prefixes=["ENERG", "DETX", "DETY"], format="gadf-dl3" ) # TODO: The present HESS and CTA backgroundfits files # have a reverse order (lon, lat, E) than recommened in GADF(E, lat, lon) # For now, we suport both. data = table[bkg_name].data[0].T * data_unit if axes.shape == axes.shape[::-1]: log.error("Ambiguous axes order in Background fits files!") if np.shape(data) != axes.shape: log.debug("Transposing background table on read") data = data.transpose() return cls( energy_axis=axes["energy"], fov_lon_axis=axes["fov_lon"], fov_lat_axis=axes["fov_lat"], data=data, meta=table.meta, )
def from_table(cls, table): """Create `PSF3D` from `~astropy.table.Table`. Parameters ---------- table : `~astropy.table.Table` Table Table-PSF info. """ axes = MapAxes.from_table(table=table, column_prefixes=["ENERG", "THETA", "RAD"], format="gadf-dl3") data = table["RPSF"].quantity[0].transpose() return cls(energy_axis_true=axes["energy_true"], offset_axis=axes["offset"], rad_axis=axes["rad"], data=data, meta=table.meta)
def from_table(cls, table, format="gadf-dl3"): """Create parametric psf from `~astropy.table.Table`. Parameters ---------- table : `~astropy.table.Table` Table info. Returns ------- psf : `~ParametricPSF` PSF class """ from gammapy.irf.io import IRF_DL3_HDU_SPECIFICATION axes = MapAxes.from_table(table, format=format)[cls.required_axes] dtype = { "names": cls.required_parameters, "formats": len(cls.required_parameters) * (np.float32,) } data = np.empty(axes.shape, dtype=dtype) unit = {} spec = IRF_DL3_HDU_SPECIFICATION[cls.tag]["column_name"] for name in cls.required_parameters: column = table[spec[name]] values = column.data[0].transpose() # TODO: this fixes some files where sigma is written as zero if "sigma" in name: values[values == 0] = 1. data[name] = values.reshape(axes.shape) unit[name] = column.unit or "" return cls( axes=axes, data=data, meta=table.meta.copy(), unit=unit )
def from_table(cls, table, format="gadf-dl3"): """Read from `~astropy.table.Table`. Parameters ---------- table : `~astropy.table.Table` Table with irf data format : {"gadf-dl3"} Format specification Returns ------- irf : `IRF` IRF class. """ axes = MapAxes.from_table(table=table, format=format)[cls.required_axes] column_name = IRF_DL3_HDU_SPECIFICATION[cls.tag]["column_name"] data = table[column_name].quantity[0].transpose() if "HDUCLAS3" in table.meta and table.meta["HDUCLAS3"] == "POINT-LIKE": table.meta["is_pointlike"] = True return cls(axes=axes, data=data.value, meta=table.meta, unit=data.unit)