Example #1
0
    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)
Example #2
0
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
Example #3
0
    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,
        )
Example #4
0
 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"])