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,105 @@
1
+ """Sets of metrics to look at impact of cadence on science"""
2
+
3
+ __all__ = ("phaseGap",)
4
+
5
+ import rubin_sim.maf.metric_bundles as mb
6
+ import rubin_sim.maf.metrics as metrics
7
+ import rubin_sim.maf.plots as plots
8
+ import rubin_sim.maf.slicers as slicers
9
+
10
+ from .col_map_dict import col_map_dict
11
+ from .common import combine_info_labels, standard_summary
12
+
13
+
14
+ def phaseGap(
15
+ colmap=None,
16
+ runName="opsim",
17
+ nside=64,
18
+ extraSql=None,
19
+ extraInfoLabel=None,
20
+ ):
21
+ """Generate a set of statistics about period coverage and phase gaps.
22
+
23
+ Parameters
24
+ ----------
25
+ colmap : `dict` or None, optional
26
+ A dictionary with a mapping of column names.
27
+ runName : `str`, optional
28
+ The name of the simulated survey.
29
+ nside : `int`, optional
30
+ Nside for the healpix slicer.
31
+ extraSql : `str` or None, optional
32
+ Additional sql constraint to apply to all metrics.
33
+ extraInfoLabel : `str` or None, optional
34
+ Additional info_label to apply to all results.
35
+
36
+ Returns
37
+ -------
38
+ metric_bundleDict : `dict` of `maf.MetricBundle`
39
+ """
40
+
41
+ if colmap is None:
42
+ colmap = col_map_dict()
43
+
44
+ info_label = extraInfoLabel
45
+ if extraSql is not None and len(extraSql) > 0:
46
+ if info_label is None:
47
+ info_label = extraSql
48
+
49
+ raCol = colmap["ra"]
50
+ decCol = colmap["dec"]
51
+ degrees = colmap["raDecDeg"]
52
+
53
+ bundleList = []
54
+ standardStats = standard_summary()
55
+ subsetPlots = [plots.HealpixSkyMap(), plots.HealpixHistogram()]
56
+
57
+ slicer = slicers.HealpixSlicer(nside=nside, lat_col=decCol, lon_col=raCol, lat_lon_deg=degrees)
58
+
59
+ # largest phase gap for periods
60
+ periods = [0.1, 1.0, 10.0, 100.0]
61
+ sqls = [
62
+ "filter='u'",
63
+ "filter='r'",
64
+ "filter='g' or filter='r' or filter='i' or filter='z'",
65
+ "",
66
+ ]
67
+ filter_names = ["u", "r", "griz", "all"]
68
+ info_labels = filter_names
69
+ if info_label is not None:
70
+ info_labels = [combine_info_labels(m, info_label) for m in info_labels]
71
+ if extraSql is not None and len(extraSql) > 0:
72
+ for sql in sqls:
73
+ sqls[sql] = "(%s) and (%s)" % (sqls[sql], extraSql)
74
+
75
+ for sql, md, f in zip(sqls, info_labels, filter_names):
76
+ for period in periods:
77
+ displayDict = {
78
+ "group": "PhaseGap",
79
+ "subgroup": "Filter %s: Period %.2f days" % (f, period),
80
+ "caption": "Maximum phase gap, given a period of %.2f days." % period,
81
+ }
82
+ metric = metrics.PhaseGapMetric(
83
+ nPeriods=1,
84
+ periodMin=period,
85
+ periodMax=period,
86
+ nVisitsMin=5,
87
+ metric_name="PhaseGap %.1f day" % period,
88
+ )
89
+ metric.reduceFuncs = {metric.reduceFuncs["reduceLargestGap"]}
90
+ metric.reduceOrder = {0}
91
+ bundle = mb.MetricBundle(
92
+ metric,
93
+ slicer,
94
+ constraint=sql,
95
+ info_label=md,
96
+ display_dict=displayDict,
97
+ summary_metrics=standardStats,
98
+ plot_funcs=subsetPlots,
99
+ )
100
+ bundleList.append(bundle)
101
+
102
+ # Set the run_name for all bundles and return the bundleDict.
103
+ for b in bundleList:
104
+ b.set_run_name(runName)
105
+ return mb.make_bundles_dict_from_list(bundleList)
@@ -0,0 +1,485 @@
1
+ """Sets of metrics to look at general sky coverage -
2
+ nvisits/coadded depth/Teff.
3
+ """
4
+
5
+ __all__ = ("nvisitsM5Maps", "tEffMetrics", "nvisitsPerNight", "nvisitsPerSubset")
6
+
7
+ import copy
8
+
9
+ import numpy as np
10
+
11
+ import rubin_sim.maf.metric_bundles as mb
12
+ import rubin_sim.maf.metrics as metrics
13
+ import rubin_sim.maf.slicers as slicers
14
+ import rubin_sim.maf.stackers as stackers
15
+ import rubin_sim.maf.utils as mafUtils
16
+
17
+ from .col_map_dict import col_map_dict
18
+ from .common import filter_list, standard_summary
19
+
20
+
21
+ def nvisitsM5Maps(
22
+ colmap=None,
23
+ runName="opsim",
24
+ extraSql=None,
25
+ extraInfoLabel=None,
26
+ slicer=None,
27
+ runLength=10.0,
28
+ ):
29
+ """Generate maps of the number of visits and coadded depth
30
+ (with and without dust extinction) in all bands and per filter.
31
+
32
+ Parameters
33
+ ----------
34
+ colmap : `dict`, optional
35
+ A dictionary with a mapping of column names.
36
+ runName : `str`, optional
37
+ The name of the simulated survey.
38
+ extraSql : `str`, optional
39
+ Additional constraint to add to any sql constraints.
40
+ extraInfoLabel : `str`, optional
41
+ Additional info_label to add before any below (i.e. "WFD").
42
+ slicer : `rubin_sim.maf.slicer` or None, optional
43
+ Optionally, use something other than an nside=64 healpix slicer
44
+ runLength : `float`, optional
45
+ Length of the simulated survey, for scaling values for the plot limits.
46
+
47
+ Returns
48
+ -------
49
+ metric_bundleDict : `dict` of `maf.MetricBundle`
50
+ """
51
+ if colmap is None:
52
+ colmap = col_map_dict()
53
+ bundleList = []
54
+
55
+ subgroup = extraInfoLabel
56
+ if subgroup is None:
57
+ subgroup = "All visits"
58
+
59
+ raCol = colmap["ra"]
60
+ decCol = colmap["dec"]
61
+ degrees = colmap["raDecDeg"]
62
+ # Set up basic all and per filter sql constraints.
63
+ filterlist, colors, orders, sqls, info_label = filter_list(
64
+ all=True, extra_sql=extraSql, extra_info_label=extraInfoLabel
65
+ )
66
+ # Set up some values to make nicer looking plots.
67
+ benchmarkVals = mafUtils.scale_benchmarks(runLength, benchmark="design")
68
+ # Check that nvisits is not set to zero (for very short run length).
69
+ for f in benchmarkVals["nvisits"]:
70
+ if benchmarkVals["nvisits"][f] == 0:
71
+ print("Updating benchmark nvisits value in %s to be nonzero" % (f))
72
+ benchmarkVals["nvisits"][f] = 1
73
+ benchmarkVals["coaddedDepth"] = mafUtils.calc_coadded_depth(
74
+ benchmarkVals["nvisits"], benchmarkVals["singleVisitDepth"]
75
+ )
76
+ # Scale the n_visit ranges for the runLength.
77
+ nvisitsRange = {
78
+ "u": [20, 80],
79
+ "g": [50, 150],
80
+ "r": [100, 250],
81
+ "i": [100, 250],
82
+ "z": [100, 300],
83
+ "y": [100, 300],
84
+ "all": [700, 1200],
85
+ }
86
+ scale = runLength / 10.0
87
+ for f in nvisitsRange:
88
+ for i in [0, 1]:
89
+ nvisitsRange[f][i] = int(np.floor(nvisitsRange[f][i] * scale))
90
+
91
+ # Generate Nvisit maps in all and per filters
92
+ displayDict = {"group": "Nvisits Maps", "subgroup": subgroup}
93
+ metric = metrics.CountMetric(colmap["mjd"], metric_name="NVisits", units="")
94
+
95
+ if slicer is None:
96
+ slicer = slicers.HealpixSlicer(nside=64, lat_col=decCol, lon_col=raCol, lat_lon_deg=degrees)
97
+ slicerDust = slicers.HealpixSlicer(
98
+ nside=64,
99
+ lat_col=decCol,
100
+ lon_col=raCol,
101
+ lat_lon_deg=degrees,
102
+ use_cache=False,
103
+ )
104
+ else:
105
+ # If there is already a slicer set up, ensure we have one for dust
106
+ # which is NOT using cache.
107
+ slicerDust = copy.deepcopy(slicer)
108
+ slicerDust.use_cache = False
109
+
110
+ for f in filterlist:
111
+ sql = sqls[f]
112
+ displayDict["caption"] = f"Number of visits per healpix in {info_label[f]}."
113
+ displayDict["order"] = orders[f]
114
+ bin_size = 2
115
+ if f == "all":
116
+ bin_size = 5
117
+ plotDict = {
118
+ "x_min": nvisitsRange[f][0],
119
+ "x_max": nvisitsRange[f][1],
120
+ "color_min": nvisitsRange[f][0],
121
+ "color_max": nvisitsRange[f][1],
122
+ "bin_size": bin_size,
123
+ "color": colors[f],
124
+ }
125
+ bundle = mb.MetricBundle(
126
+ metric,
127
+ slicer,
128
+ sql,
129
+ info_label=info_label[f],
130
+ display_dict=displayDict,
131
+ plot_dict=plotDict,
132
+ summary_metrics=standard_summary(),
133
+ )
134
+ bundleList.append(bundle)
135
+
136
+ # Generate Coadded depth maps per filter
137
+ displayDict = {"group": "Coadded M5 Maps", "subgroup": subgroup}
138
+ metric = metrics.Coaddm5Metric(m5_col=colmap["fiveSigmaDepth"], metric_name="CoaddM5")
139
+
140
+ for f in filterlist:
141
+ # Skip "all" for coadded depth.
142
+ if f == "all":
143
+ continue
144
+ sql = sqls[f]
145
+ displayDict["caption"] = f"Coadded depth per healpix in {info_label[f]}."
146
+ displayDict["caption"] += " More positive numbers indicate fainter limiting magnitudes."
147
+ displayDict["order"] = orders[f]
148
+ plotDict = {
149
+ "percentile_clip": 98,
150
+ "color": colors[f],
151
+ }
152
+ bundle = mb.MetricBundle(
153
+ metric,
154
+ slicer,
155
+ sql,
156
+ info_label=info_label[f],
157
+ display_dict=displayDict,
158
+ plot_dict=plotDict,
159
+ summary_metrics=standard_summary(),
160
+ )
161
+ bundleList.append(bundle)
162
+
163
+ # Add Coadded depth maps per filter WITH extragalactic extinction added
164
+ displayDict = {"group": "Extragalactic Coadded M5 Maps", "subgroup": subgroup}
165
+ metric = metrics.ExgalM5(m5_col=colmap["fiveSigmaDepth"], metric_name="Exgal_CoaddM5")
166
+
167
+ for f in filterlist:
168
+ # Skip "all" for coadded depth.
169
+ if f == "all":
170
+ continue
171
+ sql = sqls[f]
172
+ displayDict["caption"] = (
173
+ "Coadded depth per healpix for extragalactic purposes "
174
+ "(i.e. combined with dust extinction maps), "
175
+ f"in {info_label[f]}."
176
+ )
177
+ displayDict["caption"] += " More positive numbers indicate fainter limiting magnitudes."
178
+ displayDict["order"] = orders[f]
179
+ plotDict = {
180
+ "percentile_clip": 90,
181
+ "color": colors[f],
182
+ }
183
+ bundle = mb.MetricBundle(
184
+ metric,
185
+ slicerDust,
186
+ sql,
187
+ info_label=info_label[f],
188
+ display_dict=displayDict,
189
+ plot_dict=plotDict,
190
+ summary_metrics=standard_summary(),
191
+ )
192
+ bundleList.append(bundle)
193
+
194
+ # Set the run_name for all bundles and return the bundleDict.
195
+ for b in bundleList:
196
+ b.set_run_name(runName)
197
+ return mb.make_bundles_dict_from_list(bundleList)
198
+
199
+
200
+ def tEffMetrics(
201
+ colmap=None,
202
+ runName="opsim",
203
+ extraSql=None,
204
+ extraInfoLabel=None,
205
+ slicer=None,
206
+ ):
207
+ """Generate a series of Teff metrics.
208
+ Teff total, per night, and sky maps (all and per filter).
209
+
210
+ Parameters
211
+ ----------
212
+ colmap : `dict`, optional
213
+ A dictionary with a mapping of column names.
214
+ runName : `str`, optional
215
+ The name of the simulated survey.
216
+ extraSql : `str`, optional
217
+ Additional constraint to add to any sql constraints.
218
+ extraInfoLabel : `str`, optional
219
+ Additional info_label to add before any below (i.e. "WFD").
220
+ slicer : `rubin_sim.maf.BaseSlicer` or None, optional
221
+ Optionally, use something other than an nside=64 healpix slicer
222
+
223
+ Returns
224
+ -------
225
+ metric_bundleDict : `dict` of `maf.MetricBundle`
226
+ """
227
+ if colmap is None:
228
+ colmap = col_map_dict()
229
+ bundleList = []
230
+
231
+ subgroup = extraInfoLabel
232
+ if subgroup is None:
233
+ subgroup = "All visits"
234
+
235
+ raCol = colmap["ra"]
236
+ decCol = colmap["dec"]
237
+ degrees = colmap["raDecDeg"]
238
+
239
+ if slicer is not None:
240
+ skyslicer = slicer
241
+ else:
242
+ skyslicer = slicers.HealpixSlicer(nside=64, lat_col=decCol, lon_col=raCol, lat_lon_deg=degrees)
243
+
244
+ # Set up basic all and per filter sql constraints.
245
+ filterlist, colors, orders, sqls, info_label = filter_list(
246
+ all=True, extra_sql=extraSql, extra_info_label=extraInfoLabel
247
+ )
248
+ if info_label["all"] is None:
249
+ info_label["all"] = "All visits"
250
+
251
+ # Total Teff and normalized Teff.
252
+ displayDict = {"group": "T_eff Summary", "subgroup": subgroup}
253
+ displayDict["caption"] = "Total effective time of the survey (see Teff metric)."
254
+ displayDict["order"] = 0
255
+ metric = metrics.SumMetric(col="t_eff", metric_name="Total Teff")
256
+ slicer = slicers.UniSlicer()
257
+ bundle = mb.MetricBundle(
258
+ metric,
259
+ slicer,
260
+ constraint=sqls["all"],
261
+ display_dict=displayDict,
262
+ info_label=info_label["all"],
263
+ )
264
+ bundleList.append(bundle)
265
+
266
+ displayDict["caption"] = "Normalized total effective time of the survey (see Teff metric)."
267
+ displayDict["order"] = 1
268
+ metric = metrics.MeanMetric(col="t_eff", metric_name="Normalized Teff")
269
+ normalized_teff_stacker = stackers.TeffStacker(normed=True)
270
+ slicer = slicers.UniSlicer()
271
+ bundle = mb.MetricBundle(
272
+ metric,
273
+ slicer,
274
+ constraint=sqls["all"],
275
+ stacker_list=[normalized_teff_stacker],
276
+ display_dict=displayDict,
277
+ info_label=info_label["all"],
278
+ )
279
+ bundleList.append(bundle)
280
+
281
+ # Generate Teff maps in all and per filters
282
+ displayDict = {"group": "T_eff Maps", "subgroup": subgroup}
283
+
284
+ metric = metrics.MeanMetric(col="t_eff", metric_name="Normalized Teff")
285
+ normalized_teff_stacker = stackers.TeffStacker(normed=True)
286
+ for f in filterlist:
287
+ displayDict["caption"] = "Normalized effective time of the survey, for %s" % info_label[f]
288
+ displayDict["order"] = orders[f]
289
+ plotDict = {"color": colors[f]}
290
+ bundle = mb.MetricBundle(
291
+ metric,
292
+ skyslicer,
293
+ sqls[f],
294
+ stacker_list=[normalized_teff_stacker],
295
+ info_label=info_label[f],
296
+ display_dict=displayDict,
297
+ plot_dict=plotDict,
298
+ summary_metrics=standard_summary(),
299
+ )
300
+ bundleList.append(bundle)
301
+
302
+ # Set the run_name for all bundles and return the bundleDict.
303
+ for b in bundleList:
304
+ b.set_run_name(runName)
305
+ return mb.make_bundles_dict_from_list(bundleList)
306
+
307
+
308
+ def nvisitsPerNight(
309
+ colmap=None,
310
+ runName="opsim",
311
+ binNights=1,
312
+ extraSql=None,
313
+ extraInfoLabel=None,
314
+ subgroup=None,
315
+ ):
316
+ """Count the number of visits per night through the survey.
317
+
318
+ Parameters
319
+ ----------
320
+ colmap : `dict` or None, optional
321
+ A dictionary with a mapping of column names.
322
+ runName : `str`, optional
323
+ The name of the simulated survey. Default is "opsim".
324
+ binNights : `int`, optional
325
+ Number of nights to count in each bin.
326
+ extraSql : `str` or None, optional
327
+ Additional constraint to add to any sql constraints.
328
+ extraInfoLabel : `str` or None, optional
329
+ Additional info_label to add before any below (i.e. "WFD").
330
+ subgroup : `str` or None, optional
331
+ Use this for the 'subgroup' in the display_dict, instead of info_label.
332
+
333
+ Returns
334
+ -------
335
+ metric_bundleDict : `dict` of `maf.MetricBundle`
336
+ """
337
+ if colmap is None:
338
+ colmap = col_map_dict()
339
+
340
+ subgroup = subgroup
341
+ if subgroup is None:
342
+ subgroup = extraInfoLabel
343
+ if subgroup is None:
344
+ subgroup = "All visits"
345
+
346
+ infoCaption = extraInfoLabel
347
+ if extraInfoLabel is None:
348
+ if extraSql is not None:
349
+ infoCaption = extraSql
350
+ else:
351
+ infoCaption = "all visits"
352
+
353
+ bundleList = []
354
+
355
+ displayDict = {"group": "Nvisits Per Night", "subgroup": subgroup}
356
+ displayDict["caption"] = "Number of visits per night for %s." % (infoCaption)
357
+ displayDict["order"] = 0
358
+ metric = metrics.CountMetric(colmap["mjd"], metric_name="Nvisits")
359
+ slicer = slicers.OneDSlicer(slice_col_name=colmap["night"], bin_size=binNights)
360
+ bundle = mb.MetricBundle(
361
+ metric,
362
+ slicer,
363
+ extraSql,
364
+ info_label=infoCaption,
365
+ display_dict=displayDict,
366
+ summary_metrics=standard_summary(),
367
+ )
368
+ bundleList.append(bundle)
369
+
370
+ # Set the run_name for all bundles and return the bundleDict.
371
+ for b in bundleList:
372
+ b.set_run_name(runName)
373
+ return mb.make_bundles_dict_from_list(bundleList)
374
+
375
+
376
+ def nvisitsPerSubset(
377
+ colmap=None,
378
+ runName="opsim",
379
+ binNights=1,
380
+ constraint=None,
381
+ footprintConstraint=None,
382
+ extraInfoLabel=None,
383
+ ):
384
+ """Look at the distribution of a given sql constraint or
385
+ footprint constraint's visits, total number and distribution over time
386
+ (# per night), if possible.
387
+
388
+ Parameters
389
+ ----------
390
+ opsdb : `str` or database connection
391
+ Name of the opsim sqlite database.
392
+ colmap : `dict` or None, optional
393
+ A dictionary with a mapping of column names.
394
+ runName : `str`, optional
395
+ The name of the simulated survey.
396
+ binNights : `int`, optional
397
+ Number of nights to count in each bin.
398
+ constraint : `str` or None, optional
399
+ SQL constraint to add to all metrics.
400
+ This would be the way to select only a given "Note".
401
+ footprintConstraint : `np.ndarray` or None, optional
402
+ Footprint to look for visits within
403
+ (and then identify via WFDlabelStacker).
404
+ The footprint = a full length heapix array, filled with 0/1 values.
405
+ extraInfoLabel : `str` or None, optional
406
+ Additional info_label to add before any below (i.e. "WFD").
407
+
408
+ Returns
409
+ -------
410
+ metric_bundleDict : `dict` of `rubin_sim.maf.MetricBundle`
411
+ """
412
+ if colmap is None:
413
+ colmap = col_map_dict()
414
+
415
+ bdict = {}
416
+ bundleList = []
417
+
418
+ if footprintConstraint is None:
419
+ if extraInfoLabel is None and constraint is not None:
420
+ extraInfoLabel += " %s" % constraint
421
+ # Nvisits per night, this constraint.
422
+ bdict.update(
423
+ nvisitsPerNight(
424
+ colmap=colmap,
425
+ runName=runName,
426
+ binNights=binNights,
427
+ extraSql=constraint,
428
+ extraInfoLabel=extraInfoLabel,
429
+ )
430
+ )
431
+ # Nvisits total, this constraint.
432
+ metric = metrics.CountMetric(colmap["mjd"], metric_name="Nvisits")
433
+ slicer = slicers.UniSlicer()
434
+ displayDict = {
435
+ "group": "Nvisit Summary",
436
+ "subgroup": extraInfoLabel,
437
+ }
438
+ displayDict["caption"] = f"Total number of visits for {extraInfoLabel}."
439
+ bundle = mb.MetricBundle(
440
+ metric,
441
+ slicer,
442
+ constraint,
443
+ info_label=extraInfoLabel,
444
+ display_dict=displayDict,
445
+ )
446
+ bundleList.append(bundle)
447
+
448
+ # Or count the total number of visits that contribute
449
+ # towards a given footprint
450
+ if footprintConstraint is not None:
451
+ # Set up a stacker to use this footprint to label visits
452
+ if extraInfoLabel is None:
453
+ extraInfoLabel = "Footprint"
454
+ footprintStacker = stackers.WFDlabelStacker(
455
+ footprint=footprintConstraint,
456
+ fp_threshold=0.4,
457
+ area_id_name=extraInfoLabel,
458
+ exclude_dd=True,
459
+ ra_col=colmap["ra"],
460
+ dec_col=colmap["dec"],
461
+ note_col=colmap["scheduler_note"],
462
+ )
463
+ metric = metrics.CountSubsetMetric(
464
+ col="area_id", subset=extraInfoLabel, units="#", metric_name="Nvisits"
465
+ )
466
+ slicer = slicers.UniSlicer()
467
+ displayDict = {
468
+ "group": "Nvisit Summary",
469
+ "subgroup": extraInfoLabel,
470
+ "caption": f"Visits within footprint {extraInfoLabel}.",
471
+ }
472
+ bundle = mb.MetricBundle(
473
+ metric,
474
+ slicer,
475
+ constraint,
476
+ stacker_list=[footprintStacker],
477
+ info_label=extraInfoLabel,
478
+ display_dict=displayDict,
479
+ )
480
+ bundleList.append(bundle)
481
+
482
+ for b in bundleList:
483
+ b.set_run_name(runName)
484
+ bdict.update(mb.make_bundles_dict_from_list(bundleList))
485
+ return bdict
@@ -0,0 +1,2 @@
1
+ from .results_db import * # noqa: F403
2
+ from .tracking_db import * # noqa: F403
@@ -0,0 +1,34 @@
1
+ __all__ = ("add_run",)
2
+
3
+ import argparse
4
+
5
+ from . import add_run_to_database
6
+
7
+
8
+ def add_run():
9
+ parser = argparse.ArgumentParser(description="Add a MAF run to the tracking database.")
10
+ parser.add_argument("maf_dir", type=str, help="Directory containing MAF outputs.")
11
+ parser.add_argument("-c", "--maf_comment", type=str, default=None, help="Comment on MAF analysis.")
12
+ parser.add_argument("--group", type=str, default=None, help="Opsim Group name.")
13
+ parser.add_argument("--run_name", type=str, default=None, help="Run Name.")
14
+ parser.add_argument("--run_comment", type=str, default=None, help="Comment on OpSim run.")
15
+ parser.add_argument("--db_file", type=str, default="None", help="Opsim Sqlite filename")
16
+ defaultdb = "trackingDb_sqlite.db"
17
+ parser.add_argument(
18
+ "-t",
19
+ "--tracking_db",
20
+ type=str,
21
+ default=defaultdb,
22
+ help="Tracking database filename. Default is %s, in the current directory." % defaultdb,
23
+ )
24
+ args = parser.parse_args()
25
+
26
+ add_run_to_database(
27
+ maf_dir=args.maf_dir,
28
+ tracking_db_file=args.tracking_db,
29
+ run_group=args.group,
30
+ run_name=args.run_name,
31
+ run_comment=args.run_comment,
32
+ maf_comment=args.maf_comment,
33
+ db_file=args.db_file,
34
+ )