From 6b269444c071cf98b4cd02a4f61c7149d191d9b0 Mon Sep 17 00:00:00 2001 From: Eric Neilsen Date: Fri, 5 Apr 2024 07:07:38 -0700 Subject: [PATCH] move skyproj plotter tests into the same file as other plotter tests --- tests/maf/test_plotters.py | 70 +++++++++++++++++++++++++- tests/maf/test_skyproj_plotters.py | 81 ------------------------------ 2 files changed, 69 insertions(+), 82 deletions(-) delete mode 100644 tests/maf/test_skyproj_plotters.py diff --git a/tests/maf/test_plotters.py b/tests/maf/test_plotters.py index 83bd4db4..39ee02ca 100644 --- a/tests/maf/test_plotters.py +++ b/tests/maf/test_plotters.py @@ -3,13 +3,15 @@ import numpy as np from matplotlib.figure import Figure +from rubin_scheduler.scheduler.model_observatory import ModelObservatory import rubin_sim.maf as maf class TestPlotters(unittest.TestCase): def setUp(self): - self.rng = np.random.default_rng() + # Set a seed to make the tests reproducible + self.rng = np.random.default_rng(seed=1234) def test_healpix_plotters(self): # Set up a metric bundle to send to plotters @@ -63,6 +65,72 @@ def test_oned_plotter(self): figs = bundle1.plot() self.assertTrue(isinstance(figs["BinnedData"], Figure)) + def test_hpxmap_plotter(self): + bundle = maf.create_empty_metric_bundle() + nside = 64 + bundle.slicer = maf.HealpixSlicer(nside=nside) + bundle._setup_metric_values() + bundle.metric_values += self.rng.uniform(size=len(bundle.slicer)) + + plotter = maf.HpxmapPlotter() + bundle.set_plot_funcs([plotter]) + _ = bundle.plot() + + def test_visit_perimeter_plotter(self): + model_observatory = ModelObservatory(init_load_length=1) + + num_points = 5 + field_ra = np.arange(30, 30 + num_points, dtype=float) + field_dec = np.arange(-60, -60 + num_points, dtype=float) + rot_sky_pos = np.arange(num_points, dtype=float) % 360 + + unmasked_data = np.empty(dtype=object, shape=(1,)) + unmasked_data[0] = np.core.records.fromarrays( + (field_ra, field_dec, rot_sky_pos), + dtype=np.dtype( + [ + ("fieldRA", field_ra.dtype), + ("fieldDec", field_dec.dtype), + ("rotSkyPos", rot_sky_pos.dtype), + ] + ), + ) + masked_data = np.ma.MaskedArray(data=unmasked_data, mask=False, fill_value=-666, dtype=object) + + bundle = maf.create_empty_metric_bundle() + bundle.slicer = maf.UniSlicer() + bundle._setup_metric_values() + bundle.metric_values = masked_data + + def compute_camera_perimeter(ra, decl, rotation): + # just a quadrangle for this unit test. + # the math isn't quite right for an actual square, + # but good enough for a unit test. + size = 1.0 + ras = [ + ra - 0.5 * size * np.cos(np.radians(decl)) * np.sin(np.radians(rotation)), + ra - 0.5 * size * np.cos(np.radians(decl)) * np.cos(np.radians(rotation)), + ra + 0.5 * size * np.cos(np.radians(decl)) * np.sin(np.radians(rotation)), + ra + 0.5 * size * np.cos(np.radians(decl)) * np.cos(np.radians(rotation)), + ] + decls = [ + decl + 0.5 * size * np.cos(np.radians(rotation)), + decl - 0.5 * size * np.sin(np.radians(rotation)), + decl - 0.5 * size * np.cos(np.radians(rotation)), + decl + 0.5 * size * np.sin(np.radians(rotation)), + ] + return ras, decls + + plot_dict = { + "camera_perimeter_func": compute_camera_perimeter, + "model_observatory": model_observatory, + "decorations": ["ecliptic", "galactic_plane", "sun", "moon", "horizon"], + } + plotter = maf.VisitPerimeterPlotter() + bundle.set_plot_funcs([plotter]) + bundle.set_plot_dict(plot_dict) + _ = bundle.plot() + if __name__ == "__main__": unittest.main() diff --git a/tests/maf/test_skyproj_plotters.py b/tests/maf/test_skyproj_plotters.py deleted file mode 100644 index 2fb6b737..00000000 --- a/tests/maf/test_skyproj_plotters.py +++ /dev/null @@ -1,81 +0,0 @@ -import unittest - -import numpy as np -from rubin_scheduler.scheduler.model_observatory import ModelObservatory - -import rubin_sim -import rubin_sim.maf.plots.skyproj_plotters -from rubin_sim import maf - - -class TestSkyprojPlots(unittest.TestCase): - def setUp(self): - self.rng = np.random.default_rng(seed=6563) - - def test_hpxmap_plotter(self): - bundle = maf.create_empty_metric_bundle() - nside = 64 - bundle.slicer = maf.HealpixSlicer(nside=nside) - bundle._setup_metric_values() - bundle.metric_values += self.rng.uniform(size=len(bundle.slicer)) - - plot_dict = {"decorations": ["colorbar"]} - plotter = rubin_sim.maf.plots.skyproj_plotters.HpxmapPlotter() - bundle.set_plot_funcs([plotter]) - bundle.set_plot_dict(plot_dict) - _ = bundle.plot() - - def test_visit_perimeter_plotter(self): - model_observatory = ModelObservatory(init_load_length=1) - - num_points = 5 - field_ra = np.arange(30, 30 + num_points, dtype=float) - field_dec = np.arange(-60, -60 + num_points, dtype=float) - rot_sky_pos = np.arange(num_points, dtype=float) % 360 - - unmasked_data = np.empty(dtype=object, shape=(1,)) - unmasked_data[0] = np.core.records.fromarrays( - (field_ra, field_dec, rot_sky_pos), - dtype=np.dtype( - [ - ("fieldRA", field_ra.dtype), - ("fieldDec", field_dec.dtype), - ("rotSkyPos", rot_sky_pos.dtype), - ] - ), - ) - masked_data = np.ma.MaskedArray(data=unmasked_data, mask=False, fill_value=-666, dtype=object) - - bundle = maf.create_empty_metric_bundle() - bundle.slicer = maf.UniSlicer() - bundle._setup_metric_values() - bundle.metric_values = masked_data - - def compute_camera_perimeter(ra, decl, rotation): - # just a quadrangle for this unit test. - # the math isn't quite right for an actual square, - # but good enough for a unit test. - size = 1.0 - ras = [ - ra - 0.5 * size * np.cos(np.radians(decl)) * np.sin(np.radians(rotation)), - ra - 0.5 * size * np.cos(np.radians(decl)) * np.cos(np.radians(rotation)), - ra + 0.5 * size * np.cos(np.radians(decl)) * np.sin(np.radians(rotation)), - ra + 0.5 * size * np.cos(np.radians(decl)) * np.cos(np.radians(rotation)), - ] - decls = [ - decl + 0.5 * size * np.cos(np.radians(rotation)), - decl - 0.5 * size * np.sin(np.radians(rotation)), - decl - 0.5 * size * np.cos(np.radians(rotation)), - decl + 0.5 * size * np.sin(np.radians(rotation)), - ] - return ras, decls - - plot_dict = { - "camera_perimeter_func": compute_camera_perimeter, - "model_observatory": model_observatory, - "decorations": ["ecliptic", "galactic_plane", "sun", "moon", "horizon"], - } - plotter = rubin_sim.maf.plots.skyproj_plotters.VisitPerimeterPlotter() - bundle.set_plot_funcs([plotter]) - bundle.set_plot_dict(plot_dict) - _ = bundle.plot()