# Licensed under a 3-clause BSD style license - see LICENSE.rst"""Table helper utilities."""importnumpyasnpfromastropy.tableimportTablefromastropy.unitsimportQuantityfrom.unitsimportstandardise_unit__all__=["hstack_columns","table_row_to_dict","table_standardise_units_copy","table_standardise_units_inplace",]
[docs]defhstack_columns(table,table_other):"""Stack the column data horizontally. Parameters ---------- table : `~astropy.table.Table` Input table. table_other : `~astropy.table.Table` Other input table. Returns ------- stacked : `~astropy.table.Table` Stacked table. """stacked=Table()forcolumnintable.colnames:data=np.hstack([table[column].data[0],table_other[column].data[0]])stacked[column]=data[np.newaxis,:]returnstacked
[docs]deftable_standardise_units_copy(table):"""Standardise units for all columns in a table in a copy. Calls `~gammapy.utils.units.standardise_unit`. Parameters ---------- table : `~astropy.table.Table` Input table (won't be modified). Returns ------- table : `~astropy.table.Table` Copy of the input table with standardised column units. """# Note: we could add an `inplace` option (or variant of this function)# See https://github.com/astropy/astropy/issues/6098table=Table(table)returntable_standardise_units_inplace(table)
[docs]deftable_standardise_units_inplace(table):"""Standardise units for all columns in a table in place."""forcolumnintable.columns.values():ifcolumn.unit:column.unit=standardise_unit(column.unit)returntable
[docs]deftable_row_to_dict(row,make_quantity=True):"""Make one source data dictionary. Parameters ---------- row : `~astropy.table.Row` Row. make_quantity : bool, optional Make quantity values for columns with units. Default is True. Returns ------- data : dict Row data. """data={}forname,colinrow.columns.items():val=row[name]ifmake_quantityandcol.unit:val=Quantity(val,unit=col.unit)data[name]=valreturndata