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,449 @@
1
+ __all__ = ("PhotometricParameters", "DustValues")
2
+
3
+ import os
4
+
5
+ import numpy as np
6
+ from rubin_scheduler.data import get_data_dir
7
+
8
+ from .bandpass import Bandpass
9
+ from .sed import Sed
10
+
11
+
12
+ class DustValues:
13
+ """Calculate extinction values
14
+
15
+ Parameters
16
+ ----------
17
+ R_v : `float`
18
+ Extinction law parameter (3.1).
19
+ bandpassDict : `dict`
20
+ A dict with keys of filtername and values of
21
+ rubin_sim.phot_utils.Bandpass objects.
22
+ Default of None will load the standard ugrizy bandpasses.
23
+ ref_ev : `float`
24
+ The reference E(B-V) value to use. Things in MAF assume 1.
25
+
26
+ Note
27
+ ----
28
+ The value that dust_values calls "ax1" is equivalent to r_x in any filter.
29
+ And r_x * ebv = A_x (the extinction due to dust in any bandpass).
30
+ DustValues.r_x is also provided as a copy of DustValues.ax1 ..
31
+ eventually ax1 may be deprecated in favor of r_x.
32
+ """
33
+
34
+ def __init__(self, r_v=3.1, bandpass_dict=None, ref_ebv=1.0):
35
+ # Calculate dust extinction values
36
+ self.ax1 = {}
37
+ if bandpass_dict is None:
38
+ bandpass_dict = {}
39
+ root_dir = os.path.join(get_data_dir(), "throughputs", "baseline")
40
+ for f in ["u", "g", "r", "i", "z", "y"]:
41
+ bandpass_dict[f] = Bandpass()
42
+ bandpass_dict[f].read_throughput(os.path.join(root_dir, f"total_{f}.dat"))
43
+
44
+ for filtername in bandpass_dict:
45
+ wavelen_min = bandpass_dict[filtername].wavelen.min()
46
+ wavelen_max = bandpass_dict[filtername].wavelen.max()
47
+ testsed = Sed()
48
+ testsed.set_flat_sed(wavelen_min=wavelen_min, wavelen_max=wavelen_max, wavelen_step=1.0)
49
+ self.ref_ebv = ref_ebv
50
+ # Calculate non-dust-extincted magnitude
51
+ flatmag = testsed.calc_mag(bandpass_dict[filtername])
52
+ # Add dust
53
+ a, b = testsed.setup_ccm_ab()
54
+ testsed.add_dust(a, b, ebv=self.ref_ebv, r_v=r_v)
55
+ # Calculate difference due to dust when EBV=1.0
56
+ # (m_dust = m_nodust - Ax, Ax > 0)
57
+ self.ax1[filtername] = testsed.calc_mag(bandpass_dict[filtername]) - flatmag
58
+ # Add the R_x term, to start to transition toward this name.
59
+ self.r_x = self.ax1.copy()
60
+
61
+
62
+ def make_dict(value, bandpass_names=("u", "g", "r", "i", "z", "y", "any")):
63
+ newdict = {}
64
+ for f in bandpass_names:
65
+ newdict[f] = value
66
+ return newdict
67
+
68
+
69
+ class DefaultPhotometricParameters:
70
+ """
71
+ This class will just contain a bunch of dict which store
72
+ the default PhotometricParameters for LSST Bandpasses
73
+
74
+ Users should not access this class (which is why it is
75
+ not included in the __all__ declaration for this file).
76
+
77
+ It is only used to initialize PhotometricParameters for
78
+ a bandpass name.
79
+ """
80
+
81
+ # Obviously, some of these parameters (effarea, gain, platescale,
82
+ # darkcurrent, and readnoise) will not change as a function of bandpass;
83
+ # we are just making them dicts here to be consistent with
84
+ # everything else (and to make it possible for
85
+ # PhotometricParameters to access them using the bandpass name
86
+ # passed to its constructor)
87
+ #
88
+ # Note: all dicts contain an 'any' key which will be the default
89
+ # value if an unknown bandpass is asked for
90
+ #
91
+ # 'any' values should be kept consistent with r band
92
+
93
+ bandpass_names = ["u", "g", "r", "i", "z", "y", "any"]
94
+
95
+ # exposure time in seconds
96
+ exptime_sec = 15.0
97
+ exptime = make_dict(exptime_sec)
98
+
99
+ # number of exposures
100
+ nexp_n = 2
101
+ nexp = make_dict(nexp_n)
102
+
103
+ # effective area in cm^2
104
+ effarea_cm2 = np.pi * (6.423 / 2.0 * 100) ** 2
105
+ effarea = make_dict(effarea_cm2)
106
+
107
+ # electrons per ADU
108
+ gain_adu = 2.3
109
+ gain = make_dict(gain_adu)
110
+
111
+ # electrons per pixel per exposure
112
+ readnoise_e = 8.8
113
+ readnoise = make_dict(readnoise_e)
114
+
115
+ # electrons per pixel per second
116
+ darkcurrent_e = 0.2
117
+ darkcurrent = make_dict(darkcurrent_e)
118
+
119
+ # electrons per pixel per exposure
120
+ othernoise_e = 0.0
121
+ othernoise = make_dict(othernoise_e)
122
+
123
+ # arcseconds per pixel
124
+ platescale_as = 0.2
125
+ platescale = make_dict(platescale_as)
126
+
127
+ # systematic squared error in magnitudes
128
+ # see Table 14 of the SRD document
129
+ # https://docushare.lsstcorp.org/docushare/dsweb/Get/LPM-17
130
+ sigma_sys = {
131
+ "u": 0.0075,
132
+ "g": 0.005,
133
+ "r": 0.005,
134
+ "i": 0.005,
135
+ "z": 0.0075,
136
+ "y": 0.0075,
137
+ "any": 0.005,
138
+ }
139
+
140
+
141
+ class PhotometricParameters:
142
+ def __init__(
143
+ self,
144
+ exptime=None,
145
+ nexp=None,
146
+ effarea=None,
147
+ gain=None,
148
+ readnoise=None,
149
+ darkcurrent=None,
150
+ othernoise=None,
151
+ platescale=None,
152
+ sigma_sys=None,
153
+ bandpass=None,
154
+ ):
155
+ """Store photometric parameters for SNR calculations.
156
+
157
+ Parameters
158
+ ----------
159
+ exptime : `float`
160
+ Exposure time in seconds (per exposure).
161
+ None will default to value from DefaultPhotometricParameters.
162
+ nexp : `int`
163
+ Number of exposures per visit.
164
+ None will default to value from DefaultPhotometricParameters.
165
+ effarea : `float`
166
+ Effective area in cm^2.
167
+ None will default to value from DefaultPhotometricParameters.
168
+ gain : `float`
169
+ Electrons per ADU.
170
+ None will default to value from DefaultPhotometricParameters.
171
+ readnoise : `float`
172
+ Electrons per pixel per exposure.
173
+ None will default to value from DefaultPhotometricParameters.
174
+ darkcurrent : `float`
175
+ Electons per pixel per second.
176
+ None will default to value from DefaultPhotometricParameters.
177
+ othernoise : `float`
178
+ Electrons per pixel per exposure.
179
+ None will default to value from DefaultPhotometricParameters.
180
+ platescale : `float`
181
+ Arcseconds per pixel.
182
+ None will default to value from DefaultPhotometricParameters.
183
+ sigma_sys : `float`
184
+ Systematic error in magnitudes.
185
+ None will default to value from DefaultPhotometricParameters.
186
+ bandpass : `str`
187
+ The name of the bandpass for these parameters.
188
+
189
+ Examples
190
+ --------
191
+ If `bandpass` is set to an LSST bandpass,
192
+ the constructor will initialize
193
+ PhotometricParameters to LSST default values for that bandpass,
194
+ excepting any parameters that have been set by hand. e.g.
195
+
196
+ >>> myPhotParams = PhotometricParameters(nexp=3, bandpass='u')
197
+
198
+ will initialize a PhotometricParameters object to `u` band defaults,
199
+ except with 3 exposures instead of 2. A bandpass value of None
200
+ will use defaults from LSST `r` band where appropriate.
201
+ """
202
+ # readnoise, darkcurrent and othernoise are measured in electrons.
203
+ # This is taken from the specifications document LSE-30 on Docushare
204
+ # Section 3.4.2.3 states that the total noise per pixel shall
205
+ # be 12.7 electrons per visit which the defaults sum to
206
+ # (remember to multply darkcurrent by the number of seconds
207
+ # in an exposure=15). [9 e- per 15 second exposure]
208
+
209
+ self._exptime = None
210
+ self._nexp = None
211
+ self._effarea = None
212
+ self._gain = None
213
+ self._platescale = None
214
+ self._sigma_sys = None
215
+ self._readnoise = None
216
+ self._darkcurrent = None
217
+ self._othernoise = None
218
+
219
+ self._bandpass = bandpass
220
+ defaults = DefaultPhotometricParameters()
221
+
222
+ if bandpass is None:
223
+ bandpass_key = "any"
224
+ # This is so we do not set the self._bandpass member variable
225
+ # without the user's explicit consent, but we can still access
226
+ # default values from the PhotometricParameterDefaults
227
+ else:
228
+ bandpass_key = bandpass
229
+
230
+ if bandpass_key in defaults.bandpass_names:
231
+ self._exptime = defaults.exptime[bandpass_key]
232
+ self._nexp = defaults.nexp[bandpass_key]
233
+ self._effarea = defaults.effarea[bandpass_key]
234
+ self._gain = defaults.gain[bandpass_key]
235
+ self._platescale = defaults.platescale[bandpass_key]
236
+ self._sigma_sys = defaults.sigma_sys[bandpass_key]
237
+ self._readnoise = defaults.readnoise[bandpass_key]
238
+ self._darkcurrent = defaults.darkcurrent[bandpass_key]
239
+ self._othernoise = defaults.othernoise[bandpass_key]
240
+
241
+ if exptime is not None:
242
+ self._exptime = exptime
243
+
244
+ if nexp is not None:
245
+ self._nexp = nexp
246
+
247
+ if effarea is not None:
248
+ self._effarea = effarea
249
+
250
+ if gain is not None:
251
+ self._gain = gain
252
+
253
+ if platescale is not None:
254
+ self._platescale = platescale
255
+
256
+ if sigma_sys is not None:
257
+ self._sigma_sys = sigma_sys
258
+
259
+ if readnoise is not None:
260
+ self._readnoise = readnoise
261
+
262
+ if darkcurrent is not None:
263
+ self._darkcurrent = darkcurrent
264
+
265
+ if othernoise is not None:
266
+ self._othernoise = othernoise
267
+
268
+ failure_message = ""
269
+ failure_ct = 0
270
+
271
+ if self._exptime is None:
272
+ failure_message += "did not set exptime\n"
273
+ failure_ct += 1
274
+
275
+ if self._nexp is None:
276
+ failure_message += "did not set nexp\n"
277
+ failure_ct += 1
278
+
279
+ if self._effarea is None:
280
+ failure_message += "did not set effarea\n"
281
+ failure_ct += 1
282
+
283
+ if self._gain is None:
284
+ failure_message += "did not set gain\n"
285
+ failure_ct += 1
286
+
287
+ if self._platescale is None:
288
+ failure_message += "did not set platescale\n"
289
+ failure_ct += 1
290
+
291
+ if self._sigma_sys is None:
292
+ failure_message += "did not set sigma_sys\n"
293
+ failure_ct += 1
294
+
295
+ if self._readnoise is None:
296
+ failure_message += "did not set readnoise\n"
297
+ failure_ct += 1
298
+
299
+ if self._darkcurrent is None:
300
+ failure_message += "did not set darkcurrent\n"
301
+ failure_ct += 1
302
+
303
+ if self._othernoise is None:
304
+ failure_message += "did not set othernoise\n"
305
+ failure_ct += 1
306
+
307
+ if failure_ct > 0:
308
+ raise RuntimeError("In PhotometricParameters:\n%s" % failure_message)
309
+
310
+ @property
311
+ def bandpass(self):
312
+ """
313
+ The name of the bandpass associated with these parameters.
314
+ Can be None.
315
+ """
316
+ return self._bandpass
317
+
318
+ @bandpass.setter
319
+ def bandpass(self, value):
320
+ raise RuntimeError(
321
+ "You should not be setting bandpass on the fly; "
322
+ + "Just instantiate a new case of PhotometricParameters"
323
+ )
324
+
325
+ @property
326
+ def exptime(self):
327
+ """
328
+ exposure time in seconds
329
+ """
330
+ return self._exptime
331
+
332
+ @exptime.setter
333
+ def exptime(self, value):
334
+ raise RuntimeError(
335
+ "You should not be setting exptime on the fly; "
336
+ + "Just instantiate a new case of PhotometricParameters"
337
+ )
338
+
339
+ @property
340
+ def nexp(self):
341
+ """
342
+ number of exposures
343
+ """
344
+ return self._nexp
345
+
346
+ @nexp.setter
347
+ def nexp(self, value):
348
+ raise RuntimeError(
349
+ "You should not be setting nexp on the fly; "
350
+ + "Just instantiate a new case of PhotometricParameters"
351
+ )
352
+
353
+ @property
354
+ def effarea(self):
355
+ """
356
+ effective area in cm^2
357
+ """
358
+ return self._effarea
359
+
360
+ @effarea.setter
361
+ def effarea(self, value):
362
+ raise RuntimeError(
363
+ "You should not be setting effarea on the fly; "
364
+ + "Just instantiate a new case of PhotometricParameters"
365
+ )
366
+
367
+ @property
368
+ def gain(self):
369
+ """
370
+ electrons per ADU
371
+ """
372
+ return self._gain
373
+
374
+ @gain.setter
375
+ def gain(self, value):
376
+ raise RuntimeError(
377
+ "You should not be setting gain on the fly; "
378
+ + "Just instantiate a new case of PhotometricParameters"
379
+ )
380
+
381
+ @property
382
+ def platescale(self):
383
+ """
384
+ arcseconds per pixel
385
+ """
386
+ return self._platescale
387
+
388
+ @platescale.setter
389
+ def platescale(self, value):
390
+ raise RuntimeError(
391
+ "You should not be setting platescale on the fly; "
392
+ + "Just instantiate a new case of PhotometricParameters"
393
+ )
394
+
395
+ @property
396
+ def readnoise(self):
397
+ """
398
+ electrons per pixel per exposure
399
+ """
400
+ return self._readnoise
401
+
402
+ @readnoise.setter
403
+ def readnoise(self, value):
404
+ raise RuntimeError(
405
+ "You should not be setting readnoise on the fly; "
406
+ + "Just instantiate a new case of PhotometricParameters"
407
+ )
408
+
409
+ @property
410
+ def darkcurrent(self):
411
+ """
412
+ electrons per pixel per second
413
+ """
414
+ return self._darkcurrent
415
+
416
+ @darkcurrent.setter
417
+ def darkcurrent(self, value):
418
+ raise RuntimeError(
419
+ "You should not be setting darkcurrent on the fly; "
420
+ + "Just instantiate a new case of PhotometricParameters"
421
+ )
422
+
423
+ @property
424
+ def othernoise(self):
425
+ """
426
+ electrons per pixel per exposure
427
+ """
428
+ return self._othernoise
429
+
430
+ @othernoise.setter
431
+ def othernoise(self, value):
432
+ raise RuntimeError(
433
+ "You should not be setting othernoise on the fly; "
434
+ + "Just instantiate a new case of PhotometricParameters"
435
+ )
436
+
437
+ @property
438
+ def sigma_sys(self):
439
+ """
440
+ systematic error in magnitudes
441
+ """
442
+ return self._sigma_sys
443
+
444
+ @sigma_sys.setter
445
+ def sigma_sys(self, value):
446
+ raise RuntimeError(
447
+ "You should not be setting sigma_sys on the fly; "
448
+ + "Just instantiate a new case of PhotometricParameters"
449
+ )
@@ -0,0 +1,50 @@
1
+ __all__ = ("PhysicalParameters",)
2
+
3
+
4
+ class PhysicalParameters:
5
+ """
6
+ Stores physical constants and other immutable parameters
7
+ used by the sims_phot_utils code.
8
+ """
9
+
10
+ def __init__(self):
11
+ self._lightspeed = 299792458.0 # speed of light, m/s
12
+ self._planck = 6.626068e-27 # planck's constant, ergs*seconds
13
+ self._nm2m = 1.00e-9 # nanometers to meters conversion m/nm
14
+ self._ergsetc2jansky = 1.00e23 # erg/cm2/s/Hz to Jansky units (fnu)
15
+
16
+ @property
17
+ def lightspeed(self):
18
+ """Speed of light in meters per second."""
19
+ return self._lightspeed
20
+
21
+ @lightspeed.setter
22
+ def lightspeed(self, value):
23
+ raise RuntimeError("Cannot change the value of lightspeed " + "(Einstein does not approve)")
24
+
25
+ @property
26
+ def nm2m(self):
27
+ """Conversion factor to go from nm to m."""
28
+ return self._nm2m
29
+
30
+ @nm2m.setter
31
+ def nm2m(self, value):
32
+ raise RuntimeError("Cannot change the value of nm2m")
33
+
34
+ @property
35
+ def ergsetc2jansky(self):
36
+ """Conversion factor to go from ergs/sec/cm^2 to Janskys."""
37
+ return self._ergsetc2jansky
38
+
39
+ @ergsetc2jansky.setter
40
+ def ergsetc2jansky(self, value):
41
+ raise RuntimeError("Cannot change the value of ergsetc2Jansky")
42
+
43
+ @property
44
+ def planck(self):
45
+ """Planck's constant in ergs*seconds."""
46
+ return self._planck
47
+
48
+ @planck.setter
49
+ def planck(self, value):
50
+ raise RuntimeError("Cannot change the value of planck")