rubin-sim 2.6.1.dev2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- batch/compile_prenight_metadata_cache.sh +34 -0
- batch/run_auxtel_prenight_sims.sh +163 -0
- batch/run_prenight_sims.sh +239 -0
- docs/.gitignore +3 -0
- docs/Makefile +32 -0
- docs/api.rst +25 -0
- docs/conf.py +8 -0
- docs/data-api.rst +12 -0
- docs/data-download.rst +70 -0
- docs/developer.rst +14 -0
- docs/documenteer.toml +11 -0
- docs/index.rst +22 -0
- docs/installation.rst +76 -0
- docs/introduction.rst +37 -0
- docs/maf-api-batches.rst +12 -0
- docs/maf-api-db.rst +12 -0
- docs/maf-api-maf-contrib.rst +12 -0
- docs/maf-api-maps.rst +12 -0
- docs/maf-api-metricbundles.rst +12 -0
- docs/maf-api-metrics.rst +12 -0
- docs/maf-api-plots.rst +12 -0
- docs/maf-api-run-comparison.rst +12 -0
- docs/maf-api-slicers.rst +12 -0
- docs/maf-api-stackers.rst +12 -0
- docs/maf-api-utils.rst +12 -0
- docs/maf-api.rst +22 -0
- docs/maf.rst +60 -0
- docs/metric_list.py +49 -0
- docs/moving-objects-api.rst +12 -0
- docs/moving-objects.rst +22 -0
- docs/phot-utils-api.rst +12 -0
- docs/phot-utils.rst +11 -0
- docs/prenight.rst +117 -0
- docs/protoarchive.rst +276 -0
- docs/satellite-constellations-api.rst +12 -0
- docs/satellite-constellations.rst +13 -0
- docs/selfcal-api.rst +12 -0
- docs/selfcal.rst +15 -0
- docs/sim-archive-api.rst +12 -0
- docs/skybrightness-api.rst +12 -0
- docs/skybrightness.rst +23 -0
- docs/user-guide.rst +28 -0
- docs/vseqarchive-architecture.rst +438 -0
- docs/vseqarchive-setup.rst +238 -0
- docs/vseqarchive.rst +225 -0
- rubin_sim/__init__.py +7 -0
- rubin_sim/data/__init__.py +1 -0
- rubin_sim/data/rs_download_data.py +155 -0
- rubin_sim/maf/__init__.py +34 -0
- rubin_sim/maf/batches/__init__.py +18 -0
- rubin_sim/maf/batches/altaz_batch.py +161 -0
- rubin_sim/maf/batches/col_map_dict.py +274 -0
- rubin_sim/maf/batches/common.py +388 -0
- rubin_sim/maf/batches/ddf_batch.py +728 -0
- rubin_sim/maf/batches/filterchange_batch.py +182 -0
- rubin_sim/maf/batches/glance_batch.py +591 -0
- rubin_sim/maf/batches/hourglass_batch.py +79 -0
- rubin_sim/maf/batches/info_batch.py +114 -0
- rubin_sim/maf/batches/metadata_batch.py +558 -0
- rubin_sim/maf/batches/moving_objects_batch.py +1587 -0
- rubin_sim/maf/batches/openshutter_batch.py +100 -0
- rubin_sim/maf/batches/radar_limited.py +1100 -0
- rubin_sim/maf/batches/science_radar_batch.py +1910 -0
- rubin_sim/maf/batches/skycoverage.py +155 -0
- rubin_sim/maf/batches/slew_batch.py +146 -0
- rubin_sim/maf/batches/srd_batch.py +637 -0
- rubin_sim/maf/batches/time_batch.py +757 -0
- rubin_sim/maf/batches/time_sci_batch.py +105 -0
- rubin_sim/maf/batches/visitdepth_batch.py +485 -0
- rubin_sim/maf/db/__init__.py +2 -0
- rubin_sim/maf/db/add_run.py +34 -0
- rubin_sim/maf/db/results_db.py +1074 -0
- rubin_sim/maf/db/tracking_db.py +332 -0
- rubin_sim/maf/ddf_dir.py +53 -0
- rubin_sim/maf/generate_ss.py +218 -0
- rubin_sim/maf/glance_dir.py +58 -0
- rubin_sim/maf/maf_contrib/__init__.py +25 -0
- rubin_sim/maf/maf_contrib/calculate_lsst_field_visibility_astropy.py +170 -0
- rubin_sim/maf/maf_contrib/depth_limited_num_gal_metric.py +109 -0
- rubin_sim/maf/maf_contrib/example_new_metrics.py +40 -0
- rubin_sim/maf/maf_contrib/filter_pair_t_gaps_metric.py +208 -0
- rubin_sim/maf/maf_contrib/grb_transient_metric.py +249 -0
- rubin_sim/maf/maf_contrib/gw170817_det_metric.py +72 -0
- rubin_sim/maf/maf_contrib/intervals_between_obs_metric.py +68 -0
- rubin_sim/maf/maf_contrib/kne_metrics.py +473 -0
- rubin_sim/maf/maf_contrib/lss_metrics.py +45 -0
- rubin_sim/maf/maf_contrib/lss_obs_strategy/__init__.py +3 -0
- rubin_sim/maf/maf_contrib/lss_obs_strategy/constants_for_pipeline.py +73 -0
- rubin_sim/maf/maf_contrib/lss_obs_strategy/galaxy_counts_metric_extended.py +205 -0
- rubin_sim/maf/maf_contrib/lss_obs_strategy/galaxy_counts_with_pixel_calibration.py +171 -0
- rubin_sim/maf/maf_contrib/lv_dwarfs/__init__.py +1 -0
- rubin_sim/maf/maf_contrib/lv_dwarfs/lv_dwarfs_metrics.py +388 -0
- rubin_sim/maf/maf_contrib/microlensing_metric.py +593 -0
- rubin_sim/maf/maf_contrib/num_obs_in_survey_time_overlap_metric.py +43 -0
- rubin_sim/maf/maf_contrib/periodic_metric.py +51 -0
- rubin_sim/maf/maf_contrib/periodic_star_metric.py +186 -0
- rubin_sim/maf/maf_contrib/periodic_star_modulation_metric.py +236 -0
- rubin_sim/maf/maf_contrib/presto_color_kne_pop_metric.py +441 -0
- rubin_sim/maf/maf_contrib/selfcal_uniformity_metric.py +171 -0
- rubin_sim/maf/maf_contrib/star_count_mass_metric.py +64 -0
- rubin_sim/maf/maf_contrib/star_count_metric.py +56 -0
- rubin_sim/maf/maf_contrib/star_counts/__init__.py +8 -0
- rubin_sim/maf/maf_contrib/star_counts/abs_mag.py +324 -0
- rubin_sim/maf/maf_contrib/star_counts/coords.py +99 -0
- rubin_sim/maf/maf_contrib/star_counts/readme.txt +1 -0
- rubin_sim/maf/maf_contrib/star_counts/spec_type.py +91 -0
- rubin_sim/maf/maf_contrib/star_counts/starcount.py +30 -0
- rubin_sim/maf/maf_contrib/star_counts/starcount_bymass.py +93 -0
- rubin_sim/maf/maf_contrib/star_counts/stellardensity.py +59 -0
- rubin_sim/maf/maf_contrib/static_probes_fom_summary_metric.py +386 -0
- rubin_sim/maf/maf_contrib/tdes_pop_metric.py +362 -0
- rubin_sim/maf/maf_contrib/transient_ascii_sed_metric.py +652 -0
- rubin_sim/maf/maf_contrib/triplet_metric.py +156 -0
- rubin_sim/maf/maf_contrib/var_depth_metric.py +157 -0
- rubin_sim/maf/maf_contrib/xrb_metrics.py +523 -0
- rubin_sim/maf/maf_contrib/young_stellar_objects_metric.py +200 -0
- rubin_sim/maf/maf_night_report.py +200 -0
- rubin_sim/maf/make_fbs_tracking_db.py +90 -0
- rubin_sim/maf/maps/__init__.py +8 -0
- rubin_sim/maf/maps/base_map.py +72 -0
- rubin_sim/maf/maps/create_gaia_density_map.py +158 -0
- rubin_sim/maf/maps/dust_map.py +66 -0
- rubin_sim/maf/maps/dust_map_3d.py +190 -0
- rubin_sim/maf/maps/ebv_3d_hp.py +170 -0
- rubin_sim/maf/maps/ebv_hp.py +64 -0
- rubin_sim/maf/maps/gal_coords_map.py +22 -0
- rubin_sim/maf/maps/galactic_plane_priority_maps.py +210 -0
- rubin_sim/maf/maps/stellar_density_map.py +73 -0
- rubin_sim/maf/maps/trilegal_map.py +82 -0
- rubin_sim/maf/metadata_dir.py +90 -0
- rubin_sim/maf/metric_bundles/__init__.py +3 -0
- rubin_sim/maf/metric_bundles/metric_bundle.py +816 -0
- rubin_sim/maf/metric_bundles/metric_bundle_group.py +834 -0
- rubin_sim/maf/metric_bundles/mo_metric_bundle.py +646 -0
- rubin_sim/maf/metrics/__init__.py +52 -0
- rubin_sim/maf/metrics/agn_time_lag_metric.py +118 -0
- rubin_sim/maf/metrics/agnstructure.py +141 -0
- rubin_sim/maf/metrics/area_summary_metrics.py +120 -0
- rubin_sim/maf/metrics/base_metric.py +215 -0
- rubin_sim/maf/metrics/brown_dwarf_metric.py +162 -0
- rubin_sim/maf/metrics/cadence_metrics.py +400 -0
- rubin_sim/maf/metrics/calibration_metrics.py +618 -0
- rubin_sim/maf/metrics/chip_vendor_metric.py +43 -0
- rubin_sim/maf/metrics/color_slope_metrics.py +189 -0
- rubin_sim/maf/metrics/cosmology_summary_metrics.py +1212 -0
- rubin_sim/maf/metrics/coverage_metric.py +48 -0
- rubin_sim/maf/metrics/crowding_metric.py +255 -0
- rubin_sim/maf/metrics/cumulative_metric.py +46 -0
- rubin_sim/maf/metrics/dcr_metric.py +93 -0
- rubin_sim/maf/metrics/exgal_m5.py +57 -0
- rubin_sim/maf/metrics/fft_metric.py +27 -0
- rubin_sim/maf/metrics/galactic_plane_metrics.py +375 -0
- rubin_sim/maf/metrics/galplane_time_sampling_metrics.py +236 -0
- rubin_sim/maf/metrics/hourglass_metric.py +130 -0
- rubin_sim/maf/metrics/incremental_template_metric.py +255 -0
- rubin_sim/maf/metrics/kuiper_metrics.py +26 -0
- rubin_sim/maf/metrics/mo_metrics.py +1496 -0
- rubin_sim/maf/metrics/mo_summary_metrics.py +464 -0
- rubin_sim/maf/metrics/night_pointing_metric.py +70 -0
- rubin_sim/maf/metrics/optimal_m5_metric.py +94 -0
- rubin_sim/maf/metrics/pair_metric.py +69 -0
- rubin_sim/maf/metrics/periodic_detect_metric.py +133 -0
- rubin_sim/maf/metrics/phase_gap_metric.py +172 -0
- rubin_sim/maf/metrics/qso_number_counts_metric.py +138 -0
- rubin_sim/maf/metrics/scaling_metrics.py +148 -0
- rubin_sim/maf/metrics/schedview_metrics.py +39 -0
- rubin_sim/maf/metrics/season_metrics.py +344 -0
- rubin_sim/maf/metrics/simple_metrics.py +546 -0
- rubin_sim/maf/metrics/sky_sat_metric.py +18 -0
- rubin_sim/maf/metrics/sn_cadence_metric.py +104 -0
- rubin_sim/maf/metrics/sn_n_sn_metric.py +1364 -0
- rubin_sim/maf/metrics/sn_sl_metric.py +216 -0
- rubin_sim/maf/metrics/sn_snr_metric.py +715 -0
- rubin_sim/maf/metrics/snr_weight.py +24 -0
- rubin_sim/maf/metrics/star_density.py +77 -0
- rubin_sim/maf/metrics/string_count_metric.py +95 -0
- rubin_sim/maf/metrics/summary_metrics.py +201 -0
- rubin_sim/maf/metrics/surfb_metric.py +175 -0
- rubin_sim/maf/metrics/technical_metrics.py +271 -0
- rubin_sim/maf/metrics/tgaps.py +412 -0
- rubin_sim/maf/metrics/tomography_models.py +2034 -0
- rubin_sim/maf/metrics/transient_metrics.py +268 -0
- rubin_sim/maf/metrics/uniformity_metrics.py +418 -0
- rubin_sim/maf/metrics/use_metrics.py +55 -0
- rubin_sim/maf/metrics/vector_metrics.py +190 -0
- rubin_sim/maf/metrics/visit_groups_metric.py +341 -0
- rubin_sim/maf/metrics/weak_lensing_systematics_metric.py +210 -0
- rubin_sim/maf/plots/__init__.py +14 -0
- rubin_sim/maf/plots/hg_plotters.py +1117 -0
- rubin_sim/maf/plots/hourglass_plotters.py +120 -0
- rubin_sim/maf/plots/mo_plotters.py +358 -0
- rubin_sim/maf/plots/nd_plotters.py +220 -0
- rubin_sim/maf/plots/neo_distance_plotter.py +140 -0
- rubin_sim/maf/plots/night_pointing_plotter.py +96 -0
- rubin_sim/maf/plots/oned_plotters.py +114 -0
- rubin_sim/maf/plots/perceptual_rainbow.py +30 -0
- rubin_sim/maf/plots/plot_handler.py +766 -0
- rubin_sim/maf/plots/skyproj_plotters.py +540 -0
- rubin_sim/maf/plots/spatial_plotters.py +1029 -0
- rubin_sim/maf/plots/special_plotters.py +256 -0
- rubin_sim/maf/plots/two_d_plotters.py +177 -0
- rubin_sim/maf/plots/xyplotter.py +37 -0
- rubin_sim/maf/run_comparison/__init__.py +5 -0
- rubin_sim/maf/run_comparison/archive.py +584 -0
- rubin_sim/maf/run_comparison/gather_summaries.py +125 -0
- rubin_sim/maf/run_comparison/microlensing_compare.py +514 -0
- rubin_sim/maf/run_comparison/radar_plot.py +202 -0
- rubin_sim/maf/run_comparison/summary_plots.py +710 -0
- rubin_sim/maf/run_moving_calc.py +239 -0
- rubin_sim/maf/run_moving_fractions.py +128 -0
- rubin_sim/maf/run_moving_join.py +103 -0
- rubin_sim/maf/run_selfcal_metric.py +92 -0
- rubin_sim/maf/scimaf_dir.py +87 -0
- rubin_sim/maf/show_maf.py +227 -0
- rubin_sim/maf/slicers/__init__.py +13 -0
- rubin_sim/maf/slicers/base_slicer.py +513 -0
- rubin_sim/maf/slicers/base_spatial_slicer.py +202 -0
- rubin_sim/maf/slicers/healpix_sdss_slicer.py +118 -0
- rubin_sim/maf/slicers/healpix_slicer.py +189 -0
- rubin_sim/maf/slicers/healpix_subset_slicer.py +293 -0
- rubin_sim/maf/slicers/hourglass_slicer.py +37 -0
- rubin_sim/maf/slicers/mo_slicer.py +171 -0
- rubin_sim/maf/slicers/movie_slicer.py +288 -0
- rubin_sim/maf/slicers/nd_slicer.py +147 -0
- rubin_sim/maf/slicers/one_d_slicer.py +210 -0
- rubin_sim/maf/slicers/time_interval_slicers.py +283 -0
- rubin_sim/maf/slicers/uni_slicer.py +57 -0
- rubin_sim/maf/slicers/user_points_slicer.py +141 -0
- rubin_sim/maf/stackers/__init__.py +13 -0
- rubin_sim/maf/stackers/base_stacker.py +221 -0
- rubin_sim/maf/stackers/coord_stackers.py +224 -0
- rubin_sim/maf/stackers/date_stackers.py +192 -0
- rubin_sim/maf/stackers/general_stackers.py +683 -0
- rubin_sim/maf/stackers/get_col_info.py +104 -0
- rubin_sim/maf/stackers/label_stackers.py +114 -0
- rubin_sim/maf/stackers/m5_optimal_stacker.py +126 -0
- rubin_sim/maf/stackers/mo_phase.py +265 -0
- rubin_sim/maf/stackers/mo_stackers.py +486 -0
- rubin_sim/maf/stackers/n_follow_stacker.py +187 -0
- rubin_sim/maf/stackers/neo_dist_stacker.py +126 -0
- rubin_sim/maf/stackers/sdss_stackers.py +30 -0
- rubin_sim/maf/stackers/sn_stacker.py +152 -0
- rubin_sim/maf/stackers/teff_stacker.py +154 -0
- rubin_sim/maf/utils/__init__.py +6 -0
- rubin_sim/maf/utils/astrometry_utils.py +93 -0
- rubin_sim/maf/utils/generate_fov_map.py +58 -0
- rubin_sim/maf/utils/get_date_version.py +28 -0
- rubin_sim/maf/utils/maf_utils.py +212 -0
- rubin_sim/maf/utils/opsim_utils.py +259 -0
- rubin_sim/maf/utils/output_utils.py +34 -0
- rubin_sim/maf/utils/sn_n_sn_utils.py +894 -0
- rubin_sim/maf/utils/sn_utils.py +369 -0
- rubin_sim/maf/utils/stellar_mags.py +197 -0
- rubin_sim/maf/web/__init__.py +2 -0
- rubin_sim/maf/web/favicon.ico +0 -0
- rubin_sim/maf/web/maf_run_results.py +645 -0
- rubin_sim/maf/web/maf_tracking.py +139 -0
- rubin_sim/maf/web/sorttable.js +496 -0
- rubin_sim/maf/web/templates/allmetricresults.html +72 -0
- rubin_sim/maf/web/templates/configs.html +28 -0
- rubin_sim/maf/web/templates/macros.html +243 -0
- rubin_sim/maf/web/templates/master.html +294 -0
- rubin_sim/maf/web/templates/metricselect.html +91 -0
- rubin_sim/maf/web/templates/multicolor.html +147 -0
- rubin_sim/maf/web/templates/results.html +82 -0
- rubin_sim/maf/web/templates/runselect.html +58 -0
- rubin_sim/maf/web/templates/stats.html +50 -0
- rubin_sim/moving_objects/__init__.py +8 -0
- rubin_sim/moving_objects/base_obs.py +468 -0
- rubin_sim/moving_objects/cheby_fits.py +689 -0
- rubin_sim/moving_objects/cheby_values.py +231 -0
- rubin_sim/moving_objects/chebyshev_utils.py +365 -0
- rubin_sim/moving_objects/direct_obs.py +376 -0
- rubin_sim/moving_objects/make_lsst_obs.py +282 -0
- rubin_sim/moving_objects/ooephemerides.py +643 -0
- rubin_sim/moving_objects/orbits.py +507 -0
- rubin_sim/moving_objects/pre_generate.py +37 -0
- rubin_sim/moving_objects/utils.py +61 -0
- rubin_sim/phot_utils/__init__.py +7 -0
- rubin_sim/phot_utils/bandpass.py +425 -0
- rubin_sim/phot_utils/photometric_parameters.py +449 -0
- rubin_sim/phot_utils/physical_parameters.py +50 -0
- rubin_sim/phot_utils/predicted_zeropoints.py +245 -0
- rubin_sim/phot_utils/sed.py +1773 -0
- rubin_sim/phot_utils/sed_utils.py +52 -0
- rubin_sim/phot_utils/signaltonoise.py +695 -0
- rubin_sim/phot_utils/spectral_resampling.py +161 -0
- rubin_sim/satellite_constellations/__init__.py +3 -0
- rubin_sim/satellite_constellations/basis_function.py +40 -0
- rubin_sim/satellite_constellations/model_observatory.py +157 -0
- rubin_sim/satellite_constellations/sat_utils.py +488 -0
- rubin_sim/selfcal/__init__.py +4 -0
- rubin_sim/selfcal/generate_catalog.py +188 -0
- rubin_sim/selfcal/offsets.py +119 -0
- rubin_sim/selfcal/solver.py +143 -0
- rubin_sim/selfcal/star_tools.py +42 -0
- rubin_sim/sim_archive/__init__.py +14 -0
- rubin_sim/sim_archive/conda_packages.py +65 -0
- rubin_sim/sim_archive/future_vsarch.py +480 -0
- rubin_sim/sim_archive/make_snapshot.py +255 -0
- rubin_sim/sim_archive/prenight.py +216 -0
- rubin_sim/sim_archive/prenightindex.py +229 -0
- rubin_sim/sim_archive/prototype.py +1029 -0
- rubin_sim/sim_archive/sim_archive.py +680 -0
- rubin_sim/sim_archive/tempdb.py +56 -0
- rubin_sim/sim_archive/util.py +146 -0
- rubin_sim/sim_archive/vseqarchive.py +965 -0
- rubin_sim/sim_archive/vseqmetadata.py +1721 -0
- rubin_sim/skybrightness/__init__.py +5 -0
- rubin_sim/skybrightness/allsky_db.py +93 -0
- rubin_sim/skybrightness/data/ESO_Spectra/eso_tools.py +505 -0
- rubin_sim/skybrightness/data/solarSpec/package.py +22 -0
- rubin_sim/skybrightness/generate_hdf5.py +243 -0
- rubin_sim/skybrightness/interp_components.py +798 -0
- rubin_sim/skybrightness/sky_model.py +771 -0
- rubin_sim/skybrightness/twilight_func.py +83 -0
- rubin_sim/skybrightness/utils.py +91 -0
- rubin_sim-2.6.1.dev2.dist-info/METADATA +95 -0
- rubin_sim-2.6.1.dev2.dist-info/RECORD +387 -0
- rubin_sim-2.6.1.dev2.dist-info/WHEEL +5 -0
- rubin_sim-2.6.1.dev2.dist-info/entry_points.txt +24 -0
- rubin_sim-2.6.1.dev2.dist-info/licenses/LICENSE +674 -0
- rubin_sim-2.6.1.dev2.dist-info/top_level.txt +5 -0
- sql/make_vseqmeta.sql +251 -0
- tests/data/test_data.py +26 -0
- tests/data/test_ddf_grid.py +17 -0
- tests/maf/test_3x2fom.py +68 -0
- tests/maf/test_archive.py +162 -0
- tests/maf/test_basemetrics.py +99 -0
- tests/maf/test_batchcommon.py +36 -0
- tests/maf/test_batches.py +159 -0
- tests/maf/test_cadencemetrics.py +388 -0
- tests/maf/test_calibrationmetrics.py +242 -0
- tests/maf/test_color_slopes.py +71 -0
- tests/maf/test_cosmology_summaries.py +20 -0
- tests/maf/test_gathersummaries.py +48 -0
- tests/maf/test_healpixslicer.py +439 -0
- tests/maf/test_healpixsubsetslicer.py +273 -0
- tests/maf/test_hgplotters.py +145 -0
- tests/maf/test_hourglassmetric.py +33 -0
- tests/maf/test_io.py +187 -0
- tests/maf/test_json.py +169 -0
- tests/maf/test_maps.py +199 -0
- tests/maf/test_metricbundle.py +69 -0
- tests/maf/test_mometrics.py +422 -0
- tests/maf/test_movieslicer.py +216 -0
- tests/maf/test_ndslicer.py +240 -0
- tests/maf/test_neodistanceplotter.py +41 -0
- tests/maf/test_onedslicer.py +245 -0
- tests/maf/test_opsimutils.py +80 -0
- tests/maf/test_plotters.py +134 -0
- tests/maf/test_resultsdb.py +145 -0
- tests/maf/test_schedviewmetrics.py +14 -0
- tests/maf/test_simplemetrics.py +200 -0
- tests/maf/test_snmetrics.py +335 -0
- tests/maf/test_snmetrics_nsn.py +123 -0
- tests/maf/test_stackers.py +423 -0
- tests/maf/test_stellarmags.py +50 -0
- tests/maf/test_stringcount.py +26 -0
- tests/maf/test_summary_plots.py +197 -0
- tests/maf/test_summarymetrics.py +82 -0
- tests/maf/test_technicalmetrics.py +267 -0
- tests/maf/test_templatemetrics.py +86 -0
- tests/maf/test_timeintervalslicers.py +97 -0
- tests/maf/test_trackingdb.py +88 -0
- tests/maf/test_unislicer.py +116 -0
- tests/maf/test_vectormetrics.py +225 -0
- tests/maf/test_visitgroupsmetric.py +181 -0
- tests/moving_objects/test_camera.py +39 -0
- tests/moving_objects/test_chebyfits.py +188 -0
- tests/moving_objects/test_chebyshevutils.py +76 -0
- tests/moving_objects/test_chebyvalues.py +245 -0
- tests/moving_objects/test_ephemerides.py +219 -0
- tests/moving_objects/test_orbits.py +170 -0
- tests/moving_objects/test_sed_data.py +61 -0
- tests/phot_utils/test_approximatebandpasses.py +91 -0
- tests/phot_utils/test_photometricparameters.py +268 -0
- tests/phot_utils/test_photometry.py +61 -0
- tests/phot_utils/test_predicted_zeropoints.py +53 -0
- tests/phot_utils/test_read_bandpasses.py +29 -0
- tests/phot_utils/test_sed.py +368 -0
- tests/phot_utils/test_snr.py +370 -0
- tests/satellite_constellations/test_satellites.py +36 -0
- tests/sim_archive/test_make_snapshot.py +24 -0
- tests/sim_archive/test_prototype_sim_archive.py +204 -0
- tests/sim_archive/test_vseqarchive.py +947 -0
- tests/skybrightness/test_skymodel.py +359 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
__all__ = ("FOPlot", "SummaryHistogram")
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
import healpy as hp
|
|
5
|
+
import matplotlib.pyplot as plt
|
|
6
|
+
import numpy as np
|
|
7
|
+
|
|
8
|
+
import rubin_sim.maf.metrics as metrics
|
|
9
|
+
|
|
10
|
+
from .plot_handler import BasePlotter
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class FOPlot(BasePlotter):
|
|
14
|
+
"""
|
|
15
|
+
Special plotter to generate and label fO plots.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self):
|
|
19
|
+
self.plot_type = "FO"
|
|
20
|
+
self.object_plotter = False
|
|
21
|
+
self.default_plot_dict = {
|
|
22
|
+
"title": None,
|
|
23
|
+
"xlabel": "Number of visits",
|
|
24
|
+
"ylabel": "Area (1000s of square degrees)",
|
|
25
|
+
"scale": None,
|
|
26
|
+
"asky": 18000.0,
|
|
27
|
+
"n_visits": 825,
|
|
28
|
+
"x_min": 0,
|
|
29
|
+
"x_max": None,
|
|
30
|
+
"y_min": 0,
|
|
31
|
+
"y_max": None,
|
|
32
|
+
"linewidth": 2,
|
|
33
|
+
"reflinewidth": 2,
|
|
34
|
+
"figsize": None,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
def __call__(self, metric_value, slicer, user_plot_dict, fig=None):
|
|
38
|
+
"""
|
|
39
|
+
Parameters
|
|
40
|
+
----------
|
|
41
|
+
metric_value : `numpy.ma.MaskedArray`
|
|
42
|
+
The metric values from the bundle.
|
|
43
|
+
slicer : `rubin_sim.maf.slicers.TwoDSlicer`
|
|
44
|
+
The slicer.
|
|
45
|
+
user_plot_dict: `dict`
|
|
46
|
+
Dictionary of plot parameters set by user
|
|
47
|
+
(overrides default values).
|
|
48
|
+
fig : `matplotlib.figure.Figure`
|
|
49
|
+
Matplotlib figure number to use. Default = None, starts new figure.
|
|
50
|
+
|
|
51
|
+
Returns
|
|
52
|
+
-------
|
|
53
|
+
fig : `matplotlib.figure.Figure`
|
|
54
|
+
Figure with the plot.
|
|
55
|
+
"""
|
|
56
|
+
if not hasattr(slicer, "nside"):
|
|
57
|
+
raise ValueError("FOPlot to be used with healpix or healpix derived slicers.")
|
|
58
|
+
|
|
59
|
+
plot_dict = {}
|
|
60
|
+
plot_dict.update(self.default_plot_dict)
|
|
61
|
+
plot_dict.update(user_plot_dict)
|
|
62
|
+
|
|
63
|
+
if plot_dict["scale"] is None:
|
|
64
|
+
plot_dict["scale"] = hp.nside2pixarea(slicer.nside, degrees=True) / 1000.0
|
|
65
|
+
|
|
66
|
+
if fig is None:
|
|
67
|
+
fig, ax = plt.subplots(figsize=plot_dict["figsize"])
|
|
68
|
+
else:
|
|
69
|
+
ax = fig.gca()
|
|
70
|
+
|
|
71
|
+
# Expect metric_value to be something like number of visits
|
|
72
|
+
cumulative_area = np.arange(1, metric_value.compressed().size + 1)[::-1] * plot_dict["scale"]
|
|
73
|
+
ax.plot(
|
|
74
|
+
np.sort(metric_value.compressed()),
|
|
75
|
+
cumulative_area,
|
|
76
|
+
"k-",
|
|
77
|
+
linewidth=plot_dict["linewidth"],
|
|
78
|
+
zorder=0,
|
|
79
|
+
)
|
|
80
|
+
# This results in calculating the summary stats in two places ..
|
|
81
|
+
# not the ideal choice but easiest for most uses in this case.
|
|
82
|
+
asky = plot_dict["asky"]
|
|
83
|
+
n_visits = plot_dict["n_visits"]
|
|
84
|
+
rarr = np.array(list(zip(metric_value.compressed())), dtype=[("fO", metric_value.dtype)])
|
|
85
|
+
f_o_area = metrics.FOArea(col="fO", n_visit=n_visits, norm=False, nside=slicer.nside).run(rarr)
|
|
86
|
+
f_o_nv = metrics.FONv(col="fO", asky=asky, norm=False, nside=slicer.nside).run(rarr)
|
|
87
|
+
|
|
88
|
+
ax.axvline(x=n_visits, linewidth=plot_dict["reflinewidth"], color="b", linestyle=":")
|
|
89
|
+
ax.axhline(y=asky / 1000.0, linewidth=plot_dict["reflinewidth"], color="r", linestyle=":")
|
|
90
|
+
# Add lines for nvis_median and f_o_area:
|
|
91
|
+
# note if these are -666 (badval), they will 'disappear'
|
|
92
|
+
nvis_median = f_o_nv["value"][np.where(f_o_nv["name"] == "MedianNvis")][0]
|
|
93
|
+
|
|
94
|
+
ax.axvline(
|
|
95
|
+
x=nvis_median,
|
|
96
|
+
linewidth=plot_dict["reflinewidth"],
|
|
97
|
+
color="b",
|
|
98
|
+
alpha=0.5,
|
|
99
|
+
linestyle="-",
|
|
100
|
+
label=f"f$_0$ Med. Nvis. (@ {asky/1000 :.0f}K sq deg) = {nvis_median :.0f} visits",
|
|
101
|
+
)
|
|
102
|
+
ax.axhline(
|
|
103
|
+
y=f_o_area / 1000.0,
|
|
104
|
+
linewidth=plot_dict["reflinewidth"],
|
|
105
|
+
color="r",
|
|
106
|
+
alpha=0.5,
|
|
107
|
+
linestyle="-",
|
|
108
|
+
label=f"f$_0$ Area (@ {n_visits :.0f} visits) = {f_o_area/1000 :.01f}K sq deg",
|
|
109
|
+
)
|
|
110
|
+
ax.legend(loc="upper right", fontsize="small", numpoints=1, framealpha=1.0)
|
|
111
|
+
|
|
112
|
+
ax.set_xlabel(plot_dict["xlabel"])
|
|
113
|
+
ax.set_ylabel(plot_dict["ylabel"])
|
|
114
|
+
ax.set_title(plot_dict["title"])
|
|
115
|
+
|
|
116
|
+
x_min = plot_dict["x_min"]
|
|
117
|
+
x_max = plot_dict["x_max"]
|
|
118
|
+
y_min = plot_dict["y_min"]
|
|
119
|
+
y_max = plot_dict["y_max"]
|
|
120
|
+
if (x_min is not None) or (x_max is not None):
|
|
121
|
+
ax.set_xlim([x_min, x_max])
|
|
122
|
+
if (y_min is not None) or (y_max is not None):
|
|
123
|
+
ax.set_ylim([y_min, y_max])
|
|
124
|
+
return fig
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
class SummaryHistogram(BasePlotter):
|
|
128
|
+
"""
|
|
129
|
+
Special plotter to summarize metrics which return a set of values
|
|
130
|
+
at each slice_point, e.g. a histogram the metric result per slicepoint.
|
|
131
|
+
(example: the results of with the rubin_sim.maf.metrics.TgapsMetric).
|
|
132
|
+
Essentially, this collapses the metric value over the sky and
|
|
133
|
+
plots a summarized version (reduced to a single value per point
|
|
134
|
+
according to the plot_dict['metricReduce'] metric).
|
|
135
|
+
"""
|
|
136
|
+
|
|
137
|
+
def __init__(self):
|
|
138
|
+
self.plot_type = "SummaryHistogram"
|
|
139
|
+
self.object_plotter = True
|
|
140
|
+
self.default_plot_dict = {
|
|
141
|
+
"title": None,
|
|
142
|
+
"xlabel": None,
|
|
143
|
+
"ylabel": "Count",
|
|
144
|
+
"label": None,
|
|
145
|
+
"cumulative": False,
|
|
146
|
+
"x_min": None,
|
|
147
|
+
"x_max": None,
|
|
148
|
+
"y_min": None,
|
|
149
|
+
"y_max": None,
|
|
150
|
+
"color": "b",
|
|
151
|
+
"linestyle": "-",
|
|
152
|
+
"histStyle": True,
|
|
153
|
+
"grid": True,
|
|
154
|
+
"metricReduce": metrics.SumMetric(),
|
|
155
|
+
"yscale": None,
|
|
156
|
+
"xscale": None,
|
|
157
|
+
"bins": None,
|
|
158
|
+
"figsize": None,
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
def __call__(self, metric_value, slicer, user_plot_dict, fig=None):
|
|
162
|
+
"""
|
|
163
|
+
Parameters
|
|
164
|
+
----------
|
|
165
|
+
metric_value : `numpy.ma.MaskedArray`
|
|
166
|
+
Handles 'object' datatypes for the masked array.
|
|
167
|
+
slicer : `rubin_sim.maf.slicer`
|
|
168
|
+
Any MAF slicer.
|
|
169
|
+
user_plot_dict: `dict`
|
|
170
|
+
Dictionary of plot parameters set by user to override defaults.
|
|
171
|
+
'metricReduce' (a `rubin_sim.maf.metric`) indicates how to
|
|
172
|
+
marginalize the metric values calculated at each point to a
|
|
173
|
+
single series of values over the sky.
|
|
174
|
+
'histStyle' (True/False) indicates whether to plot the
|
|
175
|
+
results as a step histogram (True) or as a series of values (False)
|
|
176
|
+
'bins' (np.ndarray) sets the x values for the resulting plot
|
|
177
|
+
and should generally match the bins used with the metric.
|
|
178
|
+
fig : `matplotlib.figure.Figure`
|
|
179
|
+
Matplotlib figure to use. Default starts a new figure.
|
|
180
|
+
|
|
181
|
+
Returns
|
|
182
|
+
-------
|
|
183
|
+
fig: `matplotlib.figure.Figure`
|
|
184
|
+
Matplotlib figure used to create the plot.
|
|
185
|
+
"""
|
|
186
|
+
plot_dict = {}
|
|
187
|
+
plot_dict.update(self.default_plot_dict)
|
|
188
|
+
plot_dict.update(user_plot_dict)
|
|
189
|
+
# Combine the metric values across all slice_points.
|
|
190
|
+
if not isinstance(plot_dict["metricReduce"], metrics.BaseMetric):
|
|
191
|
+
raise ValueError("Expected plot_dict[metricReduce] to be a MAF metric object.")
|
|
192
|
+
# Check that there is data to plot
|
|
193
|
+
if np.size(metric_value.compressed()) == 0:
|
|
194
|
+
raise ValueError(f"Did not find any data to plot in {self.plot_type}.")
|
|
195
|
+
# Get the data type
|
|
196
|
+
dt = metric_value.compressed()[0].dtype
|
|
197
|
+
# Change an array of arrays to a 2-d array of correct dtype
|
|
198
|
+
m_v = np.array(metric_value.compressed().tolist(), dtype=[("metric_value", dt)])
|
|
199
|
+
# Make an array to hold the combined result
|
|
200
|
+
final_hist = np.zeros(m_v.shape[1], dtype=float)
|
|
201
|
+
metric = plot_dict["metricReduce"]
|
|
202
|
+
metric.colname = "metric_value"
|
|
203
|
+
# Loop over each bin and use the selected metric to combine the results
|
|
204
|
+
for i in np.arange(final_hist.size):
|
|
205
|
+
final_hist[i] = metric.run(m_v[:, i])
|
|
206
|
+
|
|
207
|
+
if plot_dict["cumulative"]:
|
|
208
|
+
final_hist = final_hist.cumsum()
|
|
209
|
+
|
|
210
|
+
if fig is None:
|
|
211
|
+
fig = plt.figure(figsize=plot_dict["figsize"])
|
|
212
|
+
bins = plot_dict["bins"]
|
|
213
|
+
if plot_dict["histStyle"]:
|
|
214
|
+
leftedge = bins[:-1]
|
|
215
|
+
rightedge = bins[1:]
|
|
216
|
+
|
|
217
|
+
x = np.vstack([leftedge, rightedge]).T.flatten()
|
|
218
|
+
y = np.vstack([final_hist, final_hist]).T.flatten()
|
|
219
|
+
|
|
220
|
+
else:
|
|
221
|
+
# Could use this to plot things like FFT
|
|
222
|
+
x = bins[:-1]
|
|
223
|
+
y = final_hist
|
|
224
|
+
# Make the plot.
|
|
225
|
+
plt.plot(
|
|
226
|
+
x,
|
|
227
|
+
y,
|
|
228
|
+
linestyle=plot_dict["linestyle"],
|
|
229
|
+
label=plot_dict["label"],
|
|
230
|
+
color=plot_dict["color"],
|
|
231
|
+
)
|
|
232
|
+
# Add labels.
|
|
233
|
+
plt.xlabel(plot_dict["xlabel"])
|
|
234
|
+
plt.ylabel(plot_dict["ylabel"])
|
|
235
|
+
plt.title(plot_dict["title"])
|
|
236
|
+
plt.grid(plot_dict["grid"], alpha=0.3)
|
|
237
|
+
# Set y and x limits, if provided.
|
|
238
|
+
if plot_dict["x_min"] is not None:
|
|
239
|
+
plt.xlim(left=plot_dict["x_min"])
|
|
240
|
+
elif bins[0] == 0:
|
|
241
|
+
plt.xlim(left=0)
|
|
242
|
+
if plot_dict["x_max"] is not None:
|
|
243
|
+
plt.xlim(right=plot_dict["x_max"])
|
|
244
|
+
if plot_dict["y_min"] is not None:
|
|
245
|
+
plt.ylim(bottom=plot_dict["y_min"])
|
|
246
|
+
elif final_hist.min() == 0:
|
|
247
|
+
plot_dict["y_min"] = 0
|
|
248
|
+
if plot_dict["y_max"] is not None:
|
|
249
|
+
plt.ylim(top=plot_dict["y_max"])
|
|
250
|
+
|
|
251
|
+
if plot_dict["yscale"] is not None:
|
|
252
|
+
plt.yscale(plot_dict["yscale"])
|
|
253
|
+
if plot_dict["xscale"] is not None:
|
|
254
|
+
plt.xscale(plot_dict["xscale"])
|
|
255
|
+
|
|
256
|
+
return fig
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
__all__ = ("TwoDMap", "VisitPairsHist")
|
|
2
|
+
|
|
3
|
+
import matplotlib.pyplot as plt
|
|
4
|
+
import numpy as np
|
|
5
|
+
from matplotlib import colors
|
|
6
|
+
|
|
7
|
+
from .perceptual_rainbow import make_pr_cmap
|
|
8
|
+
from .plot_handler import BasePlotter
|
|
9
|
+
|
|
10
|
+
perceptual_rainbow = make_pr_cmap()
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TwoDMap(BasePlotter):
|
|
14
|
+
def __init__(self):
|
|
15
|
+
self.plot_type = "TwoD"
|
|
16
|
+
self.object_plotter = False
|
|
17
|
+
self.default_plot_dict = {
|
|
18
|
+
"title": None,
|
|
19
|
+
"xlabel": None,
|
|
20
|
+
"ylabel": None,
|
|
21
|
+
"label": None,
|
|
22
|
+
"log_scale": False,
|
|
23
|
+
"cbar_format": None,
|
|
24
|
+
"cbarTitle": "Count",
|
|
25
|
+
"cmap": perceptual_rainbow,
|
|
26
|
+
"percentile_clip": None,
|
|
27
|
+
"color_min": None,
|
|
28
|
+
"color_max": None,
|
|
29
|
+
"zp": None,
|
|
30
|
+
"norm_val": None,
|
|
31
|
+
"cbar_edge": True,
|
|
32
|
+
"n_ticks": None,
|
|
33
|
+
"aspect": "auto",
|
|
34
|
+
"xextent": None,
|
|
35
|
+
"origin": None,
|
|
36
|
+
"figsize": None,
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
def __call__(self, metric_value, slicer, user_plot_dict, fig=None):
|
|
40
|
+
"""
|
|
41
|
+
Parameters
|
|
42
|
+
----------
|
|
43
|
+
metric_value : `numpy.ma.MaskedArray`
|
|
44
|
+
The metric values from the bundle.
|
|
45
|
+
slicer : `rubin_sim.maf.slicers.TwoDSlicer`
|
|
46
|
+
The slicer.
|
|
47
|
+
user_plot_dict : `dict`
|
|
48
|
+
Dictionary of plot parameters set by user
|
|
49
|
+
(overrides default values).
|
|
50
|
+
fig : `matplotlib.figure.Figure`
|
|
51
|
+
Matplotlib figure number to use. Default = None, starts new figure.
|
|
52
|
+
|
|
53
|
+
Returns
|
|
54
|
+
-------
|
|
55
|
+
fig : `matplotlib.figure.Figure`
|
|
56
|
+
Figure with the plot.
|
|
57
|
+
"""
|
|
58
|
+
if "Healpix" in slicer.slicer_name:
|
|
59
|
+
self.default_plot_dict["ylabel"] = "Healpix ID"
|
|
60
|
+
elif "User" in slicer.slicer_name:
|
|
61
|
+
self.default_plot_dict["ylabel"] = "User Field ID"
|
|
62
|
+
|
|
63
|
+
plot_dict = {}
|
|
64
|
+
plot_dict.update(self.default_plot_dict)
|
|
65
|
+
# Don't clobber with None
|
|
66
|
+
for key in user_plot_dict:
|
|
67
|
+
if user_plot_dict[key] is not None:
|
|
68
|
+
plot_dict[key] = user_plot_dict[key]
|
|
69
|
+
|
|
70
|
+
if plot_dict["xextent"] is None:
|
|
71
|
+
plot_dict["xextent"] = [0, metric_value[0, :].size]
|
|
72
|
+
|
|
73
|
+
if plot_dict["log_scale"]:
|
|
74
|
+
norm = colors.LogNorm()
|
|
75
|
+
else:
|
|
76
|
+
norm = None
|
|
77
|
+
|
|
78
|
+
# Mask out values below the color minimum so they show up as white
|
|
79
|
+
if plot_dict["color_min"] is not None:
|
|
80
|
+
low_vals = np.where(metric_value.data < plot_dict["color_min"])
|
|
81
|
+
metric_value.mask[low_vals] = True
|
|
82
|
+
|
|
83
|
+
if fig is None:
|
|
84
|
+
fig = plt.figure(figsize=plot_dict["figsize"])
|
|
85
|
+
ax = fig.add_subplot(111)
|
|
86
|
+
yextent = [0, slicer.nslice - 1]
|
|
87
|
+
xextent = plot_dict["xextent"]
|
|
88
|
+
extent = []
|
|
89
|
+
extent.extend(xextent)
|
|
90
|
+
extent.extend(yextent)
|
|
91
|
+
image = ax.imshow(
|
|
92
|
+
metric_value,
|
|
93
|
+
vmin=plot_dict["color_min"],
|
|
94
|
+
vmax=plot_dict["color_max"],
|
|
95
|
+
aspect=plot_dict["aspect"],
|
|
96
|
+
cmap=plot_dict["cmap"],
|
|
97
|
+
norm=norm,
|
|
98
|
+
extent=extent,
|
|
99
|
+
interpolation="none",
|
|
100
|
+
origin=plot_dict["origin"],
|
|
101
|
+
)
|
|
102
|
+
cb = plt.colorbar(image)
|
|
103
|
+
|
|
104
|
+
ax.set_xlabel(plot_dict["xlabel"])
|
|
105
|
+
ax.set_ylabel(plot_dict["ylabel"])
|
|
106
|
+
ax.set_title(plot_dict["title"])
|
|
107
|
+
cb.set_label(plot_dict["cbarTitle"])
|
|
108
|
+
|
|
109
|
+
# Fix white space on pdf's
|
|
110
|
+
if plot_dict["cbar_edge"]:
|
|
111
|
+
cb.solids.set_edgecolor("face")
|
|
112
|
+
return fig
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class VisitPairsHist(BasePlotter):
|
|
116
|
+
"""
|
|
117
|
+
Given an TwoDSlicer, figure out what fraction of observations
|
|
118
|
+
are in singles, pairs, triples, etc.
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
Parameters
|
|
122
|
+
----------
|
|
123
|
+
metric_value : `numpy.ma.MaskedArray`
|
|
124
|
+
The metric values from the bundle.
|
|
125
|
+
slicer : `rubin_sim.maf.slicers.TwoDSlicer`
|
|
126
|
+
The slicer.
|
|
127
|
+
user_plot_dict : `dict`
|
|
128
|
+
Dictionary of plot parameters set by user
|
|
129
|
+
(overrides default values).
|
|
130
|
+
fig : `matplotlib.figure.Figure`
|
|
131
|
+
Matplotlib figure number to use. Default = None, starts new figure.
|
|
132
|
+
|
|
133
|
+
Returns
|
|
134
|
+
-------
|
|
135
|
+
fig : `matplotlib.figure.Figure`
|
|
136
|
+
Figure with the plot.
|
|
137
|
+
"""
|
|
138
|
+
|
|
139
|
+
def __init__(self):
|
|
140
|
+
self.plot_type = "TwoD"
|
|
141
|
+
self.object_plotter = False
|
|
142
|
+
self.default_plot_dict = {
|
|
143
|
+
"title": None,
|
|
144
|
+
"xlabel": "N visits per night per field",
|
|
145
|
+
"ylabel": "N Visits",
|
|
146
|
+
"label": None,
|
|
147
|
+
"color": "b",
|
|
148
|
+
"xlim": [0, 20],
|
|
149
|
+
"ylim": None,
|
|
150
|
+
"figsize": None,
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
def __call__(self, metric_value, slicer, user_plot_dict, fig=None):
|
|
154
|
+
plot_dict = {}
|
|
155
|
+
plot_dict.update(self.default_plot_dict)
|
|
156
|
+
# Don't clobber with None
|
|
157
|
+
for key in user_plot_dict:
|
|
158
|
+
if user_plot_dict[key] is not None:
|
|
159
|
+
plot_dict[key] = user_plot_dict[key]
|
|
160
|
+
|
|
161
|
+
max_val = metric_value.max()
|
|
162
|
+
bins = np.arange(0.5, max_val + 0.5, 1)
|
|
163
|
+
|
|
164
|
+
vals, bins = np.histogram(metric_value, bins)
|
|
165
|
+
xvals = (bins[:-1] + bins[1:]) / 2.0
|
|
166
|
+
|
|
167
|
+
if fig is None:
|
|
168
|
+
fig = plt.figure(figsize=plot_dict["figsize"])
|
|
169
|
+
ax = fig.add_subplot(111)
|
|
170
|
+
ax.bar(xvals, vals * xvals, color=plot_dict["color"], label=plot_dict["label"])
|
|
171
|
+
ax.set_xlabel(plot_dict["xlabel"])
|
|
172
|
+
ax.set_ylabel(plot_dict["ylabel"])
|
|
173
|
+
ax.set_title(plot_dict["title"])
|
|
174
|
+
ax.set_xlim(plot_dict["xlim"])
|
|
175
|
+
ax.set_ylim(plot_dict["ylim"])
|
|
176
|
+
|
|
177
|
+
return fig
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
__all__ = ("XyPlotter",)
|
|
2
|
+
|
|
3
|
+
import matplotlib.pyplot as plt
|
|
4
|
+
|
|
5
|
+
from .plot_handler import BasePlotter
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class XyPlotter(BasePlotter):
|
|
9
|
+
"""Bare-bones plotter for making scatter plots. Expects single metric value
|
|
10
|
+
(e.g, from UniSlicer or UserPointSlicer with one point)"""
|
|
11
|
+
|
|
12
|
+
def __init__(self):
|
|
13
|
+
self.object_plotter = True
|
|
14
|
+
self.plot_type = "simple"
|
|
15
|
+
self.default_plot_dict = {
|
|
16
|
+
"title": None,
|
|
17
|
+
"xlabel": "",
|
|
18
|
+
"ylabel": "",
|
|
19
|
+
"figsize": None,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
def __call__(self, metric_value_in, slicer, user_plot_dict, fig=None):
|
|
23
|
+
plot_dict = {}
|
|
24
|
+
plot_dict.update(self.default_plot_dict)
|
|
25
|
+
plot_dict.update(user_plot_dict)
|
|
26
|
+
plot_dict.update(metric_value_in[0]["plot_dict"])
|
|
27
|
+
|
|
28
|
+
if fig is None:
|
|
29
|
+
fig = plt.figure(figsize=plot_dict["figsize"])
|
|
30
|
+
ax = fig.add_subplot(111)
|
|
31
|
+
x = metric_value_in[0]["x"]
|
|
32
|
+
y = metric_value_in[0]["y"]
|
|
33
|
+
ax.plot(x, y)
|
|
34
|
+
ax.set_title(plot_dict["title"])
|
|
35
|
+
ax.set_xlabel(plot_dict["xlabel"])
|
|
36
|
+
ax.set_ylabel(plot_dict["ylabel"])
|
|
37
|
+
return fig
|