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,332 @@
|
|
|
1
|
+
__all__ = ("TrackingDb", "add_run_to_database")
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
from sqlalchemy import Column, Integer, String, create_engine
|
|
6
|
+
from sqlalchemy.engine import url
|
|
7
|
+
from sqlalchemy.exc import DatabaseError
|
|
8
|
+
from sqlalchemy.orm import declarative_base, sessionmaker
|
|
9
|
+
|
|
10
|
+
from . import ResultsDb, VersionRow
|
|
11
|
+
|
|
12
|
+
Base = declarative_base()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class RunRow(Base):
|
|
16
|
+
"""
|
|
17
|
+
Define contents and format of run list table.
|
|
18
|
+
|
|
19
|
+
Table to list all available MAF results,
|
|
20
|
+
along with their opsim run and some comment info.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
__tablename__ = "runs"
|
|
24
|
+
# Define columns in metric list table.
|
|
25
|
+
maf_run_id = Column(Integer, primary_key=True)
|
|
26
|
+
run_group = Column(String)
|
|
27
|
+
run_name = Column(String)
|
|
28
|
+
run_comment = Column(String)
|
|
29
|
+
run_version = Column(String)
|
|
30
|
+
run_date = Column(String)
|
|
31
|
+
db_file = Column(String)
|
|
32
|
+
maf_comment = Column(String)
|
|
33
|
+
maf_version = Column(String)
|
|
34
|
+
maf_date = Column(String)
|
|
35
|
+
maf_dir = Column(String)
|
|
36
|
+
|
|
37
|
+
def __repr__(self):
|
|
38
|
+
rstr = (
|
|
39
|
+
"<Run(maf_run_id='%d', run_group='%s', run_name='%s', run_comment='%s', "
|
|
40
|
+
"run_version='%s', run_date='%s', maf_comment='%s', "
|
|
41
|
+
"maf_version='%s', maf_date='%s', maf_dir='%s', db_file='%s'>"
|
|
42
|
+
% (
|
|
43
|
+
self.maf_run_id,
|
|
44
|
+
self.run_group,
|
|
45
|
+
self.run_name,
|
|
46
|
+
self.maf_comment,
|
|
47
|
+
self.maf_version,
|
|
48
|
+
self.run_date,
|
|
49
|
+
self.maf_comment,
|
|
50
|
+
self.maf_version,
|
|
51
|
+
self.maf_date,
|
|
52
|
+
self.maf_dir,
|
|
53
|
+
self.db_file,
|
|
54
|
+
)
|
|
55
|
+
)
|
|
56
|
+
return rstr
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class TrackingDb:
|
|
60
|
+
"""Sqlite database to track MAF output runs and their locations,
|
|
61
|
+
for show_maf
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
def __init__(self, database=None, trackingDbverbose=False):
|
|
65
|
+
"""
|
|
66
|
+
Set up the Tracking Database.
|
|
67
|
+
"""
|
|
68
|
+
self.verbose = trackingDbverbose
|
|
69
|
+
self.driver = "sqlite"
|
|
70
|
+
# connecting to non-existent database creates it automatically
|
|
71
|
+
if database is None:
|
|
72
|
+
# Default is a file in the current directory.
|
|
73
|
+
self.database = "trackingDb_sqlite.db"
|
|
74
|
+
self.tracking_db_dir = "."
|
|
75
|
+
else:
|
|
76
|
+
self.database = database
|
|
77
|
+
self.tracking_db_dir = os.path.dirname(database)
|
|
78
|
+
# only sqlite
|
|
79
|
+
dbAddress = url.URL.create(drivername=self.driver, database=self.database)
|
|
80
|
+
engine = create_engine(dbAddress, echo=self.verbose)
|
|
81
|
+
if self.verbose:
|
|
82
|
+
print("Created or connected to MAF tracking %s database at %s" % (self.driver, self.database))
|
|
83
|
+
self.Session = sessionmaker(bind=engine)
|
|
84
|
+
self.session = self.Session()
|
|
85
|
+
# Create the tables, if they don't already exist.
|
|
86
|
+
try:
|
|
87
|
+
Base.metadata.create_all(engine)
|
|
88
|
+
except DatabaseError:
|
|
89
|
+
raise DatabaseError(
|
|
90
|
+
"Cannot create a %s database at %s. Check directory exists." % (self.driver, self.database)
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
def close(self):
|
|
94
|
+
self.session.close()
|
|
95
|
+
|
|
96
|
+
def add_run(
|
|
97
|
+
self,
|
|
98
|
+
run_group=None,
|
|
99
|
+
run_name=None,
|
|
100
|
+
run_comment=None,
|
|
101
|
+
run_version=None,
|
|
102
|
+
run_date=None,
|
|
103
|
+
maf_comment=None,
|
|
104
|
+
maf_version=None,
|
|
105
|
+
maf_date=None,
|
|
106
|
+
maf_dir=None,
|
|
107
|
+
db_file=None,
|
|
108
|
+
maf_run_id=None,
|
|
109
|
+
):
|
|
110
|
+
"""Add a run to the tracking database.
|
|
111
|
+
|
|
112
|
+
Parameters
|
|
113
|
+
----------
|
|
114
|
+
run_group : `str`, optional
|
|
115
|
+
Set a name to group this run with (eg. "Tier 1, 2016").
|
|
116
|
+
run_name : `str`, optional
|
|
117
|
+
Set a name for the opsim run.
|
|
118
|
+
run_comment : `str`, optional
|
|
119
|
+
Set a comment describing the opsim run.
|
|
120
|
+
run_version : `str`, optional
|
|
121
|
+
Set the version of opsim.
|
|
122
|
+
run_date : `str`, optional
|
|
123
|
+
Set the date the opsim run was created.
|
|
124
|
+
maf_comment : `str`, optional
|
|
125
|
+
Set a comment to describe the MAF analysis.
|
|
126
|
+
maf_version : `str`, optional
|
|
127
|
+
Set the version of MAF used for analysis.
|
|
128
|
+
maf_date : `str`, optional
|
|
129
|
+
Set the date the MAF analysis was run.
|
|
130
|
+
maf_dir : `str`, optional
|
|
131
|
+
The relative path to the MAF directory.
|
|
132
|
+
Will be converted to a relative path if absolute.
|
|
133
|
+
db_file : `str`, optional
|
|
134
|
+
The relative path to the Opsim SQLite database file.
|
|
135
|
+
maf_run_id : `int`, optional
|
|
136
|
+
The maf_run_id to assign to this record in the database
|
|
137
|
+
(note this is a primary key!).
|
|
138
|
+
If this run (ie the maf_dir) exists in the database already,
|
|
139
|
+
this will be ignored.
|
|
140
|
+
|
|
141
|
+
Returns
|
|
142
|
+
-------
|
|
143
|
+
maf_run_id : `int`
|
|
144
|
+
The maf_run_id stored in the database.
|
|
145
|
+
"""
|
|
146
|
+
if run_group is None:
|
|
147
|
+
run_group = "NULL"
|
|
148
|
+
if run_name is None:
|
|
149
|
+
run_name = "NULL"
|
|
150
|
+
if run_comment is None:
|
|
151
|
+
run_comment = "NULL"
|
|
152
|
+
if run_version is None:
|
|
153
|
+
run_version = "NULL"
|
|
154
|
+
if run_date is None:
|
|
155
|
+
run_date = "NULL"
|
|
156
|
+
if maf_comment is None:
|
|
157
|
+
maf_comment = "NULL"
|
|
158
|
+
if maf_version is None:
|
|
159
|
+
maf_version = "NULL"
|
|
160
|
+
if maf_date is None:
|
|
161
|
+
maf_date = "NULL"
|
|
162
|
+
if maf_dir is None:
|
|
163
|
+
maf_dir = "NULL"
|
|
164
|
+
if maf_dir is not None:
|
|
165
|
+
maf_dir = os.path.relpath(maf_dir, start=self.tracking_db_dir)
|
|
166
|
+
if db_file is None:
|
|
167
|
+
db_file = "NULL"
|
|
168
|
+
# Test if maf_dir already exists in database.
|
|
169
|
+
prevrun = self.session.query(RunRow).filter_by(maf_dir=maf_dir).all()
|
|
170
|
+
if len(prevrun) > 0:
|
|
171
|
+
runIds = []
|
|
172
|
+
for run in prevrun:
|
|
173
|
+
runIds.append(run.maf_run_id)
|
|
174
|
+
print(
|
|
175
|
+
"Updating information in tracking database - %s already present with runId %s."
|
|
176
|
+
% (maf_dir, runIds)
|
|
177
|
+
)
|
|
178
|
+
for run in prevrun:
|
|
179
|
+
self.session.delete(run)
|
|
180
|
+
self.session.commit()
|
|
181
|
+
runinfo = RunRow(
|
|
182
|
+
maf_run_id=runIds[0],
|
|
183
|
+
run_group=run_group,
|
|
184
|
+
run_name=run_name,
|
|
185
|
+
run_comment=run_comment,
|
|
186
|
+
run_version=run_version,
|
|
187
|
+
run_date=run_date,
|
|
188
|
+
maf_comment=maf_comment,
|
|
189
|
+
maf_version=maf_version,
|
|
190
|
+
maf_date=maf_date,
|
|
191
|
+
maf_dir=maf_dir,
|
|
192
|
+
db_file=db_file,
|
|
193
|
+
)
|
|
194
|
+
else:
|
|
195
|
+
if maf_run_id is not None:
|
|
196
|
+
# Check if maf_run_id exists already.
|
|
197
|
+
existing = self.session.query(RunRow).filter_by(maf_run_id=maf_run_id).all()
|
|
198
|
+
if len(existing) > 0:
|
|
199
|
+
raise ValueError(
|
|
200
|
+
"maf_run_id %d already exists in database, for %s. "
|
|
201
|
+
"Record must be deleted first." % (maf_run_id, existing[0].maf_dir)
|
|
202
|
+
)
|
|
203
|
+
runinfo = RunRow(
|
|
204
|
+
maf_run_id=maf_run_id,
|
|
205
|
+
run_group=run_group,
|
|
206
|
+
run_name=run_name,
|
|
207
|
+
run_comment=run_comment,
|
|
208
|
+
run_version=run_version,
|
|
209
|
+
run_date=run_date,
|
|
210
|
+
maf_comment=maf_comment,
|
|
211
|
+
maf_version=maf_version,
|
|
212
|
+
maf_date=maf_date,
|
|
213
|
+
maf_dir=maf_dir,
|
|
214
|
+
db_file=db_file,
|
|
215
|
+
)
|
|
216
|
+
else:
|
|
217
|
+
runinfo = RunRow(
|
|
218
|
+
run_group=run_group,
|
|
219
|
+
run_name=run_name,
|
|
220
|
+
run_comment=run_comment,
|
|
221
|
+
run_version=run_version,
|
|
222
|
+
run_date=run_date,
|
|
223
|
+
maf_comment=maf_comment,
|
|
224
|
+
maf_version=maf_version,
|
|
225
|
+
maf_date=maf_date,
|
|
226
|
+
maf_dir=maf_dir,
|
|
227
|
+
db_file=db_file,
|
|
228
|
+
)
|
|
229
|
+
self.session.add(runinfo)
|
|
230
|
+
self.session.commit()
|
|
231
|
+
return runinfo.maf_run_id
|
|
232
|
+
|
|
233
|
+
def delRun(self, runId):
|
|
234
|
+
"""
|
|
235
|
+
Remove a run from the tracking database.
|
|
236
|
+
"""
|
|
237
|
+
runinfo = self.session.query(RunRow).filter_by(maf_run_id=runId).all()
|
|
238
|
+
if len(runinfo) == 0:
|
|
239
|
+
raise Exception("Could not find run with maf_run_id %d" % (runId))
|
|
240
|
+
if len(runinfo) > 1:
|
|
241
|
+
raise Exception("Found more than one run with maf_run_id %d" % (runId))
|
|
242
|
+
print("Removing run info for runId %d " % (runId))
|
|
243
|
+
print(" ", runinfo)
|
|
244
|
+
self.session.delete(runinfo[0])
|
|
245
|
+
self.session.commit()
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def add_run_to_database(
|
|
249
|
+
maf_dir,
|
|
250
|
+
tracking_db_file,
|
|
251
|
+
run_group=None,
|
|
252
|
+
run_name=None,
|
|
253
|
+
run_comment=None,
|
|
254
|
+
maf_comment=None,
|
|
255
|
+
db_file=None,
|
|
256
|
+
maf_version=None,
|
|
257
|
+
maf_date=None,
|
|
258
|
+
sched_version=None,
|
|
259
|
+
sched_date=None,
|
|
260
|
+
skip_extras=False,
|
|
261
|
+
):
|
|
262
|
+
"""Adds information about a MAF analysis run to a MAF tracking database.
|
|
263
|
+
|
|
264
|
+
Parameters
|
|
265
|
+
----------
|
|
266
|
+
maf_dir : `str`
|
|
267
|
+
Path to the directory where the MAF results are located.
|
|
268
|
+
tracking_db_file : `str`
|
|
269
|
+
Full filename (+path) to the tracking database to use.
|
|
270
|
+
run_group: `str`, optional
|
|
271
|
+
Name to use to group this run with other opsim runs.
|
|
272
|
+
run_name : `str`, optional
|
|
273
|
+
Name of the opsim run.
|
|
274
|
+
run_comment : `str`, optional
|
|
275
|
+
Comment about the opsim run.
|
|
276
|
+
run_version : `str`, optional
|
|
277
|
+
Value to use for the opsim version information.
|
|
278
|
+
maf_comment : `str`, optional
|
|
279
|
+
Comment about the MAF analysis.
|
|
280
|
+
db_file : `str`, optional
|
|
281
|
+
Relative path + name of the opsim database file.
|
|
282
|
+
"""
|
|
283
|
+
trackingDb = TrackingDb(database=tracking_db_file)
|
|
284
|
+
|
|
285
|
+
maf_dir = os.path.relpath(maf_dir, start=os.path.dirname(trackingDb.tracking_db_dir))
|
|
286
|
+
if not os.path.isdir(maf_dir):
|
|
287
|
+
raise ValueError("There is no directory containing MAF outputs at %s." % (maf_dir))
|
|
288
|
+
|
|
289
|
+
# Connect to resultsDb for additional information if available
|
|
290
|
+
if os.path.isfile(os.path.join(maf_dir, "resultsDb_sqlite.db")) and not skip_extras:
|
|
291
|
+
resdb = ResultsDb(maf_dir)
|
|
292
|
+
if run_name is None:
|
|
293
|
+
run_name = resdb.get_run_name()
|
|
294
|
+
if len(run_name) > 1:
|
|
295
|
+
run_name = 0
|
|
296
|
+
else:
|
|
297
|
+
run_name = run_name[0]
|
|
298
|
+
if maf_version is None or maf_date is None:
|
|
299
|
+
resdb.open()
|
|
300
|
+
query = resdb.session.query(VersionRow).all()
|
|
301
|
+
for v in query:
|
|
302
|
+
if maf_version is None:
|
|
303
|
+
maf_version = v.version
|
|
304
|
+
if maf_date is None:
|
|
305
|
+
maf_date = v.run_date
|
|
306
|
+
resdb.close()
|
|
307
|
+
|
|
308
|
+
print("Adding to tracking database at %s:" % (tracking_db_file))
|
|
309
|
+
print(" Maf_dir = %s" % (maf_dir))
|
|
310
|
+
print(" Maf_comment = %s" % (maf_comment))
|
|
311
|
+
print(" run_group = %s" % (run_group))
|
|
312
|
+
print(" run_name = %s" % (run_name))
|
|
313
|
+
print(" run_comment = %s" % (run_comment))
|
|
314
|
+
print(" run_version = %s" % (sched_version))
|
|
315
|
+
print(" run_date = %s" % (sched_date))
|
|
316
|
+
print(" maf_version = %s" % (maf_version))
|
|
317
|
+
print(" maf_date = %s" % (maf_date))
|
|
318
|
+
print(" db_file = %s" % (db_file))
|
|
319
|
+
runId = trackingDb.add_run(
|
|
320
|
+
run_group=run_group,
|
|
321
|
+
run_name=run_name,
|
|
322
|
+
run_comment=run_comment,
|
|
323
|
+
run_version=sched_version,
|
|
324
|
+
run_date=sched_date,
|
|
325
|
+
maf_comment=maf_comment,
|
|
326
|
+
maf_version=maf_version,
|
|
327
|
+
maf_date=maf_date,
|
|
328
|
+
maf_dir=maf_dir,
|
|
329
|
+
db_file=db_file,
|
|
330
|
+
)
|
|
331
|
+
print("Used MAF RunID %d" % (runId))
|
|
332
|
+
trackingDb.close()
|
rubin_sim/maf/ddf_dir.py
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import glob
|
|
3
|
+
import os
|
|
4
|
+
import shutil
|
|
5
|
+
|
|
6
|
+
import rubin_sim.maf.batches as batches
|
|
7
|
+
import rubin_sim.maf.db as db
|
|
8
|
+
import rubin_sim.maf.metric_bundles as mb
|
|
9
|
+
|
|
10
|
+
__all__ = ("ddf_dir",)
|
|
11
|
+
|
|
12
|
+
import matplotlib
|
|
13
|
+
|
|
14
|
+
matplotlib.use("Agg")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def ddf_dir():
|
|
18
|
+
"""
|
|
19
|
+
Run the glance batch on all .db files in a directory.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
parser = argparse.ArgumentParser()
|
|
23
|
+
parser.add_argument("--db", type=str, default=None)
|
|
24
|
+
parser.add_argument("--nside", type=int, default=512)
|
|
25
|
+
parser.add_argument("--old_coords", dest="old_coords", action="store_true")
|
|
26
|
+
parser.set_defaults(verbose=False)
|
|
27
|
+
|
|
28
|
+
args = parser.parse_args()
|
|
29
|
+
|
|
30
|
+
if args.db is None:
|
|
31
|
+
db_files = glob.glob("*.db")
|
|
32
|
+
db_files = [filename for filename in db_files if "trackingDb" not in filename]
|
|
33
|
+
else:
|
|
34
|
+
db_files = [args.db]
|
|
35
|
+
run_names = [os.path.basename(name).replace(".db", "") for name in db_files]
|
|
36
|
+
|
|
37
|
+
for filename, name in zip(db_files, run_names):
|
|
38
|
+
if os.path.isdir(name + "_ddf"):
|
|
39
|
+
shutil.rmtree(name + "_ddf")
|
|
40
|
+
|
|
41
|
+
bdict = {}
|
|
42
|
+
bdict.update(batches.ddfBatch(run_name=name, nside=args.nside, old_coords=args.old_coords))
|
|
43
|
+
results_db = db.ResultsDb(out_dir=name + "_ddf")
|
|
44
|
+
group = mb.MetricBundleGroup(
|
|
45
|
+
bdict,
|
|
46
|
+
filename,
|
|
47
|
+
out_dir=name + "_ddf",
|
|
48
|
+
results_db=results_db,
|
|
49
|
+
save_early=False,
|
|
50
|
+
)
|
|
51
|
+
group.run_all(clear_memory=True, plot_now=True)
|
|
52
|
+
results_db.close()
|
|
53
|
+
db.add_run_to_database(name + "_ddf", "trackingDb_sqlite.db", None, name, "", "", name + ".db")
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
__all__ = ("generate_ss_commands", "generate_ss")
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import glob
|
|
5
|
+
import os
|
|
6
|
+
import sqlite3
|
|
7
|
+
|
|
8
|
+
import numpy as np
|
|
9
|
+
import pandas as pd
|
|
10
|
+
|
|
11
|
+
import rubin_sim.maf.db as db
|
|
12
|
+
from rubin_sim.data import get_data_dir
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def generate_ss_commands(
|
|
16
|
+
dbfiles=None,
|
|
17
|
+
pops=None,
|
|
18
|
+
split=False,
|
|
19
|
+
):
|
|
20
|
+
if dbfiles is None:
|
|
21
|
+
dbfiles = glob.glob("*.db")
|
|
22
|
+
dbfiles.sort()
|
|
23
|
+
|
|
24
|
+
data_dir = os.path.join(get_data_dir(), "orbits")
|
|
25
|
+
orbit_files = {
|
|
26
|
+
"granvik_5k": os.path.join(data_dir, "granvik_5k.txt"),
|
|
27
|
+
"granvik_pha_5k": os.path.join(data_dir, "granvik_pha_5k.txt"),
|
|
28
|
+
"vatiras_granvik_10k": os.path.join(data_dir, "vatiras_granvik_10k.txt"),
|
|
29
|
+
"l7_5k": os.path.join(data_dir, "l7_5k.txt"),
|
|
30
|
+
"mba_5k": os.path.join(data_dir, "mba_5k.txt"),
|
|
31
|
+
"occ_rmax5_5k": os.path.join(data_dir, "occ_rmax5_5k.txt"),
|
|
32
|
+
"occ_rmax20_5k": os.path.join(data_dir, "occ_rmax20_5k.txt"),
|
|
33
|
+
"trojan_5k": os.path.join(data_dir, "trojan_5k.txt"),
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
pos_dir = os.path.join(get_data_dir(), "orbits_precompute")
|
|
37
|
+
position_files = {
|
|
38
|
+
"granvik_5k": os.path.join(pos_dir, "granvik_5k.npz"),
|
|
39
|
+
"granvik_pha_5k": os.path.join(pos_dir, "granvik_pha_5k.npz"),
|
|
40
|
+
"vatiras_granvik_10k": os.path.join(pos_dir, "vatiras_granvik_10k.npz"),
|
|
41
|
+
"l7_5k": os.path.join(pos_dir, "l7_5k.npz"),
|
|
42
|
+
"mba_5k": os.path.join(pos_dir, "mba_5k.npz"),
|
|
43
|
+
"occ_rmax5_5k": os.path.join(pos_dir, "occ_rmax5_5k.npz"),
|
|
44
|
+
"occ_rmax20_5k": os.path.join(pos_dir, "occ_rmax20_5k.npz"),
|
|
45
|
+
"trojan_5k": os.path.join(pos_dir, "trojan_5k.npz"),
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
objtypes = {
|
|
49
|
+
"granvik_5k": "NEO",
|
|
50
|
+
"granvik_pha_5k": "PHA",
|
|
51
|
+
"vatiras_granvik_10k": "Vatira",
|
|
52
|
+
"l7_5k": "TNO",
|
|
53
|
+
"mba_5k": "MBA",
|
|
54
|
+
"occ_rmax5_5k": "OCC_r5",
|
|
55
|
+
"occ_rmax20_5k": "OCC_r20",
|
|
56
|
+
"sdo_5k": "SDO",
|
|
57
|
+
"trojan_5k": "Trojan",
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if pops is None:
|
|
61
|
+
# put in order so longer runtime ones are first
|
|
62
|
+
pops = [
|
|
63
|
+
"trojan_5k",
|
|
64
|
+
"l7_5k",
|
|
65
|
+
"mba_5k",
|
|
66
|
+
"granvik_5k",
|
|
67
|
+
"granvik_pha_5k",
|
|
68
|
+
"vatiras_granvik_10k",
|
|
69
|
+
"occ_rmax5_5k",
|
|
70
|
+
"occ_rmax20_5k",
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
elif pops is not None:
|
|
74
|
+
pp = [p for p in orbit_files.keys() if p == pops]
|
|
75
|
+
if len(pp) == 0:
|
|
76
|
+
print(f"Did not find population {pops} in expected types ({list(orbit_files.keys())}")
|
|
77
|
+
pops = [pops]
|
|
78
|
+
|
|
79
|
+
runs = [os.path.split(file)[-1].replace(".db", "") for file in dbfiles]
|
|
80
|
+
runs = [run for run in runs if "tracking" not in run]
|
|
81
|
+
|
|
82
|
+
# Find mjd_start for each run:
|
|
83
|
+
mjd_starts = {}
|
|
84
|
+
for filename in dbfiles:
|
|
85
|
+
con = sqlite3.connect(filename)
|
|
86
|
+
value = pd.read_sql("select min(observationStartMJD) from observations;", con)
|
|
87
|
+
con.close()
|
|
88
|
+
mjd_starts[filename] = np.floor(value.values.min())
|
|
89
|
+
|
|
90
|
+
if not split:
|
|
91
|
+
output_file = open("ss_script.sh", "w")
|
|
92
|
+
for run, filename in zip(runs, dbfiles):
|
|
93
|
+
out_dir = f"{run}_ss"
|
|
94
|
+
try:
|
|
95
|
+
os.mkdir(out_dir)
|
|
96
|
+
except FileExistsError:
|
|
97
|
+
pass
|
|
98
|
+
# Create the results DB so multiple threads
|
|
99
|
+
# don't try to create it later
|
|
100
|
+
# This isn't used in this script, but needs to exist on-disk.
|
|
101
|
+
results_db = db.ResultsDb(out_dir=out_dir)
|
|
102
|
+
for pop in pops:
|
|
103
|
+
for run, filename in zip(runs, dbfiles):
|
|
104
|
+
objtype = objtypes[pop]
|
|
105
|
+
|
|
106
|
+
s1 = (
|
|
107
|
+
f"make_lsst_obs --simulation_db {filename} --orbit_file {orbit_files[pop]}"
|
|
108
|
+
f" --positions_file {position_files[pop]}"
|
|
109
|
+
)
|
|
110
|
+
s2 = (
|
|
111
|
+
f"run_moving_calc --obs_file {run}__{pop}_obs.npz"
|
|
112
|
+
f" --simulation_db {filename} --orbit_file {orbit_files[pop]}"
|
|
113
|
+
f" --out_dir {run}_ss"
|
|
114
|
+
f" --objtype {objtype}"
|
|
115
|
+
f" --start_time {mjd_starts[filename]}"
|
|
116
|
+
)
|
|
117
|
+
s3 = (
|
|
118
|
+
f"run_moving_fractions --work_dir {run}_ss"
|
|
119
|
+
f" --metadata {objtype}"
|
|
120
|
+
f" --start_time {mjd_starts[filename]}"
|
|
121
|
+
)
|
|
122
|
+
print(s1 + " ; " + s2 + " ; " + s3, file=output_file)
|
|
123
|
+
else:
|
|
124
|
+
for run, filename in zip(runs, dbfiles):
|
|
125
|
+
out_dir = f"{run}_ss"
|
|
126
|
+
try:
|
|
127
|
+
os.mkdir(out_dir)
|
|
128
|
+
except FileExistsError:
|
|
129
|
+
pass
|
|
130
|
+
# Create the results DB so multiple threads
|
|
131
|
+
# don't try to create it later
|
|
132
|
+
results_db = db.ResultsDb(out_dir=out_dir) # noqa F841
|
|
133
|
+
outfile = f"{run}_ss_script.sh"
|
|
134
|
+
if split:
|
|
135
|
+
output_file = open(outfile, "w")
|
|
136
|
+
for pop in pops:
|
|
137
|
+
objtype = objtypes[pop]
|
|
138
|
+
if split:
|
|
139
|
+
splitfiles = glob.glob(os.path.join(data_dir, "split") + f"/*{pop}*")
|
|
140
|
+
outfile_split = outfile.replace(".sh", f"_{pop}_split.sh")
|
|
141
|
+
# If the output split file already exists, remove it
|
|
142
|
+
# (as we append, not write)
|
|
143
|
+
if os.path.isfile(outfile_split):
|
|
144
|
+
os.remove(outfile_split)
|
|
145
|
+
for i, splitfile in enumerate(splitfiles):
|
|
146
|
+
split = os.path.split(splitfile)[-1]
|
|
147
|
+
split = split.replace(".des", "").replace(".s3m", "").replace(".txt", "")
|
|
148
|
+
with open(outfile_split, "a") as wi:
|
|
149
|
+
s1 = (
|
|
150
|
+
f"make_lsst_obs --simulation_db {filename} --orbit_file {splitfile}"
|
|
151
|
+
f" --positions_file {position_files[pop]}"
|
|
152
|
+
f" --out_dir {out_dir}"
|
|
153
|
+
)
|
|
154
|
+
s2 = (
|
|
155
|
+
f"run_moving_calc --obs_file {out_dir}/{run}__{split}_obs.npz"
|
|
156
|
+
f" --simulation_db {filename} --orbit_file {orbit_files[pop]}"
|
|
157
|
+
f" --out_dir {out_dir}/{split}"
|
|
158
|
+
f" --run_name {run}"
|
|
159
|
+
f" --objtype {objtype}"
|
|
160
|
+
f" --start_time {mjd_starts[filename]}"
|
|
161
|
+
)
|
|
162
|
+
print(s1 + " ; " + s2, file=wi)
|
|
163
|
+
s3 = (
|
|
164
|
+
f"run_moving_join --orbit_file {pop}"
|
|
165
|
+
f" --base_dir {out_dir}"
|
|
166
|
+
f" --out_dir {out_dir}/sso"
|
|
167
|
+
)
|
|
168
|
+
s4 = (
|
|
169
|
+
f"run_moving_fractions --work_dir {out_dir}/sso"
|
|
170
|
+
f" --metadata {objtype}"
|
|
171
|
+
f" --start_time {mjd_starts[filename]}"
|
|
172
|
+
)
|
|
173
|
+
print(
|
|
174
|
+
f"cat {outfile_split} | parallel -j 10 ; {s3} ; {s4}",
|
|
175
|
+
file=output_file,
|
|
176
|
+
)
|
|
177
|
+
output_file.close()
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def generate_ss():
|
|
181
|
+
"""Generate solar system processing commands."""
|
|
182
|
+
|
|
183
|
+
parser = argparse.ArgumentParser(description="Generate solar system processing commands")
|
|
184
|
+
parser.add_argument("--db", type=str, default=None, help="database to process")
|
|
185
|
+
parser.set_defaults(vatiras=False)
|
|
186
|
+
parser.add_argument("--pop", type=str, default=None, help="identify one population to run")
|
|
187
|
+
parser.add_argument("--start_mjd", type=float, default=None, help="start of the sim")
|
|
188
|
+
parser.add_argument(
|
|
189
|
+
"--split",
|
|
190
|
+
dest="split",
|
|
191
|
+
default=False,
|
|
192
|
+
action="store_true",
|
|
193
|
+
help="Split up population files; rejoin during processing",
|
|
194
|
+
)
|
|
195
|
+
args = parser.parse_args()
|
|
196
|
+
|
|
197
|
+
if args.db is None:
|
|
198
|
+
# Just look for any .db files in this directory
|
|
199
|
+
db_files = glob.glob("*.db")
|
|
200
|
+
# But remove trackingDb and results_db if they're there
|
|
201
|
+
try:
|
|
202
|
+
db_files.remove("trackingDb_sqlite.db")
|
|
203
|
+
except ValueError:
|
|
204
|
+
pass
|
|
205
|
+
try:
|
|
206
|
+
db_files.remove("resultsDb_sqlite.db")
|
|
207
|
+
except ValueError:
|
|
208
|
+
pass
|
|
209
|
+
elif isinstance(args.db, str):
|
|
210
|
+
db_files = [args.db]
|
|
211
|
+
else:
|
|
212
|
+
db_files = args.db
|
|
213
|
+
|
|
214
|
+
generate_ss_commands(
|
|
215
|
+
split=args.split,
|
|
216
|
+
dbfiles=db_files,
|
|
217
|
+
pops=args.pop,
|
|
218
|
+
)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import glob
|
|
3
|
+
import os
|
|
4
|
+
import shutil
|
|
5
|
+
|
|
6
|
+
import rubin_sim.maf.batches as batches
|
|
7
|
+
import rubin_sim.maf.db as db
|
|
8
|
+
import rubin_sim.maf.metric_bundles as mb
|
|
9
|
+
|
|
10
|
+
__all__ = ("glance_dir",)
|
|
11
|
+
|
|
12
|
+
import matplotlib
|
|
13
|
+
|
|
14
|
+
matplotlib.use("Agg")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def glance_dir():
|
|
18
|
+
"""
|
|
19
|
+
Run the glance batch on all .db files in a directory.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
parser = argparse.ArgumentParser()
|
|
23
|
+
parser.add_argument("--db", type=str, default=None)
|
|
24
|
+
args = parser.parse_args()
|
|
25
|
+
|
|
26
|
+
if args.db is None:
|
|
27
|
+
db_files = glob.glob("*.db")
|
|
28
|
+
db_files = [filename for filename in db_files if "trackingDb" not in filename]
|
|
29
|
+
else:
|
|
30
|
+
db_files = [args.db]
|
|
31
|
+
run_names = [os.path.basename(name).replace(".db", "") for name in db_files]
|
|
32
|
+
|
|
33
|
+
for filename, name in zip(db_files, run_names):
|
|
34
|
+
if os.path.isdir(name + "_glance"):
|
|
35
|
+
shutil.rmtree(name + "_glance")
|
|
36
|
+
colmap = batches.col_map_dict()
|
|
37
|
+
|
|
38
|
+
bdict = {}
|
|
39
|
+
bdict.update(batches.glanceBatch(colmap, name))
|
|
40
|
+
results_db = db.ResultsDb(out_dir=name + "_glance")
|
|
41
|
+
group = mb.MetricBundleGroup(
|
|
42
|
+
bdict,
|
|
43
|
+
filename,
|
|
44
|
+
out_dir=name + "_glance",
|
|
45
|
+
results_db=results_db,
|
|
46
|
+
save_early=False,
|
|
47
|
+
)
|
|
48
|
+
group.run_all(clear_memory=True, plot_now=True)
|
|
49
|
+
results_db.close()
|
|
50
|
+
db.add_run_to_database(
|
|
51
|
+
maf_dir=name + "_glance",
|
|
52
|
+
tracking_db_file="trackingDb_sqlite.db",
|
|
53
|
+
run_group=None,
|
|
54
|
+
run_name=name,
|
|
55
|
+
run_comment="",
|
|
56
|
+
maf_comment="Glance",
|
|
57
|
+
db_file=name + ".db",
|
|
58
|
+
)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Add similar lines (from .filename import *) when you add new metrics,
|
|
2
|
+
# stackers or slicers.
|
|
3
|
+
from .calculate_lsst_field_visibility_astropy import *
|
|
4
|
+
from .depth_limited_num_gal_metric import *
|
|
5
|
+
from .filter_pair_t_gaps_metric import *
|
|
6
|
+
from .grb_transient_metric import *
|
|
7
|
+
from .gw170817_det_metric import *
|
|
8
|
+
from .kne_metrics import *
|
|
9
|
+
from .lss_metrics import *
|
|
10
|
+
from .lss_obs_strategy import *
|
|
11
|
+
from .lv_dwarfs import *
|
|
12
|
+
from .microlensing_metric import *
|
|
13
|
+
from .periodic_metric import *
|
|
14
|
+
from .periodic_star_metric import *
|
|
15
|
+
from .periodic_star_modulation_metric import *
|
|
16
|
+
from .presto_color_kne_pop_metric import *
|
|
17
|
+
from .selfcal_uniformity_metric import *
|
|
18
|
+
from .star_count_mass_metric import *
|
|
19
|
+
from .star_count_metric import *
|
|
20
|
+
from .static_probes_fom_summary_metric import *
|
|
21
|
+
from .tdes_pop_metric import *
|
|
22
|
+
from .triplet_metric import *
|
|
23
|
+
from .var_depth_metric import *
|
|
24
|
+
from .xrb_metrics import *
|
|
25
|
+
from .young_stellar_objects_metric import *
|