Skip to content

Commit

Permalink
Improve filtering with tags
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonKrughoff committed May 3, 2018
1 parent dc2a5c6 commit 8493573
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 12 deletions.
20 changes: 13 additions & 7 deletions python/lsst/validate/drp/report_performance.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@
import json
import numpy as np

from lsst.verify import Job, SpecificationSet
from lsst.verify import Job, SpecificationSet, MetricSet
from .validate import get_specs_metrics


def run(validation_drp_report_filenames, output_file,
srd_level=None,
release_specs_package=None, release_level=None):
release_specs_package=None, release_level=None,
metrics_package='verify_metrics'):
"""
Parameters
---
Expand All @@ -47,21 +48,20 @@ def run(validation_drp_report_filenames, output_file,
---
Writes table of performance metrics to an RST file.
"""
input_objects = ingest_data(validation_drp_report_filenames)
input_objects = ingest_data(validation_drp_report_filenames, metrics_package)
input_table = objects_to_table(input_objects, level=srd_level)
if input_table is None:
msg = "Table from Job is None. Returning without writing table"
print(msg)
return

if release_specs_package is not None and release_level is not None:
release_specs = SpecificationSet.load_metrics_package(release_specs_package, subset='release')
add_release_spec(input_table, release_specs, release_level)

write_report(input_table, output_file)


def ingest_data(filenames):
def ingest_data(filenames, metrics_package):
"""Load JSON files into a list of lsst.validate.base measurement Jobs.
Parameters
Expand All @@ -81,6 +81,10 @@ def ingest_data(filenames):
data = json.load(fh)
job = Job.deserialize(**data)
filter_name = job.meta['filter_name']
metrics = MetricSet.load_metrics_package(metrics_package)
job.metrics.update(metrics)
specs = SpecificationSet.load_metrics_package(metrics_package)
job.specs.update(specs)
jobs[filter_name] = job

return jobs
Expand Down Expand Up @@ -157,8 +161,10 @@ def add_release_spec(data, release_specs, release_specs_level):
for row in data:

specs = release_specs.subset(required_meta={'filter_name':row['Filter'],
'instrument':row['Instrument']})
specs.update(release_specs.subset(required_meta={'instrument':row['Instrument']}))
'instrument':row['Instrument']},
spec_tags=['chromatic'])
specs.update(release_specs.subset(required_meta={'instrument':row['Instrument']},
spec_tags=['achromatic']))
value = None
for spec in specs:
if spec.metric == row['Metric'] and release_specs_level in spec.spec:
Expand Down
17 changes: 12 additions & 5 deletions python/lsst/validate/drp/validate.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class bcolors(object):
UNDERLINE = '\033[4m'


def load_json_output(filepath):
def load_json_output(filepath, **kwargs):
"""Read JSON from a file into a job object.
Currently just does a trivial de-serialization with no checking
Expand All @@ -81,7 +81,12 @@ def load_json_output(filepath):
with open(filepath, 'r') as infile:
json_data = json.load(infile)

return Job.deserialize(**json_data)
job = Job.deserialize(**json_data)
metrics = MetricSet.load_metrics_package(kwargs['metrics_package'])
job.metrics.update(metrics)
specs = SpecificationSet.load_metrics_package(kwargs['metrics_package'])
job.specs.update(specs)
return job


def get_filter_name_from_job(job):
Expand Down Expand Up @@ -139,7 +144,7 @@ def run(repo_or_json, metrics=None,
return

json_path = repo_or_json
job = load_json_output(json_path)
job = load_json_output(json_path, **kwargs)
filterName = get_filter_name_from_job(job)
jobs = {filterName: job}
else:
Expand Down Expand Up @@ -427,9 +432,11 @@ def plot_metrics(job, filterName, outputPrefix=''):
def get_specs_metrics(job):
# Get specs for this filter
subset = job.specs.subset(required_meta={'instrument':job.meta['instrument'],
'filter_name':job.meta['filter_name']})
'filter_name':job.meta['filter_name']},
spec_tags=['chromatic'])
# Get specs that don't depend on filter
subset.update(job.specs.subset(required_meta={'instrument':job.meta['instrument']}))
subset.update(job.specs.subset(required_meta={'instrument':job.meta['instrument']},
spec_tags=['achromatic']))
metrics = {}
specs = {}
for spec in subset:
Expand Down
4 changes: 4 additions & 0 deletions tests/test_report_from_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import tempfile
import unittest

import lsst.utils
from lsst.validate.drp import report_performance


Expand Down Expand Up @@ -73,3 +74,6 @@ def test_generate_report_from_json(self):
# Cleanup our temp directory
os.removedirs(tmp_dir)

if __name__ == "__main__":
lsst.utils.tests.init()
unittest.main()

0 comments on commit 8493573

Please sign in to comment.