nmma 0.2.1__tar.gz → 0.2.2__tar.gz

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 (332) hide show
  1. {nmma-0.2.1 → nmma-0.2.2}/.github/workflows/continous_integration.yml +3 -2
  2. {nmma-0.2.1 → nmma-0.2.2}/.github/workflows/dependency-installation.yml +7 -7
  3. {nmma-0.2.1/nmma.egg-info → nmma-0.2.2}/PKG-INFO +14 -2
  4. {nmma-0.2.1 → nmma-0.2.2}/README.md +12 -0
  5. {nmma-0.2.1 → nmma-0.2.2}/doc/index.rst +1 -0
  6. nmma-0.2.2/doc/systematics.rst +87 -0
  7. nmma-0.2.2/example_files/multi_config_analysis/config.yaml +75 -0
  8. nmma-0.2.2/example_files/multi_config_analysis/injection.json +31 -0
  9. nmma-0.2.2/nmma/__init__.py +1 -0
  10. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/analysis.py +27 -20
  11. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/analysis_lbol.py +7 -0
  12. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/likelihood.py +93 -12
  13. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/model.py +5 -0
  14. nmma-0.2.2/nmma/em/multi_config_analysis.py +107 -0
  15. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/prior.py +26 -0
  16. nmma-0.2.2/nmma/em/systematics.py +190 -0
  17. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/utils.py +2 -2
  18. {nmma-0.2.1 → nmma-0.2.2}/nmma/joint/conversion.py +19 -16
  19. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/analysis.py +26 -3
  20. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/analysis_lbol.py +2 -1
  21. nmma-0.2.2/nmma/tests/data/multi_config_analysis/config.yaml +35 -0
  22. nmma-0.2.2/nmma/tests/data/multi_config_analysis/injection.json +31 -0
  23. nmma-0.2.2/nmma/tests/data/systematics_with_time.yaml +14 -0
  24. nmma-0.2.2/nmma/tests/data/systematics_without_time.yaml +14 -0
  25. nmma-0.2.2/nmma/tests/multi_config_analysis.py +30 -0
  26. nmma-0.2.2/nmma/tests/systematics.py +203 -0
  27. {nmma-0.2.1 → nmma-0.2.2/nmma.egg-info}/PKG-INFO +14 -2
  28. {nmma-0.2.1 → nmma-0.2.2}/nmma.egg-info/SOURCES.txt +13 -0
  29. {nmma-0.2.1 → nmma-0.2.2}/nmma.egg-info/entry_points.txt +1 -0
  30. {nmma-0.2.1 → nmma-0.2.2}/nmma.egg-info/requires.txt +1 -1
  31. nmma-0.2.2/priors/Me2017.prior +6 -0
  32. nmma-0.2.2/priors/systematics.yaml +19 -0
  33. {nmma-0.2.1 → nmma-0.2.2}/pyproject.toml +2 -1
  34. {nmma-0.2.1 → nmma-0.2.2}/requirements.txt +2 -2
  35. nmma-0.2.1/nmma/__init__.py +0 -1
  36. {nmma-0.2.1 → nmma-0.2.2}/.flake8 +0 -0
  37. {nmma-0.2.1 → nmma-0.2.2}/.gitattributes +0 -0
  38. {nmma-0.2.1 → nmma-0.2.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  39. {nmma-0.2.1 → nmma-0.2.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  40. {nmma-0.2.1 → nmma-0.2.2}/.github/workflows/build-deploy-container.yml +0 -0
  41. {nmma-0.2.1 → nmma-0.2.2}/.github/workflows/delete-branch-cache.yml +0 -0
  42. {nmma-0.2.1 → nmma-0.2.2}/.github/workflows/deploy-github-pages.yml +0 -0
  43. {nmma-0.2.1 → nmma-0.2.2}/.github/workflows/publish-to-anaconda.yml +0 -0
  44. {nmma-0.2.1 → nmma-0.2.2}/.github/workflows/publish-to-pypi.yml +0 -0
  45. {nmma-0.2.1 → nmma-0.2.2}/.github/workflows/rst-linter.yml +0 -0
  46. {nmma-0.2.1 → nmma-0.2.2}/.gitignore +0 -0
  47. {nmma-0.2.1 → nmma-0.2.2}/.pep8speaks.yml +0 -0
  48. {nmma-0.2.1 → nmma-0.2.2}/.pre-commit-config.yaml +0 -0
  49. {nmma-0.2.1 → nmma-0.2.2}/CITATION.cff +0 -0
  50. {nmma-0.2.1 → nmma-0.2.2}/Dockerfile +0 -0
  51. {nmma-0.2.1 → nmma-0.2.2}/LICENSE +0 -0
  52. {nmma-0.2.1 → nmma-0.2.2}/MANIFEST.in +0 -0
  53. {nmma-0.2.1 → nmma-0.2.2}/api/Dockerfile +0 -0
  54. {nmma-0.2.1 → nmma-0.2.2}/api/app.py +0 -0
  55. {nmma-0.2.1 → nmma-0.2.2}/api/environment.yml +0 -0
  56. {nmma-0.2.1 → nmma-0.2.2}/api/log.py +0 -0
  57. {nmma-0.2.1 → nmma-0.2.2}/assets/a3d3.png +0 -0
  58. {nmma-0.2.1 → nmma-0.2.2}/assets/erc.png +0 -0
  59. {nmma-0.2.1 → nmma-0.2.2}/assets/nsf.png +0 -0
  60. {nmma-0.2.1 → nmma-0.2.2}/doc/.doctor-rst.yaml +0 -0
  61. {nmma-0.2.1 → nmma-0.2.2}/doc/Cluster_Resources.md +0 -0
  62. {nmma-0.2.1 → nmma-0.2.2}/doc/GW-EM-resampling.md +0 -0
  63. {nmma-0.2.1 → nmma-0.2.2}/doc/Makefile +0 -0
  64. {nmma-0.2.1 → nmma-0.2.2}/doc/_static/.nmma-docs.css.un~ +0 -0
  65. {nmma-0.2.1 → nmma-0.2.2}/doc/_static/favicon-light.png +0 -0
  66. {nmma-0.2.1 → nmma-0.2.2}/doc/_static/light-logo.svg +0 -0
  67. {nmma-0.2.1 → nmma-0.2.2}/doc/_static/nmma-docs.css +0 -0
  68. {nmma-0.2.1 → nmma-0.2.2}/doc/_static/nmma-docs.css~ +0 -0
  69. {nmma-0.2.1 → nmma-0.2.2}/doc/changelog.rst +0 -0
  70. {nmma-0.2.1 → nmma-0.2.2}/doc/combined_analysis.md +0 -0
  71. {nmma-0.2.1 → nmma-0.2.2}/doc/conf.py +0 -0
  72. {nmma-0.2.1 → nmma-0.2.2}/doc/contributing.md +0 -0
  73. {nmma-0.2.1 → nmma-0.2.2}/doc/data_inj_obs.md +0 -0
  74. {nmma-0.2.1 → nmma-0.2.2}/doc/fitting.md +0 -0
  75. {nmma-0.2.1 → nmma-0.2.2}/doc/gw_inference.md +0 -0
  76. {nmma-0.2.1 → nmma-0.2.2}/doc/gwemopt_light_curves_detection.md +0 -0
  77. {nmma-0.2.1 → nmma-0.2.2}/doc/images/Corner_narrow_Bulla.png +0 -0
  78. {nmma-0.2.1 → nmma-0.2.2}/doc/images/ZTF21abjvfbc_corner.png +0 -0
  79. {nmma-0.2.1 → nmma-0.2.2}/doc/images/ZTF21abjvfbc_lightcurves.png +0 -0
  80. {nmma-0.2.1 → nmma-0.2.2}/doc/images/ZTF_corner.png +0 -0
  81. {nmma-0.2.1 → nmma-0.2.2}/doc/images/ZTF_lightcurves.png +0 -0
  82. {nmma-0.2.1 → nmma-0.2.2}/doc/images/corner_samples.png +0 -0
  83. {nmma-0.2.1 → nmma-0.2.2}/doc/images/dark-logo.svg +0 -0
  84. {nmma-0.2.1 → nmma-0.2.2}/doc/images/injection_corner.png +0 -0
  85. {nmma-0.2.1 → nmma-0.2.2}/doc/images/injection_lightcurves.png +0 -0
  86. {nmma-0.2.1 → nmma-0.2.2}/doc/images/light-logo.svg +0 -0
  87. {nmma-0.2.1 → nmma-0.2.2}/doc/images/training_lightcurves.png +0 -0
  88. {nmma-0.2.1 → nmma-0.2.2}/doc/joint_inference.md +0 -0
  89. {nmma-0.2.1 → nmma-0.2.2}/doc/lfi_analysis.md +0 -0
  90. {nmma-0.2.1 → nmma-0.2.2}/doc/models.md +0 -0
  91. {nmma-0.2.1 → nmma-0.2.2}/doc/observing-scenarios-light-curves.md +0 -0
  92. {nmma-0.2.1 → nmma-0.2.2}/doc/quick-start-guide.rst +0 -0
  93. {nmma-0.2.1 → nmma-0.2.2}/doc/training.md +0 -0
  94. {nmma-0.2.1 → nmma-0.2.2}/doc_requirements.txt +0 -0
  95. {nmma-0.2.1 → nmma-0.2.2}/docker-compose.yml +0 -0
  96. {nmma-0.2.1 → nmma-0.2.2}/example_files/NICER/J0030_3spot_RM.txt +0 -0
  97. {nmma-0.2.1 → nmma-0.2.2}/example_files/NICER/NICER+XMM_J0740_RM.txt +0 -0
  98. {nmma-0.2.1 → nmma-0.2.2}/example_files/NICER/NICER_x_XMM_J0740_XPSI_STU_NSX_FIH_radius_mass.txt +0 -0
  99. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF20abwysqy.dat +0 -0
  100. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abdequz.dat +0 -0
  101. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abdhqle.dat +0 -0
  102. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abdpqpq.dat +0 -0
  103. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abinaiu.dat +0 -0
  104. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abisoui.dat +0 -0
  105. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abitmou.dat +0 -0
  106. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abivhns.dat +0 -0
  107. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abjpkvy.dat +0 -0
  108. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abjrhzz.dat +0 -0
  109. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abjrmes.dat +0 -0
  110. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abjtdua.dat +0 -0
  111. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF21abjvfbc.dat +0 -0
  112. {nmma-0.2.1 → nmma-0.2.2}/example_files/candidate_data/ZTF23aaxeacr.dat +0 -0
  113. {nmma-0.2.1 → nmma-0.2.2}/example_files/eos/ALF2.dat +0 -0
  114. {nmma-0.2.1 → nmma-0.2.2}/example_files/lbol/ztf23bqun/23bqun_bbdata.csv +0 -0
  115. {nmma-0.2.1 → nmma-0.2.2}/example_files/lbol/ztf23bqun/Arnett_modified.priors +0 -0
  116. {nmma-0.2.1 → nmma-0.2.2}/example_files/lbol/ztf23bqun/lbol_test_corner.png +0 -0
  117. {nmma-0.2.1 → nmma-0.2.2}/example_files/lbol/ztf23bqun/lbol_test_lightcurves.png +0 -0
  118. {nmma-0.2.1 → nmma-0.2.2}/example_files/lbol/ztf23bqun/run.sh +0 -0
  119. {nmma-0.2.1 → nmma-0.2.2}/example_files/lightcurves/AT2017gfo.dat +0 -0
  120. {nmma-0.2.1 → nmma-0.2.2}/example_files/lightcurves/AT2017gfo_GRB170817A_reduced.dat +0 -0
  121. {nmma-0.2.1 → nmma-0.2.2}/example_files/lightcurves/AT2017gfo_reduced.dat +0 -0
  122. {nmma-0.2.1 → nmma-0.2.2}/example_files/lightcurves/GRB211211A.txt +0 -0
  123. {nmma-0.2.1 → nmma-0.2.2}/example_files/prior/GW170817_AT2017gfo.prior +0 -0
  124. {nmma-0.2.1 → nmma-0.2.2}/example_files/prior/GW170817_AT2017gfo_GRB170817A.prior +0 -0
  125. {nmma-0.2.1 → nmma-0.2.2}/example_files/prior/ZTF_Bu2019lm.prior +0 -0
  126. {nmma-0.2.1 → nmma-0.2.2}/example_files/sim_events/bns_O4_injections.dat +0 -0
  127. {nmma-0.2.1 → nmma-0.2.2}/example_files/sim_events/injections.dat +0 -0
  128. {nmma-0.2.1 → nmma-0.2.2}/example_files/tools/gwem_resampling/GRB211211A_NSBH_posterior_samples.dat +0 -0
  129. {nmma-0.2.1 → nmma-0.2.2}/example_files/tools/gwem_resampling/GRB211211A_posterior_samples.dat +0 -0
  130. {nmma-0.2.1 → nmma-0.2.2}/example_files/tools/gwem_resampling/GWsamples.dat +0 -0
  131. {nmma-0.2.1 → nmma-0.2.2}/example_files/tools/gwem_resampling/GWsamples_NSBH.dat +0 -0
  132. {nmma-0.2.1 → nmma-0.2.2}/example_files/tools/gwem_resampling/gwsamples_generation.py +0 -0
  133. {nmma-0.2.1 → nmma-0.2.2}/example_files/tools/gwem_resampling/posterior_probability.txt +0 -0
  134. {nmma-0.2.1 → nmma-0.2.2}/example_files/yaml/doc_example.yaml +0 -0
  135. {nmma-0.2.1 → nmma-0.2.2}/example_files/zenodo/gw_posteriors.txt +0 -0
  136. {nmma-0.2.1 → nmma-0.2.2}/grb_requirements.txt +0 -0
  137. {nmma-0.2.1 → nmma-0.2.2}/ml_requirements.txt +0 -0
  138. {nmma-0.2.1 → nmma-0.2.2}/nmma/__pycache__/__init__.cpython-37.pyc +0 -0
  139. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/__init__.py +0 -0
  140. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/__pycache__/__init__.cpython-37.pyc +0 -0
  141. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/__pycache__/likelihood.cpython-37.pyc +0 -0
  142. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/__pycache__/model.cpython-37.pyc +0 -0
  143. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/__pycache__/utils.cpython-37.pyc +0 -0
  144. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/analysis_condor.py +0 -0
  145. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/combine_EOS.py +0 -0
  146. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/create_injection_condor.py +0 -0
  147. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/create_injection_slurm.py +0 -0
  148. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/create_lightcurves.py +0 -0
  149. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/create_lightcurves_condor.py +0 -0
  150. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/create_lightcurves_slurm.py +0 -0
  151. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/create_svdmodel.py +0 -0
  152. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/ZTF_revisit_kde_i.joblib +0 -0
  153. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/ZTF_revisit_kde_public.joblib +0 -0
  154. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/ZTF_sampling_public.pkl +0 -0
  155. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/ZTF_uncer_params.pkl +0 -0
  156. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/__init__.py +0 -0
  157. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/__pycache__/__init__.cpython-38.pyc +0 -0
  158. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/lims_ToO_180_g.joblib +0 -0
  159. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/lims_ToO_180_r.joblib +0 -0
  160. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/lims_ToO_300_g.joblib +0 -0
  161. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/lims_ToO_300_r.joblib +0 -0
  162. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/lims_i.joblib +0 -0
  163. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/lims_public_g.joblib +0 -0
  164. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/lims_public_r.joblib +0 -0
  165. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/sampling_ToO_180.pkl +0 -0
  166. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/data/sampling_ToO_300.pkl +0 -0
  167. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/detect_lightcurves.py +0 -0
  168. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/gwem_Hubble_estimate.py +0 -0
  169. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/gwem_resampling.py +0 -0
  170. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/gwem_resampling_condor.py +0 -0
  171. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/gwem_resampling_utils.py +0 -0
  172. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/gwsamples_creation.py +0 -0
  173. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/injection.py +0 -0
  174. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/injection_summary.py +0 -0
  175. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/io.py +0 -0
  176. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/lightcurve_marginalization.py +0 -0
  177. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/manual.py +0 -0
  178. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/model_lbol.py +0 -0
  179. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/model_parameters.py +0 -0
  180. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/svdmodel_benchmark.py +0 -0
  181. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/training.py +0 -0
  182. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/utils_lbol.py +0 -0
  183. {nmma-0.2.1 → nmma-0.2.2}/nmma/em/validate_lightcurve.py +0 -0
  184. {nmma-0.2.1 → nmma-0.2.2}/nmma/eos/__init__.py +0 -0
  185. {nmma-0.2.1 → nmma-0.2.2}/nmma/eos/__pycache__/__init__.cpython-37.pyc +0 -0
  186. {nmma-0.2.1 → nmma-0.2.2}/nmma/eos/__pycache__/eos.cpython-37.pyc +0 -0
  187. {nmma-0.2.1 → nmma-0.2.2}/nmma/eos/__pycache__/tov.cpython-37.pyc +0 -0
  188. {nmma-0.2.1 → nmma-0.2.2}/nmma/eos/__pycache__/utils.cpython-37.pyc +0 -0
  189. {nmma-0.2.1 → nmma-0.2.2}/nmma/eos/create_injection.py +0 -0
  190. {nmma-0.2.1 → nmma-0.2.2}/nmma/eos/eos.py +0 -0
  191. {nmma-0.2.1 → nmma-0.2.2}/nmma/eos/tov.py +0 -0
  192. {nmma-0.2.1 → nmma-0.2.2}/nmma/eos/utils.py +0 -0
  193. {nmma-0.2.1 → nmma-0.2.2}/nmma/gw/likelihood.py +0 -0
  194. {nmma-0.2.1 → nmma-0.2.2}/nmma/joint/__init__.py +0 -0
  195. {nmma-0.2.1 → nmma-0.2.2}/nmma/joint/__pycache__/__init__.cpython-37.pyc +0 -0
  196. {nmma-0.2.1 → nmma-0.2.2}/nmma/joint/__pycache__/constraints.cpython-37.pyc +0 -0
  197. {nmma-0.2.1 → nmma-0.2.2}/nmma/joint/__pycache__/conversion.cpython-37.pyc +0 -0
  198. {nmma-0.2.1 → nmma-0.2.2}/nmma/joint/__pycache__/likelihood.cpython-37.pyc +0 -0
  199. {nmma-0.2.1 → nmma-0.2.2}/nmma/joint/constraints.py +0 -0
  200. {nmma-0.2.1 → nmma-0.2.2}/nmma/joint/likelihood.py +0 -0
  201. {nmma-0.2.1 → nmma-0.2.2}/nmma/joint/maximum_mass_constraint.py +0 -0
  202. {nmma-0.2.1 → nmma-0.2.2}/nmma/joint/maximum_mass_constraint_utils.py +0 -0
  203. {nmma-0.2.1 → nmma-0.2.2}/nmma/mlmodel/dataprocessing.py +0 -0
  204. {nmma-0.2.1 → nmma-0.2.2}/nmma/mlmodel/embedding.py +0 -0
  205. {nmma-0.2.1 → nmma-0.2.2}/nmma/mlmodel/frozen-flow-weights.pth +0 -0
  206. {nmma-0.2.1 → nmma-0.2.2}/nmma/mlmodel/inference.py +0 -0
  207. {nmma-0.2.1 → nmma-0.2.2}/nmma/mlmodel/normalizingflows.py +0 -0
  208. {nmma-0.2.1 → nmma-0.2.2}/nmma/mlmodel/resnet.py +0 -0
  209. {nmma-0.2.1 → nmma-0.2.2}/nmma/mlmodel/similarity_embedding_weights.pth +0 -0
  210. {nmma-0.2.1 → nmma-0.2.2}/nmma/pbilby/analysis/__init__.py +0 -0
  211. {nmma-0.2.1 → nmma-0.2.2}/nmma/pbilby/analysis/analysis_run.py +0 -0
  212. {nmma-0.2.1 → nmma-0.2.2}/nmma/pbilby/analysis/likelihood.py +0 -0
  213. {nmma-0.2.1 → nmma-0.2.2}/nmma/pbilby/analysis/main.py +0 -0
  214. {nmma-0.2.1 → nmma-0.2.2}/nmma/pbilby/generation.py +0 -0
  215. {nmma-0.2.1 → nmma-0.2.2}/nmma/pbilby/parser/__init__.py +0 -0
  216. {nmma-0.2.1 → nmma-0.2.2}/nmma/pbilby/parser/analysis.py +0 -0
  217. {nmma-0.2.1 → nmma-0.2.2}/nmma/pbilby/parser/generation.py +0 -0
  218. {nmma-0.2.1 → nmma-0.2.2}/nmma/pbilby/parser/shared.py +0 -0
  219. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/__init__.py +0 -0
  220. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/Bu2019lm_injection.json +0 -0
  221. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/Bu2019nsbh/ztfr.joblib +0 -0
  222. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/Bu2019nsbh.joblib +0 -0
  223. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/Bu2019nsbh_tf/ztfr.h5 +0 -0
  224. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/GW+KN+GRB_posterior +0 -0
  225. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/Ka2017_injection.json +0 -0
  226. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/Me2017_injection.json +0 -0
  227. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/TrPi2018_pinned_parameters.prior +0 -0
  228. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/ZTF23aaxeacr_partial.csv +0 -0
  229. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.001_mejwind0.010_phi45_45.6.dat +0 -0
  230. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.001_mejwind0.030_phi45_45.6.dat +0 -0
  231. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.001_mejwind0.050_phi45_45.6.dat +0 -0
  232. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.001_mejwind0.070_phi45_45.6.dat +0 -0
  233. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.001_mejwind0.090_phi45_45.6.dat +0 -0
  234. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.001_mejwind0.110_phi45_45.6.dat +0 -0
  235. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.001_mejwind0.130_phi45_45.6.dat +0 -0
  236. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.005_mejwind0.010_phi45_45.6.dat +0 -0
  237. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.005_mejwind0.030_phi45_45.6.dat +0 -0
  238. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.005_mejwind0.050_phi45_45.6.dat +0 -0
  239. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.005_mejwind0.070_phi45_45.6.dat +0 -0
  240. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.005_mejwind0.090_phi45_45.6.dat +0 -0
  241. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.005_mejwind0.110_phi45_45.6.dat +0 -0
  242. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.005_mejwind0.130_phi45_45.6.dat +0 -0
  243. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.010_mejwind0.010_phi45_45.6.dat +0 -0
  244. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.010_mejwind0.030_phi45_45.6.dat +0 -0
  245. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.010_mejwind0.050_phi45_45.6.dat +0 -0
  246. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.010_mejwind0.070_phi45_45.6.dat +0 -0
  247. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.010_mejwind0.090_phi45_45.6.dat +0 -0
  248. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.010_mejwind0.110_phi45_45.6.dat +0 -0
  249. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.010_mejwind0.130_phi45_45.6.dat +0 -0
  250. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.020_mejwind0.010_phi45_45.6.dat +0 -0
  251. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.020_mejwind0.030_phi45_45.6.dat +0 -0
  252. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.020_mejwind0.050_phi45_45.6.dat +0 -0
  253. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.020_mejwind0.070_phi45_45.6.dat +0 -0
  254. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.020_mejwind0.090_phi45_45.6.dat +0 -0
  255. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.020_mejwind0.110_phi45_45.6.dat +0 -0
  256. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/bulla/nsns_nph1.0e+06_mejdyn0.020_mejwind0.130_phi45_45.6.dat +0 -0
  257. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_macro/1.dat +0 -0
  258. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_macro/10.dat +0 -0
  259. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_macro/2.dat +0 -0
  260. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_macro/3.dat +0 -0
  261. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_macro/4.dat +0 -0
  262. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_macro/5.dat +0 -0
  263. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_macro/6.dat +0 -0
  264. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_macro/7.dat +0 -0
  265. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_macro/8.dat +0 -0
  266. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_macro/9.dat +0 -0
  267. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_micro/1.dat +0 -0
  268. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_micro/10.dat +0 -0
  269. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_micro/2.dat +0 -0
  270. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_micro/3.dat +0 -0
  271. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_micro/4.dat +0 -0
  272. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_micro/5.dat +0 -0
  273. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_micro/6.dat +0 -0
  274. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_micro/7.dat +0 -0
  275. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_micro/8.dat +0 -0
  276. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/eos_micro/9.dat +0 -0
  277. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/data/lowmass_collapsar_updated.h5 +0 -0
  278. {nmma-0.2.1/priors → nmma-0.2.2/nmma/tests/data/multi_config_analysis}/Me2017.prior +0 -0
  279. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/injections.py +0 -0
  280. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/maximum_mass.py +0 -0
  281. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/models.py +0 -0
  282. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/tools.py +0 -0
  283. {nmma-0.2.1 → nmma-0.2.2}/nmma/tests/training.py +0 -0
  284. {nmma-0.2.1 → nmma-0.2.2}/nmma/utils/__init__.py +0 -0
  285. {nmma-0.2.1 → nmma-0.2.2}/nmma/utils/gitlab.py +0 -0
  286. {nmma-0.2.1 → nmma-0.2.2}/nmma/utils/models.py +0 -0
  287. {nmma-0.2.1 → nmma-0.2.2}/nmma/utils/models_tools.py +0 -0
  288. {nmma-0.2.1 → nmma-0.2.2}/nmma.egg-info/dependency_links.txt +0 -0
  289. {nmma-0.2.1 → nmma-0.2.2}/nmma.egg-info/top_level.txt +0 -0
  290. {nmma-0.2.1 → nmma-0.2.2}/priors/AnBa2022.prior +0 -0
  291. {nmma-0.2.1 → nmma-0.2.2}/priors/AnBa2022_sparse.prior +0 -0
  292. {nmma-0.2.1 → nmma-0.2.2}/priors/Bu2019lm.prior +0 -0
  293. {nmma-0.2.1 → nmma-0.2.2}/priors/Bu2019lm_TrPi2018GRB211211A.prior +0 -0
  294. {nmma-0.2.1 → nmma-0.2.2}/priors/Bu2019nsbh.prior +0 -0
  295. {nmma-0.2.1 → nmma-0.2.2}/priors/Bu2019nsbh_TrPi2018_GRB211211A.prior +0 -0
  296. {nmma-0.2.1 → nmma-0.2.2}/priors/Bu2022Ye.prior +0 -0
  297. {nmma-0.2.1 → nmma-0.2.2}/priors/Bu2023Ye.prior +0 -0
  298. {nmma-0.2.1 → nmma-0.2.2}/priors/GWBNS.prior +0 -0
  299. {nmma-0.2.1 → nmma-0.2.2}/priors/GWNSBH.prior +0 -0
  300. {nmma-0.2.1 → nmma-0.2.2}/priors/Ka2017.prior +0 -0
  301. {nmma-0.2.1 → nmma-0.2.2}/priors/LANL2022.prior +0 -0
  302. {nmma-0.2.1 → nmma-0.2.2}/priors/Piro2021.prior +0 -0
  303. {nmma-0.2.1 → nmma-0.2.2}/priors/Sr2023.prior +0 -0
  304. {nmma-0.2.1 → nmma-0.2.2}/priors/TrPi2018.prior +0 -0
  305. {nmma-0.2.1 → nmma-0.2.2}/priors/TrPi2018_onaxis.prior +0 -0
  306. {nmma-0.2.1 → nmma-0.2.2}/priors/ZTF_lgrb.prior +0 -0
  307. {nmma-0.2.1 → nmma-0.2.2}/priors/ZTF_sgrb.prior +0 -0
  308. {nmma-0.2.1 → nmma-0.2.2}/priors/injec_alspin.prior +0 -0
  309. {nmma-0.2.1 → nmma-0.2.2}/priors/maximum_mass_resampling.prior +0 -0
  310. {nmma-0.2.1 → nmma-0.2.2}/priors/salt2.prior +0 -0
  311. {nmma-0.2.1 → nmma-0.2.2}/priors/sncosmo-generic.prior +0 -0
  312. {nmma-0.2.1 → nmma-0.2.2}/priors/sncosmo-generic_TrPi2018.prior +0 -0
  313. {nmma-0.2.1 → nmma-0.2.2}/production_requirements.txt +0 -0
  314. {nmma-0.2.1 → nmma-0.2.2}/sampler_requirements.txt +0 -0
  315. {nmma-0.2.1 → nmma-0.2.2}/setup.cfg +0 -0
  316. {nmma-0.2.1 → nmma-0.2.2}/sklearn_requirements.txt +0 -0
  317. {nmma-0.2.1 → nmma-0.2.2}/slurm.sub +0 -0
  318. {nmma-0.2.1 → nmma-0.2.2}/tf_requirements.txt +0 -0
  319. {nmma-0.2.1 → nmma-0.2.2}/tools/__init__.py +0 -0
  320. {nmma-0.2.1 → nmma-0.2.2}/tools/analysis_slurm.py +0 -0
  321. {nmma-0.2.1 → nmma-0.2.2}/tools/convert_skyportal_lcs.py +0 -0
  322. {nmma-0.2.1 → nmma-0.2.2}/tools/corner_plot.py +0 -0
  323. {nmma-0.2.1 → nmma-0.2.2}/tools/make_lcs.py +0 -0
  324. {nmma-0.2.1 → nmma-0.2.2}/tools/make_lcs_LANL.py +0 -0
  325. {nmma-0.2.1 → nmma-0.2.2}/tools/make_lcs_hdf5.py +0 -0
  326. {nmma-0.2.1 → nmma-0.2.2}/tools/make_lcs_kasen.py +0 -0
  327. {nmma-0.2.1 → nmma-0.2.2}/tools/plot_svdmodel_benchmarks.py +0 -0
  328. {nmma-0.2.1 → nmma-0.2.2}/tools/resample_grid.py +0 -0
  329. {nmma-0.2.1 → nmma-0.2.2}/tools/tf_training_calls.sh +0 -0
  330. {nmma-0.2.1 → nmma-0.2.2}/tutorials/README.md +0 -0
  331. {nmma-0.2.1 → nmma-0.2.2}/tutorials/tutorial-KN-models-training.ipynb +0 -0
  332. {nmma-0.2.1 → nmma-0.2.2}/tutorials/tutorial-lightcurve_simulation.ipynb +0 -0
@@ -111,7 +111,7 @@ jobs:
111
111
  if: matrix.os == 'macos-latest'
112
112
  run: |
113
113
  conda install -c conda-forge pyfftw c-compiler ligo-segments python-ligo-lw
114
- echo "FC=$(which gfortran-11)" >> $GITHUB_ENV
114
+ echo "FC=$(which gfortran-14)" >> $GITHUB_ENV
115
115
  echo "CC=$(which gcc)" >> $GITHUB_ENV
116
116
  echo "CXX=$(which g++)" >> $GITHUB_ENV
117
117
 
@@ -119,7 +119,8 @@ jobs:
119
119
  if: matrix.os == 'ubuntu-latest'
120
120
  run: |
121
121
  sudo apt-get update
122
- sudo apt-get install -y texlive texlive-latex-extra texlive-fonts-recommended dvipng cm-super
122
+ sudo apt-get install -y texlive texlive-latex-extra texlive-fonts-recommended dvipng cm-super python3-mpi4py
123
+
123
124
  - name: Install Python dependencies
124
125
  run: |
125
126
  python -m pip install --upgrade git+https://github.com/bitranox/wrapt_timeout_decorator.git
@@ -48,7 +48,7 @@ jobs:
48
48
 
49
49
  - name: Install NMMA (base)
50
50
  run: |
51
- python -m pip install 'nmma @ git+https://github.com/sahiljhawar/nmma.git@dependencies'
51
+ python -m pip install nmma
52
52
 
53
53
  - name: Verify base NMMA installation
54
54
  run: |
@@ -56,30 +56,30 @@ jobs:
56
56
 
57
57
  - name: Install and verify NMMA [grb]
58
58
  run: |
59
- python -m pip install 'nmma[grb] @ git+https://github.com/sahiljhawar/nmma.git@dependencies'
59
+ python -m pip install 'nmma[grb]'
60
60
  python -c "import nmma, afterglowpy; print(f'Successfully imported {nmma.__name__}, {afterglowpy.__name__}')"
61
61
 
62
62
  - name: Install and verify NMMA [production]
63
63
  run: |
64
- python -m pip install 'nmma[production] @ git+https://github.com/sahiljhawar/nmma.git@dependencies'
64
+ python -m pip install 'nmma[production]'
65
65
  python -c "import nmma, parallel_bilby, nestcheck, mpi4py; print(f'Successfully imported {nmma.__name__}, {parallel_bilby.__name__}, {nestcheck.__name__}, {mpi4py.__name__}')"
66
66
 
67
67
  - name: Install and verify NMMA [neuralnet]
68
68
  run: |
69
- python -m pip install 'nmma[neuralnet] @ git+https://github.com/sahiljhawar/nmma.git@dependencies'
69
+ python -m pip install 'nmma[neuralnet]'
70
70
  python -c "import nmma, torch, nflows, torchvision; print(f'Successfully imported {nmma.__name__}, {torch.__name__}, {nflows.__name__}, {torchvision.__name__}')"
71
71
 
72
72
  - name: Install and verify NMMA [tf]
73
73
  run: |
74
- python -m pip install 'nmma[tf] @ git+https://github.com/sahiljhawar/nmma.git@dependencies'
74
+ python -m pip install 'nmma[tf]'
75
75
  python -c "import nmma, tensorflow; print(f'Successfully imported {nmma.__name__}, {tensorflow.__name__}')"
76
76
 
77
77
  - name: Install and verify NMMA [sklearn]
78
78
  run: |
79
- python -m pip install 'nmma[sklearn] @ git+https://github.com/sahiljhawar/nmma.git@dependencies'
79
+ python -m pip install 'nmma[sklearn]'
80
80
  python -c "import nmma, sklearn; print(f'Successfully imported {nmma.__name__}, {sklearn.__name__}')"
81
81
 
82
82
  - name: Install and verify NMMA [sampler]
83
83
  run: |
84
- python -m pip install 'nmma[sampler] @ git+https://github.com/sahiljhawar/nmma.git@dependencies'
84
+ python -m pip install 'nmma[sampler]'
85
85
  python -c "import nmma, ultranest; print(f'Successfully imported {nmma.__name__}, {ultranest.__name__}')"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nmma
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: A nuclear physics multi-messenger Bayesian inference library
5
5
  Author-email: "Peter Tsun Ho Pang, Michael Coughlin, Tim Dietrich, Ingo Tews" <nuclear_multimessenger_astronomy@googlegroups.com>
6
6
  License: GPLv3
@@ -35,7 +35,7 @@ Requires-Dist: numpy>=1.9
35
35
  Requires-Dist: matplotlib<3.8,>=2.0
36
36
  Requires-Dist: scipy>=1.10
37
37
  Requires-Dist: pandas<2.0,>=1.3.4
38
- Requires-Dist: astropy>=4.3.1
38
+ Requires-Dist: astropy>=5.3.4
39
39
  Requires-Dist: pymultinest
40
40
  Requires-Dist: sncosmo
41
41
  Requires-Dist: dust_extinction
@@ -133,6 +133,18 @@ When utilizing this code for a publication, kindly make a reference to the packa
133
133
  url={https://doi.org/10.1038/s41467-023-43932-6}
134
134
  }
135
135
  ```
136
+ If you are using the systematics error, please also cite the paper [A data-driven approach for modeling the temporal and spectral evolution of kilonova systematic uncertainties](https://arxiv.org/abs/2410.21978). The BibTeX entry for the paper is:
137
+ ```bibtex
138
+ @article{Jhawar:2024ezm,
139
+ author = "Jhawar, Sahil and Wouters, Thibeau and Pang, Peter T. H. and Bulla, Mattia and Coughlin, Michael W. and Dietrich, Tim",
140
+ title = "{A data-driven approach for modeling the temporal and spectral evolution of kilonova systematic uncertainties}",
141
+ eprint = "2410.21978",
142
+ archivePrefix = "arXiv",
143
+ primaryClass = "astro-ph.HE",
144
+ month = "10",
145
+ year = "2024"
146
+ }
147
+ ```
136
148
 
137
149
  ### Acknowledgments
138
150
  If you benefited from participating in our community, we ask that you please acknowledge the Nuclear Multi-Messenger Astronomy collaboration, and particular individuals who helped you, in any publications.
@@ -54,6 +54,18 @@ When utilizing this code for a publication, kindly make a reference to the packa
54
54
  url={https://doi.org/10.1038/s41467-023-43932-6}
55
55
  }
56
56
  ```
57
+ If you are using the systematics error, please also cite the paper [A data-driven approach for modeling the temporal and spectral evolution of kilonova systematic uncertainties](https://arxiv.org/abs/2410.21978). The BibTeX entry for the paper is:
58
+ ```bibtex
59
+ @article{Jhawar:2024ezm,
60
+ author = "Jhawar, Sahil and Wouters, Thibeau and Pang, Peter T. H. and Bulla, Mattia and Coughlin, Michael W. and Dietrich, Tim",
61
+ title = "{A data-driven approach for modeling the temporal and spectral evolution of kilonova systematic uncertainties}",
62
+ eprint = "2410.21978",
63
+ archivePrefix = "arXiv",
64
+ primaryClass = "astro-ph.HE",
65
+ month = "10",
66
+ year = "2024"
67
+ }
68
+ ```
57
69
 
58
70
  ### Acknowledgments
59
71
  If you benefited from participating in our community, we ask that you please acknowledge the Nuclear Multi-Messenger Astronomy collaboration, and particular individuals who helped you, in any publications.
@@ -485,6 +485,7 @@ User Guide
485
485
  models
486
486
  training
487
487
  data_inj_obs
488
+ systematics
488
489
  fitting
489
490
  lfi_analysis
490
491
  gw_inference
@@ -0,0 +1,87 @@
1
+
2
+ Systematics Uncertainties
3
+ =========================
4
+
5
+ NMMA currently uses ``--error-budget`` to specify the constant systematic uncertainties to be added to the likelihood quadrature.
6
+
7
+ However, it is now possible to use systematic error (:math:`\sigma_{sys}`) prior in form of a freely sampled parameter, time dependent and/or filter dependent systematic error. This can done by specifying the file path using the ``--systematics-file`` in ``lightcurve-analysis`` command.
8
+
9
+ For more information on systematics error, please refer to the `paper <https://arxiv.org/abs/2410.21978>`__.
10
+
11
+ The following are the examples of the systematics file:
12
+
13
+ Example 1: Freely sampled (time independent) systematic error
14
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15
+
16
+ In this case the systematic error is freely sampled and is not dependent on time or filter.
17
+
18
+ .. code:: yaml
19
+
20
+ config:
21
+ withTime:
22
+ value: false
23
+ filters:
24
+ - null
25
+ time_nodes: 4
26
+ type: Uniform
27
+ minimum: 0
28
+ maximum: 2
29
+ withoutTime:
30
+ value: true
31
+ type: Uniform
32
+ minimum: 0
33
+ maximum: 2
34
+
35
+ Example 2: Time dependent systematic error
36
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
37
+
38
+ In this configuration, a single systematic error is applied across all filters.
39
+
40
+ .. code:: yaml
41
+
42
+ config:
43
+ withTime:
44
+ value: true
45
+ filters:
46
+ - null
47
+ time_nodes: 4
48
+ type: Uniform
49
+ minimum: 0
50
+ maximum: 2
51
+ withoutTime:
52
+ value: false
53
+ type: Uniform
54
+ minimum: 0
55
+ maximum: 2
56
+
57
+
58
+ Example 3: Time and filter dependent systematic error
59
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
60
+
61
+ In this configuration, the ``sdssu`` and ``ztfr`` filters are sampled together for systematic errors, while the ``2massks`` filter is sampled independently. All other filters are grouped and sampled together
62
+
63
+ .. code:: yaml
64
+
65
+ config:
66
+ withTime:
67
+ value: true
68
+ filters:
69
+ - [sdssu, ztfr]
70
+ - [2massks]
71
+ - null
72
+ time_nodes: 4
73
+ type: Uniform
74
+ minimum: 0
75
+ maximum: 2
76
+ withoutTime:
77
+ value: false
78
+ type: Uniform
79
+ minimum: 0
80
+ maximum: 2
81
+
82
+
83
+ Distribution types
84
+ ==================
85
+
86
+ Distribution can be of any of the ``analytical`` prior from `bilby <https://git.ligo.org/lscsoft/bilby>`__.
87
+ Please refer to bilby documentation for more information on the available distribution type and their usage. Only positional arguments are required for any of the distrbutions.
@@ -0,0 +1,75 @@
1
+ Me2017_1:
2
+ model: Me2017
3
+ outdir: outdir_1
4
+ label: injection
5
+ prior: ../../priors/Me2017.prior
6
+ tmin: 0.1
7
+ tmax: 20
8
+ dt: 0.5
9
+ error-budget: 1
10
+ nlive: 40
11
+ Ebv-max: 0
12
+ injection: ./injection.json
13
+ injection-num: 0
14
+ injection-outfile: outdir_1/lc.csv
15
+ generation-seed: 42
16
+ filters: ztfg,ztfr,ztfi
17
+ remove-nondetections: True
18
+ #process-per-config: 4
19
+
20
+ Me2017_2:
21
+ model: Me2017
22
+ outdir: outdir_2
23
+ label: injection
24
+ prior: ../../priors/Me2017.prior
25
+ tmin: 0.1
26
+ tmax: 20
27
+ dt: 0.5
28
+ error-budget: 1
29
+ nlive: 40
30
+ Ebv-max: 0
31
+ injection: ./injection.json
32
+ injection-num: 0
33
+ injection-outfile: outdir_2/lc.csv
34
+ generation-seed: 42
35
+ filters: ztfg,ztfr,ztfi
36
+ remove-nondetections: True
37
+ #process-per-config: 5
38
+
39
+ Me2017_3:
40
+ model: Me2017
41
+ outdir: outdir_3
42
+ label: injection
43
+ prior: ../../priors/Me2017.prior
44
+ tmin: 0.1
45
+ tmax: 20
46
+ dt: 0.5
47
+ error-budget: 1
48
+ nlive: 40
49
+ Ebv-max: 0
50
+ injection: ./injection.json
51
+ injection-num: 0
52
+ injection-outfile: outdir_3/lc.csv
53
+ generation-seed: 42
54
+ filters: ztfg,ztfr,ztfi
55
+ remove-nondetections: True
56
+ #process-per-config: 6
57
+
58
+ Me2017_4:
59
+ model: Me2017
60
+ outdir: outdir_4
61
+ label: injection
62
+ prior: ../../priors/Me2017.prior
63
+ tmin: 0.1
64
+ tmax: 20
65
+ dt: 0.5
66
+ error-budget: 1
67
+ nlive: 40
68
+ Ebv-max: 0
69
+ injection: ./injection.json
70
+ injection-num: 0
71
+ injection-outfile: outdir_4/lc.csv
72
+ generation-seed: 42
73
+ filters: ztfg,ztfr,ztfi
74
+ remove-nondetections: True
75
+ #process-per-config: 7
@@ -0,0 +1,31 @@
1
+ {
2
+ "injections": {
3
+ "__dataframe__": true,
4
+ "content": {
5
+ "simulation_id": [
6
+ 0
7
+ ],
8
+ "luminosity_distance": [
9
+ 152.52372678074587
10
+ ],
11
+ "beta": [
12
+ 3.1674793717549354
13
+ ],
14
+ "log10_kappa_r": [
15
+ 1.9033736926068743
16
+ ],
17
+ "timeshift": [
18
+ -1.640734750742769
19
+ ],
20
+ "log10_vej": [
21
+ -1.0471069387482033
22
+ ],
23
+ "log10_mej": [
24
+ -2.9158814967880233
25
+ ],
26
+ "geocent_time": [
27
+ 0.09662692256248354
28
+ ]
29
+ }
30
+ }
31
+ }
@@ -0,0 +1 @@
1
+ __version__ = "0.2.2"
@@ -24,26 +24,6 @@ from .prior import create_prior_from_args
24
24
  from .utils import getFilteredMag, dataProcess
25
25
  from .io import loadEvent
26
26
 
27
- # import functions
28
- from ..mlmodel.dataprocessing import gen_prepend_filler, gen_append_filler, pad_the_data
29
- from ..mlmodel.resnet import ResNet
30
- from ..mlmodel.embedding import SimilarityEmbedding
31
- from ..mlmodel.normalizingflows import normflow_params
32
- from ..mlmodel.inference import cast_as_bilby_result
33
-
34
- # need to add these packages:
35
- import torch
36
- import torch.nn as nn
37
- from torch.utils.data import Dataset, DataLoader, TensorDataset, random_split
38
- import torch.nn.functional as F
39
- from nflows.nn.nets.resnet import ResidualNet
40
- from nflows import transforms, distributions, flows
41
- from nflows.distributions import StandardNormal
42
- from nflows.flows import Flow
43
- from nflows.transforms.autoregressive import MaskedAffineAutoregressiveTransform
44
- from nflows.transforms import CompositeTransform, RandomPermutation
45
- import nflows.utils as torchutils
46
-
47
27
  matplotlib.use("agg")
48
28
 
49
29
 
@@ -440,6 +420,12 @@ def get_parser(**kwargs):
440
420
  action="store_true",
441
421
  default=False,
442
422
  )
423
+ parser.add_argument(
424
+ "--systematics-file",
425
+ metavar="PATH",
426
+ help="Path to systematics configuration file",
427
+ default=None,
428
+ )
443
429
 
444
430
  return parser
445
431
 
@@ -791,6 +777,7 @@ def analysis(args):
791
777
  error_budget=error_budget,
792
778
  verbose=args.verbose,
793
779
  detection_limit=args.detection_limit,
780
+ systematics_file=args.systematics_file
794
781
  )
795
782
 
796
783
  likelihood = OpticalLightCurve(**likelihood_kwargs)
@@ -1175,6 +1162,26 @@ def analysis(args):
1175
1162
 
1176
1163
  def nnanalysis(args):
1177
1164
 
1165
+ # import functions
1166
+ from ..mlmodel.dataprocessing import gen_prepend_filler, gen_append_filler, pad_the_data
1167
+ from ..mlmodel.resnet import ResNet
1168
+ from ..mlmodel.embedding import SimilarityEmbedding
1169
+ from ..mlmodel.normalizingflows import normflow_params
1170
+ from ..mlmodel.inference import cast_as_bilby_result
1171
+
1172
+ # need to add these packages:
1173
+ import torch
1174
+ import torch.nn as nn
1175
+ from torch.utils.data import Dataset, DataLoader, TensorDataset, random_split
1176
+ import torch.nn.functional as F
1177
+ from nflows.nn.nets.resnet import ResidualNet
1178
+ from nflows import transforms, distributions, flows
1179
+ from nflows.distributions import StandardNormal
1180
+ from nflows.flows import Flow
1181
+ from nflows.transforms.autoregressive import MaskedAffineAutoregressiveTransform
1182
+ from nflows.transforms import CompositeTransform, RandomPermutation
1183
+ import nflows.utils as torchutils
1184
+
1178
1185
  # only continue if the Kasen model is selected
1179
1186
  if args.model != "Ka2017":
1180
1187
  print(
@@ -222,6 +222,13 @@ def get_parser(**kwargs):
222
222
  action="store_true",
223
223
  default=False,
224
224
  )
225
+ parser.add_argument( #no use in this script
226
+ "--systematics-file",
227
+ metavar="PATH",
228
+ help="Path to systematics configuration file",
229
+ default=None,
230
+ )
231
+
225
232
  return parser
226
233
 
227
234
 
@@ -4,10 +4,12 @@ import numpy as np
4
4
  import scipy.stats
5
5
  from scipy.interpolate import interp1d
6
6
  from scipy.stats import truncnorm
7
+ from pathlib import Path
8
+ import yaml
7
9
 
8
- from bilby.core.likelihood import Likelihood
9
- from . import utils
10
10
 
11
+ from bilby.core.likelihood import Likelihood
12
+ from . import utils, systematics
11
13
 
12
14
  def truncated_gaussian(m_det, m_err, m_est, lim):
13
15
 
@@ -55,6 +57,7 @@ class OpticalLightCurve(Likelihood):
55
57
  filters,
56
58
  light_curve_data,
57
59
  trigger_time,
60
+ systematics_file,
58
61
  detection_limit=None,
59
62
  error_budget=1.0,
60
63
  tmin=0.0,
@@ -81,6 +84,7 @@ class OpticalLightCurve(Likelihood):
81
84
  light_curve_data, self.filters, self.trigger_time, self.tmin, self.tmax
82
85
  )
83
86
  self.light_curve_data = processedData
87
+ self.systematics_file = systematics_file
84
88
 
85
89
  self.detection_limit = {}
86
90
  if detection_limit:
@@ -144,6 +148,40 @@ class OpticalLightCurve(Likelihood):
144
148
  bounds_error=False,
145
149
  )
146
150
 
151
+ if self.systematics_file is not None:
152
+ yaml_dict = yaml.safe_load(Path(self.systematics_file).read_text())
153
+ systematics.validate_only_one_true(yaml_dict)
154
+
155
+ if yaml_dict["config"]["withTime"]["value"]:
156
+ n = yaml_dict["config"]["withTime"]["time_nodes"]
157
+ time_array = np.round(np.linspace(self.tmin, self.tmax, n), 2)
158
+ yaml_filters = yaml_dict["config"]["withTime"]["filters"]
159
+ systematics.validate_filters(yaml_filters)
160
+
161
+ for filter_group in yaml_filters:
162
+ if isinstance(filter_group, list):
163
+ filt = "___".join(filter_group)
164
+ elif filter_group is None:
165
+ filt = "all"
166
+ else:
167
+ filt = filter_group
168
+
169
+ globals()[f"sys_err_{filt}_array"] = np.array([])
170
+
171
+ for i in range(1, n + 1):
172
+ value = self.parameters.get(f"sys_err_{filt}{i}")
173
+ globals()[f"sys_err_{filt}_array"] = np.append(globals()[f"sys_err_{filt}_array"], value)
174
+
175
+ for filter_group in yaml_dict["config"]["withTime"]["filters"]:
176
+ if isinstance(filter_group, list):
177
+ filt = "___".join(filter_group)
178
+ elif filter_group is None:
179
+ filt = "all"
180
+ else:
181
+ filt = filter_group
182
+ globals()[f"sys_err_{filt}_interped"] = interp1d(time_array, globals()[f"sys_err_{filt}_array"], fill_value="extrapolate", bounds_error=False)
183
+
184
+
147
185
  # compare the estimated light curve and the measured data
148
186
  minus_chisquare_total = 0.0
149
187
  gaussprob_total = 0.0
@@ -153,9 +191,31 @@ class OpticalLightCurve(Likelihood):
153
191
  data_mag = self.light_curve_data[filt][:, 1]
154
192
  data_sigma = self.light_curve_data[filt][:, 2]
155
193
 
194
+ if self.systematics_file is not None:
195
+ if yaml_dict["config"]["withTime"]["value"]:
196
+ yaml_filters = yaml_dict["config"]["withTime"]["filters"]
197
+
198
+ filter_group_finite_idx_match = False
199
+
200
+ if yaml_filters is not None and yaml_filters != []:
201
+ for yaml_filt in yaml_filters:
202
+ if yaml_filt is not None and filt in yaml_filt:
203
+ if len(yaml_filt) == 1:
204
+ filters_to_use = yaml_filt[0]
205
+ else:
206
+ filters_to_use = "___".join(yaml_filt)
207
+ filter_group_finite_idx_match = True
208
+ break
209
+ if not filter_group_finite_idx_match:
210
+ filters_to_use = "all"
211
+ data_sigma = np.sqrt(data_sigma**2 + (globals()[f"sys_err_{filters_to_use}_interped"](data_time)) ** 2)
212
+
213
+ elif yaml_dict["config"]["withoutTime"]["value"]:
214
+ data_sigma = np.sqrt(data_sigma**2 + self.parameters["sys_err"] ** 2)
215
+
156
216
  # include the error budget into calculation
157
- if 'em_syserr' in self.parameters:
158
- data_sigma = np.sqrt(data_sigma**2 + self.parameters['em_syserr']**2)
217
+ elif 'sys_err' in self.parameters:
218
+ data_sigma = np.sqrt(data_sigma**2 + self.parameters['sys_err']**2)
159
219
  else:
160
220
  data_sigma = np.sqrt(data_sigma**2 + self.error_budget[filt]**2)
161
221
 
@@ -186,15 +246,36 @@ class OpticalLightCurve(Likelihood):
186
246
 
187
247
  # evaluate the data with infinite error
188
248
  if len(infIdx) > 0:
189
- if 'em_syserr' in self.parameters:
190
- upperlim_sigma = self.parameters['em_syserr']
191
- gausslogsf = scipy.stats.norm.logsf(
192
- data_mag[infIdx], mag_est[infIdx], upperlim_sigma
193
- )
249
+ if self.systematics_file is not None:
250
+ if yaml_dict["config"]["withTime"]["value"]:
251
+ yaml_filters = yaml_dict["config"]["withTime"]["filters"]
252
+
253
+ filter_group_infinite_idx_match = False
254
+
255
+ if yaml_filters is not None and yaml_filters != []:
256
+ for yaml_filt in yaml_filters:
257
+ if yaml_filt is not None and filt in yaml_filt:
258
+ if len(yaml_filt) == 1:
259
+ upperlim_sigma = globals()[f"sys_err_{yaml_filt}_interped"](data_time)[infIdx]
260
+ else:
261
+ filters_to_use = "___".join(yaml_filt)
262
+ upperlim_sigma = globals()[f"sys_err_{filters_to_use}_interped"](data_time)[infIdx]
263
+ filter_group_infinite_idx_match = True
264
+ break
265
+ if not filter_group_infinite_idx_match:
266
+ filters_to_use = "all"
267
+ upperlim_sigma = globals()[f"sys_err_{filters_to_use}_interped"](data_time)[infIdx]
268
+
269
+ gausslogsf = scipy.stats.norm.logsf(data_mag[infIdx], mag_est[infIdx], upperlim_sigma)
270
+
271
+ elif yaml_dict["config"]["withoutTime"]["value"]:
272
+ upperlim_sigma = self.parameters["sys_err"]
273
+ gausslogsf = scipy.stats.norm.logsf(data_mag[infIdx], mag_est[infIdx], upperlim_sigma)
274
+ elif 'sys_err' in self.parameters:
275
+ upperlim_sigma = self.parameters['sys_err']
276
+ gausslogsf = scipy.stats.norm.logsf(data_mag[infIdx], mag_est[infIdx], upperlim_sigma)
194
277
  else:
195
- gausslogsf = scipy.stats.norm.logsf(
196
- data_mag[infIdx], mag_est[infIdx], self.error_budget[filt]
197
- )
278
+ gausslogsf = scipy.stats.norm.logsf(data_mag[infIdx], mag_est[infIdx], self.error_budget[filt])
198
279
  gaussprob_total += np.sum(gausslogsf)
199
280
 
200
281
  log_prob = minus_chisquare_total + gaussprob_total
@@ -509,6 +509,11 @@ class GRBLightCurveModel(LightCurveMixin):
509
509
  grb_param_dict["epsilon_B"] = 10 ** new_parameters["log10_epsilon_B"]
510
510
  grb_param_dict["z"] = z
511
511
 
512
+ # make sure L0, q and ts are also passed
513
+ for param in ['L0', 'q', 'ts']:
514
+ if param in new_parameters:
515
+ grb_param_dict[param] = new_parameters[param]
516
+
512
517
  if "thetaWing" in new_parameters:
513
518
  grb_param_dict["thetaWing"] = new_parameters["thetaWing"]
514
519
  if new_parameters["thetaWing"] / new_parameters["thetaCore"] > self.resolution: