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,332 @@
1
+ __all__ = ("TrackingDb", "add_run_to_database")
2
+
3
+ import os
4
+
5
+ from sqlalchemy import Column, Integer, String, create_engine
6
+ from sqlalchemy.engine import url
7
+ from sqlalchemy.exc import DatabaseError
8
+ from sqlalchemy.orm import declarative_base, sessionmaker
9
+
10
+ from . import ResultsDb, VersionRow
11
+
12
+ Base = declarative_base()
13
+
14
+
15
+ class RunRow(Base):
16
+ """
17
+ Define contents and format of run list table.
18
+
19
+ Table to list all available MAF results,
20
+ along with their opsim run and some comment info.
21
+ """
22
+
23
+ __tablename__ = "runs"
24
+ # Define columns in metric list table.
25
+ maf_run_id = Column(Integer, primary_key=True)
26
+ run_group = Column(String)
27
+ run_name = Column(String)
28
+ run_comment = Column(String)
29
+ run_version = Column(String)
30
+ run_date = Column(String)
31
+ db_file = Column(String)
32
+ maf_comment = Column(String)
33
+ maf_version = Column(String)
34
+ maf_date = Column(String)
35
+ maf_dir = Column(String)
36
+
37
+ def __repr__(self):
38
+ rstr = (
39
+ "<Run(maf_run_id='%d', run_group='%s', run_name='%s', run_comment='%s', "
40
+ "run_version='%s', run_date='%s', maf_comment='%s', "
41
+ "maf_version='%s', maf_date='%s', maf_dir='%s', db_file='%s'>"
42
+ % (
43
+ self.maf_run_id,
44
+ self.run_group,
45
+ self.run_name,
46
+ self.maf_comment,
47
+ self.maf_version,
48
+ self.run_date,
49
+ self.maf_comment,
50
+ self.maf_version,
51
+ self.maf_date,
52
+ self.maf_dir,
53
+ self.db_file,
54
+ )
55
+ )
56
+ return rstr
57
+
58
+
59
+ class TrackingDb:
60
+ """Sqlite database to track MAF output runs and their locations,
61
+ for show_maf
62
+ """
63
+
64
+ def __init__(self, database=None, trackingDbverbose=False):
65
+ """
66
+ Set up the Tracking Database.
67
+ """
68
+ self.verbose = trackingDbverbose
69
+ self.driver = "sqlite"
70
+ # connecting to non-existent database creates it automatically
71
+ if database is None:
72
+ # Default is a file in the current directory.
73
+ self.database = "trackingDb_sqlite.db"
74
+ self.tracking_db_dir = "."
75
+ else:
76
+ self.database = database
77
+ self.tracking_db_dir = os.path.dirname(database)
78
+ # only sqlite
79
+ dbAddress = url.URL.create(drivername=self.driver, database=self.database)
80
+ engine = create_engine(dbAddress, echo=self.verbose)
81
+ if self.verbose:
82
+ print("Created or connected to MAF tracking %s database at %s" % (self.driver, self.database))
83
+ self.Session = sessionmaker(bind=engine)
84
+ self.session = self.Session()
85
+ # Create the tables, if they don't already exist.
86
+ try:
87
+ Base.metadata.create_all(engine)
88
+ except DatabaseError:
89
+ raise DatabaseError(
90
+ "Cannot create a %s database at %s. Check directory exists." % (self.driver, self.database)
91
+ )
92
+
93
+ def close(self):
94
+ self.session.close()
95
+
96
+ def add_run(
97
+ self,
98
+ run_group=None,
99
+ run_name=None,
100
+ run_comment=None,
101
+ run_version=None,
102
+ run_date=None,
103
+ maf_comment=None,
104
+ maf_version=None,
105
+ maf_date=None,
106
+ maf_dir=None,
107
+ db_file=None,
108
+ maf_run_id=None,
109
+ ):
110
+ """Add a run to the tracking database.
111
+
112
+ Parameters
113
+ ----------
114
+ run_group : `str`, optional
115
+ Set a name to group this run with (eg. "Tier 1, 2016").
116
+ run_name : `str`, optional
117
+ Set a name for the opsim run.
118
+ run_comment : `str`, optional
119
+ Set a comment describing the opsim run.
120
+ run_version : `str`, optional
121
+ Set the version of opsim.
122
+ run_date : `str`, optional
123
+ Set the date the opsim run was created.
124
+ maf_comment : `str`, optional
125
+ Set a comment to describe the MAF analysis.
126
+ maf_version : `str`, optional
127
+ Set the version of MAF used for analysis.
128
+ maf_date : `str`, optional
129
+ Set the date the MAF analysis was run.
130
+ maf_dir : `str`, optional
131
+ The relative path to the MAF directory.
132
+ Will be converted to a relative path if absolute.
133
+ db_file : `str`, optional
134
+ The relative path to the Opsim SQLite database file.
135
+ maf_run_id : `int`, optional
136
+ The maf_run_id to assign to this record in the database
137
+ (note this is a primary key!).
138
+ If this run (ie the maf_dir) exists in the database already,
139
+ this will be ignored.
140
+
141
+ Returns
142
+ -------
143
+ maf_run_id : `int`
144
+ The maf_run_id stored in the database.
145
+ """
146
+ if run_group is None:
147
+ run_group = "NULL"
148
+ if run_name is None:
149
+ run_name = "NULL"
150
+ if run_comment is None:
151
+ run_comment = "NULL"
152
+ if run_version is None:
153
+ run_version = "NULL"
154
+ if run_date is None:
155
+ run_date = "NULL"
156
+ if maf_comment is None:
157
+ maf_comment = "NULL"
158
+ if maf_version is None:
159
+ maf_version = "NULL"
160
+ if maf_date is None:
161
+ maf_date = "NULL"
162
+ if maf_dir is None:
163
+ maf_dir = "NULL"
164
+ if maf_dir is not None:
165
+ maf_dir = os.path.relpath(maf_dir, start=self.tracking_db_dir)
166
+ if db_file is None:
167
+ db_file = "NULL"
168
+ # Test if maf_dir already exists in database.
169
+ prevrun = self.session.query(RunRow).filter_by(maf_dir=maf_dir).all()
170
+ if len(prevrun) > 0:
171
+ runIds = []
172
+ for run in prevrun:
173
+ runIds.append(run.maf_run_id)
174
+ print(
175
+ "Updating information in tracking database - %s already present with runId %s."
176
+ % (maf_dir, runIds)
177
+ )
178
+ for run in prevrun:
179
+ self.session.delete(run)
180
+ self.session.commit()
181
+ runinfo = RunRow(
182
+ maf_run_id=runIds[0],
183
+ run_group=run_group,
184
+ run_name=run_name,
185
+ run_comment=run_comment,
186
+ run_version=run_version,
187
+ run_date=run_date,
188
+ maf_comment=maf_comment,
189
+ maf_version=maf_version,
190
+ maf_date=maf_date,
191
+ maf_dir=maf_dir,
192
+ db_file=db_file,
193
+ )
194
+ else:
195
+ if maf_run_id is not None:
196
+ # Check if maf_run_id exists already.
197
+ existing = self.session.query(RunRow).filter_by(maf_run_id=maf_run_id).all()
198
+ if len(existing) > 0:
199
+ raise ValueError(
200
+ "maf_run_id %d already exists in database, for %s. "
201
+ "Record must be deleted first." % (maf_run_id, existing[0].maf_dir)
202
+ )
203
+ runinfo = RunRow(
204
+ maf_run_id=maf_run_id,
205
+ run_group=run_group,
206
+ run_name=run_name,
207
+ run_comment=run_comment,
208
+ run_version=run_version,
209
+ run_date=run_date,
210
+ maf_comment=maf_comment,
211
+ maf_version=maf_version,
212
+ maf_date=maf_date,
213
+ maf_dir=maf_dir,
214
+ db_file=db_file,
215
+ )
216
+ else:
217
+ runinfo = RunRow(
218
+ run_group=run_group,
219
+ run_name=run_name,
220
+ run_comment=run_comment,
221
+ run_version=run_version,
222
+ run_date=run_date,
223
+ maf_comment=maf_comment,
224
+ maf_version=maf_version,
225
+ maf_date=maf_date,
226
+ maf_dir=maf_dir,
227
+ db_file=db_file,
228
+ )
229
+ self.session.add(runinfo)
230
+ self.session.commit()
231
+ return runinfo.maf_run_id
232
+
233
+ def delRun(self, runId):
234
+ """
235
+ Remove a run from the tracking database.
236
+ """
237
+ runinfo = self.session.query(RunRow).filter_by(maf_run_id=runId).all()
238
+ if len(runinfo) == 0:
239
+ raise Exception("Could not find run with maf_run_id %d" % (runId))
240
+ if len(runinfo) > 1:
241
+ raise Exception("Found more than one run with maf_run_id %d" % (runId))
242
+ print("Removing run info for runId %d " % (runId))
243
+ print(" ", runinfo)
244
+ self.session.delete(runinfo[0])
245
+ self.session.commit()
246
+
247
+
248
+ def add_run_to_database(
249
+ maf_dir,
250
+ tracking_db_file,
251
+ run_group=None,
252
+ run_name=None,
253
+ run_comment=None,
254
+ maf_comment=None,
255
+ db_file=None,
256
+ maf_version=None,
257
+ maf_date=None,
258
+ sched_version=None,
259
+ sched_date=None,
260
+ skip_extras=False,
261
+ ):
262
+ """Adds information about a MAF analysis run to a MAF tracking database.
263
+
264
+ Parameters
265
+ ----------
266
+ maf_dir : `str`
267
+ Path to the directory where the MAF results are located.
268
+ tracking_db_file : `str`
269
+ Full filename (+path) to the tracking database to use.
270
+ run_group: `str`, optional
271
+ Name to use to group this run with other opsim runs.
272
+ run_name : `str`, optional
273
+ Name of the opsim run.
274
+ run_comment : `str`, optional
275
+ Comment about the opsim run.
276
+ run_version : `str`, optional
277
+ Value to use for the opsim version information.
278
+ maf_comment : `str`, optional
279
+ Comment about the MAF analysis.
280
+ db_file : `str`, optional
281
+ Relative path + name of the opsim database file.
282
+ """
283
+ trackingDb = TrackingDb(database=tracking_db_file)
284
+
285
+ maf_dir = os.path.relpath(maf_dir, start=os.path.dirname(trackingDb.tracking_db_dir))
286
+ if not os.path.isdir(maf_dir):
287
+ raise ValueError("There is no directory containing MAF outputs at %s." % (maf_dir))
288
+
289
+ # Connect to resultsDb for additional information if available
290
+ if os.path.isfile(os.path.join(maf_dir, "resultsDb_sqlite.db")) and not skip_extras:
291
+ resdb = ResultsDb(maf_dir)
292
+ if run_name is None:
293
+ run_name = resdb.get_run_name()
294
+ if len(run_name) > 1:
295
+ run_name = 0
296
+ else:
297
+ run_name = run_name[0]
298
+ if maf_version is None or maf_date is None:
299
+ resdb.open()
300
+ query = resdb.session.query(VersionRow).all()
301
+ for v in query:
302
+ if maf_version is None:
303
+ maf_version = v.version
304
+ if maf_date is None:
305
+ maf_date = v.run_date
306
+ resdb.close()
307
+
308
+ print("Adding to tracking database at %s:" % (tracking_db_file))
309
+ print(" Maf_dir = %s" % (maf_dir))
310
+ print(" Maf_comment = %s" % (maf_comment))
311
+ print(" run_group = %s" % (run_group))
312
+ print(" run_name = %s" % (run_name))
313
+ print(" run_comment = %s" % (run_comment))
314
+ print(" run_version = %s" % (sched_version))
315
+ print(" run_date = %s" % (sched_date))
316
+ print(" maf_version = %s" % (maf_version))
317
+ print(" maf_date = %s" % (maf_date))
318
+ print(" db_file = %s" % (db_file))
319
+ runId = trackingDb.add_run(
320
+ run_group=run_group,
321
+ run_name=run_name,
322
+ run_comment=run_comment,
323
+ run_version=sched_version,
324
+ run_date=sched_date,
325
+ maf_comment=maf_comment,
326
+ maf_version=maf_version,
327
+ maf_date=maf_date,
328
+ maf_dir=maf_dir,
329
+ db_file=db_file,
330
+ )
331
+ print("Used MAF RunID %d" % (runId))
332
+ trackingDb.close()
@@ -0,0 +1,53 @@
1
+ import argparse
2
+ import glob
3
+ import os
4
+ import shutil
5
+
6
+ import rubin_sim.maf.batches as batches
7
+ import rubin_sim.maf.db as db
8
+ import rubin_sim.maf.metric_bundles as mb
9
+
10
+ __all__ = ("ddf_dir",)
11
+
12
+ import matplotlib
13
+
14
+ matplotlib.use("Agg")
15
+
16
+
17
+ def ddf_dir():
18
+ """
19
+ Run the glance batch on all .db files in a directory.
20
+ """
21
+
22
+ parser = argparse.ArgumentParser()
23
+ parser.add_argument("--db", type=str, default=None)
24
+ parser.add_argument("--nside", type=int, default=512)
25
+ parser.add_argument("--old_coords", dest="old_coords", action="store_true")
26
+ parser.set_defaults(verbose=False)
27
+
28
+ args = parser.parse_args()
29
+
30
+ if args.db is None:
31
+ db_files = glob.glob("*.db")
32
+ db_files = [filename for filename in db_files if "trackingDb" not in filename]
33
+ else:
34
+ db_files = [args.db]
35
+ run_names = [os.path.basename(name).replace(".db", "") for name in db_files]
36
+
37
+ for filename, name in zip(db_files, run_names):
38
+ if os.path.isdir(name + "_ddf"):
39
+ shutil.rmtree(name + "_ddf")
40
+
41
+ bdict = {}
42
+ bdict.update(batches.ddfBatch(run_name=name, nside=args.nside, old_coords=args.old_coords))
43
+ results_db = db.ResultsDb(out_dir=name + "_ddf")
44
+ group = mb.MetricBundleGroup(
45
+ bdict,
46
+ filename,
47
+ out_dir=name + "_ddf",
48
+ results_db=results_db,
49
+ save_early=False,
50
+ )
51
+ group.run_all(clear_memory=True, plot_now=True)
52
+ results_db.close()
53
+ db.add_run_to_database(name + "_ddf", "trackingDb_sqlite.db", None, name, "", "", name + ".db")
@@ -0,0 +1,218 @@
1
+ __all__ = ("generate_ss_commands", "generate_ss")
2
+
3
+ import argparse
4
+ import glob
5
+ import os
6
+ import sqlite3
7
+
8
+ import numpy as np
9
+ import pandas as pd
10
+
11
+ import rubin_sim.maf.db as db
12
+ from rubin_sim.data import get_data_dir
13
+
14
+
15
+ def generate_ss_commands(
16
+ dbfiles=None,
17
+ pops=None,
18
+ split=False,
19
+ ):
20
+ if dbfiles is None:
21
+ dbfiles = glob.glob("*.db")
22
+ dbfiles.sort()
23
+
24
+ data_dir = os.path.join(get_data_dir(), "orbits")
25
+ orbit_files = {
26
+ "granvik_5k": os.path.join(data_dir, "granvik_5k.txt"),
27
+ "granvik_pha_5k": os.path.join(data_dir, "granvik_pha_5k.txt"),
28
+ "vatiras_granvik_10k": os.path.join(data_dir, "vatiras_granvik_10k.txt"),
29
+ "l7_5k": os.path.join(data_dir, "l7_5k.txt"),
30
+ "mba_5k": os.path.join(data_dir, "mba_5k.txt"),
31
+ "occ_rmax5_5k": os.path.join(data_dir, "occ_rmax5_5k.txt"),
32
+ "occ_rmax20_5k": os.path.join(data_dir, "occ_rmax20_5k.txt"),
33
+ "trojan_5k": os.path.join(data_dir, "trojan_5k.txt"),
34
+ }
35
+
36
+ pos_dir = os.path.join(get_data_dir(), "orbits_precompute")
37
+ position_files = {
38
+ "granvik_5k": os.path.join(pos_dir, "granvik_5k.npz"),
39
+ "granvik_pha_5k": os.path.join(pos_dir, "granvik_pha_5k.npz"),
40
+ "vatiras_granvik_10k": os.path.join(pos_dir, "vatiras_granvik_10k.npz"),
41
+ "l7_5k": os.path.join(pos_dir, "l7_5k.npz"),
42
+ "mba_5k": os.path.join(pos_dir, "mba_5k.npz"),
43
+ "occ_rmax5_5k": os.path.join(pos_dir, "occ_rmax5_5k.npz"),
44
+ "occ_rmax20_5k": os.path.join(pos_dir, "occ_rmax20_5k.npz"),
45
+ "trojan_5k": os.path.join(pos_dir, "trojan_5k.npz"),
46
+ }
47
+
48
+ objtypes = {
49
+ "granvik_5k": "NEO",
50
+ "granvik_pha_5k": "PHA",
51
+ "vatiras_granvik_10k": "Vatira",
52
+ "l7_5k": "TNO",
53
+ "mba_5k": "MBA",
54
+ "occ_rmax5_5k": "OCC_r5",
55
+ "occ_rmax20_5k": "OCC_r20",
56
+ "sdo_5k": "SDO",
57
+ "trojan_5k": "Trojan",
58
+ }
59
+
60
+ if pops is None:
61
+ # put in order so longer runtime ones are first
62
+ pops = [
63
+ "trojan_5k",
64
+ "l7_5k",
65
+ "mba_5k",
66
+ "granvik_5k",
67
+ "granvik_pha_5k",
68
+ "vatiras_granvik_10k",
69
+ "occ_rmax5_5k",
70
+ "occ_rmax20_5k",
71
+ ]
72
+
73
+ elif pops is not None:
74
+ pp = [p for p in orbit_files.keys() if p == pops]
75
+ if len(pp) == 0:
76
+ print(f"Did not find population {pops} in expected types ({list(orbit_files.keys())}")
77
+ pops = [pops]
78
+
79
+ runs = [os.path.split(file)[-1].replace(".db", "") for file in dbfiles]
80
+ runs = [run for run in runs if "tracking" not in run]
81
+
82
+ # Find mjd_start for each run:
83
+ mjd_starts = {}
84
+ for filename in dbfiles:
85
+ con = sqlite3.connect(filename)
86
+ value = pd.read_sql("select min(observationStartMJD) from observations;", con)
87
+ con.close()
88
+ mjd_starts[filename] = np.floor(value.values.min())
89
+
90
+ if not split:
91
+ output_file = open("ss_script.sh", "w")
92
+ for run, filename in zip(runs, dbfiles):
93
+ out_dir = f"{run}_ss"
94
+ try:
95
+ os.mkdir(out_dir)
96
+ except FileExistsError:
97
+ pass
98
+ # Create the results DB so multiple threads
99
+ # don't try to create it later
100
+ # This isn't used in this script, but needs to exist on-disk.
101
+ results_db = db.ResultsDb(out_dir=out_dir)
102
+ for pop in pops:
103
+ for run, filename in zip(runs, dbfiles):
104
+ objtype = objtypes[pop]
105
+
106
+ s1 = (
107
+ f"make_lsst_obs --simulation_db {filename} --orbit_file {orbit_files[pop]}"
108
+ f" --positions_file {position_files[pop]}"
109
+ )
110
+ s2 = (
111
+ f"run_moving_calc --obs_file {run}__{pop}_obs.npz"
112
+ f" --simulation_db {filename} --orbit_file {orbit_files[pop]}"
113
+ f" --out_dir {run}_ss"
114
+ f" --objtype {objtype}"
115
+ f" --start_time {mjd_starts[filename]}"
116
+ )
117
+ s3 = (
118
+ f"run_moving_fractions --work_dir {run}_ss"
119
+ f" --metadata {objtype}"
120
+ f" --start_time {mjd_starts[filename]}"
121
+ )
122
+ print(s1 + " ; " + s2 + " ; " + s3, file=output_file)
123
+ else:
124
+ for run, filename in zip(runs, dbfiles):
125
+ out_dir = f"{run}_ss"
126
+ try:
127
+ os.mkdir(out_dir)
128
+ except FileExistsError:
129
+ pass
130
+ # Create the results DB so multiple threads
131
+ # don't try to create it later
132
+ results_db = db.ResultsDb(out_dir=out_dir) # noqa F841
133
+ outfile = f"{run}_ss_script.sh"
134
+ if split:
135
+ output_file = open(outfile, "w")
136
+ for pop in pops:
137
+ objtype = objtypes[pop]
138
+ if split:
139
+ splitfiles = glob.glob(os.path.join(data_dir, "split") + f"/*{pop}*")
140
+ outfile_split = outfile.replace(".sh", f"_{pop}_split.sh")
141
+ # If the output split file already exists, remove it
142
+ # (as we append, not write)
143
+ if os.path.isfile(outfile_split):
144
+ os.remove(outfile_split)
145
+ for i, splitfile in enumerate(splitfiles):
146
+ split = os.path.split(splitfile)[-1]
147
+ split = split.replace(".des", "").replace(".s3m", "").replace(".txt", "")
148
+ with open(outfile_split, "a") as wi:
149
+ s1 = (
150
+ f"make_lsst_obs --simulation_db {filename} --orbit_file {splitfile}"
151
+ f" --positions_file {position_files[pop]}"
152
+ f" --out_dir {out_dir}"
153
+ )
154
+ s2 = (
155
+ f"run_moving_calc --obs_file {out_dir}/{run}__{split}_obs.npz"
156
+ f" --simulation_db {filename} --orbit_file {orbit_files[pop]}"
157
+ f" --out_dir {out_dir}/{split}"
158
+ f" --run_name {run}"
159
+ f" --objtype {objtype}"
160
+ f" --start_time {mjd_starts[filename]}"
161
+ )
162
+ print(s1 + " ; " + s2, file=wi)
163
+ s3 = (
164
+ f"run_moving_join --orbit_file {pop}"
165
+ f" --base_dir {out_dir}"
166
+ f" --out_dir {out_dir}/sso"
167
+ )
168
+ s4 = (
169
+ f"run_moving_fractions --work_dir {out_dir}/sso"
170
+ f" --metadata {objtype}"
171
+ f" --start_time {mjd_starts[filename]}"
172
+ )
173
+ print(
174
+ f"cat {outfile_split} | parallel -j 10 ; {s3} ; {s4}",
175
+ file=output_file,
176
+ )
177
+ output_file.close()
178
+
179
+
180
+ def generate_ss():
181
+ """Generate solar system processing commands."""
182
+
183
+ parser = argparse.ArgumentParser(description="Generate solar system processing commands")
184
+ parser.add_argument("--db", type=str, default=None, help="database to process")
185
+ parser.set_defaults(vatiras=False)
186
+ parser.add_argument("--pop", type=str, default=None, help="identify one population to run")
187
+ parser.add_argument("--start_mjd", type=float, default=None, help="start of the sim")
188
+ parser.add_argument(
189
+ "--split",
190
+ dest="split",
191
+ default=False,
192
+ action="store_true",
193
+ help="Split up population files; rejoin during processing",
194
+ )
195
+ args = parser.parse_args()
196
+
197
+ if args.db is None:
198
+ # Just look for any .db files in this directory
199
+ db_files = glob.glob("*.db")
200
+ # But remove trackingDb and results_db if they're there
201
+ try:
202
+ db_files.remove("trackingDb_sqlite.db")
203
+ except ValueError:
204
+ pass
205
+ try:
206
+ db_files.remove("resultsDb_sqlite.db")
207
+ except ValueError:
208
+ pass
209
+ elif isinstance(args.db, str):
210
+ db_files = [args.db]
211
+ else:
212
+ db_files = args.db
213
+
214
+ generate_ss_commands(
215
+ split=args.split,
216
+ dbfiles=db_files,
217
+ pops=args.pop,
218
+ )
@@ -0,0 +1,58 @@
1
+ import argparse
2
+ import glob
3
+ import os
4
+ import shutil
5
+
6
+ import rubin_sim.maf.batches as batches
7
+ import rubin_sim.maf.db as db
8
+ import rubin_sim.maf.metric_bundles as mb
9
+
10
+ __all__ = ("glance_dir",)
11
+
12
+ import matplotlib
13
+
14
+ matplotlib.use("Agg")
15
+
16
+
17
+ def glance_dir():
18
+ """
19
+ Run the glance batch on all .db files in a directory.
20
+ """
21
+
22
+ parser = argparse.ArgumentParser()
23
+ parser.add_argument("--db", type=str, default=None)
24
+ args = parser.parse_args()
25
+
26
+ if args.db is None:
27
+ db_files = glob.glob("*.db")
28
+ db_files = [filename for filename in db_files if "trackingDb" not in filename]
29
+ else:
30
+ db_files = [args.db]
31
+ run_names = [os.path.basename(name).replace(".db", "") for name in db_files]
32
+
33
+ for filename, name in zip(db_files, run_names):
34
+ if os.path.isdir(name + "_glance"):
35
+ shutil.rmtree(name + "_glance")
36
+ colmap = batches.col_map_dict()
37
+
38
+ bdict = {}
39
+ bdict.update(batches.glanceBatch(colmap, name))
40
+ results_db = db.ResultsDb(out_dir=name + "_glance")
41
+ group = mb.MetricBundleGroup(
42
+ bdict,
43
+ filename,
44
+ out_dir=name + "_glance",
45
+ results_db=results_db,
46
+ save_early=False,
47
+ )
48
+ group.run_all(clear_memory=True, plot_now=True)
49
+ results_db.close()
50
+ db.add_run_to_database(
51
+ maf_dir=name + "_glance",
52
+ tracking_db_file="trackingDb_sqlite.db",
53
+ run_group=None,
54
+ run_name=name,
55
+ run_comment="",
56
+ maf_comment="Glance",
57
+ db_file=name + ".db",
58
+ )
@@ -0,0 +1,25 @@
1
+ # Add similar lines (from .filename import *) when you add new metrics,
2
+ # stackers or slicers.
3
+ from .calculate_lsst_field_visibility_astropy import *
4
+ from .depth_limited_num_gal_metric import *
5
+ from .filter_pair_t_gaps_metric import *
6
+ from .grb_transient_metric import *
7
+ from .gw170817_det_metric import *
8
+ from .kne_metrics import *
9
+ from .lss_metrics import *
10
+ from .lss_obs_strategy import *
11
+ from .lv_dwarfs import *
12
+ from .microlensing_metric import *
13
+ from .periodic_metric import *
14
+ from .periodic_star_metric import *
15
+ from .periodic_star_modulation_metric import *
16
+ from .presto_color_kne_pop_metric import *
17
+ from .selfcal_uniformity_metric import *
18
+ from .star_count_mass_metric import *
19
+ from .star_count_metric import *
20
+ from .static_probes_fom_summary_metric import *
21
+ from .tdes_pop_metric import *
22
+ from .triplet_metric import *
23
+ from .var_depth_metric import *
24
+ from .xrb_metrics import *
25
+ from .young_stellar_objects_metric import *