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,105 @@
|
|
|
1
|
+
"""Sets of metrics to look at impact of cadence on science"""
|
|
2
|
+
|
|
3
|
+
__all__ = ("phaseGap",)
|
|
4
|
+
|
|
5
|
+
import rubin_sim.maf.metric_bundles as mb
|
|
6
|
+
import rubin_sim.maf.metrics as metrics
|
|
7
|
+
import rubin_sim.maf.plots as plots
|
|
8
|
+
import rubin_sim.maf.slicers as slicers
|
|
9
|
+
|
|
10
|
+
from .col_map_dict import col_map_dict
|
|
11
|
+
from .common import combine_info_labels, standard_summary
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def phaseGap(
|
|
15
|
+
colmap=None,
|
|
16
|
+
runName="opsim",
|
|
17
|
+
nside=64,
|
|
18
|
+
extraSql=None,
|
|
19
|
+
extraInfoLabel=None,
|
|
20
|
+
):
|
|
21
|
+
"""Generate a set of statistics about period coverage and phase gaps.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
colmap : `dict` or None, optional
|
|
26
|
+
A dictionary with a mapping of column names.
|
|
27
|
+
runName : `str`, optional
|
|
28
|
+
The name of the simulated survey.
|
|
29
|
+
nside : `int`, optional
|
|
30
|
+
Nside for the healpix slicer.
|
|
31
|
+
extraSql : `str` or None, optional
|
|
32
|
+
Additional sql constraint to apply to all metrics.
|
|
33
|
+
extraInfoLabel : `str` or None, optional
|
|
34
|
+
Additional info_label to apply to all results.
|
|
35
|
+
|
|
36
|
+
Returns
|
|
37
|
+
-------
|
|
38
|
+
metric_bundleDict : `dict` of `maf.MetricBundle`
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
if colmap is None:
|
|
42
|
+
colmap = col_map_dict()
|
|
43
|
+
|
|
44
|
+
info_label = extraInfoLabel
|
|
45
|
+
if extraSql is not None and len(extraSql) > 0:
|
|
46
|
+
if info_label is None:
|
|
47
|
+
info_label = extraSql
|
|
48
|
+
|
|
49
|
+
raCol = colmap["ra"]
|
|
50
|
+
decCol = colmap["dec"]
|
|
51
|
+
degrees = colmap["raDecDeg"]
|
|
52
|
+
|
|
53
|
+
bundleList = []
|
|
54
|
+
standardStats = standard_summary()
|
|
55
|
+
subsetPlots = [plots.HealpixSkyMap(), plots.HealpixHistogram()]
|
|
56
|
+
|
|
57
|
+
slicer = slicers.HealpixSlicer(nside=nside, lat_col=decCol, lon_col=raCol, lat_lon_deg=degrees)
|
|
58
|
+
|
|
59
|
+
# largest phase gap for periods
|
|
60
|
+
periods = [0.1, 1.0, 10.0, 100.0]
|
|
61
|
+
sqls = [
|
|
62
|
+
"filter='u'",
|
|
63
|
+
"filter='r'",
|
|
64
|
+
"filter='g' or filter='r' or filter='i' or filter='z'",
|
|
65
|
+
"",
|
|
66
|
+
]
|
|
67
|
+
filter_names = ["u", "r", "griz", "all"]
|
|
68
|
+
info_labels = filter_names
|
|
69
|
+
if info_label is not None:
|
|
70
|
+
info_labels = [combine_info_labels(m, info_label) for m in info_labels]
|
|
71
|
+
if extraSql is not None and len(extraSql) > 0:
|
|
72
|
+
for sql in sqls:
|
|
73
|
+
sqls[sql] = "(%s) and (%s)" % (sqls[sql], extraSql)
|
|
74
|
+
|
|
75
|
+
for sql, md, f in zip(sqls, info_labels, filter_names):
|
|
76
|
+
for period in periods:
|
|
77
|
+
displayDict = {
|
|
78
|
+
"group": "PhaseGap",
|
|
79
|
+
"subgroup": "Filter %s: Period %.2f days" % (f, period),
|
|
80
|
+
"caption": "Maximum phase gap, given a period of %.2f days." % period,
|
|
81
|
+
}
|
|
82
|
+
metric = metrics.PhaseGapMetric(
|
|
83
|
+
nPeriods=1,
|
|
84
|
+
periodMin=period,
|
|
85
|
+
periodMax=period,
|
|
86
|
+
nVisitsMin=5,
|
|
87
|
+
metric_name="PhaseGap %.1f day" % period,
|
|
88
|
+
)
|
|
89
|
+
metric.reduceFuncs = {metric.reduceFuncs["reduceLargestGap"]}
|
|
90
|
+
metric.reduceOrder = {0}
|
|
91
|
+
bundle = mb.MetricBundle(
|
|
92
|
+
metric,
|
|
93
|
+
slicer,
|
|
94
|
+
constraint=sql,
|
|
95
|
+
info_label=md,
|
|
96
|
+
display_dict=displayDict,
|
|
97
|
+
summary_metrics=standardStats,
|
|
98
|
+
plot_funcs=subsetPlots,
|
|
99
|
+
)
|
|
100
|
+
bundleList.append(bundle)
|
|
101
|
+
|
|
102
|
+
# Set the run_name for all bundles and return the bundleDict.
|
|
103
|
+
for b in bundleList:
|
|
104
|
+
b.set_run_name(runName)
|
|
105
|
+
return mb.make_bundles_dict_from_list(bundleList)
|
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
"""Sets of metrics to look at general sky coverage -
|
|
2
|
+
nvisits/coadded depth/Teff.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
__all__ = ("nvisitsM5Maps", "tEffMetrics", "nvisitsPerNight", "nvisitsPerSubset")
|
|
6
|
+
|
|
7
|
+
import copy
|
|
8
|
+
|
|
9
|
+
import numpy as np
|
|
10
|
+
|
|
11
|
+
import rubin_sim.maf.metric_bundles as mb
|
|
12
|
+
import rubin_sim.maf.metrics as metrics
|
|
13
|
+
import rubin_sim.maf.slicers as slicers
|
|
14
|
+
import rubin_sim.maf.stackers as stackers
|
|
15
|
+
import rubin_sim.maf.utils as mafUtils
|
|
16
|
+
|
|
17
|
+
from .col_map_dict import col_map_dict
|
|
18
|
+
from .common import filter_list, standard_summary
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def nvisitsM5Maps(
|
|
22
|
+
colmap=None,
|
|
23
|
+
runName="opsim",
|
|
24
|
+
extraSql=None,
|
|
25
|
+
extraInfoLabel=None,
|
|
26
|
+
slicer=None,
|
|
27
|
+
runLength=10.0,
|
|
28
|
+
):
|
|
29
|
+
"""Generate maps of the number of visits and coadded depth
|
|
30
|
+
(with and without dust extinction) in all bands and per filter.
|
|
31
|
+
|
|
32
|
+
Parameters
|
|
33
|
+
----------
|
|
34
|
+
colmap : `dict`, optional
|
|
35
|
+
A dictionary with a mapping of column names.
|
|
36
|
+
runName : `str`, optional
|
|
37
|
+
The name of the simulated survey.
|
|
38
|
+
extraSql : `str`, optional
|
|
39
|
+
Additional constraint to add to any sql constraints.
|
|
40
|
+
extraInfoLabel : `str`, optional
|
|
41
|
+
Additional info_label to add before any below (i.e. "WFD").
|
|
42
|
+
slicer : `rubin_sim.maf.slicer` or None, optional
|
|
43
|
+
Optionally, use something other than an nside=64 healpix slicer
|
|
44
|
+
runLength : `float`, optional
|
|
45
|
+
Length of the simulated survey, for scaling values for the plot limits.
|
|
46
|
+
|
|
47
|
+
Returns
|
|
48
|
+
-------
|
|
49
|
+
metric_bundleDict : `dict` of `maf.MetricBundle`
|
|
50
|
+
"""
|
|
51
|
+
if colmap is None:
|
|
52
|
+
colmap = col_map_dict()
|
|
53
|
+
bundleList = []
|
|
54
|
+
|
|
55
|
+
subgroup = extraInfoLabel
|
|
56
|
+
if subgroup is None:
|
|
57
|
+
subgroup = "All visits"
|
|
58
|
+
|
|
59
|
+
raCol = colmap["ra"]
|
|
60
|
+
decCol = colmap["dec"]
|
|
61
|
+
degrees = colmap["raDecDeg"]
|
|
62
|
+
# Set up basic all and per filter sql constraints.
|
|
63
|
+
filterlist, colors, orders, sqls, info_label = filter_list(
|
|
64
|
+
all=True, extra_sql=extraSql, extra_info_label=extraInfoLabel
|
|
65
|
+
)
|
|
66
|
+
# Set up some values to make nicer looking plots.
|
|
67
|
+
benchmarkVals = mafUtils.scale_benchmarks(runLength, benchmark="design")
|
|
68
|
+
# Check that nvisits is not set to zero (for very short run length).
|
|
69
|
+
for f in benchmarkVals["nvisits"]:
|
|
70
|
+
if benchmarkVals["nvisits"][f] == 0:
|
|
71
|
+
print("Updating benchmark nvisits value in %s to be nonzero" % (f))
|
|
72
|
+
benchmarkVals["nvisits"][f] = 1
|
|
73
|
+
benchmarkVals["coaddedDepth"] = mafUtils.calc_coadded_depth(
|
|
74
|
+
benchmarkVals["nvisits"], benchmarkVals["singleVisitDepth"]
|
|
75
|
+
)
|
|
76
|
+
# Scale the n_visit ranges for the runLength.
|
|
77
|
+
nvisitsRange = {
|
|
78
|
+
"u": [20, 80],
|
|
79
|
+
"g": [50, 150],
|
|
80
|
+
"r": [100, 250],
|
|
81
|
+
"i": [100, 250],
|
|
82
|
+
"z": [100, 300],
|
|
83
|
+
"y": [100, 300],
|
|
84
|
+
"all": [700, 1200],
|
|
85
|
+
}
|
|
86
|
+
scale = runLength / 10.0
|
|
87
|
+
for f in nvisitsRange:
|
|
88
|
+
for i in [0, 1]:
|
|
89
|
+
nvisitsRange[f][i] = int(np.floor(nvisitsRange[f][i] * scale))
|
|
90
|
+
|
|
91
|
+
# Generate Nvisit maps in all and per filters
|
|
92
|
+
displayDict = {"group": "Nvisits Maps", "subgroup": subgroup}
|
|
93
|
+
metric = metrics.CountMetric(colmap["mjd"], metric_name="NVisits", units="")
|
|
94
|
+
|
|
95
|
+
if slicer is None:
|
|
96
|
+
slicer = slicers.HealpixSlicer(nside=64, lat_col=decCol, lon_col=raCol, lat_lon_deg=degrees)
|
|
97
|
+
slicerDust = slicers.HealpixSlicer(
|
|
98
|
+
nside=64,
|
|
99
|
+
lat_col=decCol,
|
|
100
|
+
lon_col=raCol,
|
|
101
|
+
lat_lon_deg=degrees,
|
|
102
|
+
use_cache=False,
|
|
103
|
+
)
|
|
104
|
+
else:
|
|
105
|
+
# If there is already a slicer set up, ensure we have one for dust
|
|
106
|
+
# which is NOT using cache.
|
|
107
|
+
slicerDust = copy.deepcopy(slicer)
|
|
108
|
+
slicerDust.use_cache = False
|
|
109
|
+
|
|
110
|
+
for f in filterlist:
|
|
111
|
+
sql = sqls[f]
|
|
112
|
+
displayDict["caption"] = f"Number of visits per healpix in {info_label[f]}."
|
|
113
|
+
displayDict["order"] = orders[f]
|
|
114
|
+
bin_size = 2
|
|
115
|
+
if f == "all":
|
|
116
|
+
bin_size = 5
|
|
117
|
+
plotDict = {
|
|
118
|
+
"x_min": nvisitsRange[f][0],
|
|
119
|
+
"x_max": nvisitsRange[f][1],
|
|
120
|
+
"color_min": nvisitsRange[f][0],
|
|
121
|
+
"color_max": nvisitsRange[f][1],
|
|
122
|
+
"bin_size": bin_size,
|
|
123
|
+
"color": colors[f],
|
|
124
|
+
}
|
|
125
|
+
bundle = mb.MetricBundle(
|
|
126
|
+
metric,
|
|
127
|
+
slicer,
|
|
128
|
+
sql,
|
|
129
|
+
info_label=info_label[f],
|
|
130
|
+
display_dict=displayDict,
|
|
131
|
+
plot_dict=plotDict,
|
|
132
|
+
summary_metrics=standard_summary(),
|
|
133
|
+
)
|
|
134
|
+
bundleList.append(bundle)
|
|
135
|
+
|
|
136
|
+
# Generate Coadded depth maps per filter
|
|
137
|
+
displayDict = {"group": "Coadded M5 Maps", "subgroup": subgroup}
|
|
138
|
+
metric = metrics.Coaddm5Metric(m5_col=colmap["fiveSigmaDepth"], metric_name="CoaddM5")
|
|
139
|
+
|
|
140
|
+
for f in filterlist:
|
|
141
|
+
# Skip "all" for coadded depth.
|
|
142
|
+
if f == "all":
|
|
143
|
+
continue
|
|
144
|
+
sql = sqls[f]
|
|
145
|
+
displayDict["caption"] = f"Coadded depth per healpix in {info_label[f]}."
|
|
146
|
+
displayDict["caption"] += " More positive numbers indicate fainter limiting magnitudes."
|
|
147
|
+
displayDict["order"] = orders[f]
|
|
148
|
+
plotDict = {
|
|
149
|
+
"percentile_clip": 98,
|
|
150
|
+
"color": colors[f],
|
|
151
|
+
}
|
|
152
|
+
bundle = mb.MetricBundle(
|
|
153
|
+
metric,
|
|
154
|
+
slicer,
|
|
155
|
+
sql,
|
|
156
|
+
info_label=info_label[f],
|
|
157
|
+
display_dict=displayDict,
|
|
158
|
+
plot_dict=plotDict,
|
|
159
|
+
summary_metrics=standard_summary(),
|
|
160
|
+
)
|
|
161
|
+
bundleList.append(bundle)
|
|
162
|
+
|
|
163
|
+
# Add Coadded depth maps per filter WITH extragalactic extinction added
|
|
164
|
+
displayDict = {"group": "Extragalactic Coadded M5 Maps", "subgroup": subgroup}
|
|
165
|
+
metric = metrics.ExgalM5(m5_col=colmap["fiveSigmaDepth"], metric_name="Exgal_CoaddM5")
|
|
166
|
+
|
|
167
|
+
for f in filterlist:
|
|
168
|
+
# Skip "all" for coadded depth.
|
|
169
|
+
if f == "all":
|
|
170
|
+
continue
|
|
171
|
+
sql = sqls[f]
|
|
172
|
+
displayDict["caption"] = (
|
|
173
|
+
"Coadded depth per healpix for extragalactic purposes "
|
|
174
|
+
"(i.e. combined with dust extinction maps), "
|
|
175
|
+
f"in {info_label[f]}."
|
|
176
|
+
)
|
|
177
|
+
displayDict["caption"] += " More positive numbers indicate fainter limiting magnitudes."
|
|
178
|
+
displayDict["order"] = orders[f]
|
|
179
|
+
plotDict = {
|
|
180
|
+
"percentile_clip": 90,
|
|
181
|
+
"color": colors[f],
|
|
182
|
+
}
|
|
183
|
+
bundle = mb.MetricBundle(
|
|
184
|
+
metric,
|
|
185
|
+
slicerDust,
|
|
186
|
+
sql,
|
|
187
|
+
info_label=info_label[f],
|
|
188
|
+
display_dict=displayDict,
|
|
189
|
+
plot_dict=plotDict,
|
|
190
|
+
summary_metrics=standard_summary(),
|
|
191
|
+
)
|
|
192
|
+
bundleList.append(bundle)
|
|
193
|
+
|
|
194
|
+
# Set the run_name for all bundles and return the bundleDict.
|
|
195
|
+
for b in bundleList:
|
|
196
|
+
b.set_run_name(runName)
|
|
197
|
+
return mb.make_bundles_dict_from_list(bundleList)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def tEffMetrics(
|
|
201
|
+
colmap=None,
|
|
202
|
+
runName="opsim",
|
|
203
|
+
extraSql=None,
|
|
204
|
+
extraInfoLabel=None,
|
|
205
|
+
slicer=None,
|
|
206
|
+
):
|
|
207
|
+
"""Generate a series of Teff metrics.
|
|
208
|
+
Teff total, per night, and sky maps (all and per filter).
|
|
209
|
+
|
|
210
|
+
Parameters
|
|
211
|
+
----------
|
|
212
|
+
colmap : `dict`, optional
|
|
213
|
+
A dictionary with a mapping of column names.
|
|
214
|
+
runName : `str`, optional
|
|
215
|
+
The name of the simulated survey.
|
|
216
|
+
extraSql : `str`, optional
|
|
217
|
+
Additional constraint to add to any sql constraints.
|
|
218
|
+
extraInfoLabel : `str`, optional
|
|
219
|
+
Additional info_label to add before any below (i.e. "WFD").
|
|
220
|
+
slicer : `rubin_sim.maf.BaseSlicer` or None, optional
|
|
221
|
+
Optionally, use something other than an nside=64 healpix slicer
|
|
222
|
+
|
|
223
|
+
Returns
|
|
224
|
+
-------
|
|
225
|
+
metric_bundleDict : `dict` of `maf.MetricBundle`
|
|
226
|
+
"""
|
|
227
|
+
if colmap is None:
|
|
228
|
+
colmap = col_map_dict()
|
|
229
|
+
bundleList = []
|
|
230
|
+
|
|
231
|
+
subgroup = extraInfoLabel
|
|
232
|
+
if subgroup is None:
|
|
233
|
+
subgroup = "All visits"
|
|
234
|
+
|
|
235
|
+
raCol = colmap["ra"]
|
|
236
|
+
decCol = colmap["dec"]
|
|
237
|
+
degrees = colmap["raDecDeg"]
|
|
238
|
+
|
|
239
|
+
if slicer is not None:
|
|
240
|
+
skyslicer = slicer
|
|
241
|
+
else:
|
|
242
|
+
skyslicer = slicers.HealpixSlicer(nside=64, lat_col=decCol, lon_col=raCol, lat_lon_deg=degrees)
|
|
243
|
+
|
|
244
|
+
# Set up basic all and per filter sql constraints.
|
|
245
|
+
filterlist, colors, orders, sqls, info_label = filter_list(
|
|
246
|
+
all=True, extra_sql=extraSql, extra_info_label=extraInfoLabel
|
|
247
|
+
)
|
|
248
|
+
if info_label["all"] is None:
|
|
249
|
+
info_label["all"] = "All visits"
|
|
250
|
+
|
|
251
|
+
# Total Teff and normalized Teff.
|
|
252
|
+
displayDict = {"group": "T_eff Summary", "subgroup": subgroup}
|
|
253
|
+
displayDict["caption"] = "Total effective time of the survey (see Teff metric)."
|
|
254
|
+
displayDict["order"] = 0
|
|
255
|
+
metric = metrics.SumMetric(col="t_eff", metric_name="Total Teff")
|
|
256
|
+
slicer = slicers.UniSlicer()
|
|
257
|
+
bundle = mb.MetricBundle(
|
|
258
|
+
metric,
|
|
259
|
+
slicer,
|
|
260
|
+
constraint=sqls["all"],
|
|
261
|
+
display_dict=displayDict,
|
|
262
|
+
info_label=info_label["all"],
|
|
263
|
+
)
|
|
264
|
+
bundleList.append(bundle)
|
|
265
|
+
|
|
266
|
+
displayDict["caption"] = "Normalized total effective time of the survey (see Teff metric)."
|
|
267
|
+
displayDict["order"] = 1
|
|
268
|
+
metric = metrics.MeanMetric(col="t_eff", metric_name="Normalized Teff")
|
|
269
|
+
normalized_teff_stacker = stackers.TeffStacker(normed=True)
|
|
270
|
+
slicer = slicers.UniSlicer()
|
|
271
|
+
bundle = mb.MetricBundle(
|
|
272
|
+
metric,
|
|
273
|
+
slicer,
|
|
274
|
+
constraint=sqls["all"],
|
|
275
|
+
stacker_list=[normalized_teff_stacker],
|
|
276
|
+
display_dict=displayDict,
|
|
277
|
+
info_label=info_label["all"],
|
|
278
|
+
)
|
|
279
|
+
bundleList.append(bundle)
|
|
280
|
+
|
|
281
|
+
# Generate Teff maps in all and per filters
|
|
282
|
+
displayDict = {"group": "T_eff Maps", "subgroup": subgroup}
|
|
283
|
+
|
|
284
|
+
metric = metrics.MeanMetric(col="t_eff", metric_name="Normalized Teff")
|
|
285
|
+
normalized_teff_stacker = stackers.TeffStacker(normed=True)
|
|
286
|
+
for f in filterlist:
|
|
287
|
+
displayDict["caption"] = "Normalized effective time of the survey, for %s" % info_label[f]
|
|
288
|
+
displayDict["order"] = orders[f]
|
|
289
|
+
plotDict = {"color": colors[f]}
|
|
290
|
+
bundle = mb.MetricBundle(
|
|
291
|
+
metric,
|
|
292
|
+
skyslicer,
|
|
293
|
+
sqls[f],
|
|
294
|
+
stacker_list=[normalized_teff_stacker],
|
|
295
|
+
info_label=info_label[f],
|
|
296
|
+
display_dict=displayDict,
|
|
297
|
+
plot_dict=plotDict,
|
|
298
|
+
summary_metrics=standard_summary(),
|
|
299
|
+
)
|
|
300
|
+
bundleList.append(bundle)
|
|
301
|
+
|
|
302
|
+
# Set the run_name for all bundles and return the bundleDict.
|
|
303
|
+
for b in bundleList:
|
|
304
|
+
b.set_run_name(runName)
|
|
305
|
+
return mb.make_bundles_dict_from_list(bundleList)
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
def nvisitsPerNight(
|
|
309
|
+
colmap=None,
|
|
310
|
+
runName="opsim",
|
|
311
|
+
binNights=1,
|
|
312
|
+
extraSql=None,
|
|
313
|
+
extraInfoLabel=None,
|
|
314
|
+
subgroup=None,
|
|
315
|
+
):
|
|
316
|
+
"""Count the number of visits per night through the survey.
|
|
317
|
+
|
|
318
|
+
Parameters
|
|
319
|
+
----------
|
|
320
|
+
colmap : `dict` or None, optional
|
|
321
|
+
A dictionary with a mapping of column names.
|
|
322
|
+
runName : `str`, optional
|
|
323
|
+
The name of the simulated survey. Default is "opsim".
|
|
324
|
+
binNights : `int`, optional
|
|
325
|
+
Number of nights to count in each bin.
|
|
326
|
+
extraSql : `str` or None, optional
|
|
327
|
+
Additional constraint to add to any sql constraints.
|
|
328
|
+
extraInfoLabel : `str` or None, optional
|
|
329
|
+
Additional info_label to add before any below (i.e. "WFD").
|
|
330
|
+
subgroup : `str` or None, optional
|
|
331
|
+
Use this for the 'subgroup' in the display_dict, instead of info_label.
|
|
332
|
+
|
|
333
|
+
Returns
|
|
334
|
+
-------
|
|
335
|
+
metric_bundleDict : `dict` of `maf.MetricBundle`
|
|
336
|
+
"""
|
|
337
|
+
if colmap is None:
|
|
338
|
+
colmap = col_map_dict()
|
|
339
|
+
|
|
340
|
+
subgroup = subgroup
|
|
341
|
+
if subgroup is None:
|
|
342
|
+
subgroup = extraInfoLabel
|
|
343
|
+
if subgroup is None:
|
|
344
|
+
subgroup = "All visits"
|
|
345
|
+
|
|
346
|
+
infoCaption = extraInfoLabel
|
|
347
|
+
if extraInfoLabel is None:
|
|
348
|
+
if extraSql is not None:
|
|
349
|
+
infoCaption = extraSql
|
|
350
|
+
else:
|
|
351
|
+
infoCaption = "all visits"
|
|
352
|
+
|
|
353
|
+
bundleList = []
|
|
354
|
+
|
|
355
|
+
displayDict = {"group": "Nvisits Per Night", "subgroup": subgroup}
|
|
356
|
+
displayDict["caption"] = "Number of visits per night for %s." % (infoCaption)
|
|
357
|
+
displayDict["order"] = 0
|
|
358
|
+
metric = metrics.CountMetric(colmap["mjd"], metric_name="Nvisits")
|
|
359
|
+
slicer = slicers.OneDSlicer(slice_col_name=colmap["night"], bin_size=binNights)
|
|
360
|
+
bundle = mb.MetricBundle(
|
|
361
|
+
metric,
|
|
362
|
+
slicer,
|
|
363
|
+
extraSql,
|
|
364
|
+
info_label=infoCaption,
|
|
365
|
+
display_dict=displayDict,
|
|
366
|
+
summary_metrics=standard_summary(),
|
|
367
|
+
)
|
|
368
|
+
bundleList.append(bundle)
|
|
369
|
+
|
|
370
|
+
# Set the run_name for all bundles and return the bundleDict.
|
|
371
|
+
for b in bundleList:
|
|
372
|
+
b.set_run_name(runName)
|
|
373
|
+
return mb.make_bundles_dict_from_list(bundleList)
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
def nvisitsPerSubset(
|
|
377
|
+
colmap=None,
|
|
378
|
+
runName="opsim",
|
|
379
|
+
binNights=1,
|
|
380
|
+
constraint=None,
|
|
381
|
+
footprintConstraint=None,
|
|
382
|
+
extraInfoLabel=None,
|
|
383
|
+
):
|
|
384
|
+
"""Look at the distribution of a given sql constraint or
|
|
385
|
+
footprint constraint's visits, total number and distribution over time
|
|
386
|
+
(# per night), if possible.
|
|
387
|
+
|
|
388
|
+
Parameters
|
|
389
|
+
----------
|
|
390
|
+
opsdb : `str` or database connection
|
|
391
|
+
Name of the opsim sqlite database.
|
|
392
|
+
colmap : `dict` or None, optional
|
|
393
|
+
A dictionary with a mapping of column names.
|
|
394
|
+
runName : `str`, optional
|
|
395
|
+
The name of the simulated survey.
|
|
396
|
+
binNights : `int`, optional
|
|
397
|
+
Number of nights to count in each bin.
|
|
398
|
+
constraint : `str` or None, optional
|
|
399
|
+
SQL constraint to add to all metrics.
|
|
400
|
+
This would be the way to select only a given "Note".
|
|
401
|
+
footprintConstraint : `np.ndarray` or None, optional
|
|
402
|
+
Footprint to look for visits within
|
|
403
|
+
(and then identify via WFDlabelStacker).
|
|
404
|
+
The footprint = a full length heapix array, filled with 0/1 values.
|
|
405
|
+
extraInfoLabel : `str` or None, optional
|
|
406
|
+
Additional info_label to add before any below (i.e. "WFD").
|
|
407
|
+
|
|
408
|
+
Returns
|
|
409
|
+
-------
|
|
410
|
+
metric_bundleDict : `dict` of `rubin_sim.maf.MetricBundle`
|
|
411
|
+
"""
|
|
412
|
+
if colmap is None:
|
|
413
|
+
colmap = col_map_dict()
|
|
414
|
+
|
|
415
|
+
bdict = {}
|
|
416
|
+
bundleList = []
|
|
417
|
+
|
|
418
|
+
if footprintConstraint is None:
|
|
419
|
+
if extraInfoLabel is None and constraint is not None:
|
|
420
|
+
extraInfoLabel += " %s" % constraint
|
|
421
|
+
# Nvisits per night, this constraint.
|
|
422
|
+
bdict.update(
|
|
423
|
+
nvisitsPerNight(
|
|
424
|
+
colmap=colmap,
|
|
425
|
+
runName=runName,
|
|
426
|
+
binNights=binNights,
|
|
427
|
+
extraSql=constraint,
|
|
428
|
+
extraInfoLabel=extraInfoLabel,
|
|
429
|
+
)
|
|
430
|
+
)
|
|
431
|
+
# Nvisits total, this constraint.
|
|
432
|
+
metric = metrics.CountMetric(colmap["mjd"], metric_name="Nvisits")
|
|
433
|
+
slicer = slicers.UniSlicer()
|
|
434
|
+
displayDict = {
|
|
435
|
+
"group": "Nvisit Summary",
|
|
436
|
+
"subgroup": extraInfoLabel,
|
|
437
|
+
}
|
|
438
|
+
displayDict["caption"] = f"Total number of visits for {extraInfoLabel}."
|
|
439
|
+
bundle = mb.MetricBundle(
|
|
440
|
+
metric,
|
|
441
|
+
slicer,
|
|
442
|
+
constraint,
|
|
443
|
+
info_label=extraInfoLabel,
|
|
444
|
+
display_dict=displayDict,
|
|
445
|
+
)
|
|
446
|
+
bundleList.append(bundle)
|
|
447
|
+
|
|
448
|
+
# Or count the total number of visits that contribute
|
|
449
|
+
# towards a given footprint
|
|
450
|
+
if footprintConstraint is not None:
|
|
451
|
+
# Set up a stacker to use this footprint to label visits
|
|
452
|
+
if extraInfoLabel is None:
|
|
453
|
+
extraInfoLabel = "Footprint"
|
|
454
|
+
footprintStacker = stackers.WFDlabelStacker(
|
|
455
|
+
footprint=footprintConstraint,
|
|
456
|
+
fp_threshold=0.4,
|
|
457
|
+
area_id_name=extraInfoLabel,
|
|
458
|
+
exclude_dd=True,
|
|
459
|
+
ra_col=colmap["ra"],
|
|
460
|
+
dec_col=colmap["dec"],
|
|
461
|
+
note_col=colmap["scheduler_note"],
|
|
462
|
+
)
|
|
463
|
+
metric = metrics.CountSubsetMetric(
|
|
464
|
+
col="area_id", subset=extraInfoLabel, units="#", metric_name="Nvisits"
|
|
465
|
+
)
|
|
466
|
+
slicer = slicers.UniSlicer()
|
|
467
|
+
displayDict = {
|
|
468
|
+
"group": "Nvisit Summary",
|
|
469
|
+
"subgroup": extraInfoLabel,
|
|
470
|
+
"caption": f"Visits within footprint {extraInfoLabel}.",
|
|
471
|
+
}
|
|
472
|
+
bundle = mb.MetricBundle(
|
|
473
|
+
metric,
|
|
474
|
+
slicer,
|
|
475
|
+
constraint,
|
|
476
|
+
stacker_list=[footprintStacker],
|
|
477
|
+
info_label=extraInfoLabel,
|
|
478
|
+
display_dict=displayDict,
|
|
479
|
+
)
|
|
480
|
+
bundleList.append(bundle)
|
|
481
|
+
|
|
482
|
+
for b in bundleList:
|
|
483
|
+
b.set_run_name(runName)
|
|
484
|
+
bdict.update(mb.make_bundles_dict_from_list(bundleList))
|
|
485
|
+
return bdict
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
__all__ = ("add_run",)
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
|
|
5
|
+
from . import add_run_to_database
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def add_run():
|
|
9
|
+
parser = argparse.ArgumentParser(description="Add a MAF run to the tracking database.")
|
|
10
|
+
parser.add_argument("maf_dir", type=str, help="Directory containing MAF outputs.")
|
|
11
|
+
parser.add_argument("-c", "--maf_comment", type=str, default=None, help="Comment on MAF analysis.")
|
|
12
|
+
parser.add_argument("--group", type=str, default=None, help="Opsim Group name.")
|
|
13
|
+
parser.add_argument("--run_name", type=str, default=None, help="Run Name.")
|
|
14
|
+
parser.add_argument("--run_comment", type=str, default=None, help="Comment on OpSim run.")
|
|
15
|
+
parser.add_argument("--db_file", type=str, default="None", help="Opsim Sqlite filename")
|
|
16
|
+
defaultdb = "trackingDb_sqlite.db"
|
|
17
|
+
parser.add_argument(
|
|
18
|
+
"-t",
|
|
19
|
+
"--tracking_db",
|
|
20
|
+
type=str,
|
|
21
|
+
default=defaultdb,
|
|
22
|
+
help="Tracking database filename. Default is %s, in the current directory." % defaultdb,
|
|
23
|
+
)
|
|
24
|
+
args = parser.parse_args()
|
|
25
|
+
|
|
26
|
+
add_run_to_database(
|
|
27
|
+
maf_dir=args.maf_dir,
|
|
28
|
+
tracking_db_file=args.tracking_db,
|
|
29
|
+
run_group=args.group,
|
|
30
|
+
run_name=args.run_name,
|
|
31
|
+
run_comment=args.run_comment,
|
|
32
|
+
maf_comment=args.maf_comment,
|
|
33
|
+
db_file=args.db_file,
|
|
34
|
+
)
|