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,344 @@
1
+ """A group of metrics that work together to evaluate season characteristics
2
+ (length, number, etc).
3
+ In addition, these support the time delay metric for strong lensing.
4
+ """
5
+
6
+ __all__ = (
7
+ "find_season_edges",
8
+ "SeasonLengthMetric",
9
+ "CampaignLengthMetric",
10
+ "MeanCampaignFrequencyMetric",
11
+ "TdcMetric",
12
+ )
13
+
14
+ import numpy as np
15
+ from rubin_scheduler.utils import calc_season
16
+
17
+ from rubin_sim.phot_utils import DustValues
18
+
19
+ from .base_metric import BaseMetric
20
+
21
+
22
+ def find_season_edges(seasons):
23
+ """Given the seasons, return the indexes of each start/end of the season.
24
+
25
+ Parameters
26
+ ----------
27
+ seasons : `np.ndarray`, (N,)
28
+ Seasons, such as calculated by calc_season.
29
+ Note that seasons should be sorted!!
30
+
31
+ Returns
32
+ -------
33
+ first, last : `np.ndarray`, (N,), `np.ndarray`, (N,)
34
+ The indexes of the first and last date in the season.
35
+ """
36
+ int_seasons = np.floor(seasons)
37
+ # Get the unique seasons, so that we can separate each one
38
+ season_list = np.unique(int_seasons)
39
+ # Find the first and last observation of each season.
40
+ first_of_season = np.searchsorted(int_seasons, season_list)
41
+ last_of_season = np.searchsorted(int_seasons, season_list, side="right") - 1
42
+ return first_of_season, last_of_season
43
+
44
+
45
+ class SeasonLengthMetric(BaseMetric):
46
+ """Calculate the length of LSST seasons, in days.
47
+
48
+ Parameters
49
+ ----------
50
+ min_exp_time : `float`, optional
51
+ Minimum visit exposure time to count for a 'visit', in seconds.
52
+ Default 20.
53
+ reduce_func : function, optional
54
+ Function that can operate on array-like structures.
55
+ Typically numpy function.
56
+ This reduces the season length in each season from 10 separate
57
+ values to a single value.
58
+ Default np.median.
59
+
60
+ Returns
61
+ -------
62
+ seasonlength : `float`
63
+ The (reduceFunc) of the length of each season, in days.
64
+ """
65
+
66
+ def __init__(
67
+ self,
68
+ mjd_col="observationStartMJD",
69
+ exp_time_col="visitExposureTime",
70
+ min_exp_time=16,
71
+ reduce_func=np.median,
72
+ metric_name="SeasonLength",
73
+ **kwargs,
74
+ ):
75
+ units = "days"
76
+ self.mjd_col = mjd_col
77
+ self.exp_time_col = exp_time_col
78
+ self.min_exp_time = min_exp_time
79
+ self.reduce_func = reduce_func
80
+ super().__init__(
81
+ col=[self.mjd_col, self.exp_time_col], units=units, metric_name=metric_name, **kwargs
82
+ )
83
+
84
+ def run(self, data_slice, slice_point):
85
+ # Order data Slice/times and exclude visits which are too short.
86
+ long = np.where(data_slice[self.exp_time_col] > self.min_exp_time)
87
+ if len(long[0]) == 0:
88
+ return self.badval
89
+ data = np.sort(data_slice[long], order=self.mjd_col)
90
+ # SlicePoints ra/dec are always in radians -
91
+ # convert to degrees to calculate season
92
+ seasons = calc_season(np.degrees(slice_point["ra"]), data[self.mjd_col])
93
+ first_of_season, last_of_season = find_season_edges(seasons)
94
+ seasonlengths = data[self.mjd_col][last_of_season] - data[self.mjd_col][first_of_season]
95
+ result = self.reduce_func(seasonlengths)
96
+ return result
97
+
98
+
99
+ class CampaignLengthMetric(BaseMetric):
100
+ """Calculate the number of seasons (roughly, years) a pointing is observed.
101
+
102
+ This corresponds to the 'campaign length' for lensed quasar time delays.
103
+ """
104
+
105
+ def __init__(
106
+ self, mjd_col="observationStartMJD", exp_time_col="visitExposureTime", min_exp_time=20, **kwargs
107
+ ):
108
+ units = ""
109
+ self.exp_time_col = exp_time_col
110
+ self.min_exp_time = min_exp_time
111
+ self.mjd_col = mjd_col
112
+ super().__init__(col=[self.mjd_col, self.exp_time_col], units=units, **kwargs)
113
+
114
+ def run(self, data_slice, slice_point):
115
+ # Order data Slice/times and exclude visits which are too short.
116
+ long = np.where(data_slice[self.exp_time_col] > self.min_exp_time)
117
+ if len(long[0]) == 0:
118
+ return self.badval
119
+ data = np.sort(data_slice[long], order=self.mjd_col)
120
+ seasons = calc_season(np.degrees(slice_point["ra"]), data[self.mjd_col])
121
+ int_seasons = np.floor(seasons)
122
+ count = len(np.unique(int_seasons))
123
+ return count
124
+
125
+
126
+ class MeanCampaignFrequencyMetric(BaseMetric):
127
+ """Calculate the mean separation between nights, within a season -
128
+ then the mean over the campaign.
129
+
130
+ Calculate per season, to avoid any influence from season gaps.
131
+ """
132
+
133
+ def __init__(
134
+ self,
135
+ mjd_col="observationStartMJD",
136
+ exp_time_col="visitExposureTime",
137
+ min_exp_time=20,
138
+ night_col="night",
139
+ **kwargs,
140
+ ):
141
+ self.mjd_col = mjd_col
142
+ self.exp_time_col = exp_time_col
143
+ self.min_exp_time = min_exp_time
144
+ self.night_col = night_col
145
+ units = "nights"
146
+ super().__init__(col=[self.mjd_col, self.exp_time_col, self.night_col], units=units, **kwargs)
147
+
148
+ def run(self, data_slice, slice_point):
149
+ # Order data Slice/times and exclude visits which are too short.
150
+ long = np.where(data_slice[self.exp_time_col] > self.min_exp_time)
151
+ if len(long[0]) == 0:
152
+ return self.badval
153
+ data = np.sort(data_slice[long], order=self.mjd_col)
154
+ # SlicePoints ra/dec are always in radians -
155
+ # convert to degrees to calculate season
156
+ seasons = calc_season(np.degrees(slice_point["ra"]), data[self.mjd_col])
157
+ first_of_season, last_of_season = find_season_edges(seasons)
158
+ season_means = np.zeros(len(first_of_season), float)
159
+ for i, (first, last) in enumerate(zip(first_of_season, last_of_season)):
160
+ if first < last:
161
+ n = data[self.night_col][first : last + 1]
162
+ delta_nights = np.diff(np.unique(n))
163
+ if len(delta_nights) > 0:
164
+ season_means[i] = np.mean(delta_nights)
165
+ return np.mean(season_means)
166
+
167
+
168
+ class TdcMetric(BaseMetric):
169
+ """Calculate the Time Delay Challenge metric,
170
+ as described in Liao et al 2015 (https://arxiv.org/pdf/1409.1254.pdf).
171
+
172
+ This combines the MeanCampaignFrequency/MeanNightSeparation,
173
+ the SeasonLength, and the CampaignLength
174
+ metrics above, but rewritten to calculate season information only once.
175
+
176
+ cad_norm = in units of days
177
+ sea_norm = in units of months
178
+ camp_norm = in units of years
179
+
180
+ This metric also adds a requirement to achieve limiting magnitudes
181
+ after galactic dust extinction, in various bandpasses,
182
+ in order to exclude visits which are not useful for detecting quasars
183
+ (due to being short or having high sky brightness, etc.) and to
184
+ reject regions with high galactic dust extinction.
185
+
186
+ Parameters
187
+ ----------
188
+ mjd_col : `str`, optional
189
+ Column name for mjd. Default observationStartMJD.
190
+ night_col : `str`, optional
191
+ Column name for night. Default night.
192
+ filter_col : `str`, optional
193
+ Column name for filter. Default filter.
194
+ m5_col : `str`, optional
195
+ Column name for five-sigma depth. Default fiveSigmaDepth.
196
+ mag_cuts : `dict`, optional
197
+ Dictionary with filtername:mag limit (after dust extinction).
198
+ Default None in kwarg.
199
+ Defaults set within metric:
200
+ {'u': 22.7, 'g': 24.1, 'r': 23.7, 'i': 23.1, 'z': 22.2, 'y': 21.4}
201
+ metricName : `str`, optional
202
+ Metric Name. Default TDC.
203
+ cad_norm : `float`, optional
204
+ Cadence normalization constant, in units of days. Default 3.
205
+ sea_norm : `float`, optional
206
+ Season normalization constant, in units of months. Default 4.
207
+ camp_norm : `float`, optional
208
+ Campaign length normalization constant, in units of years. Default 5.
209
+ badval : `float`, optional
210
+ Return this value instead of the dictionary for bad points.
211
+
212
+ Returns
213
+ -------
214
+ TDCmetrics : `dict`
215
+ Dictionary of values for {'rate', 'precision', 'accuracy'}
216
+ at this point in the sky.
217
+ """
218
+
219
+ def __init__(
220
+ self,
221
+ mjd_col="observationStartMJD",
222
+ night_col="night",
223
+ filter_col="band",
224
+ m5_col="fiveSigmaDepth",
225
+ mag_cuts=None,
226
+ metric_name="TDC",
227
+ cad_norm=3.0,
228
+ sea_norm=4.0,
229
+ camp_norm=5.0,
230
+ badval=-999,
231
+ **kwargs,
232
+ ):
233
+ # Save the normalization values.
234
+ self.cad_norm = cad_norm
235
+ self.sea_norm = sea_norm
236
+ self.camp_norm = camp_norm
237
+ self.mjd_col = mjd_col
238
+ self.m5_col = m5_col
239
+ self.night_col = night_col
240
+ self.filter_col = filter_col
241
+ if mag_cuts is None:
242
+ self.mag_cuts = {
243
+ "u": 22.7,
244
+ "g": 24.1,
245
+ "r": 23.7,
246
+ "i": 23.1,
247
+ "z": 22.2,
248
+ "y": 21.4,
249
+ }
250
+ else:
251
+ self.mag_cuts = mag_cuts
252
+ if not isinstance(self.mag_cuts, dict):
253
+ raise Exception("mag_cuts should be a dictionary")
254
+ # Set up dust map requirement
255
+ maps = ["DustMap"]
256
+ # Set the default wavelength limits for the lsst filters.
257
+ # These are approximately correct.
258
+ dust_properties = DustValues()
259
+ self.ax1 = dust_properties.ax1
260
+ super().__init__(
261
+ col=[self.mjd_col, self.m5_col, self.night_col, self.filter_col],
262
+ badval=badval,
263
+ maps=maps,
264
+ metric_name=metric_name,
265
+ units="%s" % ("%"),
266
+ **kwargs,
267
+ )
268
+
269
+ def run(self, data_slice, slice_point):
270
+ # Calculate dust-extinction limiting magnitudes for each visit.
271
+ filterlist = np.unique(data_slice[self.filter_col])
272
+ m5_dust = np.zeros(len(data_slice), float)
273
+ for f in filterlist:
274
+ match = np.where(data_slice[self.filter_col] == f)
275
+ a_x = self.ax1[f] * slice_point["ebv"]
276
+ m5_dust[match] = data_slice[self.m5_col][match] - a_x
277
+ m5_dust[match] = np.where(m5_dust[match] > self.mag_cuts[f], m5_dust[match], -999)
278
+ idxs = np.where(m5_dust > -998)
279
+ if len(idxs[0]) == 0:
280
+ return self.badval
281
+ data = np.sort(data_slice[idxs], order=self.mjd_col)
282
+ # SlicePoints ra/dec are always in radians -
283
+ # convert to degrees to calculate season
284
+ seasons = calc_season(np.degrees(slice_point["ra"]), data[self.mjd_col])
285
+ int_seasons = np.floor(seasons)
286
+ first_of_season, last_of_season = find_season_edges(seasons)
287
+ # Campaign length
288
+ camp = len(np.unique(int_seasons))
289
+ # Season length
290
+ seasonlengths = data[self.mjd_col][last_of_season] - data[self.mjd_col][first_of_season]
291
+ sea = np.median(seasonlengths)
292
+ # Convert to months
293
+ sea = sea / 30.0
294
+ # Campaign frequency / mean night separation
295
+ season_means = np.zeros(len(first_of_season), float)
296
+ for i, (first, last) in enumerate(zip(first_of_season, last_of_season)):
297
+ n = data[self.night_col][first : last + 1]
298
+ delta_nights = np.diff(np.unique(n))
299
+ if len(delta_nights) > 0:
300
+ season_means[i] = np.mean(delta_nights)
301
+ cad = np.mean(season_means)
302
+ # Evaluate precision and accuracy for TDC
303
+ if sea == 0 or cad == 0 or camp == 0:
304
+ return self.badval
305
+ else:
306
+ accuracy = 0.06 * (self.sea_norm / sea) * (self.camp_norm / camp) ** (1.1)
307
+ precision = (
308
+ 4.0
309
+ * (cad / self.cad_norm) ** (0.7)
310
+ * (self.sea_norm / sea) ** (0.3)
311
+ * (self.camp_norm / camp) ** (0.6)
312
+ )
313
+ rate = (
314
+ 30.0
315
+ * (self.cad_norm / cad) ** (0.4)
316
+ * (sea / self.sea_norm) ** (0.8)
317
+ * (self.camp_norm / camp) ** (0.2)
318
+ )
319
+ return {
320
+ "accuracy": accuracy,
321
+ "precision": precision,
322
+ "rate": rate,
323
+ "cadence (days)": cad,
324
+ "season (months)": sea,
325
+ "campaign": camp,
326
+ }
327
+
328
+ def reduce_accuracy(self, metric_value):
329
+ return metric_value["accuracy"]
330
+
331
+ def reduce_precision(self, metric_value):
332
+ return metric_value["precision"]
333
+
334
+ def reduce_rate(self, metric_value):
335
+ return metric_value["rate"]
336
+
337
+ def reduce_cadence(self, metric_value):
338
+ return metric_value["cadence (days)"]
339
+
340
+ def reduce_season(self, metric_value):
341
+ return metric_value["season (months)"]
342
+
343
+ def reduce_campaign(self, metric_value):
344
+ return metric_value["campaign"]