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,344 @@
|
|
|
1
|
+
"""A group of metrics that work together to evaluate season characteristics
|
|
2
|
+
(length, number, etc).
|
|
3
|
+
In addition, these support the time delay metric for strong lensing.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
__all__ = (
|
|
7
|
+
"find_season_edges",
|
|
8
|
+
"SeasonLengthMetric",
|
|
9
|
+
"CampaignLengthMetric",
|
|
10
|
+
"MeanCampaignFrequencyMetric",
|
|
11
|
+
"TdcMetric",
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
import numpy as np
|
|
15
|
+
from rubin_scheduler.utils import calc_season
|
|
16
|
+
|
|
17
|
+
from rubin_sim.phot_utils import DustValues
|
|
18
|
+
|
|
19
|
+
from .base_metric import BaseMetric
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def find_season_edges(seasons):
|
|
23
|
+
"""Given the seasons, return the indexes of each start/end of the season.
|
|
24
|
+
|
|
25
|
+
Parameters
|
|
26
|
+
----------
|
|
27
|
+
seasons : `np.ndarray`, (N,)
|
|
28
|
+
Seasons, such as calculated by calc_season.
|
|
29
|
+
Note that seasons should be sorted!!
|
|
30
|
+
|
|
31
|
+
Returns
|
|
32
|
+
-------
|
|
33
|
+
first, last : `np.ndarray`, (N,), `np.ndarray`, (N,)
|
|
34
|
+
The indexes of the first and last date in the season.
|
|
35
|
+
"""
|
|
36
|
+
int_seasons = np.floor(seasons)
|
|
37
|
+
# Get the unique seasons, so that we can separate each one
|
|
38
|
+
season_list = np.unique(int_seasons)
|
|
39
|
+
# Find the first and last observation of each season.
|
|
40
|
+
first_of_season = np.searchsorted(int_seasons, season_list)
|
|
41
|
+
last_of_season = np.searchsorted(int_seasons, season_list, side="right") - 1
|
|
42
|
+
return first_of_season, last_of_season
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class SeasonLengthMetric(BaseMetric):
|
|
46
|
+
"""Calculate the length of LSST seasons, in days.
|
|
47
|
+
|
|
48
|
+
Parameters
|
|
49
|
+
----------
|
|
50
|
+
min_exp_time : `float`, optional
|
|
51
|
+
Minimum visit exposure time to count for a 'visit', in seconds.
|
|
52
|
+
Default 20.
|
|
53
|
+
reduce_func : function, optional
|
|
54
|
+
Function that can operate on array-like structures.
|
|
55
|
+
Typically numpy function.
|
|
56
|
+
This reduces the season length in each season from 10 separate
|
|
57
|
+
values to a single value.
|
|
58
|
+
Default np.median.
|
|
59
|
+
|
|
60
|
+
Returns
|
|
61
|
+
-------
|
|
62
|
+
seasonlength : `float`
|
|
63
|
+
The (reduceFunc) of the length of each season, in days.
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
def __init__(
|
|
67
|
+
self,
|
|
68
|
+
mjd_col="observationStartMJD",
|
|
69
|
+
exp_time_col="visitExposureTime",
|
|
70
|
+
min_exp_time=16,
|
|
71
|
+
reduce_func=np.median,
|
|
72
|
+
metric_name="SeasonLength",
|
|
73
|
+
**kwargs,
|
|
74
|
+
):
|
|
75
|
+
units = "days"
|
|
76
|
+
self.mjd_col = mjd_col
|
|
77
|
+
self.exp_time_col = exp_time_col
|
|
78
|
+
self.min_exp_time = min_exp_time
|
|
79
|
+
self.reduce_func = reduce_func
|
|
80
|
+
super().__init__(
|
|
81
|
+
col=[self.mjd_col, self.exp_time_col], units=units, metric_name=metric_name, **kwargs
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
def run(self, data_slice, slice_point):
|
|
85
|
+
# Order data Slice/times and exclude visits which are too short.
|
|
86
|
+
long = np.where(data_slice[self.exp_time_col] > self.min_exp_time)
|
|
87
|
+
if len(long[0]) == 0:
|
|
88
|
+
return self.badval
|
|
89
|
+
data = np.sort(data_slice[long], order=self.mjd_col)
|
|
90
|
+
# SlicePoints ra/dec are always in radians -
|
|
91
|
+
# convert to degrees to calculate season
|
|
92
|
+
seasons = calc_season(np.degrees(slice_point["ra"]), data[self.mjd_col])
|
|
93
|
+
first_of_season, last_of_season = find_season_edges(seasons)
|
|
94
|
+
seasonlengths = data[self.mjd_col][last_of_season] - data[self.mjd_col][first_of_season]
|
|
95
|
+
result = self.reduce_func(seasonlengths)
|
|
96
|
+
return result
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class CampaignLengthMetric(BaseMetric):
|
|
100
|
+
"""Calculate the number of seasons (roughly, years) a pointing is observed.
|
|
101
|
+
|
|
102
|
+
This corresponds to the 'campaign length' for lensed quasar time delays.
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
def __init__(
|
|
106
|
+
self, mjd_col="observationStartMJD", exp_time_col="visitExposureTime", min_exp_time=20, **kwargs
|
|
107
|
+
):
|
|
108
|
+
units = ""
|
|
109
|
+
self.exp_time_col = exp_time_col
|
|
110
|
+
self.min_exp_time = min_exp_time
|
|
111
|
+
self.mjd_col = mjd_col
|
|
112
|
+
super().__init__(col=[self.mjd_col, self.exp_time_col], units=units, **kwargs)
|
|
113
|
+
|
|
114
|
+
def run(self, data_slice, slice_point):
|
|
115
|
+
# Order data Slice/times and exclude visits which are too short.
|
|
116
|
+
long = np.where(data_slice[self.exp_time_col] > self.min_exp_time)
|
|
117
|
+
if len(long[0]) == 0:
|
|
118
|
+
return self.badval
|
|
119
|
+
data = np.sort(data_slice[long], order=self.mjd_col)
|
|
120
|
+
seasons = calc_season(np.degrees(slice_point["ra"]), data[self.mjd_col])
|
|
121
|
+
int_seasons = np.floor(seasons)
|
|
122
|
+
count = len(np.unique(int_seasons))
|
|
123
|
+
return count
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class MeanCampaignFrequencyMetric(BaseMetric):
|
|
127
|
+
"""Calculate the mean separation between nights, within a season -
|
|
128
|
+
then the mean over the campaign.
|
|
129
|
+
|
|
130
|
+
Calculate per season, to avoid any influence from season gaps.
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
def __init__(
|
|
134
|
+
self,
|
|
135
|
+
mjd_col="observationStartMJD",
|
|
136
|
+
exp_time_col="visitExposureTime",
|
|
137
|
+
min_exp_time=20,
|
|
138
|
+
night_col="night",
|
|
139
|
+
**kwargs,
|
|
140
|
+
):
|
|
141
|
+
self.mjd_col = mjd_col
|
|
142
|
+
self.exp_time_col = exp_time_col
|
|
143
|
+
self.min_exp_time = min_exp_time
|
|
144
|
+
self.night_col = night_col
|
|
145
|
+
units = "nights"
|
|
146
|
+
super().__init__(col=[self.mjd_col, self.exp_time_col, self.night_col], units=units, **kwargs)
|
|
147
|
+
|
|
148
|
+
def run(self, data_slice, slice_point):
|
|
149
|
+
# Order data Slice/times and exclude visits which are too short.
|
|
150
|
+
long = np.where(data_slice[self.exp_time_col] > self.min_exp_time)
|
|
151
|
+
if len(long[0]) == 0:
|
|
152
|
+
return self.badval
|
|
153
|
+
data = np.sort(data_slice[long], order=self.mjd_col)
|
|
154
|
+
# SlicePoints ra/dec are always in radians -
|
|
155
|
+
# convert to degrees to calculate season
|
|
156
|
+
seasons = calc_season(np.degrees(slice_point["ra"]), data[self.mjd_col])
|
|
157
|
+
first_of_season, last_of_season = find_season_edges(seasons)
|
|
158
|
+
season_means = np.zeros(len(first_of_season), float)
|
|
159
|
+
for i, (first, last) in enumerate(zip(first_of_season, last_of_season)):
|
|
160
|
+
if first < last:
|
|
161
|
+
n = data[self.night_col][first : last + 1]
|
|
162
|
+
delta_nights = np.diff(np.unique(n))
|
|
163
|
+
if len(delta_nights) > 0:
|
|
164
|
+
season_means[i] = np.mean(delta_nights)
|
|
165
|
+
return np.mean(season_means)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
class TdcMetric(BaseMetric):
|
|
169
|
+
"""Calculate the Time Delay Challenge metric,
|
|
170
|
+
as described in Liao et al 2015 (https://arxiv.org/pdf/1409.1254.pdf).
|
|
171
|
+
|
|
172
|
+
This combines the MeanCampaignFrequency/MeanNightSeparation,
|
|
173
|
+
the SeasonLength, and the CampaignLength
|
|
174
|
+
metrics above, but rewritten to calculate season information only once.
|
|
175
|
+
|
|
176
|
+
cad_norm = in units of days
|
|
177
|
+
sea_norm = in units of months
|
|
178
|
+
camp_norm = in units of years
|
|
179
|
+
|
|
180
|
+
This metric also adds a requirement to achieve limiting magnitudes
|
|
181
|
+
after galactic dust extinction, in various bandpasses,
|
|
182
|
+
in order to exclude visits which are not useful for detecting quasars
|
|
183
|
+
(due to being short or having high sky brightness, etc.) and to
|
|
184
|
+
reject regions with high galactic dust extinction.
|
|
185
|
+
|
|
186
|
+
Parameters
|
|
187
|
+
----------
|
|
188
|
+
mjd_col : `str`, optional
|
|
189
|
+
Column name for mjd. Default observationStartMJD.
|
|
190
|
+
night_col : `str`, optional
|
|
191
|
+
Column name for night. Default night.
|
|
192
|
+
filter_col : `str`, optional
|
|
193
|
+
Column name for filter. Default filter.
|
|
194
|
+
m5_col : `str`, optional
|
|
195
|
+
Column name for five-sigma depth. Default fiveSigmaDepth.
|
|
196
|
+
mag_cuts : `dict`, optional
|
|
197
|
+
Dictionary with filtername:mag limit (after dust extinction).
|
|
198
|
+
Default None in kwarg.
|
|
199
|
+
Defaults set within metric:
|
|
200
|
+
{'u': 22.7, 'g': 24.1, 'r': 23.7, 'i': 23.1, 'z': 22.2, 'y': 21.4}
|
|
201
|
+
metricName : `str`, optional
|
|
202
|
+
Metric Name. Default TDC.
|
|
203
|
+
cad_norm : `float`, optional
|
|
204
|
+
Cadence normalization constant, in units of days. Default 3.
|
|
205
|
+
sea_norm : `float`, optional
|
|
206
|
+
Season normalization constant, in units of months. Default 4.
|
|
207
|
+
camp_norm : `float`, optional
|
|
208
|
+
Campaign length normalization constant, in units of years. Default 5.
|
|
209
|
+
badval : `float`, optional
|
|
210
|
+
Return this value instead of the dictionary for bad points.
|
|
211
|
+
|
|
212
|
+
Returns
|
|
213
|
+
-------
|
|
214
|
+
TDCmetrics : `dict`
|
|
215
|
+
Dictionary of values for {'rate', 'precision', 'accuracy'}
|
|
216
|
+
at this point in the sky.
|
|
217
|
+
"""
|
|
218
|
+
|
|
219
|
+
def __init__(
|
|
220
|
+
self,
|
|
221
|
+
mjd_col="observationStartMJD",
|
|
222
|
+
night_col="night",
|
|
223
|
+
filter_col="band",
|
|
224
|
+
m5_col="fiveSigmaDepth",
|
|
225
|
+
mag_cuts=None,
|
|
226
|
+
metric_name="TDC",
|
|
227
|
+
cad_norm=3.0,
|
|
228
|
+
sea_norm=4.0,
|
|
229
|
+
camp_norm=5.0,
|
|
230
|
+
badval=-999,
|
|
231
|
+
**kwargs,
|
|
232
|
+
):
|
|
233
|
+
# Save the normalization values.
|
|
234
|
+
self.cad_norm = cad_norm
|
|
235
|
+
self.sea_norm = sea_norm
|
|
236
|
+
self.camp_norm = camp_norm
|
|
237
|
+
self.mjd_col = mjd_col
|
|
238
|
+
self.m5_col = m5_col
|
|
239
|
+
self.night_col = night_col
|
|
240
|
+
self.filter_col = filter_col
|
|
241
|
+
if mag_cuts is None:
|
|
242
|
+
self.mag_cuts = {
|
|
243
|
+
"u": 22.7,
|
|
244
|
+
"g": 24.1,
|
|
245
|
+
"r": 23.7,
|
|
246
|
+
"i": 23.1,
|
|
247
|
+
"z": 22.2,
|
|
248
|
+
"y": 21.4,
|
|
249
|
+
}
|
|
250
|
+
else:
|
|
251
|
+
self.mag_cuts = mag_cuts
|
|
252
|
+
if not isinstance(self.mag_cuts, dict):
|
|
253
|
+
raise Exception("mag_cuts should be a dictionary")
|
|
254
|
+
# Set up dust map requirement
|
|
255
|
+
maps = ["DustMap"]
|
|
256
|
+
# Set the default wavelength limits for the lsst filters.
|
|
257
|
+
# These are approximately correct.
|
|
258
|
+
dust_properties = DustValues()
|
|
259
|
+
self.ax1 = dust_properties.ax1
|
|
260
|
+
super().__init__(
|
|
261
|
+
col=[self.mjd_col, self.m5_col, self.night_col, self.filter_col],
|
|
262
|
+
badval=badval,
|
|
263
|
+
maps=maps,
|
|
264
|
+
metric_name=metric_name,
|
|
265
|
+
units="%s" % ("%"),
|
|
266
|
+
**kwargs,
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
def run(self, data_slice, slice_point):
|
|
270
|
+
# Calculate dust-extinction limiting magnitudes for each visit.
|
|
271
|
+
filterlist = np.unique(data_slice[self.filter_col])
|
|
272
|
+
m5_dust = np.zeros(len(data_slice), float)
|
|
273
|
+
for f in filterlist:
|
|
274
|
+
match = np.where(data_slice[self.filter_col] == f)
|
|
275
|
+
a_x = self.ax1[f] * slice_point["ebv"]
|
|
276
|
+
m5_dust[match] = data_slice[self.m5_col][match] - a_x
|
|
277
|
+
m5_dust[match] = np.where(m5_dust[match] > self.mag_cuts[f], m5_dust[match], -999)
|
|
278
|
+
idxs = np.where(m5_dust > -998)
|
|
279
|
+
if len(idxs[0]) == 0:
|
|
280
|
+
return self.badval
|
|
281
|
+
data = np.sort(data_slice[idxs], order=self.mjd_col)
|
|
282
|
+
# SlicePoints ra/dec are always in radians -
|
|
283
|
+
# convert to degrees to calculate season
|
|
284
|
+
seasons = calc_season(np.degrees(slice_point["ra"]), data[self.mjd_col])
|
|
285
|
+
int_seasons = np.floor(seasons)
|
|
286
|
+
first_of_season, last_of_season = find_season_edges(seasons)
|
|
287
|
+
# Campaign length
|
|
288
|
+
camp = len(np.unique(int_seasons))
|
|
289
|
+
# Season length
|
|
290
|
+
seasonlengths = data[self.mjd_col][last_of_season] - data[self.mjd_col][first_of_season]
|
|
291
|
+
sea = np.median(seasonlengths)
|
|
292
|
+
# Convert to months
|
|
293
|
+
sea = sea / 30.0
|
|
294
|
+
# Campaign frequency / mean night separation
|
|
295
|
+
season_means = np.zeros(len(first_of_season), float)
|
|
296
|
+
for i, (first, last) in enumerate(zip(first_of_season, last_of_season)):
|
|
297
|
+
n = data[self.night_col][first : last + 1]
|
|
298
|
+
delta_nights = np.diff(np.unique(n))
|
|
299
|
+
if len(delta_nights) > 0:
|
|
300
|
+
season_means[i] = np.mean(delta_nights)
|
|
301
|
+
cad = np.mean(season_means)
|
|
302
|
+
# Evaluate precision and accuracy for TDC
|
|
303
|
+
if sea == 0 or cad == 0 or camp == 0:
|
|
304
|
+
return self.badval
|
|
305
|
+
else:
|
|
306
|
+
accuracy = 0.06 * (self.sea_norm / sea) * (self.camp_norm / camp) ** (1.1)
|
|
307
|
+
precision = (
|
|
308
|
+
4.0
|
|
309
|
+
* (cad / self.cad_norm) ** (0.7)
|
|
310
|
+
* (self.sea_norm / sea) ** (0.3)
|
|
311
|
+
* (self.camp_norm / camp) ** (0.6)
|
|
312
|
+
)
|
|
313
|
+
rate = (
|
|
314
|
+
30.0
|
|
315
|
+
* (self.cad_norm / cad) ** (0.4)
|
|
316
|
+
* (sea / self.sea_norm) ** (0.8)
|
|
317
|
+
* (self.camp_norm / camp) ** (0.2)
|
|
318
|
+
)
|
|
319
|
+
return {
|
|
320
|
+
"accuracy": accuracy,
|
|
321
|
+
"precision": precision,
|
|
322
|
+
"rate": rate,
|
|
323
|
+
"cadence (days)": cad,
|
|
324
|
+
"season (months)": sea,
|
|
325
|
+
"campaign": camp,
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
def reduce_accuracy(self, metric_value):
|
|
329
|
+
return metric_value["accuracy"]
|
|
330
|
+
|
|
331
|
+
def reduce_precision(self, metric_value):
|
|
332
|
+
return metric_value["precision"]
|
|
333
|
+
|
|
334
|
+
def reduce_rate(self, metric_value):
|
|
335
|
+
return metric_value["rate"]
|
|
336
|
+
|
|
337
|
+
def reduce_cadence(self, metric_value):
|
|
338
|
+
return metric_value["cadence (days)"]
|
|
339
|
+
|
|
340
|
+
def reduce_season(self, metric_value):
|
|
341
|
+
return metric_value["season (months)"]
|
|
342
|
+
|
|
343
|
+
def reduce_campaign(self, metric_value):
|
|
344
|
+
return metric_value["campaign"]
|