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
docs/vseqarchive.rst ADDED
@@ -0,0 +1,225 @@
1
+ .. py:currentmodule:: rubin_sim.sim_archive.vseqarchive
2
+
3
+ .. _vseqarchivedemo:
4
+
5
+ ===========================================================================
6
+ Example of running a simulation and adding it to the visit sequence archive
7
+ ===========================================================================
8
+
9
+ Introduction
10
+ ============
11
+
12
+ The precess used in this demonstration closely follows the bash script used to run prenight simuluations.
13
+ It has three major sections:
14
+
15
+ 1. Prepare the environment.
16
+ 2. Run the simulation, saving files to local disk as we go.
17
+ 3. Add any date we want to keep to the archive.
18
+
19
+ Preparing the environment
20
+ =========================
21
+
22
+ In this demonstration, we will start with the lates tagged LSST stack available from ``cvmfs``.
23
+ (It is tested at the USDF, but should work anywhere ``cvmfs`` is installed.)
24
+ Find the version we want, and activate the ``conda`` environment::
25
+
26
+ LATEST_TAGGED_STACK=$(
27
+ find /cvmfs/sw.lsst.eu/almalinux-x86_64/lsst_distrib \
28
+ -maxdepth 1 \
29
+ -regex '.*/v[0-9]+\.[0-9]+\.[0-9]+' \
30
+ -printf "%f\n" |
31
+ sort -V |
32
+ tail -1
33
+ )
34
+ source /cvmfs/sw.lsst.eu/almalinux-x86_64/lsst_distrib/${LATEST_TAGGED_STACK}/loadLSST-ext.sh
35
+
36
+ Next we install specific versions of packages in a separate location so we have full control for just this execution::
37
+
38
+ SIM_PACKAGE_DIR=$(mktemp -d --suffix=.opsim_packages)
39
+ export PYTHONPATH=${SIM_PACKAGE_DIR}:${PYTHONPATH}
40
+ export PATH=${SIM_PACKAGE_DIR}/bin:${PATH}
41
+
42
+ Set the actual versions we want. These will usually be tags, but can be any github reference (e.g. tags, branches, commits)::
43
+
44
+
45
+ RUBIN_SCHEDULER_REFERENCE="v3.18.1"
46
+ RUBIN_SIM_REFERENCE="tickets/SP-2709"
47
+ SCHEDVIEW_REFERENCE="tickets/SP-2167"
48
+ TS_FBS_UTILS_REFERENCE="v0.18.0"
49
+ LSST_SURVEY_SIM_REFERENCE="v0.2.0"
50
+ RUBIN_NIGHTS_REFERENCE="v0.7.0"
51
+
52
+ Note that the ``obs_version_at_time`` command provided by ``schedview`` will query the EFD for the latest version being used (for some of these packages).
53
+ You can also use the github API and bash tools to get the highest tag for a repository, for example::
54
+
55
+ SOMEREPO_LATEST_REFERENCE=$(
56
+ curl -s https://api.github.com/repos/lsst/somerepo/tags |
57
+ jq -r '.[].name' |
58
+ egrep '^v[0-9]+\.[0-9]+\.[0-9]+$' |
59
+ sort -V |
60
+ tail -1
61
+ )
62
+
63
+ Now actually do the install of all requested versions.
64
+ Pick up the current version of ``lsst-resources`` along the way.::
65
+
66
+ pip install --no-deps --target=${SIM_PACKAGE_DIR} \
67
+ git+https://github.com/lsst/rubin_sim.git@${RUBIN_SIM_REFERENCE} \
68
+ git+https://github.com/lsst/schedview.git@${SCHEDVIEW_REFERENCE} \
69
+ git+https://github.com/lsst-ts/ts_fbs_utils.git@${TS_FBS_UTILS_REFERENCE} \
70
+ git+https://github.com/lsst-sims/lsst_survey_sim.git@${LSST_SURVEY_SIM_REFERENCE} \
71
+ git+https://github.com/lsst-sims/rubin_nights.git@${RUBIN_NIGHTS_REFERENCE} \
72
+ git+https://github.com/lsst/rubin_scheduler.git@${RUBIN_SCHEDULER_REFERENCE} \
73
+ lsst-resources
74
+
75
+ Running the simulation
76
+ ======================
77
+
78
+ Begin by creating a directory in which to work::
79
+
80
+ WORK_DIR=${HOME}/devel/my_sample_opsim
81
+ mkdir ${WORK_DIR}
82
+ cd $WORK_DIR
83
+
84
+ Next we need is the scheduler configuration we're going to use.
85
+ We want the archive to track this, so we want it to be at a URL somewhere that it would be useful for the archive to reference.
86
+ Let's use something from github::
87
+
88
+ TS_CONFIG_SCHEDULER_REFERENCE="develop"
89
+ SCHED_CONFIG_FNAME="ts_config_scheduler/Scheduler/feature_scheduler/maintel/fbs_config_lsst_survey.py"
90
+ echo "Using ts_config_scheduler ${SCHED_CONFIG_FNAME} from ${TS_CONFIG_SCHEDULER_REFERENCE}"
91
+ git clone https://github.com/lsst-ts/ts_config_scheduler
92
+ cd ts_config_scheduler
93
+ git checkout "${TS_CONFIG_SCHEDULER_REFERENCE}"
94
+ cd ${WORK_DIR}
95
+
96
+ We need to set the ``dayobs`` on which the simulation should start::
97
+
98
+ DAYOBS="20260101"
99
+
100
+ Get the pre-existing visits from consdb::
101
+
102
+ USDF_ACCESS_TOKEN_PATH=~/.lsst/usdf_access_token
103
+ fetch_lsst_visits ${DAYOBS} completed_visits.db ${USDF_ACCESS_TOKEN_PATH}
104
+
105
+ Note that you will need a USDF access token.
106
+
107
+ Create a pickle of the scheduler to run, with completed visits pre-loaded, and write it to a pickle, ``scheduler.p``::
108
+
109
+ make_lsst_scheduler scheduler.p --opsim completed_visits.db --config-script ${SCHED_CONFIG_FNAME}
110
+
111
+ Create a model observatory and write it to pickle file, ``observatory.p``::
112
+
113
+ make_model_observatory observatory.p
114
+
115
+ Run the simulation, writing the result to files in the local directory::
116
+
117
+ RESULTS_DIR="."
118
+ OPSIMRUN="prenight_nominal_$(date --iso=s)"
119
+ run_lsst_sim scheduler.p observatory.p "" ${DAYOBS} 1 "${OPSIMRUN}" --keep_rewards --results ${RESULTS_DIR}
120
+
121
+ There will now be an assortment of output files in the current working directory.
122
+
123
+ Adding entries to the visit sequence archive
124
+ ============================================
125
+
126
+ Setting up the environment for the archive
127
+ ------------------------------------------
128
+
129
+ The visit sequence archive has two components: a ``postgresql`` dataabase that tracks metadata, and a resource (directory or S3 bucket) in which the visits and other file content can be saved.
130
+
131
+ Begin by configuring the environment variables that the tools use to find the metadata database::
132
+
133
+ export VSARCHIVE_PGDATABASE="opsim_log"
134
+ export VSARCHIVE_PGHOST="usdf-maf-visit-seq-archive-tx.sdf.slac.stanford.edu"
135
+ export VSARCHIVE_PGUSER="tester"
136
+ export VSARCHIVE_PGSCHEMA="test"
137
+
138
+ Note that we have set ``VSARCHIVE_PGSCHEMA`` to ``test``, so metadata will be saved in a test schema.
139
+ The production schema is ``vsmd``.
140
+
141
+ Now, create a root for a demonstration resource in which to save the data itself::
142
+
143
+ mkdir ${HOME}/devel/test_visitseq_archive
144
+ export ARCHIVE_URL="file:///${HOME}/devel/test_visitseq_archive"
145
+
146
+ Make a simple utility shell function
147
+ ------------------------------------
148
+
149
+ For the demonstration, it will be useful to query the metadata databas, but specifying all the connection parameters will be inconvenient.
150
+ One option would be to set the environment variables ``psql`` uses (``PGDATABASE``, ``PGHOST``, ``PGUSER``), but setting these might confuse other utilities that query different postgresql databases (like ``consdb``), so lets make a utility that just sets them for one command::
151
+
152
+ vseq-psql() {
153
+ PGDATABASE=${VSARCHIVE_PGDATABASE} \
154
+ PGHOST=${VSARCHIVE_PGHOST} \
155
+ PGUSER=${VSARCHIVE_PGUSER} \
156
+ psql "$@"
157
+ }
158
+
159
+ This results in a now shell command, ``vseq-psql``, that works just like ``psql``, but where the user does not need to specify connection parameters.
160
+
161
+ Adding an entry for pre-existing visits to the archive
162
+ ------------------------------------------------------
163
+
164
+ We need to add two entries to the visit sequence archive, one for the pre-existing sequences of visits queried from consdb, and the other for the sequence generated by the simulation.
165
+
166
+ Begin by creating an entry for the pre-existing visits::
167
+
168
+ COMPLETED=$(vseqarchive record-visitseq-metadata \
169
+ completed \
170
+ completed_visits.db \
171
+ "Consdb query through 2025-10-31" \
172
+ --first_day_obs 20250620 \
173
+ --last_day_obs 20251031)
174
+
175
+ The ``COMPLETED`` UUID will now contain a reference for the sequence of visits returned from the consdb.
176
+ This command only adds an entry to the metadata, it does not save the visits themselves in the archive.
177
+ We can skip saving the visits themselves, if we are okay with relying on using consdb to recreate it.
178
+ (If you want to be sure, you can save them in the same way as simulated visits are saved below.)
179
+
180
+ Adding the simulation
181
+ ---------------------
182
+
183
+ Now create an entry for the simulated visits::
184
+
185
+ SIM_UUID=$(vseqarchive record-visitseq-metadata \
186
+ simulations \
187
+ opsim.db \
188
+ "Test pre-night simulation 1" \
189
+ --first_day_obs 20261201 \
190
+ --last_day_obs 20261202
191
+ )
192
+
193
+ This command only stored the bare minimum of metadata, and did not save the visits or any of the files in the archive.
194
+ We can now add additional metadata to the database::
195
+
196
+ vseqarchive update-visitseq-metadata ${SIM_UUID} parent_visitseq_uuid ${COMPLETED}
197
+ vseqarchive update-visitseq-metadata ${SIM_UUID} parent_last_day_obs 2025-12-31
198
+
199
+ SCHEDULER_VERSION=$(python -c "import rubin_scheduler; print(rubin_scheduler.__version__)")
200
+ vseqarchive update-visitseq-metadata ${SIM_UUID} scheduler_version "${SCHEDULER_VERSION}"
201
+
202
+ and the visits and rewards to the resource::
203
+
204
+ vseqarchive archive-file ${SIM_UUID} opsim.db visits --archive-base ${ARCHIVE_URL}
205
+ vseqarchive archive-file ${SIM_UUID} rewards.h5 rewards --archive-base ${ARCHIVE_URL}
206
+
207
+ We can alse add tags and comments to the metadata database::
208
+
209
+ vseqarchive tag ${SIM_UUID} test prenight nominal
210
+ vseqarchive comment ${SIM_UUID} "Just a test prenight"
211
+
212
+ Another option is to save specification for the ``conda`` environment::
213
+
214
+ CONDA_HASH=$(vseqarchive record-conda-env)
215
+ vseqarchive update-visitseq-metadata ${SIM_UUID} conda_env_sha256 ${CONDA_HASH}
216
+
217
+ Finaly, we can save statistics.
218
+ For the basic statistics tools currently available, the visits are needed in an HDF5 file, but in the above instructions we just have an sqlite3 file.
219
+ We can get the HDF5 by asking for the visits from the archive and giving it a destination filename with an ``.h5`` extension::
220
+
221
+ vseqarchive get-file ${SIM_UUID} visits visits.h5
222
+
223
+ and then we can compute the statistics on our columns of interest and add them to the metadata database::
224
+
225
+ vseqarchive add-nightly-stats ${SIM_UUID} visits.h5 fieldRA fieldDec azimuth altitude
rubin_sim/__init__.py ADDED
@@ -0,0 +1,7 @@
1
+ from importlib.metadata import PackageNotFoundError, version
2
+
3
+ try:
4
+ __version__ = version("rubin_sim")
5
+ except PackageNotFoundError:
6
+ # package is not installed
7
+ pass
@@ -0,0 +1 @@
1
+ from .rs_download_data import * # noqa: F403
@@ -0,0 +1,155 @@
1
+ __all__ = ("get_data_dir", "get_baseline", "data_dict", "rs_download_testing", "rs_download_data")
2
+
3
+ import argparse
4
+ import glob
5
+ import os
6
+
7
+ from rubin_scheduler.data import DEFAULT_DATA_URL, download_rubin_data
8
+ from rubin_scheduler.data import get_data_dir as gdd
9
+
10
+
11
+ def get_data_dir() -> str:
12
+ """Wraps rubin_scheduler.data.get_data_dir().
13
+ Provided here for backwards compatibility.
14
+
15
+ Returns
16
+ -------
17
+ $RUBIN_SIM_DATA_DIR : `str`
18
+ Directory containing the necessary data for rubin_sim_data.
19
+ """
20
+ return gdd()
21
+
22
+
23
+ def get_baseline() -> str:
24
+ """Get the path to the baseline cadence simulation sqlite file.
25
+
26
+ Returns
27
+ -------
28
+ file : `str`
29
+ Path to the baseline cadence simulation sqlite file.
30
+ """
31
+ dd = get_data_dir()
32
+ path = os.path.join(dd, "sim_baseline")
33
+ file = glob.glob(path + "/*10yrs.db")[0]
34
+ return file
35
+
36
+
37
+ def data_dict() -> dict:
38
+ """
39
+ Dictionary containing expected version information for rubin_sim_data
40
+ data sets, for this version of rubin_sim.
41
+
42
+ Returns
43
+ -------
44
+ file_dict : `dict`
45
+ Data bucket filenames dictionary with keys:
46
+ ``"name"``
47
+ Data bucket name (`str`).
48
+ ``"version"``
49
+ Versioned file name (`str`).
50
+ """
51
+ # Note for developers:
52
+ # to create tar files and follow any sym links, run: e.g.
53
+ # ``tar -chvzf maf_may_2021.tgz maf``
54
+ file_dict = {
55
+ "maf": "maf_2024_06_13.tgz",
56
+ "maps": "maps_2022_2_28.tgz",
57
+ "movingObjects": "movingObjects_2025_07_15.tgz",
58
+ "orbits": "orbits_2022_3_1.tgz",
59
+ "orbits_precompute": "orbits_precompute_2023_05_23.tgz",
60
+ "sim_baseline": "sim_baseline_2025_09_02.tgz",
61
+ "skybrightness": "skybrightness_2023_09_11.tgz",
62
+ "throughputs": "throughputs_2025_08_25.tgz",
63
+ "tests": "tests_2024_04_23.tgz",
64
+ }
65
+ return file_dict
66
+
67
+
68
+ def rs_download_testing() -> None:
69
+ """Convenience function for github actions, to download only a subset
70
+ of data.
71
+
72
+ Contains maf, maps, movingObjects, sim_baseline, skybrightness,
73
+ throughputs and tests.
74
+ For users who don't care about moving objects, this is likely sufficient.
75
+ """
76
+ all_files = data_dict()
77
+ keys = ["maf", "maps", "movingObjects", "sim_baseline", "skybrightness", "throughputs", "tests"]
78
+ subset = {}
79
+ for k in keys:
80
+ subset[k] = all_files[k]
81
+
82
+ download_rubin_data(
83
+ subset,
84
+ dirs=None,
85
+ print_versions_only=False,
86
+ update=True,
87
+ force=False,
88
+ url_base=DEFAULT_DATA_URL,
89
+ tdqm_disable=True,
90
+ )
91
+
92
+
93
+ def rs_download_data() -> None:
94
+ """Utility to download necessary data for rubin_sim.
95
+
96
+ Wrapper around rubin_scheduler.scheduler_download_data,
97
+ but downloading the data files specified by rubin_sim.
98
+ """
99
+
100
+ files = data_dict()
101
+ parser = argparse.ArgumentParser(description="Download data files for rubin_sim package")
102
+ parser.add_argument(
103
+ "--versions",
104
+ dest="versions",
105
+ default=False,
106
+ action="store_true",
107
+ help="Report expected versions, then quit",
108
+ )
109
+ parser.add_argument(
110
+ "-d",
111
+ "--dirs",
112
+ type=str,
113
+ default=None,
114
+ help="Comma-separated list of directories to download",
115
+ )
116
+ parser.add_argument(
117
+ "-f",
118
+ "--force",
119
+ dest="force",
120
+ default=False,
121
+ action="store_true",
122
+ help="Force re-download of data directory(ies)",
123
+ )
124
+ parser.add_argument(
125
+ "--url_base",
126
+ type=str,
127
+ default=DEFAULT_DATA_URL,
128
+ help="Root URL of download location",
129
+ )
130
+ parser.add_argument(
131
+ "--tdqm_disable",
132
+ dest="tdqm_disable",
133
+ default=False,
134
+ action="store_true",
135
+ help="Turn off tdqm progress bar",
136
+ )
137
+ parser.add_argument(
138
+ "--update",
139
+ dest="update",
140
+ default=False,
141
+ action="store_true",
142
+ help="Update versions of data on disk to match current",
143
+ )
144
+
145
+ args = parser.parse_args()
146
+
147
+ download_rubin_data(
148
+ files,
149
+ dirs=args.dirs,
150
+ print_versions_only=args.versions,
151
+ update=args.update,
152
+ force=args.force,
153
+ url_base=args.url_base,
154
+ tdqm_disable=args.tdqm_disable,
155
+ )
@@ -0,0 +1,34 @@
1
+ #
2
+ # LSST Data Management System
3
+ # Copyright 2008, 2009, 2010 LSST Corporation.
4
+ #
5
+ # This product includes software developed by the
6
+ # LSST Project (http://www.lsst.org/).
7
+ #
8
+ # This program is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the LSST License Statement and
19
+ # the GNU General Public License along with this program. If not,
20
+ # see <http://www.lsstcorp.org/LegalNotices/>.
21
+ #
22
+ """Python interface to the metrics analysis framework."""
23
+ from .batches import *
24
+ from .db import *
25
+ from .maf_contrib import *
26
+ from .maps import *
27
+ from .metric_bundles import *
28
+ from .metrics import *
29
+ from .plots import *
30
+ from .run_comparison import *
31
+ from .slicers import *
32
+ from .stackers import *
33
+ from .utils import *
34
+ from .web import *
@@ -0,0 +1,18 @@
1
+ from .altaz_batch import *
2
+ from .col_map_dict import *
3
+ from .common import *
4
+ from .ddf_batch import *
5
+ from .filterchange_batch import *
6
+ from .glance_batch import *
7
+ from .hourglass_batch import *
8
+ from .info_batch import *
9
+ from .metadata_batch import *
10
+ from .moving_objects_batch import *
11
+ from .openshutter_batch import *
12
+ from .radar_limited import *
13
+ from .science_radar_batch import *
14
+ from .skycoverage import *
15
+ from .slew_batch import *
16
+ from .srd_batch import *
17
+ from .time_batch import *
18
+ from .visitdepth_batch import *
@@ -0,0 +1,161 @@
1
+ __all__ = ("altazHealpix", "altazLambert")
2
+
3
+ import rubin_sim.maf.metric_bundles as mb
4
+ import rubin_sim.maf.metrics as metrics
5
+ import rubin_sim.maf.plots as plots
6
+ import rubin_sim.maf.slicers as slicers
7
+
8
+ from .col_map_dict import col_map_dict
9
+ from .common import filter_list
10
+
11
+
12
+ def basicSetup(metric_name, colmap=None, nside=64):
13
+ if colmap is None:
14
+ colmap = col_map_dict()
15
+
16
+ slicer = slicers.HealpixSlicer(
17
+ nside=nside,
18
+ lat_col=colmap["alt"],
19
+ lon_col=colmap["az"],
20
+ lat_lon_deg=colmap["raDecDeg"],
21
+ use_cache=False,
22
+ )
23
+ metric = metrics.CountMetric(colmap["mjd"], metric_name=metric_name)
24
+
25
+ return colmap, slicer, metric
26
+
27
+
28
+ def altazHealpix(
29
+ colmap=None,
30
+ run_name="run name",
31
+ extraSql=None,
32
+ extraInfoLabel=None,
33
+ metric_name="NVisits Alt/Az",
34
+ ):
35
+ """
36
+ Generate a set of metrics measuring the number visits as a function
37
+ of alt/az plotted on a HealpixSkyMap.
38
+
39
+ Parameters
40
+ ----------
41
+ colmap : `dict`, optional
42
+ A dictionary with a mapping of column names.
43
+ run_name : `str`, optional
44
+ The name of the simulated survey.
45
+ extraSql : `str`, optional
46
+ Additional constraint to add to any sql constraints.
47
+ extraInfoLabel : `str`, optional
48
+ Additional info_label to add before any below (i.e. "WFD").
49
+ metric_name : `str`, optional
50
+ Unique name to assign to metric
51
+
52
+ Returns
53
+ -------
54
+ metric_bundleDict : `dict` of {`str`: `maf.MetricBundle`}
55
+ """
56
+
57
+ colmap, slicer, metric = basicSetup(metric_name=metric_name, colmap=colmap)
58
+
59
+ # Set up basic all and per filter sql constraints.
60
+ filterlist, colors, orders, sqls, info_label = filter_list(
61
+ all=True, extra_sql=extraSql, extra_info_label=extraInfoLabel
62
+ )
63
+
64
+ bundleList = []
65
+
66
+ plotDict = {"rot": (90, 90, 90), "flip": "geo"}
67
+ plotFunc = plots.HealpixSkyMap()
68
+
69
+ for f in filterlist:
70
+ if f == "all":
71
+ subgroup = "All Observations"
72
+ else:
73
+ subgroup = "Per filter"
74
+ displayDict = {
75
+ "group": "Alt/Az",
76
+ "order": orders[f],
77
+ "subgroup": subgroup,
78
+ "caption": "Pointing History on the alt-az sky (zenith center) for filter %s" % f,
79
+ }
80
+ bundle = mb.MetricBundle(
81
+ metric,
82
+ slicer,
83
+ sqls[f],
84
+ plot_dict=plotDict,
85
+ run_name=run_name,
86
+ info_label=info_label[f],
87
+ plot_funcs=[plotFunc],
88
+ display_dict=displayDict,
89
+ )
90
+ bundleList.append(bundle)
91
+
92
+ for b in bundleList:
93
+ b.set_run_name(run_name)
94
+ return mb.make_bundles_dict_from_list(bundleList)
95
+
96
+
97
+ def altazLambert(
98
+ colmap=None,
99
+ runName="opsim",
100
+ extraSql=None,
101
+ extraInfoLabel=None,
102
+ metric_name="Nvisits as function of Alt/Az",
103
+ ):
104
+ """
105
+ Generate a set of metrics measuring the number visits as a
106
+ function of alt/az plotted on a LambertSkyMap.
107
+
108
+ Parameters
109
+ ----------
110
+ colmap : `dict`, optional
111
+ A dictionary with a mapping of column names.
112
+ runName : `str`, optional
113
+ The name of the simulated survey.
114
+ extraSql : `str`, optional
115
+ Additional constraint to add to any sql constraints.
116
+ extraInfoLabel : `str`, optional
117
+ Additional info_label to add before any below (i.e. "WFD").
118
+ metric_name : `str`, optional
119
+ Unique name to assign to metric
120
+
121
+ Returns
122
+ -------
123
+ metric_bundleDict : `dict` of {`str`: `maf.MetricBundle`}
124
+ """
125
+
126
+ colmap, slicer, metric = basicSetup(metric_name=metric_name, colmap=colmap)
127
+
128
+ # Set up basic all and per filter sql constraints.
129
+ filterlist, colors, orders, sqls, info_label = filter_list(
130
+ all=True, extra_sql=extraSql, extra_info_label=extraInfoLabel
131
+ )
132
+
133
+ bundleList = []
134
+
135
+ plotFunc = plots.LambertSkyMap()
136
+
137
+ for f in filterlist:
138
+ if f == "all":
139
+ subgroup = "All Observations"
140
+ else:
141
+ subgroup = "Per filter"
142
+ displayDict = {
143
+ "group": "Alt/Az",
144
+ "order": orders[f],
145
+ "subgroup": subgroup,
146
+ "caption": "Alt/Az pointing distribution for filter %s" % f,
147
+ }
148
+ bundle = mb.MetricBundle(
149
+ metric,
150
+ slicer,
151
+ sqls[f],
152
+ run_name=runName,
153
+ info_label=info_label[f],
154
+ plot_funcs=[plotFunc],
155
+ display_dict=displayDict,
156
+ )
157
+ bundleList.append(bundle)
158
+
159
+ for b in bundleList:
160
+ b.set_run_name(runName)
161
+ return mb.make_bundles_dict_from_list(bundleList)