Source code for rubin_sim.maf.stackers.get_col_info
__all__ = ("ColInfo",)
from .base_stacker import BaseStacker
[docs]
class ColInfo:
"""Holds the units and source (stacker or database) locations
for data columns.
The stacker classes which will generate stacker columns are tracked here,
as well as some default units for common opsim columns.
See ColInfo.unit_dict for the unit information of database columns.
"""
def __init__(self):
self.default_data_source = None
self.default_unit = ""
self.unit_dict = {
"filter": "filter",
"seqnNum": "#",
"expMJD": "MJD",
"observationStartMJD": "MJD",
"observationStartLST": "deg",
"visitExposureTime": "s",
"slewTime": "s",
"slewDist": "rad",
"rotSkyPos": "deg",
"rotTelPos": "deg",
"rawSeeing": "arcsec",
"finSeeing": "arcsec",
"FWHMeff": "arcsec",
"FWHMgeom": "arcsec",
"seeingFwhmEff": "arcsec",
"seeingFwhmGeom": "arcsec",
"seeingFwhm500": "arcsec",
"seeing": "arcsec",
"airmass": "X",
"night": "days",
"moonRA": "rad",
"moonDec": "rad",
"moonAlt": "rad",
"dist2Moon": "rad",
"filtSkyBrightness": "mag/sq arcsec",
"skyBrightness": "mag/sq arcsec",
"fiveSigmaDepth": "mag",
"solarElong": "degrees",
}
# Go through the available stackers and add any units,
# and identify their source methods.
self.source_dict = {}
for stacker_class in BaseStacker.registry.values():
stacker = stacker_class()
for col, units in zip(stacker.cols_added, stacker.units):
self.source_dict[col] = stacker_class
self.unit_dict[col] = units
# Note that a 'unique' list of methods should be built from the
# resulting returned methods, at whatever point the derived data
# columns will be calculated.
[docs]
def get_units(self, col_name):
"""Return the appropriate units for col_name.
If no units have been defined for a given column,
return the default units ('').
Parameters
----------
col_name : `str`
The name of the column
Returns
-------
units : `str`
"""
if col_name is None or col_name not in self.unit_dict:
return self.default_unit
else:
return self.unit_dict[col_name]
[docs]
def get_data_source(self, col_name):
"""Identify the appropriate source for a given column.
For values which are calculated via a stacker, the returned
value is the stacker class.
For values which do not have a recorded source or are known to
be coming from the database, the result is
self.default_data_source (None), which will be assumed to be
queryable from the database.
Parameters
----------
col_name : `str`
The name of the column.
Returns
-------
data_source : `rubin_sim.maf.stacker` or None
"""
if col_name in self.source_dict:
return self.source_dict[col_name]
else:
return self.default_data_source