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,119 @@
1
+ __all__ = ["NoOffset", "OffsetSNR", "BaseOffset"]
2
+
3
+ import numpy as np
4
+
5
+ from ..maf.utils.astrometry_utils import m52snr
6
+
7
+ # from lsst.sims.selfcal.clouds.Arma import ArmaSf, Clouds
8
+
9
+
10
+ class BaseOffset:
11
+ """Base class for how to make offset classes"""
12
+
13
+ def __init__(self, **kwargs):
14
+ self.newkey = "dmag_keyname"
15
+ pass
16
+
17
+ def __call__(self, stars, visit, **kwargs):
18
+ pass
19
+
20
+
21
+ class NoOffset(BaseOffset):
22
+ def __init__(self):
23
+ """Make no changes to the mags"""
24
+ self.newkey = "dmag_zero"
25
+
26
+ def __call__(self, stars, visits, **kwargs):
27
+ dmag = np.zeros(stars.size, dtype=list(zip([self.newkey], [float])))
28
+ return dmag
29
+
30
+
31
+ class OffsetSys(BaseOffset):
32
+ def __init__(self, error_sys=0.003):
33
+ """Systematic error floor for photometry"""
34
+ self.error_sys = error_sys
35
+ self.newkey = "dmag_sys"
36
+
37
+ def __call__(self, stars, visits, **kwargs):
38
+ nstars = np.size(stars)
39
+ dmag = np.random.randn(nstars) * self.error_sys
40
+ return dmag
41
+
42
+
43
+ class OffsetClouds(BaseOffset):
44
+ """Offset based on cloud structure.
45
+ Not used, as not fully implemented in this version (ArmaSf).
46
+ """
47
+
48
+ def __init__(self, sampling=256, fov=3.5):
49
+ self.fov = fov
50
+ self.newkey = "dmag_cloud"
51
+ # self.SF = ArmaSf()
52
+ self.SF = None
53
+ # self.cloud = Clouds()
54
+ self.cloud = None
55
+
56
+ def __call__(self, stars, visits, **kwargs):
57
+ # XXX-Double check extinction is close to the Opsim transparency
58
+ extinc_mags = visits["transparency"]
59
+ if extinc_mags != 0.0:
60
+ sf_theta, sf_sf = self.SF.CloudSf(500.0, 300.0, 5.0, extinc_mags, 0.55)
61
+ # Call the Clouds
62
+ self.cloud.makeCloudImage(sf_theta, sf_sf, extinc_mags, fov=self.fov)
63
+ # Interpolate clouds to correct position.
64
+ # Nearest neighbor for speed?
65
+ nim = self.cloud.cloudimage[0, :].size
66
+ # calc position in cloud image of each star
67
+ starx_interp = (np.degrees(stars["x"]) + self.fov / 2.0) * 3600.0 / self.cloud.pixscale
68
+ stary_interp = (np.degrees(stars["y"]) + self.fov / 2.0) * 3600.0 / self.cloud.pixscale
69
+
70
+ # Round off position and make it an int
71
+ starx_interp = np.round(starx_interp).astype(int)
72
+ stary_interp = np.round(stary_interp).astype(int)
73
+
74
+ # Handle any stars that are out of the field for some reason
75
+ starx_interp[np.where(starx_interp < 0)] = 0
76
+ starx_interp[np.where(starx_interp > nim - 1)] = nim - 1
77
+ stary_interp[np.where(stary_interp < 0)] = 0
78
+ stary_interp[np.where(stary_interp > nim - 1)] = nim - 1
79
+
80
+ dmag = self.cloud.cloudimage[starx_interp, stary_interp]
81
+ else:
82
+ dmag = np.zeros(stars.size)
83
+ return dmag
84
+
85
+
86
+ class OffsetSNR(BaseOffset):
87
+ """Generate offsets based on the 5-sigma limiting depth of an observation
88
+ and the brightness of the star.
89
+
90
+ Note that this takes into account previous offsets that have been applied
91
+ (so run this after things like vignetting).
92
+ """
93
+
94
+ def __init__(self, lsst_filter="r"):
95
+ self.lsst_filter = lsst_filter
96
+ self.newkey = "dmag_snr"
97
+
98
+ def calc_mag_errors(self, magnitudes, m5, err_only=False):
99
+ """ """
100
+ snr = m52snr(magnitudes, m5)
101
+ # via good old https://www.eso.org/~ohainaut/ccd/sn.html
102
+ magnitude_errors = 2.5 * np.log10(1.0 + 1.0 / snr)
103
+ if err_only:
104
+ dmag = magnitude_errors
105
+ else:
106
+ dmag = np.random.randn(len(magnitudes)) * magnitude_errors
107
+ return dmag
108
+
109
+ def __call__(self, stars, visit, dmags=None):
110
+ if dmags is None:
111
+ dmags = {}
112
+ temp_mag = stars[self.lsst_filter + "mag"].copy()
113
+ # calc what magnitude the star has when it hits the silicon.
114
+ # Thus we compute the SNR noise
115
+ # AFTER things like cloud extinction and vignetting.
116
+ for key in list(dmags.keys()):
117
+ temp_mag = temp_mag + dmags[key]
118
+ dmag = self.calc_mag_errors(temp_mag, visit["fiveSigmaDepth"])
119
+ return dmag
@@ -0,0 +1,143 @@
1
+ __all__ = ("LsqrSolver",)
2
+
3
+ import numpy as np
4
+ from scipy.sparse import coo_matrix
5
+ from scipy.sparse.linalg import lsqr
6
+
7
+ # Modified from /astro/store/scratch/tmp/yoachim/Research/LSST/Parallel_Solver
8
+ # and then from https://github.com/lsst-sims/legacy_sims_selfcal
9
+
10
+
11
+ class LsqrSolver:
12
+ """
13
+ Class to solve self-calibration
14
+
15
+ Parameters
16
+ ----------
17
+ observations : `np.array`
18
+ A numpy array of the observations.
19
+ Should have columns id, patch_id, observed_mag, mag_uncert.
20
+ atol : `float`
21
+ Tolerance passed to lsqr.
22
+ btol : `float`
23
+ Tolerance passed to lsqr.
24
+ iter_lim : `int`
25
+ Iteration limit passed to lsqr.
26
+ show : `bool`
27
+ Should the lsqr solver print some iteration logs (False).
28
+ """
29
+
30
+ def __init__(
31
+ self,
32
+ observations,
33
+ atol=1e-8,
34
+ btol=1e-8,
35
+ iter_lim=None,
36
+ show=False,
37
+ ):
38
+ self.atol = atol
39
+ self.btol = btol
40
+ self.iter_lim = iter_lim
41
+ self.observations = observations
42
+ self.show = show
43
+
44
+ def run(self):
45
+ """clean data, solve matrix, write solution out."""
46
+ self.clean_data()
47
+ self.solve_matrix()
48
+
49
+ def clean_data(self):
50
+ """
51
+ Remove observations that can't contribute to a solution.
52
+ Index remaining stars and patches so they are continuous.
53
+ """
54
+ n_start = 1.0
55
+ n_end = 0.0
56
+ while n_start != n_end:
57
+ n_start = self.observations.size
58
+ self.observations.sort(order="id")
59
+ # Remove observations if the star was only observed once
60
+ good = np.where(
61
+ (self.observations["id"] - np.roll(self.observations["id"], 1))
62
+ * (self.observations["id"] - np.roll(self.observations["id"], -1))
63
+ == 0
64
+ )
65
+ self.observations = self.observations[good]
66
+
67
+ # Remove patches with only one star
68
+ self.observations.sort(order="patch_id")
69
+
70
+ good = np.where(
71
+ (self.observations["patch_id"] - np.roll(self.observations["patch_id"], 1))
72
+ * (self.observations["patch_id"] - np.roll(self.observations["patch_id"], -1))
73
+ == 0
74
+ )
75
+ self.observations = self.observations[good]
76
+ n_end = self.observations.size
77
+
78
+ self.observations.sort(order="patch_id")
79
+
80
+ self.patches = np.unique(self.observations["patch_id"])
81
+ n_patches = np.size(self.patches)
82
+ self.n_patches = n_patches
83
+ self.n_patches = n_patches
84
+ patches_index = np.arange(n_patches)
85
+ left = np.searchsorted(self.observations["patch_id"], self.patches)
86
+ right = np.searchsorted(self.observations["patch_id"], self.patches, side="right")
87
+ for i in range(np.size(left)):
88
+ self.observations["patch_id"][left[i] : right[i]] = patches_index[i]
89
+
90
+ # Convert id to continuous running index to keep matrix
91
+ # as small as possible
92
+ self.observations.sort(order="id")
93
+
94
+ self.stars = np.unique(self.observations["id"])
95
+ n_stars = np.size(self.stars)
96
+ self.n_stars = np.size(self.stars)
97
+ stars_index = np.arange(1, n_stars + 1)
98
+ left = np.searchsorted(self.observations["id"], self.stars)
99
+ right = np.searchsorted(self.observations["id"], self.stars, side="right")
100
+ for i in range(np.size(left)):
101
+ self.observations["id"][left[i] : right[i]] = stars_index[i]
102
+
103
+ def solve_matrix(self):
104
+ n_obs = np.size(self.observations)
105
+ # construct sparse matrix
106
+ # A = lil_matrix((nPatches+nStars,np.size(observations['patch_id'])))
107
+ row = np.arange(n_obs)
108
+ row = np.append(row, row)
109
+ col = np.append(
110
+ self.observations["patch_id"],
111
+ self.observations["id"] + np.max(self.observations["patch_id"]),
112
+ )
113
+ # data = np.append(np.ones(nObs),1./observations['mag_uncert'])
114
+ data = 1.0 / self.observations["mag_uncert"]
115
+ data = np.append(data, data)
116
+ # maybe do this in place earlier?
117
+ # then just delete parts of observations earlier to save total memory
118
+ b = self.observations["observed_mag"] / self.observations["mag_uncert"]
119
+
120
+ # blast away data now that we have the matrix constructed
121
+ del self.observations
122
+
123
+ A = coo_matrix((data, (row, col)), shape=(n_obs, self.n_patches + self.n_stars))
124
+ A = A.tocsr()
125
+ # solve Ax = b
126
+ self.solution = lsqr(A, b, show=self.show, atol=self.atol, btol=self.btol, iter_lim=self.iter_lim)
127
+
128
+ def return_solution(self):
129
+ """
130
+ Returns
131
+ -------
132
+ patches, stars: `np.array`, `np.array`
133
+ Two arrays containing patch zeropoints and star best-fit mags.
134
+ """
135
+ patches = np.empty(self.patches.size, dtype=list(zip(["patch_id", "zp"], [int, float])))
136
+ patches["patch_id"] = self.patches
137
+ patches["zp"] = self.solution[0][0 : self.n_patches]
138
+
139
+ stars = np.empty(self.stars.size, dtype=list(zip(["id", "fit_mag"], [int, float])))
140
+ stars["id"] = self.stars # should match the input ID.
141
+ stars["fit_mag"] = self.solution[0][self.n_patches :]
142
+
143
+ return patches, stars
@@ -0,0 +1,42 @@
1
+ __all__ = ("stars_project", "assign_patches")
2
+
3
+ import numpy as np
4
+ from rubin_scheduler.utils import gnomonic_project_toxy
5
+
6
+
7
+ def stars_project(stars, visit):
8
+ """
9
+ Project the stars to x,y plane for a given visit.
10
+ """
11
+ xtemp, ytemp = gnomonic_project_toxy(
12
+ np.radians(stars["ra"]),
13
+ np.radians(stars["decl"]),
14
+ np.radians(visit["ra"]),
15
+ np.radians(visit["dec"]),
16
+ )
17
+ # Rotate the field using the visit rotSkyPos.
18
+ # Hope I got that sign right...
19
+ sin_rot = np.sin(np.radians(visit["rotSkyPos"]))
20
+ cos_rot = np.cos(np.radians(visit["rotSkyPos"]))
21
+ stars["x"] = cos_rot * xtemp + sin_rot * ytemp
22
+ stars["y"] = -1.0 * sin_rot * xtemp + cos_rot * ytemp
23
+
24
+ stars["radius"] = (stars["x"] ** 2 + stars["y"] ** 2) ** 0.5
25
+ return stars
26
+
27
+
28
+ def assign_patches(stars, visit, n_patches=16, radius_fov=1.8):
29
+ """
30
+ Assign PatchIDs to everything.
31
+ Assume that stars have already been projected to x,y
32
+ """
33
+ maxx, maxy = gnomonic_project_toxy(0.0, np.radians(radius_fov), 0.0, 0.0)
34
+ nsides = n_patches**0.5
35
+
36
+ # This should move all coords to 0 < x < nsides-1
37
+ px = np.floor((stars["x"] + maxy) / (2.0 * maxy) * nsides)
38
+ py = np.floor((stars["y"] + maxy) / (2.0 * maxy) * nsides)
39
+
40
+ stars["sub_patch"] = px + py * nsides
41
+ stars["patch_id"] = stars["sub_patch"] + visit["observationId"] * n_patches
42
+ return stars
@@ -0,0 +1,14 @@
1
+ import importlib.util
2
+ import logging
3
+
4
+ from .make_snapshot import *
5
+
6
+ HAVE_LSST_RESOURCES = importlib.util.find_spec("lsst") and importlib.util.find_spec("lsst.resources")
7
+ if HAVE_LSST_RESOURCES:
8
+ from .sim_archive import * # isort:skip
9
+ from .prenight import *
10
+ from .prenightindex import *
11
+ from .vseqarchive import *
12
+ from .vseqmetadata import *
13
+ else:
14
+ logging.error("rubin_sim.sim_archive requires lsst.resources.")
@@ -0,0 +1,65 @@
1
+ import json
2
+ import os
3
+ import re
4
+ import sys
5
+ from functools import lru_cache
6
+
7
+ __all__ = [
8
+ "get_conda_packages",
9
+ ]
10
+
11
+
12
+ @lru_cache(maxsize=1)
13
+ def get_conda_packages() -> dict[str, str]:
14
+ """Get products and their versions from the conda environment.
15
+
16
+ Returns
17
+ -------
18
+ packages : `dict`
19
+ Keys (type `str`) are product names; values (type `str`) are their
20
+ versions.
21
+
22
+ Notes
23
+ -----
24
+ Returns empty result if a conda environment is not in use or can not
25
+ be queried.
26
+ """
27
+ if "CONDA_PREFIX" not in os.environ:
28
+ return {}
29
+
30
+ # conda list is very slow. Ten times faster to scan the directory
31
+ # directly. This will only find conda packages and not pip installed
32
+ # packages.
33
+ meta_path = os.path.join(os.environ["CONDA_PREFIX"], "conda-meta")
34
+
35
+ try:
36
+ filenames = os.scandir(path=meta_path)
37
+ except FileNotFoundError:
38
+ return {}
39
+
40
+ packages = {}
41
+ for filename in filenames:
42
+ if not filename.name.endswith(".json"):
43
+ continue
44
+ with open(filename) as f:
45
+ try:
46
+ data = json.load(f)
47
+ except ValueError:
48
+ continue
49
+ try:
50
+ packages[data["name"]] = data["version"]
51
+ except KeyError:
52
+ continue
53
+
54
+ packages = dict(sorted(packages.items()))
55
+
56
+ # Try to work out the conda environment name and include it as a fake
57
+ # package. The "obvious" way of running "conda info --json" does give
58
+ # access to the active_prefix but takes about 2 seconds to run.
59
+ # As a compromise look for the env name in the path to the python
60
+ # executable
61
+ match = re.search(r"/envs/(.*?)/bin/", sys.executable)
62
+ if match:
63
+ packages["conda_env"] = match.group(1)
64
+
65
+ return packages