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,156 @@
1
+ # Example for TripletMetric
2
+ # Mike Lund - Vanderbilt University
3
+ # mike.lund@gmail.com
4
+ # Last edited 9/6/2014
5
+ # Motivation: The detection of nonperiodic transient events can be thought of
6
+ # as most simply being accomplished by a set of three observations,
7
+ # one before the event occurs, a second after the event has begun,
8
+ # and a third to confirm the event is real.
9
+ # This metric identifies the number of triplets that will occur.
10
+ # DelMin and DelMax set the smallest and largest intervals that can occur
11
+ # between the first and second point and between the second and third point.
12
+ # This can be set to reflect the timescales for various events.
13
+ # RatioMax and RatioMin set constraints on how similar the two intervals
14
+ # must be. RatioMin can never be less than 1.
15
+
16
+ __all__ = ("TripletMetric", "TripletBandMetric")
17
+
18
+ import numpy as np
19
+
20
+ from rubin_sim.maf.metrics import BaseMetric
21
+
22
+
23
+ class TripletMetric(BaseMetric):
24
+ """Find the number of 'triplets' of three images taken in any band,
25
+ based on user-selected minimum and maximum intervals (in hours),
26
+ as well as constraining the ratio of the two exposures intervals.
27
+ Triplets are not required to be consecutive observations and
28
+ may be overlapping.
29
+ """
30
+
31
+ def __init__(self, time_col="expMJD", **kwargs):
32
+ self.time_col = time_col
33
+ self.delmin = kwargs.pop("DelMin", 1) / 24.0 # convert minutes to hours
34
+ self.delmax = kwargs.pop("DelMax", 12) / 24.0 # convert minutes to hours
35
+ self.ratiomax = kwargs.pop("RatioMax", 1000)
36
+ self.ratiomin = kwargs.pop("RatioMin", 1)
37
+ super(TripletMetric, self).__init__(col=[self.time_col], **kwargs)
38
+
39
+ def run(self, data_slice, slice_point=None):
40
+ times = data_slice[self.time_col]
41
+ times = times - 49378 # change times to smaller numbers
42
+ delmax = self.delmax
43
+ delmin = self.delmin
44
+ total = 0
45
+ # iterate over every exposure time
46
+ for counter, time in enumerate(times):
47
+ # calculate the window to look for all possible second points in
48
+ minmax = [time + delmin, time + delmax]
49
+ index2 = np.where((minmax[0] < times) & (times < minmax[1]))[0]
50
+ # iterate over every middle exposure
51
+ for middleindex in index2:
52
+ timeb = times[middleindex]
53
+ # calculate the window to look for all possible third points
54
+ minmax2 = [timeb + delmin, timeb + delmax]
55
+ index3 = np.where((times > minmax2[0]) & (times < minmax2[1]))[0]
56
+ newadd = np.size(index3)
57
+ total = total + newadd # add all triplets with same
58
+ # first two observations to total
59
+ return total
60
+
61
+
62
+ class TripletBandMetric(BaseMetric):
63
+ """Find the number of 'triplets' of three images taken in the same band,
64
+ based on user-selected minimum and maximum intervals (in hours),
65
+ as well as constraining the ratio of the two exposures intervals.
66
+ Triplets are not required to be consecutive observations and may be
67
+ overlapping.
68
+ """
69
+
70
+ def __init__(self, time_col="expMJD", filter_col="filter", **kwargs):
71
+ self.time_col = time_col
72
+ self.filter_col = filter_col
73
+ self.delmin = kwargs.pop("DelMin", 1) / 24.0
74
+ self.delmax = kwargs.pop("DelMax", 12) / 24.0
75
+ self.ratiomax = kwargs.pop("RatioMax", 1000)
76
+ self.ratiomin = kwargs.pop("RatioMin", 1)
77
+ super(TripletBandMetric, self).__init__(col=[self.time_col, self.filter_col], **kwargs)
78
+ self.reduce_order = {
79
+ "Bandu": 0,
80
+ "Bandg": 1,
81
+ "Bandr": 2,
82
+ "Bandi": 3,
83
+ "Bandz": 4,
84
+ "Bandy": 5,
85
+ }
86
+
87
+ def run(self, data_slice, slice_point=None):
88
+ times = data_slice[self.time_col]
89
+ times = times - 49378 # change times to smaller numbers
90
+ bands = data_slice[self.filter_col]
91
+ bandset = ["u", "g", "r", "i", "z", "y"] # list of possible bands
92
+ timedict = {}
93
+ delmax = self.delmax
94
+ delmin = self.delmin
95
+ ratiomax = self.ratiomax
96
+ ratiomin = self.ratiomin
97
+ bandcounter = {
98
+ "u": 0,
99
+ "g": 0,
100
+ "r": 0,
101
+ "i": 0,
102
+ "z": 0,
103
+ "y": 0,
104
+ } # define zeroed out counter
105
+ # iterate over each bandpass
106
+ for band in bandset:
107
+ indexlist = np.where(band == bands)
108
+ timedict[band] = times[indexlist]
109
+ # create a data set of all exposures for a single band
110
+ timeband = timedict[band]
111
+ # iterate over every exposure time
112
+ for counter, time in enumerate(timeband):
113
+ # calculate the window to look for all possible second points
114
+ minmax = [time + delmin, time + delmax]
115
+ index2 = np.where((minmax[0] < timeband) & (timeband < minmax[1]))[0]
116
+ # iterate over every middle exposure
117
+ for middleindex in index2:
118
+ timeb = timeband[middleindex]
119
+ # calculate the window to look for all
120
+ # possible third points
121
+ minmax2 = [timeb + delmin, timeb + delmax]
122
+ index3 = np.where((timeband > minmax2[0]) & (timeband < minmax2[1]))[0]
123
+ # iterate over last exposure of triplet
124
+ for lastindex in index3:
125
+ timec = timeband[lastindex]
126
+ # calculate intervals for T1 to T2 and T2 to T3,
127
+ # and take ratio
128
+ delt1 = timeb - time
129
+ delt2 = timec - timeb
130
+ ratio = np.max([delt1, delt2]) / np.min([delt1, delt2])
131
+ # check if ratio is within restrictions
132
+ # (ratio should never be < 1 )
133
+ if ratiomin < ratio < ratiomax:
134
+ bandcounter[band] = bandcounter[band] + 1
135
+ return bandcounter
136
+
137
+ def reduce_bandall(self, bandcounter):
138
+ return np.sum(list(bandcounter.values()))
139
+
140
+ def reduce_bandu(self, bandcounter):
141
+ return bandcounter["u"]
142
+
143
+ def reduce_bandg(self, bandcounter):
144
+ return bandcounter["g"]
145
+
146
+ def reduce_bandr(self, bandcounter):
147
+ return bandcounter["r"]
148
+
149
+ def reduce_bandi(self, bandcounter):
150
+ return bandcounter["i"]
151
+
152
+ def reduce_bandz(self, bandcounter):
153
+ return bandcounter["z"]
154
+
155
+ def reduce_bandy(self, bandcounter):
156
+ return bandcounter["y"]
@@ -0,0 +1,157 @@
1
+ # Variability Depth Metric
2
+ # Keaton Bell (keatonb@astro.as.utexas.edu)
3
+
4
+ __all__ = ("VarDepth",)
5
+
6
+ import numpy as np
7
+ from scipy.interpolate import UnivariateSpline
8
+ from scipy.stats import chi2
9
+
10
+ from rubin_sim.maf.metrics import BaseMetric
11
+
12
+
13
+ class VarDepth(BaseMetric):
14
+ """Calculate the survey depth that a variable star can be
15
+ reliably identified.
16
+
17
+ Parameters
18
+ ----------
19
+ completeness : `float`, opt
20
+ Fractional desired completeness of recovered variable sample.
21
+ contamination : `float`, opt
22
+ Fractional allowed incompleteness of recovered nonvariables.
23
+ numruns : `int`, opt
24
+ Number of simulated realizations of noise.
25
+ Most computationally expensive part of metric.
26
+ signal : `float`, opt
27
+ Sqrt total pulsational power meant to be recovered.
28
+ magres : `float`, opt
29
+ desired resolution of variability depth result.
30
+ """
31
+
32
+ def __init__(
33
+ self,
34
+ m5_col="fiveSigmaDepth",
35
+ metric_name="variability depth",
36
+ completeness=0.95,
37
+ contamination=0.05,
38
+ numruns=10000,
39
+ signal=0.01,
40
+ magres=0.01,
41
+ **kwargs,
42
+ ):
43
+ self.m5col = m5_col
44
+ self.completeness = completeness
45
+ self.contamination = contamination
46
+ self.numruns = numruns
47
+ self.signal = signal
48
+ self.magres = magres
49
+ super(VarDepth, self).__init__(col=m5_col, metric_name=metric_name, **kwargs)
50
+
51
+ def run(self, data_slice, slice_point=None):
52
+ # Get the visit information
53
+ m5 = data_slice[self.m5col]
54
+ # Number of visits
55
+ N = len(m5)
56
+
57
+ # magnitudes to be sampled
58
+ mag = np.arange(16, np.mean(m5), 0.5)
59
+ # hold the distance between the completeness and contamination goals.
60
+ res = np.zeros(mag.shape)
61
+ # make them nans for now
62
+ res[:] = np.nan
63
+
64
+ # hold the measured noise-only variances
65
+ noiseonlyvar = np.zeros(self.numruns)
66
+
67
+ # Calculate the variance at a reference magnitude and scale from that
68
+ m0 = 20.0
69
+ sigmaref = 0.2 * (10.0 ** (-0.2 * m5)) * (10.0 ** (0.2 * m0))
70
+
71
+ # run the simulations
72
+ # Simulate the measured noise-only variances at a reference magnitude
73
+ for i in np.arange(self.numruns):
74
+ # random realization of the Gaussian error distributions
75
+ scatter = np.random.randn(N) * sigmaref
76
+ noiseonlyvar[i] = np.var(scatter) # store the noise-only variance
77
+
78
+ # Since we are treating the underlying signal being representable by a
79
+ # fixed-width gaussian, its variance pdf is a Chi-squared distribution
80
+ # with the degrees of freedom=visits. Since variances add, the variance
81
+ # pdfs convolve. The cumulative distribution function of the sum of two
82
+ # random deviates is the convolution of one pdf with a cdf.
83
+
84
+ # We'll consider the cdf of the noise-only variances
85
+ # because it's easier to interpolate
86
+ noisesorted = np.sort(noiseonlyvar)
87
+ # linear interpolation
88
+ interpnoisecdf = UnivariateSpline(
89
+ noisesorted, np.arange(self.numruns) / float(self.numruns), k=1, s=0
90
+ )
91
+
92
+ # We need a binned, signal-only variance probability
93
+ # distribution function for numerical convolution
94
+ numsignalsamples = 100
95
+ xsig = np.linspace(chi2.ppf(0.001, N), chi2.ppf(0.999, N), numsignalsamples)
96
+ signalpdf = chi2.pdf(xsig, N)
97
+ # correct x to the proper variance scale
98
+ xsig = (self.signal**2.0) * xsig / N
99
+ pdfstepsize = xsig[1] - xsig[0]
100
+ # Since everything is going to use this stepsize down the line,
101
+ # normalize so the pdf integrates to 1 when summed
102
+ # (no factor of stepsize needed)
103
+ signalpdf /= np.sum(signalpdf)
104
+
105
+ # run through the sample magnitudes, calculate distance between cont
106
+ # and comp thresholds.
107
+ # run until solution found.
108
+ solutionfound = False
109
+
110
+ for i, mref in enumerate(mag):
111
+ # i counts and mref is the currently sampled magnitude
112
+ # Scale factor from m0
113
+ scalefact = 10.0 ** (0.4 * (mref - m0))
114
+
115
+ # Calculate the desired contamination threshold
116
+ contthresh = np.percentile(noiseonlyvar, 100.0 - 100.0 * self.contamination) * scalefact
117
+
118
+ # Realize the noise CDF at the required stepsize
119
+ xnoise = np.arange(noisesorted[0] * scalefact, noisesorted[-1] * scalefact, pdfstepsize)
120
+
121
+ # Only do calculation if near the solution:
122
+ if (len(xnoise) > numsignalsamples / 10) and (not solutionfound):
123
+ noisecdf = interpnoisecdf(xnoise / scalefact)
124
+ # turn into a noise pdf
125
+ noisepdf = noisecdf[1:] - noisecdf[:-1]
126
+ noisepdf /= np.sum(noisepdf)
127
+ # from cdf to pdf conversion
128
+ xnoise = (xnoise[1:] + xnoise[:-1]) / 2.0
129
+
130
+ # calculate and plot the convolution =
131
+ # signal+noise variance dist.
132
+ convolution = 0
133
+ if len(noisepdf) > len(signalpdf):
134
+ convolution = np.convolve(noisepdf, signalpdf)
135
+ else:
136
+ convolution = np.convolve(signalpdf, noisepdf)
137
+ xconvolved = xsig[0] + xnoise[0] + np.arange(len(convolution)) * pdfstepsize
138
+
139
+ # calculate the completeness threshold
140
+ combinedcdf = np.cumsum(convolution)
141
+ findcompthresh = UnivariateSpline(combinedcdf, xconvolved, k=1, s=0)
142
+ compthresh = findcompthresh(1.0 - self.completeness)
143
+
144
+ res[i] = compthresh - contthresh
145
+ if res[i] < 0:
146
+ solutionfound = True
147
+
148
+ # interpolate for where the thresholds coincide
149
+ # print res
150
+ if np.sum(np.isfinite(res)) > 1:
151
+ f1 = UnivariateSpline(mag[np.isfinite(res)], res[np.isfinite(res)], k=1, s=0)
152
+ # sample the magnitude range at given resolution
153
+ magsamples = np.arange(16, np.mean(m5), self.magres)
154
+ vardepth = magsamples[np.argmin(np.abs(f1(magsamples)))]
155
+ return vardepth
156
+ else:
157
+ return min(mag) - 1