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,637 @@
|
|
|
1
|
+
"""Metrics to investigate quantities related to SRD.
|
|
2
|
+
Potentially could diverge from versions in scienceRadar.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
__all__ = ("fOBatch", "astrometryBatch", "rapidRevisitBatch")
|
|
6
|
+
|
|
7
|
+
import warnings
|
|
8
|
+
|
|
9
|
+
import healpy as hp
|
|
10
|
+
import numpy as np
|
|
11
|
+
|
|
12
|
+
import rubin_sim.maf.metric_bundles as mb
|
|
13
|
+
import rubin_sim.maf.metrics as metrics
|
|
14
|
+
import rubin_sim.maf.plots as plots
|
|
15
|
+
import rubin_sim.maf.slicers as slicers
|
|
16
|
+
import rubin_sim.maf.stackers as stackers
|
|
17
|
+
|
|
18
|
+
from .col_map_dict import col_map_dict
|
|
19
|
+
from .common import standard_summary
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def fOBatch(
|
|
23
|
+
colmap=None,
|
|
24
|
+
run_name="run_name",
|
|
25
|
+
extra_sql=None,
|
|
26
|
+
extra_info=None,
|
|
27
|
+
slicer=None,
|
|
28
|
+
benchmark_area=18000,
|
|
29
|
+
benchmark_n_visits=825,
|
|
30
|
+
min_n_visits=750,
|
|
31
|
+
):
|
|
32
|
+
"""Metrics for calculating fO.
|
|
33
|
+
|
|
34
|
+
Parameters
|
|
35
|
+
----------
|
|
36
|
+
colmap : `dict` or None, opt
|
|
37
|
+
A dictionary with a mapping of column names.
|
|
38
|
+
run_name : `str`, opt
|
|
39
|
+
The name of the simulated survey.
|
|
40
|
+
extra_sql : `str` or None, opt
|
|
41
|
+
Additional sql constraint to apply to all metrics.
|
|
42
|
+
extra_Info : `str` or None, opt
|
|
43
|
+
Additional info_label to apply to all results.
|
|
44
|
+
slicer : `rubin_sim.maf.slicer.HealpixSlicer` or None, opt
|
|
45
|
+
This must be a HealpixSlicer or some kind,
|
|
46
|
+
although could be a HealpixSubsetSlicer.
|
|
47
|
+
None will default to HealpixSlicer with nside=64.
|
|
48
|
+
benchmark_area : `float`, opt
|
|
49
|
+
Area to use when calculating fO_Nvis, for design.
|
|
50
|
+
benchmark_n_visits : `float`, opt
|
|
51
|
+
Nvisits minimum to use when calculating fO_Area, for design.
|
|
52
|
+
min_n_visits : `float`, opt
|
|
53
|
+
Nvisits minimum to use when calculating fO_Area, for minimum.
|
|
54
|
+
|
|
55
|
+
Returns
|
|
56
|
+
-------
|
|
57
|
+
metric_bundleDict : `dict` of `maf.MetricBundle`
|
|
58
|
+
"""
|
|
59
|
+
if colmap is None:
|
|
60
|
+
colmap = col_map_dict()
|
|
61
|
+
band_col = colmap["filter"]
|
|
62
|
+
|
|
63
|
+
bundleList = []
|
|
64
|
+
|
|
65
|
+
sql = ""
|
|
66
|
+
info_label = "All visits"
|
|
67
|
+
# Add additional sql constraint (such as wfdWhere) and info_label
|
|
68
|
+
if (extra_sql is not None) and (len(extra_sql) > 0):
|
|
69
|
+
sql = extra_sql
|
|
70
|
+
if extra_info is None:
|
|
71
|
+
info_label = extra_sql.replace(f"{band_col} =", "").replace(f"{band_col}=", "")
|
|
72
|
+
info_label = info_label.replace('"', "").replace("'", "")
|
|
73
|
+
if extra_info is not None:
|
|
74
|
+
info_label = extra_info
|
|
75
|
+
|
|
76
|
+
subgroup = info_label
|
|
77
|
+
|
|
78
|
+
raCol = colmap["ra"]
|
|
79
|
+
decCol = colmap["dec"]
|
|
80
|
+
degrees = colmap["raDecDeg"]
|
|
81
|
+
# Set up fO metric.
|
|
82
|
+
if slicer is None:
|
|
83
|
+
nside = 64
|
|
84
|
+
slicer = slicers.HealpixSlicer(nside=nside, lat_col=decCol, lon_col=raCol, lat_lon_deg=degrees)
|
|
85
|
+
else:
|
|
86
|
+
try:
|
|
87
|
+
nside = slicer.nside
|
|
88
|
+
except AttributeError:
|
|
89
|
+
warnings.warn("Must use a healpix slicer. Swapping to the default.")
|
|
90
|
+
nside = 64
|
|
91
|
+
slicer = slicers.HealpixSlicer(nside=nside, lat_col=decCol, lon_col=raCol, lat_lon_deg=degrees)
|
|
92
|
+
|
|
93
|
+
displayDict = {"group": "SRD FO metrics", "subgroup": subgroup, "order": 0}
|
|
94
|
+
|
|
95
|
+
# Configure the count metric which is what is used for f0 slicer.
|
|
96
|
+
metric = metrics.CountExplimMetric(metric_name="fO", exp_col=colmap["exptime"])
|
|
97
|
+
plotDict = {
|
|
98
|
+
"xlabel": "Number of Visits",
|
|
99
|
+
"asky": benchmark_area,
|
|
100
|
+
"n_visits": min_n_visits,
|
|
101
|
+
"x_min": 0,
|
|
102
|
+
"x_max": 1500,
|
|
103
|
+
}
|
|
104
|
+
summaryMetrics = [
|
|
105
|
+
metrics.FOArea(
|
|
106
|
+
nside=nside,
|
|
107
|
+
norm=False,
|
|
108
|
+
metric_name="fOArea",
|
|
109
|
+
asky=benchmark_area,
|
|
110
|
+
n_visit=benchmark_n_visits,
|
|
111
|
+
),
|
|
112
|
+
metrics.FOArea(
|
|
113
|
+
nside=nside,
|
|
114
|
+
norm=True,
|
|
115
|
+
metric_name="fOArea/benchmark",
|
|
116
|
+
asky=benchmark_area,
|
|
117
|
+
n_visit=benchmark_n_visits,
|
|
118
|
+
),
|
|
119
|
+
metrics.FONv(
|
|
120
|
+
nside=nside,
|
|
121
|
+
norm=False,
|
|
122
|
+
metric_name="fONv",
|
|
123
|
+
asky=benchmark_area,
|
|
124
|
+
n_visit=benchmark_n_visits,
|
|
125
|
+
),
|
|
126
|
+
metrics.FONv(
|
|
127
|
+
nside=nside,
|
|
128
|
+
norm=True,
|
|
129
|
+
metric_name="fONv/benchmark",
|
|
130
|
+
asky=benchmark_area,
|
|
131
|
+
n_visit=benchmark_n_visits,
|
|
132
|
+
),
|
|
133
|
+
metrics.FOArea(
|
|
134
|
+
nside=nside,
|
|
135
|
+
norm=False,
|
|
136
|
+
metric_name=f"fOArea_{min_n_visits}",
|
|
137
|
+
asky=benchmark_area,
|
|
138
|
+
n_visit=min_n_visits,
|
|
139
|
+
),
|
|
140
|
+
]
|
|
141
|
+
caption = "The FO metric evaluates the overall efficiency of observing. "
|
|
142
|
+
caption += (
|
|
143
|
+
"foNv: out of %.2f sq degrees, the area receives at least X and a median of Y visits "
|
|
144
|
+
"(out of %d, if compared to benchmark). " % (benchmark_area, benchmark_n_visits)
|
|
145
|
+
)
|
|
146
|
+
caption += (
|
|
147
|
+
"fOArea: this many sq deg (out of %.2f sq deg if compared "
|
|
148
|
+
"to benchmark) receives at least %d visits. " % (benchmark_area, benchmark_n_visits)
|
|
149
|
+
)
|
|
150
|
+
displayDict["caption"] = caption
|
|
151
|
+
bundle = mb.MetricBundle(
|
|
152
|
+
metric,
|
|
153
|
+
slicer,
|
|
154
|
+
sql,
|
|
155
|
+
plot_dict=plotDict,
|
|
156
|
+
display_dict=displayDict,
|
|
157
|
+
summary_metrics=summaryMetrics,
|
|
158
|
+
plot_funcs=[plots.FOPlot()],
|
|
159
|
+
info_label=info_label,
|
|
160
|
+
)
|
|
161
|
+
bundleList.append(bundle)
|
|
162
|
+
# Set the run_name for all bundles and return the bundleDict.
|
|
163
|
+
for b in bundleList:
|
|
164
|
+
b.set_run_name(run_name)
|
|
165
|
+
return mb.make_bundles_dict_from_list(bundleList)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def astrometryBatch(
|
|
169
|
+
colmap=None,
|
|
170
|
+
run_name="opsim",
|
|
171
|
+
extra_sql=None,
|
|
172
|
+
extra_info=None,
|
|
173
|
+
slicer=None,
|
|
174
|
+
):
|
|
175
|
+
"""Metrics for evaluating proper motion and parallax.
|
|
176
|
+
|
|
177
|
+
Parameters
|
|
178
|
+
----------
|
|
179
|
+
colmap : `dict` or None, optional
|
|
180
|
+
A dictionary with a mapping of column names.
|
|
181
|
+
run_name : `str`, optional
|
|
182
|
+
The name of the simulated survey.
|
|
183
|
+
extra_sql : `str` or None, optional
|
|
184
|
+
Additional sql constraint to apply to all metrics.
|
|
185
|
+
extra_info : `str` or None, optional
|
|
186
|
+
Additional info_label to apply to all results.
|
|
187
|
+
slicer : `rubin_sim.maf.slicer` or None, optional
|
|
188
|
+
Optionally, specify something other than an nside=64 healpix slicer.
|
|
189
|
+
|
|
190
|
+
Returns
|
|
191
|
+
-------
|
|
192
|
+
metric_bundleDict : `dict` of `maf.MetricBundle`
|
|
193
|
+
"""
|
|
194
|
+
if colmap is None:
|
|
195
|
+
colmap = col_map_dict()
|
|
196
|
+
band_col = colmap["filter"]
|
|
197
|
+
|
|
198
|
+
bundleList = []
|
|
199
|
+
|
|
200
|
+
sql = ""
|
|
201
|
+
info_label = "All visits"
|
|
202
|
+
# Add additional sql constraint (such as wfdWhere) and info_label
|
|
203
|
+
if (extra_sql is not None) and (len(extra_sql) > 0):
|
|
204
|
+
sql = extra_sql
|
|
205
|
+
if extra_info is None:
|
|
206
|
+
info_label = extra_sql.replace(f"{band_col} =", "").replace(f"{band_col}=", "")
|
|
207
|
+
info_label = info_label.replace('"', "").replace("'", "")
|
|
208
|
+
if extra_info is not None:
|
|
209
|
+
info_label = extra_info
|
|
210
|
+
|
|
211
|
+
subgroup = info_label
|
|
212
|
+
|
|
213
|
+
raCol = colmap["ra"]
|
|
214
|
+
decCol = colmap["dec"]
|
|
215
|
+
degrees = colmap["raDecDeg"]
|
|
216
|
+
|
|
217
|
+
rmags_para = [22.4, 24.0]
|
|
218
|
+
rmags_pm = [20.5, 24.0]
|
|
219
|
+
|
|
220
|
+
# Set up parallax/dcr stackers.
|
|
221
|
+
parallaxStacker = stackers.ParallaxFactorStacker(
|
|
222
|
+
ra_col=raCol, dec_col=decCol, date_col=colmap["mjd"], degrees=degrees
|
|
223
|
+
)
|
|
224
|
+
dcrStacker = stackers.DcrStacker(
|
|
225
|
+
filter_col=band_col,
|
|
226
|
+
alt_col=colmap["alt"],
|
|
227
|
+
degrees=degrees,
|
|
228
|
+
ra_col=raCol,
|
|
229
|
+
dec_col=decCol,
|
|
230
|
+
lst_col=colmap["lst"],
|
|
231
|
+
site="LSST",
|
|
232
|
+
mjd_col=colmap["mjd"],
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
# Set up parallax metrics.
|
|
236
|
+
if slicer is None:
|
|
237
|
+
slicer = slicers.HealpixSlicer(nside=64, lon_col=raCol, lat_col=decCol, lat_lon_deg=degrees)
|
|
238
|
+
subsetPlots = [plots.HealpixSkyMap(), plots.HealpixHistogram()]
|
|
239
|
+
|
|
240
|
+
displayDict = {
|
|
241
|
+
"group": "SRD Parallax",
|
|
242
|
+
"subgroup": subgroup,
|
|
243
|
+
"order": 0,
|
|
244
|
+
"caption": None,
|
|
245
|
+
}
|
|
246
|
+
# Expected error on parallax at 10 AU.
|
|
247
|
+
plotmaxVals = (5.0, 18.0)
|
|
248
|
+
good_parallax_limit = 11.5
|
|
249
|
+
summary = [
|
|
250
|
+
metrics.AreaSummaryMetric(
|
|
251
|
+
area=18000,
|
|
252
|
+
reduce_func=np.median,
|
|
253
|
+
decreasing=False,
|
|
254
|
+
metric_name="Median Parallax Uncert (18k)",
|
|
255
|
+
),
|
|
256
|
+
metrics.AreaThresholdMetric(
|
|
257
|
+
upper_threshold=good_parallax_limit,
|
|
258
|
+
metric_name="Area better than %.1f mas uncertainty" % good_parallax_limit,
|
|
259
|
+
),
|
|
260
|
+
]
|
|
261
|
+
summary.append(metrics.PercentileMetric(percentile=95, metric_name="95th Percentile Parallax Uncert"))
|
|
262
|
+
summary.extend(standard_summary())
|
|
263
|
+
for rmag, plotmax in zip(rmags_para, plotmaxVals):
|
|
264
|
+
plotDict = {"x_min": 0, "x_max": plotmax, "color_min": 0, "color_max": plotmax}
|
|
265
|
+
metric = metrics.ParallaxMetric(
|
|
266
|
+
metric_name="Parallax Uncert @ %.1f" % (rmag),
|
|
267
|
+
rmag=rmag,
|
|
268
|
+
seeing_col=colmap["seeingGeom"],
|
|
269
|
+
filter_col=band_col,
|
|
270
|
+
m5_col=colmap["fiveSigmaDepth"],
|
|
271
|
+
normalize=False,
|
|
272
|
+
)
|
|
273
|
+
bundle = mb.MetricBundle(
|
|
274
|
+
metric,
|
|
275
|
+
slicer,
|
|
276
|
+
sql,
|
|
277
|
+
info_label=info_label,
|
|
278
|
+
stacker_list=[parallaxStacker],
|
|
279
|
+
display_dict=displayDict,
|
|
280
|
+
plot_dict=plotDict,
|
|
281
|
+
summary_metrics=summary,
|
|
282
|
+
plot_funcs=subsetPlots,
|
|
283
|
+
)
|
|
284
|
+
bundleList.append(bundle)
|
|
285
|
+
displayDict["order"] += 1
|
|
286
|
+
|
|
287
|
+
# Parallax normalized to 'best possible'
|
|
288
|
+
# This separates the effect of cadence from depth.
|
|
289
|
+
for rmag in rmags_para:
|
|
290
|
+
metric = metrics.ParallaxMetric(
|
|
291
|
+
metric_name="Normalized Parallax Uncert @ %.1f" % (rmag),
|
|
292
|
+
rmag=rmag,
|
|
293
|
+
seeing_col=colmap["seeingGeom"],
|
|
294
|
+
filter_col=band_col,
|
|
295
|
+
m5_col=colmap["fiveSigmaDepth"],
|
|
296
|
+
normalize=True,
|
|
297
|
+
)
|
|
298
|
+
bundle = mb.MetricBundle(
|
|
299
|
+
metric,
|
|
300
|
+
slicer,
|
|
301
|
+
sql,
|
|
302
|
+
info_label=info_label,
|
|
303
|
+
stacker_list=[parallaxStacker],
|
|
304
|
+
display_dict=displayDict,
|
|
305
|
+
summary_metrics=standard_summary(),
|
|
306
|
+
plot_funcs=subsetPlots,
|
|
307
|
+
)
|
|
308
|
+
bundleList.append(bundle)
|
|
309
|
+
displayDict["order"] += 1
|
|
310
|
+
# Parallax factor coverage.
|
|
311
|
+
for rmag in rmags_para:
|
|
312
|
+
metric = metrics.ParallaxCoverageMetric(
|
|
313
|
+
metric_name="Parallax Coverage @ %.1f" % (rmag),
|
|
314
|
+
rmag=rmag,
|
|
315
|
+
m5_col=colmap["fiveSigmaDepth"],
|
|
316
|
+
mjd_col=colmap["mjd"],
|
|
317
|
+
filter_col=band_col,
|
|
318
|
+
seeing_col=colmap["seeingGeom"],
|
|
319
|
+
)
|
|
320
|
+
bundle = mb.MetricBundle(
|
|
321
|
+
metric,
|
|
322
|
+
slicer,
|
|
323
|
+
sql,
|
|
324
|
+
info_label=info_label,
|
|
325
|
+
stacker_list=[parallaxStacker],
|
|
326
|
+
display_dict=displayDict,
|
|
327
|
+
summary_metrics=standard_summary(),
|
|
328
|
+
plot_funcs=subsetPlots,
|
|
329
|
+
)
|
|
330
|
+
bundleList.append(bundle)
|
|
331
|
+
displayDict["order"] += 1
|
|
332
|
+
# Parallax problems can be caused by HA and DCR degeneracies.
|
|
333
|
+
# Check their correlation.
|
|
334
|
+
for rmag in rmags_para:
|
|
335
|
+
metric = metrics.ParallaxDcrDegenMetric(
|
|
336
|
+
metric_name="Parallax-DCR degeneracy @ %.1f" % (rmag),
|
|
337
|
+
rmag=rmag,
|
|
338
|
+
seeing_col=colmap["seeingEff"],
|
|
339
|
+
filter_col=band_col,
|
|
340
|
+
m5_col=colmap["fiveSigmaDepth"],
|
|
341
|
+
)
|
|
342
|
+
caption = "Correlation between parallax offset magnitude and hour angle for a r=%.1f star." % (rmag)
|
|
343
|
+
caption += " (0 is good, near -1 or 1 is bad)."
|
|
344
|
+
bundle = mb.MetricBundle(
|
|
345
|
+
metric,
|
|
346
|
+
slicer,
|
|
347
|
+
sql,
|
|
348
|
+
info_label=info_label,
|
|
349
|
+
stacker_list=[dcrStacker, parallaxStacker],
|
|
350
|
+
display_dict=displayDict,
|
|
351
|
+
summary_metrics=standard_summary(),
|
|
352
|
+
plot_funcs=subsetPlots,
|
|
353
|
+
)
|
|
354
|
+
bundleList.append(bundle)
|
|
355
|
+
displayDict["order"] += 1
|
|
356
|
+
|
|
357
|
+
# Evaluate y-band-only parallax uncertainty
|
|
358
|
+
# Approximate "10sigma sources" as y=21.33
|
|
359
|
+
ymag = 21.33
|
|
360
|
+
if info_label == "All visits":
|
|
361
|
+
yinfo = "y band visits"
|
|
362
|
+
else:
|
|
363
|
+
yinfo = f"{info_label} y band only"
|
|
364
|
+
if len(sql) == 0:
|
|
365
|
+
ysql = "filter == 'y'"
|
|
366
|
+
else:
|
|
367
|
+
ysql = f"{sql} and filter == 'y'"
|
|
368
|
+
plotDict = {"x_min": 0, "x_max": 15, "color_min": 0, "color_max": 15}
|
|
369
|
+
metric = metrics.ParallaxMetric(
|
|
370
|
+
metric_name="Parallax Uncert @ %.1f" % (ymag),
|
|
371
|
+
rmag=ymag,
|
|
372
|
+
seeing_col=colmap["seeingGeom"],
|
|
373
|
+
filter_col=band_col,
|
|
374
|
+
m5_col=colmap["fiveSigmaDepth"],
|
|
375
|
+
normalize=False,
|
|
376
|
+
)
|
|
377
|
+
bundle = mb.MetricBundle(
|
|
378
|
+
metric,
|
|
379
|
+
slicer,
|
|
380
|
+
ysql,
|
|
381
|
+
info_label=yinfo,
|
|
382
|
+
stacker_list=[parallaxStacker],
|
|
383
|
+
display_dict=displayDict,
|
|
384
|
+
plot_dict=plotDict,
|
|
385
|
+
summary_metrics=summary,
|
|
386
|
+
plot_funcs=subsetPlots,
|
|
387
|
+
)
|
|
388
|
+
bundleList.append(bundle)
|
|
389
|
+
displayDict["order"] += 1
|
|
390
|
+
metric = metrics.ParallaxMetric(
|
|
391
|
+
metric_name="Normalized Parallax Uncert @ %.1f" % (ymag),
|
|
392
|
+
rmag=ymag,
|
|
393
|
+
seeing_col=colmap["seeingGeom"],
|
|
394
|
+
filter_col=band_col,
|
|
395
|
+
m5_col=colmap["fiveSigmaDepth"],
|
|
396
|
+
normalize=True,
|
|
397
|
+
)
|
|
398
|
+
bundle = mb.MetricBundle(
|
|
399
|
+
metric,
|
|
400
|
+
slicer,
|
|
401
|
+
ysql,
|
|
402
|
+
info_label=yinfo,
|
|
403
|
+
stacker_list=[parallaxStacker],
|
|
404
|
+
display_dict=displayDict,
|
|
405
|
+
summary_metrics=summary,
|
|
406
|
+
plot_funcs=subsetPlots,
|
|
407
|
+
)
|
|
408
|
+
bundleList.append(bundle)
|
|
409
|
+
displayDict["order"] += 1
|
|
410
|
+
|
|
411
|
+
# Proper Motion metrics.
|
|
412
|
+
displayDict = {
|
|
413
|
+
"group": "SRD Proper Motion",
|
|
414
|
+
"subgroup": subgroup,
|
|
415
|
+
"order": 0,
|
|
416
|
+
"caption": None,
|
|
417
|
+
}
|
|
418
|
+
# Proper motion errors.
|
|
419
|
+
plotmaxVals = (1.0, 5.0)
|
|
420
|
+
summary = [
|
|
421
|
+
metrics.AreaSummaryMetric(
|
|
422
|
+
area=18000,
|
|
423
|
+
reduce_func=np.median,
|
|
424
|
+
decreasing=False,
|
|
425
|
+
metric_name="Median Proper Motion Uncert (18k)",
|
|
426
|
+
)
|
|
427
|
+
]
|
|
428
|
+
summary.append(metrics.PercentileMetric(metric_name="95th Percentile Proper Motion Uncert"))
|
|
429
|
+
summary.extend(standard_summary())
|
|
430
|
+
for rmag, plotmax in zip(rmags_pm, plotmaxVals):
|
|
431
|
+
plotDict = {"x_min": 0, "x_max": plotmax, "color_min": 0, "color_max": plotmax}
|
|
432
|
+
metric = metrics.ProperMotionMetric(
|
|
433
|
+
metric_name="Proper Motion Uncert @ %.1f" % rmag,
|
|
434
|
+
rmag=rmag,
|
|
435
|
+
m5_col=colmap["fiveSigmaDepth"],
|
|
436
|
+
mjd_col=colmap["mjd"],
|
|
437
|
+
filter_col=band_col,
|
|
438
|
+
seeing_col=colmap["seeingGeom"],
|
|
439
|
+
normalize=False,
|
|
440
|
+
)
|
|
441
|
+
bundle = mb.MetricBundle(
|
|
442
|
+
metric,
|
|
443
|
+
slicer,
|
|
444
|
+
sql,
|
|
445
|
+
info_label=info_label,
|
|
446
|
+
display_dict=displayDict,
|
|
447
|
+
plot_dict=plotDict,
|
|
448
|
+
summary_metrics=summary,
|
|
449
|
+
plot_funcs=subsetPlots,
|
|
450
|
+
)
|
|
451
|
+
bundleList.append(bundle)
|
|
452
|
+
displayDict["order"] += 1
|
|
453
|
+
# Normalized proper motion.
|
|
454
|
+
for rmag in rmags_pm:
|
|
455
|
+
metric = metrics.ProperMotionMetric(
|
|
456
|
+
metric_name="Normalized Proper Motion Uncert @ %.1f" % rmag,
|
|
457
|
+
rmag=rmag,
|
|
458
|
+
m5_col=colmap["fiveSigmaDepth"],
|
|
459
|
+
mjd_col=colmap["mjd"],
|
|
460
|
+
filter_col=band_col,
|
|
461
|
+
seeing_col=colmap["seeingGeom"],
|
|
462
|
+
normalize=True,
|
|
463
|
+
)
|
|
464
|
+
bundle = mb.MetricBundle(
|
|
465
|
+
metric,
|
|
466
|
+
slicer,
|
|
467
|
+
sql,
|
|
468
|
+
info_label=info_label,
|
|
469
|
+
display_dict=displayDict,
|
|
470
|
+
summary_metrics=standard_summary(),
|
|
471
|
+
plot_funcs=subsetPlots,
|
|
472
|
+
)
|
|
473
|
+
bundleList.append(bundle)
|
|
474
|
+
displayDict["order"] += 1
|
|
475
|
+
|
|
476
|
+
# Set the run_name for all bundles and return the bundleDict.
|
|
477
|
+
for b in bundleList:
|
|
478
|
+
b.set_run_name(run_name)
|
|
479
|
+
return mb.make_bundles_dict_from_list(bundleList)
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
def rapidRevisitBatch(
|
|
483
|
+
colmap=None,
|
|
484
|
+
run_name="opsim",
|
|
485
|
+
extra_sql=None,
|
|
486
|
+
extra_info=None,
|
|
487
|
+
slicer=None,
|
|
488
|
+
):
|
|
489
|
+
"""Metrics for evaluating proper motion and parallax.
|
|
490
|
+
|
|
491
|
+
Parameters
|
|
492
|
+
----------
|
|
493
|
+
colmap : `dict` or None, optional
|
|
494
|
+
A dictionary with a mapping of column names.
|
|
495
|
+
run_name : `str`, optional
|
|
496
|
+
The name of the simulated survey.
|
|
497
|
+
extra_sql : `str` or None, optional
|
|
498
|
+
Additional sql constraint to apply to all metrics.
|
|
499
|
+
extra_info : `str` or None, optional
|
|
500
|
+
Additional info_label to apply to all results.
|
|
501
|
+
slicer : `rubin_sim_maf.slicers.HealpixSlicer` or None, optional
|
|
502
|
+
Optionally, specify something other than an nside=64 healpix slicer.
|
|
503
|
+
(must be a healpix slicer)
|
|
504
|
+
|
|
505
|
+
Returns
|
|
506
|
+
-------
|
|
507
|
+
metric_bundleDict : `dict` of `maf.MetricBundle`
|
|
508
|
+
"""
|
|
509
|
+
if colmap is None:
|
|
510
|
+
colmap = col_map_dict()
|
|
511
|
+
band_col = colmap["filter"]
|
|
512
|
+
bundleList = []
|
|
513
|
+
|
|
514
|
+
sql = ""
|
|
515
|
+
info_label = "All visits"
|
|
516
|
+
# Add additional sql constraint (such as wfdWhere) and info_label.
|
|
517
|
+
if (extra_sql is not None) and (len(extra_sql) > 0):
|
|
518
|
+
sql = extra_sql
|
|
519
|
+
if extra_info is None:
|
|
520
|
+
info_label = extra_sql.replace(f"{band_col} =", "").replace(f"{band_col}=", "")
|
|
521
|
+
info_label = info_label.replace('"', "").replace("'", "")
|
|
522
|
+
if extra_info is not None:
|
|
523
|
+
info_label = extra_info
|
|
524
|
+
|
|
525
|
+
subgroup = info_label
|
|
526
|
+
|
|
527
|
+
raCol = colmap["ra"]
|
|
528
|
+
decCol = colmap["dec"]
|
|
529
|
+
degrees = colmap["raDecDeg"]
|
|
530
|
+
|
|
531
|
+
if slicer is None:
|
|
532
|
+
nside = 64
|
|
533
|
+
slicer = slicers.HealpixSlicer(nside=nside, lon_col=raCol, lat_col=decCol, lat_lon_deg=degrees)
|
|
534
|
+
else:
|
|
535
|
+
try:
|
|
536
|
+
nside = slicer.nside
|
|
537
|
+
except AttributeError:
|
|
538
|
+
warnings.warn("Must use a healpix slicer. Swapping to the default.")
|
|
539
|
+
nside = 64
|
|
540
|
+
slicer = slicers.HealpixSlicer(nside=nside, lat_col=decCol, lon_col=raCol, lat_lon_deg=degrees)
|
|
541
|
+
|
|
542
|
+
subsetPlots = [plots.HealpixSkyMap(), plots.HealpixHistogram()]
|
|
543
|
+
|
|
544
|
+
displayDict = {
|
|
545
|
+
"group": "SRD Rapid Revisits",
|
|
546
|
+
"subgroup": subgroup,
|
|
547
|
+
"order": 0,
|
|
548
|
+
"caption": None,
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
# Calculate the actual number of revisits within 30 minutes.
|
|
552
|
+
dTmax = 30 # time in minutes
|
|
553
|
+
m2 = metrics.NRevisitsMetric(
|
|
554
|
+
d_t=dTmax,
|
|
555
|
+
mjd_col=colmap["mjd"],
|
|
556
|
+
normed=False,
|
|
557
|
+
metric_name="NumberOfQuickRevisits",
|
|
558
|
+
)
|
|
559
|
+
plotDict = {"color_min": 400, "color_max": 2000, "x_min": 400, "x_max": 2000}
|
|
560
|
+
caption = "Number of consecutive visits with return times faster than %.1f minutes, " % (dTmax)
|
|
561
|
+
caption += "in any filter, all proposals. "
|
|
562
|
+
displayDict["caption"] = caption
|
|
563
|
+
bundle = mb.MetricBundle(
|
|
564
|
+
m2,
|
|
565
|
+
slicer,
|
|
566
|
+
sql,
|
|
567
|
+
plot_dict=plotDict,
|
|
568
|
+
plot_funcs=subsetPlots,
|
|
569
|
+
info_label=info_label,
|
|
570
|
+
display_dict=displayDict,
|
|
571
|
+
summary_metrics=standard_summary(with_count=False),
|
|
572
|
+
)
|
|
573
|
+
bundleList.append(bundle)
|
|
574
|
+
displayDict["order"] += 1
|
|
575
|
+
|
|
576
|
+
# Better version of the rapid revisit requirements:
|
|
577
|
+
# require a minimum number of visits between
|
|
578
|
+
# dtMin and dtMax, but also a minimum number of visits
|
|
579
|
+
# between dtMin and dtPair (the typical pair time).
|
|
580
|
+
# 1 means the healpix met the requirements (0 means did not).
|
|
581
|
+
dTmin = 40.0 / 60.0 # (minutes) 40s minimum for rapid revisit range
|
|
582
|
+
dTpairs = 20.0 # minutes (time when pairs should start kicking in)
|
|
583
|
+
dTmax = 30.0 # 30 minute maximum for rapid revisit range
|
|
584
|
+
nOne = 82 # Number of revisits between 40s-30m required
|
|
585
|
+
nTwo = 28 # Number of revisits between 40s - tPairs required.
|
|
586
|
+
pix_area = float(hp.nside2pixarea(nside, degrees=True))
|
|
587
|
+
scale = pix_area * hp.nside2npix(nside)
|
|
588
|
+
m1 = metrics.RapidRevisitMetric(
|
|
589
|
+
metric_name="RapidRevisits",
|
|
590
|
+
mjd_col=colmap["mjd"],
|
|
591
|
+
d_tmin=dTmin / 60.0 / 60.0 / 24.0,
|
|
592
|
+
d_tpairs=dTpairs / 60.0 / 24.0,
|
|
593
|
+
d_tmax=dTmax / 60.0 / 24.0,
|
|
594
|
+
min_n1=nOne,
|
|
595
|
+
min_n2=nTwo,
|
|
596
|
+
)
|
|
597
|
+
plotDict = {
|
|
598
|
+
"x_min": 0,
|
|
599
|
+
"x_max": 1,
|
|
600
|
+
"color_min": 0,
|
|
601
|
+
"color_max": 1,
|
|
602
|
+
"log_scale": False,
|
|
603
|
+
}
|
|
604
|
+
cutoff1 = 0.9
|
|
605
|
+
summaryStats = [metrics.FracAboveMetric(cutoff=cutoff1, scale=scale, metric_name="Area (sq deg)")]
|
|
606
|
+
caption = "Rapid Revisit: area that receives at least %d visits between %.3f and %.1f minutes, " % (
|
|
607
|
+
nOne,
|
|
608
|
+
dTmin,
|
|
609
|
+
dTmax,
|
|
610
|
+
)
|
|
611
|
+
caption += "with at least %d of those visits falling between %.3f and %.1f minutes. " % (
|
|
612
|
+
nTwo,
|
|
613
|
+
dTmin,
|
|
614
|
+
dTpairs,
|
|
615
|
+
)
|
|
616
|
+
caption += (
|
|
617
|
+
'Summary statistic "Area" indicates the area on the sky which meets this requirement.'
|
|
618
|
+
" (SRD design specification is 2000 sq deg)."
|
|
619
|
+
)
|
|
620
|
+
displayDict["caption"] = caption
|
|
621
|
+
bundle = mb.MetricBundle(
|
|
622
|
+
m1,
|
|
623
|
+
slicer,
|
|
624
|
+
sql,
|
|
625
|
+
plot_dict=plotDict,
|
|
626
|
+
plot_funcs=subsetPlots,
|
|
627
|
+
info_label=info_label,
|
|
628
|
+
display_dict=displayDict,
|
|
629
|
+
summary_metrics=summaryStats,
|
|
630
|
+
)
|
|
631
|
+
bundleList.append(bundle)
|
|
632
|
+
displayDict["order"] += 1
|
|
633
|
+
|
|
634
|
+
# Set the run_name for all bundles and return the bundleDict.
|
|
635
|
+
for b in bundleList:
|
|
636
|
+
b.set_run_name(run_name)
|
|
637
|
+
return mb.make_bundles_dict_from_list(bundleList)
|