def from_table(cls, table, sed_type=None, reference_model=None): """Create flux points from table Parameters ---------- table : `~astropy.table.Table` Table sed_type : {"dnde", "flux", "eflux", "e2dnde", "likelihood"} Sed type reference_model : `SpectralModel` Reference spectral model Returns ------- flux_points : `FluxPoints` Flux points """ table = table_standardise_units_copy(table) if sed_type is None: sed_type = table.meta.get("SED_TYPE", None) if sed_type is None: sed_type = cls._guess_sed_type(table) if sed_type is None: raise ValueError("Specifying the sed type is required") cls._validate_data(data=table, sed_type=sed_type) if sed_type in ["dnde", "eflux", "e2dnde", "flux"]: if reference_model is None: log.warning( "No reference model set for FluxPoints. Assuming point source with E^-2 spectrum." ) reference_model = PowerLawSpectralModel() data = cls._convert_flux_columns( table=table, reference_model=reference_model, sed_type=sed_type ) elif sed_type == "likelihood": data = cls._convert_loglike_columns(table) reference_model = TemplateSpectralModel( energy=table["e_ref"].quantity, values=table["ref_dnde"].quantity ) else: raise ValueError(f"Not a valid SED type {sed_type}") # We add the remaining maps for key in OPTIONAL_QUANTITIES_COMMON: if key in table.colnames: data[key] = table[key] data.meta["SED_TYPE"] = "likelihood" return cls(data=data, reference_spectral_model=reference_model)
def test_table_standardise_units(): table = Table([ Column([1], "a", unit="ph cm-2 s-1"), Column([1], "b", unit="ct cm-2 s-1"), Column([1], "c", unit="cm-2 s-1"), Column([1], "d"), ]) table = table_standardise_units_copy(table) assert table["a"].unit == "cm-2 s-1" assert table["b"].unit == "cm-2 s-1" assert table["c"].unit == "cm-2 s-1" assert table["d"].unit is None
def from_table(cls, table, sed_type=None, format="gadf-sed", reference_model=None, gti=None): """Create flux points from a table. The table column names must be consistent with the sed_type Parameters ---------- table : `~astropy.table.Table` Table sed_type : {"dnde", "flux", "eflux", "e2dnde", "likelihood"} Sed type format : {"gadf-sed", "lightcurve", "profile"} Table format. reference_model : `SpectralModel` Reference spectral model gti : `GTI` Good time intervals meta : dict Meta data. Returns ------- flux_points : `FluxPoints` Flux points """ table = table_standardise_units_copy(table) if sed_type is None: sed_type = table.meta.get("SED_TYPE", None) if sed_type is None: sed_type = cls._guess_sed_type(table.colnames) if sed_type is None: raise ValueError("Specifying the sed type is required") if sed_type == "likelihood": table = cls._convert_loglike_columns(table) if reference_model is None: reference_model = TemplateSpectralModel( energy=flat_if_equal(table["e_ref"].quantity), values=flat_if_equal(table["ref_dnde"].quantity), ) maps = Maps() table.meta.setdefault("SED_TYPE", sed_type) for name in cls.all_quantities(sed_type=sed_type): if name in table.colnames: maps[name] = RegionNDMap.from_table(table=table, colname=name, format=format) meta = cls._get_meta_gadf(table) return cls.from_maps( maps=maps, reference_model=reference_model, meta=meta, sed_type=sed_type, gti=gti, )
def __init__(self, table): self.table = table_standardise_units_copy(table) # validate that the table is a valid representation # of the given flux point sed type self._validate_table(self.table, table.meta["SED_TYPE"])