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,161 @@
|
|
|
1
|
+
__all__ = ("spectres",)
|
|
2
|
+
|
|
3
|
+
import warnings
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
# Taken from https://github.com/ACCarnall/SpectRes
|
|
8
|
+
# (which is under GPL 3), cite https://arxiv.org/abs/1705.05165
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def make_bins(wavs):
|
|
12
|
+
"""Given a series of wavelength points, find the edges and widths
|
|
13
|
+
of corresponding wavelength bins."""
|
|
14
|
+
edges = np.zeros(wavs.shape[0] + 1)
|
|
15
|
+
widths = np.zeros(wavs.shape[0])
|
|
16
|
+
edges[0] = wavs[0] - (wavs[1] - wavs[0]) / 2
|
|
17
|
+
widths[-1] = wavs[-1] - wavs[-2]
|
|
18
|
+
edges[-1] = wavs[-1] + (wavs[-1] - wavs[-2]) / 2
|
|
19
|
+
edges[1:-1] = (wavs[1:] + wavs[:-1]) / 2
|
|
20
|
+
widths[:-1] = edges[1:-1] - edges[:-2]
|
|
21
|
+
|
|
22
|
+
return edges, widths
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def spectres(new_wavs, spec_wavs, spec_fluxes, spec_errs=None, fill=0, verbose=True):
|
|
26
|
+
"""
|
|
27
|
+
Function for resampling spectra (and optionally associated
|
|
28
|
+
uncertainties) onto a new wavelength basis.
|
|
29
|
+
|
|
30
|
+
If performance is an issue, https://github.com/ACCarnall/SpectRes
|
|
31
|
+
includes a version that is wrapped in numba and should be much faster.
|
|
32
|
+
|
|
33
|
+
Parameters
|
|
34
|
+
----------
|
|
35
|
+
|
|
36
|
+
new_wavs : numpy.ndarray
|
|
37
|
+
Array containing the new wavelength sampling desired for the
|
|
38
|
+
spectrum or spectra.
|
|
39
|
+
|
|
40
|
+
spec_wavs : numpy.ndarray
|
|
41
|
+
1D array containing the current wavelength sampling of the
|
|
42
|
+
spectrum or spectra.
|
|
43
|
+
|
|
44
|
+
spec_fluxes : numpy.ndarray
|
|
45
|
+
Array containing spectral fluxes at the wavelengths specified in
|
|
46
|
+
spec_wavs, last dimension must correspond to the shape of
|
|
47
|
+
spec_wavs. Extra dimensions before this may be used to include
|
|
48
|
+
multiple spectra.
|
|
49
|
+
|
|
50
|
+
spec_errs : numpy.ndarray (optional)
|
|
51
|
+
Array of the same shape as spec_fluxes containing uncertainties
|
|
52
|
+
associated with each spectral flux value.
|
|
53
|
+
|
|
54
|
+
fill : float (optional)
|
|
55
|
+
Where new_wavs extends outside the wavelength range in spec_wavs
|
|
56
|
+
this value will be used as a filler in new_fluxes and new_errs.
|
|
57
|
+
|
|
58
|
+
verbose : bool (optional)
|
|
59
|
+
Setting verbose to False will suppress the default warning about
|
|
60
|
+
new_wavs extending outside spec_wavs and "fill" being used.
|
|
61
|
+
|
|
62
|
+
Returns
|
|
63
|
+
-------
|
|
64
|
+
|
|
65
|
+
new_fluxes : numpy.ndarray
|
|
66
|
+
Array of resampled flux values, last dimension is the same
|
|
67
|
+
length as new_wavs, other dimensions are the same as
|
|
68
|
+
spec_fluxes.
|
|
69
|
+
|
|
70
|
+
new_errs : numpy.ndarray
|
|
71
|
+
Array of uncertainties associated with fluxes in new_fluxes.
|
|
72
|
+
Only returned if spec_errs was specified.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
# Rename the input variables for clarity within the function.
|
|
76
|
+
old_wavs = spec_wavs
|
|
77
|
+
old_fluxes = spec_fluxes
|
|
78
|
+
old_errs = spec_errs
|
|
79
|
+
|
|
80
|
+
# Make arrays of edge positions and widths for the old and new bins
|
|
81
|
+
|
|
82
|
+
old_edges, old_widths = make_bins(old_wavs)
|
|
83
|
+
new_edges, new_widths = make_bins(new_wavs)
|
|
84
|
+
|
|
85
|
+
# Generate output arrays to be populated
|
|
86
|
+
new_fluxes = np.zeros(old_fluxes[..., 0].shape + new_wavs.shape)
|
|
87
|
+
|
|
88
|
+
if old_errs is not None:
|
|
89
|
+
if old_errs.shape != old_fluxes.shape:
|
|
90
|
+
raise ValueError("If specified, spec_errs must be the same shape " "as spec_fluxes.")
|
|
91
|
+
else:
|
|
92
|
+
new_errs = np.copy(new_fluxes)
|
|
93
|
+
|
|
94
|
+
start = 0
|
|
95
|
+
stop = 0
|
|
96
|
+
|
|
97
|
+
# Calculate new flux and uncertainty values, looping over new bins
|
|
98
|
+
for j in range(new_wavs.shape[0]):
|
|
99
|
+
|
|
100
|
+
# Add filler values if new_wavs extends outside of spec_wavs
|
|
101
|
+
if (new_edges[j] < old_edges[0]) or (new_edges[j + 1] > old_edges[-1]):
|
|
102
|
+
new_fluxes[..., j] = fill
|
|
103
|
+
|
|
104
|
+
if spec_errs is not None:
|
|
105
|
+
new_errs[..., j] = fill
|
|
106
|
+
|
|
107
|
+
if (j == 0 or j == new_wavs.shape[0] - 1) and verbose:
|
|
108
|
+
warnings.warn(
|
|
109
|
+
"Spectres: new_wavs contains values outside the range "
|
|
110
|
+
"in spec_wavs, new_fluxes and new_errs will be filled "
|
|
111
|
+
"with the value set in the 'fill' keyword argument "
|
|
112
|
+
"(by default 0).",
|
|
113
|
+
category=RuntimeWarning,
|
|
114
|
+
)
|
|
115
|
+
continue
|
|
116
|
+
|
|
117
|
+
# Find first old bin which is partially covered by the new bin
|
|
118
|
+
while old_edges[start + 1] <= new_edges[j]:
|
|
119
|
+
start += 1
|
|
120
|
+
|
|
121
|
+
# Find last old bin which is partially covered by the new bin
|
|
122
|
+
while old_edges[stop + 1] < new_edges[j + 1]:
|
|
123
|
+
stop += 1
|
|
124
|
+
|
|
125
|
+
# If new bin is fully inside an old bin start and stop are equal
|
|
126
|
+
if stop == start:
|
|
127
|
+
new_fluxes[..., j] = old_fluxes[..., start]
|
|
128
|
+
if old_errs is not None:
|
|
129
|
+
new_errs[..., j] = old_errs[..., start]
|
|
130
|
+
|
|
131
|
+
# Otherwise multiply the first and last old bin widths by P_ij
|
|
132
|
+
else:
|
|
133
|
+
start_factor = (old_edges[start + 1] - new_edges[j]) / (old_edges[start + 1] - old_edges[start])
|
|
134
|
+
|
|
135
|
+
end_factor = (new_edges[j + 1] - old_edges[stop]) / (old_edges[stop + 1] - old_edges[stop])
|
|
136
|
+
|
|
137
|
+
old_widths[start] *= start_factor
|
|
138
|
+
old_widths[stop] *= end_factor
|
|
139
|
+
|
|
140
|
+
# Populate new_fluxes spectrum and uncertainty arrays
|
|
141
|
+
f_widths = old_widths[start : stop + 1] * old_fluxes[..., start : stop + 1]
|
|
142
|
+
new_fluxes[..., j] = np.sum(f_widths, axis=-1)
|
|
143
|
+
new_fluxes[..., j] /= np.sum(old_widths[start : stop + 1])
|
|
144
|
+
|
|
145
|
+
if old_errs is not None:
|
|
146
|
+
e_wid = old_widths[start : stop + 1] * old_errs[..., start : stop + 1]
|
|
147
|
+
|
|
148
|
+
new_errs[..., j] = np.sqrt(np.sum(e_wid**2, axis=-1))
|
|
149
|
+
new_errs[..., j] /= np.sum(old_widths[start : stop + 1])
|
|
150
|
+
|
|
151
|
+
# Put back the old bin widths to their initial values
|
|
152
|
+
old_widths[start] /= start_factor
|
|
153
|
+
old_widths[stop] /= end_factor
|
|
154
|
+
|
|
155
|
+
# If errors were supplied return both new_fluxes and new_errs.
|
|
156
|
+
if old_errs is not None:
|
|
157
|
+
return new_fluxes, new_errs
|
|
158
|
+
|
|
159
|
+
# Otherwise just return the new_fluxes spectrum array
|
|
160
|
+
else:
|
|
161
|
+
return new_fluxes
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
__all__ = ("SatelliteAvoidBasisFunction",)
|
|
2
|
+
|
|
3
|
+
import healpy as hp
|
|
4
|
+
import numpy as np
|
|
5
|
+
import rubin_scheduler.scheduler.basis_functions as bf
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SatelliteAvoidBasisFunction(bf.BaseBasisFunction):
|
|
9
|
+
"""Uses satellite position information from the Conditions object
|
|
10
|
+
and then avoids streaks.
|
|
11
|
+
|
|
12
|
+
Parameters
|
|
13
|
+
----------
|
|
14
|
+
forecast_time : `float`
|
|
15
|
+
The time ahead to forecast satellite streaks (minutes).
|
|
16
|
+
smooth_fwhm : `float`
|
|
17
|
+
The smoothing full width half max to use (degrees)
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, nside=32, forecast_time=90.0, smooth_fwhm=3.5):
|
|
21
|
+
super().__init__(nside=nside)
|
|
22
|
+
self.forecast_time = forecast_time / 60.0 / 24 # To days
|
|
23
|
+
self.smooth_fwhm = np.radians(smooth_fwhm)
|
|
24
|
+
|
|
25
|
+
def _calc_value(self, conditions, indx=None):
|
|
26
|
+
result = 0
|
|
27
|
+
# find the indices that are relevant
|
|
28
|
+
indx_min = np.min(np.searchsorted(conditions.satellite_mjds, conditions.mjd))
|
|
29
|
+
indx_max = np.max(np.searchsorted(conditions.satellite_mjds, conditions.mjd + self.forecast_time))
|
|
30
|
+
|
|
31
|
+
if indx_max > indx_min:
|
|
32
|
+
result = np.sum(conditions.satellite_maps[indx_min:indx_max], axis=0)
|
|
33
|
+
result = hp.smoothing(result, fwhm=self.smooth_fwhm)
|
|
34
|
+
result = hp.ud_grade(result, self.nside)
|
|
35
|
+
result[np.where(result < 0)] = 0
|
|
36
|
+
# Make it negative, so positive weights will result
|
|
37
|
+
# in avoiding satellites
|
|
38
|
+
result *= -1
|
|
39
|
+
|
|
40
|
+
return result
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
__all__ = ("ModelObservatory",)
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
from rubin_scheduler.scheduler.model_observatory import ModelObservatory as oMO
|
|
5
|
+
from rubin_scheduler.site_models import Almanac
|
|
6
|
+
from rubin_scheduler.utils import SURVEY_START_MJD, _healbin
|
|
7
|
+
|
|
8
|
+
# Take the model observatory from the scheduler and
|
|
9
|
+
# subclass to expand to include satellite constellations
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ModelObservatory(oMO):
|
|
13
|
+
"""A class to generate a realistic telemetry stream for the scheduler
|
|
14
|
+
|
|
15
|
+
Parameters
|
|
16
|
+
----------
|
|
17
|
+
nside : `int`
|
|
18
|
+
The healpix nside resolution
|
|
19
|
+
mjd_start : `float`
|
|
20
|
+
The MJD to start the observatory up at.
|
|
21
|
+
Uses util to lookup default if None.
|
|
22
|
+
alt_min : `float`
|
|
23
|
+
The minimum altitude to compute models at (degrees).
|
|
24
|
+
lax_dome : `bool`
|
|
25
|
+
Passed to observatory model. If true, allows dome creep.
|
|
26
|
+
cloud_limit : `float`
|
|
27
|
+
The limit to stop taking observations if the cloud model
|
|
28
|
+
returns something equal or higher
|
|
29
|
+
sim_to_o : `sim_targetoO`
|
|
30
|
+
If one would like to inject simulated ToOs into the telemetry stream.
|
|
31
|
+
seeing_db : `str`
|
|
32
|
+
If one would like to use an alternate seeing database,
|
|
33
|
+
filename of sqlite file
|
|
34
|
+
park_after : `float`
|
|
35
|
+
Park the telescope after a gap longer than park_after (minutes)
|
|
36
|
+
init_load_length : `int`
|
|
37
|
+
The length of pre-scheduled sky brighntess to load initially (days).
|
|
38
|
+
alt_limit : `float`
|
|
39
|
+
Altitude limit for considering satellite streaks (degrees).
|
|
40
|
+
satellite_dt : `float`
|
|
41
|
+
The time step to use for computing satellite positions (seconds).
|
|
42
|
+
sat_nside : `int`
|
|
43
|
+
The HEALpix nside to use for satellite streak maps.
|
|
44
|
+
constellation : `rubin_sim.satellite_constellations.Constellation`
|
|
45
|
+
The satellite constellation to use.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
def __init__(
|
|
49
|
+
self,
|
|
50
|
+
nside=None,
|
|
51
|
+
mjd_start=SURVEY_START_MJD,
|
|
52
|
+
seed=42,
|
|
53
|
+
alt_min=5.0,
|
|
54
|
+
lax_dome=True,
|
|
55
|
+
cloud_limit=0.3,
|
|
56
|
+
sim_to_o=None,
|
|
57
|
+
seeing_db=None,
|
|
58
|
+
park_after=10.0,
|
|
59
|
+
init_load_length=10,
|
|
60
|
+
sat_nside=64,
|
|
61
|
+
satellite_dt=10.0,
|
|
62
|
+
constellation=None,
|
|
63
|
+
alt_limit=20.0,
|
|
64
|
+
):
|
|
65
|
+
# Add in the new satellite information
|
|
66
|
+
self.alt_limit = np.radians(alt_limit)
|
|
67
|
+
self.satelite_dt = satellite_dt / 3600.0 / 24.0 # Seconds to days
|
|
68
|
+
self.sat_nside = sat_nside
|
|
69
|
+
self.constellation = constellation
|
|
70
|
+
|
|
71
|
+
# Need to do a little fiddle with the MJD since
|
|
72
|
+
# self.mjd needs self.night set now.
|
|
73
|
+
self.mjd_start = mjd_start
|
|
74
|
+
|
|
75
|
+
self.almanac = Almanac(mjd_start=self.mjd_start)
|
|
76
|
+
self.night = -1
|
|
77
|
+
|
|
78
|
+
# Run the rest of the regular __init__ steps
|
|
79
|
+
super().__init__(
|
|
80
|
+
nside=None,
|
|
81
|
+
mjd_start=self.mjd_start,
|
|
82
|
+
seed=seed,
|
|
83
|
+
alt_min=alt_min,
|
|
84
|
+
lax_dome=lax_dome,
|
|
85
|
+
cloud_limit=cloud_limit,
|
|
86
|
+
sim_to_o=sim_to_o,
|
|
87
|
+
seeing_db=seeing_db,
|
|
88
|
+
park_after=park_after,
|
|
89
|
+
init_load_length=init_load_length,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
def return_conditions(self):
|
|
93
|
+
"""
|
|
94
|
+
Returns
|
|
95
|
+
-------
|
|
96
|
+
conditions: `rubin_sim.scheduler.features.conditions`
|
|
97
|
+
Current conditions as simulated by the ModelObservatory.
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
# Spot to put in satellite streak prediction maps
|
|
101
|
+
self.conditions.satellite_mjds = self.sat_mjds
|
|
102
|
+
self.conditions.satellite_maps = self.satellite_maps
|
|
103
|
+
|
|
104
|
+
# Run the regular return conditions
|
|
105
|
+
super().return_conditions()
|
|
106
|
+
# I guess running super() means return statement gets skipped?
|
|
107
|
+
return self.conditions
|
|
108
|
+
|
|
109
|
+
@property
|
|
110
|
+
def mjd(self):
|
|
111
|
+
return self._mjd
|
|
112
|
+
|
|
113
|
+
@mjd.setter
|
|
114
|
+
def mjd(self, value):
|
|
115
|
+
self._mjd = value
|
|
116
|
+
self.almanac_indx = self.almanac.mjd_indx(value)
|
|
117
|
+
# Update night if needed
|
|
118
|
+
if self.almanac.sunsets["night"][self.almanac_indx] != self.night:
|
|
119
|
+
self.night = self.almanac.sunsets["night"][self.almanac_indx]
|
|
120
|
+
# Update the satellite prediction map for the night
|
|
121
|
+
self._update_satellite_maps()
|
|
122
|
+
|
|
123
|
+
def _update_satellite_maps(self):
|
|
124
|
+
"""Make the satellite prediction maps for the night.
|
|
125
|
+
|
|
126
|
+
Will set self.sat_mjds and self.satellite_maps that can then
|
|
127
|
+
be attached to a conditions object in self.return_conditions
|
|
128
|
+
"""
|
|
129
|
+
sunset = self.almanac.sunsets["sun_n12_setting"][self.almanac_indx]
|
|
130
|
+
sunrise = self.almanac.sunsets["sun_n12_rising"][self.almanac_indx]
|
|
131
|
+
|
|
132
|
+
self.sat_mjds = np.arange(sunset, sunrise, self.satelite_dt)
|
|
133
|
+
|
|
134
|
+
# Compute RA and decs for when sun is down
|
|
135
|
+
ras, decs, alts, illums = self.constellation.paths_array(self.sat_mjds)
|
|
136
|
+
|
|
137
|
+
below_limit = np.where(alts < self.alt_limit)
|
|
138
|
+
|
|
139
|
+
weights = np.zeros(ras.shape, dtype=int)
|
|
140
|
+
weights[illums] = 1
|
|
141
|
+
weights[below_limit] = 0
|
|
142
|
+
|
|
143
|
+
satellite_maps = []
|
|
144
|
+
for i, mjd in enumerate(self.sat_mjds):
|
|
145
|
+
spot_map = _healbin(
|
|
146
|
+
ras[:, i][illums[:, i]],
|
|
147
|
+
decs[:, i][illums[:, i]],
|
|
148
|
+
weights[:, i][illums[:, i]],
|
|
149
|
+
self.sat_nside,
|
|
150
|
+
reduce_func=np.sum,
|
|
151
|
+
dtype=int,
|
|
152
|
+
fill_val=0,
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
satellite_maps.append(spot_map)
|
|
156
|
+
|
|
157
|
+
self.satellite_maps = np.vstack(satellite_maps)
|