Source code for lsst.verify.output

#
# LSST Data Management System
#
# This product includes software developed by the
# LSST Project (http://www.lsst.org/).
#
# See COPYRIGHT file at the top of the source tree.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the LSST License Statement and
# the GNU General Public License along with this program.  If not,
# see <https://www.lsstcorp.org/LegalNotices/>.
#
from __future__ import absolute_import, division, print_function

__all__ = ['output_quantities']

from .job import Job
from .measurement import Measurement
from .naming import Name


[docs]def output_quantities(package_name, quantities, suffix=None, include_metrics=False, metrics_package='verify_metrics'): """Output measurements, as `astropy.units.Quantity` objects, from a pipeline task execution to a `lsst.verify`-formatted JSON file. Parameters ---------- package_name : `str` Name of the package producing measurements. This name is used two ways: 1. Make fully-qualified metric names from keys in the ``quantities`` dictionary. For example, if a ``quantities`` dict has a key-value pair ``{'PA1': 5 * u.mmag}`` and ``package_name='validate_drp'``, the fully-qualified metric name is ``'validate_drp.PA1'``. 2. As a filename prefix for the output JSON file. quantities : `dict` of `astropy.units.Quantity` values Dictionary of measurements as plain `astropy.units.Quantity` instances. Each key is the name of a metric. If metric names are not fully-specified (in ``package.metric`` format), the package name can be provided with the ``package_name`` argument. suffix : `str`, optional Additional suffix to add to the output JSON filename:: {package_name}_{suffix}.verify.json The suffix may be used to distinguish measurement output files from different tasks in the same package. include_metrics : `bool`, optional Metric and specification definitions are included in the JSON output if set to `True`. The metric and specification definitions are loaded from a metric package indicated by the ``metrics_package`` argument. Normally tasks do not need to include metric definitions if a post-processing step is used. Default: `False`. metrics_package : `str`, optional Name of the metrics package to obtain metrics from if ``include_metrics`` is `True`. Default is ``'verify_metrics'``. Returns ------- filename : `str` Filename where the JSON file was written. See also -------- lsst.verify.Job.write Notes ----- This function is designed for lightweight `lsst.verify` framework usage. Rather than maintaining `Job` and `Measurement` objects, a task can simply record metric measurements as `astropy.units.Quantity` objects. With `output_quantities`, the task can output these measurements in a standardized `lsst.verify` JSON format. Post-processing tools can load this data for local analysis, or submit it to the https://squash.lsst.codes dashboard service. Tasks that need to include `Blob`\ s, `Measurement.extras` or query `Metric` objects should create a `Job` instance and use `Job.write` instead. """ if include_metrics: job = Job.load_metrics_package(metrics_package, subset=package_name) else: job = Job() for name, quantity in quantities.items(): metric_name = Name(package=package_name, metric=name) measurement = Measurement(metric_name, quantity=quantity) job.measurements.insert(measurement) if suffix is not None: filename = '{package}_{suffix}.verify.json'.format( package=package_name, suffix=suffix) else: filename = '{package}.verify.json'.format(package=package_name) job.write(filename) return filename