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,249 @@
1
+ __all__ = ("GRBTransientMetric",)
2
+
3
+
4
+ import numpy as np
5
+
6
+ import rubin_sim.maf.metrics as metrics
7
+
8
+ # Gamma-ray burst afterglow metric
9
+ # ebellm@caltech.edu
10
+
11
+
12
+ class GRBTransientMetric(metrics.BaseMetric):
13
+ """Evaluate the likelihood of detecting a GRB optical counterpart.
14
+
15
+ Detections for an on-axis GRB afterglows decaying as
16
+ F(t) = F(1min)((t-t0)/1min)^-alpha. No jet break, for now.
17
+
18
+ Derived from TransientMetric, but calculated with reduce functions to
19
+ enable-band specific counts.
20
+ Burst parameters taken from 2011PASP..123.1034J.
21
+
22
+ Simplifications:
23
+ * no color variation or evolution encoded yet.
24
+ * no jet breaks.
25
+ * not treating off-axis events.
26
+
27
+ Parameters
28
+ ----------
29
+ alpha : `float`,
30
+ temporal decay index
31
+ Default = 1.0
32
+ apparent_mag_1min_mean : `float`,
33
+ mean magnitude at 1 minute after burst
34
+ Default = 15.35
35
+ apparent_mag_1min_sigma : `float`,
36
+ std of magnitudes at 1 minute after burst
37
+ Default = 1.59
38
+ trans_duration : `float`, optional
39
+ How long the transient lasts (days). Default 10.
40
+ survey_duration : `float`, optional
41
+ Length of survey (years).
42
+ Default 10.
43
+ survey_start : `float`, optional
44
+ MJD for the survey start date.
45
+ Default None (uses the time of the first observation).
46
+ detect_m5_plus : `float`, optional
47
+ An observation will be used if the light curve magnitude is brighter
48
+ than m5+detect_m5_plus.
49
+ Default 0.
50
+ n_per_filter : `int`, optional
51
+ Number of separate detections of the light curve above the
52
+ detect_m5_plus theshold (in a single filter) for the light curve
53
+ to be counted.
54
+ Default 1.
55
+ n_filters : `int`, optional
56
+ Number of filters that need to be observed n_per_filter times,
57
+ with differences min_delta_mag,
58
+ for an object to be counted as detected.
59
+ Default 1.
60
+ min_delta_mag : `float`, optional
61
+ magnitude difference between detections in the same filter required
62
+ for second+ detection to be counted.
63
+ For example, if min_delta_mag = 0.1 mag and two consecutive observations
64
+ differ only by 0.05 mag, those two detections will only count as one.
65
+ (Better would be a SNR-based discrimination of lightcurve change.)
66
+ Default 0.
67
+ n_phase_check : `int`, optional
68
+ Sets the number of phases that should be checked.
69
+ One can imagine pathological cadences where many objects pass the
70
+ detection criteria, but would not if the observations were offset
71
+ by a phase-shift.
72
+ Default 1.
73
+ """
74
+
75
+ def __init__(
76
+ self,
77
+ alpha=1,
78
+ apparent_mag_1min_mean=15.35,
79
+ apparent_mag_1min_sigma=1.59,
80
+ metric_name="GRBTransientMetric",
81
+ mjd_col="expMJD",
82
+ m5_col="fiveSigmaDepth",
83
+ filter_col="band",
84
+ trans_duration=10.0,
85
+ survey_duration=10.0,
86
+ survey_start=None,
87
+ detect_m5_plus=0.0,
88
+ n_per_filter=1,
89
+ n_filters=1,
90
+ min_delta_mag=0.0,
91
+ n_phase_check=1,
92
+ **kwargs,
93
+ ):
94
+ self.mjd_col = mjd_col
95
+ self.m5_col = m5_col
96
+ self.filter_col = filter_col
97
+ super(GRBTransientMetric, self).__init__(
98
+ col=[self.mjd_col, self.m5_col, self.filter_col],
99
+ units="Fraction Detected",
100
+ metric_name=metric_name,
101
+ **kwargs,
102
+ )
103
+ self.alpha = alpha
104
+ self.apparent_mag_1min_mean = apparent_mag_1min_mean
105
+ self.apparent_mag_1min_sigma = apparent_mag_1min_sigma
106
+ self.trans_duration = trans_duration
107
+ self.survey_duration = survey_duration
108
+ self.survey_start = survey_start
109
+ self.detect_m5_plus = detect_m5_plus
110
+ self.n_per_filter = n_per_filter
111
+ self.n_filters = n_filters
112
+ self.min_delta_mag = min_delta_mag
113
+ self.n_phase_check = n_phase_check
114
+ self.peak_time = 0.0
115
+ self.reduce_order = {
116
+ "Bandu": 0,
117
+ "Bandg": 1,
118
+ "Bandr": 2,
119
+ "Bandi": 3,
120
+ "Bandz": 4,
121
+ "Bandy": 5,
122
+ "Band1FiltAvg": 6,
123
+ "BandanyNfilters": 7,
124
+ }
125
+
126
+ def light_curve(self, time, filters):
127
+ """
128
+ given the times and filters of an observation, return the magnitudes.
129
+ """
130
+
131
+ lc_mags = np.zeros(time.size, dtype=float)
132
+
133
+ decline = np.where(time > self.peak_time)
134
+ apparent_mag_1min = np.random.randn() * self.apparent_mag_1min_sigma + self.apparent_mag_1min_mean
135
+ lc_mags[decline] += apparent_mag_1min + self.alpha * 2.5 * np.log10(
136
+ (time[decline] - self.peak_time) * 24.0 * 60.0
137
+ )
138
+
139
+ # for key in self.peaks.keys():
140
+ # fMatch = np.where(filters == key)
141
+ # lc_mags[fMatch] += self.peaks[key]
142
+
143
+ return lc_mags
144
+
145
+ def run(self, data_slice, slice_point=None):
146
+ """
147
+ Calculate the detectability of a transient with the
148
+ specified lightcurve.
149
+ """
150
+ # Total number of transients that could go off back-to-back
151
+ n_trans_max = np.floor(self.survey_duration / (self.trans_duration / 365.25))
152
+ tshifts = np.arange(self.n_phase_check) * self.trans_duration / float(self.n_phase_check)
153
+ n_trans_max = 0
154
+ for tshift in tshifts:
155
+ # Compute the total number of back-to-back transients
156
+ # are possible to detect
157
+ # given the survey duration and the transient duration.
158
+ n_trans_max += np.floor(self.survey_duration / (self.trans_duration / 365.25))
159
+ if tshift != 0:
160
+ n_trans_max -= 1
161
+ if self.survey_start is None:
162
+ survey_start = data_slice[self.mjd_col].min()
163
+ time = (data_slice[self.mjd_col] - survey_start + tshift) % self.trans_duration
164
+
165
+ # Which lightcurve does each point belong to
166
+ lc_number = np.floor((data_slice[self.mjd_col] - survey_start) / self.trans_duration)
167
+
168
+ lc_mags = self.light_curve(time, data_slice[self.filter_col])
169
+
170
+ # How many criteria needs to be passed
171
+ detect_thresh = 0
172
+
173
+ # Flag points that are above the SNR limit
174
+ detected = np.zeros(data_slice.size, dtype=int)
175
+ detected[np.where(lc_mags < data_slice[self.m5_col] + self.detect_m5_plus)] += 1
176
+
177
+ bandcounter = {
178
+ "u": 0,
179
+ "g": 0,
180
+ "r": 0,
181
+ "i": 0,
182
+ "z": 0,
183
+ "y": 0,
184
+ "any": 0,
185
+ } # define zeroed out counter
186
+
187
+ # make sure things are sorted by time
188
+ ord = np.argsort(data_slice[self.mjd_col])
189
+ data_slice = data_slice[ord]
190
+ detected = detected[ord]
191
+ lc_number = lc_number[ord]
192
+ lc_mags = lc_mags[ord]
193
+ ulc_number = np.unique(lc_number)
194
+ left = np.searchsorted(lc_number, ulc_number)
195
+ right = np.searchsorted(lc_number, ulc_number, side="right")
196
+ detect_thresh += self.n_filters
197
+
198
+ # iterate over the lightcurves
199
+ for le, ri in zip(left, right):
200
+ wdet = np.where(detected[le:ri] > 0)
201
+ ufilters = np.unique(data_slice[self.filter_col][le:ri][wdet])
202
+ nfilts_lci = 0
203
+ for filt_name in ufilters:
204
+ wdetfilt = np.where((data_slice[self.filter_col][le:ri] == filt_name) & detected[le:ri])
205
+
206
+ lc_points = lc_mags[le:ri][wdetfilt]
207
+ dlc = np.abs(np.diff(lc_points))
208
+
209
+ # number of detections in band, requiring that for
210
+ # nPerFilter > 1 that points have more than minDeltaMag
211
+ # change
212
+ nbanddet = np.sum(dlc > self.min_delta_mag) + 1
213
+ if nbanddet >= self.n_per_filter:
214
+ bandcounter[filt_name] += 1
215
+ nfilts_lci += 1
216
+ if nfilts_lci >= self.n_filters:
217
+ bandcounter["any"] += 1
218
+
219
+ bandfraction = {}
220
+ for band in bandcounter.keys():
221
+ bandfraction[band] = float(bandcounter[band]) / n_trans_max
222
+
223
+ return bandfraction
224
+
225
+ def reduce_band1_filt_avg(self, bandfraction):
226
+ "Average fraction detected in single filter"
227
+ return np.mean(list(bandfraction.values()))
228
+
229
+ def reduce_bandany_nfilters(self, bandfraction):
230
+ "Fraction of events detected in Nfilters or more"
231
+ return bandfraction["any"]
232
+
233
+ def reduce_bandu(self, bandfraction):
234
+ return bandfraction["u"]
235
+
236
+ def reduce_bandg(self, bandfraction):
237
+ return bandfraction["g"]
238
+
239
+ def reduce_bandr(self, bandfraction):
240
+ return bandfraction["r"]
241
+
242
+ def reduce_bandi(self, bandfraction):
243
+ return bandfraction["i"]
244
+
245
+ def reduce_bandz(self, bandfraction):
246
+ return bandfraction["z"]
247
+
248
+ def reduce_bandy(self, bandfraction):
249
+ return bandfraction["y"]
@@ -0,0 +1,72 @@
1
+ # Metric for kilonova detectability based on GW170817 SED used in Scolnic et
2
+ # al. 2018 and Setzer et al. 2019. The chosen detection criteria are related
3
+ # to those used in the LSST DESC white paper detectability work and the two
4
+ # references above.
5
+ #
6
+ # Contact for this code:
7
+ # christian.setzer@fysik.su.se
8
+ from pathlib import Path
9
+
10
+ from .transient_ascii_sed_metric import TransientAsciiSEDMetric
11
+
12
+ __all__ = ("GW170817DetMetric",)
13
+ base_path = Path(__file__).parent
14
+
15
+
16
+ class GW170817DetMetric(TransientAsciiSEDMetric):
17
+ """
18
+ Wrapper metric class for GW170817-like kilonovae based on the
19
+ TransientAsciiSEDMetric. Defaults are set to those corresponding to similar
20
+ detection criteria used in Scolnic et al. 2018 and Setzer et al. 2019.
21
+ However, due to the simplified nature of transient distribution for
22
+ computing this metric, the criteria have been altered to only include
23
+ criteria two and three. The chosen redshift is at the approximate mean
24
+ redshift of the detected cosmological redshift distribution shown in
25
+ Setzer et al. 2019.
26
+
27
+ Parameters
28
+ -----------
29
+ ascii_file : `str`, optional
30
+ The ascii file containing the inputs for the SED. The file must
31
+ contain three columns - ['phase', 'wave', 'flux'] -
32
+ of phase/epoch (in days), wavelength (Angstroms), and
33
+ flux (ergs/s/Angstrom). Default, data provided with sims_maf_contrib.
34
+ metric_name : `str`, optional
35
+ Name of the metric, can be overwritten by user or child metric.
36
+ z : `float`, optional
37
+ Cosmological redshift at which to consider observations of the
38
+ tranisent SED. Default 0.08.
39
+ num_filters : `int`, optional
40
+ Number of filters that need to be observed for an object to be
41
+ counted as detected. Default 2. (if num_per_lightcurve is 0, then
42
+ this will be reset to 0).
43
+ filter_time : `float`, optional
44
+ The time within which observations in at least num_filters are
45
+ required (in days). Default 25.0 days.
46
+ num_phases_to_run : `int`, optional
47
+ Sets the number of phases that should be checked.
48
+ One can imagine pathological cadences where many objects pass the
49
+ detection criteria, but would not if the observations were offset
50
+ by a phase-shift. Default 5.
51
+ """
52
+
53
+ def __init__(
54
+ self,
55
+ ascii_file=(base_path / "../data/DECAMGemini_SED.txt").resolve(),
56
+ metric_name="GW170817DetMetric",
57
+ z=0.08,
58
+ num_filters=2,
59
+ filter_time=25.0,
60
+ num_phases_to_run=5,
61
+ **kwargs,
62
+ ):
63
+ """"""
64
+ super(GW170817DetMetric, self).__init__(
65
+ ascii_file=ascii_file,
66
+ metric_name=metric_name,
67
+ z=z,
68
+ num_filters=num_filters,
69
+ filter_time=filter_time,
70
+ num_phases_to_run=num_phases_to_run,
71
+ **kwargs,
72
+ )
@@ -0,0 +1,68 @@
1
+ # Example for IntervalsBetweenObsMetric
2
+ # Somayeh Khakpash - Lehigh University
3
+ # Last edited : 10/21/2020
4
+ # Calculates statistics (mean or median or standard deviation) of intervals
5
+ # between observations during simultaneous windows/Inter-seasonal gap of
6
+ # another survey.
7
+ # SurveyIntervals is the list of the survey observing window/Inter-seasonal
8
+ # gap intervals. It should be in the format:
9
+ # SurveyIntervals = [ [YYYY-MM-DD, YYYY-MM-DD] , [YYYY-MM-DD, YYYY-MM-DD] ,
10
+ # ... , [YYYY-MM-DD, YYYY-MM-DD] ]
11
+ # We are interested in calculating this metric in each of the LSST passbands.
12
+ # The difference between this metric and the VisitGapMetric metric is that
13
+ # VisitGapMetric calculates reduceFunc of gaps between observations of a
14
+ # data_slice throughout the whole
15
+ # baseline, but IntervalsBetweenObsMetric calculates the gaps between
16
+ # observations during another survey observing window.
17
+ # This metric combined with surveys footprint
18
+ # overlap can determine how many often another survey footprint is
19
+ # observed by LSST during specific time intervals.
20
+ __all__ = ("IntervalsBetweenObsMetric",)
21
+
22
+ import numpy as np
23
+ from astropy.time import Time
24
+
25
+ from rubin_sim.maf.metrics import BaseMetric
26
+
27
+
28
+ class IntervalsBetweenObsMetric(BaseMetric):
29
+ def __init__(
30
+ self,
31
+ survey_intervals,
32
+ stat,
33
+ metric_name="IntervalsBetweenObsMetric",
34
+ time_col="observationStartMJD",
35
+ **kwargs,
36
+ ):
37
+ self.time_col = time_col
38
+ self.metric_name = metric_name
39
+ self.survey_intervals = survey_intervals
40
+ self.stat = stat
41
+ super(IntervalsBetweenObsMetric, self).__init__(col=time_col, metric_name=metric_name, **kwargs)
42
+
43
+ def run(self, data_slice, slice_point=None):
44
+ data_slice.sort(order=self.time_col)
45
+ obs_diff = []
46
+
47
+ for interval in self.survey_intervals:
48
+ start_interval = Time(interval[0] + " 00:00:00")
49
+ end_interval = Time(interval[1] + " 00:00:00")
50
+ index = data_slice[self.time_col][
51
+ np.where(
52
+ (data_slice[self.time_col] > start_interval.mjd)
53
+ & (data_slice[self.time_col] < end_interval.mjd)
54
+ )[0]
55
+ ]
56
+ obs_diff_per_interval = np.diff(index)
57
+ obs_diff = obs_diff + obs_diff_per_interval.tolist()
58
+
59
+ if self.stat == "mean":
60
+ result = np.mean(obs_diff)
61
+
62
+ elif self.stat == "median":
63
+ result = np.median(obs_diff)
64
+
65
+ elif self.stat == "std":
66
+ result = np.std(obs_diff)
67
+
68
+ return result