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,1100 @@
|
|
|
1
|
+
__all__ = ("radar_limited",)
|
|
2
|
+
|
|
3
|
+
import healpy as hp
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
import rubin_sim.maf as maf
|
|
7
|
+
import rubin_sim.maf.maps as maps
|
|
8
|
+
import rubin_sim.maf.metric_bundles as mb
|
|
9
|
+
import rubin_sim.maf.metrics as metrics
|
|
10
|
+
import rubin_sim.maf.plots as plots
|
|
11
|
+
import rubin_sim.maf.slicers as slicers
|
|
12
|
+
|
|
13
|
+
from .common import filter_list, lightcurve_summary, standard_summary
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def radar_limited(
|
|
17
|
+
runName="run name",
|
|
18
|
+
nside=64,
|
|
19
|
+
benchmarkArea=18000,
|
|
20
|
+
benchmarkNvisits=825,
|
|
21
|
+
minNvisits=750,
|
|
22
|
+
long_microlensing=True,
|
|
23
|
+
srd_only=False,
|
|
24
|
+
mjd0=None,
|
|
25
|
+
):
|
|
26
|
+
"""A batch of metrics for looking at survey performance
|
|
27
|
+
relative to the SRD and the main science drivers of LSST.
|
|
28
|
+
|
|
29
|
+
Parameters
|
|
30
|
+
----------
|
|
31
|
+
runName : `str`, optional
|
|
32
|
+
The simulation run name that should appear as plot titles.
|
|
33
|
+
benchmarkArea : `float`, optional
|
|
34
|
+
The area to use for SRD metrics (sq degrees)
|
|
35
|
+
benchmarkNvisits : `int`, optional
|
|
36
|
+
The number of visits to use for SRD metrics.
|
|
37
|
+
minNvisits : `int`, optional
|
|
38
|
+
The minimum number of visits to use for SRD metrics.
|
|
39
|
+
long_microlensing : `bool`, optional
|
|
40
|
+
Add the longer running microlensing metrics to the batch
|
|
41
|
+
(a subset of crossing times only)
|
|
42
|
+
srd_only : `bool`, optional
|
|
43
|
+
Only return the SRD metrics
|
|
44
|
+
mjd0 : float, optional
|
|
45
|
+
The modified Julian date start date of the survey.
|
|
46
|
+
|
|
47
|
+
Returns
|
|
48
|
+
-------
|
|
49
|
+
metric_bundleDict : `dict` of `maf.MetricBundle`
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
bundleList = []
|
|
53
|
+
# Get some standard per-filter coloring and sql constraints
|
|
54
|
+
filterlist, colors, filterorders, filtersqls, filterinfo_label = filter_list(all=False)
|
|
55
|
+
(
|
|
56
|
+
allfilterlist,
|
|
57
|
+
allcolors,
|
|
58
|
+
allfilterorders,
|
|
59
|
+
allfiltersqls,
|
|
60
|
+
allfilterinfo_label,
|
|
61
|
+
) = filter_list(all=True)
|
|
62
|
+
|
|
63
|
+
standardStats = standard_summary(with_count=False)
|
|
64
|
+
|
|
65
|
+
# This is the default slicer for most purposes in this batch.
|
|
66
|
+
# Note that the cache is on -
|
|
67
|
+
# if the metric requires a dust map, this is not the right slicer to use.
|
|
68
|
+
healpixslicer = slicers.HealpixSlicer(nside=nside, use_cache=True)
|
|
69
|
+
subsetPlots = [plots.HealpixSkyMap(), plots.HealpixHistogram()]
|
|
70
|
+
|
|
71
|
+
#########################
|
|
72
|
+
#########################
|
|
73
|
+
# SRD, DM, etc
|
|
74
|
+
#########################
|
|
75
|
+
#########################
|
|
76
|
+
# fO metric
|
|
77
|
+
displayDict = {"group": "SRD", "subgroup": "FO metrics", "order": 0}
|
|
78
|
+
|
|
79
|
+
# Configure the count metric which is what is used for f0 slicer.
|
|
80
|
+
metric = metrics.CountExplimMetric(col="observationStartMJD", metric_name="fO")
|
|
81
|
+
plotDict = {
|
|
82
|
+
"xlabel": "Number of Visits",
|
|
83
|
+
"asky": benchmarkArea,
|
|
84
|
+
"n_visits": benchmarkNvisits,
|
|
85
|
+
"x_min": 0,
|
|
86
|
+
"x_max": 1500,
|
|
87
|
+
}
|
|
88
|
+
summaryMetrics = [
|
|
89
|
+
metrics.FOArea(
|
|
90
|
+
nside=nside,
|
|
91
|
+
norm=False,
|
|
92
|
+
metric_name="fOArea",
|
|
93
|
+
asky=benchmarkArea,
|
|
94
|
+
n_visit=benchmarkNvisits,
|
|
95
|
+
),
|
|
96
|
+
metrics.FOArea(
|
|
97
|
+
nside=nside,
|
|
98
|
+
norm=True,
|
|
99
|
+
metric_name="fOArea/benchmark",
|
|
100
|
+
asky=benchmarkArea,
|
|
101
|
+
n_visit=benchmarkNvisits,
|
|
102
|
+
),
|
|
103
|
+
metrics.FONv(
|
|
104
|
+
nside=nside,
|
|
105
|
+
norm=False,
|
|
106
|
+
metric_name="fONv",
|
|
107
|
+
asky=benchmarkArea,
|
|
108
|
+
n_visit=benchmarkNvisits,
|
|
109
|
+
),
|
|
110
|
+
metrics.FONv(
|
|
111
|
+
nside=nside,
|
|
112
|
+
norm=True,
|
|
113
|
+
metric_name="fONv/benchmark",
|
|
114
|
+
asky=benchmarkArea,
|
|
115
|
+
n_visit=benchmarkNvisits,
|
|
116
|
+
),
|
|
117
|
+
metrics.FOArea(
|
|
118
|
+
nside=nside,
|
|
119
|
+
norm=False,
|
|
120
|
+
metric_name=f"fOArea_{minNvisits}",
|
|
121
|
+
asky=benchmarkArea,
|
|
122
|
+
n_visit=minNvisits,
|
|
123
|
+
),
|
|
124
|
+
]
|
|
125
|
+
caption = "The FO metric evaluates the overall efficiency of observing. "
|
|
126
|
+
caption += (
|
|
127
|
+
"foNv: out of %.2f sq degrees, the area receives at least X and a median of Y visits "
|
|
128
|
+
"(out of %d, if compared to benchmark). " % (benchmarkArea, benchmarkNvisits)
|
|
129
|
+
)
|
|
130
|
+
caption += (
|
|
131
|
+
"fOArea: this many sq deg (out of %.2f sq deg if compared "
|
|
132
|
+
"to benchmark) receives at least %d visits. " % (benchmarkArea, benchmarkNvisits)
|
|
133
|
+
)
|
|
134
|
+
displayDict["caption"] = caption
|
|
135
|
+
bundle = mb.MetricBundle(
|
|
136
|
+
metric,
|
|
137
|
+
healpixslicer,
|
|
138
|
+
"",
|
|
139
|
+
plot_dict=plotDict,
|
|
140
|
+
display_dict=displayDict,
|
|
141
|
+
summary_metrics=summaryMetrics,
|
|
142
|
+
plot_funcs=[plots.FOPlot()],
|
|
143
|
+
)
|
|
144
|
+
bundleList.append(bundle)
|
|
145
|
+
|
|
146
|
+
# Single visit depth distribution
|
|
147
|
+
displayDict["subgroup"] = "Visit Depths"
|
|
148
|
+
# Histogram values over all and per filter.
|
|
149
|
+
|
|
150
|
+
value = "fiveSigmaDepth"
|
|
151
|
+
for f in filterlist:
|
|
152
|
+
displayDict["caption"] = "Histogram of %s" % (value)
|
|
153
|
+
displayDict["caption"] += " for %s." % (filterinfo_label[f])
|
|
154
|
+
displayDict["order"] = filterorders[f]
|
|
155
|
+
m = metrics.CountMetric(value, metric_name="%s Histogram" % (value))
|
|
156
|
+
slicer = slicers.OneDSlicer(slice_col_name=value)
|
|
157
|
+
bundle = mb.MetricBundle(
|
|
158
|
+
m,
|
|
159
|
+
slicer,
|
|
160
|
+
filtersqls[f],
|
|
161
|
+
display_dict=displayDict,
|
|
162
|
+
)
|
|
163
|
+
bundleList.append(bundle)
|
|
164
|
+
|
|
165
|
+
displayDict["caption"] = ""
|
|
166
|
+
for f in filterlist:
|
|
167
|
+
slicer = maf.UniSlicer()
|
|
168
|
+
metric = maf.MedianMetric(col="fiveSigmaDepth")
|
|
169
|
+
bundle = mb.MetricBundle(
|
|
170
|
+
metric,
|
|
171
|
+
slicer,
|
|
172
|
+
filtersqls[f],
|
|
173
|
+
display_dict=displayDict,
|
|
174
|
+
)
|
|
175
|
+
bundleList.append(bundle)
|
|
176
|
+
|
|
177
|
+
##############
|
|
178
|
+
# Astrometry
|
|
179
|
+
###############
|
|
180
|
+
|
|
181
|
+
rmags_para = [22.4, 24.0]
|
|
182
|
+
rmags_pm = [20.5, 24.0]
|
|
183
|
+
|
|
184
|
+
# Set up parallax/dcr stackers.
|
|
185
|
+
parallaxStacker = maf.ParallaxFactorStacker()
|
|
186
|
+
dcrStacker = maf.DcrStacker()
|
|
187
|
+
|
|
188
|
+
# Set up parallax metrics.
|
|
189
|
+
displayDict["subgroup"] = "Parallax"
|
|
190
|
+
displayDict["order"] += 1
|
|
191
|
+
# Expected error on parallax at 10 AU.
|
|
192
|
+
plotmaxVals = (2.0, 15.0)
|
|
193
|
+
good_parallax_limit = 11.5
|
|
194
|
+
summary = [
|
|
195
|
+
metrics.AreaSummaryMetric(
|
|
196
|
+
area=18000,
|
|
197
|
+
reduce_func=np.median,
|
|
198
|
+
decreasing=False,
|
|
199
|
+
metric_name="Median Parallax Uncert (18k)",
|
|
200
|
+
),
|
|
201
|
+
metrics.AreaThresholdMetric(
|
|
202
|
+
upper_threshold=good_parallax_limit,
|
|
203
|
+
metric_name="Area better than %.1f mas uncertainty" % good_parallax_limit,
|
|
204
|
+
),
|
|
205
|
+
]
|
|
206
|
+
summary.append(metrics.PercentileMetric(percentile=95, metric_name="95th Percentile Parallax Uncert"))
|
|
207
|
+
summary.extend(standard_summary())
|
|
208
|
+
for rmag, plotmax in zip(rmags_para, plotmaxVals):
|
|
209
|
+
plotDict = {"x_min": 0, "x_max": plotmax, "color_min": 0, "color_max": plotmax}
|
|
210
|
+
metric = metrics.ParallaxMetric(
|
|
211
|
+
metric_name="Parallax Uncert @ %.1f" % (rmag),
|
|
212
|
+
rmag=rmag,
|
|
213
|
+
normalize=False,
|
|
214
|
+
)
|
|
215
|
+
bundle = mb.MetricBundle(
|
|
216
|
+
metric,
|
|
217
|
+
healpixslicer,
|
|
218
|
+
"",
|
|
219
|
+
stacker_list=[parallaxStacker],
|
|
220
|
+
display_dict=displayDict,
|
|
221
|
+
plot_dict=plotDict,
|
|
222
|
+
summary_metrics=summary,
|
|
223
|
+
plot_funcs=subsetPlots,
|
|
224
|
+
)
|
|
225
|
+
bundleList.append(bundle)
|
|
226
|
+
displayDict["order"] += 1
|
|
227
|
+
|
|
228
|
+
# Parallax normalized to 'best possible'.
|
|
229
|
+
# This separates the effect of cadence from depth.
|
|
230
|
+
for rmag in rmags_para:
|
|
231
|
+
metric = metrics.ParallaxMetric(
|
|
232
|
+
metric_name="Normalized Parallax Uncert @ %.1f" % (rmag),
|
|
233
|
+
rmag=rmag,
|
|
234
|
+
normalize=True,
|
|
235
|
+
)
|
|
236
|
+
bundle = mb.MetricBundle(
|
|
237
|
+
metric,
|
|
238
|
+
healpixslicer,
|
|
239
|
+
"",
|
|
240
|
+
stacker_list=[parallaxStacker],
|
|
241
|
+
display_dict=displayDict,
|
|
242
|
+
summary_metrics=standard_summary(),
|
|
243
|
+
plot_funcs=subsetPlots,
|
|
244
|
+
)
|
|
245
|
+
bundleList.append(bundle)
|
|
246
|
+
displayDict["order"] += 1
|
|
247
|
+
# Parallax factor coverage.
|
|
248
|
+
for rmag in rmags_para:
|
|
249
|
+
metric = metrics.ParallaxCoverageMetric(metric_name="Parallax Coverage @ %.1f" % (rmag), rmag=rmag)
|
|
250
|
+
bundle = mb.MetricBundle(
|
|
251
|
+
metric,
|
|
252
|
+
healpixslicer,
|
|
253
|
+
"",
|
|
254
|
+
stacker_list=[parallaxStacker],
|
|
255
|
+
display_dict=displayDict,
|
|
256
|
+
summary_metrics=standard_summary(),
|
|
257
|
+
plot_funcs=subsetPlots,
|
|
258
|
+
)
|
|
259
|
+
bundleList.append(bundle)
|
|
260
|
+
displayDict["order"] += 1
|
|
261
|
+
# Parallax problems can be caused by HA and DCR degeneracies.
|
|
262
|
+
# Check their correlation.
|
|
263
|
+
for rmag in rmags_para:
|
|
264
|
+
metric = metrics.ParallaxDcrDegenMetric(
|
|
265
|
+
metric_name="Parallax-DCR degeneracy @ %.1f" % (rmag), rmag=rmag
|
|
266
|
+
)
|
|
267
|
+
caption = "Correlation between parallax offset magnitude and hour angle for a r=%.1f star." % (rmag)
|
|
268
|
+
caption += " (0 is good, near -1 or 1 is bad)."
|
|
269
|
+
bundle = mb.MetricBundle(
|
|
270
|
+
metric,
|
|
271
|
+
healpixslicer,
|
|
272
|
+
"",
|
|
273
|
+
stacker_list=[dcrStacker, parallaxStacker],
|
|
274
|
+
display_dict=displayDict,
|
|
275
|
+
summary_metrics=standard_summary(),
|
|
276
|
+
plot_funcs=subsetPlots,
|
|
277
|
+
)
|
|
278
|
+
bundleList.append(bundle)
|
|
279
|
+
displayDict["order"] += 1
|
|
280
|
+
|
|
281
|
+
# Proper Motion metrics.
|
|
282
|
+
displayDict["subgroup"] = "Proper Motion"
|
|
283
|
+
displayDict["order"] = 0
|
|
284
|
+
# Proper motion errors.
|
|
285
|
+
plotmaxVals = (1.0, 5.0)
|
|
286
|
+
summary = [
|
|
287
|
+
metrics.AreaSummaryMetric(
|
|
288
|
+
area=18000,
|
|
289
|
+
reduce_func=np.median,
|
|
290
|
+
decreasing=False,
|
|
291
|
+
metric_name="Median Proper Motion Uncert (18k)",
|
|
292
|
+
)
|
|
293
|
+
]
|
|
294
|
+
summary.append(metrics.PercentileMetric(metric_name="95th Percentile Proper Motion Uncert"))
|
|
295
|
+
summary.extend(standard_summary())
|
|
296
|
+
for rmag, plotmax in zip(rmags_pm, plotmaxVals):
|
|
297
|
+
plotDict = {"x_min": 0, "x_max": plotmax, "color_min": 0, "color_max": plotmax}
|
|
298
|
+
metric = metrics.ProperMotionMetric(
|
|
299
|
+
metric_name="Proper Motion Uncert @ %.1f" % rmag,
|
|
300
|
+
rmag=rmag,
|
|
301
|
+
normalize=False,
|
|
302
|
+
)
|
|
303
|
+
bundle = mb.MetricBundle(
|
|
304
|
+
metric,
|
|
305
|
+
healpixslicer,
|
|
306
|
+
"",
|
|
307
|
+
display_dict=displayDict,
|
|
308
|
+
plot_dict=plotDict,
|
|
309
|
+
summary_metrics=summary,
|
|
310
|
+
plot_funcs=subsetPlots,
|
|
311
|
+
)
|
|
312
|
+
bundleList.append(bundle)
|
|
313
|
+
displayDict["order"] += 1
|
|
314
|
+
# Normalized proper motion.
|
|
315
|
+
for rmag in rmags_pm:
|
|
316
|
+
metric = metrics.ProperMotionMetric(
|
|
317
|
+
metric_name="Normalized Proper Motion Uncert @ %.1f" % rmag,
|
|
318
|
+
rmag=rmag,
|
|
319
|
+
normalize=True,
|
|
320
|
+
)
|
|
321
|
+
bundle = mb.MetricBundle(
|
|
322
|
+
metric,
|
|
323
|
+
healpixslicer,
|
|
324
|
+
"",
|
|
325
|
+
display_dict=displayDict,
|
|
326
|
+
summary_metrics=standard_summary(),
|
|
327
|
+
plot_funcs=subsetPlots,
|
|
328
|
+
)
|
|
329
|
+
bundleList.append(bundle)
|
|
330
|
+
displayDict["order"] += 1
|
|
331
|
+
|
|
332
|
+
# DCR precision metric
|
|
333
|
+
displayDict["subgroup"] = "DCR"
|
|
334
|
+
displayDict["order"] = 0
|
|
335
|
+
plotDict = {"caption": "Precision of DCR slope.", "percentile_clip": 95}
|
|
336
|
+
metric = metrics.DcrPrecisionMetric()
|
|
337
|
+
bundle = mb.MetricBundle(
|
|
338
|
+
metric,
|
|
339
|
+
healpixslicer,
|
|
340
|
+
"",
|
|
341
|
+
plot_dict=plotDict,
|
|
342
|
+
plot_funcs=subsetPlots,
|
|
343
|
+
display_dict=displayDict,
|
|
344
|
+
summary_metrics=standard_summary(with_count=False),
|
|
345
|
+
)
|
|
346
|
+
bundleList.append(bundle)
|
|
347
|
+
|
|
348
|
+
# Rapid Revisit
|
|
349
|
+
displayDict["subgroup"] = "Rapid Revisits"
|
|
350
|
+
displayDict["order"] = 0
|
|
351
|
+
# Calculate the actual number of revisits within 30 minutes.
|
|
352
|
+
dTmax = 30 # time in minutes
|
|
353
|
+
m2 = metrics.NRevisitsMetric(d_t=dTmax, normed=False, metric_name="NumberOfQuickRevisits")
|
|
354
|
+
plotDict = {"color_min": 400, "color_max": 2000, "x_min": 400, "x_max": 2000}
|
|
355
|
+
caption = "Number of consecutive visits with return times faster than %.1f minutes, " % (dTmax)
|
|
356
|
+
caption += "in any filter. "
|
|
357
|
+
displayDict["caption"] = caption
|
|
358
|
+
bundle = mb.MetricBundle(
|
|
359
|
+
m2,
|
|
360
|
+
healpixslicer,
|
|
361
|
+
"",
|
|
362
|
+
plot_dict=plotDict,
|
|
363
|
+
plot_funcs=subsetPlots,
|
|
364
|
+
display_dict=displayDict,
|
|
365
|
+
summary_metrics=standard_summary(with_count=False),
|
|
366
|
+
)
|
|
367
|
+
bundleList.append(bundle)
|
|
368
|
+
displayDict["order"] += 1
|
|
369
|
+
|
|
370
|
+
# Better version of the rapid revisit requirements:
|
|
371
|
+
# require a minimum number of visits between
|
|
372
|
+
# dtMin and dtMax, but also a minimum number of visits
|
|
373
|
+
# between dtMin and dtPair (the typical pair time).
|
|
374
|
+
# 1 means the healpix met the requirements (0 means did not).
|
|
375
|
+
dTmin = 40.0 / 60.0 # (minutes) 40s minimum for rapid revisit range
|
|
376
|
+
dTpairs = 20.0 # minutes (time when pairs should start kicking in)
|
|
377
|
+
dTmax = 30.0 # 30 minute maximum for rapid revisit range
|
|
378
|
+
nOne = 82 # Number of revisits between 40s-30m required
|
|
379
|
+
nTwo = 28 # Number of revisits between 40s - tPairs required.
|
|
380
|
+
pix_area = float(hp.nside2pixarea(nside, degrees=True))
|
|
381
|
+
scale = pix_area * hp.nside2npix(nside)
|
|
382
|
+
m1 = metrics.RapidRevisitMetric(
|
|
383
|
+
metric_name="RapidRevisits",
|
|
384
|
+
d_tmin=dTmin / 60.0 / 60.0 / 24.0,
|
|
385
|
+
d_tpairs=dTpairs / 60.0 / 24.0,
|
|
386
|
+
d_tmax=dTmax / 60.0 / 24.0,
|
|
387
|
+
min_n1=nOne,
|
|
388
|
+
min_n2=nTwo,
|
|
389
|
+
)
|
|
390
|
+
plotDict = {
|
|
391
|
+
"x_min": 0,
|
|
392
|
+
"x_max": 1,
|
|
393
|
+
"color_min": 0,
|
|
394
|
+
"color_max": 1,
|
|
395
|
+
"log_scale": False,
|
|
396
|
+
}
|
|
397
|
+
cutoff1 = 0.9
|
|
398
|
+
summaryStats = [metrics.FracAboveMetric(cutoff=cutoff1, scale=scale, metric_name="Area (sq deg)")]
|
|
399
|
+
caption = "Rapid Revisit: area that receives at least %d visits between %.3f and %.1f minutes, " % (
|
|
400
|
+
nOne,
|
|
401
|
+
dTmin,
|
|
402
|
+
dTmax,
|
|
403
|
+
)
|
|
404
|
+
caption += "with at least %d of those visits falling between %.3f and %.1f minutes. " % (
|
|
405
|
+
nTwo,
|
|
406
|
+
dTmin,
|
|
407
|
+
dTpairs,
|
|
408
|
+
)
|
|
409
|
+
caption += (
|
|
410
|
+
'Summary statistic "Area" indicates the area on the sky which meets this requirement.'
|
|
411
|
+
" (SRD design specification is 2000 sq deg)."
|
|
412
|
+
)
|
|
413
|
+
displayDict["caption"] = caption
|
|
414
|
+
displayDict["order"] = 0
|
|
415
|
+
bundle = mb.MetricBundle(
|
|
416
|
+
m1,
|
|
417
|
+
healpixslicer,
|
|
418
|
+
"",
|
|
419
|
+
plot_dict=plotDict,
|
|
420
|
+
plot_funcs=subsetPlots,
|
|
421
|
+
display_dict=displayDict,
|
|
422
|
+
summary_metrics=summaryStats,
|
|
423
|
+
)
|
|
424
|
+
bundleList.append(bundle)
|
|
425
|
+
|
|
426
|
+
# For SRD batch only, return here.
|
|
427
|
+
if srd_only:
|
|
428
|
+
for b in bundleList:
|
|
429
|
+
b.set_run_name(runName)
|
|
430
|
+
bundleDict = mb.make_bundles_dict_from_list(bundleList)
|
|
431
|
+
|
|
432
|
+
return bundleDict
|
|
433
|
+
|
|
434
|
+
# Year Coverage
|
|
435
|
+
displayDict["subgroup"] = "Year Coverage"
|
|
436
|
+
metric = metrics.YearCoverageMetric()
|
|
437
|
+
for f in filterlist:
|
|
438
|
+
plotDict = {"color_min": 7, "color_max": 10, "color": colors[f]}
|
|
439
|
+
displayDict["caption"] = f"Number of years of coverage in {f} band."
|
|
440
|
+
displayDict["order"] = filterorders[f]
|
|
441
|
+
summary = [
|
|
442
|
+
metrics.AreaSummaryMetric(
|
|
443
|
+
area=18000,
|
|
444
|
+
reduce_func=np.mean,
|
|
445
|
+
decreasing=True,
|
|
446
|
+
metric_name="N Years (18k) %s" % f,
|
|
447
|
+
)
|
|
448
|
+
]
|
|
449
|
+
bundle = mb.MetricBundle(
|
|
450
|
+
metric,
|
|
451
|
+
healpixslicer,
|
|
452
|
+
filtersqls[f],
|
|
453
|
+
plot_dict=plotDict,
|
|
454
|
+
info_label=filterinfo_label[f],
|
|
455
|
+
display_dict=displayDict,
|
|
456
|
+
summary_metrics=summary,
|
|
457
|
+
)
|
|
458
|
+
bundleList.append(bundle)
|
|
459
|
+
|
|
460
|
+
#########################
|
|
461
|
+
#########################
|
|
462
|
+
# Galaxies
|
|
463
|
+
#########################
|
|
464
|
+
#########################
|
|
465
|
+
|
|
466
|
+
# Run this per filter, to look at variations in
|
|
467
|
+
# counts of galaxies in blue bands?
|
|
468
|
+
displayDict = {
|
|
469
|
+
"group": "Galaxies",
|
|
470
|
+
"subgroup": "Galaxy Counts",
|
|
471
|
+
"order": 0,
|
|
472
|
+
"caption": None,
|
|
473
|
+
}
|
|
474
|
+
# make sure slicer has cache off
|
|
475
|
+
slicer = slicers.HealpixSlicer(nside=nside, use_cache=False)
|
|
476
|
+
|
|
477
|
+
displayDict["subgroup"] = "Surface Brightness"
|
|
478
|
+
summary = [metrics.MedianMetric()]
|
|
479
|
+
for filtername in "ugrizy":
|
|
480
|
+
displayDict["caption"] = "Surface brightness limit in %s, no extinction applied." % filtername
|
|
481
|
+
displayDict["order"] = filterorders[f]
|
|
482
|
+
sql = "filter='%s'" % filtername
|
|
483
|
+
metric = metrics.SurfaceBrightLimitMetric()
|
|
484
|
+
bundle = mb.MetricBundle(
|
|
485
|
+
metric,
|
|
486
|
+
healpixslicer,
|
|
487
|
+
sql,
|
|
488
|
+
display_dict=displayDict,
|
|
489
|
+
summary_metrics=summary,
|
|
490
|
+
plot_funcs=subsetPlots,
|
|
491
|
+
)
|
|
492
|
+
bundleList.append(bundle)
|
|
493
|
+
|
|
494
|
+
#########################
|
|
495
|
+
#########################
|
|
496
|
+
# Cosmology
|
|
497
|
+
#########################
|
|
498
|
+
#########################
|
|
499
|
+
|
|
500
|
+
bandpass = "i"
|
|
501
|
+
nfilters_needed = 6
|
|
502
|
+
lim_ebv = 0.2
|
|
503
|
+
offset = 0.1
|
|
504
|
+
mag_cuts = {
|
|
505
|
+
10: 26.0 - offset,
|
|
506
|
+
}
|
|
507
|
+
yrs = list(mag_cuts.keys())
|
|
508
|
+
maxYr = max(yrs)
|
|
509
|
+
|
|
510
|
+
displayDict = {"group": "Cosmology"}
|
|
511
|
+
subgroupCount = 1
|
|
512
|
+
|
|
513
|
+
displayDict["subgroup"] = f"{subgroupCount}: Static Science"
|
|
514
|
+
# Static Science
|
|
515
|
+
# Calculate the static science metrics - effective survey area,
|
|
516
|
+
# mean/median coadded depth, stdev of
|
|
517
|
+
# coadded depth and the 3x2ptFoM emulator.
|
|
518
|
+
|
|
519
|
+
dustmap = maps.DustMap(nside=nside, interp=False)
|
|
520
|
+
pix_area = hp.nside2pixarea(nside, degrees=True)
|
|
521
|
+
summaryMetrics = [
|
|
522
|
+
metrics.MeanMetric(),
|
|
523
|
+
metrics.MedianMetric(),
|
|
524
|
+
metrics.RmsMetric(),
|
|
525
|
+
metrics.CountRatioMetric(norm_val=1 / pix_area, metric_name="Effective Area (deg)"),
|
|
526
|
+
]
|
|
527
|
+
displayDict["order"] = 0
|
|
528
|
+
slicer = slicers.HealpixSlicer(nside=nside, use_cache=False)
|
|
529
|
+
for yr_cut in yrs:
|
|
530
|
+
ptsrc_lim_mag_i_band = mag_cuts[yr_cut]
|
|
531
|
+
sqlconstraint = "night <= %s" % (yr_cut * 365.25 + 0.5)
|
|
532
|
+
sqlconstraint += " and scheduler_note not like 'DD%'"
|
|
533
|
+
info_label = f"{bandpass} band non-DD year {yr_cut}"
|
|
534
|
+
ThreebyTwoSummary_simple = metrics.StaticProbesFoMEmulatorMetricSimple(
|
|
535
|
+
nside=nside, year=yr_cut, metric_name="3x2ptFoM_simple"
|
|
536
|
+
)
|
|
537
|
+
ThreebyTwoSummary = maf.StaticProbesFoMEmulatorMetric(nside=nside, metric_name="3x2ptFoM")
|
|
538
|
+
|
|
539
|
+
m = metrics.ExgalM5WithCuts(
|
|
540
|
+
lsst_filter=bandpass,
|
|
541
|
+
n_filters=nfilters_needed,
|
|
542
|
+
extinction_cut=lim_ebv,
|
|
543
|
+
depth_cut=ptsrc_lim_mag_i_band,
|
|
544
|
+
)
|
|
545
|
+
caption = (
|
|
546
|
+
f"Cosmology/Static science metrics are based on evaluating the region "
|
|
547
|
+
f"of the sky that meets the requirements (in year {yr_cut} of coverage"
|
|
548
|
+
f"in all {nfilters_needed} bands, a lower E(B-V) value than {lim_ebv} "
|
|
549
|
+
f"and at least a coadded depth of {ptsrc_lim_mag_i_band} in {bandpass}. "
|
|
550
|
+
f"From there the effective survey area, coadded depth, standard deviation of "
|
|
551
|
+
f"the depth, and a 3x2pt static science figure of merit emulator are "
|
|
552
|
+
f"calculated using the dust-extinction coadded depth map (over that reduced "
|
|
553
|
+
f"footprint)."
|
|
554
|
+
)
|
|
555
|
+
displayDict["caption"] = caption
|
|
556
|
+
bundle = mb.MetricBundle(
|
|
557
|
+
m,
|
|
558
|
+
slicer,
|
|
559
|
+
sqlconstraint,
|
|
560
|
+
maps_list=[dustmap],
|
|
561
|
+
info_label=info_label,
|
|
562
|
+
summary_metrics=summaryMetrics + [ThreebyTwoSummary, ThreebyTwoSummary_simple],
|
|
563
|
+
display_dict=displayDict,
|
|
564
|
+
)
|
|
565
|
+
displayDict["order"] += 1
|
|
566
|
+
bundleList.append(bundle)
|
|
567
|
+
|
|
568
|
+
# LSS Science
|
|
569
|
+
# The only metric we have from LSS is the NGals metric -
|
|
570
|
+
# which is similar to the GalaxyCountsExtended
|
|
571
|
+
# metric, but evaluated only on the depth/dust cuts footprint.
|
|
572
|
+
subgroupCount += 1
|
|
573
|
+
displayDict["subgroup"] = f"{subgroupCount}: LSS"
|
|
574
|
+
displayDict["order"] = 0
|
|
575
|
+
plotDict = {"n_ticks": 5}
|
|
576
|
+
|
|
577
|
+
# WL metrics
|
|
578
|
+
# Calculates the number of visits per pointing, after removing
|
|
579
|
+
# parts of the footprint due to dust/depth
|
|
580
|
+
# Count visits in gri bands.
|
|
581
|
+
subgroupCount += 1
|
|
582
|
+
displayDict["subgroup"] = f"{subgroupCount}: WL"
|
|
583
|
+
displayDict["order"] = 0
|
|
584
|
+
sqlconstraint = "scheduler_note not like 'DD%' and (filter='g' or filter='r' or filter='i')"
|
|
585
|
+
info_label = "gri band non-DD"
|
|
586
|
+
minExpTime = 15
|
|
587
|
+
m = metrics.WeakLensingNvisits(
|
|
588
|
+
lsst_filter=bandpass,
|
|
589
|
+
depth_cut=mag_cuts[maxYr],
|
|
590
|
+
ebvlim=lim_ebv,
|
|
591
|
+
min_exp_time=minExpTime,
|
|
592
|
+
metric_name="WeakLensingNvisits",
|
|
593
|
+
)
|
|
594
|
+
slicer = slicers.HealpixSlicer(nside=nside, use_cache=False)
|
|
595
|
+
displayDict["caption"] = (
|
|
596
|
+
f"The number of visits per pointing, over a similarly reduced footprint as "
|
|
597
|
+
f"described above for the 3x2pt FOM, but allowing areas of sky with "
|
|
598
|
+
f"fewer than {nfilters_needed} filters. "
|
|
599
|
+
f"A cutoff of {minExpTime} removes very short visits."
|
|
600
|
+
)
|
|
601
|
+
bundle = mb.MetricBundle(
|
|
602
|
+
m,
|
|
603
|
+
slicer,
|
|
604
|
+
sqlconstraint,
|
|
605
|
+
maps_list=[dustmap],
|
|
606
|
+
info_label=info_label,
|
|
607
|
+
summary_metrics=standardStats,
|
|
608
|
+
display_dict=displayDict,
|
|
609
|
+
)
|
|
610
|
+
bundleList.append(bundle)
|
|
611
|
+
|
|
612
|
+
# Do the weak lensing per year
|
|
613
|
+
for year in [10]:
|
|
614
|
+
sqlconstraint = (
|
|
615
|
+
"scheduler_note not like 'DD%'"
|
|
616
|
+
+ " and (filter='g' or filter='r' or filter='i') and night < %i" % (year * 365.25)
|
|
617
|
+
)
|
|
618
|
+
m = metrics.WeakLensingNvisits(
|
|
619
|
+
lsst_filter=bandpass,
|
|
620
|
+
depth_cut=mag_cuts[year],
|
|
621
|
+
ebvlim=lim_ebv,
|
|
622
|
+
min_exp_time=minExpTime,
|
|
623
|
+
metric_name="WeakLensingNvisits_gri_year%i" % year,
|
|
624
|
+
)
|
|
625
|
+
bundle = mb.MetricBundle(
|
|
626
|
+
m,
|
|
627
|
+
slicer,
|
|
628
|
+
sqlconstraint,
|
|
629
|
+
maps_list=[dustmap],
|
|
630
|
+
info_label=info_label,
|
|
631
|
+
summary_metrics=standardStats,
|
|
632
|
+
display_dict=displayDict,
|
|
633
|
+
)
|
|
634
|
+
bundleList.append(bundle)
|
|
635
|
+
|
|
636
|
+
m = metrics.RIZDetectionCoaddExposureTime(
|
|
637
|
+
det_bands=["g", "r", "i"], metric_name="gri_exposure_time_year%i" % year
|
|
638
|
+
)
|
|
639
|
+
bundle = mb.MetricBundle(
|
|
640
|
+
m,
|
|
641
|
+
slicer,
|
|
642
|
+
sqlconstraint,
|
|
643
|
+
maps_list=[dustmap],
|
|
644
|
+
info_label=info_label,
|
|
645
|
+
summary_metrics=standardStats,
|
|
646
|
+
display_dict=displayDict,
|
|
647
|
+
)
|
|
648
|
+
bundleList.append(bundle)
|
|
649
|
+
|
|
650
|
+
sqlconstraint = (
|
|
651
|
+
"scheduler_note not like 'DD%'"
|
|
652
|
+
+ " and (filter='r' or filter='i' or filter='z') and night < %i" % (year * 365.25)
|
|
653
|
+
)
|
|
654
|
+
m = metrics.WeakLensingNvisits(
|
|
655
|
+
lsst_filter=bandpass,
|
|
656
|
+
depth_cut=mag_cuts[year],
|
|
657
|
+
ebvlim=lim_ebv,
|
|
658
|
+
min_exp_time=minExpTime,
|
|
659
|
+
metric_name="WeakLensingNvisits_riz_year%i" % year,
|
|
660
|
+
)
|
|
661
|
+
bundle = mb.MetricBundle(
|
|
662
|
+
m,
|
|
663
|
+
slicer,
|
|
664
|
+
sqlconstraint,
|
|
665
|
+
maps_list=[dustmap],
|
|
666
|
+
info_label=info_label,
|
|
667
|
+
summary_metrics=standardStats,
|
|
668
|
+
display_dict=displayDict,
|
|
669
|
+
)
|
|
670
|
+
bundleList.append(bundle)
|
|
671
|
+
|
|
672
|
+
m = metrics.RIZDetectionCoaddExposureTime(
|
|
673
|
+
det_bands=["g", "r", "i"], metric_name="riz_exposure_time_year%i" % year
|
|
674
|
+
)
|
|
675
|
+
bundle = mb.MetricBundle(
|
|
676
|
+
m,
|
|
677
|
+
slicer,
|
|
678
|
+
sqlconstraint,
|
|
679
|
+
maps_list=[dustmap],
|
|
680
|
+
info_label=info_label,
|
|
681
|
+
summary_metrics=standardStats,
|
|
682
|
+
display_dict=displayDict,
|
|
683
|
+
)
|
|
684
|
+
bundleList.append(bundle)
|
|
685
|
+
|
|
686
|
+
subgroupCount += 1
|
|
687
|
+
displayDict["subgroup"] = f"{subgroupCount}: Camera Rotator"
|
|
688
|
+
metric1 = metrics.KuiperMetric("rotSkyPos")
|
|
689
|
+
metric2 = metrics.KuiperMetric("rotTelPos")
|
|
690
|
+
caption_root = "Kuiper statistic (0 is uniform, 1 is delta function) of the "
|
|
691
|
+
for f in filterlist:
|
|
692
|
+
for m in [metric1, metric2]:
|
|
693
|
+
plotDict = {"color": colors[f]}
|
|
694
|
+
displayDict["order"] = filterorders[f]
|
|
695
|
+
displayDict["caption"] = caption_root + f"{m.colname} for visits in {f} band."
|
|
696
|
+
bundleList.append(
|
|
697
|
+
mb.MetricBundle(
|
|
698
|
+
m,
|
|
699
|
+
healpixslicer,
|
|
700
|
+
filtersqls[f],
|
|
701
|
+
plot_dict=plotDict,
|
|
702
|
+
display_dict=displayDict,
|
|
703
|
+
summary_metrics=standardStats,
|
|
704
|
+
plot_funcs=subsetPlots,
|
|
705
|
+
)
|
|
706
|
+
)
|
|
707
|
+
|
|
708
|
+
##############
|
|
709
|
+
# SNe Ia
|
|
710
|
+
##############
|
|
711
|
+
displayDict = {
|
|
712
|
+
"group": "Cosmology",
|
|
713
|
+
"subgroup": "5: SNe Ia",
|
|
714
|
+
"order": 0,
|
|
715
|
+
"caption": "Expected discoveries of SNeIa, using the SNNSNMetric.",
|
|
716
|
+
}
|
|
717
|
+
sne_nside = 16
|
|
718
|
+
sn_summary = [
|
|
719
|
+
metrics.MedianMetric(),
|
|
720
|
+
metrics.MeanMetric(),
|
|
721
|
+
metrics.SumMetric(metric_name="Total detected"),
|
|
722
|
+
metrics.CountMetric(metric_name="Total on sky", mask_val=0),
|
|
723
|
+
]
|
|
724
|
+
snslicer = slicers.HealpixSlicer(nside=sne_nside, use_cache=False)
|
|
725
|
+
metric = metrics.SNNSNMetric(
|
|
726
|
+
n_bef=3,
|
|
727
|
+
n_aft=8,
|
|
728
|
+
coadd_night=True,
|
|
729
|
+
add_dust=False,
|
|
730
|
+
hard_dust_cut=0.25,
|
|
731
|
+
zmin=0.2,
|
|
732
|
+
zmax=0.5,
|
|
733
|
+
z_step=0.03,
|
|
734
|
+
daymax_step=3.0,
|
|
735
|
+
zlim_coeff=0.95,
|
|
736
|
+
gamma_name="gamma_WFD.hdf5",
|
|
737
|
+
verbose=False,
|
|
738
|
+
)
|
|
739
|
+
plotDict = {"percentile_clip": 95, "n_ticks": 5}
|
|
740
|
+
# Run without DDF observations
|
|
741
|
+
bundle = mb.MetricBundle(
|
|
742
|
+
metric,
|
|
743
|
+
snslicer,
|
|
744
|
+
"scheduler_note not like '%DD%'",
|
|
745
|
+
plot_dict=plotDict,
|
|
746
|
+
display_dict=displayDict,
|
|
747
|
+
info_label="DDF excluded",
|
|
748
|
+
summary_metrics=sn_summary,
|
|
749
|
+
plot_funcs=subsetPlots,
|
|
750
|
+
)
|
|
751
|
+
|
|
752
|
+
bundleList.append(bundle)
|
|
753
|
+
|
|
754
|
+
#########################
|
|
755
|
+
#########################
|
|
756
|
+
# Variables and Transients
|
|
757
|
+
#########################
|
|
758
|
+
#########################
|
|
759
|
+
|
|
760
|
+
# Periodic Stars
|
|
761
|
+
displayDict = {"group": "Variables/Transients", "order": 0}
|
|
762
|
+
|
|
763
|
+
# Tidal Disruption Events
|
|
764
|
+
displayDict["subgroup"] = "TDE"
|
|
765
|
+
displayDict["caption"] = "TDE lightcurves that could be identified"
|
|
766
|
+
displayDict["order"] = 0
|
|
767
|
+
metric = maf.TdePopMetric(mjd0=mjd0)
|
|
768
|
+
tdeslicer = maf.generate_tde_pop_slicer()
|
|
769
|
+
bundle = mb.MetricBundle(
|
|
770
|
+
metric,
|
|
771
|
+
tdeslicer,
|
|
772
|
+
"",
|
|
773
|
+
run_name=runName,
|
|
774
|
+
summary_metrics=lightcurve_summary(),
|
|
775
|
+
display_dict=displayDict,
|
|
776
|
+
)
|
|
777
|
+
bundleList.append(bundle)
|
|
778
|
+
|
|
779
|
+
displayDict["caption"] = "TDE lightcurves quality"
|
|
780
|
+
metric = maf.TdePopMetricQuality(metric_name="TDE_Quality")
|
|
781
|
+
bundle = mb.MetricBundle(
|
|
782
|
+
metric,
|
|
783
|
+
tdeslicer,
|
|
784
|
+
"",
|
|
785
|
+
run_name=runName,
|
|
786
|
+
summary_metrics=lightcurve_summary(),
|
|
787
|
+
display_dict=displayDict,
|
|
788
|
+
)
|
|
789
|
+
bundleList.append(bundle)
|
|
790
|
+
|
|
791
|
+
# Microlensing events
|
|
792
|
+
|
|
793
|
+
displayDict["subgroup"] = "Microlensing"
|
|
794
|
+
plotDict = {"nside": 128}
|
|
795
|
+
|
|
796
|
+
n_events = 10000
|
|
797
|
+
# Let's evaluate a variety of crossing times
|
|
798
|
+
crossing_times = [
|
|
799
|
+
[1, 5],
|
|
800
|
+
[5, 10],
|
|
801
|
+
[10, 20],
|
|
802
|
+
[20, 30],
|
|
803
|
+
[30, 60],
|
|
804
|
+
[60, 90],
|
|
805
|
+
[100, 200],
|
|
806
|
+
[200, 500],
|
|
807
|
+
[500, 1000],
|
|
808
|
+
]
|
|
809
|
+
metric = maf.MicrolensingMetric()
|
|
810
|
+
summaryMetrics = maf.batches.lightcurve_summary()
|
|
811
|
+
order = 0
|
|
812
|
+
for crossing in crossing_times:
|
|
813
|
+
displayDict["caption"] = "Microlensing events with crossing times between %i to %i days." % (
|
|
814
|
+
crossing[0],
|
|
815
|
+
crossing[1],
|
|
816
|
+
)
|
|
817
|
+
displayDict["order"] = order
|
|
818
|
+
order += 1
|
|
819
|
+
slicer = maf.generate_microlensing_slicer(
|
|
820
|
+
min_crossing_time=crossing[0],
|
|
821
|
+
max_crossing_time=crossing[1],
|
|
822
|
+
n_events=n_events,
|
|
823
|
+
)
|
|
824
|
+
bundleList.append(
|
|
825
|
+
maf.MetricBundle(
|
|
826
|
+
metric,
|
|
827
|
+
slicer,
|
|
828
|
+
None,
|
|
829
|
+
run_name=runName,
|
|
830
|
+
summary_metrics=summaryMetrics,
|
|
831
|
+
info_label=f"tE {crossing[0]}_{crossing[1]} days",
|
|
832
|
+
display_dict=displayDict,
|
|
833
|
+
plot_dict=plotDict,
|
|
834
|
+
plot_funcs=[plots.HealpixSkyMap()],
|
|
835
|
+
)
|
|
836
|
+
)
|
|
837
|
+
|
|
838
|
+
if long_microlensing:
|
|
839
|
+
n_events = 10000
|
|
840
|
+
# Let's evaluate a subset of the crossing times for these
|
|
841
|
+
crossing_times = [
|
|
842
|
+
[10, 20],
|
|
843
|
+
[20, 30],
|
|
844
|
+
[30, 60],
|
|
845
|
+
[200, 500],
|
|
846
|
+
]
|
|
847
|
+
metric_Npts = maf.MicrolensingMetric(metric_calc="Npts")
|
|
848
|
+
summaryMetrics = maf.batches.microlensing_summary(metric_type="Npts")
|
|
849
|
+
order = 0
|
|
850
|
+
for crossing in crossing_times:
|
|
851
|
+
slicer = maf.generate_microlensing_slicer(
|
|
852
|
+
min_crossing_time=crossing[0],
|
|
853
|
+
max_crossing_time=crossing[1],
|
|
854
|
+
n_events=n_events,
|
|
855
|
+
)
|
|
856
|
+
displayDict["caption"] = "Microlensing events with crossing times between %i to %i days." % (
|
|
857
|
+
crossing[0],
|
|
858
|
+
crossing[1],
|
|
859
|
+
)
|
|
860
|
+
displayDict["order"] = order
|
|
861
|
+
order += 1
|
|
862
|
+
bundleList.append(
|
|
863
|
+
maf.MetricBundle(
|
|
864
|
+
metric_Npts,
|
|
865
|
+
slicer,
|
|
866
|
+
None,
|
|
867
|
+
run_name=runName,
|
|
868
|
+
summary_metrics=summaryMetrics,
|
|
869
|
+
info_label=f"tE {crossing[0]}_{crossing[1]} days",
|
|
870
|
+
display_dict=displayDict,
|
|
871
|
+
plot_dict=plotDict,
|
|
872
|
+
plot_funcs=[],
|
|
873
|
+
)
|
|
874
|
+
)
|
|
875
|
+
|
|
876
|
+
metric_Fisher = maf.MicrolensingMetric(metric_calc="Fisher")
|
|
877
|
+
summaryMetrics = maf.batches.microlensing_summary(metric_type="Fisher")
|
|
878
|
+
order = 0
|
|
879
|
+
for crossing in crossing_times:
|
|
880
|
+
displayDict["caption"] = "Microlensing events with crossing times between %i to %i days." % (
|
|
881
|
+
crossing[0],
|
|
882
|
+
crossing[1],
|
|
883
|
+
)
|
|
884
|
+
displayDict["order"] = order
|
|
885
|
+
order += 1
|
|
886
|
+
slicer = maf.generate_microlensing_slicer(
|
|
887
|
+
min_crossing_time=crossing[0],
|
|
888
|
+
max_crossing_time=crossing[1],
|
|
889
|
+
n_events=n_events,
|
|
890
|
+
)
|
|
891
|
+
bundleList.append(
|
|
892
|
+
maf.MetricBundle(
|
|
893
|
+
metric_Fisher,
|
|
894
|
+
slicer,
|
|
895
|
+
None,
|
|
896
|
+
run_name=runName,
|
|
897
|
+
summary_metrics=summaryMetrics,
|
|
898
|
+
info_label=f"tE {crossing[0]}_{crossing[1]} days",
|
|
899
|
+
display_dict=displayDict,
|
|
900
|
+
plot_dict=plotDict,
|
|
901
|
+
plot_funcs=[],
|
|
902
|
+
)
|
|
903
|
+
)
|
|
904
|
+
|
|
905
|
+
# Kilonovae metric
|
|
906
|
+
displayDict["group"] = "Variables/Transients"
|
|
907
|
+
displayDict["subgroup"] = "KNe"
|
|
908
|
+
n_events = 10000
|
|
909
|
+
caption = f"KNe metric, injecting {n_events} lightcurves over the entire sky, GW170817-like only."
|
|
910
|
+
caption += " Ignoring DDF observations."
|
|
911
|
+
displayDict["caption"] = caption
|
|
912
|
+
displayDict["order"] = 0
|
|
913
|
+
# Kilonova parameters
|
|
914
|
+
inj_params_list = [
|
|
915
|
+
{"mej_dyn": 0.005, "mej_wind": 0.050, "phi": 30, "theta": 25.8},
|
|
916
|
+
]
|
|
917
|
+
filename = maf.get_kne_filename(inj_params_list)
|
|
918
|
+
kneslicer = maf.generate_kn_pop_slicer(n_events=n_events, n_files=len(filename), d_min=10, d_max=600)
|
|
919
|
+
metric = maf.KNePopMetric(
|
|
920
|
+
output_lc=False,
|
|
921
|
+
file_list=filename,
|
|
922
|
+
metric_name="KNePopMetric_single",
|
|
923
|
+
mjd0=mjd0,
|
|
924
|
+
)
|
|
925
|
+
bundle = mb.MetricBundle(
|
|
926
|
+
metric,
|
|
927
|
+
kneslicer,
|
|
928
|
+
"scheduler_note not like 'DD%'",
|
|
929
|
+
run_name=runName,
|
|
930
|
+
info_label="single model",
|
|
931
|
+
summary_metrics=lightcurve_summary(),
|
|
932
|
+
display_dict=displayDict,
|
|
933
|
+
)
|
|
934
|
+
bundleList.append(bundle)
|
|
935
|
+
|
|
936
|
+
n_events = 10000
|
|
937
|
+
caption = f"KNe metric, injecting {n_events} lightcurves over the entire sky, entire model population."
|
|
938
|
+
caption += " Ignoring DDF observations."
|
|
939
|
+
displayDict["caption"] = caption
|
|
940
|
+
displayDict["order"] = 1
|
|
941
|
+
# Kilonova parameters
|
|
942
|
+
filename = maf.get_kne_filename(None)
|
|
943
|
+
kneslicer_allkne = maf.generate_kn_pop_slicer(
|
|
944
|
+
n_events=n_events, n_files=len(filename), d_min=10, d_max=600
|
|
945
|
+
)
|
|
946
|
+
metric_allkne = maf.KNePopMetric(output_lc=False, file_list=filename, metric_name="KNePopMetric_all")
|
|
947
|
+
bundle = mb.MetricBundle(
|
|
948
|
+
metric_allkne,
|
|
949
|
+
kneslicer_allkne,
|
|
950
|
+
"scheduler_note not like 'DD%'",
|
|
951
|
+
run_name=runName,
|
|
952
|
+
info_label="all models",
|
|
953
|
+
summary_metrics=lightcurve_summary(),
|
|
954
|
+
display_dict=displayDict,
|
|
955
|
+
)
|
|
956
|
+
bundleList.append(bundle)
|
|
957
|
+
|
|
958
|
+
# General time intervals
|
|
959
|
+
displayDict = {
|
|
960
|
+
"group": "TimeGaps",
|
|
961
|
+
"subgroup": "Time",
|
|
962
|
+
"caption": None,
|
|
963
|
+
"order": 0,
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
for f in filterlist:
|
|
967
|
+
gaps = [3.0, 7.0, 24.0]
|
|
968
|
+
for gap in gaps:
|
|
969
|
+
summary_stats = []
|
|
970
|
+
summary_stats.append(
|
|
971
|
+
metrics.AreaSummaryMetric(
|
|
972
|
+
area=18000,
|
|
973
|
+
reduce_func=np.median,
|
|
974
|
+
decreasing=True,
|
|
975
|
+
metric_name="Median N gaps in %s at %ihr in top 18k" % (f, gap),
|
|
976
|
+
)
|
|
977
|
+
)
|
|
978
|
+
|
|
979
|
+
summary_stats.append(
|
|
980
|
+
metrics.AreaSummaryMetric(
|
|
981
|
+
area=18000,
|
|
982
|
+
reduce_func=np.mean,
|
|
983
|
+
decreasing=True,
|
|
984
|
+
metric_name="Mean N gaps in %s at %ihr in top 18k" % (f, gap),
|
|
985
|
+
)
|
|
986
|
+
)
|
|
987
|
+
|
|
988
|
+
summary_stats.append(metrics.MeanMetric())
|
|
989
|
+
summary_stats.append(metrics.MedianMetric())
|
|
990
|
+
|
|
991
|
+
m2 = metrics.GapsMetric(
|
|
992
|
+
time_scale=gap,
|
|
993
|
+
metric_name="Gaps_%ihr" % gap,
|
|
994
|
+
)
|
|
995
|
+
plotFuncs = [plots.HealpixSkyMap(), plots.HealpixHistogram()]
|
|
996
|
+
plotDict = {"color_min": 0, "color": colors[f], "percentile_clip": 95}
|
|
997
|
+
displayDict["caption"] = (
|
|
998
|
+
"Number of times the timescale of ~%i hours is sampled in %s band(s)." % (gap, f)
|
|
999
|
+
)
|
|
1000
|
+
displayDict["order"] = filterorders[f]
|
|
1001
|
+
bundleList.append(
|
|
1002
|
+
mb.MetricBundle(
|
|
1003
|
+
m2,
|
|
1004
|
+
healpixslicer,
|
|
1005
|
+
constraint=filtersqls[f],
|
|
1006
|
+
info_label=filterinfo_label[f],
|
|
1007
|
+
run_name=runName,
|
|
1008
|
+
summary_metrics=summary_stats,
|
|
1009
|
+
plot_dict=plotDict,
|
|
1010
|
+
plot_funcs=plotFuncs,
|
|
1011
|
+
display_dict=displayDict,
|
|
1012
|
+
)
|
|
1013
|
+
)
|
|
1014
|
+
|
|
1015
|
+
# XRB metric
|
|
1016
|
+
displayDict["subgroup"] = "XRB"
|
|
1017
|
+
displayDict["order"] = 0
|
|
1018
|
+
displayDict["caption"] = "Number or characterization of XRBs."
|
|
1019
|
+
n_events = 10000
|
|
1020
|
+
xrbslicer = maf.generate_xrb_pop_slicer(n_events=n_events)
|
|
1021
|
+
metric = maf.XRBPopMetric(output_lc=False, mjd0=mjd0)
|
|
1022
|
+
xrb_summaryMetrics = [
|
|
1023
|
+
maf.SumMetric(metric_name="Total detected"),
|
|
1024
|
+
maf.CountMetric(metric_name="Total lightcurves in footprint"),
|
|
1025
|
+
maf.CountMetric(metric_name="Total lightcurves on sky", mask_val=0),
|
|
1026
|
+
maf.MeanMetric(metric_name="Fraction detected in footprint"),
|
|
1027
|
+
maf.MeanMetric(mask_val=0, metric_name="Fraction detected of total"),
|
|
1028
|
+
maf.MedianMetric(metric_name="Median"),
|
|
1029
|
+
maf.MeanMetric(metric_name="Mean"),
|
|
1030
|
+
]
|
|
1031
|
+
|
|
1032
|
+
bundleList.append(
|
|
1033
|
+
maf.MetricBundle(
|
|
1034
|
+
metric,
|
|
1035
|
+
xrbslicer,
|
|
1036
|
+
"",
|
|
1037
|
+
run_name=runName,
|
|
1038
|
+
summary_metrics=xrb_summaryMetrics,
|
|
1039
|
+
display_dict=displayDict,
|
|
1040
|
+
)
|
|
1041
|
+
)
|
|
1042
|
+
|
|
1043
|
+
#########################
|
|
1044
|
+
#########################
|
|
1045
|
+
# Milky Way
|
|
1046
|
+
#########################
|
|
1047
|
+
#########################
|
|
1048
|
+
|
|
1049
|
+
displayDict = {"group": "Milky Way", "subgroup": ""}
|
|
1050
|
+
|
|
1051
|
+
# Brown Dwarf Volume
|
|
1052
|
+
displayDict["subgroup"] = "Brown Dwarf"
|
|
1053
|
+
displayDict["order"] = 0
|
|
1054
|
+
l7_bd_mags = {"i": 20.09, "z": 18.18, "y": 17.13}
|
|
1055
|
+
displayDict["caption"] = (
|
|
1056
|
+
f"The expected maximum distance at which an L7 brown dwarf with magnitude {l7_bd_mags} "
|
|
1057
|
+
f"would have a parallax SNR of 10.0. The summary statistic represents the volume enclosed by "
|
|
1058
|
+
f"the result of this metric (BDParallaxMetric)."
|
|
1059
|
+
)
|
|
1060
|
+
sum_stats = [metrics.VolumeSumMetric(nside=nside)]
|
|
1061
|
+
metric = metrics.BDParallaxMetric(mags=l7_bd_mags, metric_name="Brown Dwarf, L7")
|
|
1062
|
+
sql = ""
|
|
1063
|
+
plotDict = {}
|
|
1064
|
+
bundleList.append(
|
|
1065
|
+
mb.MetricBundle(
|
|
1066
|
+
metric,
|
|
1067
|
+
healpixslicer,
|
|
1068
|
+
sql,
|
|
1069
|
+
plot_dict=plotDict,
|
|
1070
|
+
summary_metrics=sum_stats,
|
|
1071
|
+
display_dict=displayDict,
|
|
1072
|
+
run_name=runName,
|
|
1073
|
+
)
|
|
1074
|
+
)
|
|
1075
|
+
|
|
1076
|
+
l4_bd_mags = {"i": 18.35, "z": 16.68, "y": 15.66}
|
|
1077
|
+
displayDict["caption"] = (
|
|
1078
|
+
f"The expected maximum distance at which an L4 brown dwarf with magnitude {l4_bd_mags} "
|
|
1079
|
+
f"would have a parallax SNR of 10.0. The summary statistic represents the total volume enclosed "
|
|
1080
|
+
f"by the result of this metric (BDParallaxMetric)."
|
|
1081
|
+
)
|
|
1082
|
+
metric = metrics.BDParallaxMetric(mags=l4_bd_mags, metric_name="Brown Dwarf, L4")
|
|
1083
|
+
bundleList.append(
|
|
1084
|
+
mb.MetricBundle(
|
|
1085
|
+
metric,
|
|
1086
|
+
healpixslicer,
|
|
1087
|
+
sql,
|
|
1088
|
+
plot_dict=plotDict,
|
|
1089
|
+
summary_metrics=sum_stats,
|
|
1090
|
+
display_dict=displayDict,
|
|
1091
|
+
run_name=runName,
|
|
1092
|
+
)
|
|
1093
|
+
)
|
|
1094
|
+
|
|
1095
|
+
# Set the run_name for all bundles and return the bundleDict.
|
|
1096
|
+
for b in bundleList:
|
|
1097
|
+
b.set_run_name(runName)
|
|
1098
|
+
bundleDict = mb.make_bundles_dict_from_list(bundleList)
|
|
1099
|
+
|
|
1100
|
+
return bundleDict
|