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,256 @@
1
+ __all__ = ("FOPlot", "SummaryHistogram")
2
+
3
+
4
+ import healpy as hp
5
+ import matplotlib.pyplot as plt
6
+ import numpy as np
7
+
8
+ import rubin_sim.maf.metrics as metrics
9
+
10
+ from .plot_handler import BasePlotter
11
+
12
+
13
+ class FOPlot(BasePlotter):
14
+ """
15
+ Special plotter to generate and label fO plots.
16
+ """
17
+
18
+ def __init__(self):
19
+ self.plot_type = "FO"
20
+ self.object_plotter = False
21
+ self.default_plot_dict = {
22
+ "title": None,
23
+ "xlabel": "Number of visits",
24
+ "ylabel": "Area (1000s of square degrees)",
25
+ "scale": None,
26
+ "asky": 18000.0,
27
+ "n_visits": 825,
28
+ "x_min": 0,
29
+ "x_max": None,
30
+ "y_min": 0,
31
+ "y_max": None,
32
+ "linewidth": 2,
33
+ "reflinewidth": 2,
34
+ "figsize": None,
35
+ }
36
+
37
+ def __call__(self, metric_value, slicer, user_plot_dict, fig=None):
38
+ """
39
+ Parameters
40
+ ----------
41
+ metric_value : `numpy.ma.MaskedArray`
42
+ The metric values from the bundle.
43
+ slicer : `rubin_sim.maf.slicers.TwoDSlicer`
44
+ The slicer.
45
+ user_plot_dict: `dict`
46
+ Dictionary of plot parameters set by user
47
+ (overrides default values).
48
+ fig : `matplotlib.figure.Figure`
49
+ Matplotlib figure number to use. Default = None, starts new figure.
50
+
51
+ Returns
52
+ -------
53
+ fig : `matplotlib.figure.Figure`
54
+ Figure with the plot.
55
+ """
56
+ if not hasattr(slicer, "nside"):
57
+ raise ValueError("FOPlot to be used with healpix or healpix derived slicers.")
58
+
59
+ plot_dict = {}
60
+ plot_dict.update(self.default_plot_dict)
61
+ plot_dict.update(user_plot_dict)
62
+
63
+ if plot_dict["scale"] is None:
64
+ plot_dict["scale"] = hp.nside2pixarea(slicer.nside, degrees=True) / 1000.0
65
+
66
+ if fig is None:
67
+ fig, ax = plt.subplots(figsize=plot_dict["figsize"])
68
+ else:
69
+ ax = fig.gca()
70
+
71
+ # Expect metric_value to be something like number of visits
72
+ cumulative_area = np.arange(1, metric_value.compressed().size + 1)[::-1] * plot_dict["scale"]
73
+ ax.plot(
74
+ np.sort(metric_value.compressed()),
75
+ cumulative_area,
76
+ "k-",
77
+ linewidth=plot_dict["linewidth"],
78
+ zorder=0,
79
+ )
80
+ # This results in calculating the summary stats in two places ..
81
+ # not the ideal choice but easiest for most uses in this case.
82
+ asky = plot_dict["asky"]
83
+ n_visits = plot_dict["n_visits"]
84
+ rarr = np.array(list(zip(metric_value.compressed())), dtype=[("fO", metric_value.dtype)])
85
+ f_o_area = metrics.FOArea(col="fO", n_visit=n_visits, norm=False, nside=slicer.nside).run(rarr)
86
+ f_o_nv = metrics.FONv(col="fO", asky=asky, norm=False, nside=slicer.nside).run(rarr)
87
+
88
+ ax.axvline(x=n_visits, linewidth=plot_dict["reflinewidth"], color="b", linestyle=":")
89
+ ax.axhline(y=asky / 1000.0, linewidth=plot_dict["reflinewidth"], color="r", linestyle=":")
90
+ # Add lines for nvis_median and f_o_area:
91
+ # note if these are -666 (badval), they will 'disappear'
92
+ nvis_median = f_o_nv["value"][np.where(f_o_nv["name"] == "MedianNvis")][0]
93
+
94
+ ax.axvline(
95
+ x=nvis_median,
96
+ linewidth=plot_dict["reflinewidth"],
97
+ color="b",
98
+ alpha=0.5,
99
+ linestyle="-",
100
+ label=f"f$_0$ Med. Nvis. (@ {asky/1000 :.0f}K sq deg) = {nvis_median :.0f} visits",
101
+ )
102
+ ax.axhline(
103
+ y=f_o_area / 1000.0,
104
+ linewidth=plot_dict["reflinewidth"],
105
+ color="r",
106
+ alpha=0.5,
107
+ linestyle="-",
108
+ label=f"f$_0$ Area (@ {n_visits :.0f} visits) = {f_o_area/1000 :.01f}K sq deg",
109
+ )
110
+ ax.legend(loc="upper right", fontsize="small", numpoints=1, framealpha=1.0)
111
+
112
+ ax.set_xlabel(plot_dict["xlabel"])
113
+ ax.set_ylabel(plot_dict["ylabel"])
114
+ ax.set_title(plot_dict["title"])
115
+
116
+ x_min = plot_dict["x_min"]
117
+ x_max = plot_dict["x_max"]
118
+ y_min = plot_dict["y_min"]
119
+ y_max = plot_dict["y_max"]
120
+ if (x_min is not None) or (x_max is not None):
121
+ ax.set_xlim([x_min, x_max])
122
+ if (y_min is not None) or (y_max is not None):
123
+ ax.set_ylim([y_min, y_max])
124
+ return fig
125
+
126
+
127
+ class SummaryHistogram(BasePlotter):
128
+ """
129
+ Special plotter to summarize metrics which return a set of values
130
+ at each slice_point, e.g. a histogram the metric result per slicepoint.
131
+ (example: the results of with the rubin_sim.maf.metrics.TgapsMetric).
132
+ Essentially, this collapses the metric value over the sky and
133
+ plots a summarized version (reduced to a single value per point
134
+ according to the plot_dict['metricReduce'] metric).
135
+ """
136
+
137
+ def __init__(self):
138
+ self.plot_type = "SummaryHistogram"
139
+ self.object_plotter = True
140
+ self.default_plot_dict = {
141
+ "title": None,
142
+ "xlabel": None,
143
+ "ylabel": "Count",
144
+ "label": None,
145
+ "cumulative": False,
146
+ "x_min": None,
147
+ "x_max": None,
148
+ "y_min": None,
149
+ "y_max": None,
150
+ "color": "b",
151
+ "linestyle": "-",
152
+ "histStyle": True,
153
+ "grid": True,
154
+ "metricReduce": metrics.SumMetric(),
155
+ "yscale": None,
156
+ "xscale": None,
157
+ "bins": None,
158
+ "figsize": None,
159
+ }
160
+
161
+ def __call__(self, metric_value, slicer, user_plot_dict, fig=None):
162
+ """
163
+ Parameters
164
+ ----------
165
+ metric_value : `numpy.ma.MaskedArray`
166
+ Handles 'object' datatypes for the masked array.
167
+ slicer : `rubin_sim.maf.slicer`
168
+ Any MAF slicer.
169
+ user_plot_dict: `dict`
170
+ Dictionary of plot parameters set by user to override defaults.
171
+ 'metricReduce' (a `rubin_sim.maf.metric`) indicates how to
172
+ marginalize the metric values calculated at each point to a
173
+ single series of values over the sky.
174
+ 'histStyle' (True/False) indicates whether to plot the
175
+ results as a step histogram (True) or as a series of values (False)
176
+ 'bins' (np.ndarray) sets the x values for the resulting plot
177
+ and should generally match the bins used with the metric.
178
+ fig : `matplotlib.figure.Figure`
179
+ Matplotlib figure to use. Default starts a new figure.
180
+
181
+ Returns
182
+ -------
183
+ fig: `matplotlib.figure.Figure`
184
+ Matplotlib figure used to create the plot.
185
+ """
186
+ plot_dict = {}
187
+ plot_dict.update(self.default_plot_dict)
188
+ plot_dict.update(user_plot_dict)
189
+ # Combine the metric values across all slice_points.
190
+ if not isinstance(plot_dict["metricReduce"], metrics.BaseMetric):
191
+ raise ValueError("Expected plot_dict[metricReduce] to be a MAF metric object.")
192
+ # Check that there is data to plot
193
+ if np.size(metric_value.compressed()) == 0:
194
+ raise ValueError(f"Did not find any data to plot in {self.plot_type}.")
195
+ # Get the data type
196
+ dt = metric_value.compressed()[0].dtype
197
+ # Change an array of arrays to a 2-d array of correct dtype
198
+ m_v = np.array(metric_value.compressed().tolist(), dtype=[("metric_value", dt)])
199
+ # Make an array to hold the combined result
200
+ final_hist = np.zeros(m_v.shape[1], dtype=float)
201
+ metric = plot_dict["metricReduce"]
202
+ metric.colname = "metric_value"
203
+ # Loop over each bin and use the selected metric to combine the results
204
+ for i in np.arange(final_hist.size):
205
+ final_hist[i] = metric.run(m_v[:, i])
206
+
207
+ if plot_dict["cumulative"]:
208
+ final_hist = final_hist.cumsum()
209
+
210
+ if fig is None:
211
+ fig = plt.figure(figsize=plot_dict["figsize"])
212
+ bins = plot_dict["bins"]
213
+ if plot_dict["histStyle"]:
214
+ leftedge = bins[:-1]
215
+ rightedge = bins[1:]
216
+
217
+ x = np.vstack([leftedge, rightedge]).T.flatten()
218
+ y = np.vstack([final_hist, final_hist]).T.flatten()
219
+
220
+ else:
221
+ # Could use this to plot things like FFT
222
+ x = bins[:-1]
223
+ y = final_hist
224
+ # Make the plot.
225
+ plt.plot(
226
+ x,
227
+ y,
228
+ linestyle=plot_dict["linestyle"],
229
+ label=plot_dict["label"],
230
+ color=plot_dict["color"],
231
+ )
232
+ # Add labels.
233
+ plt.xlabel(plot_dict["xlabel"])
234
+ plt.ylabel(plot_dict["ylabel"])
235
+ plt.title(plot_dict["title"])
236
+ plt.grid(plot_dict["grid"], alpha=0.3)
237
+ # Set y and x limits, if provided.
238
+ if plot_dict["x_min"] is not None:
239
+ plt.xlim(left=plot_dict["x_min"])
240
+ elif bins[0] == 0:
241
+ plt.xlim(left=0)
242
+ if plot_dict["x_max"] is not None:
243
+ plt.xlim(right=plot_dict["x_max"])
244
+ if plot_dict["y_min"] is not None:
245
+ plt.ylim(bottom=plot_dict["y_min"])
246
+ elif final_hist.min() == 0:
247
+ plot_dict["y_min"] = 0
248
+ if plot_dict["y_max"] is not None:
249
+ plt.ylim(top=plot_dict["y_max"])
250
+
251
+ if plot_dict["yscale"] is not None:
252
+ plt.yscale(plot_dict["yscale"])
253
+ if plot_dict["xscale"] is not None:
254
+ plt.xscale(plot_dict["xscale"])
255
+
256
+ return fig
@@ -0,0 +1,177 @@
1
+ __all__ = ("TwoDMap", "VisitPairsHist")
2
+
3
+ import matplotlib.pyplot as plt
4
+ import numpy as np
5
+ from matplotlib import colors
6
+
7
+ from .perceptual_rainbow import make_pr_cmap
8
+ from .plot_handler import BasePlotter
9
+
10
+ perceptual_rainbow = make_pr_cmap()
11
+
12
+
13
+ class TwoDMap(BasePlotter):
14
+ def __init__(self):
15
+ self.plot_type = "TwoD"
16
+ self.object_plotter = False
17
+ self.default_plot_dict = {
18
+ "title": None,
19
+ "xlabel": None,
20
+ "ylabel": None,
21
+ "label": None,
22
+ "log_scale": False,
23
+ "cbar_format": None,
24
+ "cbarTitle": "Count",
25
+ "cmap": perceptual_rainbow,
26
+ "percentile_clip": None,
27
+ "color_min": None,
28
+ "color_max": None,
29
+ "zp": None,
30
+ "norm_val": None,
31
+ "cbar_edge": True,
32
+ "n_ticks": None,
33
+ "aspect": "auto",
34
+ "xextent": None,
35
+ "origin": None,
36
+ "figsize": None,
37
+ }
38
+
39
+ def __call__(self, metric_value, slicer, user_plot_dict, fig=None):
40
+ """
41
+ Parameters
42
+ ----------
43
+ metric_value : `numpy.ma.MaskedArray`
44
+ The metric values from the bundle.
45
+ slicer : `rubin_sim.maf.slicers.TwoDSlicer`
46
+ The slicer.
47
+ user_plot_dict : `dict`
48
+ Dictionary of plot parameters set by user
49
+ (overrides default values).
50
+ fig : `matplotlib.figure.Figure`
51
+ Matplotlib figure number to use. Default = None, starts new figure.
52
+
53
+ Returns
54
+ -------
55
+ fig : `matplotlib.figure.Figure`
56
+ Figure with the plot.
57
+ """
58
+ if "Healpix" in slicer.slicer_name:
59
+ self.default_plot_dict["ylabel"] = "Healpix ID"
60
+ elif "User" in slicer.slicer_name:
61
+ self.default_plot_dict["ylabel"] = "User Field ID"
62
+
63
+ plot_dict = {}
64
+ plot_dict.update(self.default_plot_dict)
65
+ # Don't clobber with None
66
+ for key in user_plot_dict:
67
+ if user_plot_dict[key] is not None:
68
+ plot_dict[key] = user_plot_dict[key]
69
+
70
+ if plot_dict["xextent"] is None:
71
+ plot_dict["xextent"] = [0, metric_value[0, :].size]
72
+
73
+ if plot_dict["log_scale"]:
74
+ norm = colors.LogNorm()
75
+ else:
76
+ norm = None
77
+
78
+ # Mask out values below the color minimum so they show up as white
79
+ if plot_dict["color_min"] is not None:
80
+ low_vals = np.where(metric_value.data < plot_dict["color_min"])
81
+ metric_value.mask[low_vals] = True
82
+
83
+ if fig is None:
84
+ fig = plt.figure(figsize=plot_dict["figsize"])
85
+ ax = fig.add_subplot(111)
86
+ yextent = [0, slicer.nslice - 1]
87
+ xextent = plot_dict["xextent"]
88
+ extent = []
89
+ extent.extend(xextent)
90
+ extent.extend(yextent)
91
+ image = ax.imshow(
92
+ metric_value,
93
+ vmin=plot_dict["color_min"],
94
+ vmax=plot_dict["color_max"],
95
+ aspect=plot_dict["aspect"],
96
+ cmap=plot_dict["cmap"],
97
+ norm=norm,
98
+ extent=extent,
99
+ interpolation="none",
100
+ origin=plot_dict["origin"],
101
+ )
102
+ cb = plt.colorbar(image)
103
+
104
+ ax.set_xlabel(plot_dict["xlabel"])
105
+ ax.set_ylabel(plot_dict["ylabel"])
106
+ ax.set_title(plot_dict["title"])
107
+ cb.set_label(plot_dict["cbarTitle"])
108
+
109
+ # Fix white space on pdf's
110
+ if plot_dict["cbar_edge"]:
111
+ cb.solids.set_edgecolor("face")
112
+ return fig
113
+
114
+
115
+ class VisitPairsHist(BasePlotter):
116
+ """
117
+ Given an TwoDSlicer, figure out what fraction of observations
118
+ are in singles, pairs, triples, etc.
119
+
120
+
121
+ Parameters
122
+ ----------
123
+ metric_value : `numpy.ma.MaskedArray`
124
+ The metric values from the bundle.
125
+ slicer : `rubin_sim.maf.slicers.TwoDSlicer`
126
+ The slicer.
127
+ user_plot_dict : `dict`
128
+ Dictionary of plot parameters set by user
129
+ (overrides default values).
130
+ fig : `matplotlib.figure.Figure`
131
+ Matplotlib figure number to use. Default = None, starts new figure.
132
+
133
+ Returns
134
+ -------
135
+ fig : `matplotlib.figure.Figure`
136
+ Figure with the plot.
137
+ """
138
+
139
+ def __init__(self):
140
+ self.plot_type = "TwoD"
141
+ self.object_plotter = False
142
+ self.default_plot_dict = {
143
+ "title": None,
144
+ "xlabel": "N visits per night per field",
145
+ "ylabel": "N Visits",
146
+ "label": None,
147
+ "color": "b",
148
+ "xlim": [0, 20],
149
+ "ylim": None,
150
+ "figsize": None,
151
+ }
152
+
153
+ def __call__(self, metric_value, slicer, user_plot_dict, fig=None):
154
+ plot_dict = {}
155
+ plot_dict.update(self.default_plot_dict)
156
+ # Don't clobber with None
157
+ for key in user_plot_dict:
158
+ if user_plot_dict[key] is not None:
159
+ plot_dict[key] = user_plot_dict[key]
160
+
161
+ max_val = metric_value.max()
162
+ bins = np.arange(0.5, max_val + 0.5, 1)
163
+
164
+ vals, bins = np.histogram(metric_value, bins)
165
+ xvals = (bins[:-1] + bins[1:]) / 2.0
166
+
167
+ if fig is None:
168
+ fig = plt.figure(figsize=plot_dict["figsize"])
169
+ ax = fig.add_subplot(111)
170
+ ax.bar(xvals, vals * xvals, color=plot_dict["color"], label=plot_dict["label"])
171
+ ax.set_xlabel(plot_dict["xlabel"])
172
+ ax.set_ylabel(plot_dict["ylabel"])
173
+ ax.set_title(plot_dict["title"])
174
+ ax.set_xlim(plot_dict["xlim"])
175
+ ax.set_ylim(plot_dict["ylim"])
176
+
177
+ return fig
@@ -0,0 +1,37 @@
1
+ __all__ = ("XyPlotter",)
2
+
3
+ import matplotlib.pyplot as plt
4
+
5
+ from .plot_handler import BasePlotter
6
+
7
+
8
+ class XyPlotter(BasePlotter):
9
+ """Bare-bones plotter for making scatter plots. Expects single metric value
10
+ (e.g, from UniSlicer or UserPointSlicer with one point)"""
11
+
12
+ def __init__(self):
13
+ self.object_plotter = True
14
+ self.plot_type = "simple"
15
+ self.default_plot_dict = {
16
+ "title": None,
17
+ "xlabel": "",
18
+ "ylabel": "",
19
+ "figsize": None,
20
+ }
21
+
22
+ def __call__(self, metric_value_in, slicer, user_plot_dict, fig=None):
23
+ plot_dict = {}
24
+ plot_dict.update(self.default_plot_dict)
25
+ plot_dict.update(user_plot_dict)
26
+ plot_dict.update(metric_value_in[0]["plot_dict"])
27
+
28
+ if fig is None:
29
+ fig = plt.figure(figsize=plot_dict["figsize"])
30
+ ax = fig.add_subplot(111)
31
+ x = metric_value_in[0]["x"]
32
+ y = metric_value_in[0]["y"]
33
+ ax.plot(x, y)
34
+ ax.set_title(plot_dict["title"])
35
+ ax.set_xlabel(plot_dict["xlabel"])
36
+ ax.set_ylabel(plot_dict["ylabel"])
37
+ return fig
@@ -0,0 +1,5 @@
1
+ from .archive import *
2
+ from .gather_summaries import *
3
+ from .microlensing_compare import *
4
+ from .radar_plot import *
5
+ from .summary_plots import *