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,170 @@
1
+ """
2
+ Created on Tue Sep 18 13:35:41 2018
3
+
4
+ @author: rstreet
5
+ """
6
+
7
+ __all__ = ("calculate_lsst_field_visibility", "calculate_lsst_field_visibility_fast")
8
+
9
+
10
+ import astropy.units as u
11
+ import numpy as np
12
+ from astropy.coordinates import AltAz, EarthLocation, SkyCoord, get_sun
13
+ from astropy.time import Time, TimeDelta
14
+ from rubin_scheduler.utils import Site, approx_ra_dec2_alt_az
15
+
16
+
17
+ def calculate_lsst_field_visibility(
18
+ ra, dec, start_date, end_date, min_alt=30.0, sun_alt_limit=18.0, sample_rate=0.0007, verbose=False
19
+ ):
20
+ """Method to calculate the visibility of a given RA and Dec from LSST
21
+ over the course of a year
22
+
23
+ Adapted from an example in the Astropy docs.
24
+
25
+ Parameters
26
+ ----------
27
+ ra : `float`
28
+ RA in decimal degrees.
29
+ dec : `float`
30
+ Declination in decimal degrees
31
+ start_date : `astropy.time.Time`
32
+ Start date for calculations
33
+ end_date : `astropy.time.Time`
34
+ End date for calculations
35
+ min_alt : `float`, optional
36
+ Minimal altitude for field
37
+ sun_alt_limit : `float`, optional
38
+ Maximum sun altitude to consider for visibility
39
+ sample_rate : `float`, optional
40
+ Time spacing between visibility tests (days)
41
+ verbose : `bool`, optional
42
+ Output extra information, including debugging
43
+ """
44
+ field = SkyCoord(ra, dec, frame="icrs", unit=(u.deg, u.deg))
45
+
46
+ lsst_site = Site("LSST")
47
+ lsst = EarthLocation(
48
+ lat=lsst_site.latitude * u.deg,
49
+ lon=lsst_site.longitude * u.deg,
50
+ height=lsst_site.height * u.m,
51
+ )
52
+
53
+ total_time_visible = 0.0
54
+
55
+ dates = np.arange(start_date, end_date, TimeDelta(1, format="jd", scale="tai"))
56
+
57
+ target_alts = []
58
+ hrs_visible_per_night = []
59
+ hrs_per_night = []
60
+
61
+ for d in dates:
62
+ intervals = np.arange(0.0, 1.0, sample_rate)
63
+
64
+ dt = TimeDelta(intervals, format="jd", scale="tai")
65
+
66
+ ts = d + dt
67
+
68
+ frame = AltAz(obstime=ts, location=lsst)
69
+
70
+ altaz = field.transform_to(frame)
71
+
72
+ alts = np.array((altaz.alt * u.deg).value)
73
+
74
+ idx = np.where(alts >= min_alt)[0]
75
+
76
+ sun_altaz = get_sun(ts).transform_to(frame)
77
+
78
+ sun_alts = np.array((sun_altaz.alt * u.deg).value)
79
+
80
+ jdx = np.where(sun_alts < sun_alt_limit)[0]
81
+ # Hours available in the sun
82
+ hrs_per_night.append(sample_rate * len(sun_alts[jdx]) * 24.0)
83
+ # The indexes where sun down and target above min_alt
84
+ idx = list(set(idx).intersection(set(jdx)))
85
+ # The highest altitude for the target, when the sun is down
86
+ target_alts.append(alts[jdx].max())
87
+
88
+ if len(idx) > 0:
89
+ ts_vis = ts[idx]
90
+
91
+ tvis = sample_rate * len(ts_vis)
92
+
93
+ total_time_visible += tvis
94
+
95
+ if verbose:
96
+ print("Target visible from LSST for " + str(round(tvis * 24.0, 2)) + "hrs on " + d.isot)
97
+ # Hours of visibility of the target on this night
98
+ hrs_visible_per_night.append((tvis * 24.0))
99
+
100
+ else:
101
+ # target_alts.append(-1e5)
102
+ hrs_visible_per_night.append(0.0)
103
+
104
+ if verbose:
105
+ print("Target not visible from LSST on " + d.isot)
106
+
107
+ return np.array(total_time_visible), np.array(hrs_visible_per_night)
108
+
109
+
110
+ def calculate_lsst_field_visibility_fast(
111
+ ra,
112
+ dec,
113
+ start_date,
114
+ end_date,
115
+ min_alt=30.0,
116
+ sun_alt_limit=18.0,
117
+ sample_rate=0.0007,
118
+ ):
119
+ """Method to calculate the visibility of a given RA and Dec from LSST
120
+ over the course of a year
121
+
122
+ Skips astropy calculation of alt/az which is slow and uses
123
+ approximate transform from rubin_scheduler.
124
+
125
+ Parameters
126
+ ----------
127
+ ra : `float`
128
+ RA in decimal degrees.
129
+ dec : `float`
130
+ Declination in decimal degrees
131
+ start_date : `astropy.time.Time`
132
+ Start date for calculations
133
+ end_date : `astropy.time.Time`
134
+ End date for calculations
135
+ min_alt : `float`, optional
136
+ Minimal altitude for field
137
+ sun_alt_limit : `float`, optional
138
+ Maximum sun altitude to consider for visibility
139
+ cadence : `float`, optional
140
+ Time spacing between visibility tests (days)
141
+
142
+ Returns
143
+ -------
144
+ tvisible : `float`
145
+ Total time target is visible (days)
146
+ dates_visible : `np.ndarray`, (N,)
147
+ Dates that target is above min_alt and sun is below sun_alt_limit,
148
+ within start_date to end_date.
149
+ """
150
+ lsst_site = Site("LSST")
151
+
152
+ dates = np.arange(start_date.mjd, end_date.mjd + sample_rate / 2.0, sample_rate)
153
+
154
+ alts, _ = approx_ra_dec2_alt_az(ra, dec, lsst_site.latitude, lsst_site.longitude, dates)
155
+ # where is the target above the minimum altitude
156
+ target_high = np.where(alts >= min_alt)[0]
157
+
158
+ # when is the sun above the sun_alt_limit
159
+ dates = dates[target_high]
160
+ sun_locs = get_sun(Time(dates, format="mjd", scale="utc"))
161
+ sun_alts, _ = approx_ra_dec2_alt_az(
162
+ sun_locs.ra.deg, sun_locs.dec.deg, lsst_site.latitude, lsst_site.longitude, dates
163
+ )
164
+ sun_low = np.where(sun_alts <= sun_alt_limit)[0]
165
+
166
+ dates = dates[sun_low]
167
+ # total amount of time target is visible, in days
168
+ tvisible = len(dates) * sample_rate
169
+
170
+ return tvisible, dates
@@ -0,0 +1,109 @@
1
+ import numpy as np
2
+
3
+ import rubin_sim.maf.metrics as metrics
4
+ from rubin_sim.maf.maf_contrib.lss_obs_strategy.galaxy_counts_metric_extended import (
5
+ GalaxyCountsMetricExtended as GalaxyCountsMetric,
6
+ )
7
+
8
+
9
+ class DepthLimitedNumGalMetric(metrics.BaseMetric):
10
+ """This metric calculates the number of galaxies while accounting for the
11
+ extragalactic footprint.
12
+
13
+ Parameters
14
+ ----------
15
+ m5_col : `str`, optional
16
+ Name of column for depth in the data. Default: 'fiveSigmaDepth'
17
+ filter_col : `str`, optional
18
+ Name of column for filter in the data. Default: 'filter'
19
+ maps : `list` [`str`], optional
20
+ List of map names. Default: ['DustMap']
21
+ nside : `int`, optional
22
+ HEALpix resolution parameter. Default: 256.
23
+ This should match slicer nside.
24
+ filter_band : `str`, optional
25
+ Filter to use to calculate galaxy counts.
26
+ Any one of 'u', 'g', 'r', 'i', 'z', 'y'. Default: 'i'
27
+ redshiftBin: `str`, optional
28
+ options include '0.<z<0.15', '0.15<z<0.37', '0.37<z<0.66, '0.66<z<1.0',
29
+ '1.0<z<1.5', '1.5<z<2.0', '2.0<z<2.5', '2.5<z<3.0','3.0<z<3.5',
30
+ '3.5<z<4.0', 'all' for no redshift restriction
31
+ (so consider 0.<z<4.0)
32
+ Default: 'all'
33
+ nfilters_needed : `int`, optional
34
+ Number of filters in which to require coverage. Default: 6
35
+ lim_mag_i_ptsrc : `float`, optional
36
+ Point-source limiting mag for the i-band coadded dust-corrected depth.
37
+ Default: 26.0
38
+ lim_ebv : `float`, optional
39
+ Limiting EBV value. Default: 0.2
40
+
41
+ Returns
42
+ -------
43
+ ngal : `float`
44
+ Number of galaxies in healpix if the slice_point passes the
45
+ extragalactic cuts; otherwise self.badval
46
+ """
47
+
48
+ def __init__(
49
+ self,
50
+ m5_col="fiveSigmaDepth",
51
+ filter_col="band",
52
+ nside=128,
53
+ filter_band="i",
54
+ redshift_bin="all",
55
+ nfilters_needed=6,
56
+ lim_mag_i_ptsrc=26.0,
57
+ lim_ebv=0.2,
58
+ metric_name="DepthLimitedNumGalaxiesMetric",
59
+ units="Galaxy Counts",
60
+ **kwargs,
61
+ ):
62
+ self.m5_col = m5_col
63
+ self.filter_col = filter_col
64
+ self.filter_band = filter_band
65
+ # set up the extended source limiting mag
66
+ # galaxies are x2 as seeing: seeing is generally 0.7arcsec
67
+ # and a typical galaxies is 1arcsec
68
+ # => for extended source limiting mag of x, we'd need x + 0.7
69
+ # as the point-source limiting mag;
70
+ # 0.7 comes from $\sqrt{1/2}$;
71
+ # basically have x2 difference in magnitudes between
72
+ # point source and extended source.
73
+ lim_mag_i_extsrc = lim_mag_i_ptsrc - 0.7
74
+ # set up the metric for galaxy counts
75
+ self.galmetric = GalaxyCountsMetric(
76
+ m5_col=self.m5_col,
77
+ nside=nside,
78
+ upper_mag_limit=lim_mag_i_extsrc,
79
+ include_dust_extinction=True,
80
+ filter_band=self.filter_band,
81
+ redshift_bin=redshift_bin,
82
+ cfht_ls_counts=False,
83
+ normalized_mock_catalog_counts=True,
84
+ )
85
+ # set up the metric for extragalactic footprint
86
+ self.eg_metric = metrics.ExgalM5WithCuts(
87
+ m5_col=self.m5_col,
88
+ filter_col=self.filter_col,
89
+ lsst_filter=self.filter_band,
90
+ n_filters=nfilters_needed,
91
+ extinction_cut=lim_ebv,
92
+ depth_cut=lim_mag_i_ptsrc,
93
+ )
94
+ maps = self.eg_metric.maps + self.galmetric.maps
95
+ maps = set(maps)
96
+ super().__init__(
97
+ col=[self.m5_col, self.filter_col], maps=maps, metric_name=metric_name, units=units, **kwargs
98
+ )
99
+
100
+ def run(self, data_slice, slice_point=None):
101
+ # see if this slice_point is in the extragalactic footprint
102
+ pass_egcuts = self.eg_metric.run(data_slice, slice_point=slice_point)
103
+
104
+ if pass_egcuts == self.badval: # failed dust/depth cuts
105
+ return self.badval
106
+
107
+ # Otherwise, find the galaxy counts
108
+ in_filt = np.where(data_slice[self.filter_col] == self.filter_band)[0]
109
+ return self.galmetric.run(data_slice[in_filt], slice_point=slice_point)
@@ -0,0 +1,40 @@
1
+ # Example of a new metric added to the repo.
2
+ # ljones@astro.washington.edu
3
+
4
+ __all__ = ("NightsWithNFiltersMetric",)
5
+
6
+ import numpy as np
7
+
8
+ from rubin_sim.maf.metrics import BaseMetric
9
+
10
+
11
+ class NightsWithNFiltersMetric(BaseMetric):
12
+ """Count how many times more than NFilters are used within the same night,
13
+ for this set of visits.
14
+
15
+ Parameters
16
+ ----------
17
+ n_filters : `int`, optional
18
+ How many filters to look for, within the same night.
19
+ """
20
+
21
+ def __init__(self, night_col="night", filter_col="filter", n_filters=3, **kwargs):
22
+ """
23
+ night_col = the name of the column defining the night
24
+ filter_col = the name of the column defining the filter
25
+ n_filters = the minimum desired set of filters used in these visits
26
+ """
27
+ self.night_col = night_col
28
+ self.filter_col = filter_col
29
+ self.n_filters = n_filters
30
+ super(NightsWithNFiltersMetric, self).__init__(col=[self.night_col, self.filter_col], **kwargs)
31
+
32
+ def run(self, data_slice, slice_point=None):
33
+ count = 0
34
+ unique_nights = np.unique(data_slice[self.night_col])
35
+ for n in unique_nights:
36
+ condition = data_slice[self.night_col] == n
37
+ unique_filters = np.unique(data_slice[self.filter_col][condition])
38
+ if len(unique_filters) > self.n_filters:
39
+ count += 1
40
+ return count
@@ -0,0 +1,208 @@
1
+ __all__ = ("FilterPairTGapsMetric",)
2
+
3
+ import numpy as np
4
+
5
+ from ..metrics.base_metric import BaseMetric
6
+
7
+
8
+ class FilterPairTGapsMetric(BaseMetric):
9
+ """Figure of merit to measure the coverage the time gaps in same
10
+ and different filter pairs;
11
+
12
+ FoM is defined as sum of Nv / standard deviation after a clip;
13
+
14
+ Parameters
15
+ ----------
16
+ fltpairs : `list` [`str`], optional
17
+ List of filter pair sets to search for.
18
+ mag_lim : `list` [`float`]
19
+ FiveSigmaDepth threshold each filter,
20
+ default {'u':18, 'g':18, 'r':18, 'i':18, 'z':18, 'y':18}
21
+ bins_same : `np.ndarray`, (N,)
22
+ Bins to get histogram for same-filter pair.
23
+ bins_diff : `np.ndarray`, (N,)
24
+ Bins to get histogram for diff-filter pair.
25
+ nv_clip : `int`, optional
26
+ Number of visits of pairs to clip, std is calculated below nv_clip.
27
+ allgaps : `bool``, optional
28
+ All possible pairs if True, else consider only nearest
29
+
30
+ Returns
31
+ -------
32
+ result : `float`
33
+ sum of fom for all filterpairs,
34
+ """
35
+
36
+ def __init__(
37
+ self,
38
+ mjd_col="observationStartMJD",
39
+ filter_col="filter",
40
+ m5_col="fiveSigmaDepth",
41
+ fltpairs=[
42
+ "uu",
43
+ "ug",
44
+ "ur",
45
+ "ui",
46
+ "uz",
47
+ "uy",
48
+ "gg",
49
+ "gr",
50
+ "gi",
51
+ "gz",
52
+ "gy",
53
+ "rr",
54
+ "ri",
55
+ "rz",
56
+ "ry",
57
+ "ii",
58
+ "iz",
59
+ "iy",
60
+ "zz",
61
+ "zy",
62
+ "yy",
63
+ ],
64
+ mag_lim={"u": 18, "g": 18, "r": 18, "i": 18, "z": 18, "y": 18},
65
+ bins_same=np.logspace(np.log10(5 / 60 / 60 / 24), np.log10(3650), 50),
66
+ bins_diff=np.logspace(np.log10(5 / 60 / 60 / 24), np.log10(2), 50),
67
+ nv_clip={
68
+ "uu": 30,
69
+ "ug": 30,
70
+ "ur": 30,
71
+ "ui": 30,
72
+ "uz": 30,
73
+ "uy": 30,
74
+ "gg": 69,
75
+ "gr": 30,
76
+ "gi": 30,
77
+ "gz": 30,
78
+ "gy": 30,
79
+ "rr": 344,
80
+ "ri": 30,
81
+ "rz": 30,
82
+ "ry": 30,
83
+ "ii": 355,
84
+ "iz": 30,
85
+ "iy": 30,
86
+ "zz": 282,
87
+ "zy": 30,
88
+ "yy": 288,
89
+ },
90
+ allgaps=True,
91
+ **kwargs,
92
+ ):
93
+ self.mjd_col = mjd_col
94
+ self.filter_col = filter_col
95
+ self.m5_col = m5_col
96
+ self.fltpairs = fltpairs
97
+ self.mag_lim = mag_lim
98
+ self.bins_same = bins_same
99
+ self.bins_diff = bins_diff
100
+
101
+ self.allgaps = allgaps
102
+
103
+ # number of visits to clip, default from 1/10th of baseline_v2.0 WFD
104
+ self.nv_clip = nv_clip
105
+
106
+ super().__init__(col=[self.mjd_col, self.filter_col, self.m5_col], **kwargs)
107
+
108
+ def _get_d_t(self, data_slice, f0, f1):
109
+ # select
110
+ idx0 = (data_slice[self.filter_col] == f0) & (data_slice[self.m5_col] > self.mag_lim[f0])
111
+ idx1 = (data_slice[self.filter_col] == f1) & (data_slice[self.m5_col] > self.mag_lim[f1])
112
+
113
+ time_col0 = data_slice[self.mjd_col][idx0]
114
+ time_col1 = data_slice[self.mjd_col][idx1]
115
+
116
+ # time_col0 = time_col0.reshape((len(time_col0), 1))
117
+ # time_col1 = time_col1.reshape((len(time_col1), 1))
118
+
119
+ # calculate time gaps matrix
120
+ # diffmat = np.subtract(time_col0, time_col1.T)
121
+
122
+ if self.allgaps:
123
+ # collect all time gaps
124
+ if f0 == f1:
125
+ time_col0 = time_col0.reshape((len(time_col0), 1))
126
+ time_col1 = time_col1.reshape((len(time_col1), 1))
127
+
128
+ diffmat = np.subtract(time_col0, time_col1.T)
129
+ diffmat = np.abs(diffmat)
130
+ # get only triangle part
131
+ dt_tri = np.tril(diffmat, -1)
132
+ d_t = dt_tri[dt_tri != 0] # flatten lower triangle
133
+ else:
134
+ # d_t = diffmat.flatten()
135
+ dtmax = np.max(self.bins_diff)
136
+ # time gaps window for measure color
137
+ d_t = []
138
+ for time_col in time_col0:
139
+ time_col_in_window = time_col1[
140
+ (time_col1 >= (time_col - dtmax)) & (time_col1 <= (time_col + dtmax))
141
+ ]
142
+
143
+ d_t.append(np.abs(time_col_in_window - time_col))
144
+
145
+ d_t = np.concatenate(d_t) if len(d_t) > 0 else np.array(d_t)
146
+ else:
147
+ # collect only nearest
148
+ if f0 == f1:
149
+ # get diagonal ones nearest nonzero, offset=1
150
+ # d_t = np.diagonal(diffmat, offset=1)
151
+ d_t = np.diff(time_col0)
152
+ else:
153
+ time_col0 = data_slice[self.mjd_col][idx0]
154
+ time_col1 = data_slice[self.mjd_col][idx1]
155
+
156
+ time_col0 = time_col0.reshape((len(time_col0), 1))
157
+ time_col1 = time_col1.reshape((len(time_col1), 1))
158
+
159
+ # calculate time gaps matrix
160
+ diffmat = np.subtract(time_col0, time_col1.T)
161
+ # get tgaps both left and right
162
+ # keep only negative ones
163
+ masked_ar = np.ma.masked_where(
164
+ diffmat >= 0,
165
+ diffmat,
166
+ )
167
+ left_ar = np.max(masked_ar, axis=1)
168
+ d_t_left = -left_ar.data[~left_ar.mask]
169
+
170
+ # keep only positive ones
171
+ masked_ar = np.ma.masked_where(diffmat <= 0, diffmat)
172
+ right_ar = np.min(masked_ar, axis=1)
173
+ d_t_right = right_ar.data[~right_ar.mask]
174
+
175
+ d_t = np.concatenate([d_t_left.flatten(), d_t_right.flatten()])
176
+
177
+ return d_t
178
+
179
+ def run(self, data_slice, slice_point=None):
180
+ # sort the data_slice in order of time.
181
+ data_slice.sort(order=self.mjd_col)
182
+
183
+ fom_dic = {}
184
+ d_t_dic = {}
185
+ for fltpair in self.fltpairs:
186
+ d_t = self._get_d_t(data_slice, fltpair[0], fltpair[1])
187
+ # calculate FoM
188
+ # cut out at average
189
+ # std below
190
+ # FOM = Nv / std
191
+
192
+ if fltpair[0] == fltpair[1]:
193
+ bins = self.bins_same
194
+ else:
195
+ bins = self.bins_diff
196
+ d_t_dic[fltpair] = d_t
197
+
198
+ hist, _ = np.histogram(d_t, bins=bins)
199
+
200
+ if np.any(hist):
201
+ hist_clip = np.clip(hist, a_min=0, a_max=self.nv_clip[fltpair])
202
+ fom = hist.sum() / hist_clip.std()
203
+ else:
204
+ fom = np.nan
205
+ fom_dic[fltpair] = fom
206
+ # print( fltpair, fom)
207
+
208
+ return np.nansum(list(fom_dic.values()))