PycWB 0.25.0__tar.gz → 0.26.0__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 (410) hide show
  1. {pycwb-0.25.0 → pycwb-0.26.0}/.gitlab-ci.yml +19 -18
  2. {pycwb-0.25.0 → pycwb-0.26.0}/.readthedocs.yaml +3 -0
  3. {pycwb-0.25.0 → pycwb-0.26.0}/PKG-INFO +1 -1
  4. {pycwb-0.25.0 → pycwb-0.26.0}/PycWB.egg-info/PKG-INFO +1 -1
  5. {pycwb-0.25.0 → pycwb-0.26.0}/PycWB.egg-info/SOURCES.txt +10 -0
  6. {pycwb-0.25.0 → pycwb-0.26.0}/bin/pycwb +5 -0
  7. pycwb-0.26.0/prototypes/pp_workflow/simple.yaml +43 -0
  8. pycwb-0.26.0/prototypes/pp_workflow/simple_module.yaml +44 -0
  9. pycwb-0.26.0/prototypes/pp_workflow/workflow.yaml +40 -0
  10. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/_version.py +2 -2
  11. pycwb-0.26.0/pycwb/cli/post_process.py +15 -0
  12. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihood/likelihood.py +6 -4
  13. pycwb-0.26.0/pycwb/modules/report/far_rho.py +50 -0
  14. pycwb-0.26.0/pycwb/modules/report/read_results.py +79 -0
  15. pycwb-0.26.0/pycwb/modules/report/report.py +120 -0
  16. pycwb-0.26.0/pycwb/post_production/workflow.py +36 -0
  17. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/network_event.py +18 -5
  18. pycwb-0.26.0/pycwb/vendor/lib/__init__.py +0 -0
  19. pycwb-0.26.0/pycwb/workflow/__init__.py +0 -0
  20. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/subflow/process_job_segment.py +3 -2
  21. {pycwb-0.25.0 → pycwb-0.26.0}/.gitignore +0 -0
  22. {pycwb-0.25.0 → pycwb-0.26.0}/LICENSE +0 -0
  23. {pycwb-0.25.0 → pycwb-0.26.0}/MANIFEST.in +0 -0
  24. {pycwb-0.25.0 → pycwb-0.26.0}/Makefile +0 -0
  25. {pycwb-0.25.0 → pycwb-0.26.0}/PycWB.egg-info/dependency_links.txt +0 -0
  26. {pycwb-0.25.0 → pycwb-0.26.0}/PycWB.egg-info/requires.txt +0 -0
  27. {pycwb-0.25.0 → pycwb-0.26.0}/PycWB.egg-info/top_level.txt +0 -0
  28. {pycwb-0.25.0 → pycwb-0.26.0}/README.md +0 -0
  29. {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/README.md +0 -0
  30. {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/likelihood/README.md +0 -0
  31. {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/likelihood/generate_data_for_likelihood.py +0 -0
  32. {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/likelihood/performance_test_dpf.py +0 -0
  33. {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/likelihood/performance_test_opt_sky.py +0 -0
  34. {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/likelihood/user_parameters_injection.yaml +0 -0
  35. {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/supercluster/README.md +0 -0
  36. {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/supercluster/generate_data.py +0 -0
  37. {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/supercluster/generate_data_2.py +0 -0
  38. {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/supercluster/performance_supercluster.py +0 -0
  39. {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/supercluster/user_parameters_injection.yaml +0 -0
  40. {pycwb-0.25.0 → pycwb-0.26.0}/bin/pycwb_search +0 -0
  41. {pycwb-0.25.0 → pycwb-0.26.0}/bin/pycwb_show +0 -0
  42. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Biorthogonal.cc +0 -0
  43. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Biorthogonal.hh +0 -0
  44. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/CMakeLists.txt +0 -0
  45. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Daubechies.cc +0 -0
  46. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Daubechies.hh +0 -0
  47. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/FourierCoefficients.icc +0 -0
  48. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Haar.cc +0 -0
  49. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Haar.hh +0 -0
  50. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/LineFilter.cc +0 -0
  51. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/LineFilter.hh +0 -0
  52. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Makefile +0 -0
  53. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Meyer.cc +0 -0
  54. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Meyer.hh +0 -0
  55. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Symlet.cc +0 -0
  56. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Symlet.hh +0 -0
  57. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmArray.cc +0 -0
  58. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmArray.hh +0 -0
  59. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmArraySSE.cc +0 -0
  60. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmArraySSE.hh +0 -0
  61. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmObjArray.cc +0 -0
  62. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmObjArray.hh +0 -0
  63. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WDM.cc +0 -0
  64. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WDM.hh +0 -0
  65. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WDMOverlap.cc +0 -0
  66. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WDMOverlap.hh +0 -0
  67. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WaveDWT.cc +0 -0
  68. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WaveDWT.hh +0 -0
  69. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Wavelet.cc +0 -0
  70. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Wavelet.hh +0 -0
  71. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/alm.hh +0 -0
  72. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/build.sh +0 -0
  73. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/cluster.cc +0 -0
  74. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/cluster.hh +0 -0
  75. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/cmake/FindHealpix.cmake +0 -0
  76. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/cmake/FindeBBH.cmake +0 -0
  77. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/cmake/install_function.cmake +0 -0
  78. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/constants.hh +0 -0
  79. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/detector.cc +0 -0
  80. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/detector.hh +0 -0
  81. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/injection.cc +0 -0
  82. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/injection.hh +0 -0
  83. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/lossy.cc +0 -0
  84. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/lossy.hh +0 -0
  85. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/monster.cc +0 -0
  86. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/monster.hh +0 -0
  87. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netcluster.cc +0 -0
  88. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netcluster.hh +0 -0
  89. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netevent.cc +0 -0
  90. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netevent.hh +0 -0
  91. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netpixel.cc +0 -0
  92. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netpixel.hh +0 -0
  93. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/network.cc +0 -0
  94. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/network.hh +0 -0
  95. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/pycwb.hh +0 -0
  96. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/rdfr.cc +0 -0
  97. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/rdfr.hh +0 -0
  98. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/readframe.cc +0 -0
  99. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/readframe.hh +0 -0
  100. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/readfrfile.cc +0 -0
  101. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/readfrfile.hh +0 -0
  102. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/regression.cc +0 -0
  103. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/regression.hh +0 -0
  104. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/skycoord.hh +0 -0
  105. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/skymap.cc +0 -0
  106. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/skymap.hh +0 -0
  107. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/sseries.cc +0 -0
  108. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/sseries.hh +0 -0
  109. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/time.cc +0 -0
  110. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/time.hh +0 -0
  111. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wat.hh +0 -0
  112. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watasm.S +0 -0
  113. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watasm_elf64.o +0 -0
  114. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watavx.hh +0 -0
  115. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watbranch.in +0 -0
  116. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watfun.hh +0 -0
  117. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wathash.in +0 -0
  118. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watplot.cc +0 -0
  119. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watplot.hh +0 -0
  120. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watsse.hh +0 -0
  121. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wattag.in +0 -0
  122. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/waturl.in +0 -0
  123. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watversion.hh.in +0 -0
  124. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavearray.cc +0 -0
  125. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavearray.hh +0 -0
  126. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavecomplex.cc +0 -0
  127. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavecomplex.hh +0 -0
  128. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavecor.cc +0 -0
  129. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavecor.hh +0 -0
  130. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavefft.cc +0 -0
  131. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavefft.hh +0 -0
  132. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavelet_LinkDef.h +0 -0
  133. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavelinefilter.cc +0 -0
  134. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavelinefilter.hh +0 -0
  135. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/waverdc.cc +0 -0
  136. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/waverdc.hh +0 -0
  137. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wseries.cc +0 -0
  138. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wseries.hh +0 -0
  139. {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wslice.hh +0 -0
  140. {pycwb-0.25.0 → pycwb-0.26.0}/docs/0.installation_guide.md +0 -0
  141. {pycwb-0.25.0 → pycwb-0.26.0}/docs/1.initialisation_guide.md +0 -0
  142. {pycwb-0.25.0 → pycwb-0.26.0}/docs/2.test_interactive_multistages_2G_analysis.md +0 -0
  143. {pycwb-0.25.0 → pycwb-0.26.0}/docs/3.run_pycwb_with_yaml_config.md +0 -0
  144. {pycwb-0.25.0 → pycwb-0.26.0}/docs/4.py_cwb_inet_2G.md +0 -0
  145. {pycwb-0.25.0 → pycwb-0.26.0}/docs/5.cwb2G_analyse.md +0 -0
  146. {pycwb-0.25.0 → pycwb-0.26.0}/docs/6.wat_codes_notes.md +0 -0
  147. {pycwb-0.25.0 → pycwb-0.26.0}/docs/Makefile +0 -0
  148. {pycwb-0.25.0 → pycwb-0.26.0}/docs/diagram.py +0 -0
  149. {pycwb-0.25.0 → pycwb-0.26.0}/docs/make.bat +0 -0
  150. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/_static/.keep +0 -0
  151. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/_templates/.keep +0 -0
  152. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/conf.py +0 -0
  153. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/credit.rst +0 -0
  154. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/index.rst +0 -0
  155. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/install.rst +0 -0
  156. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/mod_cwb.rst +0 -0
  157. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/package.rst +0 -0
  158. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/schema.rst +0 -0
  159. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorial_batch_inj.rst +0 -0
  160. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorial_customized_wf_gen.rst +0 -0
  161. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorial_injection.rst +0 -0
  162. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorial_multi_injection.rst +0 -0
  163. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorial_search.rst +0 -0
  164. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorials.rst +0 -0
  165. {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/workflow.png +0 -0
  166. {pycwb-0.25.0 → pycwb-0.26.0}/envs/Dockerfile +0 -0
  167. {pycwb-0.25.0 → pycwb-0.26.0}/envs/environment.yml +0 -0
  168. {pycwb-0.25.0 → pycwb-0.26.0}/envs/mamba/Dockerfile +0 -0
  169. {pycwb-0.25.0 → pycwb-0.26.0}/examples/autoencoder/pycwb_injection.ipynb +0 -0
  170. {pycwb-0.25.0 → pycwb-0.26.0}/examples/autoencoder/user_parameters_injection.yaml +0 -0
  171. {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/generate_parameters.py +0 -0
  172. {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/pycbc_inject/hyperbolicTD/__init__.py +0 -0
  173. {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/pycbc_inject/hyperbolicTD/parameters.py +0 -0
  174. {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/pycbc_inject/hyperbolicTD/waveform.py +0 -0
  175. {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/pycwb_injection.py +0 -0
  176. {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/user_parameters_injection.yaml +0 -0
  177. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/H1_cat0.txt +0 -0
  178. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/H1_cat1.txt +0 -0
  179. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/H1_cat2.txt +0 -0
  180. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/H1_cat4.txt +0 -0
  181. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/L1_cat0.txt +0 -0
  182. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/L1_cat1.txt +0 -0
  183. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/L1_cat2.txt +0 -0
  184. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/L1_cat4.txt +0 -0
  185. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/input/OPBM.period +0 -0
  186. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/input/OPBM_H1.frames +0 -0
  187. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/input/OPBM_L1.frames +0 -0
  188. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/pycwb_mdc.py +0 -0
  189. {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/user_parameters_mdc.yaml +0 -0
  190. {pycwb-0.25.0 → pycwb-0.26.0}/examples/colab/pycWB_GW150914.ipynb +0 -0
  191. {pycwb-0.25.0 → pycwb-0.26.0}/examples/injection/pycwb_injection.ipynb +0 -0
  192. {pycwb-0.25.0 → pycwb-0.26.0}/examples/injection/user_parameters_injection.yaml +0 -0
  193. {pycwb-0.25.0 → pycwb-0.26.0}/examples/injection/wdmXTalk/OverlapCatalog16-1024.bin +0 -0
  194. {pycwb-0.25.0 → pycwb-0.26.0}/examples/lvk_sep_2023/demo.ipynb +0 -0
  195. {pycwb-0.25.0 → pycwb-0.26.0}/examples/lvk_sep_2023/user_parameters.yaml +0 -0
  196. {pycwb-0.25.0 → pycwb-0.26.0}/examples/multiple_injection/pycwb_injection.py +0 -0
  197. {pycwb-0.25.0 → pycwb-0.26.0}/examples/multiple_injection/user_parameters_injection.yaml +0 -0
  198. {pycwb-0.25.0 → pycwb-0.26.0}/examples/pyseobnr_injection/generate_parameters.py +0 -0
  199. {pycwb-0.25.0 → pycwb-0.26.0}/examples/pyseobnr_injection/user_parameters_injection.yaml +0 -0
  200. {pycwb-0.25.0 → pycwb-0.26.0}/examples/pyseobnr_injection/waveform_model/__init__.py +0 -0
  201. {pycwb-0.25.0 → pycwb-0.26.0}/examples/pyseobnr_injection/waveform_model/waveform.py +0 -0
  202. {pycwb-0.25.0 → pycwb-0.26.0}/examples/waveform_reconstruction/reconstruct_waveform_from_cluster.ipynb +0 -0
  203. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/cwb_core/coherence.cc +0 -0
  204. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/cwb_core/coherence.hh +0 -0
  205. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/cwb_core/likelihood.cc +0 -0
  206. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/cwb_core/likelihood.hh +0 -0
  207. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/dag/dag.py +0 -0
  208. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/dag/dask-prefect.py +0 -0
  209. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/dag/prefect_test.py +0 -0
  210. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger/__init__.py +0 -0
  211. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger/server.py +0 -0
  212. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger/visualizition.py +0 -0
  213. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/.eslintrc.cjs +0 -0
  214. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/.gitignore +0 -0
  215. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/.prettierrc.json +0 -0
  216. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/README.md +0 -0
  217. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/index.html +0 -0
  218. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/package-lock.json +0 -0
  219. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/package.json +0 -0
  220. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/public/favicon.ico +0 -0
  221. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/App.vue +0 -0
  222. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/assets/base.css +0 -0
  223. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/assets/cwb_icon_modern_blue_alfa.png +0 -0
  224. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/assets/main.css +0 -0
  225. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/assets/style.css +0 -0
  226. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/HelloWorld.vue +0 -0
  227. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/TheWelcome.vue +0 -0
  228. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/WelcomeItem.vue +0 -0
  229. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/__tests__/HelloWorld.spec.js +0 -0
  230. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/icons/IconCommunity.vue +0 -0
  231. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/icons/IconDocumentation.vue +0 -0
  232. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/icons/IconEcosystem.vue +0 -0
  233. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/icons/IconSupport.vue +0 -0
  234. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/icons/IconTooling.vue +0 -0
  235. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/main.js +0 -0
  236. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/router/index.js +0 -0
  237. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/stores/counter.js +0 -0
  238. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/views/drawflow.vue +0 -0
  239. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/views/nodes/node1.vue +0 -0
  240. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/views/nodes/node2.vue +0 -0
  241. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/views/nodes/node3.vue +0 -0
  242. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/views/nodes/nodeHeader.vue +0 -0
  243. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/vite.config.js +0 -0
  244. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/performance/numba_test.py +0 -0
  245. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/performance/taichi_test.py +0 -0
  246. {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/search.yaml +0 -0
  247. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/__init__.py +0 -0
  248. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/__init__.py +0 -0
  249. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/batch_runner.py +0 -0
  250. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/batch_setup.py +0 -0
  251. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/flow.py +0 -0
  252. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/merge_catalog.py +0 -0
  253. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/run.py +0 -0
  254. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/server.py +0 -0
  255. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/xtalk.py +0 -0
  256. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/config/__init__.py +0 -0
  257. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/config/config.py +0 -0
  258. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/constants/__init__.py +0 -0
  259. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/constants/project_constants.py +0 -0
  260. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/constants/user_parameters_schema.py +0 -0
  261. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/__init__.py +0 -0
  262. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/autoencoder/__init__.py +0 -0
  263. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/autoencoder/autoencoder.py +0 -0
  264. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/autoencoder/cwb_autoencoder.py +0 -0
  265. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/autoencoder/module.yaml +0 -0
  266. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/catalog/__init__.py +0 -0
  267. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/catalog/catalog.py +0 -0
  268. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/catalog/module.yaml +0 -0
  269. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/coherence/__init__.py +0 -0
  270. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/coherence/coherence.py +0 -0
  271. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/coherence/coherence_lite.py +0 -0
  272. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/coherence/module.yaml +0 -0
  273. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/condor/__init__.py +0 -0
  274. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/condor/condor.py +0 -0
  275. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/condor/module.yaml +0 -0
  276. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/__init__.py +0 -0
  277. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/cluster.py +0 -0
  278. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/module.yaml +0 -0
  279. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/pixel.py +0 -0
  280. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/series.py +0 -0
  281. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/sparse_series.py +0 -0
  282. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/data_conditioning/__init__.py +0 -0
  283. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/data_conditioning/data_conditioning.py +0 -0
  284. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/data_conditioning/module.yaml +0 -0
  285. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/data_conditioning/regression.py +0 -0
  286. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/data_conditioning/whitening.py +0 -0
  287. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/energy_threshold/__init__.py +0 -0
  288. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/energy_threshold/threshold.py +0 -0
  289. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/gracedb/__init__.py +0 -0
  290. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/gracedb/gracedb.py +0 -0
  291. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/gracedb/module.yaml +0 -0
  292. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/gracedb/test_gracedb.py +0 -0
  293. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/__init__.py +0 -0
  294. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/dq_segment.py +0 -0
  295. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/frame.py +0 -0
  296. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/job_segment.py +0 -0
  297. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/module.yaml +0 -0
  298. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/plots.py +0 -0
  299. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/super_lag.py +0 -0
  300. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/test_job_segment.py +0 -0
  301. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihood/__init__.py +0 -0
  302. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihood/module.yaml +0 -0
  303. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/__init__.py +0 -0
  304. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/dpf.py +0 -0
  305. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/dpf_cython.pyx +0 -0
  306. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/likelihood.py +0 -0
  307. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/sky_stat.py +0 -0
  308. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/utils.py +0 -0
  309. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/logger/__init__.py +0 -0
  310. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/logger/logger.py +0 -0
  311. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/logger/module.yaml +0 -0
  312. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/multi_resolution_wdm/__init__.py +0 -0
  313. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/multi_resolution_wdm/module.yaml +0 -0
  314. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/multi_resolution_wdm/wdm.py +0 -0
  315. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/__init__.py +0 -0
  316. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/cluster_statistics.py +0 -0
  317. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/event.py +0 -0
  318. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/module.yaml +0 -0
  319. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/spectrogram.py +0 -0
  320. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/waveform.py +0 -0
  321. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_data_quality/__init__.py +0 -0
  322. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_data_quality/module.yaml +0 -0
  323. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_data_quality/plot.py +0 -0
  324. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_map/__init__.py +0 -0
  325. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_map/module.yaml +0 -0
  326. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_map/world_map.py +0 -0
  327. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/__init__.py +0 -0
  328. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/data_check.py +0 -0
  329. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/data_find.py +0 -0
  330. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/mdc.py +0 -0
  331. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/module.yaml +0 -0
  332. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/read_data.py +0 -0
  333. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/reconstruction/__init__.py +0 -0
  334. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/reconstruction/getMRAwaveform.py +0 -0
  335. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/reconstruction/module.yaml +0 -0
  336. {pycwb-0.25.0/pycwb/modules/statistics → pycwb-0.26.0/pycwb/modules/report}/__init__.py +0 -0
  337. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/sparse_series/__init__.py +0 -0
  338. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/sparse_series/module.yaml +0 -0
  339. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/sparse_series/sparse_table.py +0 -0
  340. {pycwb-0.25.0/pycwb/modules/supercluster_naive → pycwb-0.26.0/pycwb/modules/statistics}/__init__.py +0 -0
  341. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/statistics/eff.py +0 -0
  342. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/statistics/eff_plot.py +0 -0
  343. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/statistics/merge.py +0 -0
  344. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/statistics/sigmoid_fit.py +0 -0
  345. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/__init__.py +0 -0
  346. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/module.yaml +0 -0
  347. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/sub_net_cut.py +0 -0
  348. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/super_cluster.py +0 -0
  349. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/supercluster.py +0 -0
  350. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/utils.py +0 -0
  351. {pycwb-0.25.0/pycwb/modules/web_viewer → pycwb-0.26.0/pycwb/modules/supercluster_naive}/__init__.py +0 -0
  352. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/supercluster_naive/supercluster2.py +0 -0
  353. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/superlag/__init__.py +0 -0
  354. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/superlag/module.yaml +0 -0
  355. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/superlag/superlag.py +0 -0
  356. {pycwb-0.25.0/pycwb/modules/workflow_utils → pycwb-0.26.0/pycwb/modules/web_viewer}/__init__.py +0 -0
  357. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/web_viewer/create.py +0 -0
  358. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/web_viewer/module.yaml +0 -0
  359. {pycwb-0.25.0/pycwb/modules/xtalk → pycwb-0.26.0/pycwb/modules/workflow_utils}/__init__.py +0 -0
  360. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/workflow_utils/job_setup.py +0 -0
  361. {pycwb-0.25.0/pycwb/prefect_flow → pycwb-0.26.0/pycwb/modules/xtalk}/__init__.py +0 -0
  362. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/xtalk/monster.py +0 -0
  363. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/xtalk/monster_old.py +0 -0
  364. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/xtalk/xtalk_data.py +0 -0
  365. {pycwb-0.25.0/pycwb/prefect_flow/tasks → pycwb-0.26.0/pycwb/post_production}/__init__.py +0 -0
  366. {pycwb-0.25.0/pycwb/types → pycwb-0.26.0/pycwb/prefect_flow}/__init__.py +0 -0
  367. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/prefect_flow/pycwb_flow.py +0 -0
  368. {pycwb-0.25.0/pycwb/utils → pycwb-0.26.0/pycwb/prefect_flow/tasks}/__init__.py +0 -0
  369. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/prefect_flow/tasks/builtin.py +0 -0
  370. {pycwb-0.25.0/pycwb/utils/conversions → pycwb-0.26.0/pycwb/types}/__init__.py +0 -0
  371. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/data_quality_file.py +0 -0
  372. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/detector.py +0 -0
  373. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/job.py +0 -0
  374. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/network.py +0 -0
  375. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/network_cluster.py +0 -0
  376. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/network_pixel.py +0 -0
  377. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/sparse_series.py +0 -0
  378. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/time_frequency_series.py +0 -0
  379. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/wdm.py +0 -0
  380. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/wdm_xtalk.py +0 -0
  381. {pycwb-0.25.0/pycwb/vendor → pycwb-0.26.0/pycwb/utils}/__init__.py +0 -0
  382. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/async_write.py +0 -0
  383. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/check_ROOT.py +0 -0
  384. {pycwb-0.25.0/pycwb/vendor/autoencoder → pycwb-0.26.0/pycwb/utils/conversions}/__init__.py +0 -0
  385. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/conversions/timeseries.py +0 -0
  386. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/dataclass_object_io.py +0 -0
  387. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/dep_check.py +0 -0
  388. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/generate_params_table.py +0 -0
  389. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/image.py +0 -0
  390. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/module.py +0 -0
  391. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/network.py +0 -0
  392. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/parser.py +0 -0
  393. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/skymap_coord.py +0 -0
  394. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/yaml_helper.py +0 -0
  395. {pycwb-0.25.0/pycwb/vendor/lib → pycwb-0.26.0/pycwb/vendor}/__init__.py +0 -0
  396. {pycwb-0.25.0/pycwb/workflow → pycwb-0.26.0/pycwb/vendor/autoencoder}/__init__.py +0 -0
  397. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/vendor/autoencoder/cwb_autoencoder.h5 +0 -0
  398. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/vendor/example.yaml +0 -0
  399. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/vendor/web_viewer/event_dump.html +0 -0
  400. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/vendor/web_viewer/styles.css +0 -0
  401. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/vendor/web_viewer/viewer.html +0 -0
  402. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/batch.py +0 -0
  403. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/merge.py +0 -0
  404. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/run.py +0 -0
  405. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/subflow/__init__.py +0 -0
  406. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/subflow/postprocess_and_plots.py +0 -0
  407. {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/subflow/prepare_job_runs.py +0 -0
  408. {pycwb-0.25.0 → pycwb-0.26.0}/pyproject.toml +0 -0
  409. {pycwb-0.25.0 → pycwb-0.26.0}/setup.cfg +0 -0
  410. {pycwb-0.25.0 → pycwb-0.26.0}/setup.py +0 -0
@@ -20,7 +20,7 @@ image: buildpack-deps:jammy
20
20
  stages: # List of stages for jobs, and their order of execution
21
21
  - build
22
22
  - deploy
23
- - post-deploy
23
+ #- post-deploy
24
24
 
25
25
  .install_common: &install_common
26
26
  - wget -q https://root.cern/download/root_v6.26.14.Linux-ubuntu22-x86_64-gcc11.4.tar.gz
@@ -64,23 +64,24 @@ publish:
64
64
  - pip install twine
65
65
  - TWINE_PASSWORD=${PYPI_TOKEN} TWINE_USERNAME=__token__ python -m twine upload dist/*.tar.gz
66
66
 
67
- pages:
68
- stage: post-deploy
69
- rules:
70
- - changes:
71
- - docs/**/*
72
- - if: '$CI_COMMIT_TAG'
73
- script:
74
- - *install_common
75
- - pip install pycwb
76
- - ln -fs /usr/share/zoneinfo/Etc/UTC /etc/localtime
77
- - pip install "sphinx<7.0.0" sphinx_rtd_theme
78
- - make doc
79
- - mkdir public
80
- - cp -r docs/build/html/* public/
81
- artifacts:
82
- paths:
83
- - public
67
+ #pages:
68
+ # stage: post-deploy
69
+ # rules:
70
+ # - changes:
71
+ # - docs/**/*
72
+ # - if: '$CI_COMMIT_TAG'
73
+ # script:
74
+ # - *install_common
75
+ # - pip install pycwb
76
+ # - ln -fs /usr/share/zoneinfo/Etc/UTC /etc/localtime
77
+ # - pip install "sphinx<7.0.0" sphinx_rtd_theme
78
+ # - make doc
79
+ # - mkdir public
80
+ # - cp -r docs/build/html/* public/
81
+ # artifacts:
82
+ # paths:
83
+ # - public
84
+
84
85
  #test-job: # This job runs in the test stage.
85
86
  # image: continuumio/miniconda3
86
87
  # stage: test # It only starts when the job in the build stage completes successfully.
@@ -4,6 +4,9 @@ build:
4
4
  os: "ubuntu-22.04"
5
5
  tools:
6
6
  python: "mambaforge-22.9"
7
+ jobs:
8
+ pre_install:
9
+ - git update-index --assume-unchanged envs/environment.yml docs/source/conf.py
7
10
 
8
11
  conda:
9
12
  environment: envs/environment.yml
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PycWB
3
- Version: 0.25.0
3
+ Version: 0.26.0
4
4
  Summary: A Python package for coherent gravitational wave burst analysis
5
5
  Home-page: https://git.ligo.org/yumeng.xu/pycwb
6
6
  Author-email: The PycWB team <yumeng.xu@ligo.org>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PycWB
3
- Version: 0.25.0
3
+ Version: 0.26.0
4
4
  Summary: A Python package for coherent gravitational wave burst analysis
5
5
  Home-page: https://git.ligo.org/yumeng.xu/pycwb
6
6
  Author-email: The PycWB team <yumeng.xu@ligo.org>
@@ -231,6 +231,9 @@ prototypes/messenger-web-interface/src/views/nodes/node3.vue
231
231
  prototypes/messenger-web-interface/src/views/nodes/nodeHeader.vue
232
232
  prototypes/performance/numba_test.py
233
233
  prototypes/performance/taichi_test.py
234
+ prototypes/pp_workflow/simple.yaml
235
+ prototypes/pp_workflow/simple_module.yaml
236
+ prototypes/pp_workflow/workflow.yaml
234
237
  pycwb/__init__.py
235
238
  pycwb/_version.py
236
239
  pycwb/cli/__init__.py
@@ -238,6 +241,7 @@ pycwb/cli/batch_runner.py
238
241
  pycwb/cli/batch_setup.py
239
242
  pycwb/cli/flow.py
240
243
  pycwb/cli/merge_catalog.py
244
+ pycwb/cli/post_process.py
241
245
  pycwb/cli/run.py
242
246
  pycwb/cli/server.py
243
247
  pycwb/cli/xtalk.py
@@ -322,6 +326,10 @@ pycwb/modules/read_data/read_data.py
322
326
  pycwb/modules/reconstruction/__init__.py
323
327
  pycwb/modules/reconstruction/getMRAwaveform.py
324
328
  pycwb/modules/reconstruction/module.yaml
329
+ pycwb/modules/report/__init__.py
330
+ pycwb/modules/report/far_rho.py
331
+ pycwb/modules/report/read_results.py
332
+ pycwb/modules/report/report.py
325
333
  pycwb/modules/sparse_series/__init__.py
326
334
  pycwb/modules/sparse_series/module.yaml
327
335
  pycwb/modules/sparse_series/sparse_table.py
@@ -350,6 +358,8 @@ pycwb/modules/xtalk/__init__.py
350
358
  pycwb/modules/xtalk/monster.py
351
359
  pycwb/modules/xtalk/monster_old.py
352
360
  pycwb/modules/xtalk/xtalk_data.py
361
+ pycwb/post_production/__init__.py
362
+ pycwb/post_production/workflow.py
353
363
  pycwb/prefect_flow/__init__.py
354
364
  pycwb/prefect_flow/pycwb_flow.py
355
365
  pycwb/prefect_flow/tasks/__init__.py
@@ -11,6 +11,7 @@ import pycwb.cli.batch_setup as batch_setup
11
11
  import pycwb.cli.batch_runner as batch_runner
12
12
  import pycwb.cli.xtalk as xtalk
13
13
  import pycwb.cli.merge_catalog as merge_catalog
14
+ import pycwb.cli.post_process as post_process
14
15
 
15
16
  def main():
16
17
  parser = argparse.ArgumentParser(prog='pycwb')
@@ -46,6 +47,10 @@ def main():
46
47
  merge_catalog.init_parser(merge_catalog_parser)
47
48
  merge_catalog_parser.set_defaults(func=merge_catalog.command)
48
49
 
50
+ post_process_parser = subparsers.add_parser('post-process', help='Post process the results')
51
+ post_process.init_parser(post_process_parser)
52
+ post_process_parser.set_defaults(func=post_process.command)
53
+
49
54
  args = parser.parse_args()
50
55
  if hasattr(args, 'func'):
51
56
  args.func(args)
@@ -0,0 +1,43 @@
1
+ global:
2
+ work_dir: /Users/yumengxu/Downloads/pycwb_examples
3
+ steps:
4
+ - action: read_triggers
5
+ args:
6
+ run_dir: background
7
+ filters:
8
+ - "lag[0]>0"
9
+ output_alias: 'background'
10
+ - action: read_live_time
11
+ args:
12
+ run_dir: background
13
+ filters:
14
+ - "lag[0]>0"
15
+ output_alias: 'livetime'
16
+ - action: far_rho # this module will calculate the ifar_rho and pass the output to the downstream modules
17
+ args:
18
+ source: 'background'
19
+ livetime_key: 'livetime'
20
+ ranking_par: rho[0]
21
+ bin_size: 0.0001
22
+ output_alias: 'far_rho'
23
+ - action: read_triggers
24
+ args:
25
+ run_dir: background
26
+ filters:
27
+ - "lag[0]==0"
28
+ output_alias: 'zero_lag'
29
+ - action: read_live_time
30
+ args:
31
+ run_dir: background
32
+ filters:
33
+ - "lag[0]==0"
34
+ output_alias: 'livetime_zerolag'
35
+ - action: report_zero_lag
36
+ args:
37
+ source: 'zero_lag'
38
+ livetime_key: 'livetime_zerolag'
39
+ far_rho_source: 'far_rho'
40
+ - action: report # generate report
41
+ args:
42
+ far_rho_source: 'far_rho'
43
+ output: public/
@@ -0,0 +1,44 @@
1
+ global:
2
+ work_dir: /Users/yumengxu/Downloads/pycwb_examples
3
+ steps:
4
+ - action: report.read_results.read_triggers
5
+ args:
6
+ run_dir: background
7
+ filters:
8
+ - "lag[0]>0"
9
+ output_alias: 'background'
10
+ - action: report.read_results.read_live_time
11
+ args:
12
+ run_dir: background
13
+ filters:
14
+ - "lag[0]>0"
15
+ output_alias: 'livetime'
16
+ - action: report.far_rho.far_rho # this module will calculate the far_rho and pass the output to the downstream modules
17
+ args:
18
+ source: 'background'
19
+ livetime_key: 'livetime'
20
+ ranking_par: rho[0]
21
+ bin_size: 0.0001
22
+ save: far_rho.json
23
+ output_alias: 'far_rho'
24
+ - action: report.read_results.read_triggers
25
+ args:
26
+ run_dir: background
27
+ filters:
28
+ - "lag[0]==0"
29
+ output_alias: 'zero_lag'
30
+ - action: report.read_results.read_live_time
31
+ args:
32
+ run_dir: background
33
+ filters:
34
+ - "lag[0]==0"
35
+ output_alias: 'livetime_zerolag'
36
+ - action: report.report.report_zero_lag
37
+ args:
38
+ source: 'zero_lag'
39
+ livetime_key: 'livetime_zerolag'
40
+ far_rho_source: 'far_rho'
41
+ - action: report.report.report # generate report
42
+ args:
43
+ far_rho_source: 'far_rho'
44
+ output: public/
@@ -0,0 +1,40 @@
1
+ global:
2
+ work_dir: /Users/yumengxu/Downloads/pycwb_examples/non-builtin-waveform
3
+ steps:
4
+ - action: events_filter # this module will filter the event and pass to the downstream modules
5
+ args:
6
+ run_dir: O4_K01_BurstLD_BKG
7
+ conditions:
8
+ - "lag>0" # only process non-zero lag events
9
+ output_alias: 'background'
10
+ - action: events_filter # read the training set and name it as 'training_set'
11
+ args:
12
+ run_dir: O4_K01_BurstLD_SIM_TrainingSet1
13
+ output_alias: 'sim_training_set'
14
+ - action: events_splitter # split the background into bkg_training_set and bkg_test_set
15
+ args:
16
+ source: 'background'
17
+ percent: [0.5, 0.5]
18
+ output_alias: ['bkg_training_set', 'bkg_test_set']
19
+ - action: xgboost_model # take the training set from the upsteam
20
+ args:
21
+ background: ['bkg_training_set']
22
+ simulation: ['sim_training_set']
23
+ config: xgb_config.py
24
+ get_rhor: xgb_get_rhor.py
25
+ name: 'model_v1a'
26
+ - action: xgboost_apply # apply xgb on BKG
27
+ args:
28
+ source: 'bkg_test_set'
29
+ model: 'model_v1a'
30
+ output_alias: 'bkg_test_set.model_v1a'
31
+ - action: ifar_rho # this module will calculate the ifar_rho and pass the output to the downstream modules
32
+ args:
33
+ source: 'bkg_test_set.model_v1a'
34
+ ranking_par: rho[1]
35
+ ranking_par_bin: 0.0001
36
+ output_alias: 'bkg_test_set.model_v1a.ifar'
37
+ - action: report # generate report
38
+ args:
39
+ source: 'bkg_test_set.model_v1a.ifar'
40
+ output: public/
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.25.0'
16
- __version_tuple__ = version_tuple = (0, 25, 0)
15
+ __version__ = version = '0.26.0'
16
+ __version_tuple__ = version_tuple = (0, 26, 0)
@@ -0,0 +1,15 @@
1
+ import os
2
+
3
+
4
+ def init_parser(parser):
5
+ # Add the arguments
6
+ parser.add_argument('workflow_file',
7
+ metavar='file_path',
8
+ type=str,
9
+ help='the path to the workflow file')
10
+
11
+
12
+ def command(args):
13
+ from pycwb.post_production.workflow import run_workflow
14
+
15
+ run_workflow(args.workflow_file)
@@ -11,7 +11,8 @@ from pycwb.types.network_event import Event
11
11
  logger = logging.getLogger(__name__)
12
12
 
13
13
 
14
- def likelihood(config, network, fragment_cluster, lag=0) -> tuple[list[Event], list[Cluster], list[dict]]:
14
+ def likelihood(config, network, fragment_cluster, lag=0, shifts=(0,0,0), job_id=None) \
15
+ -> tuple[list[Event], list[Cluster], list[dict]]:
15
16
  """
16
17
  calculate likelihood for single lag
17
18
 
@@ -56,7 +57,8 @@ def likelihood(config, network, fragment_cluster, lag=0) -> tuple[list[Event], l
56
57
  continue
57
58
 
58
59
  cluster_id = k + 1
59
- event, cluster = _likelihood(config, network, lag, cluster_id, fragment_cluster.dump_cluster(k))
60
+ event, cluster = _likelihood(config, network, lag, cluster_id, fragment_cluster.dump_cluster(k), shifts)
61
+ event.job_id = job_id
60
62
  events.append(event)
61
63
  clusters.append(cluster)
62
64
 
@@ -106,7 +108,7 @@ def likelihood(config, network, fragment_cluster, lag=0) -> tuple[list[Event], l
106
108
  return events, clusters, skymap_statistics
107
109
 
108
110
 
109
- def _likelihood(config, network, lag, cluster_id, fragment_cluster):
111
+ def _likelihood(config, network, lag, cluster_id, fragment_cluster, shifts=(0,0,0)):
110
112
  # dumb variables
111
113
  k = 0
112
114
 
@@ -149,7 +151,7 @@ def _likelihood(config, network, lag, cluster_id, fragment_cluster):
149
151
  cluster = convert_netcluster_to_fragment_clusters(network.get_cluster(lag)).clusters[0]
150
152
 
151
153
  event = Event()
152
- event.output(network.net, k + 1, lag)
154
+ event.output(network.net, k + 1, lag, shifts=shifts)
153
155
 
154
156
  pwc.clean(1)
155
157
 
@@ -0,0 +1,50 @@
1
+ import numpy as np
2
+ import orjson
3
+
4
+
5
+ def far_rho(source, ranking_par, bin_size, livetime_key='livetime', save='far_rho.json', **kwargs):
6
+ print(f"Calculating far and rho for source {source} with ranking parameter {ranking_par} with bin size {bin_size}")
7
+
8
+ if source not in kwargs:
9
+ print(f"Source {source} not found in the results")
10
+ raise ValueError(f"Source {source} not found in the results")
11
+ triggers = kwargs[source]
12
+
13
+ if livetime_key not in kwargs:
14
+ print(f"Live time key {livetime_key} not found in the results")
15
+ raise ValueError(f"Live time key {livetime_key} not found in the results")
16
+ livetime = kwargs[livetime_key]
17
+
18
+ # extract the ranking parameter from the triggers
19
+ if '[' not in ranking_par:
20
+ values = [trigger[ranking_par] for trigger in triggers]
21
+ else:
22
+ base_key, index = ranking_par.split('[')
23
+ index = int(index.rstrip(']'))
24
+ values = [trigger[base_key][index] for trigger in triggers]
25
+
26
+ # remove None in values and print warning with trigger job_id and id
27
+ none_values = [triggers[i] for i, value in enumerate(values) if value is None]
28
+ if none_values:
29
+ print(f"Warning: {len(none_values)} triggers with None value in {ranking_par}")
30
+ for none_value in none_values:
31
+ print(none_value)
32
+
33
+ values = [value for value in values if value is not None]
34
+
35
+ # calculate the n_events vs rho
36
+ hist, bins = np.histogram(values, bins=np.arange(min(values), max(values) + bin_size, bin_size))
37
+ accumulate_hist = np.cumsum(hist[::-1])[::-1]
38
+ bins = bins[:-1]
39
+
40
+ # calculate the far for each bin
41
+ livetime_in_years = livetime / 86400 / 365.25
42
+ far = [accumulate_hist[i] / livetime_in_years for i in range(len(accumulate_hist))]
43
+ data = {'bins': bins, 'far': far, 'n_events': hist,
44
+ 'ranking_par': ranking_par, 'source': source, 'livetime': livetime}
45
+
46
+ if save:
47
+ with open(save, 'wb') as f:
48
+ f.write(orjson.dumps(data, option=orjson.OPT_SERIALIZE_NUMPY))
49
+
50
+ return data
@@ -0,0 +1,79 @@
1
+ from concurrent.futures import ThreadPoolExecutor
2
+ import orjson
3
+ import os
4
+ import numpy as np
5
+
6
+
7
+ def read_catalog(catalog_file):
8
+ with open(catalog_file, 'rb') as f:
9
+ catalog = orjson.loads(f.read())
10
+
11
+ # remove redundant events (unique event['id']) in catalog
12
+ n_events_before = len(catalog['events'])
13
+ catalog['events'] = list({f"{event['job_id']}_{event['id']}": event for event in catalog['events']}.values())
14
+ n_events_after = len(catalog['events'])
15
+ if n_events_before != n_events_after:
16
+ print(f"Removed {n_events_before - n_events_after} duplicated events")
17
+ return catalog
18
+
19
+ def read_event(event_file):
20
+ with open(event_file, 'rb') as f:
21
+ events = orjson.loads(f.read())
22
+ return events
23
+
24
+ def list_dict_filter(data, conditions, name='event'):
25
+ print(f"number of {name} before filtering: {len(data)}")
26
+ filter_string = " and ".join(conditions)
27
+ print(f"Performing filter: {filter_string}")
28
+ filtered_events = [d for d in data if eval(filter_string, {"__builtins__": None}, d)]
29
+ print(f"number of {name} after filtering: {len(filtered_events)}")
30
+ return filtered_events
31
+
32
+ def read_triggers(work_dir, run_dir, filters=None, file='catalog/catalog.json',**kwargs):
33
+ print(f"Reading results from {os.path.join(work_dir, run_dir, file)}")
34
+ catalog = read_catalog(os.path.join(work_dir, run_dir, file))
35
+
36
+ events = []
37
+ n_events = len(catalog['events'])
38
+ # for i, event in enumerate(catalog['events']):
39
+ # if i % 100 == 0:
40
+ # print(f"Reading event {i}/{n_events}", end='\r')
41
+ # event_file = os.path.join(work_dir, run_dir, f"trigger/trigger_{event['job_id']}_{event['id']}/event.json")
42
+ # events.append(read_event(event_file))
43
+
44
+ with ThreadPoolExecutor() as executor:
45
+ futures = [executor.submit(read_event, os.path.join(work_dir, run_dir, f"trigger/trigger_{event['job_id']}_{event['id']}/event.json"))
46
+ for event in catalog['events']]
47
+ for i, future in enumerate(futures):
48
+ if i % 100 == 0:
49
+ print(f"Reading event {i}/{n_events}", end='\r')
50
+ events.append(future.result())
51
+ if filters:
52
+ events = list_dict_filter(events, filters, name='triggers')
53
+ return events
54
+
55
+
56
+ def read_live_time(work_dir, run_dir, filters=None, file='catalog/catalog.json',**kwargs):
57
+ print(f"Reading live time from {os.path.join(work_dir, run_dir, file)}")
58
+ catalog = read_catalog(os.path.join(work_dir, run_dir, file))
59
+
60
+ # TODO: this is for the simplest case only
61
+ lags = np.arange(catalog['config']['lagSize'])
62
+
63
+ livetimes = []
64
+ for job in catalog['jobs']:
65
+ shift = job['shift']
66
+ livetime_single = job['end_time'] - job['start_time']
67
+ for lag in lags:
68
+ livetimes.append({
69
+ 'shift': shift,
70
+ 'livetime': livetime_single,
71
+ 'lag': lag
72
+ })
73
+
74
+ if filters:
75
+ livetimes = list_dict_filter(livetimes, filters, name='live times')
76
+
77
+ total_live_time = sum([lt['livetime'] for lt in livetimes])
78
+ print(f"Total live time: {total_live_time}s ({total_live_time/86400:.2f} days, {total_live_time/86400/365:.2f} years)")
79
+ return total_live_time
@@ -0,0 +1,120 @@
1
+ import matplotlib.pyplot as plt
2
+ import numpy as np
3
+ from scipy.stats import poisson
4
+
5
+
6
+ def report(far_rho_source=None, **kwargs):
7
+
8
+ print(f"Reporting the results")
9
+ if far_rho_source:
10
+ if far_rho_source not in kwargs:
11
+ print(f"Source {far_rho_source} not found in the results")
12
+ raise ValueError(f"Source {far_rho_source} not found in the results")
13
+ data = kwargs[far_rho_source]
14
+
15
+ # plot the far vs ranking parameter
16
+ plt.plot(data['bins'], data['far'], drawstyle='steps-post')
17
+ plt.xlabel(data['ranking_par'])
18
+ plt.ylabel('far')
19
+ plt.yscale('log')
20
+ plt.savefig(f"{far_rho_source}.png")
21
+ plt.close()
22
+
23
+ # plot the number of events vs ranking parameter
24
+ plt.plot(data['bins'], data['n_events'], drawstyle='steps-post')
25
+ plt.xlabel(data['ranking_par'])
26
+ plt.ylabel('number of events')
27
+ plt.yscale('log')
28
+ plt.savefig(f"{far_rho_source}_n_events.png")
29
+ plt.close()
30
+
31
+
32
+ def report_zero_lag(source, livetime_key='livetime_zerolag', far_rho_source='far_rho', **kwargs):
33
+ print(f"Reporting the zero lag results")
34
+ if source not in kwargs:
35
+ print(f"Source {source} not found in the results")
36
+ raise ValueError(f"Source {source} not found in the results")
37
+ triggers = kwargs[source]
38
+
39
+ if livetime_key not in kwargs:
40
+ print(f"Live time key {livetime_key} not found in the results")
41
+ raise ValueError(f"Live time key {livetime_key} not found in the results")
42
+ livetime = kwargs[livetime_key]
43
+
44
+ if far_rho_source not in kwargs:
45
+ print(f"Source {far_rho_source} not found in the results")
46
+ raise ValueError(f"Source {far_rho_source} not found in the results")
47
+ far_rho_data = kwargs[far_rho_source]
48
+
49
+ # attach far to the triggers if the trigger's ranking_par is within the range of bin
50
+ ranking_par = far_rho_data['ranking_par']
51
+ bins = far_rho_data['bins']
52
+ far = far_rho_data['far']
53
+
54
+ if '[' not in ranking_par:
55
+ values = [trigger[ranking_par] for trigger in triggers]
56
+ else:
57
+ base_key, index = ranking_par.split('[')
58
+ index = int(index.rstrip(']'))
59
+ values = [trigger[base_key][index] for trigger in triggers]
60
+
61
+ # remove None in values and print warning with trigger job_id and id
62
+ none_values = [triggers[i] for i, value in enumerate(values) if value is None]
63
+ if none_values:
64
+ print(f"Warning: {len(none_values)} triggers with None value in {ranking_par}")
65
+ for none_value in none_values:
66
+ print(none_value)
67
+ triggers = [triggers[i] for i, value in enumerate(values) if value is not None]
68
+ values = [value for value in values if value is not None]
69
+
70
+ # align the values to the bin
71
+ bin_indices = np.digitize(values, bins) - 1
72
+ far_values = [far[i] for i in bin_indices]
73
+ for i, trigger in enumerate(triggers):
74
+ trigger['far'] = far_values[i]
75
+
76
+ # plot the triggers far vs ranking parameter
77
+ print(f"Plotting far vs {ranking_par}")
78
+ plt.scatter(values, far_values)
79
+ plt.xlabel(ranking_par)
80
+ plt.ylabel('far')
81
+ plt.yscale('log')
82
+ plt.savefig(f"{source}_far.png")
83
+ plt.close()
84
+
85
+ print(f"Plotting far vs n_events accumulative distribution")
86
+ # plot accumulated triggers vs trigger['far']
87
+ ranked_triggers = sorted(triggers, key=lambda x: 1/x['far'], reverse=True)
88
+ ifar = np.array([1/trigger['far'] for trigger in ranked_triggers])
89
+ plot_y = np.arange(1, len(ranked_triggers) + 1)
90
+ plt.plot(ifar, plot_y, drawstyle='steps-post')
91
+
92
+ livetime_in_years = livetime / 86400 / 365.25
93
+ ifar_min = min(ifar)
94
+ n_events_at_ifar_min = livetime_in_years / ifar_min
95
+ ifar_max = max(ifar)
96
+ n_events_at_ifar_max = livetime_in_years / ifar_max
97
+ plt.plot([ifar_min, ifar_max], [n_events_at_ifar_min, n_events_at_ifar_max], color='black', linewidth=0.5)
98
+ print(f"ifar_min: {ifar_min}, n_events_at_ifar_min: {n_events_at_ifar_min}")
99
+ print(f"ifar_max: {ifar_max}, n_events_at_ifar_max: {n_events_at_ifar_max}")
100
+
101
+ # Calculate the Poisson confidence intervals
102
+ # generate the ifar range which is denser at the higher ifar
103
+ ifar_range = np.linspace(ifar_min, ifar_max, 100000)
104
+ n_events_range = livetime_in_years / ifar_range
105
+ sigma_levels = [1, 2, 3]
106
+ confidence_levels = [0.6827, 0.9545, 0.9973]
107
+ conf_intervals = {sigma: poisson.interval(confidence, n_events_range) for sigma, confidence in zip(sigma_levels, confidence_levels)}
108
+ # Plot the Poisson confidence intervals
109
+ colors = ['gray', 'gray', 'gray']
110
+ for sigma, color in zip(sigma_levels, colors):
111
+ lower, upper = conf_intervals[sigma]
112
+ plt.fill_between(ifar_range, lower, upper, color=color, alpha=0.6 / sigma, label=f'{sigma} sigma', linewidth=0.4)
113
+
114
+ plt.xlabel('ifar')
115
+ plt.ylabel('n_events')
116
+ plt.xscale('log')
117
+ plt.yscale('log')
118
+ plt.legend()
119
+ plt.savefig(f"{source}_far_n_events.png")
120
+ plt.close()
@@ -0,0 +1,36 @@
1
+ import yaml
2
+ import copy
3
+ from pycwb.utils.module import import_helper
4
+
5
+
6
+ def run_workflow(workflow_file):
7
+ with open(workflow_file, 'r') as f:
8
+ workflow = yaml.safe_load(f)
9
+
10
+ # the global arguments will be inserted into each step,
11
+ # the output of each step will be stored in the global arguments
12
+ # if the output_alias if given, the output will be stored in the
13
+ # global arguments with the key of output_alias
14
+ global_args = workflow['global']
15
+ # iterate through each step
16
+ for step in workflow['steps']:
17
+ # get the function, this will be replaced with a module loader
18
+ func_name = step['action'].split('.')[-1]
19
+ module_name = '.'.join(step['action'].split('.')[:-1])
20
+ if not module_name.startswith('pycwb'):
21
+ module_name = f"pycwb.modules.{module_name}"
22
+ module = import_helper(module_name, module_name)
23
+ func = getattr(module, func_name)
24
+ # combine global_args and step['args']
25
+ args = copy.deepcopy(global_args)
26
+ args.update(step['args'])
27
+
28
+ print("-"*50)
29
+ print(f"Running action {step['action']} with args {list(args.keys())}")
30
+ result = func(**args)
31
+ if 'output_alias' in step:
32
+ global_args[step['output_alias']] = result
33
+ print(f"Output stored with key: {step['output_alias']}")
34
+ # if result is a dict, add to results
35
+ elif isinstance(result, dict):
36
+ global_args.update(result)