Source code for rubin_sim.maf.batches.hourglass_batch

"""Run the hourglass metric.
"""

__all__ = ("hourglassPlots",)

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


[docs] def hourglassPlots(colmap=None, runName="opsim", nyears=10, extraSql=None, extraInfoLabel=None): """Run the hourglass metric, for each individual year. Parameters ---------- colmap : `dict`, optional A dictionary with a mapping of column names. run_name : `str`, optional The name of the simulated survey. nyears : `int`, optional How many years to attempt to make hourglass plots for. extraSql : `str`, optional Add an extra sql constraint before running metrics. extraInfoLabel : `str`, optional Add an extra piece of info_label before running metrics. Returns ------- metric_bundleDict : `dict` of `maf.MetricBundle` """ if colmap is None: colmap = col_map_dict() bundleList = [] sql = "" info_label = "" # Add additional sql constraint (such as wfdWhere) and info_label if (extraSql is not None) and (len(extraSql) > 0): sql = extraSql if extraInfoLabel is None: info_label = extraSql.replace("filter =", "").replace("filter=", "") info_label = info_label.replace('"', "").replace("'", "") if extraInfoLabel is not None: info_label = extraInfoLabel years = list(range(nyears + 1)) displayDict = {"group": "Hourglass"} for year in years[1:]: displayDict["subgroup"] = "Year %d" % year displayDict["caption"] = ( "Visualization of the filter usage of the telescope. " "The black wavy line indicates lunar phase; the red and blue " "solid lines indicate nautical and civil twilight." ) sqlconstraint = "night > %i and night <= %i" % ( 365.25 * (year - 1), 365.25 * year, ) if len(sql) > 0: sqlconstraint = "(%s) and (%s)" % (sqlconstraint, sql) md = info_label + " year %i-%i" % (year - 1, year) slicer = slicers.HourglassSlicer() metric = metrics.HourglassMetric( night_col=colmap["night"], mjd_col=colmap["mjd"], metric_name="Hourglass" ) bundle = mb.MetricBundle( metric, slicer, constraint=sqlconstraint, info_label=md, 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)