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,56 @@
1
+ __all__ = ("StarCountMetric",)
2
+
3
+ import numpy as np
4
+
5
+ from rubin_sim.maf.metrics import BaseMetric
6
+
7
+ from .star_counts import starcount
8
+
9
+ # Example for CountMetric
10
+ # Mike Lund - Vanderbilt University
11
+ # mike.lund@gmail.com
12
+ # Last edited 8/15/2015
13
+ # Motivation: The distances to stars in LSST will be significant enough
14
+ # that the structure of the Galaxy will be readily apparent because of
15
+ # its influence on the number of stars in a given field.
16
+ # Any metric concerned with the number of potential objects to be
17
+ # detected will need to feature not only the effects of the cadence
18
+ # but also the number of objects per field.
19
+ # This metric identifies the number of stars in a given field in a
20
+ # particular distance range.
21
+ # D1 and D2 are the close and far distances in parsecs.
22
+ # Requires StarCounts.StarCounts
23
+
24
+ # NOTE
25
+ # There are stellar luminosity function maps available within MAF
26
+ # that may supersede these StarCount functions
27
+
28
+
29
+ class StarCountMetric(BaseMetric):
30
+ """Find the number of stars in a given field between d1 and d2 in parsecs.
31
+
32
+ This metric uses the stellar distance and luminosity equations
33
+ contributed by Mike Lund, which are based on the Galfast model.
34
+ There are some imposed limitations on the expected magnitudes
35
+ of the stars included for the metric, based on assuming saturation
36
+ at 16th magnitude and not considering stars with magnitude
37
+ uncertainties greater than 0.03 (based on photometry/m5 alone).
38
+
39
+
40
+ Parameters
41
+ ----------
42
+ d1 : `float`
43
+ d1 in parsecs
44
+ d2 : `float`
45
+ d2 in parsecs
46
+ """
47
+
48
+ def __init__(self, d1=100, d2=1000, **kwargs):
49
+ self.d1 = d1
50
+ self.d2 = d2
51
+ super(StarCountMetric, self).__init__(col=[], **kwargs)
52
+
53
+ def run(self, data_slice, slice_point=None):
54
+ self.dec_col = np.degrees(data_slice[0][3])
55
+ self.ra_col = np.degrees(data_slice[0][2])
56
+ return starcount(self.ra_col, self.dec_col, self.d1, self.d2)
@@ -0,0 +1,8 @@
1
+ __all__ = (
2
+ "abs_mag",
3
+ "coords",
4
+ "spec_type",
5
+ "starcount",
6
+ "starcount_bymass",
7
+ "stellardensity",
8
+ )
@@ -0,0 +1,324 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Mike Lund - Vanderbilt University
4
+ # mike.lund@gmail.com
5
+ # Last edited 8/15/2015
6
+ # Description: Calculates absolute magnitudes as a function of spectral type.
7
+ # For use with Field Star Count metric
8
+ import sys
9
+
10
+ import numpy as np
11
+ from scipy.interpolate import interp1d
12
+
13
+
14
+ def extrap1d(interpolator):
15
+ xs = interpolator.x
16
+ ys = interpolator.y
17
+
18
+ def pointwise(x):
19
+ if x < xs[0]:
20
+ return ys[0]
21
+ elif x > xs[-1]:
22
+ return ys[-1]
23
+ else:
24
+ return interpolator(x)
25
+
26
+ def ufunclike(xs):
27
+ return np.array(list(map(pointwise, np.array(xs))))
28
+
29
+ return ufunclike
30
+
31
+
32
+ def abs_mag(spec_type):
33
+ spec_range = [
34
+ 5,
35
+ 9,
36
+ 10,
37
+ 11,
38
+ 13,
39
+ 16,
40
+ 18,
41
+ 19,
42
+ 20,
43
+ 22,
44
+ 23,
45
+ 25,
46
+ 27,
47
+ 30,
48
+ 32,
49
+ 35,
50
+ 36,
51
+ 38,
52
+ 40,
53
+ 42,
54
+ 45,
55
+ 48,
56
+ 50,
57
+ 52,
58
+ 53,
59
+ 54,
60
+ 55,
61
+ 57,
62
+ 60,
63
+ 61,
64
+ 62,
65
+ 62.5,
66
+ 63,
67
+ 64,
68
+ 65,
69
+ 66,
70
+ ]
71
+ abs_u = [
72
+ -5.8,
73
+ -4.92,
74
+ -3.78,
75
+ -2.75,
76
+ -1.51,
77
+ -0.54,
78
+ 0.17,
79
+ 1.14,
80
+ 2.72,
81
+ 3.55,
82
+ 3.64,
83
+ 4.12,
84
+ 4.52,
85
+ 5.24,
86
+ 5.4,
87
+ 5.52,
88
+ 5.97,
89
+ 6.29,
90
+ 6.65,
91
+ 7.23,
92
+ 7.52,
93
+ 8.17,
94
+ 8.66,
95
+ 9.74,
96
+ 10.58,
97
+ 11.18,
98
+ 12.19,
99
+ 12.74,
100
+ 13.33,
101
+ 13.92,
102
+ 14.11,
103
+ 14.95,
104
+ 15.35,
105
+ 17.15,
106
+ 18.12,
107
+ 19.37,
108
+ ]
109
+ abs_g = [
110
+ -5.41,
111
+ -4.6,
112
+ -3.53,
113
+ -2.62,
114
+ -1.69,
115
+ -1.05,
116
+ -0.58,
117
+ 0.28,
118
+ 1.63,
119
+ 2.39,
120
+ 2.49,
121
+ 2.92,
122
+ 3.31,
123
+ 4.08,
124
+ 4.28,
125
+ 4.43,
126
+ 4.83,
127
+ 5.07,
128
+ 5.35,
129
+ 5.86,
130
+ 6.03,
131
+ 6.57,
132
+ 6.98,
133
+ 7.79,
134
+ 8.48,
135
+ 8.97,
136
+ 9.65,
137
+ 10.18,
138
+ 10.68,
139
+ 11.2,
140
+ 11.52,
141
+ 12.21,
142
+ 12.68,
143
+ 14.02,
144
+ 15.07,
145
+ 16.38,
146
+ ]
147
+ abs_r = [
148
+ -5.02,
149
+ -4.28,
150
+ -3.28,
151
+ -2.49,
152
+ -1.87,
153
+ -1.56,
154
+ -1.33,
155
+ -0.58,
156
+ 0.54,
157
+ 1.23,
158
+ 1.34,
159
+ 1.72,
160
+ 2.1,
161
+ 2.92,
162
+ 3.16,
163
+ 3.34,
164
+ 3.69,
165
+ 3.85,
166
+ 4.05,
167
+ 4.49,
168
+ 4.54,
169
+ 4.97,
170
+ 5.3,
171
+ 5.84,
172
+ 6.38,
173
+ 6.76,
174
+ 7.11,
175
+ 7.62,
176
+ 8.03,
177
+ 8.48,
178
+ 8.93,
179
+ 9.47,
180
+ 10.01,
181
+ 10.89,
182
+ 12.02,
183
+ 13.39,
184
+ ]
185
+ abs_i = [
186
+ -4.65,
187
+ -3.93,
188
+ -2.93,
189
+ -2.16,
190
+ -1.61,
191
+ -1.33,
192
+ -1.1,
193
+ -0.35,
194
+ 0.72,
195
+ 1.4,
196
+ 1.49,
197
+ 1.83,
198
+ 2.18,
199
+ 2.93,
200
+ 3.13,
201
+ 3.31,
202
+ 3.61,
203
+ 3.75,
204
+ 3.91,
205
+ 4.33,
206
+ 4.38,
207
+ 4.78,
208
+ 5.08,
209
+ 5.6,
210
+ 6.06,
211
+ 6.38,
212
+ 6.71,
213
+ 7.08,
214
+ 7.39,
215
+ 7.7,
216
+ 8.08,
217
+ 8.46,
218
+ 8.81,
219
+ 9.38,
220
+ 10.29,
221
+ 11.27,
222
+ ]
223
+ abs_z = [
224
+ -4.3,
225
+ -3.57,
226
+ -2.61,
227
+ -1.9,
228
+ -1.35,
229
+ -1.1,
230
+ -0.93,
231
+ -0.17,
232
+ 0.89,
233
+ 1.55,
234
+ 1.64,
235
+ 1.93,
236
+ 2.26,
237
+ 3.02,
238
+ 3.15,
239
+ 3.33,
240
+ 3.62,
241
+ 3.72,
242
+ 3.89,
243
+ 4.29,
244
+ 4.32,
245
+ 4.72,
246
+ 5.01,
247
+ 5.49,
248
+ 5.93,
249
+ 6.22,
250
+ 6.51,
251
+ 6.78,
252
+ 7.01,
253
+ 7.24,
254
+ 7.56,
255
+ 7.83,
256
+ 8.14,
257
+ 8.62,
258
+ 9.35,
259
+ 10.03,
260
+ ]
261
+ abs_y = [
262
+ -4.96,
263
+ -4.18,
264
+ -3.05,
265
+ -2.22,
266
+ -1.95,
267
+ -1.5,
268
+ -1.27,
269
+ -0.61,
270
+ 0.32,
271
+ 0.96,
272
+ 0.99,
273
+ 1.38,
274
+ 1.79,
275
+ 2.51,
276
+ 2.57,
277
+ 2.74,
278
+ 3.04,
279
+ 3.11,
280
+ 3.36,
281
+ 3.7,
282
+ 3.76,
283
+ 4.16,
284
+ 4.61,
285
+ 4.98,
286
+ 5.43,
287
+ 5.8,
288
+ 6.07,
289
+ 6.38,
290
+ 6.45,
291
+ 6.86,
292
+ 6.97,
293
+ 7.25,
294
+ 7.52,
295
+ 7.82,
296
+ 8.39,
297
+ 8.6,
298
+ ]
299
+ f1 = interp1d(spec_range, abs_z)
300
+ func_z = extrap1d(f1)
301
+ f2 = interp1d(spec_range, abs_i)
302
+ func_i = extrap1d(f2)
303
+ f3 = interp1d(spec_range, abs_r)
304
+ func_r = extrap1d(f3)
305
+ f4 = interp1d(spec_range, abs_g)
306
+ func_g = extrap1d(f4)
307
+ f5 = interp1d(spec_range, abs_u)
308
+ func_u = extrap1d(f5)
309
+ f6 = interp1d(spec_range, abs_y)
310
+ func_y = extrap1d(f6)
311
+ abs_all = [
312
+ func_z([spec_type])[0],
313
+ func_y([spec_type])[0],
314
+ func_i([spec_type])[0],
315
+ func_r([spec_type])[0],
316
+ func_g([spec_type])[0],
317
+ func_u([spec_type])[0],
318
+ ]
319
+ bands = ["z", "y", "i", "r", "g", "u"]
320
+ return abs_all, bands
321
+
322
+
323
+ if __name__ == "__main__":
324
+ print(abs_mag(float(sys.argv[1]))[0]) # spectral type
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Mike Lund - Vanderbilt University
4
+ # mike.lund@gmail.com
5
+ # Last edited 8/15/2015
6
+ # Description: Provides the coordinate conversions between equatorial and
7
+ # galactic coordinates, as well as to galactic cylindrical coordinates.
8
+ # Two different functions are present that do the conversion, and a third
9
+ # that uses ephem package, for redundancy purposes.
10
+ # For use with Field Star Count metric
11
+ import astropy.units as u
12
+ import numpy as np
13
+ from astropy.coordinates import SkyCoord
14
+ from scipy.optimize import fsolve
15
+
16
+ rad1 = np.radians(282.25)
17
+ rad2 = np.radians(62.6)
18
+ rad3 = np.radians(33.0)
19
+
20
+
21
+ def eq_gal(eq_ra, eq_dec):
22
+ d = np.radians(eq_dec)
23
+ a = np.radians(eq_ra)
24
+
25
+ def equations(p):
26
+ b, ll, x = p
27
+ f1a = np.cos(d) * (np.cos(a - rad1))
28
+ f2a = np.sin(d) * np.sin(rad2) + np.cos(d) * np.sin(a - rad1) * np.cos(rad2)
29
+ f3a = np.sin(d) * np.cos(rad2) - np.cos(d) * np.sin(a - rad1) * np.sin(rad2)
30
+ f1 = np.cos(b) * np.cos(ll - rad3) - f1a
31
+ f2 = np.cos(b) * np.sin(ll - rad3) - f2a
32
+ f3 = np.sin(b) - f3a
33
+ return (f1, f2, f3)
34
+
35
+ b, ll, x = fsolve(equations, (0, 0, 0))
36
+ b_deg = np.degrees(b) % 360 # galactic latitude
37
+ if b_deg >= 270:
38
+ b_deg = b_deg - 360
39
+ if b_deg > 90:
40
+ b_deg = 180 - b_deg
41
+ ll = ll + np.pi
42
+ l_deg = np.degrees(ll) % 360 # galactic longitude
43
+ return b_deg, l_deg
44
+ # http://scienceworld.wolfram.com/astronomy/GalacticCoordinates.html
45
+
46
+
47
+ def eq_gal2(eq_ra, eq_dec):
48
+ d = np.radians(eq_dec)
49
+ p = np.radians(eq_ra)
50
+ AB = np.radians(62.8717)
51
+ CAB = np.radians(192.8585) - p
52
+ cos_bc = np.sin(d) * np.cos(AB) + np.cos(d) * np.sin(AB) * np.cos(CAB)
53
+ BC = np.arccos(cos_bc)
54
+ AD = np.radians(118.9362)
55
+ CAD = np.radians(266.4051) - p
56
+ cos_cd = np.sin(d) * np.cos(AD) + np.cos(d) * np.sin(AD) * np.cos(CAD)
57
+ cos_cbd = cos_cd / np.sin(BC)
58
+ if cos_cbd > 1:
59
+ cos_cbd = 1
60
+ elif cos_cbd < -1:
61
+ cos_cbd = -1
62
+ CBD = np.arccos(cos_cbd)
63
+ b_deg = 90.0 - np.degrees(BC)
64
+ cad = np.radians(282.8595) - p
65
+ coscbd = np.cos(cad) * np.cos(d) / np.sin(BC)
66
+ if coscbd > 1:
67
+ coscbd = 1
68
+ elif coscbd < -1:
69
+ coscbd = -1
70
+ cbd = np.arccos(coscbd)
71
+ if cbd - CBD < 32.9319:
72
+ l_deg = 360.0 - np.degrees(CBD)
73
+ else:
74
+ l_deg = np.degrees(CBD)
75
+ return b_deg, l_deg
76
+
77
+
78
+ def eq_gal3(eq_ra, eq_dec):
79
+ # assume input ra, dec are in deg
80
+ coordset = SkyCoord(
81
+ ra=np.radians(eq_ra) * u.radians, dec=np.rad(eq_dec) * u.rad, frame="icrs", unit="deg"
82
+ )
83
+ # convert to galactic
84
+ galactic = coordset.galactic
85
+ # return b,l in deg
86
+ return galactic.b.value, galactic.l.values
87
+
88
+
89
+ def gal_cyn(b_deg, l_deg, dist):
90
+ b_rad = np.radians(b_deg)
91
+ l_rad = np.radians(l_deg)
92
+ Z = np.sin(b_rad) * dist
93
+ xy = np.cos(b_rad) * dist
94
+ x = np.cos(l_rad) * xy
95
+ y = np.sin(l_rad) * xy
96
+ x_new = 8000.0 - x
97
+ R = np.power(x_new**2 + y**2, 0.5)
98
+ rho = np.arctan(y / x)
99
+ return R, rho, Z
@@ -0,0 +1 @@
1
+ The codes included in StarCounts.StarCounts are required for use with the field star count metrics (CountMassMetric and CountMetric)
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Mike Lund - Vanderbilt University
4
+ # mike.lund@gmail.com
5
+ # Last edited 8/15/2015
6
+ # Description: Calculates spectral types for stars on the main sequence as
7
+ # a function of stellar mass. For use with Field Star Count metric
8
+ import sys
9
+
10
+ import numpy as np
11
+ from scipy.interpolate import interp1d
12
+
13
+
14
+ def extrap1d(interpolator):
15
+ xs = interpolator.x
16
+ ys = interpolator.y
17
+
18
+ def pointwise(x):
19
+ if x < xs[0]:
20
+ return ys[0]
21
+ elif x > xs[-1]:
22
+ return ys[-1]
23
+ else:
24
+ return interpolator(x)
25
+
26
+ def ufunclike(xs):
27
+ return np.array(list(map(pointwise, np.array(xs))))
28
+
29
+ return ufunclike
30
+
31
+
32
+ def spec_type(mass):
33
+ mass_range = [
34
+ 0.06,
35
+ 0.21,
36
+ 0.40,
37
+ 0.51,
38
+ 0.67,
39
+ 0.79,
40
+ 0.92,
41
+ 1.05,
42
+ 1.4,
43
+ 1.6,
44
+ 2.0,
45
+ 2.9,
46
+ 3.8,
47
+ 5.9,
48
+ 7.6,
49
+ 17.5,
50
+ 23,
51
+ 37,
52
+ 60,
53
+ 120,
54
+ ]
55
+ spec_range = [
56
+ 68,
57
+ 65,
58
+ 62,
59
+ 60,
60
+ 55,
61
+ 50,
62
+ 45,
63
+ 40,
64
+ 35,
65
+ 30,
66
+ 25,
67
+ 20,
68
+ 18,
69
+ 15,
70
+ 13,
71
+ 10,
72
+ 8,
73
+ 6,
74
+ 5,
75
+ 3,
76
+ ]
77
+ f = interp1d(mass_range, spec_range)
78
+ f2 = extrap1d(f)
79
+ # f2=interp1d(mass_range, spec_range, kind='slinear')
80
+ if mass == 0:
81
+ xnew = np.logspace(-2, 3, 100)
82
+ import matplotlib.pyplot as plt
83
+
84
+ plt.plot(mass_range, spec_range, "o", xnew, f2(xnew), "-") # , xnew, f2(xnew),'--')
85
+ plt.xscale("log")
86
+ plt.show()
87
+ return f2([mass])
88
+
89
+
90
+ if __name__ == "__main__":
91
+ print(spec_type(float(sys.argv[1]))) # mass
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Mike Lund - Vanderbilt University
4
+ # mike.lund@gmail.com
5
+ # Last edited 8/15/2015
6
+ # Description: Calculates the number of stars in a given direction and
7
+ # between a given set of distances. For use with Field Star Count metric
8
+
9
+ import numpy as np
10
+
11
+ from . import coords, stellardensity
12
+
13
+ skyarea = 41253.0
14
+ distancebins = 51
15
+
16
+
17
+ def star_vols(d1, d2, area):
18
+ distance_edges = (np.linspace((d1**3.0), (d2**3.0), num=distancebins)) ** (1.0 / 3)
19
+ volumeshell = (area / skyarea) * (4.0 * np.pi / 3) * (distance_edges[1:] ** 3 - distance_edges[:-1] ** 3)
20
+ distances = ((distance_edges[1:] ** 3 + distance_edges[:-1] ** 3) / 2.0) ** (1.0 / 3)
21
+ return volumeshell, distances
22
+
23
+
24
+ def starcount(eq_ra, eq_dec, d1, d2):
25
+ volumes, distances = star_vols(d1, d2, 9.62)
26
+ b_deg, l_deg = coords.eq_gal3(eq_ra, eq_dec)
27
+ positions = [coords.gal_cyn(b_deg, l_deg, x) for x in distances]
28
+ densities = [stellardensity.stellardensity(x[0], x[2]) for x in positions]
29
+ totalcount = np.sum(np.asarray(volumes) * np.asarray(densities))
30
+ return totalcount
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Mike Lund - Vanderbilt University
4
+ # mike.lund@gmail.com
5
+ # Last edited 8/15/2015
6
+ # Description: Takes a given set of galactic coordinates and a stellar
7
+ # mass range, then calculates the number of stars within that range
8
+ # that will be fainter than mag 16, and have sufficiently low noise
9
+ # in the given band. For use with Field Star Count metric
10
+
11
+
12
+ import numpy as np
13
+ from scipy.optimize import newton
14
+
15
+ from . import abs_mag, spec_type
16
+ from .starcount import starcount
17
+
18
+ xi = 1.0
19
+ alpha = 2.35
20
+
21
+
22
+ def IMF(lower, upper):
23
+ exp = alpha - 1.0
24
+ part1 = xi / exp
25
+ part2 = lower**-exp - upper**-exp
26
+ part3 = part1 * part2
27
+ return part3
28
+
29
+
30
+ def get_distance(apparent, absolute):
31
+ part1 = (apparent - absolute) / 5.0
32
+ part2 = 10 * 10**part1
33
+ return part2
34
+
35
+
36
+ def noise_opt(m, band, sigma):
37
+ part1 = mag_error(m, band)
38
+ part2 = part1**2.0
39
+ part3 = sigma**2.0
40
+ total = part2 - part3
41
+ return total
42
+
43
+
44
+ def mag_error(ap_mag, band, calcm5=0): # apparent magnitude and band
45
+ gamma = {"u": 0.037, "g": 0.038, "r": 0.039, "i": 0.039, "z": 0.040, "y": 0.040}
46
+ m5 = {"u": 23.9, "g": 25.0, "r": 24.7, "i": 24.0, "z": 23.3, "y": 22.1}
47
+ if calcm5 == 0:
48
+ calcm5 = m5[band]
49
+ X = 10.0 ** (0.4 * (ap_mag - calcm5))
50
+ random_2 = np.sqrt((0.04 - gamma[band]) * X + gamma[band] * X * X)
51
+ error_2 = random_2**2.0 + (0.005) ** 2.0
52
+ mag_error = np.sqrt(error_2)
53
+ return mag_error
54
+
55
+
56
+ def noise_calc(band):
57
+ gamma = {"u": 0.037, "g": 0.038, "r": 0.039, "i": 0.039, "z": 0.040, "y": 0.040}
58
+ m5 = {"u": 23.9, "g": 25.0, "r": 24.7, "i": 24.0, "z": 23.3, "y": 22.1}
59
+ sigma = 0.03
60
+ sigma_sys = 0.005
61
+
62
+ def fun(x):
63
+ sigma_sys**2
64
+ +(0.04 - gamma[band]) * 10 ** (0.4 * (x - m5[band]))
65
+ +gamma[band] * 10 ** (0.8 * (x - m5[band]))
66
+ -(sigma**2)
67
+
68
+ return newton(fun, 25)
69
+
70
+
71
+ def dist_calc(mass, band):
72
+ # mass to spectral type
73
+ # spectral type to absolute mag
74
+ bands = ["z", "y", "i", "r", "g", "u"]
75
+ output = abs_mag.abs_mag(spec_type.spec_type(mass))[0]
76
+ indexvalue = bands.index(band)
77
+ absolutemag = output[indexvalue][0]
78
+ apparent = noise_calc(band)
79
+ dist_min = get_distance(16, absolutemag)
80
+ dist_max = get_distance(apparent, absolutemag)
81
+ return dist_min, dist_max
82
+ # abs mag to apparent mag ranges, > 16, noise dependent upper limit
83
+
84
+
85
+ def starcount_bymass(eq_ra, eq_dec, m1, m2, band):
86
+ masses = np.linspace(m1, m2, num=20)
87
+ totmass = IMF(m1, m2)
88
+ totmass = IMF(0.2, 1.04)
89
+ massbins = IMF(masses[:-1], masses[1:])
90
+ massfractions = massbins / totmass
91
+ distances = [dist_calc(x, band) for x in masses[:-1]]
92
+ starcounts = [y * starcount(eq_ra, eq_dec, x[0], x[1]) for x, y in zip(distances, massfractions)]
93
+ return sum(starcounts)