Source code for rubin_sim.maf.metrics.cumulative_metric

__all__ = ("CumulativeMetric",)

import numpy as np

from .base_metric import BaseMetric


[docs] class CumulativeMetric(BaseMetric): """For plotting up the cumulative number of observations. Expected to be used with a UniSlicer or UserPointSlicer with one point. Parameters ---------- interp_points : `np.array`, (N,) or None The points to interpolate the cumulative number of observations to. If None, then the range of the data is used with a stepsize of 1. """ def __init__( self, metric_name="Cumulative", time_col="observationStartMJD", night_col="night", interp_points=None, **kwargs, ): super().__init__(col=[time_col, night_col], metric_name=metric_name, metric_dtype="object", **kwargs) self.time_col = time_col self.night_col = night_col self.interp_points = interp_points self.plot_dict = {"xlabel": "MJD (days)", "ylabel": "N obs"}
[docs] def run(self, data_slice, slice_point=None): data_slice.sort(order=self.time_col) if self.interp_points is None: interp_points = np.arange( data_slice[self.night_col].min(), data_slice[self.night_col].max() + 1, 1, ) else: interp_points = self.interp_points cumulative_number = np.arange(data_slice.size) + 1 yresult = np.interp(interp_points, data_slice[self.night_col], cumulative_number) xresult = interp_points return {"x": xresult, "y": yresult, "plot_dict": self.plot_dict}