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.
Files changed (387) hide show
  1. batch/compile_prenight_metadata_cache.sh +34 -0
  2. batch/run_auxtel_prenight_sims.sh +163 -0
  3. batch/run_prenight_sims.sh +239 -0
  4. docs/.gitignore +3 -0
  5. docs/Makefile +32 -0
  6. docs/api.rst +25 -0
  7. docs/conf.py +8 -0
  8. docs/data-api.rst +12 -0
  9. docs/data-download.rst +70 -0
  10. docs/developer.rst +14 -0
  11. docs/documenteer.toml +11 -0
  12. docs/index.rst +22 -0
  13. docs/installation.rst +76 -0
  14. docs/introduction.rst +37 -0
  15. docs/maf-api-batches.rst +12 -0
  16. docs/maf-api-db.rst +12 -0
  17. docs/maf-api-maf-contrib.rst +12 -0
  18. docs/maf-api-maps.rst +12 -0
  19. docs/maf-api-metricbundles.rst +12 -0
  20. docs/maf-api-metrics.rst +12 -0
  21. docs/maf-api-plots.rst +12 -0
  22. docs/maf-api-run-comparison.rst +12 -0
  23. docs/maf-api-slicers.rst +12 -0
  24. docs/maf-api-stackers.rst +12 -0
  25. docs/maf-api-utils.rst +12 -0
  26. docs/maf-api.rst +22 -0
  27. docs/maf.rst +60 -0
  28. docs/metric_list.py +49 -0
  29. docs/moving-objects-api.rst +12 -0
  30. docs/moving-objects.rst +22 -0
  31. docs/phot-utils-api.rst +12 -0
  32. docs/phot-utils.rst +11 -0
  33. docs/prenight.rst +117 -0
  34. docs/protoarchive.rst +276 -0
  35. docs/satellite-constellations-api.rst +12 -0
  36. docs/satellite-constellations.rst +13 -0
  37. docs/selfcal-api.rst +12 -0
  38. docs/selfcal.rst +15 -0
  39. docs/sim-archive-api.rst +12 -0
  40. docs/skybrightness-api.rst +12 -0
  41. docs/skybrightness.rst +23 -0
  42. docs/user-guide.rst +28 -0
  43. docs/vseqarchive-architecture.rst +438 -0
  44. docs/vseqarchive-setup.rst +238 -0
  45. docs/vseqarchive.rst +225 -0
  46. rubin_sim/__init__.py +7 -0
  47. rubin_sim/data/__init__.py +1 -0
  48. rubin_sim/data/rs_download_data.py +155 -0
  49. rubin_sim/maf/__init__.py +34 -0
  50. rubin_sim/maf/batches/__init__.py +18 -0
  51. rubin_sim/maf/batches/altaz_batch.py +161 -0
  52. rubin_sim/maf/batches/col_map_dict.py +274 -0
  53. rubin_sim/maf/batches/common.py +388 -0
  54. rubin_sim/maf/batches/ddf_batch.py +728 -0
  55. rubin_sim/maf/batches/filterchange_batch.py +182 -0
  56. rubin_sim/maf/batches/glance_batch.py +591 -0
  57. rubin_sim/maf/batches/hourglass_batch.py +79 -0
  58. rubin_sim/maf/batches/info_batch.py +114 -0
  59. rubin_sim/maf/batches/metadata_batch.py +558 -0
  60. rubin_sim/maf/batches/moving_objects_batch.py +1587 -0
  61. rubin_sim/maf/batches/openshutter_batch.py +100 -0
  62. rubin_sim/maf/batches/radar_limited.py +1100 -0
  63. rubin_sim/maf/batches/science_radar_batch.py +1910 -0
  64. rubin_sim/maf/batches/skycoverage.py +155 -0
  65. rubin_sim/maf/batches/slew_batch.py +146 -0
  66. rubin_sim/maf/batches/srd_batch.py +637 -0
  67. rubin_sim/maf/batches/time_batch.py +757 -0
  68. rubin_sim/maf/batches/time_sci_batch.py +105 -0
  69. rubin_sim/maf/batches/visitdepth_batch.py +485 -0
  70. rubin_sim/maf/db/__init__.py +2 -0
  71. rubin_sim/maf/db/add_run.py +34 -0
  72. rubin_sim/maf/db/results_db.py +1074 -0
  73. rubin_sim/maf/db/tracking_db.py +332 -0
  74. rubin_sim/maf/ddf_dir.py +53 -0
  75. rubin_sim/maf/generate_ss.py +218 -0
  76. rubin_sim/maf/glance_dir.py +58 -0
  77. rubin_sim/maf/maf_contrib/__init__.py +25 -0
  78. rubin_sim/maf/maf_contrib/calculate_lsst_field_visibility_astropy.py +170 -0
  79. rubin_sim/maf/maf_contrib/depth_limited_num_gal_metric.py +109 -0
  80. rubin_sim/maf/maf_contrib/example_new_metrics.py +40 -0
  81. rubin_sim/maf/maf_contrib/filter_pair_t_gaps_metric.py +208 -0
  82. rubin_sim/maf/maf_contrib/grb_transient_metric.py +249 -0
  83. rubin_sim/maf/maf_contrib/gw170817_det_metric.py +72 -0
  84. rubin_sim/maf/maf_contrib/intervals_between_obs_metric.py +68 -0
  85. rubin_sim/maf/maf_contrib/kne_metrics.py +473 -0
  86. rubin_sim/maf/maf_contrib/lss_metrics.py +45 -0
  87. rubin_sim/maf/maf_contrib/lss_obs_strategy/__init__.py +3 -0
  88. rubin_sim/maf/maf_contrib/lss_obs_strategy/constants_for_pipeline.py +73 -0
  89. rubin_sim/maf/maf_contrib/lss_obs_strategy/galaxy_counts_metric_extended.py +205 -0
  90. rubin_sim/maf/maf_contrib/lss_obs_strategy/galaxy_counts_with_pixel_calibration.py +171 -0
  91. rubin_sim/maf/maf_contrib/lv_dwarfs/__init__.py +1 -0
  92. rubin_sim/maf/maf_contrib/lv_dwarfs/lv_dwarfs_metrics.py +388 -0
  93. rubin_sim/maf/maf_contrib/microlensing_metric.py +593 -0
  94. rubin_sim/maf/maf_contrib/num_obs_in_survey_time_overlap_metric.py +43 -0
  95. rubin_sim/maf/maf_contrib/periodic_metric.py +51 -0
  96. rubin_sim/maf/maf_contrib/periodic_star_metric.py +186 -0
  97. rubin_sim/maf/maf_contrib/periodic_star_modulation_metric.py +236 -0
  98. rubin_sim/maf/maf_contrib/presto_color_kne_pop_metric.py +441 -0
  99. rubin_sim/maf/maf_contrib/selfcal_uniformity_metric.py +171 -0
  100. rubin_sim/maf/maf_contrib/star_count_mass_metric.py +64 -0
  101. rubin_sim/maf/maf_contrib/star_count_metric.py +56 -0
  102. rubin_sim/maf/maf_contrib/star_counts/__init__.py +8 -0
  103. rubin_sim/maf/maf_contrib/star_counts/abs_mag.py +324 -0
  104. rubin_sim/maf/maf_contrib/star_counts/coords.py +99 -0
  105. rubin_sim/maf/maf_contrib/star_counts/readme.txt +1 -0
  106. rubin_sim/maf/maf_contrib/star_counts/spec_type.py +91 -0
  107. rubin_sim/maf/maf_contrib/star_counts/starcount.py +30 -0
  108. rubin_sim/maf/maf_contrib/star_counts/starcount_bymass.py +93 -0
  109. rubin_sim/maf/maf_contrib/star_counts/stellardensity.py +59 -0
  110. rubin_sim/maf/maf_contrib/static_probes_fom_summary_metric.py +386 -0
  111. rubin_sim/maf/maf_contrib/tdes_pop_metric.py +362 -0
  112. rubin_sim/maf/maf_contrib/transient_ascii_sed_metric.py +652 -0
  113. rubin_sim/maf/maf_contrib/triplet_metric.py +156 -0
  114. rubin_sim/maf/maf_contrib/var_depth_metric.py +157 -0
  115. rubin_sim/maf/maf_contrib/xrb_metrics.py +523 -0
  116. rubin_sim/maf/maf_contrib/young_stellar_objects_metric.py +200 -0
  117. rubin_sim/maf/maf_night_report.py +200 -0
  118. rubin_sim/maf/make_fbs_tracking_db.py +90 -0
  119. rubin_sim/maf/maps/__init__.py +8 -0
  120. rubin_sim/maf/maps/base_map.py +72 -0
  121. rubin_sim/maf/maps/create_gaia_density_map.py +158 -0
  122. rubin_sim/maf/maps/dust_map.py +66 -0
  123. rubin_sim/maf/maps/dust_map_3d.py +190 -0
  124. rubin_sim/maf/maps/ebv_3d_hp.py +170 -0
  125. rubin_sim/maf/maps/ebv_hp.py +64 -0
  126. rubin_sim/maf/maps/gal_coords_map.py +22 -0
  127. rubin_sim/maf/maps/galactic_plane_priority_maps.py +210 -0
  128. rubin_sim/maf/maps/stellar_density_map.py +73 -0
  129. rubin_sim/maf/maps/trilegal_map.py +82 -0
  130. rubin_sim/maf/metadata_dir.py +90 -0
  131. rubin_sim/maf/metric_bundles/__init__.py +3 -0
  132. rubin_sim/maf/metric_bundles/metric_bundle.py +816 -0
  133. rubin_sim/maf/metric_bundles/metric_bundle_group.py +834 -0
  134. rubin_sim/maf/metric_bundles/mo_metric_bundle.py +646 -0
  135. rubin_sim/maf/metrics/__init__.py +52 -0
  136. rubin_sim/maf/metrics/agn_time_lag_metric.py +118 -0
  137. rubin_sim/maf/metrics/agnstructure.py +141 -0
  138. rubin_sim/maf/metrics/area_summary_metrics.py +120 -0
  139. rubin_sim/maf/metrics/base_metric.py +215 -0
  140. rubin_sim/maf/metrics/brown_dwarf_metric.py +162 -0
  141. rubin_sim/maf/metrics/cadence_metrics.py +400 -0
  142. rubin_sim/maf/metrics/calibration_metrics.py +618 -0
  143. rubin_sim/maf/metrics/chip_vendor_metric.py +43 -0
  144. rubin_sim/maf/metrics/color_slope_metrics.py +189 -0
  145. rubin_sim/maf/metrics/cosmology_summary_metrics.py +1212 -0
  146. rubin_sim/maf/metrics/coverage_metric.py +48 -0
  147. rubin_sim/maf/metrics/crowding_metric.py +255 -0
  148. rubin_sim/maf/metrics/cumulative_metric.py +46 -0
  149. rubin_sim/maf/metrics/dcr_metric.py +93 -0
  150. rubin_sim/maf/metrics/exgal_m5.py +57 -0
  151. rubin_sim/maf/metrics/fft_metric.py +27 -0
  152. rubin_sim/maf/metrics/galactic_plane_metrics.py +375 -0
  153. rubin_sim/maf/metrics/galplane_time_sampling_metrics.py +236 -0
  154. rubin_sim/maf/metrics/hourglass_metric.py +130 -0
  155. rubin_sim/maf/metrics/incremental_template_metric.py +255 -0
  156. rubin_sim/maf/metrics/kuiper_metrics.py +26 -0
  157. rubin_sim/maf/metrics/mo_metrics.py +1496 -0
  158. rubin_sim/maf/metrics/mo_summary_metrics.py +464 -0
  159. rubin_sim/maf/metrics/night_pointing_metric.py +70 -0
  160. rubin_sim/maf/metrics/optimal_m5_metric.py +94 -0
  161. rubin_sim/maf/metrics/pair_metric.py +69 -0
  162. rubin_sim/maf/metrics/periodic_detect_metric.py +133 -0
  163. rubin_sim/maf/metrics/phase_gap_metric.py +172 -0
  164. rubin_sim/maf/metrics/qso_number_counts_metric.py +138 -0
  165. rubin_sim/maf/metrics/scaling_metrics.py +148 -0
  166. rubin_sim/maf/metrics/schedview_metrics.py +39 -0
  167. rubin_sim/maf/metrics/season_metrics.py +344 -0
  168. rubin_sim/maf/metrics/simple_metrics.py +546 -0
  169. rubin_sim/maf/metrics/sky_sat_metric.py +18 -0
  170. rubin_sim/maf/metrics/sn_cadence_metric.py +104 -0
  171. rubin_sim/maf/metrics/sn_n_sn_metric.py +1364 -0
  172. rubin_sim/maf/metrics/sn_sl_metric.py +216 -0
  173. rubin_sim/maf/metrics/sn_snr_metric.py +715 -0
  174. rubin_sim/maf/metrics/snr_weight.py +24 -0
  175. rubin_sim/maf/metrics/star_density.py +77 -0
  176. rubin_sim/maf/metrics/string_count_metric.py +95 -0
  177. rubin_sim/maf/metrics/summary_metrics.py +201 -0
  178. rubin_sim/maf/metrics/surfb_metric.py +175 -0
  179. rubin_sim/maf/metrics/technical_metrics.py +271 -0
  180. rubin_sim/maf/metrics/tgaps.py +412 -0
  181. rubin_sim/maf/metrics/tomography_models.py +2034 -0
  182. rubin_sim/maf/metrics/transient_metrics.py +268 -0
  183. rubin_sim/maf/metrics/uniformity_metrics.py +418 -0
  184. rubin_sim/maf/metrics/use_metrics.py +55 -0
  185. rubin_sim/maf/metrics/vector_metrics.py +190 -0
  186. rubin_sim/maf/metrics/visit_groups_metric.py +341 -0
  187. rubin_sim/maf/metrics/weak_lensing_systematics_metric.py +210 -0
  188. rubin_sim/maf/plots/__init__.py +14 -0
  189. rubin_sim/maf/plots/hg_plotters.py +1117 -0
  190. rubin_sim/maf/plots/hourglass_plotters.py +120 -0
  191. rubin_sim/maf/plots/mo_plotters.py +358 -0
  192. rubin_sim/maf/plots/nd_plotters.py +220 -0
  193. rubin_sim/maf/plots/neo_distance_plotter.py +140 -0
  194. rubin_sim/maf/plots/night_pointing_plotter.py +96 -0
  195. rubin_sim/maf/plots/oned_plotters.py +114 -0
  196. rubin_sim/maf/plots/perceptual_rainbow.py +30 -0
  197. rubin_sim/maf/plots/plot_handler.py +766 -0
  198. rubin_sim/maf/plots/skyproj_plotters.py +540 -0
  199. rubin_sim/maf/plots/spatial_plotters.py +1029 -0
  200. rubin_sim/maf/plots/special_plotters.py +256 -0
  201. rubin_sim/maf/plots/two_d_plotters.py +177 -0
  202. rubin_sim/maf/plots/xyplotter.py +37 -0
  203. rubin_sim/maf/run_comparison/__init__.py +5 -0
  204. rubin_sim/maf/run_comparison/archive.py +584 -0
  205. rubin_sim/maf/run_comparison/gather_summaries.py +125 -0
  206. rubin_sim/maf/run_comparison/microlensing_compare.py +514 -0
  207. rubin_sim/maf/run_comparison/radar_plot.py +202 -0
  208. rubin_sim/maf/run_comparison/summary_plots.py +710 -0
  209. rubin_sim/maf/run_moving_calc.py +239 -0
  210. rubin_sim/maf/run_moving_fractions.py +128 -0
  211. rubin_sim/maf/run_moving_join.py +103 -0
  212. rubin_sim/maf/run_selfcal_metric.py +92 -0
  213. rubin_sim/maf/scimaf_dir.py +87 -0
  214. rubin_sim/maf/show_maf.py +227 -0
  215. rubin_sim/maf/slicers/__init__.py +13 -0
  216. rubin_sim/maf/slicers/base_slicer.py +513 -0
  217. rubin_sim/maf/slicers/base_spatial_slicer.py +202 -0
  218. rubin_sim/maf/slicers/healpix_sdss_slicer.py +118 -0
  219. rubin_sim/maf/slicers/healpix_slicer.py +189 -0
  220. rubin_sim/maf/slicers/healpix_subset_slicer.py +293 -0
  221. rubin_sim/maf/slicers/hourglass_slicer.py +37 -0
  222. rubin_sim/maf/slicers/mo_slicer.py +171 -0
  223. rubin_sim/maf/slicers/movie_slicer.py +288 -0
  224. rubin_sim/maf/slicers/nd_slicer.py +147 -0
  225. rubin_sim/maf/slicers/one_d_slicer.py +210 -0
  226. rubin_sim/maf/slicers/time_interval_slicers.py +283 -0
  227. rubin_sim/maf/slicers/uni_slicer.py +57 -0
  228. rubin_sim/maf/slicers/user_points_slicer.py +141 -0
  229. rubin_sim/maf/stackers/__init__.py +13 -0
  230. rubin_sim/maf/stackers/base_stacker.py +221 -0
  231. rubin_sim/maf/stackers/coord_stackers.py +224 -0
  232. rubin_sim/maf/stackers/date_stackers.py +192 -0
  233. rubin_sim/maf/stackers/general_stackers.py +683 -0
  234. rubin_sim/maf/stackers/get_col_info.py +104 -0
  235. rubin_sim/maf/stackers/label_stackers.py +114 -0
  236. rubin_sim/maf/stackers/m5_optimal_stacker.py +126 -0
  237. rubin_sim/maf/stackers/mo_phase.py +265 -0
  238. rubin_sim/maf/stackers/mo_stackers.py +486 -0
  239. rubin_sim/maf/stackers/n_follow_stacker.py +187 -0
  240. rubin_sim/maf/stackers/neo_dist_stacker.py +126 -0
  241. rubin_sim/maf/stackers/sdss_stackers.py +30 -0
  242. rubin_sim/maf/stackers/sn_stacker.py +152 -0
  243. rubin_sim/maf/stackers/teff_stacker.py +154 -0
  244. rubin_sim/maf/utils/__init__.py +6 -0
  245. rubin_sim/maf/utils/astrometry_utils.py +93 -0
  246. rubin_sim/maf/utils/generate_fov_map.py +58 -0
  247. rubin_sim/maf/utils/get_date_version.py +28 -0
  248. rubin_sim/maf/utils/maf_utils.py +212 -0
  249. rubin_sim/maf/utils/opsim_utils.py +259 -0
  250. rubin_sim/maf/utils/output_utils.py +34 -0
  251. rubin_sim/maf/utils/sn_n_sn_utils.py +894 -0
  252. rubin_sim/maf/utils/sn_utils.py +369 -0
  253. rubin_sim/maf/utils/stellar_mags.py +197 -0
  254. rubin_sim/maf/web/__init__.py +2 -0
  255. rubin_sim/maf/web/favicon.ico +0 -0
  256. rubin_sim/maf/web/maf_run_results.py +645 -0
  257. rubin_sim/maf/web/maf_tracking.py +139 -0
  258. rubin_sim/maf/web/sorttable.js +496 -0
  259. rubin_sim/maf/web/templates/allmetricresults.html +72 -0
  260. rubin_sim/maf/web/templates/configs.html +28 -0
  261. rubin_sim/maf/web/templates/macros.html +243 -0
  262. rubin_sim/maf/web/templates/master.html +294 -0
  263. rubin_sim/maf/web/templates/metricselect.html +91 -0
  264. rubin_sim/maf/web/templates/multicolor.html +147 -0
  265. rubin_sim/maf/web/templates/results.html +82 -0
  266. rubin_sim/maf/web/templates/runselect.html +58 -0
  267. rubin_sim/maf/web/templates/stats.html +50 -0
  268. rubin_sim/moving_objects/__init__.py +8 -0
  269. rubin_sim/moving_objects/base_obs.py +468 -0
  270. rubin_sim/moving_objects/cheby_fits.py +689 -0
  271. rubin_sim/moving_objects/cheby_values.py +231 -0
  272. rubin_sim/moving_objects/chebyshev_utils.py +365 -0
  273. rubin_sim/moving_objects/direct_obs.py +376 -0
  274. rubin_sim/moving_objects/make_lsst_obs.py +282 -0
  275. rubin_sim/moving_objects/ooephemerides.py +643 -0
  276. rubin_sim/moving_objects/orbits.py +507 -0
  277. rubin_sim/moving_objects/pre_generate.py +37 -0
  278. rubin_sim/moving_objects/utils.py +61 -0
  279. rubin_sim/phot_utils/__init__.py +7 -0
  280. rubin_sim/phot_utils/bandpass.py +425 -0
  281. rubin_sim/phot_utils/photometric_parameters.py +449 -0
  282. rubin_sim/phot_utils/physical_parameters.py +50 -0
  283. rubin_sim/phot_utils/predicted_zeropoints.py +245 -0
  284. rubin_sim/phot_utils/sed.py +1773 -0
  285. rubin_sim/phot_utils/sed_utils.py +52 -0
  286. rubin_sim/phot_utils/signaltonoise.py +695 -0
  287. rubin_sim/phot_utils/spectral_resampling.py +161 -0
  288. rubin_sim/satellite_constellations/__init__.py +3 -0
  289. rubin_sim/satellite_constellations/basis_function.py +40 -0
  290. rubin_sim/satellite_constellations/model_observatory.py +157 -0
  291. rubin_sim/satellite_constellations/sat_utils.py +488 -0
  292. rubin_sim/selfcal/__init__.py +4 -0
  293. rubin_sim/selfcal/generate_catalog.py +188 -0
  294. rubin_sim/selfcal/offsets.py +119 -0
  295. rubin_sim/selfcal/solver.py +143 -0
  296. rubin_sim/selfcal/star_tools.py +42 -0
  297. rubin_sim/sim_archive/__init__.py +14 -0
  298. rubin_sim/sim_archive/conda_packages.py +65 -0
  299. rubin_sim/sim_archive/future_vsarch.py +480 -0
  300. rubin_sim/sim_archive/make_snapshot.py +255 -0
  301. rubin_sim/sim_archive/prenight.py +216 -0
  302. rubin_sim/sim_archive/prenightindex.py +229 -0
  303. rubin_sim/sim_archive/prototype.py +1029 -0
  304. rubin_sim/sim_archive/sim_archive.py +680 -0
  305. rubin_sim/sim_archive/tempdb.py +56 -0
  306. rubin_sim/sim_archive/util.py +146 -0
  307. rubin_sim/sim_archive/vseqarchive.py +965 -0
  308. rubin_sim/sim_archive/vseqmetadata.py +1721 -0
  309. rubin_sim/skybrightness/__init__.py +5 -0
  310. rubin_sim/skybrightness/allsky_db.py +93 -0
  311. rubin_sim/skybrightness/data/ESO_Spectra/eso_tools.py +505 -0
  312. rubin_sim/skybrightness/data/solarSpec/package.py +22 -0
  313. rubin_sim/skybrightness/generate_hdf5.py +243 -0
  314. rubin_sim/skybrightness/interp_components.py +798 -0
  315. rubin_sim/skybrightness/sky_model.py +771 -0
  316. rubin_sim/skybrightness/twilight_func.py +83 -0
  317. rubin_sim/skybrightness/utils.py +91 -0
  318. rubin_sim-2.6.1.dev2.dist-info/METADATA +95 -0
  319. rubin_sim-2.6.1.dev2.dist-info/RECORD +387 -0
  320. rubin_sim-2.6.1.dev2.dist-info/WHEEL +5 -0
  321. rubin_sim-2.6.1.dev2.dist-info/entry_points.txt +24 -0
  322. rubin_sim-2.6.1.dev2.dist-info/licenses/LICENSE +674 -0
  323. rubin_sim-2.6.1.dev2.dist-info/top_level.txt +5 -0
  324. sql/make_vseqmeta.sql +251 -0
  325. tests/data/test_data.py +26 -0
  326. tests/data/test_ddf_grid.py +17 -0
  327. tests/maf/test_3x2fom.py +68 -0
  328. tests/maf/test_archive.py +162 -0
  329. tests/maf/test_basemetrics.py +99 -0
  330. tests/maf/test_batchcommon.py +36 -0
  331. tests/maf/test_batches.py +159 -0
  332. tests/maf/test_cadencemetrics.py +388 -0
  333. tests/maf/test_calibrationmetrics.py +242 -0
  334. tests/maf/test_color_slopes.py +71 -0
  335. tests/maf/test_cosmology_summaries.py +20 -0
  336. tests/maf/test_gathersummaries.py +48 -0
  337. tests/maf/test_healpixslicer.py +439 -0
  338. tests/maf/test_healpixsubsetslicer.py +273 -0
  339. tests/maf/test_hgplotters.py +145 -0
  340. tests/maf/test_hourglassmetric.py +33 -0
  341. tests/maf/test_io.py +187 -0
  342. tests/maf/test_json.py +169 -0
  343. tests/maf/test_maps.py +199 -0
  344. tests/maf/test_metricbundle.py +69 -0
  345. tests/maf/test_mometrics.py +422 -0
  346. tests/maf/test_movieslicer.py +216 -0
  347. tests/maf/test_ndslicer.py +240 -0
  348. tests/maf/test_neodistanceplotter.py +41 -0
  349. tests/maf/test_onedslicer.py +245 -0
  350. tests/maf/test_opsimutils.py +80 -0
  351. tests/maf/test_plotters.py +134 -0
  352. tests/maf/test_resultsdb.py +145 -0
  353. tests/maf/test_schedviewmetrics.py +14 -0
  354. tests/maf/test_simplemetrics.py +200 -0
  355. tests/maf/test_snmetrics.py +335 -0
  356. tests/maf/test_snmetrics_nsn.py +123 -0
  357. tests/maf/test_stackers.py +423 -0
  358. tests/maf/test_stellarmags.py +50 -0
  359. tests/maf/test_stringcount.py +26 -0
  360. tests/maf/test_summary_plots.py +197 -0
  361. tests/maf/test_summarymetrics.py +82 -0
  362. tests/maf/test_technicalmetrics.py +267 -0
  363. tests/maf/test_templatemetrics.py +86 -0
  364. tests/maf/test_timeintervalslicers.py +97 -0
  365. tests/maf/test_trackingdb.py +88 -0
  366. tests/maf/test_unislicer.py +116 -0
  367. tests/maf/test_vectormetrics.py +225 -0
  368. tests/maf/test_visitgroupsmetric.py +181 -0
  369. tests/moving_objects/test_camera.py +39 -0
  370. tests/moving_objects/test_chebyfits.py +188 -0
  371. tests/moving_objects/test_chebyshevutils.py +76 -0
  372. tests/moving_objects/test_chebyvalues.py +245 -0
  373. tests/moving_objects/test_ephemerides.py +219 -0
  374. tests/moving_objects/test_orbits.py +170 -0
  375. tests/moving_objects/test_sed_data.py +61 -0
  376. tests/phot_utils/test_approximatebandpasses.py +91 -0
  377. tests/phot_utils/test_photometricparameters.py +268 -0
  378. tests/phot_utils/test_photometry.py +61 -0
  379. tests/phot_utils/test_predicted_zeropoints.py +53 -0
  380. tests/phot_utils/test_read_bandpasses.py +29 -0
  381. tests/phot_utils/test_sed.py +368 -0
  382. tests/phot_utils/test_snr.py +370 -0
  383. tests/satellite_constellations/test_satellites.py +36 -0
  384. tests/sim_archive/test_make_snapshot.py +24 -0
  385. tests/sim_archive/test_prototype_sim_archive.py +204 -0
  386. tests/sim_archive/test_vseqarchive.py +947 -0
  387. tests/skybrightness/test_skymodel.py +359 -0
@@ -0,0 +1,210 @@
1
+ __all__ = (
2
+ "gp_priority_map_components_to_keys",
3
+ "galplane_priority_map",
4
+ "GalacticPlanePriorityMap",
5
+ )
6
+
7
+ import os
8
+ import warnings
9
+
10
+ import healpy as hp
11
+ import numpy as np
12
+ from astropy.io import fits
13
+ from rubin_scheduler.data import get_data_dir
14
+
15
+ from rubin_sim.maf.maps import BaseMap
16
+ from rubin_sim.maf.utils import radec2pix
17
+
18
+
19
+ def gp_priority_map_components_to_keys(filtername, science_map):
20
+ """A convenience function to help keep the map key
21
+ formats in sync in various places.
22
+ """
23
+ return f"galplane_priority_{science_map}:{filtername}"
24
+
25
+
26
+ def gp_priority_map_keys_to_components(mapname):
27
+ s, f = mapname.replace("galplane_priority_", "").split(":")
28
+ return f, s
29
+
30
+
31
+ def galplane_priority_map(
32
+ nside=64,
33
+ get_keys=False,
34
+ ra=None,
35
+ dec=None,
36
+ pixels=None,
37
+ interp=False,
38
+ map_path=None,
39
+ use_alt_maps=False,
40
+ ):
41
+ """Reads and saves the galactic plane priority maps.
42
+
43
+ Parameters
44
+ ----------
45
+ nside : `int`
46
+ Healpixel resolution (2^x). At present, this must be 64.
47
+ get_keys : `bool`, opt
48
+ Set this to True to retrieve *only* the keys
49
+ (such as the science map names) for the maps.
50
+ Default False.
51
+ ra : `np.ndarray` or `float`, opt
52
+ RA (can take numpy array).
53
+ Default None sets up healpix array of nside. Radians.
54
+ dec : `np.ndarray` or `float`, opt
55
+ Dec (can take numpy array).
56
+ Default None set up healpix array of nside. Radians.
57
+ pixels : `np.ndarray`, opt
58
+ Healpixel IDs, to sub-select particular healpix points.
59
+ Default uses all points.
60
+ Easiest way to access healpix values.
61
+ Note that the pixels in the healpix array MUST come from a
62
+ healpix grid with the same nside as the galactic plane priority map.
63
+ Using different nsides can potentially fail silently.
64
+ interp : `bool`, opt
65
+ Should returned values be interpolated (True)
66
+ or just nearest neighbor (False).
67
+ Default False.
68
+ map_path : `str`, opt
69
+ Path to directory containing dust map files.
70
+ Default None, uses $RUBIN_SIM_DATA_DIR/maps.
71
+ use_alt_maps : `bool`, opt
72
+ Use the priority_GalPlane_footprint_alt_map_data_{ugrizysum}.fits
73
+ files instead of the default
74
+ priority_galPlane_footprint_map_data_{ugrizysum}.fits files.
75
+ """
76
+ # This is a function that will read the galactic plane priority map data
77
+ # and hold onto it indefinitely
78
+ # this also lets us use a range of slicers, as it will set the slice_point
79
+ # data appropriately.
80
+
81
+ # This function's primary goal is to return this information to the map,
82
+ # to use for the slicer.
83
+ # So you MUST specify ra/dec or pixels -- or only retireve the keys
84
+ if get_keys is False:
85
+ if (ra is None) & (dec is None) & (pixels is None):
86
+ raise RuntimeError("Need to set ra,dec or pixels.")
87
+
88
+ # This reads and stores the galactic plane priority maps
89
+ # The galactic plane priority maps are only available in nside 64
90
+ # There are several different versions of the map -
91
+ # but we will almost always run all of the galactic plane metrics
92
+ # together, so we'll just read them all at once here
93
+ if nside != 64:
94
+ raise RuntimeError("Currently only available with nside=64")
95
+
96
+ # Do we need to read from disk?
97
+ if not hasattr(galplane_priority_map, "maps"):
98
+ galplane_priority_map.nside = 64
99
+ galplane_priority_map.filterlist = ["u", "g", "r", "i", "z", "y", "sum"]
100
+ if map_path is not None:
101
+ data_dir = map_path
102
+ else:
103
+ data_dir = os.path.join(get_data_dir(), "maps", "GalacticPlanePriorityMaps")
104
+ galplane_priority_map.maps = {}
105
+ science_maps = []
106
+ for f in galplane_priority_map.filterlist:
107
+ if use_alt_maps:
108
+ filename = f"priority_GalPlane_footprint_alt_map_data_{f}.fits"
109
+ else:
110
+ filename = f"priority_GalPlane_footprint_map_data_{f}.fits"
111
+ mapfile = os.path.join(data_dir, filename)
112
+ with fits.open(mapfile) as hdul:
113
+ galplane_priority_map.maps[f] = hdul[1].data
114
+ print(f"Read galplane priority map from {mapfile}")
115
+ science_maps += list(galplane_priority_map.maps[f].dtype.names)
116
+ science_maps = list(set(science_maps))
117
+ galplane_priority_map.science_maps = science_maps
118
+
119
+ galplane_priority_map.keys = [
120
+ gp_priority_map_components_to_keys(f, s)
121
+ for f in galplane_priority_map.filterlist
122
+ for s in galplane_priority_map.science_maps
123
+ ]
124
+
125
+ if get_keys:
126
+ return galplane_priority_map.keys
127
+
128
+ if pixels is not None:
129
+ # Assume if pixels is set, then interp is irrelevant
130
+ maps = {}
131
+ for k in galplane_priority_map.keys:
132
+ f, s = gp_priority_map_keys_to_components(k)
133
+ maps[k] = galplane_priority_map.maps[f][s][pixels]
134
+ # BUT, if we were provided ra/dec then have to see if we should interpolate
135
+ else:
136
+ if interp: # find interpolated values at given ra/dec
137
+ maps = {}
138
+ for k in galplane_priority_map.keys:
139
+ f, s = gp_priority_map_keys_to_components(k)
140
+ maps[k] = hp.get_interp_val(galplane_priority_map.maps[f][s], np.pi / 2.0 - dec, ra)
141
+ else: # just find nearest neighbor pixel value and return those
142
+ pixels = radec2pix(nside, ra, dec)
143
+ maps = {}
144
+ for k in galplane_priority_map.keys:
145
+ f, s = gp_priority_map_keys_to_components(k)
146
+ maps[k] = galplane_priority_map.maps[f][s][pixels]
147
+ return maps
148
+
149
+
150
+ class GalacticPlanePriorityMap(BaseMap):
151
+ """Add the galactic plane priority map data to the slice points.
152
+
153
+ This calls galactic_plane_priority_map to read the map data, and then
154
+ assigns the appropriate values to each slice_point.
155
+ If the slicer is an nside=64 healpix slicer, this is trivial.
156
+ (other use-cases currently experimental and not supported).
157
+
158
+ Add keys corresponding to each of the galplane priority map elements.
159
+
160
+ Parameters
161
+ ----------
162
+ interp : `bool`, opt
163
+ Interpolate the dust map at each slice_point (True)
164
+ or just use the nearest value (False).
165
+ Default is False.
166
+ nside : `int`, opt
167
+ Default nside value to read the dust map from disk.
168
+ Primarily useful if the slicer is not a healpix slicer.
169
+ Default 64.
170
+ map_path : `str`, opt
171
+ Define a path to the directory holding the dust map files.
172
+ Default None, which uses RUBIN_SIM_DATA_DIR.
173
+ """
174
+
175
+ def __init__(self, interp=False, nside=64, map_path=None):
176
+ self.keynames = galplane_priority_map(get_keys=True)
177
+ self.interp = interp
178
+ self.nside = nside
179
+ self.map_path = map_path
180
+
181
+ def run(self, slice_points):
182
+ # If the slicer has nside,
183
+ # it's a healpix slicer so we can read the map directly
184
+ if "nside" in slice_points:
185
+ if slice_points["nside"] != self.nside:
186
+ warnings.warn(
187
+ f"Slicer value of nside {slice_points['nside']} different "
188
+ f"from map value {self.nside}, using slicer value"
189
+ )
190
+ maps = galplane_priority_map(
191
+ slice_points["nside"],
192
+ pixels=slice_points["sid"],
193
+ map_path=self.map_path,
194
+ )
195
+ for key in self.keynames:
196
+ slice_points[key] = maps[key]
197
+ # Not a healpix slicer, look up values based on RA,dec
198
+ # with possible interpolation
199
+ else:
200
+ maps = galplane_priority_map(
201
+ self.nside,
202
+ ra=slice_points["ra"],
203
+ dec=slice_points["dec"],
204
+ interp=self.interp,
205
+ map_path=self.map_path,
206
+ )
207
+ for key in self.keynames:
208
+ slice_points[key] = maps[key]
209
+
210
+ return slice_points
@@ -0,0 +1,73 @@
1
+ __all__ = ("StellarDensityMap",)
2
+
3
+ import os
4
+
5
+ import healpy as hp
6
+ import numpy as np
7
+ from rubin_scheduler.data import get_data_dir
8
+
9
+ from rubin_sim.maf.utils import radec2pix
10
+
11
+ from . import BaseMap
12
+
13
+
14
+ class StellarDensityMap(BaseMap):
15
+ """Read and hold the cumulative stellar luminosity function for
16
+ each slice point.
17
+
18
+ The underlying stellar luminosity function map is nside = 64, and contains
19
+ stars per sq degree at a series of magnitudes (the map contains
20
+ `starLumFunc_<filter>` and `starMapBins_<filter>`).
21
+ For slice points which do not match nside=64, the map uses the nearest
22
+ healpix point on the nside=64 grid.
23
+
24
+ The stellar luminosity function comes from the GalFast model.
25
+
26
+ Parameters
27
+ ----------
28
+ startype : `str` ('allstars', 'wdstars')
29
+ Load the luminosity function for all stars ('allstars'),
30
+ which includes main-sequence stars
31
+ white dwarfs, blue horozontal branch, RR Lyrae, and Cepheids.
32
+ The 'wdstars' option only includes white dwarf stars.
33
+ filtername : `str`
34
+ Filter to use. Options of u,g,r,i,z,y
35
+ """
36
+
37
+ def __init__(self, startype="allstars", filtername="r", map_dir=None):
38
+ if map_dir is not None:
39
+ self.map_dir = map_dir
40
+ else:
41
+ self.map_dir = os.path.join(get_data_dir(), "maps", "StarMaps")
42
+ self.filtername = filtername
43
+ self.keynames = [
44
+ f"starLumFunc_{self.filtername}",
45
+ f"starMapBins_{self.filtername}",
46
+ ]
47
+ if startype == "allstars":
48
+ self.startype = ""
49
+ else:
50
+ self.startype = startype + "_"
51
+
52
+ def _read_map(self):
53
+ filename = "starDensity_%s_%snside_64.npz" % (self.filtername, self.startype)
54
+ star_map = np.load(os.path.join(self.map_dir, filename))
55
+ self.star_map = star_map["starDensity"].copy()
56
+ self.star_map_bins = star_map["bins"].copy()
57
+ self.starmap_nside = hp.npix2nside(np.size(self.star_map[:, 0]))
58
+
59
+ def run(self, slice_points):
60
+ self._read_map()
61
+
62
+ nside_match = False
63
+ if "nside" in slice_points:
64
+ if slice_points["nside"] == self.starmap_nside:
65
+ slice_points[f"starLumFunc_{self.filtername}"] = self.star_map
66
+ nside_match = True
67
+ if not nside_match:
68
+ # Compute the healpix for each slice_point on the nside=64 grid
69
+ indx = radec2pix(self.starmap_nside, slice_points["ra"], slice_points["dec"])
70
+ slice_points[f"starLumFunc_{self.filtername}"] = self.star_map[indx, :]
71
+
72
+ slice_points[f"starMapBins_{self.filtername}"] = self.star_map_bins
73
+ return slice_points
@@ -0,0 +1,82 @@
1
+ __all__ = ("TrilegalDensityMap",)
2
+
3
+ import os
4
+
5
+ import healpy as hp
6
+ import numpy as np
7
+ from astropy import units as u
8
+ from astropy.coordinates import SkyCoord
9
+ from rubin_scheduler.data import get_data_dir
10
+ from rubin_scheduler.utils import _build_tree, _hpid2_ra_dec, _xyz_from_ra_dec
11
+
12
+ from . import BaseMap
13
+
14
+
15
+ class TrilegalDensityMap(BaseMap):
16
+ """Read and hold the cumulative stellar luminosity function for
17
+ each slice point.
18
+
19
+ The stellar luminosity function comes from the TRILEGAL model.
20
+
21
+ Parameters
22
+ ----------
23
+ filtername : `str`, opt
24
+ Filter to use. Options of u,g,r,i,z,y. Default r.
25
+ nside : `int`, opt
26
+ The HEALpix nside (can be 64 or 128). Default 64.
27
+ ext : `bool`, opt
28
+ Use the full sky maps. Default True.
29
+
30
+ Notes
31
+ -----
32
+ The underlying stellar luminosity function map is available in a
33
+ variety of nsides, and contains
34
+ stars per sq degree at a series of magnitudes (the map contains
35
+ `starLumFunc_<filter>` and `starMapBins_<filter>`).
36
+ For slice points which do not match one of the native nside options,
37
+ the map uses the nearest healpix point on the specified nside grid.
38
+ """
39
+
40
+ def __init__(self, filtername="r", nside=64, ext=True):
41
+ self.map_dir = os.path.join(get_data_dir(), "maps", "TriMaps")
42
+ self.filtername = filtername
43
+ self.keynames = [
44
+ f"starLumFunc_{self.filtername}",
45
+ f"starMapBins_{self.filtername}",
46
+ ]
47
+ self.nside = nside
48
+ self.ext = ext
49
+
50
+ def _read_map(self):
51
+ if self.ext:
52
+ filename = "TRIstarDensity_%s_nside_%i_ext.npz" % (
53
+ self.filtername,
54
+ self.nside,
55
+ )
56
+ else:
57
+ filename = "TRIstarDensity_%s_nside_%i.npz" % (self.filtername, self.nside)
58
+ star_map = np.load(os.path.join(self.map_dir, filename))
59
+ self.star_map = star_map["starDensity"].copy()
60
+ self.star_map_bins = star_map["bins"].copy()
61
+ self.starmap_nside = hp.npix2nside(np.size(self.star_map[:, 0]))
62
+ # note, the trilegal maps are in galactic coordinates
63
+ # and use nested healpix.
64
+ gal_l, gal_b = _hpid2_ra_dec(self.nside, np.arange(hp.nside2npix(self.nside)), nest=True)
65
+
66
+ # Convert that to RA,dec. Then do nearest neighbor lookup.
67
+ c = SkyCoord(l=gal_l * u.rad, b=gal_b * u.rad, frame="galactic").transform_to("icrs")
68
+ ra = c.ra.rad
69
+ dec = c.dec.rad
70
+
71
+ self.tree = _build_tree(ra, dec)
72
+
73
+ def run(self, slice_points):
74
+ self._read_map()
75
+
76
+ x, y, z = _xyz_from_ra_dec(slice_points["ra"], slice_points["dec"])
77
+
78
+ dist, indices = self.tree.query(list(zip(x, y, z)))
79
+
80
+ slice_points["starLumFunc_%s" % self.filtername] = self.star_map[indices, :]
81
+ slice_points["starMapBins_%s" % self.filtername] = self.star_map_bins
82
+ return slice_points
@@ -0,0 +1,90 @@
1
+ from . import batches as batches
2
+ from .db import ResultsDb
3
+ from .metric_bundles import MetricBundleGroup
4
+ from .slicers import HealpixSlicer, make_wfd_subset_slicer
5
+
6
+ __all__ = ("metadata_dir",)
7
+
8
+ import argparse
9
+ import glob
10
+ import os
11
+ import shutil
12
+
13
+ import matplotlib
14
+
15
+ matplotlib.use("Agg")
16
+
17
+
18
+ def metadata_dir():
19
+ """
20
+ Run the metadata batch on all .db files in a directory.
21
+ """
22
+ parser = argparse.ArgumentParser()
23
+ parser.add_argument("--db", type=str, default=None)
24
+ parser.add_argument(
25
+ "--nside",
26
+ type=float,
27
+ default=64,
28
+ help="nside to use for the healpix slicer and subsetslicer for metrics.",
29
+ )
30
+ parser.add_argument(
31
+ "--wfd_threshold",
32
+ type=float,
33
+ default=750,
34
+ help="Threshold number of visits per pointing to use to define the WFD footprint."
35
+ "Default value of 750 corresponds to the minimum median value per pointing from the SRD.",
36
+ )
37
+ parser.add_argument(
38
+ "--no_clobber",
39
+ dest="no_clobber",
40
+ action="store_true",
41
+ default=False,
42
+ help="Do not remove existing directory outputs",
43
+ )
44
+ args = parser.parse_args()
45
+
46
+ # If runNames not given, scan for sim_name databases in current
47
+ # directory and use those
48
+ # Note that 'runNames' can be full path to directories
49
+
50
+ if args.db is None:
51
+ # Just look for any .db files in this directory
52
+ db_files = glob.glob("*.db")
53
+ # But remove trackingDb and results_db if they're there
54
+ try:
55
+ db_files.remove("trackingDb_sqlite.db")
56
+ except ValueError:
57
+ pass
58
+ try:
59
+ db_files.remove("resultsDb_sqlite.db")
60
+ except ValueError:
61
+ pass
62
+ elif isinstance(args.db, str):
63
+ db_files = [args.db]
64
+ else:
65
+ db_files = args.db
66
+
67
+ sim_names = [os.path.basename(name).replace(".db", "") for name in db_files]
68
+
69
+ for filename, sim_name in zip(db_files, sim_names):
70
+ # Connect to the database
71
+ colmap = batches.col_map_dict()
72
+
73
+ # Set and create if needed the output directory
74
+ out_dir = sim_name + "_meta"
75
+ if not args.no_clobber:
76
+ if os.path.isdir(out_dir):
77
+ shutil.rmtree(out_dir)
78
+
79
+ # Find the 'wfd' footprint - use the scheduler footprint.
80
+ allsky_slicer = HealpixSlicer(nside=args.nside)
81
+ wfd_slicer = make_wfd_subset_slicer(nside=args.nside)
82
+
83
+ bdict = batches.info_bundle_dicts(allsky_slicer, wfd_slicer, sim_name, colmap)
84
+
85
+ # Set up the resultsDB
86
+ results_db = ResultsDb(out_dir=out_dir)
87
+ # Go and run it
88
+ group = MetricBundleGroup(bdict, filename, out_dir=out_dir, results_db=results_db, save_early=False)
89
+ group.run_all(clear_memory=True, plot_now=True)
90
+ results_db.close()
@@ -0,0 +1,3 @@
1
+ from .metric_bundle import *
2
+ from .metric_bundle_group import *
3
+ from .mo_metric_bundle import *