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,249 @@
|
|
|
1
|
+
__all__ = ("GRBTransientMetric",)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
import rubin_sim.maf.metrics as metrics
|
|
7
|
+
|
|
8
|
+
# Gamma-ray burst afterglow metric
|
|
9
|
+
# ebellm@caltech.edu
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class GRBTransientMetric(metrics.BaseMetric):
|
|
13
|
+
"""Evaluate the likelihood of detecting a GRB optical counterpart.
|
|
14
|
+
|
|
15
|
+
Detections for an on-axis GRB afterglows decaying as
|
|
16
|
+
F(t) = F(1min)((t-t0)/1min)^-alpha. No jet break, for now.
|
|
17
|
+
|
|
18
|
+
Derived from TransientMetric, but calculated with reduce functions to
|
|
19
|
+
enable-band specific counts.
|
|
20
|
+
Burst parameters taken from 2011PASP..123.1034J.
|
|
21
|
+
|
|
22
|
+
Simplifications:
|
|
23
|
+
* no color variation or evolution encoded yet.
|
|
24
|
+
* no jet breaks.
|
|
25
|
+
* not treating off-axis events.
|
|
26
|
+
|
|
27
|
+
Parameters
|
|
28
|
+
----------
|
|
29
|
+
alpha : `float`,
|
|
30
|
+
temporal decay index
|
|
31
|
+
Default = 1.0
|
|
32
|
+
apparent_mag_1min_mean : `float`,
|
|
33
|
+
mean magnitude at 1 minute after burst
|
|
34
|
+
Default = 15.35
|
|
35
|
+
apparent_mag_1min_sigma : `float`,
|
|
36
|
+
std of magnitudes at 1 minute after burst
|
|
37
|
+
Default = 1.59
|
|
38
|
+
trans_duration : `float`, optional
|
|
39
|
+
How long the transient lasts (days). Default 10.
|
|
40
|
+
survey_duration : `float`, optional
|
|
41
|
+
Length of survey (years).
|
|
42
|
+
Default 10.
|
|
43
|
+
survey_start : `float`, optional
|
|
44
|
+
MJD for the survey start date.
|
|
45
|
+
Default None (uses the time of the first observation).
|
|
46
|
+
detect_m5_plus : `float`, optional
|
|
47
|
+
An observation will be used if the light curve magnitude is brighter
|
|
48
|
+
than m5+detect_m5_plus.
|
|
49
|
+
Default 0.
|
|
50
|
+
n_per_filter : `int`, optional
|
|
51
|
+
Number of separate detections of the light curve above the
|
|
52
|
+
detect_m5_plus theshold (in a single filter) for the light curve
|
|
53
|
+
to be counted.
|
|
54
|
+
Default 1.
|
|
55
|
+
n_filters : `int`, optional
|
|
56
|
+
Number of filters that need to be observed n_per_filter times,
|
|
57
|
+
with differences min_delta_mag,
|
|
58
|
+
for an object to be counted as detected.
|
|
59
|
+
Default 1.
|
|
60
|
+
min_delta_mag : `float`, optional
|
|
61
|
+
magnitude difference between detections in the same filter required
|
|
62
|
+
for second+ detection to be counted.
|
|
63
|
+
For example, if min_delta_mag = 0.1 mag and two consecutive observations
|
|
64
|
+
differ only by 0.05 mag, those two detections will only count as one.
|
|
65
|
+
(Better would be a SNR-based discrimination of lightcurve change.)
|
|
66
|
+
Default 0.
|
|
67
|
+
n_phase_check : `int`, optional
|
|
68
|
+
Sets the number of phases that should be checked.
|
|
69
|
+
One can imagine pathological cadences where many objects pass the
|
|
70
|
+
detection criteria, but would not if the observations were offset
|
|
71
|
+
by a phase-shift.
|
|
72
|
+
Default 1.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
def __init__(
|
|
76
|
+
self,
|
|
77
|
+
alpha=1,
|
|
78
|
+
apparent_mag_1min_mean=15.35,
|
|
79
|
+
apparent_mag_1min_sigma=1.59,
|
|
80
|
+
metric_name="GRBTransientMetric",
|
|
81
|
+
mjd_col="expMJD",
|
|
82
|
+
m5_col="fiveSigmaDepth",
|
|
83
|
+
filter_col="band",
|
|
84
|
+
trans_duration=10.0,
|
|
85
|
+
survey_duration=10.0,
|
|
86
|
+
survey_start=None,
|
|
87
|
+
detect_m5_plus=0.0,
|
|
88
|
+
n_per_filter=1,
|
|
89
|
+
n_filters=1,
|
|
90
|
+
min_delta_mag=0.0,
|
|
91
|
+
n_phase_check=1,
|
|
92
|
+
**kwargs,
|
|
93
|
+
):
|
|
94
|
+
self.mjd_col = mjd_col
|
|
95
|
+
self.m5_col = m5_col
|
|
96
|
+
self.filter_col = filter_col
|
|
97
|
+
super(GRBTransientMetric, self).__init__(
|
|
98
|
+
col=[self.mjd_col, self.m5_col, self.filter_col],
|
|
99
|
+
units="Fraction Detected",
|
|
100
|
+
metric_name=metric_name,
|
|
101
|
+
**kwargs,
|
|
102
|
+
)
|
|
103
|
+
self.alpha = alpha
|
|
104
|
+
self.apparent_mag_1min_mean = apparent_mag_1min_mean
|
|
105
|
+
self.apparent_mag_1min_sigma = apparent_mag_1min_sigma
|
|
106
|
+
self.trans_duration = trans_duration
|
|
107
|
+
self.survey_duration = survey_duration
|
|
108
|
+
self.survey_start = survey_start
|
|
109
|
+
self.detect_m5_plus = detect_m5_plus
|
|
110
|
+
self.n_per_filter = n_per_filter
|
|
111
|
+
self.n_filters = n_filters
|
|
112
|
+
self.min_delta_mag = min_delta_mag
|
|
113
|
+
self.n_phase_check = n_phase_check
|
|
114
|
+
self.peak_time = 0.0
|
|
115
|
+
self.reduce_order = {
|
|
116
|
+
"Bandu": 0,
|
|
117
|
+
"Bandg": 1,
|
|
118
|
+
"Bandr": 2,
|
|
119
|
+
"Bandi": 3,
|
|
120
|
+
"Bandz": 4,
|
|
121
|
+
"Bandy": 5,
|
|
122
|
+
"Band1FiltAvg": 6,
|
|
123
|
+
"BandanyNfilters": 7,
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
def light_curve(self, time, filters):
|
|
127
|
+
"""
|
|
128
|
+
given the times and filters of an observation, return the magnitudes.
|
|
129
|
+
"""
|
|
130
|
+
|
|
131
|
+
lc_mags = np.zeros(time.size, dtype=float)
|
|
132
|
+
|
|
133
|
+
decline = np.where(time > self.peak_time)
|
|
134
|
+
apparent_mag_1min = np.random.randn() * self.apparent_mag_1min_sigma + self.apparent_mag_1min_mean
|
|
135
|
+
lc_mags[decline] += apparent_mag_1min + self.alpha * 2.5 * np.log10(
|
|
136
|
+
(time[decline] - self.peak_time) * 24.0 * 60.0
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
# for key in self.peaks.keys():
|
|
140
|
+
# fMatch = np.where(filters == key)
|
|
141
|
+
# lc_mags[fMatch] += self.peaks[key]
|
|
142
|
+
|
|
143
|
+
return lc_mags
|
|
144
|
+
|
|
145
|
+
def run(self, data_slice, slice_point=None):
|
|
146
|
+
"""
|
|
147
|
+
Calculate the detectability of a transient with the
|
|
148
|
+
specified lightcurve.
|
|
149
|
+
"""
|
|
150
|
+
# Total number of transients that could go off back-to-back
|
|
151
|
+
n_trans_max = np.floor(self.survey_duration / (self.trans_duration / 365.25))
|
|
152
|
+
tshifts = np.arange(self.n_phase_check) * self.trans_duration / float(self.n_phase_check)
|
|
153
|
+
n_trans_max = 0
|
|
154
|
+
for tshift in tshifts:
|
|
155
|
+
# Compute the total number of back-to-back transients
|
|
156
|
+
# are possible to detect
|
|
157
|
+
# given the survey duration and the transient duration.
|
|
158
|
+
n_trans_max += np.floor(self.survey_duration / (self.trans_duration / 365.25))
|
|
159
|
+
if tshift != 0:
|
|
160
|
+
n_trans_max -= 1
|
|
161
|
+
if self.survey_start is None:
|
|
162
|
+
survey_start = data_slice[self.mjd_col].min()
|
|
163
|
+
time = (data_slice[self.mjd_col] - survey_start + tshift) % self.trans_duration
|
|
164
|
+
|
|
165
|
+
# Which lightcurve does each point belong to
|
|
166
|
+
lc_number = np.floor((data_slice[self.mjd_col] - survey_start) / self.trans_duration)
|
|
167
|
+
|
|
168
|
+
lc_mags = self.light_curve(time, data_slice[self.filter_col])
|
|
169
|
+
|
|
170
|
+
# How many criteria needs to be passed
|
|
171
|
+
detect_thresh = 0
|
|
172
|
+
|
|
173
|
+
# Flag points that are above the SNR limit
|
|
174
|
+
detected = np.zeros(data_slice.size, dtype=int)
|
|
175
|
+
detected[np.where(lc_mags < data_slice[self.m5_col] + self.detect_m5_plus)] += 1
|
|
176
|
+
|
|
177
|
+
bandcounter = {
|
|
178
|
+
"u": 0,
|
|
179
|
+
"g": 0,
|
|
180
|
+
"r": 0,
|
|
181
|
+
"i": 0,
|
|
182
|
+
"z": 0,
|
|
183
|
+
"y": 0,
|
|
184
|
+
"any": 0,
|
|
185
|
+
} # define zeroed out counter
|
|
186
|
+
|
|
187
|
+
# make sure things are sorted by time
|
|
188
|
+
ord = np.argsort(data_slice[self.mjd_col])
|
|
189
|
+
data_slice = data_slice[ord]
|
|
190
|
+
detected = detected[ord]
|
|
191
|
+
lc_number = lc_number[ord]
|
|
192
|
+
lc_mags = lc_mags[ord]
|
|
193
|
+
ulc_number = np.unique(lc_number)
|
|
194
|
+
left = np.searchsorted(lc_number, ulc_number)
|
|
195
|
+
right = np.searchsorted(lc_number, ulc_number, side="right")
|
|
196
|
+
detect_thresh += self.n_filters
|
|
197
|
+
|
|
198
|
+
# iterate over the lightcurves
|
|
199
|
+
for le, ri in zip(left, right):
|
|
200
|
+
wdet = np.where(detected[le:ri] > 0)
|
|
201
|
+
ufilters = np.unique(data_slice[self.filter_col][le:ri][wdet])
|
|
202
|
+
nfilts_lci = 0
|
|
203
|
+
for filt_name in ufilters:
|
|
204
|
+
wdetfilt = np.where((data_slice[self.filter_col][le:ri] == filt_name) & detected[le:ri])
|
|
205
|
+
|
|
206
|
+
lc_points = lc_mags[le:ri][wdetfilt]
|
|
207
|
+
dlc = np.abs(np.diff(lc_points))
|
|
208
|
+
|
|
209
|
+
# number of detections in band, requiring that for
|
|
210
|
+
# nPerFilter > 1 that points have more than minDeltaMag
|
|
211
|
+
# change
|
|
212
|
+
nbanddet = np.sum(dlc > self.min_delta_mag) + 1
|
|
213
|
+
if nbanddet >= self.n_per_filter:
|
|
214
|
+
bandcounter[filt_name] += 1
|
|
215
|
+
nfilts_lci += 1
|
|
216
|
+
if nfilts_lci >= self.n_filters:
|
|
217
|
+
bandcounter["any"] += 1
|
|
218
|
+
|
|
219
|
+
bandfraction = {}
|
|
220
|
+
for band in bandcounter.keys():
|
|
221
|
+
bandfraction[band] = float(bandcounter[band]) / n_trans_max
|
|
222
|
+
|
|
223
|
+
return bandfraction
|
|
224
|
+
|
|
225
|
+
def reduce_band1_filt_avg(self, bandfraction):
|
|
226
|
+
"Average fraction detected in single filter"
|
|
227
|
+
return np.mean(list(bandfraction.values()))
|
|
228
|
+
|
|
229
|
+
def reduce_bandany_nfilters(self, bandfraction):
|
|
230
|
+
"Fraction of events detected in Nfilters or more"
|
|
231
|
+
return bandfraction["any"]
|
|
232
|
+
|
|
233
|
+
def reduce_bandu(self, bandfraction):
|
|
234
|
+
return bandfraction["u"]
|
|
235
|
+
|
|
236
|
+
def reduce_bandg(self, bandfraction):
|
|
237
|
+
return bandfraction["g"]
|
|
238
|
+
|
|
239
|
+
def reduce_bandr(self, bandfraction):
|
|
240
|
+
return bandfraction["r"]
|
|
241
|
+
|
|
242
|
+
def reduce_bandi(self, bandfraction):
|
|
243
|
+
return bandfraction["i"]
|
|
244
|
+
|
|
245
|
+
def reduce_bandz(self, bandfraction):
|
|
246
|
+
return bandfraction["z"]
|
|
247
|
+
|
|
248
|
+
def reduce_bandy(self, bandfraction):
|
|
249
|
+
return bandfraction["y"]
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Metric for kilonova detectability based on GW170817 SED used in Scolnic et
|
|
2
|
+
# al. 2018 and Setzer et al. 2019. The chosen detection criteria are related
|
|
3
|
+
# to those used in the LSST DESC white paper detectability work and the two
|
|
4
|
+
# references above.
|
|
5
|
+
#
|
|
6
|
+
# Contact for this code:
|
|
7
|
+
# christian.setzer@fysik.su.se
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
from .transient_ascii_sed_metric import TransientAsciiSEDMetric
|
|
11
|
+
|
|
12
|
+
__all__ = ("GW170817DetMetric",)
|
|
13
|
+
base_path = Path(__file__).parent
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class GW170817DetMetric(TransientAsciiSEDMetric):
|
|
17
|
+
"""
|
|
18
|
+
Wrapper metric class for GW170817-like kilonovae based on the
|
|
19
|
+
TransientAsciiSEDMetric. Defaults are set to those corresponding to similar
|
|
20
|
+
detection criteria used in Scolnic et al. 2018 and Setzer et al. 2019.
|
|
21
|
+
However, due to the simplified nature of transient distribution for
|
|
22
|
+
computing this metric, the criteria have been altered to only include
|
|
23
|
+
criteria two and three. The chosen redshift is at the approximate mean
|
|
24
|
+
redshift of the detected cosmological redshift distribution shown in
|
|
25
|
+
Setzer et al. 2019.
|
|
26
|
+
|
|
27
|
+
Parameters
|
|
28
|
+
-----------
|
|
29
|
+
ascii_file : `str`, optional
|
|
30
|
+
The ascii file containing the inputs for the SED. The file must
|
|
31
|
+
contain three columns - ['phase', 'wave', 'flux'] -
|
|
32
|
+
of phase/epoch (in days), wavelength (Angstroms), and
|
|
33
|
+
flux (ergs/s/Angstrom). Default, data provided with sims_maf_contrib.
|
|
34
|
+
metric_name : `str`, optional
|
|
35
|
+
Name of the metric, can be overwritten by user or child metric.
|
|
36
|
+
z : `float`, optional
|
|
37
|
+
Cosmological redshift at which to consider observations of the
|
|
38
|
+
tranisent SED. Default 0.08.
|
|
39
|
+
num_filters : `int`, optional
|
|
40
|
+
Number of filters that need to be observed for an object to be
|
|
41
|
+
counted as detected. Default 2. (if num_per_lightcurve is 0, then
|
|
42
|
+
this will be reset to 0).
|
|
43
|
+
filter_time : `float`, optional
|
|
44
|
+
The time within which observations in at least num_filters are
|
|
45
|
+
required (in days). Default 25.0 days.
|
|
46
|
+
num_phases_to_run : `int`, optional
|
|
47
|
+
Sets the number of phases that should be checked.
|
|
48
|
+
One can imagine pathological cadences where many objects pass the
|
|
49
|
+
detection criteria, but would not if the observations were offset
|
|
50
|
+
by a phase-shift. Default 5.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
def __init__(
|
|
54
|
+
self,
|
|
55
|
+
ascii_file=(base_path / "../data/DECAMGemini_SED.txt").resolve(),
|
|
56
|
+
metric_name="GW170817DetMetric",
|
|
57
|
+
z=0.08,
|
|
58
|
+
num_filters=2,
|
|
59
|
+
filter_time=25.0,
|
|
60
|
+
num_phases_to_run=5,
|
|
61
|
+
**kwargs,
|
|
62
|
+
):
|
|
63
|
+
""""""
|
|
64
|
+
super(GW170817DetMetric, self).__init__(
|
|
65
|
+
ascii_file=ascii_file,
|
|
66
|
+
metric_name=metric_name,
|
|
67
|
+
z=z,
|
|
68
|
+
num_filters=num_filters,
|
|
69
|
+
filter_time=filter_time,
|
|
70
|
+
num_phases_to_run=num_phases_to_run,
|
|
71
|
+
**kwargs,
|
|
72
|
+
)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Example for IntervalsBetweenObsMetric
|
|
2
|
+
# Somayeh Khakpash - Lehigh University
|
|
3
|
+
# Last edited : 10/21/2020
|
|
4
|
+
# Calculates statistics (mean or median or standard deviation) of intervals
|
|
5
|
+
# between observations during simultaneous windows/Inter-seasonal gap of
|
|
6
|
+
# another survey.
|
|
7
|
+
# SurveyIntervals is the list of the survey observing window/Inter-seasonal
|
|
8
|
+
# gap intervals. It should be in the format:
|
|
9
|
+
# SurveyIntervals = [ [YYYY-MM-DD, YYYY-MM-DD] , [YYYY-MM-DD, YYYY-MM-DD] ,
|
|
10
|
+
# ... , [YYYY-MM-DD, YYYY-MM-DD] ]
|
|
11
|
+
# We are interested in calculating this metric in each of the LSST passbands.
|
|
12
|
+
# The difference between this metric and the VisitGapMetric metric is that
|
|
13
|
+
# VisitGapMetric calculates reduceFunc of gaps between observations of a
|
|
14
|
+
# data_slice throughout the whole
|
|
15
|
+
# baseline, but IntervalsBetweenObsMetric calculates the gaps between
|
|
16
|
+
# observations during another survey observing window.
|
|
17
|
+
# This metric combined with surveys footprint
|
|
18
|
+
# overlap can determine how many often another survey footprint is
|
|
19
|
+
# observed by LSST during specific time intervals.
|
|
20
|
+
__all__ = ("IntervalsBetweenObsMetric",)
|
|
21
|
+
|
|
22
|
+
import numpy as np
|
|
23
|
+
from astropy.time import Time
|
|
24
|
+
|
|
25
|
+
from rubin_sim.maf.metrics import BaseMetric
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class IntervalsBetweenObsMetric(BaseMetric):
|
|
29
|
+
def __init__(
|
|
30
|
+
self,
|
|
31
|
+
survey_intervals,
|
|
32
|
+
stat,
|
|
33
|
+
metric_name="IntervalsBetweenObsMetric",
|
|
34
|
+
time_col="observationStartMJD",
|
|
35
|
+
**kwargs,
|
|
36
|
+
):
|
|
37
|
+
self.time_col = time_col
|
|
38
|
+
self.metric_name = metric_name
|
|
39
|
+
self.survey_intervals = survey_intervals
|
|
40
|
+
self.stat = stat
|
|
41
|
+
super(IntervalsBetweenObsMetric, self).__init__(col=time_col, metric_name=metric_name, **kwargs)
|
|
42
|
+
|
|
43
|
+
def run(self, data_slice, slice_point=None):
|
|
44
|
+
data_slice.sort(order=self.time_col)
|
|
45
|
+
obs_diff = []
|
|
46
|
+
|
|
47
|
+
for interval in self.survey_intervals:
|
|
48
|
+
start_interval = Time(interval[0] + " 00:00:00")
|
|
49
|
+
end_interval = Time(interval[1] + " 00:00:00")
|
|
50
|
+
index = data_slice[self.time_col][
|
|
51
|
+
np.where(
|
|
52
|
+
(data_slice[self.time_col] > start_interval.mjd)
|
|
53
|
+
& (data_slice[self.time_col] < end_interval.mjd)
|
|
54
|
+
)[0]
|
|
55
|
+
]
|
|
56
|
+
obs_diff_per_interval = np.diff(index)
|
|
57
|
+
obs_diff = obs_diff + obs_diff_per_interval.tolist()
|
|
58
|
+
|
|
59
|
+
if self.stat == "mean":
|
|
60
|
+
result = np.mean(obs_diff)
|
|
61
|
+
|
|
62
|
+
elif self.stat == "median":
|
|
63
|
+
result = np.median(obs_diff)
|
|
64
|
+
|
|
65
|
+
elif self.stat == "std":
|
|
66
|
+
result = np.std(obs_diff)
|
|
67
|
+
|
|
68
|
+
return result
|