Source code for rubin_sim.maf.batches.openshutter_batch
"""Evaluate the open shutter fraction.
"""
__all__ = ("openshutterFractions",)
import rubin_sim.maf.metric_bundles as mb
import rubin_sim.maf.metrics as metrics
import rubin_sim.maf.slicers as slicers
from .col_map_dict import col_map_dict
from .common import standard_summary
[docs]
def openshutterFractions(colmap=None, runName="opsim", extraSql=None, extraInfoLabel=None):
"""Evaluate open shutter fraction over whole survey and per night.
Parameters
----------
colmap : `dict`, optional
A dictionary with a mapping of column names.
runName : `str`, optional
The name of the simulated survey.
extraSql : `str`, optional
Additional constraint to add to any sql constraints (e.g. 'night<365')
extraInfoLabel : `str`, optional
Additional info_label to add before any below (i.e. "WFD").
Returns
-------
metric_bundleDict : `dict` of `maf.MetricBundle`
"""
if colmap is None:
colmap = col_map_dict()
bundleList = []
group = "Open Shutter Fraction"
subgroup = "All visits"
if extraInfoLabel is not None:
subgroup = extraInfoLabel + " " + subgroup.lower()
elif extraSql is not None and extraInfoLabel is None:
subgroup = subgroup + " " + extraSql
# Open Shutter fraction over whole survey.
displayDict = {"group": group, "subgroup": subgroup, "order": 0}
displayDict["caption"] = "Total open shutter fraction over %s. " % subgroup.lower()
displayDict["caption"] += "Does not include downtime due to weather."
metric = metrics.OpenShutterFractionMetric(
slew_time_col=colmap["slewtime"],
exp_time_col=colmap["exptime"],
visit_time_col=colmap["visittime"],
)
slicer = slicers.UniSlicer()
bundle = mb.MetricBundle(metric, slicer, extraSql, info_label=subgroup, display_dict=displayDict)
bundleList.append(bundle)
# Count the number of nights on-sky in the survey.
displayDict["caption"] = "Number of nights on the sky during the survey, %s." % subgroup.lower()
metric = metrics.CountUniqueMetric(colmap["night"])
slicer = slicers.UniSlicer()
bundle = mb.MetricBundle(metric, slicer, extraSql, info_label=subgroup, display_dict=displayDict)
bundleList.append(bundle)
# Count the number of nights total in the survey
# (start to finish of observations).
displayDict["caption"] = "Number of nights from start to finish of survey, %s." % subgroup.lower()
metric = metrics.FullRangeMetric(colmap["night"])
slicer = slicers.UniSlicer()
bundle = mb.MetricBundle(metric, slicer, extraSql, info_label=subgroup, display_dict=displayDict)
bundleList.append(bundle)
# Open shutter fraction per night.
subgroup = "Per night"
if extraInfoLabel is not None:
subgroup = extraInfoLabel + " " + subgroup.lower()
elif extraSql is not None and extraInfoLabel is None:
subgroup = subgroup + " " + extraSql
displayDict = {"group": group, "subgroup": subgroup, "order": 0}
displayDict["caption"] = "Open shutter fraction %s." % (subgroup.lower())
displayDict["caption"] += (
" This compares on-sky image time against on-sky time + slews + filter "
"changes + readout, but does not include downtime due to weather."
)
metric = metrics.OpenShutterFractionMetric(
slew_time_col=colmap["slewtime"],
exp_time_col=colmap["exptime"],
visit_time_col=colmap["visittime"],
)
slicer = slicers.OneDSlicer(slice_col_name=colmap["night"], bin_size=1)
bundle = mb.MetricBundle(
metric,
slicer,
extraSql,
info_label=subgroup,
summary_metrics=standard_summary(),
display_dict=displayDict,
)
bundleList.append(bundle)
# Set the run_name for all bundles and return the bundleDict.
for b in bundleList:
b.set_run_name(runName)
return mb.make_bundles_dict_from_list(bundleList)