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,268 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import unittest
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
from rubin_scheduler.data import get_data_dir
|
|
6
|
+
|
|
7
|
+
from rubin_sim.phot_utils import Bandpass, PhotometricParameters, PhysicalParameters, Sed
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class PhotometricParametersUnitTest(unittest.TestCase):
|
|
11
|
+
def test_init(self):
|
|
12
|
+
"""
|
|
13
|
+
Test that the init and getters of PhotometricParameters work
|
|
14
|
+
properly
|
|
15
|
+
"""
|
|
16
|
+
defaults = PhotometricParameters()
|
|
17
|
+
params = [
|
|
18
|
+
"exptime",
|
|
19
|
+
"nexp",
|
|
20
|
+
"effarea",
|
|
21
|
+
"gain",
|
|
22
|
+
"readnoise",
|
|
23
|
+
"darkcurrent",
|
|
24
|
+
"othernoise",
|
|
25
|
+
"platescale",
|
|
26
|
+
"sigma_sys",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
for attribute in params:
|
|
30
|
+
kwargs = {}
|
|
31
|
+
kwargs[attribute] = -100.0
|
|
32
|
+
test_case = PhotometricParameters(**kwargs)
|
|
33
|
+
|
|
34
|
+
for pp in params:
|
|
35
|
+
if pp != attribute:
|
|
36
|
+
self.assertEqual(defaults.__getattribute__(pp), test_case.__getattribute__(pp))
|
|
37
|
+
else:
|
|
38
|
+
self.assertNotEqual(defaults.__getattribute__(pp), test_case.__getattribute__(pp))
|
|
39
|
+
|
|
40
|
+
self.assertEqual(test_case.__getattribute__(pp), -100.0)
|
|
41
|
+
|
|
42
|
+
def test_exceptions(self):
|
|
43
|
+
"""
|
|
44
|
+
Test that exceptions get raised when they ought to by the
|
|
45
|
+
PhotometricParameters constructor
|
|
46
|
+
|
|
47
|
+
We will instantiate PhotometricParameters with different incomplete
|
|
48
|
+
lists of parameters set. We will verify that the returned
|
|
49
|
+
error messages correctly point out which parameters were ignored.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
expected_message = {
|
|
53
|
+
"exptime": "did not set exptime",
|
|
54
|
+
"nexp": "did not set nexp",
|
|
55
|
+
"effarea": "did not set effarea",
|
|
56
|
+
"gain": "did not set gain",
|
|
57
|
+
"platescale": "did not set platescale",
|
|
58
|
+
"sigma_sys": "did not set sigma_sys",
|
|
59
|
+
"readnoise": "did not set readnoise",
|
|
60
|
+
"darkcurrent": "did not set darkcurrent",
|
|
61
|
+
"othernoise": "did not set othernoise",
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
with self.assertRaises(RuntimeError) as context:
|
|
65
|
+
PhotometricParameters(bandpass="x")
|
|
66
|
+
|
|
67
|
+
for name in expected_message:
|
|
68
|
+
self.assertIn(expected_message[name], context.exception.args[0])
|
|
69
|
+
|
|
70
|
+
for name1 in expected_message:
|
|
71
|
+
for name2 in expected_message:
|
|
72
|
+
set_parameters = {name1: 2.0, name2: 2.0}
|
|
73
|
+
with self.assertRaises(RuntimeError) as context:
|
|
74
|
+
PhotometricParameters(bandpass="x", **set_parameters)
|
|
75
|
+
|
|
76
|
+
for name3 in expected_message:
|
|
77
|
+
if name3 not in set_parameters:
|
|
78
|
+
self.assertIn(expected_message[name3], context.exception.args[0])
|
|
79
|
+
else:
|
|
80
|
+
self.assertNotIn(expected_message[name3], context.exception.args[0])
|
|
81
|
+
|
|
82
|
+
def test_defaults(self):
|
|
83
|
+
"""
|
|
84
|
+
Test that PhotometricParameters are correctly assigned to defaults
|
|
85
|
+
"""
|
|
86
|
+
bandpass_names = ["u", "g", "r", "i", "z", "y", None]
|
|
87
|
+
for bp in bandpass_names:
|
|
88
|
+
phot_params = PhotometricParameters(bandpass=bp)
|
|
89
|
+
self.assertEqual(phot_params.bandpass, bp)
|
|
90
|
+
self.assertAlmostEqual(phot_params.exptime, 15.0, 7)
|
|
91
|
+
self.assertAlmostEqual(phot_params.nexp, 2, 7)
|
|
92
|
+
self.assertAlmostEqual(phot_params.effarea / (np.pi * (6.423 * 100 / 2.0) ** 2), 1.0, 7)
|
|
93
|
+
self.assertAlmostEqual(phot_params.gain, 2.3, 7)
|
|
94
|
+
self.assertAlmostEqual(phot_params.darkcurrent, 0.2, 7)
|
|
95
|
+
self.assertAlmostEqual(phot_params.readnoise, 8.8, 7)
|
|
96
|
+
self.assertAlmostEqual(phot_params.othernoise, 0, 7)
|
|
97
|
+
self.assertAlmostEqual(phot_params.platescale, 0.2, 7)
|
|
98
|
+
if bp not in ["u", "z", "y"]:
|
|
99
|
+
self.assertAlmostEqual(phot_params.sigma_sys, 0.005, 7)
|
|
100
|
+
else:
|
|
101
|
+
self.assertAlmostEqual(phot_params.sigma_sys, 0.0075, 7)
|
|
102
|
+
|
|
103
|
+
def test_no_bandpass(self):
|
|
104
|
+
"""
|
|
105
|
+
Test that if no bandpass is set, bandpass stays 'None' even after
|
|
106
|
+
all other parameters are assigned.
|
|
107
|
+
"""
|
|
108
|
+
phot_params = PhotometricParameters()
|
|
109
|
+
self.assertEqual(phot_params.bandpass, None)
|
|
110
|
+
self.assertAlmostEqual(phot_params.exptime, 15.0, 7)
|
|
111
|
+
self.assertAlmostEqual(phot_params.nexp, 2, 7)
|
|
112
|
+
self.assertAlmostEqual(phot_params.effarea / (np.pi * (6.423 * 100 / 2.0) ** 2), 1.0, 7)
|
|
113
|
+
self.assertAlmostEqual(phot_params.gain, 2.3, 7)
|
|
114
|
+
self.assertAlmostEqual(phot_params.darkcurrent, 0.2, 7)
|
|
115
|
+
self.assertAlmostEqual(phot_params.readnoise, 8.8, 7)
|
|
116
|
+
self.assertAlmostEqual(phot_params.othernoise, 0, 7)
|
|
117
|
+
self.assertAlmostEqual(phot_params.platescale, 0.2, 7)
|
|
118
|
+
self.assertAlmostEqual(phot_params.sigma_sys, 0.005, 7)
|
|
119
|
+
|
|
120
|
+
def test_assignment(self):
|
|
121
|
+
"""
|
|
122
|
+
Test that it is impossible to set PhotometricParameters on the fly
|
|
123
|
+
"""
|
|
124
|
+
test_case = PhotometricParameters()
|
|
125
|
+
control_case = PhotometricParameters()
|
|
126
|
+
success = 0
|
|
127
|
+
|
|
128
|
+
msg = ""
|
|
129
|
+
try:
|
|
130
|
+
test_case.exptime = -1.0
|
|
131
|
+
success += 1
|
|
132
|
+
msg += "was able to assign exptime; "
|
|
133
|
+
except RuntimeError:
|
|
134
|
+
self.assertEqual(test_case.exptime, control_case.exptime)
|
|
135
|
+
|
|
136
|
+
try:
|
|
137
|
+
test_case.nexp = -1.0
|
|
138
|
+
success += 1
|
|
139
|
+
msg += "was able to assign nexp; "
|
|
140
|
+
except RuntimeError:
|
|
141
|
+
self.assertEqual(test_case.nexp, control_case.nexp)
|
|
142
|
+
|
|
143
|
+
try:
|
|
144
|
+
test_case.effarea = -1.0
|
|
145
|
+
success += 1
|
|
146
|
+
msg += "was able to assign effarea; "
|
|
147
|
+
except RuntimeError:
|
|
148
|
+
self.assertEqual(test_case.effarea, control_case.effarea)
|
|
149
|
+
|
|
150
|
+
try:
|
|
151
|
+
test_case.gain = -1.0
|
|
152
|
+
success += 1
|
|
153
|
+
msg += "was able to assign gain; "
|
|
154
|
+
except RuntimeError:
|
|
155
|
+
self.assertEqual(test_case.gain, control_case.gain)
|
|
156
|
+
|
|
157
|
+
try:
|
|
158
|
+
test_case.readnoise = -1.0
|
|
159
|
+
success += 1
|
|
160
|
+
msg += "was able to assign readnoise; "
|
|
161
|
+
except RuntimeError:
|
|
162
|
+
self.assertEqual(test_case.readnoise, control_case.readnoise)
|
|
163
|
+
|
|
164
|
+
try:
|
|
165
|
+
test_case.darkcurrent = -1.0
|
|
166
|
+
success += 1
|
|
167
|
+
msg += "was able to assign darkcurrent; "
|
|
168
|
+
except RuntimeError:
|
|
169
|
+
self.assertEqual(test_case.darkcurrent, control_case.darkcurrent)
|
|
170
|
+
|
|
171
|
+
try:
|
|
172
|
+
test_case.othernoise = -1.0
|
|
173
|
+
success += 1
|
|
174
|
+
msg += "was able to assign othernoise; "
|
|
175
|
+
except RuntimeError:
|
|
176
|
+
self.assertEqual(test_case.othernoise, control_case.othernoise)
|
|
177
|
+
|
|
178
|
+
try:
|
|
179
|
+
test_case.platescale = -1.0
|
|
180
|
+
success += 1
|
|
181
|
+
msg += "was able to assign platescale; "
|
|
182
|
+
except RuntimeError:
|
|
183
|
+
self.assertEqual(test_case.platescale, control_case.platescale)
|
|
184
|
+
|
|
185
|
+
try:
|
|
186
|
+
test_case.sigma_sys = -1.0
|
|
187
|
+
success += 1
|
|
188
|
+
msg += "was able to assign sigma_sys; "
|
|
189
|
+
except RuntimeError:
|
|
190
|
+
self.assertEqual(test_case.sigma_sys, control_case.sigma_sys)
|
|
191
|
+
|
|
192
|
+
try:
|
|
193
|
+
test_case.bandpass = "z"
|
|
194
|
+
success += 1
|
|
195
|
+
msg += "was able to assign bandpass; "
|
|
196
|
+
except RuntimeError:
|
|
197
|
+
self.assertEqual(test_case.bandpass, control_case.bandpass)
|
|
198
|
+
|
|
199
|
+
self.assertEqual(success, 0, msg=msg)
|
|
200
|
+
|
|
201
|
+
def test_application(self):
|
|
202
|
+
"""
|
|
203
|
+
Test that PhotometricParameters get properly propagated into
|
|
204
|
+
Sed methods. We will test this using Sed.calc_adu, since the ADU
|
|
205
|
+
scale linearly with the appropriate parameter.
|
|
206
|
+
"""
|
|
207
|
+
|
|
208
|
+
test_sed = Sed()
|
|
209
|
+
test_sed.set_flat_sed()
|
|
210
|
+
|
|
211
|
+
test_bandpass = Bandpass()
|
|
212
|
+
test_bandpass.read_throughput(os.path.join(get_data_dir(), "throughputs", "baseline", "total_g.dat"))
|
|
213
|
+
|
|
214
|
+
control = test_sed.calc_adu(test_bandpass, phot_params=PhotometricParameters())
|
|
215
|
+
|
|
216
|
+
test_case = PhotometricParameters(exptime=30.0)
|
|
217
|
+
|
|
218
|
+
test = test_sed.calc_adu(test_bandpass, phot_params=test_case)
|
|
219
|
+
|
|
220
|
+
self.assertGreater(control, 0.0)
|
|
221
|
+
self.assertEqual(control, 0.5 * test)
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
class PhysicalParametersUnitTest(unittest.TestCase):
|
|
225
|
+
def test_assignment(self):
|
|
226
|
+
"""
|
|
227
|
+
Make sure it is impossible to change the values stored in
|
|
228
|
+
PhysicalParameters
|
|
229
|
+
"""
|
|
230
|
+
|
|
231
|
+
pp = PhysicalParameters()
|
|
232
|
+
control = PhysicalParameters()
|
|
233
|
+
success = 0
|
|
234
|
+
msg = ""
|
|
235
|
+
|
|
236
|
+
try:
|
|
237
|
+
pp.lightspeed = 2.0
|
|
238
|
+
success += 1
|
|
239
|
+
msg += "was able to assign lightspeed; "
|
|
240
|
+
except RuntimeError:
|
|
241
|
+
self.assertEqual(pp.lightspeed, control.lightspeed)
|
|
242
|
+
|
|
243
|
+
try:
|
|
244
|
+
pp.planck = 2.0
|
|
245
|
+
success += 1
|
|
246
|
+
msg += "was able to assign planck; "
|
|
247
|
+
except RuntimeError:
|
|
248
|
+
self.assertEqual(pp.planck, control.planck)
|
|
249
|
+
|
|
250
|
+
try:
|
|
251
|
+
pp.nm2m = 2.0
|
|
252
|
+
success += 1
|
|
253
|
+
msg += "was able to assign nm2m; "
|
|
254
|
+
except RuntimeError:
|
|
255
|
+
self.assertEqual(pp.nm2m, control.nm2m)
|
|
256
|
+
|
|
257
|
+
try:
|
|
258
|
+
pp.ergsetc2jansky = 2.0
|
|
259
|
+
msg += "was able to assign ergsetc2jansky; "
|
|
260
|
+
success += 1
|
|
261
|
+
except RuntimeError:
|
|
262
|
+
self.assertEqual(pp.ergsetc2jansky, control.ergsetc2jansky)
|
|
263
|
+
|
|
264
|
+
self.assertEqual(success, 0, msg=msg)
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
if __name__ == "__main__":
|
|
268
|
+
unittest.main()
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import unittest
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
from rubin_scheduler.data import get_data_dir
|
|
6
|
+
from rubin_scheduler.utils.code_utilities import sims_clean_up
|
|
7
|
+
|
|
8
|
+
from rubin_sim.phot_utils.bandpass import Bandpass
|
|
9
|
+
from rubin_sim.phot_utils.sed import Sed
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class PhotometryUnitTest(unittest.TestCase):
|
|
13
|
+
@classmethod
|
|
14
|
+
def tearDown_class(cls):
|
|
15
|
+
sims_clean_up()
|
|
16
|
+
|
|
17
|
+
def test_alternate_bandpasses_stars(self):
|
|
18
|
+
"""Test our ability to do photometry using non-LSST bandpasses.
|
|
19
|
+
|
|
20
|
+
Calculate the photometry by built-in methods and 'by hand'.
|
|
21
|
+
"""
|
|
22
|
+
bandpass_dir = os.path.join(get_data_dir(), "tests", "cartoonSedTestData")
|
|
23
|
+
|
|
24
|
+
test_band_passes = {}
|
|
25
|
+
keys = ["u", "g", "r", "i", "z"]
|
|
26
|
+
|
|
27
|
+
bplist = []
|
|
28
|
+
|
|
29
|
+
for kk in keys:
|
|
30
|
+
test_band_passes[kk] = Bandpass()
|
|
31
|
+
test_band_passes[kk].read_throughput(os.path.join(bandpass_dir, "test_bandpass_%s.dat" % kk))
|
|
32
|
+
bplist.append(test_band_passes[kk])
|
|
33
|
+
|
|
34
|
+
sed_obj = Sed()
|
|
35
|
+
phi_array, wave_len_step = sed_obj.setup_phi_array(bplist)
|
|
36
|
+
|
|
37
|
+
sed_file_name = os.path.join(get_data_dir(), "tests", "cartoonSedTestData/starSed/")
|
|
38
|
+
sed_file_name = os.path.join(sed_file_name, "kurucz", "km20_5750.fits_g40_5790.gz")
|
|
39
|
+
ss = Sed()
|
|
40
|
+
ss.read_sed_flambda(sed_file_name)
|
|
41
|
+
|
|
42
|
+
control_bandpass = Bandpass()
|
|
43
|
+
control_bandpass.imsim_bandpass()
|
|
44
|
+
ff = ss.calc_flux_norm(22.0, control_bandpass)
|
|
45
|
+
ss.multiply_flux_norm(ff)
|
|
46
|
+
|
|
47
|
+
test_mags = []
|
|
48
|
+
for kk in keys:
|
|
49
|
+
test_mags.append(ss.calc_mag(test_band_passes[kk]))
|
|
50
|
+
|
|
51
|
+
ss.resample_sed(wavelen_match=bplist[0].wavelen)
|
|
52
|
+
ss.flambda_tofnu()
|
|
53
|
+
mags = -2.5 * np.log10(np.sum(phi_array * ss.fnu, axis=1) * wave_len_step) - ss.zp
|
|
54
|
+
self.assertEqual(len(mags), len(test_mags))
|
|
55
|
+
self.assertGreater(len(mags), 0)
|
|
56
|
+
for j in range(len(mags)):
|
|
57
|
+
self.assertAlmostEqual(mags[j], test_mags[j], 3)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
if __name__ == "__main__":
|
|
61
|
+
unittest.main()
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
from rubin_scheduler.utils import SysEngVals
|
|
5
|
+
|
|
6
|
+
from rubin_sim.phot_utils import (
|
|
7
|
+
predicted_zeropoint,
|
|
8
|
+
predicted_zeropoint_e2v,
|
|
9
|
+
predicted_zeropoint_hardware,
|
|
10
|
+
predicted_zeropoint_hardware_e2v,
|
|
11
|
+
predicted_zeropoint_hardware_itl,
|
|
12
|
+
predicted_zeropoint_itl,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class PredictedZeropointsTst(unittest.TestCase):
|
|
17
|
+
def test_predicted_zeropoints(self):
|
|
18
|
+
bands = ["u", "g", "r", "i", "z", "y"]
|
|
19
|
+
sev = SysEngVals()
|
|
20
|
+
for b in bands:
|
|
21
|
+
zp = predicted_zeropoint(band=b, airmass=1.0, exptime=1)
|
|
22
|
+
self.assertAlmostEqual(zp, sev.zp_t[b], delta=0.005)
|
|
23
|
+
zp_hardware = predicted_zeropoint_hardware(b, exptime=1)
|
|
24
|
+
self.assertTrue(zp < zp_hardware)
|
|
25
|
+
# Check the vendors
|
|
26
|
+
zp_v = predicted_zeropoint_itl(band=b, airmass=1.0, exptime=1)
|
|
27
|
+
self.assertAlmostEqual(zp, zp_v, delta=0.1)
|
|
28
|
+
zp_v = predicted_zeropoint_e2v(band=b, airmass=1.0, exptime=1)
|
|
29
|
+
self.assertAlmostEqual(zp, zp_v, delta=0.1)
|
|
30
|
+
zp_v = predicted_zeropoint_hardware_itl(band=b, exptime=1)
|
|
31
|
+
self.assertAlmostEqual(zp_hardware, zp_v, delta=0.1)
|
|
32
|
+
zp_v = predicted_zeropoint_hardware_e2v(band=b, exptime=1)
|
|
33
|
+
self.assertAlmostEqual(zp_hardware, zp_v, delta=0.1)
|
|
34
|
+
# Check some of the scaling
|
|
35
|
+
zp_test = predicted_zeropoint(band=b, airmass=1.5, exptime=1)
|
|
36
|
+
self.assertTrue(zp > zp_test)
|
|
37
|
+
zp_test = predicted_zeropoint(band=b, airmass=1.0, exptime=30)
|
|
38
|
+
self.assertAlmostEqual(zp, zp_test - 2.5 * np.log10(30), places=7)
|
|
39
|
+
|
|
40
|
+
funcs = [predicted_zeropoint, predicted_zeropoint_itl, predicted_zeropoint_e2v]
|
|
41
|
+
for zpfunc in funcs:
|
|
42
|
+
zp = []
|
|
43
|
+
for x in np.arange(1.0, 2.5, 0.1):
|
|
44
|
+
for exptime in np.arange(1.0, 130, 30):
|
|
45
|
+
zp.append(zpfunc(b, x, exptime))
|
|
46
|
+
zp = np.array(zp)
|
|
47
|
+
self.assertTrue(zp.max() - zp.min() < 6)
|
|
48
|
+
self.assertTrue(zp.max() < 35)
|
|
49
|
+
self.assertTrue(zp.min() > 25)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
if __name__ == "__main__":
|
|
53
|
+
unittest.main()
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import unittest
|
|
3
|
+
|
|
4
|
+
from rubin_scheduler.data import get_data_dir
|
|
5
|
+
|
|
6
|
+
from rubin_sim.phot_utils import Bandpass
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ReadBandPassTest(unittest.TestCase):
|
|
10
|
+
"""
|
|
11
|
+
Tests for reading in bandpasses
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
def test_read(self):
|
|
15
|
+
"""
|
|
16
|
+
Check that we can read things stored in the throughputs directory.
|
|
17
|
+
"""
|
|
18
|
+
throughputs_dir = os.path.join(get_data_dir(), "throughputs")
|
|
19
|
+
|
|
20
|
+
# select files to try and read
|
|
21
|
+
files = [
|
|
22
|
+
"2MASS/2MASS_Ks.dat",
|
|
23
|
+
"WISE/WISE_w1.dat",
|
|
24
|
+
"johnson/johnson_U.dat",
|
|
25
|
+
"sdss/sdss_r.dat",
|
|
26
|
+
]
|
|
27
|
+
for filename in files:
|
|
28
|
+
bp = Bandpass()
|
|
29
|
+
bp.read_throughput(os.path.join(throughputs_dir, filename))
|