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,161 @@
1
+ __all__ = ("spectres",)
2
+
3
+ import warnings
4
+
5
+ import numpy as np
6
+
7
+ # Taken from https://github.com/ACCarnall/SpectRes
8
+ # (which is under GPL 3), cite https://arxiv.org/abs/1705.05165
9
+
10
+
11
+ def make_bins(wavs):
12
+ """Given a series of wavelength points, find the edges and widths
13
+ of corresponding wavelength bins."""
14
+ edges = np.zeros(wavs.shape[0] + 1)
15
+ widths = np.zeros(wavs.shape[0])
16
+ edges[0] = wavs[0] - (wavs[1] - wavs[0]) / 2
17
+ widths[-1] = wavs[-1] - wavs[-2]
18
+ edges[-1] = wavs[-1] + (wavs[-1] - wavs[-2]) / 2
19
+ edges[1:-1] = (wavs[1:] + wavs[:-1]) / 2
20
+ widths[:-1] = edges[1:-1] - edges[:-2]
21
+
22
+ return edges, widths
23
+
24
+
25
+ def spectres(new_wavs, spec_wavs, spec_fluxes, spec_errs=None, fill=0, verbose=True):
26
+ """
27
+ Function for resampling spectra (and optionally associated
28
+ uncertainties) onto a new wavelength basis.
29
+
30
+ If performance is an issue, https://github.com/ACCarnall/SpectRes
31
+ includes a version that is wrapped in numba and should be much faster.
32
+
33
+ Parameters
34
+ ----------
35
+
36
+ new_wavs : numpy.ndarray
37
+ Array containing the new wavelength sampling desired for the
38
+ spectrum or spectra.
39
+
40
+ spec_wavs : numpy.ndarray
41
+ 1D array containing the current wavelength sampling of the
42
+ spectrum or spectra.
43
+
44
+ spec_fluxes : numpy.ndarray
45
+ Array containing spectral fluxes at the wavelengths specified in
46
+ spec_wavs, last dimension must correspond to the shape of
47
+ spec_wavs. Extra dimensions before this may be used to include
48
+ multiple spectra.
49
+
50
+ spec_errs : numpy.ndarray (optional)
51
+ Array of the same shape as spec_fluxes containing uncertainties
52
+ associated with each spectral flux value.
53
+
54
+ fill : float (optional)
55
+ Where new_wavs extends outside the wavelength range in spec_wavs
56
+ this value will be used as a filler in new_fluxes and new_errs.
57
+
58
+ verbose : bool (optional)
59
+ Setting verbose to False will suppress the default warning about
60
+ new_wavs extending outside spec_wavs and "fill" being used.
61
+
62
+ Returns
63
+ -------
64
+
65
+ new_fluxes : numpy.ndarray
66
+ Array of resampled flux values, last dimension is the same
67
+ length as new_wavs, other dimensions are the same as
68
+ spec_fluxes.
69
+
70
+ new_errs : numpy.ndarray
71
+ Array of uncertainties associated with fluxes in new_fluxes.
72
+ Only returned if spec_errs was specified.
73
+ """
74
+
75
+ # Rename the input variables for clarity within the function.
76
+ old_wavs = spec_wavs
77
+ old_fluxes = spec_fluxes
78
+ old_errs = spec_errs
79
+
80
+ # Make arrays of edge positions and widths for the old and new bins
81
+
82
+ old_edges, old_widths = make_bins(old_wavs)
83
+ new_edges, new_widths = make_bins(new_wavs)
84
+
85
+ # Generate output arrays to be populated
86
+ new_fluxes = np.zeros(old_fluxes[..., 0].shape + new_wavs.shape)
87
+
88
+ if old_errs is not None:
89
+ if old_errs.shape != old_fluxes.shape:
90
+ raise ValueError("If specified, spec_errs must be the same shape " "as spec_fluxes.")
91
+ else:
92
+ new_errs = np.copy(new_fluxes)
93
+
94
+ start = 0
95
+ stop = 0
96
+
97
+ # Calculate new flux and uncertainty values, looping over new bins
98
+ for j in range(new_wavs.shape[0]):
99
+
100
+ # Add filler values if new_wavs extends outside of spec_wavs
101
+ if (new_edges[j] < old_edges[0]) or (new_edges[j + 1] > old_edges[-1]):
102
+ new_fluxes[..., j] = fill
103
+
104
+ if spec_errs is not None:
105
+ new_errs[..., j] = fill
106
+
107
+ if (j == 0 or j == new_wavs.shape[0] - 1) and verbose:
108
+ warnings.warn(
109
+ "Spectres: new_wavs contains values outside the range "
110
+ "in spec_wavs, new_fluxes and new_errs will be filled "
111
+ "with the value set in the 'fill' keyword argument "
112
+ "(by default 0).",
113
+ category=RuntimeWarning,
114
+ )
115
+ continue
116
+
117
+ # Find first old bin which is partially covered by the new bin
118
+ while old_edges[start + 1] <= new_edges[j]:
119
+ start += 1
120
+
121
+ # Find last old bin which is partially covered by the new bin
122
+ while old_edges[stop + 1] < new_edges[j + 1]:
123
+ stop += 1
124
+
125
+ # If new bin is fully inside an old bin start and stop are equal
126
+ if stop == start:
127
+ new_fluxes[..., j] = old_fluxes[..., start]
128
+ if old_errs is not None:
129
+ new_errs[..., j] = old_errs[..., start]
130
+
131
+ # Otherwise multiply the first and last old bin widths by P_ij
132
+ else:
133
+ start_factor = (old_edges[start + 1] - new_edges[j]) / (old_edges[start + 1] - old_edges[start])
134
+
135
+ end_factor = (new_edges[j + 1] - old_edges[stop]) / (old_edges[stop + 1] - old_edges[stop])
136
+
137
+ old_widths[start] *= start_factor
138
+ old_widths[stop] *= end_factor
139
+
140
+ # Populate new_fluxes spectrum and uncertainty arrays
141
+ f_widths = old_widths[start : stop + 1] * old_fluxes[..., start : stop + 1]
142
+ new_fluxes[..., j] = np.sum(f_widths, axis=-1)
143
+ new_fluxes[..., j] /= np.sum(old_widths[start : stop + 1])
144
+
145
+ if old_errs is not None:
146
+ e_wid = old_widths[start : stop + 1] * old_errs[..., start : stop + 1]
147
+
148
+ new_errs[..., j] = np.sqrt(np.sum(e_wid**2, axis=-1))
149
+ new_errs[..., j] /= np.sum(old_widths[start : stop + 1])
150
+
151
+ # Put back the old bin widths to their initial values
152
+ old_widths[start] /= start_factor
153
+ old_widths[stop] /= end_factor
154
+
155
+ # If errors were supplied return both new_fluxes and new_errs.
156
+ if old_errs is not None:
157
+ return new_fluxes, new_errs
158
+
159
+ # Otherwise just return the new_fluxes spectrum array
160
+ else:
161
+ return new_fluxes
@@ -0,0 +1,3 @@
1
+ from .basis_function import *
2
+ from .model_observatory import *
3
+ from .sat_utils import *
@@ -0,0 +1,40 @@
1
+ __all__ = ("SatelliteAvoidBasisFunction",)
2
+
3
+ import healpy as hp
4
+ import numpy as np
5
+ import rubin_scheduler.scheduler.basis_functions as bf
6
+
7
+
8
+ class SatelliteAvoidBasisFunction(bf.BaseBasisFunction):
9
+ """Uses satellite position information from the Conditions object
10
+ and then avoids streaks.
11
+
12
+ Parameters
13
+ ----------
14
+ forecast_time : `float`
15
+ The time ahead to forecast satellite streaks (minutes).
16
+ smooth_fwhm : `float`
17
+ The smoothing full width half max to use (degrees)
18
+ """
19
+
20
+ def __init__(self, nside=32, forecast_time=90.0, smooth_fwhm=3.5):
21
+ super().__init__(nside=nside)
22
+ self.forecast_time = forecast_time / 60.0 / 24 # To days
23
+ self.smooth_fwhm = np.radians(smooth_fwhm)
24
+
25
+ def _calc_value(self, conditions, indx=None):
26
+ result = 0
27
+ # find the indices that are relevant
28
+ indx_min = np.min(np.searchsorted(conditions.satellite_mjds, conditions.mjd))
29
+ indx_max = np.max(np.searchsorted(conditions.satellite_mjds, conditions.mjd + self.forecast_time))
30
+
31
+ if indx_max > indx_min:
32
+ result = np.sum(conditions.satellite_maps[indx_min:indx_max], axis=0)
33
+ result = hp.smoothing(result, fwhm=self.smooth_fwhm)
34
+ result = hp.ud_grade(result, self.nside)
35
+ result[np.where(result < 0)] = 0
36
+ # Make it negative, so positive weights will result
37
+ # in avoiding satellites
38
+ result *= -1
39
+
40
+ return result
@@ -0,0 +1,157 @@
1
+ __all__ = ("ModelObservatory",)
2
+
3
+ import numpy as np
4
+ from rubin_scheduler.scheduler.model_observatory import ModelObservatory as oMO
5
+ from rubin_scheduler.site_models import Almanac
6
+ from rubin_scheduler.utils import SURVEY_START_MJD, _healbin
7
+
8
+ # Take the model observatory from the scheduler and
9
+ # subclass to expand to include satellite constellations
10
+
11
+
12
+ class ModelObservatory(oMO):
13
+ """A class to generate a realistic telemetry stream for the scheduler
14
+
15
+ Parameters
16
+ ----------
17
+ nside : `int`
18
+ The healpix nside resolution
19
+ mjd_start : `float`
20
+ The MJD to start the observatory up at.
21
+ Uses util to lookup default if None.
22
+ alt_min : `float`
23
+ The minimum altitude to compute models at (degrees).
24
+ lax_dome : `bool`
25
+ Passed to observatory model. If true, allows dome creep.
26
+ cloud_limit : `float`
27
+ The limit to stop taking observations if the cloud model
28
+ returns something equal or higher
29
+ sim_to_o : `sim_targetoO`
30
+ If one would like to inject simulated ToOs into the telemetry stream.
31
+ seeing_db : `str`
32
+ If one would like to use an alternate seeing database,
33
+ filename of sqlite file
34
+ park_after : `float`
35
+ Park the telescope after a gap longer than park_after (minutes)
36
+ init_load_length : `int`
37
+ The length of pre-scheduled sky brighntess to load initially (days).
38
+ alt_limit : `float`
39
+ Altitude limit for considering satellite streaks (degrees).
40
+ satellite_dt : `float`
41
+ The time step to use for computing satellite positions (seconds).
42
+ sat_nside : `int`
43
+ The HEALpix nside to use for satellite streak maps.
44
+ constellation : `rubin_sim.satellite_constellations.Constellation`
45
+ The satellite constellation to use.
46
+ """
47
+
48
+ def __init__(
49
+ self,
50
+ nside=None,
51
+ mjd_start=SURVEY_START_MJD,
52
+ seed=42,
53
+ alt_min=5.0,
54
+ lax_dome=True,
55
+ cloud_limit=0.3,
56
+ sim_to_o=None,
57
+ seeing_db=None,
58
+ park_after=10.0,
59
+ init_load_length=10,
60
+ sat_nside=64,
61
+ satellite_dt=10.0,
62
+ constellation=None,
63
+ alt_limit=20.0,
64
+ ):
65
+ # Add in the new satellite information
66
+ self.alt_limit = np.radians(alt_limit)
67
+ self.satelite_dt = satellite_dt / 3600.0 / 24.0 # Seconds to days
68
+ self.sat_nside = sat_nside
69
+ self.constellation = constellation
70
+
71
+ # Need to do a little fiddle with the MJD since
72
+ # self.mjd needs self.night set now.
73
+ self.mjd_start = mjd_start
74
+
75
+ self.almanac = Almanac(mjd_start=self.mjd_start)
76
+ self.night = -1
77
+
78
+ # Run the rest of the regular __init__ steps
79
+ super().__init__(
80
+ nside=None,
81
+ mjd_start=self.mjd_start,
82
+ seed=seed,
83
+ alt_min=alt_min,
84
+ lax_dome=lax_dome,
85
+ cloud_limit=cloud_limit,
86
+ sim_to_o=sim_to_o,
87
+ seeing_db=seeing_db,
88
+ park_after=park_after,
89
+ init_load_length=init_load_length,
90
+ )
91
+
92
+ def return_conditions(self):
93
+ """
94
+ Returns
95
+ -------
96
+ conditions: `rubin_sim.scheduler.features.conditions`
97
+ Current conditions as simulated by the ModelObservatory.
98
+ """
99
+
100
+ # Spot to put in satellite streak prediction maps
101
+ self.conditions.satellite_mjds = self.sat_mjds
102
+ self.conditions.satellite_maps = self.satellite_maps
103
+
104
+ # Run the regular return conditions
105
+ super().return_conditions()
106
+ # I guess running super() means return statement gets skipped?
107
+ return self.conditions
108
+
109
+ @property
110
+ def mjd(self):
111
+ return self._mjd
112
+
113
+ @mjd.setter
114
+ def mjd(self, value):
115
+ self._mjd = value
116
+ self.almanac_indx = self.almanac.mjd_indx(value)
117
+ # Update night if needed
118
+ if self.almanac.sunsets["night"][self.almanac_indx] != self.night:
119
+ self.night = self.almanac.sunsets["night"][self.almanac_indx]
120
+ # Update the satellite prediction map for the night
121
+ self._update_satellite_maps()
122
+
123
+ def _update_satellite_maps(self):
124
+ """Make the satellite prediction maps for the night.
125
+
126
+ Will set self.sat_mjds and self.satellite_maps that can then
127
+ be attached to a conditions object in self.return_conditions
128
+ """
129
+ sunset = self.almanac.sunsets["sun_n12_setting"][self.almanac_indx]
130
+ sunrise = self.almanac.sunsets["sun_n12_rising"][self.almanac_indx]
131
+
132
+ self.sat_mjds = np.arange(sunset, sunrise, self.satelite_dt)
133
+
134
+ # Compute RA and decs for when sun is down
135
+ ras, decs, alts, illums = self.constellation.paths_array(self.sat_mjds)
136
+
137
+ below_limit = np.where(alts < self.alt_limit)
138
+
139
+ weights = np.zeros(ras.shape, dtype=int)
140
+ weights[illums] = 1
141
+ weights[below_limit] = 0
142
+
143
+ satellite_maps = []
144
+ for i, mjd in enumerate(self.sat_mjds):
145
+ spot_map = _healbin(
146
+ ras[:, i][illums[:, i]],
147
+ decs[:, i][illums[:, i]],
148
+ weights[:, i][illums[:, i]],
149
+ self.sat_nside,
150
+ reduce_func=np.sum,
151
+ dtype=int,
152
+ fill_val=0,
153
+ )
154
+
155
+ satellite_maps.append(spot_map)
156
+
157
+ self.satellite_maps = np.vstack(satellite_maps)