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,156 @@
|
|
|
1
|
+
# Example for TripletMetric
|
|
2
|
+
# Mike Lund - Vanderbilt University
|
|
3
|
+
# mike.lund@gmail.com
|
|
4
|
+
# Last edited 9/6/2014
|
|
5
|
+
# Motivation: The detection of nonperiodic transient events can be thought of
|
|
6
|
+
# as most simply being accomplished by a set of three observations,
|
|
7
|
+
# one before the event occurs, a second after the event has begun,
|
|
8
|
+
# and a third to confirm the event is real.
|
|
9
|
+
# This metric identifies the number of triplets that will occur.
|
|
10
|
+
# DelMin and DelMax set the smallest and largest intervals that can occur
|
|
11
|
+
# between the first and second point and between the second and third point.
|
|
12
|
+
# This can be set to reflect the timescales for various events.
|
|
13
|
+
# RatioMax and RatioMin set constraints on how similar the two intervals
|
|
14
|
+
# must be. RatioMin can never be less than 1.
|
|
15
|
+
|
|
16
|
+
__all__ = ("TripletMetric", "TripletBandMetric")
|
|
17
|
+
|
|
18
|
+
import numpy as np
|
|
19
|
+
|
|
20
|
+
from rubin_sim.maf.metrics import BaseMetric
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TripletMetric(BaseMetric):
|
|
24
|
+
"""Find the number of 'triplets' of three images taken in any band,
|
|
25
|
+
based on user-selected minimum and maximum intervals (in hours),
|
|
26
|
+
as well as constraining the ratio of the two exposures intervals.
|
|
27
|
+
Triplets are not required to be consecutive observations and
|
|
28
|
+
may be overlapping.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
def __init__(self, time_col="expMJD", **kwargs):
|
|
32
|
+
self.time_col = time_col
|
|
33
|
+
self.delmin = kwargs.pop("DelMin", 1) / 24.0 # convert minutes to hours
|
|
34
|
+
self.delmax = kwargs.pop("DelMax", 12) / 24.0 # convert minutes to hours
|
|
35
|
+
self.ratiomax = kwargs.pop("RatioMax", 1000)
|
|
36
|
+
self.ratiomin = kwargs.pop("RatioMin", 1)
|
|
37
|
+
super(TripletMetric, self).__init__(col=[self.time_col], **kwargs)
|
|
38
|
+
|
|
39
|
+
def run(self, data_slice, slice_point=None):
|
|
40
|
+
times = data_slice[self.time_col]
|
|
41
|
+
times = times - 49378 # change times to smaller numbers
|
|
42
|
+
delmax = self.delmax
|
|
43
|
+
delmin = self.delmin
|
|
44
|
+
total = 0
|
|
45
|
+
# iterate over every exposure time
|
|
46
|
+
for counter, time in enumerate(times):
|
|
47
|
+
# calculate the window to look for all possible second points in
|
|
48
|
+
minmax = [time + delmin, time + delmax]
|
|
49
|
+
index2 = np.where((minmax[0] < times) & (times < minmax[1]))[0]
|
|
50
|
+
# iterate over every middle exposure
|
|
51
|
+
for middleindex in index2:
|
|
52
|
+
timeb = times[middleindex]
|
|
53
|
+
# calculate the window to look for all possible third points
|
|
54
|
+
minmax2 = [timeb + delmin, timeb + delmax]
|
|
55
|
+
index3 = np.where((times > minmax2[0]) & (times < minmax2[1]))[0]
|
|
56
|
+
newadd = np.size(index3)
|
|
57
|
+
total = total + newadd # add all triplets with same
|
|
58
|
+
# first two observations to total
|
|
59
|
+
return total
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class TripletBandMetric(BaseMetric):
|
|
63
|
+
"""Find the number of 'triplets' of three images taken in the same band,
|
|
64
|
+
based on user-selected minimum and maximum intervals (in hours),
|
|
65
|
+
as well as constraining the ratio of the two exposures intervals.
|
|
66
|
+
Triplets are not required to be consecutive observations and may be
|
|
67
|
+
overlapping.
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
def __init__(self, time_col="expMJD", filter_col="filter", **kwargs):
|
|
71
|
+
self.time_col = time_col
|
|
72
|
+
self.filter_col = filter_col
|
|
73
|
+
self.delmin = kwargs.pop("DelMin", 1) / 24.0
|
|
74
|
+
self.delmax = kwargs.pop("DelMax", 12) / 24.0
|
|
75
|
+
self.ratiomax = kwargs.pop("RatioMax", 1000)
|
|
76
|
+
self.ratiomin = kwargs.pop("RatioMin", 1)
|
|
77
|
+
super(TripletBandMetric, self).__init__(col=[self.time_col, self.filter_col], **kwargs)
|
|
78
|
+
self.reduce_order = {
|
|
79
|
+
"Bandu": 0,
|
|
80
|
+
"Bandg": 1,
|
|
81
|
+
"Bandr": 2,
|
|
82
|
+
"Bandi": 3,
|
|
83
|
+
"Bandz": 4,
|
|
84
|
+
"Bandy": 5,
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
def run(self, data_slice, slice_point=None):
|
|
88
|
+
times = data_slice[self.time_col]
|
|
89
|
+
times = times - 49378 # change times to smaller numbers
|
|
90
|
+
bands = data_slice[self.filter_col]
|
|
91
|
+
bandset = ["u", "g", "r", "i", "z", "y"] # list of possible bands
|
|
92
|
+
timedict = {}
|
|
93
|
+
delmax = self.delmax
|
|
94
|
+
delmin = self.delmin
|
|
95
|
+
ratiomax = self.ratiomax
|
|
96
|
+
ratiomin = self.ratiomin
|
|
97
|
+
bandcounter = {
|
|
98
|
+
"u": 0,
|
|
99
|
+
"g": 0,
|
|
100
|
+
"r": 0,
|
|
101
|
+
"i": 0,
|
|
102
|
+
"z": 0,
|
|
103
|
+
"y": 0,
|
|
104
|
+
} # define zeroed out counter
|
|
105
|
+
# iterate over each bandpass
|
|
106
|
+
for band in bandset:
|
|
107
|
+
indexlist = np.where(band == bands)
|
|
108
|
+
timedict[band] = times[indexlist]
|
|
109
|
+
# create a data set of all exposures for a single band
|
|
110
|
+
timeband = timedict[band]
|
|
111
|
+
# iterate over every exposure time
|
|
112
|
+
for counter, time in enumerate(timeband):
|
|
113
|
+
# calculate the window to look for all possible second points
|
|
114
|
+
minmax = [time + delmin, time + delmax]
|
|
115
|
+
index2 = np.where((minmax[0] < timeband) & (timeband < minmax[1]))[0]
|
|
116
|
+
# iterate over every middle exposure
|
|
117
|
+
for middleindex in index2:
|
|
118
|
+
timeb = timeband[middleindex]
|
|
119
|
+
# calculate the window to look for all
|
|
120
|
+
# possible third points
|
|
121
|
+
minmax2 = [timeb + delmin, timeb + delmax]
|
|
122
|
+
index3 = np.where((timeband > minmax2[0]) & (timeband < minmax2[1]))[0]
|
|
123
|
+
# iterate over last exposure of triplet
|
|
124
|
+
for lastindex in index3:
|
|
125
|
+
timec = timeband[lastindex]
|
|
126
|
+
# calculate intervals for T1 to T2 and T2 to T3,
|
|
127
|
+
# and take ratio
|
|
128
|
+
delt1 = timeb - time
|
|
129
|
+
delt2 = timec - timeb
|
|
130
|
+
ratio = np.max([delt1, delt2]) / np.min([delt1, delt2])
|
|
131
|
+
# check if ratio is within restrictions
|
|
132
|
+
# (ratio should never be < 1 )
|
|
133
|
+
if ratiomin < ratio < ratiomax:
|
|
134
|
+
bandcounter[band] = bandcounter[band] + 1
|
|
135
|
+
return bandcounter
|
|
136
|
+
|
|
137
|
+
def reduce_bandall(self, bandcounter):
|
|
138
|
+
return np.sum(list(bandcounter.values()))
|
|
139
|
+
|
|
140
|
+
def reduce_bandu(self, bandcounter):
|
|
141
|
+
return bandcounter["u"]
|
|
142
|
+
|
|
143
|
+
def reduce_bandg(self, bandcounter):
|
|
144
|
+
return bandcounter["g"]
|
|
145
|
+
|
|
146
|
+
def reduce_bandr(self, bandcounter):
|
|
147
|
+
return bandcounter["r"]
|
|
148
|
+
|
|
149
|
+
def reduce_bandi(self, bandcounter):
|
|
150
|
+
return bandcounter["i"]
|
|
151
|
+
|
|
152
|
+
def reduce_bandz(self, bandcounter):
|
|
153
|
+
return bandcounter["z"]
|
|
154
|
+
|
|
155
|
+
def reduce_bandy(self, bandcounter):
|
|
156
|
+
return bandcounter["y"]
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Variability Depth Metric
|
|
2
|
+
# Keaton Bell (keatonb@astro.as.utexas.edu)
|
|
3
|
+
|
|
4
|
+
__all__ = ("VarDepth",)
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
from scipy.interpolate import UnivariateSpline
|
|
8
|
+
from scipy.stats import chi2
|
|
9
|
+
|
|
10
|
+
from rubin_sim.maf.metrics import BaseMetric
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class VarDepth(BaseMetric):
|
|
14
|
+
"""Calculate the survey depth that a variable star can be
|
|
15
|
+
reliably identified.
|
|
16
|
+
|
|
17
|
+
Parameters
|
|
18
|
+
----------
|
|
19
|
+
completeness : `float`, opt
|
|
20
|
+
Fractional desired completeness of recovered variable sample.
|
|
21
|
+
contamination : `float`, opt
|
|
22
|
+
Fractional allowed incompleteness of recovered nonvariables.
|
|
23
|
+
numruns : `int`, opt
|
|
24
|
+
Number of simulated realizations of noise.
|
|
25
|
+
Most computationally expensive part of metric.
|
|
26
|
+
signal : `float`, opt
|
|
27
|
+
Sqrt total pulsational power meant to be recovered.
|
|
28
|
+
magres : `float`, opt
|
|
29
|
+
desired resolution of variability depth result.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
def __init__(
|
|
33
|
+
self,
|
|
34
|
+
m5_col="fiveSigmaDepth",
|
|
35
|
+
metric_name="variability depth",
|
|
36
|
+
completeness=0.95,
|
|
37
|
+
contamination=0.05,
|
|
38
|
+
numruns=10000,
|
|
39
|
+
signal=0.01,
|
|
40
|
+
magres=0.01,
|
|
41
|
+
**kwargs,
|
|
42
|
+
):
|
|
43
|
+
self.m5col = m5_col
|
|
44
|
+
self.completeness = completeness
|
|
45
|
+
self.contamination = contamination
|
|
46
|
+
self.numruns = numruns
|
|
47
|
+
self.signal = signal
|
|
48
|
+
self.magres = magres
|
|
49
|
+
super(VarDepth, self).__init__(col=m5_col, metric_name=metric_name, **kwargs)
|
|
50
|
+
|
|
51
|
+
def run(self, data_slice, slice_point=None):
|
|
52
|
+
# Get the visit information
|
|
53
|
+
m5 = data_slice[self.m5col]
|
|
54
|
+
# Number of visits
|
|
55
|
+
N = len(m5)
|
|
56
|
+
|
|
57
|
+
# magnitudes to be sampled
|
|
58
|
+
mag = np.arange(16, np.mean(m5), 0.5)
|
|
59
|
+
# hold the distance between the completeness and contamination goals.
|
|
60
|
+
res = np.zeros(mag.shape)
|
|
61
|
+
# make them nans for now
|
|
62
|
+
res[:] = np.nan
|
|
63
|
+
|
|
64
|
+
# hold the measured noise-only variances
|
|
65
|
+
noiseonlyvar = np.zeros(self.numruns)
|
|
66
|
+
|
|
67
|
+
# Calculate the variance at a reference magnitude and scale from that
|
|
68
|
+
m0 = 20.0
|
|
69
|
+
sigmaref = 0.2 * (10.0 ** (-0.2 * m5)) * (10.0 ** (0.2 * m0))
|
|
70
|
+
|
|
71
|
+
# run the simulations
|
|
72
|
+
# Simulate the measured noise-only variances at a reference magnitude
|
|
73
|
+
for i in np.arange(self.numruns):
|
|
74
|
+
# random realization of the Gaussian error distributions
|
|
75
|
+
scatter = np.random.randn(N) * sigmaref
|
|
76
|
+
noiseonlyvar[i] = np.var(scatter) # store the noise-only variance
|
|
77
|
+
|
|
78
|
+
# Since we are treating the underlying signal being representable by a
|
|
79
|
+
# fixed-width gaussian, its variance pdf is a Chi-squared distribution
|
|
80
|
+
# with the degrees of freedom=visits. Since variances add, the variance
|
|
81
|
+
# pdfs convolve. The cumulative distribution function of the sum of two
|
|
82
|
+
# random deviates is the convolution of one pdf with a cdf.
|
|
83
|
+
|
|
84
|
+
# We'll consider the cdf of the noise-only variances
|
|
85
|
+
# because it's easier to interpolate
|
|
86
|
+
noisesorted = np.sort(noiseonlyvar)
|
|
87
|
+
# linear interpolation
|
|
88
|
+
interpnoisecdf = UnivariateSpline(
|
|
89
|
+
noisesorted, np.arange(self.numruns) / float(self.numruns), k=1, s=0
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
# We need a binned, signal-only variance probability
|
|
93
|
+
# distribution function for numerical convolution
|
|
94
|
+
numsignalsamples = 100
|
|
95
|
+
xsig = np.linspace(chi2.ppf(0.001, N), chi2.ppf(0.999, N), numsignalsamples)
|
|
96
|
+
signalpdf = chi2.pdf(xsig, N)
|
|
97
|
+
# correct x to the proper variance scale
|
|
98
|
+
xsig = (self.signal**2.0) * xsig / N
|
|
99
|
+
pdfstepsize = xsig[1] - xsig[0]
|
|
100
|
+
# Since everything is going to use this stepsize down the line,
|
|
101
|
+
# normalize so the pdf integrates to 1 when summed
|
|
102
|
+
# (no factor of stepsize needed)
|
|
103
|
+
signalpdf /= np.sum(signalpdf)
|
|
104
|
+
|
|
105
|
+
# run through the sample magnitudes, calculate distance between cont
|
|
106
|
+
# and comp thresholds.
|
|
107
|
+
# run until solution found.
|
|
108
|
+
solutionfound = False
|
|
109
|
+
|
|
110
|
+
for i, mref in enumerate(mag):
|
|
111
|
+
# i counts and mref is the currently sampled magnitude
|
|
112
|
+
# Scale factor from m0
|
|
113
|
+
scalefact = 10.0 ** (0.4 * (mref - m0))
|
|
114
|
+
|
|
115
|
+
# Calculate the desired contamination threshold
|
|
116
|
+
contthresh = np.percentile(noiseonlyvar, 100.0 - 100.0 * self.contamination) * scalefact
|
|
117
|
+
|
|
118
|
+
# Realize the noise CDF at the required stepsize
|
|
119
|
+
xnoise = np.arange(noisesorted[0] * scalefact, noisesorted[-1] * scalefact, pdfstepsize)
|
|
120
|
+
|
|
121
|
+
# Only do calculation if near the solution:
|
|
122
|
+
if (len(xnoise) > numsignalsamples / 10) and (not solutionfound):
|
|
123
|
+
noisecdf = interpnoisecdf(xnoise / scalefact)
|
|
124
|
+
# turn into a noise pdf
|
|
125
|
+
noisepdf = noisecdf[1:] - noisecdf[:-1]
|
|
126
|
+
noisepdf /= np.sum(noisepdf)
|
|
127
|
+
# from cdf to pdf conversion
|
|
128
|
+
xnoise = (xnoise[1:] + xnoise[:-1]) / 2.0
|
|
129
|
+
|
|
130
|
+
# calculate and plot the convolution =
|
|
131
|
+
# signal+noise variance dist.
|
|
132
|
+
convolution = 0
|
|
133
|
+
if len(noisepdf) > len(signalpdf):
|
|
134
|
+
convolution = np.convolve(noisepdf, signalpdf)
|
|
135
|
+
else:
|
|
136
|
+
convolution = np.convolve(signalpdf, noisepdf)
|
|
137
|
+
xconvolved = xsig[0] + xnoise[0] + np.arange(len(convolution)) * pdfstepsize
|
|
138
|
+
|
|
139
|
+
# calculate the completeness threshold
|
|
140
|
+
combinedcdf = np.cumsum(convolution)
|
|
141
|
+
findcompthresh = UnivariateSpline(combinedcdf, xconvolved, k=1, s=0)
|
|
142
|
+
compthresh = findcompthresh(1.0 - self.completeness)
|
|
143
|
+
|
|
144
|
+
res[i] = compthresh - contthresh
|
|
145
|
+
if res[i] < 0:
|
|
146
|
+
solutionfound = True
|
|
147
|
+
|
|
148
|
+
# interpolate for where the thresholds coincide
|
|
149
|
+
# print res
|
|
150
|
+
if np.sum(np.isfinite(res)) > 1:
|
|
151
|
+
f1 = UnivariateSpline(mag[np.isfinite(res)], res[np.isfinite(res)], k=1, s=0)
|
|
152
|
+
# sample the magnitude range at given resolution
|
|
153
|
+
magsamples = np.arange(16, np.mean(m5), self.magres)
|
|
154
|
+
vardepth = magsamples[np.argmin(np.abs(f1(magsamples)))]
|
|
155
|
+
return vardepth
|
|
156
|
+
else:
|
|
157
|
+
return min(mag) - 1
|