PycWB 0.23.2__tar.gz → 0.24.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 (399) hide show
  1. {pycwb-0.23.2 → pycwb-0.24.0}/PKG-INFO +1 -1
  2. {pycwb-0.23.2 → pycwb-0.24.0}/PycWB.egg-info/PKG-INFO +1 -1
  3. {pycwb-0.23.2 → pycwb-0.24.0}/PycWB.egg-info/SOURCES.txt +5 -0
  4. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/_version.py +2 -2
  5. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/constants/user_parameters_schema.py +40 -0
  6. pycwb-0.24.0/pycwb/modules/gracedb/__init__.py +1 -0
  7. pycwb-0.24.0/pycwb/modules/gracedb/gracedb.py +40 -0
  8. pycwb-0.24.0/pycwb/modules/gracedb/module.yaml +4 -0
  9. pycwb-0.24.0/pycwb/modules/gracedb/test_gracedb.py +27 -0
  10. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/job_segment/dq_segment.py +36 -15
  11. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/job_segment/frame.py +45 -2
  12. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/job_segment/job_segment.py +109 -17
  13. pycwb-0.24.0/pycwb/modules/job_segment/test_job_segment.py +30 -0
  14. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/read_data/read_data.py +7 -7
  15. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/job.py +9 -1
  16. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/yaml_helper.py +1 -1
  17. {pycwb-0.23.2 → pycwb-0.24.0}/.gitignore +0 -0
  18. {pycwb-0.23.2 → pycwb-0.24.0}/.gitlab-ci.yml +0 -0
  19. {pycwb-0.23.2 → pycwb-0.24.0}/.readthedocs.yaml +0 -0
  20. {pycwb-0.23.2 → pycwb-0.24.0}/LICENSE +0 -0
  21. {pycwb-0.23.2 → pycwb-0.24.0}/MANIFEST.in +0 -0
  22. {pycwb-0.23.2 → pycwb-0.24.0}/Makefile +0 -0
  23. {pycwb-0.23.2 → pycwb-0.24.0}/PycWB.egg-info/dependency_links.txt +0 -0
  24. {pycwb-0.23.2 → pycwb-0.24.0}/PycWB.egg-info/requires.txt +0 -0
  25. {pycwb-0.23.2 → pycwb-0.24.0}/PycWB.egg-info/top_level.txt +0 -0
  26. {pycwb-0.23.2 → pycwb-0.24.0}/README.md +0 -0
  27. {pycwb-0.23.2 → pycwb-0.24.0}/benchmark/README.md +0 -0
  28. {pycwb-0.23.2 → pycwb-0.24.0}/benchmark/likelihood/README.md +0 -0
  29. {pycwb-0.23.2 → pycwb-0.24.0}/benchmark/likelihood/generate_data_for_likelihood.py +0 -0
  30. {pycwb-0.23.2 → pycwb-0.24.0}/benchmark/likelihood/performance_test_dpf.py +0 -0
  31. {pycwb-0.23.2 → pycwb-0.24.0}/benchmark/likelihood/performance_test_opt_sky.py +0 -0
  32. {pycwb-0.23.2 → pycwb-0.24.0}/benchmark/likelihood/user_parameters_injection.yaml +0 -0
  33. {pycwb-0.23.2 → pycwb-0.24.0}/benchmark/supercluster/README.md +0 -0
  34. {pycwb-0.23.2 → pycwb-0.24.0}/benchmark/supercluster/generate_data.py +0 -0
  35. {pycwb-0.23.2 → pycwb-0.24.0}/benchmark/supercluster/generate_data_2.py +0 -0
  36. {pycwb-0.23.2 → pycwb-0.24.0}/benchmark/supercluster/performance_supercluster.py +0 -0
  37. {pycwb-0.23.2 → pycwb-0.24.0}/benchmark/supercluster/user_parameters_injection.yaml +0 -0
  38. {pycwb-0.23.2 → pycwb-0.24.0}/bin/pycwb +0 -0
  39. {pycwb-0.23.2 → pycwb-0.24.0}/bin/pycwb_search +0 -0
  40. {pycwb-0.23.2 → pycwb-0.24.0}/bin/pycwb_show +0 -0
  41. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Biorthogonal.cc +0 -0
  42. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Biorthogonal.hh +0 -0
  43. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/CMakeLists.txt +0 -0
  44. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Daubechies.cc +0 -0
  45. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Daubechies.hh +0 -0
  46. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/FourierCoefficients.icc +0 -0
  47. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Haar.cc +0 -0
  48. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Haar.hh +0 -0
  49. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/LineFilter.cc +0 -0
  50. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/LineFilter.hh +0 -0
  51. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Makefile +0 -0
  52. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Meyer.cc +0 -0
  53. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Meyer.hh +0 -0
  54. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Symlet.cc +0 -0
  55. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Symlet.hh +0 -0
  56. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/SymmArray.cc +0 -0
  57. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/SymmArray.hh +0 -0
  58. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/SymmArraySSE.cc +0 -0
  59. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/SymmArraySSE.hh +0 -0
  60. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/SymmObjArray.cc +0 -0
  61. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/SymmObjArray.hh +0 -0
  62. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/WDM.cc +0 -0
  63. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/WDM.hh +0 -0
  64. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/WDMOverlap.cc +0 -0
  65. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/WDMOverlap.hh +0 -0
  66. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/WaveDWT.cc +0 -0
  67. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/WaveDWT.hh +0 -0
  68. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Wavelet.cc +0 -0
  69. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/Wavelet.hh +0 -0
  70. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/alm.hh +0 -0
  71. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/build.sh +0 -0
  72. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/cluster.cc +0 -0
  73. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/cluster.hh +0 -0
  74. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/cmake/FindHealpix.cmake +0 -0
  75. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/cmake/FindeBBH.cmake +0 -0
  76. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/cmake/install_function.cmake +0 -0
  77. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/constants.hh +0 -0
  78. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/detector.cc +0 -0
  79. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/detector.hh +0 -0
  80. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/injection.cc +0 -0
  81. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/injection.hh +0 -0
  82. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/lossy.cc +0 -0
  83. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/lossy.hh +0 -0
  84. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/monster.cc +0 -0
  85. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/monster.hh +0 -0
  86. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/netcluster.cc +0 -0
  87. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/netcluster.hh +0 -0
  88. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/netevent.cc +0 -0
  89. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/netevent.hh +0 -0
  90. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/netpixel.cc +0 -0
  91. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/netpixel.hh +0 -0
  92. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/network.cc +0 -0
  93. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/network.hh +0 -0
  94. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/pycwb.hh +0 -0
  95. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/rdfr.cc +0 -0
  96. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/rdfr.hh +0 -0
  97. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/readframe.cc +0 -0
  98. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/readframe.hh +0 -0
  99. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/readfrfile.cc +0 -0
  100. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/readfrfile.hh +0 -0
  101. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/regression.cc +0 -0
  102. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/regression.hh +0 -0
  103. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/skycoord.hh +0 -0
  104. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/skymap.cc +0 -0
  105. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/skymap.hh +0 -0
  106. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/sseries.cc +0 -0
  107. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/sseries.hh +0 -0
  108. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/time.cc +0 -0
  109. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/time.hh +0 -0
  110. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wat.hh +0 -0
  111. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/watasm.S +0 -0
  112. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/watasm_elf64.o +0 -0
  113. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/watavx.hh +0 -0
  114. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/watbranch.in +0 -0
  115. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/watfun.hh +0 -0
  116. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wathash.in +0 -0
  117. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/watplot.cc +0 -0
  118. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/watplot.hh +0 -0
  119. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/watsse.hh +0 -0
  120. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wattag.in +0 -0
  121. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/waturl.in +0 -0
  122. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/watversion.hh.in +0 -0
  123. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wavearray.cc +0 -0
  124. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wavearray.hh +0 -0
  125. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wavecomplex.cc +0 -0
  126. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wavecomplex.hh +0 -0
  127. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wavecor.cc +0 -0
  128. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wavecor.hh +0 -0
  129. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wavefft.cc +0 -0
  130. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wavefft.hh +0 -0
  131. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wavelet_LinkDef.h +0 -0
  132. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wavelinefilter.cc +0 -0
  133. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wavelinefilter.hh +0 -0
  134. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/waverdc.cc +0 -0
  135. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/waverdc.hh +0 -0
  136. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wseries.cc +0 -0
  137. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wseries.hh +0 -0
  138. {pycwb-0.23.2 → pycwb-0.24.0}/cwb-core/wslice.hh +0 -0
  139. {pycwb-0.23.2 → pycwb-0.24.0}/docs/0.installation_guide.md +0 -0
  140. {pycwb-0.23.2 → pycwb-0.24.0}/docs/1.initialisation_guide.md +0 -0
  141. {pycwb-0.23.2 → pycwb-0.24.0}/docs/2.test_interactive_multistages_2G_analysis.md +0 -0
  142. {pycwb-0.23.2 → pycwb-0.24.0}/docs/3.run_pycwb_with_yaml_config.md +0 -0
  143. {pycwb-0.23.2 → pycwb-0.24.0}/docs/4.py_cwb_inet_2G.md +0 -0
  144. {pycwb-0.23.2 → pycwb-0.24.0}/docs/5.cwb2G_analyse.md +0 -0
  145. {pycwb-0.23.2 → pycwb-0.24.0}/docs/6.wat_codes_notes.md +0 -0
  146. {pycwb-0.23.2 → pycwb-0.24.0}/docs/Makefile +0 -0
  147. {pycwb-0.23.2 → pycwb-0.24.0}/docs/diagram.py +0 -0
  148. {pycwb-0.23.2 → pycwb-0.24.0}/docs/make.bat +0 -0
  149. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/_static/.keep +0 -0
  150. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/_templates/.keep +0 -0
  151. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/conf.py +0 -0
  152. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/credit.rst +0 -0
  153. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/index.rst +0 -0
  154. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/install.rst +0 -0
  155. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/mod_cwb.rst +0 -0
  156. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/package.rst +0 -0
  157. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/schema.rst +0 -0
  158. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/tutorial_batch_inj.rst +0 -0
  159. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/tutorial_customized_wf_gen.rst +0 -0
  160. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/tutorial_injection.rst +0 -0
  161. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/tutorial_multi_injection.rst +0 -0
  162. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/tutorial_search.rst +0 -0
  163. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/tutorials.rst +0 -0
  164. {pycwb-0.23.2 → pycwb-0.24.0}/docs/source/workflow.png +0 -0
  165. {pycwb-0.23.2 → pycwb-0.24.0}/envs/Dockerfile +0 -0
  166. {pycwb-0.23.2 → pycwb-0.24.0}/envs/environment.yml +0 -0
  167. {pycwb-0.23.2 → pycwb-0.24.0}/envs/mamba/Dockerfile +0 -0
  168. {pycwb-0.23.2 → pycwb-0.24.0}/examples/autoencoder/pycwb_injection.ipynb +0 -0
  169. {pycwb-0.23.2 → pycwb-0.24.0}/examples/autoencoder/user_parameters_injection.yaml +0 -0
  170. {pycwb-0.23.2 → pycwb-0.24.0}/examples/batch_injection/generate_parameters.py +0 -0
  171. {pycwb-0.23.2 → pycwb-0.24.0}/examples/batch_injection/pycbc_inject/hyperbolicTD/__init__.py +0 -0
  172. {pycwb-0.23.2 → pycwb-0.24.0}/examples/batch_injection/pycbc_inject/hyperbolicTD/parameters.py +0 -0
  173. {pycwb-0.23.2 → pycwb-0.24.0}/examples/batch_injection/pycbc_inject/hyperbolicTD/waveform.py +0 -0
  174. {pycwb-0.23.2 → pycwb-0.24.0}/examples/batch_injection/pycwb_injection.py +0 -0
  175. {pycwb-0.23.2 → pycwb-0.24.0}/examples/batch_injection/user_parameters_injection.yaml +0 -0
  176. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/DQ/H1_cat0.txt +0 -0
  177. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/DQ/H1_cat1.txt +0 -0
  178. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/DQ/H1_cat2.txt +0 -0
  179. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/DQ/H1_cat4.txt +0 -0
  180. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/DQ/L1_cat0.txt +0 -0
  181. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/DQ/L1_cat1.txt +0 -0
  182. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/DQ/L1_cat2.txt +0 -0
  183. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/DQ/L1_cat4.txt +0 -0
  184. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/input/OPBM.period +0 -0
  185. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/input/OPBM_H1.frames +0 -0
  186. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/input/OPBM_L1.frames +0 -0
  187. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/pycwb_mdc.py +0 -0
  188. {pycwb-0.23.2 → pycwb-0.24.0}/examples/benchmark/user_parameters_mdc.yaml +0 -0
  189. {pycwb-0.23.2 → pycwb-0.24.0}/examples/colab/pycWB_GW150914.ipynb +0 -0
  190. {pycwb-0.23.2 → pycwb-0.24.0}/examples/injection/pycwb_injection.ipynb +0 -0
  191. {pycwb-0.23.2 → pycwb-0.24.0}/examples/injection/user_parameters_injection.yaml +0 -0
  192. {pycwb-0.23.2 → pycwb-0.24.0}/examples/injection/wdmXTalk/OverlapCatalog16-1024.bin +0 -0
  193. {pycwb-0.23.2 → pycwb-0.24.0}/examples/lvk_sep_2023/demo.ipynb +0 -0
  194. {pycwb-0.23.2 → pycwb-0.24.0}/examples/lvk_sep_2023/user_parameters.yaml +0 -0
  195. {pycwb-0.23.2 → pycwb-0.24.0}/examples/multiple_injection/pycwb_injection.py +0 -0
  196. {pycwb-0.23.2 → pycwb-0.24.0}/examples/multiple_injection/user_parameters_injection.yaml +0 -0
  197. {pycwb-0.23.2 → pycwb-0.24.0}/examples/pyseobnr_injection/generate_parameters.py +0 -0
  198. {pycwb-0.23.2 → pycwb-0.24.0}/examples/pyseobnr_injection/user_parameters_injection.yaml +0 -0
  199. {pycwb-0.23.2 → pycwb-0.24.0}/examples/pyseobnr_injection/waveform_model/__init__.py +0 -0
  200. {pycwb-0.23.2 → pycwb-0.24.0}/examples/pyseobnr_injection/waveform_model/waveform.py +0 -0
  201. {pycwb-0.23.2 → pycwb-0.24.0}/examples/waveform_reconstruction/reconstruct_waveform_from_cluster.ipynb +0 -0
  202. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/cwb_core/coherence.cc +0 -0
  203. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/cwb_core/coherence.hh +0 -0
  204. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/cwb_core/likelihood.cc +0 -0
  205. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/cwb_core/likelihood.hh +0 -0
  206. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/dag/dag.py +0 -0
  207. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/dag/dask-prefect.py +0 -0
  208. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/dag/prefect_test.py +0 -0
  209. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger/__init__.py +0 -0
  210. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger/server.py +0 -0
  211. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger/visualizition.py +0 -0
  212. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/.eslintrc.cjs +0 -0
  213. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/.gitignore +0 -0
  214. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/.prettierrc.json +0 -0
  215. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/README.md +0 -0
  216. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/index.html +0 -0
  217. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/package-lock.json +0 -0
  218. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/package.json +0 -0
  219. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/public/favicon.ico +0 -0
  220. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/App.vue +0 -0
  221. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/assets/base.css +0 -0
  222. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/assets/cwb_icon_modern_blue_alfa.png +0 -0
  223. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/assets/main.css +0 -0
  224. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/assets/style.css +0 -0
  225. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/components/HelloWorld.vue +0 -0
  226. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/components/TheWelcome.vue +0 -0
  227. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/components/WelcomeItem.vue +0 -0
  228. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/components/__tests__/HelloWorld.spec.js +0 -0
  229. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/components/icons/IconCommunity.vue +0 -0
  230. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/components/icons/IconDocumentation.vue +0 -0
  231. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/components/icons/IconEcosystem.vue +0 -0
  232. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/components/icons/IconSupport.vue +0 -0
  233. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/components/icons/IconTooling.vue +0 -0
  234. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/main.js +0 -0
  235. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/router/index.js +0 -0
  236. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/stores/counter.js +0 -0
  237. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/views/drawflow.vue +0 -0
  238. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/views/nodes/node1.vue +0 -0
  239. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/views/nodes/node2.vue +0 -0
  240. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/views/nodes/node3.vue +0 -0
  241. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/src/views/nodes/nodeHeader.vue +0 -0
  242. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/messenger-web-interface/vite.config.js +0 -0
  243. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/performance/numba_test.py +0 -0
  244. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/performance/taichi_test.py +0 -0
  245. {pycwb-0.23.2 → pycwb-0.24.0}/prototypes/search.yaml +0 -0
  246. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/__init__.py +0 -0
  247. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/cli/__init__.py +0 -0
  248. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/cli/batch_runner.py +0 -0
  249. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/cli/batch_setup.py +0 -0
  250. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/cli/flow.py +0 -0
  251. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/cli/merge_catalog.py +0 -0
  252. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/cli/run.py +0 -0
  253. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/cli/server.py +0 -0
  254. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/cli/xtalk.py +0 -0
  255. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/config/__init__.py +0 -0
  256. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/config/config.py +0 -0
  257. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/constants/__init__.py +0 -0
  258. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/constants/project_constants.py +0 -0
  259. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/__init__.py +0 -0
  260. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/autoencoder/__init__.py +0 -0
  261. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/autoencoder/autoencoder.py +0 -0
  262. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/autoencoder/cwb_autoencoder.py +0 -0
  263. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/autoencoder/module.yaml +0 -0
  264. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/catalog/__init__.py +0 -0
  265. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/catalog/catalog.py +0 -0
  266. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/catalog/module.yaml +0 -0
  267. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/coherence/__init__.py +0 -0
  268. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/coherence/coherence.py +0 -0
  269. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/coherence/coherence_lite.py +0 -0
  270. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/coherence/module.yaml +0 -0
  271. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/condor/__init__.py +0 -0
  272. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/condor/condor.py +0 -0
  273. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/condor/module.yaml +0 -0
  274. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/cwb_conversions/__init__.py +0 -0
  275. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/cwb_conversions/cluster.py +0 -0
  276. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/cwb_conversions/module.yaml +0 -0
  277. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/cwb_conversions/pixel.py +0 -0
  278. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/cwb_conversions/series.py +0 -0
  279. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/cwb_conversions/sparse_series.py +0 -0
  280. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/data_conditioning/__init__.py +0 -0
  281. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/data_conditioning/data_conditioning.py +0 -0
  282. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/data_conditioning/module.yaml +0 -0
  283. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/data_conditioning/regression.py +0 -0
  284. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/data_conditioning/whitening.py +0 -0
  285. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/energy_threshold/__init__.py +0 -0
  286. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/energy_threshold/threshold.py +0 -0
  287. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/job_segment/__init__.py +0 -0
  288. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/job_segment/module.yaml +0 -0
  289. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/job_segment/plots.py +0 -0
  290. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/job_segment/super_lag.py +0 -0
  291. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/likelihood/__init__.py +0 -0
  292. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/likelihood/likelihood.py +0 -0
  293. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/likelihood/module.yaml +0 -0
  294. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/likelihoodWP/__init__.py +0 -0
  295. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/likelihoodWP/dpf.py +0 -0
  296. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/likelihoodWP/dpf_cython.pyx +0 -0
  297. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/likelihoodWP/likelihood.py +0 -0
  298. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/likelihoodWP/sky_stat.py +0 -0
  299. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/likelihoodWP/utils.py +0 -0
  300. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/logger/__init__.py +0 -0
  301. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/logger/logger.py +0 -0
  302. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/logger/module.yaml +0 -0
  303. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/multi_resolution_wdm/__init__.py +0 -0
  304. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/multi_resolution_wdm/module.yaml +0 -0
  305. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/multi_resolution_wdm/wdm.py +0 -0
  306. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot/__init__.py +0 -0
  307. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot/cluster_statistics.py +0 -0
  308. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot/event.py +0 -0
  309. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot/module.yaml +0 -0
  310. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot/spectrogram.py +0 -0
  311. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot/waveform.py +0 -0
  312. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot_data_quality/__init__.py +0 -0
  313. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot_data_quality/module.yaml +0 -0
  314. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot_data_quality/plot.py +0 -0
  315. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot_map/__init__.py +0 -0
  316. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot_map/module.yaml +0 -0
  317. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/plot_map/world_map.py +0 -0
  318. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/read_data/__init__.py +0 -0
  319. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/read_data/data_check.py +0 -0
  320. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/read_data/data_find.py +0 -0
  321. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/read_data/mdc.py +0 -0
  322. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/read_data/module.yaml +0 -0
  323. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/reconstruction/__init__.py +0 -0
  324. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/reconstruction/getMRAwaveform.py +0 -0
  325. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/reconstruction/module.yaml +0 -0
  326. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/sparse_series/__init__.py +0 -0
  327. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/sparse_series/module.yaml +0 -0
  328. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/sparse_series/sparse_table.py +0 -0
  329. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/statistics/__init__.py +0 -0
  330. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/statistics/eff.py +0 -0
  331. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/statistics/eff_plot.py +0 -0
  332. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/statistics/merge.py +0 -0
  333. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/statistics/sigmoid_fit.py +0 -0
  334. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/super_cluster/__init__.py +0 -0
  335. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/super_cluster/module.yaml +0 -0
  336. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/super_cluster/sub_net_cut.py +0 -0
  337. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/super_cluster/super_cluster.py +0 -0
  338. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/super_cluster/supercluster.py +0 -0
  339. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/super_cluster/utils.py +0 -0
  340. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/supercluster_naive/__init__.py +0 -0
  341. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/supercluster_naive/supercluster2.py +0 -0
  342. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/superlag/__init__.py +0 -0
  343. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/superlag/superlag.py +0 -0
  344. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/web_viewer/__init__.py +0 -0
  345. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/web_viewer/create.py +0 -0
  346. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/web_viewer/module.yaml +0 -0
  347. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/workflow_utils/__init__.py +0 -0
  348. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/workflow_utils/job_setup.py +0 -0
  349. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/xtalk/__init__.py +0 -0
  350. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/xtalk/monster.py +0 -0
  351. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/xtalk/monster_old.py +0 -0
  352. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/modules/xtalk/xtalk_data.py +0 -0
  353. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/prefect_flow/__init__.py +0 -0
  354. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/prefect_flow/pycwb_flow.py +0 -0
  355. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/prefect_flow/tasks/__init__.py +0 -0
  356. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/prefect_flow/tasks/builtin.py +0 -0
  357. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/__init__.py +0 -0
  358. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/data_quality_file.py +0 -0
  359. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/detector.py +0 -0
  360. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/network.py +0 -0
  361. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/network_cluster.py +0 -0
  362. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/network_event.py +0 -0
  363. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/network_pixel.py +0 -0
  364. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/sparse_series.py +0 -0
  365. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/time_frequency_series.py +0 -0
  366. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/wdm.py +0 -0
  367. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/types/wdm_xtalk.py +0 -0
  368. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/__init__.py +0 -0
  369. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/async_write.py +0 -0
  370. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/check_ROOT.py +0 -0
  371. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/conversions/__init__.py +0 -0
  372. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/conversions/timeseries.py +0 -0
  373. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/dataclass_object_io.py +0 -0
  374. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/dep_check.py +0 -0
  375. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/image.py +0 -0
  376. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/module.py +0 -0
  377. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/network.py +0 -0
  378. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/parser.py +0 -0
  379. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/utils/skymap_coord.py +0 -0
  380. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/vendor/__init__.py +0 -0
  381. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/vendor/autoencoder/__init__.py +0 -0
  382. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/vendor/autoencoder/cwb_autoencoder.h5 +0 -0
  383. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/vendor/example.yaml +0 -0
  384. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/vendor/lib/__init__.py +0 -0
  385. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/vendor/web_viewer/event_dump.html +0 -0
  386. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/vendor/web_viewer/styles.css +0 -0
  387. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/vendor/web_viewer/viewer.html +0 -0
  388. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/workflow/__init__.py +0 -0
  389. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/workflow/batch.py +0 -0
  390. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/workflow/merge.py +0 -0
  391. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/workflow/run.py +0 -0
  392. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/workflow/subflow/__init__.py +0 -0
  393. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/workflow/subflow/postprocess_and_plots.py +0 -0
  394. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/workflow/subflow/prepare_job_runs.py +0 -0
  395. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/workflow/subflow/process_job_segment.py +0 -0
  396. {pycwb-0.23.2 → pycwb-0.24.0}/pycwb/workflow/subflow/supercluster_and_likelihood.py +0 -0
  397. {pycwb-0.23.2 → pycwb-0.24.0}/pyproject.toml +0 -0
  398. {pycwb-0.23.2 → pycwb-0.24.0}/setup.cfg +0 -0
  399. {pycwb-0.23.2 → pycwb-0.24.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PycWB
3
- Version: 0.23.2
3
+ Version: 0.24.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.23.2
3
+ Version: 0.24.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>
@@ -274,6 +274,10 @@ pycwb/modules/data_conditioning/regression.py
274
274
  pycwb/modules/data_conditioning/whitening.py
275
275
  pycwb/modules/energy_threshold/__init__.py
276
276
  pycwb/modules/energy_threshold/threshold.py
277
+ pycwb/modules/gracedb/__init__.py
278
+ pycwb/modules/gracedb/gracedb.py
279
+ pycwb/modules/gracedb/module.yaml
280
+ pycwb/modules/gracedb/test_gracedb.py
277
281
  pycwb/modules/job_segment/__init__.py
278
282
  pycwb/modules/job_segment/dq_segment.py
279
283
  pycwb/modules/job_segment/frame.py
@@ -281,6 +285,7 @@ pycwb/modules/job_segment/job_segment.py
281
285
  pycwb/modules/job_segment/module.yaml
282
286
  pycwb/modules/job_segment/plots.py
283
287
  pycwb/modules/job_segment/super_lag.py
288
+ pycwb/modules/job_segment/test_job_segment.py
284
289
  pycwb/modules/likelihood/__init__.py
285
290
  pycwb/modules/likelihood/likelihood.py
286
291
  pycwb/modules/likelihood/module.yaml
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.23.2'
16
- __version_tuple__ = version_tuple = (0, 23, 2)
15
+ __version__ = version = '0.24.0'
16
+ __version_tuple__ = version_tuple = (0, 24, 0)
@@ -99,6 +99,46 @@ schema = {
99
99
  "default": {},
100
100
  "cwb": False
101
101
  },
102
+ "gps_start": {
103
+ "type": "number",
104
+ "description": "start gps time, used together with gps_end for generating job segments",
105
+ "cwb": False
106
+ },
107
+ "gps_end": {
108
+ "type": "number",
109
+ "description": "end gps time, used together with gps_start for generating job segments",
110
+ "cwb": False
111
+ },
112
+ "gps_center": {
113
+ "type": "number",
114
+ "description": "center gps time, used together with time_left and time_right for generating job segments",
115
+ "cwb": False
116
+ },
117
+ "time_left": {
118
+ "type": "number",
119
+ "description": "left time offset from gps_center, used together with gps_center and time_right for generating job segments",
120
+ "cwb": False
121
+ },
122
+ "time_right": {
123
+ "type": "number",
124
+ "description": "right time offset from gps_center, used together with gps_center and time_left for generating job segments",
125
+ "cwb": False
126
+ },
127
+ "superevent": {
128
+ "type": "string",
129
+ "description": "superevent name, used together with time_left and time_right for generating job segments",
130
+ "cwb": False
131
+ },
132
+ "gwdatafind": {
133
+ "type": "object",
134
+ "description": "If the gwdatafind is set, the framefiles can be pulled from the LIGO data server, "
135
+ "the support keys are: site, frametype, host. Example: ",
136
+ " site: ['L','H']"
137
+ " frametype: ['L1_HOFT_C00','H1_HOFT_C00']"
138
+ " host: 'datafind.ldas.cit:80'"
139
+ "default": {},
140
+ "cwb": False
141
+ },
102
142
  "WDM_beta_order": {
103
143
  "type": "integer",
104
144
  "description": "WDM default parameters: beta function order for Meyer",
@@ -0,0 +1 @@
1
+ from .gracedb import *
@@ -0,0 +1,40 @@
1
+ from ligo.gracedb.rest import GraceDb
2
+ from ligo.gracedb.exceptions import HTTPError
3
+
4
+
5
+ def get_superevent(event_name):
6
+ """
7
+ Get the super event for a given event name.
8
+
9
+ :param event_name: The name of the event.
10
+ :type event_name: str
11
+ :return: The super event.
12
+ :rtype: dict
13
+ """
14
+ client = GraceDb()
15
+ try:
16
+ response = client.superevent(event_name).json()
17
+ except HTTPError as e:
18
+ if e.response.status_code == 404:
19
+ print('No super event found for event {}'.format(event_name))
20
+ return None
21
+ else:
22
+ raise
23
+
24
+ return response
25
+
26
+
27
+ def get_superevent_t0(event_name):
28
+ """
29
+ Get the GPS time of the super event for a given event name.
30
+
31
+ :param event_name: The name of the event.
32
+ :type event_name: str
33
+ :return: The GPS time of the super event.
34
+ :rtype: float
35
+ """
36
+ super_event = get_superevent(event_name)
37
+ if super_event is None:
38
+ return None
39
+
40
+ return super_event['t_0']
@@ -0,0 +1,4 @@
1
+ name: gracedb
2
+ author: pycWB
3
+ description: A interface for the LIGO/Virgo GraceDB database
4
+ dependencies: ["ligo-proxy-utils", "ligo-gracedb"]
@@ -0,0 +1,27 @@
1
+ import unittest
2
+ from .gracedb import get_superevent_t0, get_superevent
3
+
4
+ class TestGraceDB(unittest.TestCase):
5
+
6
+ def test_get_superevent_t0(self):
7
+ event_name = 'S241011k'
8
+ t0 = get_superevent_t0(event_name)
9
+ self.assertAlmostEqual(t0, 1412725132.96, places=1)
10
+
11
+ def test_get_superevent_t0_no_event(self):
12
+ event_name = 'S000000a'
13
+ t0 = get_superevent_t0(event_name)
14
+ self.assertIsNone(t0)
15
+
16
+ def test_get_superevent(self):
17
+ event_name = 'S241011k'
18
+ super_event = get_superevent(event_name)
19
+ self.assertEqual(super_event['superevent_id'], event_name)
20
+
21
+ def test_get_superevent_no_event(self):
22
+ event_name = 'S000000a'
23
+ super_event = get_superevent(event_name)
24
+ self.assertIsNone(super_event)
25
+
26
+ if __name__ == '__main__':
27
+ unittest.main()
@@ -6,7 +6,7 @@ from pycwb.types.job import WaveSegment
6
6
  logger = logging.getLogger(__name__)
7
7
 
8
8
 
9
- def read_seg_list(dq_file_list, dq_cat):
9
+ def read_seg_list(dq_file_list=None, dq_cat='CWB_CAT1', periods=None):
10
10
  """Load the files contains segment list from the data quality files below the data quality category (dq_file.load_file)).
11
11
  Then merge the segment list (merge_seg_list) and return the merged segment list.
12
12
 
@@ -14,14 +14,22 @@ def read_seg_list(dq_file_list, dq_cat):
14
14
  :type dq_file_list: list[DQFile]
15
15
  :param dq_cat: The data quality category.
16
16
  :type dq_cat: str
17
+ :param periods: Given start and stop periods.
18
+ :type periods: tuple[list[int], list[int]]
17
19
  :return: A list of segments.
18
20
  :rtype: list[WaveSegment]
19
21
  """
20
22
  seg_list = []
21
- for dq_file in dq_file_list:
22
- if dq_file.dq_cat <= dq_cat:
23
- logger.info(f"Loading data quality file {dq_file.file}")
24
- seg_list.append(dq_file.get_periods())
23
+ if dq_file_list is None or len(dq_file_list) == 0:
24
+ seg_list.append(([0], [np.inf]))
25
+ else:
26
+ for dq_file in dq_file_list:
27
+ if dq_file.dq_cat <= dq_cat:
28
+ logger.info(f"Loading data quality file {dq_file.file}")
29
+ seg_list.append(dq_file.get_periods())
30
+
31
+ if periods is not None:
32
+ seg_list.append(periods)
25
33
 
26
34
  if len(seg_list) == 0:
27
35
  logger.error("No CWB_CAT=%s files in the list", dq_cat)
@@ -93,7 +101,7 @@ def get_seg_list(ifo, dq_list, seg_len, seg_mls, seg_edge):
93
101
  return []
94
102
 
95
103
 
96
- def get_job_list(ifos, dq_list, seg_len, seg_mls, seg_edge):
104
+ def get_job_list(ifos, dq_list, seg_len, seg_mls, seg_edge, sample_rate):
97
105
  """
98
106
  Build the job segment list.
99
107
 
@@ -108,6 +116,8 @@ def get_job_list(ifos, dq_list, seg_len, seg_mls, seg_edge):
108
116
  output segA : xxx---------xxx \n
109
117
  output segB : xxx----------xxx \n
110
118
 
119
+ :param ifos: list of interferometers
120
+ :type ifos: list[str]
111
121
  :param dq_list: number of detectors
112
122
  :type dq_list: list[DQFile]
113
123
  :param seg_len: Segment length [sec]
@@ -116,6 +126,8 @@ def get_job_list(ifos, dq_list, seg_len, seg_mls, seg_edge):
116
126
  :type seg_mls: int
117
127
  :param seg_edge: wavelet boundary offset [sec]
118
128
  :type seg_edge: int
129
+ :param sample_rate: sample rate [Hz]
130
+ :type sample_rate: int
119
131
  :return: Return the job segment list
120
132
  :rtype: list[WaveSegment]
121
133
  """
@@ -141,7 +153,8 @@ def get_job_list(ifos, dq_list, seg_len, seg_mls, seg_edge):
141
153
  lostlivetime += length
142
154
  continue
143
155
  seg_index += 1
144
- job_list.append(WaveSegment(seg_index, ifos, start, stop))
156
+ job_list.append(WaveSegment(seg_index, ifos, start, stop,
157
+ seg_edge=seg_edge, sample_rate=sample_rate))
145
158
  continue
146
159
  if n == 1:
147
160
  if length > seg_len:
@@ -149,32 +162,40 @@ def get_job_list(ifos, dq_list, seg_len, seg_mls, seg_edge):
149
162
  half = int(remainder / 2)
150
163
  if half >= seg_mls:
151
164
  seg_index += 1
152
- job_list.append(WaveSegment(seg_index, ifos, start, start + half))
165
+ job_list.append(WaveSegment(seg_index, ifos, start, start + half,
166
+ seg_edge=seg_edge, sample_rate=sample_rate))
153
167
 
154
168
  seg_index += 1
155
- job_list.append(WaveSegment(seg_index, ifos, start + half, stop))
169
+ job_list.append(WaveSegment(seg_index, ifos, start + half, stop,
170
+ seg_edge=seg_edge, sample_rate=sample_rate))
156
171
  else:
157
172
  seg_index += 1
158
- job_list.append(WaveSegment(seg_index, ifos, start, start + seg_len))
173
+ job_list.append(WaveSegment(seg_index, ifos, start, start + seg_len,
174
+ seg_edge=seg_edge, sample_rate=sample_rate))
159
175
  else:
160
176
  seg_index += 1
161
- job_list.append(WaveSegment(i, ifos, start, stop))
177
+ job_list.append(WaveSegment(i, ifos, start, stop,
178
+ seg_edge=seg_edge, sample_rate=sample_rate))
162
179
  continue
163
180
 
164
181
  for j in range(n - 1):
165
182
  seg_index += 1
166
- job_list.append(WaveSegment(seg_index, ifos, seg_len * j + start, seg_len * j + start + seg_len))
183
+ job_list.append(WaveSegment(seg_index, ifos, seg_len * j + start, seg_len * j + start + seg_len,
184
+ seg_edge=seg_edge, sample_rate=sample_rate))
167
185
 
168
186
  remainder = stop - job_list[-1].end_time
169
187
  half = int(remainder / 2)
170
188
  if half >= seg_mls:
171
189
  seg_index += 1
172
- job_list.append(WaveSegment(seg_index, ifos, job_list[-1].end_time, job_list[-1].end_time + half))
190
+ job_list.append(WaveSegment(seg_index, ifos, job_list[-1].end_time, job_list[-1].end_time + half,
191
+ seg_edge=seg_edge, sample_rate=sample_rate))
173
192
  seg_index += 1
174
- job_list.append(WaveSegment(seg_index, ifos, job_list[-1].end_time, stop))
193
+ job_list.append(WaveSegment(seg_index, ifos, job_list[-1].end_time, stop,
194
+ seg_edge=seg_edge, sample_rate=sample_rate))
175
195
  else:
176
196
  seg_index += 1
177
- job_list.append(WaveSegment(seg_index, ifos, job_list[-1].end_time, job_list[-1].end_time + seg_len))
197
+ job_list.append(WaveSegment(seg_index, ifos, job_list[-1].end_time, job_list[-1].end_time + seg_len,
198
+ seg_edge=seg_edge, sample_rate=sample_rate))
178
199
 
179
200
  logger.info('lost livetime after building of the standard job list = %d sec' % lostlivetime)
180
201
 
@@ -65,9 +65,9 @@ def select_frame_list(frame_list, start, stop, seg_edge):
65
65
  :param frame_list: list of frame metadata
66
66
  :type frame_list: list[FrameFile]
67
67
  :param start: start time of the segment
68
- :type start: int
68
+ :type start: int or float
69
69
  :param stop: stop time of the segment
70
- :type stop: int
70
+ :type stop: int or float
71
71
  :param seg_edge: buffer of the segment
72
72
  :type seg_edge: int or float
73
73
  :return: list of frame
@@ -81,3 +81,46 @@ def select_frame_list(frame_list, start, stop, seg_edge):
81
81
  return frame_list
82
82
 
83
83
 
84
+ def get_frame_files_from_gwdatafind(ifos, sites, frametypes, start, stop, seg_edge, host=None):
85
+ """
86
+ Use gwdatafind to get the frame files for the job segments
87
+
88
+ :param ifos: list of interferometers
89
+ :type ifos: list[str]
90
+ :param sites: list of sites
91
+ :type sites: list[str]
92
+ :param frametypes: list of frame types
93
+ :type frametypes: list[str]
94
+ :param start: start time of the segment
95
+ :type start: int or float
96
+ :param stop: stop time of the segment
97
+ :type stop: int or float
98
+ :param seg_edge: buffer of the segment
99
+ :type seg_edge: int or float
100
+ :param host: host name of the frame server
101
+ :type host: str
102
+
103
+ :return: list of frame files
104
+ :rtype: list[FrameFile]
105
+ """
106
+ from gwdatafind import find_urls
107
+
108
+ seg_start = start - seg_edge
109
+ seg_stop = stop + seg_edge
110
+
111
+ frame_list = []
112
+ for i, frametype in enumerate(frametypes):
113
+ url = find_urls(sites[i], frametype, seg_start, seg_stop, host=host)
114
+ frame_paths = [fp.replace("file://localhost", "") for fp in url]
115
+
116
+ for frame_path in frame_paths:
117
+ # get the file name without the extension with pathlib
118
+ frame_name = Path(frame_path).stem
119
+ # get the gps time and duration with int type
120
+ gps_start, duration = [int(i) for i in frame_name.split("-")[-2:]]
121
+ # append the frame file to the list
122
+ frame_list.append(FrameFile(ifos[i], frame_path, gps_start, duration))
123
+
124
+ return frame_list
125
+
126
+
@@ -4,32 +4,91 @@ import orjson
4
4
 
5
5
  from .super_lag import get_slag_job_list, get_slag_list
6
6
  from .dq_segment import read_seg_list, get_seg_list, get_job_list
7
- from .frame import get_frame_meta, select_frame_list
7
+ from .frame import get_frame_meta, select_frame_list, get_frame_files_from_gwdatafind
8
8
  from pycwb.types.job import WaveSegment
9
9
  from ...utils.module import import_helper
10
+ from pycwb.modules.gracedb import get_superevent_t0
10
11
 
11
12
  logger = logging.getLogger(__name__)
12
13
 
13
14
 
14
15
  def create_job_segment_from_config(config):
16
+ """
17
+ Create job segments based on the configuration file. Currently, the following cases are supported:
18
+ 1. pure simulation mode: only injection parameters are specified
19
+ 2. gps_start and gps_end are specified, only one job segment will be created
20
+ 3. gps_center, time_left, and time_right are specified, only one job segment will be created
21
+ 4. superevent, time_left, and time_right are specified, only one job segment will be created
22
+ 5. DQ files are specified
23
+
24
+ The frame files will be attached to the job segments if fr_files are specified.
25
+ Otherwise, the start and end times of the job segments can be used with the channel names to fetch the data.
26
+
27
+ :param config: The configuration object.
28
+ :type config: Config
29
+ :return:
30
+ :rtype: list[WaveSegment]
31
+ """
15
32
  logger.info("-" * 80)
16
33
  logger.info("Initializing job segments")
17
34
 
18
- if not config.simulation:
19
- job_segments = select_job_segment(config.dq_files, config.ifo, config.frFiles,
35
+
36
+ job_segments = None
37
+ periods = None
38
+
39
+ ## generate job segments based on the configuration if the DQ files or periods are specified
40
+ # case 1: gps_start and gps_end are specified
41
+ if config.gps_start and config.gps_end:
42
+ periods = ([config.gps_start], [config.gps_end])
43
+ # case 2: gps_center, time_left, and time_right are specified
44
+ elif config.gps_center:
45
+ gps_center = int(config.gps_center)
46
+ if not config.time_left and not config.time_right:
47
+ raise ValueError("Please specify either time_left or time_right for the job segment")
48
+ periods = ([gps_center - config.time_left], [gps_center + config.time_right])
49
+ # case 3: superevent, time_left, and time_right are specified
50
+ elif config.superevent:
51
+ if not config.time_left and not config.time_right:
52
+ raise ValueError("Please specify either time_left or time_right for the superevent")
53
+ gps_center = int(get_superevent_t0(config.superevent))
54
+ periods = ([gps_center - config.time_left], [gps_center + config.time_right])
55
+
56
+ # create job segments
57
+ if config.dq_files or periods:
58
+ # get the job segments from the DQ files
59
+ job_segments = job_segment_from_dq(config.dq_files, config.ifo,
20
60
  config.segLen, config.segMLS, config.segEdge, config.segOverlap,
21
- config.rateANA, config.l_high)
22
- else:
23
- job_segments = create_job_segment_from_injection(config.ifo, config.simulation, config.injection)
24
- # for job_seg in job_segments:
25
- # logger.info(job_seg)
26
- # log number of segments
61
+ config.rateANA, config.l_high, config.inRate,
62
+ periods=periods)
63
+
64
+ ## if only simulation mode is specified without DQ files or periods,
65
+ # create job segments based on the injection parameters
66
+ if config.simulation and job_segments is None:
67
+ # TODO: split out the injection part for other job types
68
+ job_segments = create_job_segment_from_injection(config.ifo, config.simulation, config.injection,
69
+ config.inRate, config.segEdge)
70
+
71
+ ## TODO: when the DQ files and simulation both are specified, inject the parameters into the job segments
72
+
73
+ # attach the frame files to the job segments if defined
74
+ if config.frFiles:
75
+ attach_frame_files_to_job_segments(job_segments, config.ifo, config.frFiles, config.segEdge)
76
+
77
+ if config.gwdatafind:
78
+ gwdatafind_frames_for_job_segments(job_segments, config.ifo, config.gwdatafind, config.segEdge)
79
+ # attach the channel names to the job segments
80
+ if config.channelNamesRaw:
81
+ for job_seg in job_segments:
82
+ job_seg.channels = config.channelNamesRaw
83
+
84
+ ## TODO: check if the job segments are valid
27
85
  logger.info(f"Number of segments: {len(job_segments)}")
28
86
  logger.info("-" * 80)
29
87
  return job_segments
30
88
 
31
89
 
32
- def select_job_segment(dq_file_list, ifos, fr_files, seg_len, seg_mls, seg_edge, seg_overlap, rateANA, l_high,
90
+ def job_segment_from_dq(dq_file_list, ifos, seg_len, seg_mls, seg_edge, seg_overlap, rateANA, l_high, sample_rate,
91
+ periods=None,
33
92
  slag_size=0, slag_off=0, slag_min=0, slag_max=0, slag_site=0, slag_file=0):
34
93
  """Select a job segment from the database.
35
94
 
@@ -37,8 +96,6 @@ def select_job_segment(dq_file_list, ifos, fr_files, seg_len, seg_mls, seg_edge,
37
96
  :type dq_file_list: list[DQFile]
38
97
  :param ifos: The list of interferometers.
39
98
  :type ifos: list[str]
40
- :param fr_files: The list of frame files.
41
- :type fr_files: list[FrameFile]
42
99
  :param seg_len: The segment length.
43
100
  :type seg_len: int
44
101
  :param seg_mls: The minimum segment length after DQ_CAT1.
@@ -51,6 +108,10 @@ def select_job_segment(dq_file_list, ifos, fr_files, seg_len, seg_mls, seg_edge,
51
108
  :type rateANA: int
52
109
  :param l_high: The high frequency cutoff.
53
110
  :type l_high: int
111
+ :param sample_rate: The sample rate.
112
+ :type sample_rate: int
113
+ :param periods: Given start and stop periods, will be added with the dq_file_list
114
+ :type periods: tuple[list[int], list[int]]
54
115
  :param slag_size: The super lag size.
55
116
  :type slag_size: int, optional
56
117
  :param slag_off: The super lag offset.
@@ -68,7 +129,7 @@ def select_job_segment(dq_file_list, ifos, fr_files, seg_len, seg_mls, seg_edge,
68
129
  """
69
130
  if slag_size > 0:
70
131
  # TODO: not finished
71
- cat1_list = read_seg_list(dq_file_list, 'CWB_CAT1')
132
+ cat1_list = read_seg_list(dq_file_list, 'CWB_CAT1', periods)
72
133
 
73
134
  # Get number/list of available super lag jobs
74
135
  # Compute the available segments with length=segLen contained between the interval [min,max]
@@ -91,9 +152,9 @@ def select_job_segment(dq_file_list, ifos, fr_files, seg_len, seg_mls, seg_edge,
91
152
  raise Exception("Not finished")
92
153
 
93
154
  else:
94
- cat1_list = read_seg_list(dq_file_list, 'CWB_CAT1')
155
+ cat1_list = read_seg_list(dq_file_list, 'CWB_CAT1', periods)
95
156
 
96
- job_segments = get_job_list(ifos, cat1_list, seg_len, seg_mls, seg_edge)
157
+ job_segments = get_job_list(ifos, cat1_list, seg_len, seg_mls, seg_edge, sample_rate)
97
158
 
98
159
  rate_min = rateANA >> l_high
99
160
  for job_seg in job_segments:
@@ -112,6 +173,10 @@ def select_job_segment(dq_file_list, ifos, fr_files, seg_len, seg_mls, seg_edge,
112
173
  logger.debug(f"job segment gps range = {job_seg.start_time} - {job_seg.end_time}")
113
174
  logger.info(f"Number of job segments = {len(job_segments)}")
114
175
 
176
+ return job_segments
177
+
178
+
179
+ def attach_frame_files_to_job_segments(job_segments, ifos, fr_files, seg_edge):
115
180
  # Get frame file list
116
181
  frame_files = []
117
182
  for i in range(len(ifos)):
@@ -122,10 +187,35 @@ def select_job_segment(dq_file_list, ifos, fr_files, seg_len, seg_mls, seg_edge,
122
187
  for job_seg in job_segments:
123
188
  job_seg.frames = select_frame_list(frame_files, job_seg.start_time, job_seg.end_time, seg_edge)
124
189
 
125
- return job_segments
190
+
191
+ def gwdatafind_frames_for_job_segments(job_segments, ifos, gwdatafind, seg_edge):
192
+ """
193
+ Use gwdatafind to get the frame files for the job segments
194
+
195
+ :param job_segments: The job segments.
196
+ :type job_segments: list[WaveSegment]
197
+ :param ifos: The list of interferometers.
198
+ :type ifos: list[str]
199
+ :param gwdatafind: The gwdatafind setting.
200
+ :type gwdatafind: dict
201
+ :param seg_edge: The wavelet boundary offset.
202
+ :type seg_edge: int
203
+
204
+ :return: None
205
+ """
206
+ from gwdatafind import find_urls
207
+
208
+ # prepare the gwdatafind.find_urls arguments
209
+ if 'site' not in gwdatafind:
210
+ gwdatafind['site'] = [ifo[0] for ifo in ifos]
211
+ host = gwdatafind.get('host')
212
+
213
+ for job_seg in job_segments:
214
+ job_seg.frames = get_frame_files_from_gwdatafind(ifos, gwdatafind['site'], gwdatafind['frametype'],
215
+ job_seg.start_time, job_seg.end_time, seg_edge, host=host)
126
216
 
127
217
 
128
- def create_job_segment_from_injection(ifo, simulation_mode, injection):
218
+ def create_job_segment_from_injection(ifo, simulation_mode, injection, sample_rate, seg_edge):
129
219
  # get the injection parameters
130
220
  if 'parameters' in injection:
131
221
  if isinstance(injection['parameters'], list):
@@ -158,6 +248,7 @@ def create_job_segment_from_injection(ifo, simulation_mode, injection):
158
248
  if simulation_mode == "all_inject_in_one_segment":
159
249
  # inject all the parameters in one job segment
160
250
  job_segments = [WaveSegment(0, ifo, injection['segment']['start'], injection['segment']['end'],
251
+ sample_rate=sample_rate, seg_edge=seg_edge,
161
252
  noise=noise, injections=injections)]
162
253
  elif simulation_mode == "one_inject_in_one_segment":
163
254
  # repeat the injection N times for the same job segment
@@ -166,6 +257,7 @@ def create_job_segment_from_injection(ifo, simulation_mode, injection):
166
257
  # raise ValueError(f"The number of injections ({len(injections)}) does not match the number of repeats ({repeat})")
167
258
 
168
259
  job_segments = [WaveSegment(i, ifo, injection['segment']['start'], injection['segment']['end'],
260
+ sample_rate=sample_rate, seg_edge=seg_edge,
169
261
  noise=noise, injections=[injections[i]])
170
262
  for i in range(repeat)]
171
263
  else:
@@ -0,0 +1,30 @@
1
+ import unittest
2
+ from .job_segment import read_seg_list, get_job_list
3
+
4
+ class TestJobSegment(unittest.TestCase):
5
+ def test_read_seg_list(self):
6
+ periods = ([100000], [100000 + 2400])
7
+ expected_output = ([100000], [102400])
8
+ cat1_list = read_seg_list(periods=periods)
9
+
10
+ self.assertEqual(cat1_list, expected_output)
11
+
12
+ def test_get_job_list(self):
13
+ periods = ([100000], [100000 + 2400])
14
+ ifos = ['H1', 'L1']
15
+ seg_len = 1200
16
+ seg_mls = 600
17
+ seg_edge = 10
18
+ sample_rate = 4096
19
+ cat1_list = read_seg_list(periods=periods)
20
+
21
+ job_segments = get_job_list(ifos, cat1_list, seg_len, seg_mls, seg_edge, sample_rate)
22
+ self.assertEqual(len(job_segments), 2)
23
+ self.assertEqual(job_segments[0].start_time, 100010)
24
+ self.assertEqual(job_segments[0].end_time, 101200)
25
+ self.assertEqual(job_segments[1].start_time, 101200)
26
+ self.assertEqual(job_segments[1].end_time, 102390)
27
+
28
+
29
+ if __name__ == '__main__':
30
+ unittest.main()
@@ -185,8 +185,8 @@ def merge_frames(job_seg, data, seg_edge):
185
185
 
186
186
  def read_single_frame_from_job_segment(config, frame, job_seg: WaveSegment):
187
187
  # should read data with segment edge
188
- start = job_seg.start_time - config.segEdge
189
- end = job_seg.end_time + config.segEdge
188
+ start = job_seg.start_time - job_seg.seg_edge
189
+ end = job_seg.end_time + job_seg.seg_edge
190
190
 
191
191
  # for each frame, if the frame start time is later than the job segment start time, use the frame start time
192
192
  if frame.start_time > start:
@@ -196,14 +196,14 @@ def read_single_frame_from_job_segment(config, frame, job_seg: WaveSegment):
196
196
  if frame.end_time < end:
197
197
  end = frame.end_time
198
198
 
199
- i = config.ifo.index(frame.ifo)
200
- data = read_from_gwf(frame.path, config.channelNamesRaw[i], start=start, end=end)
199
+ i = job_seg.ifos.index(frame.ifo)
200
+ data = read_from_gwf(frame.path, job_seg.channels[i], start=start, end=end)
201
201
  print(f'Read data: start={data.t0}, duration={data.duration}, rate={data.sample_rate}')
202
- if int(data.sample_rate.value) != int(config.inRate):
202
+ if int(data.sample_rate.value) != int(job_seg.sample_rate):
203
203
  sample_rate_old = data.sample_rate.value
204
204
  w = convert_to_wavearray(data)
205
- w.Resample(config.inRate)
205
+ w.Resample(job_seg.sample_rate)
206
206
  data = convert_wavearray_to_timeseries(w)
207
207
  # data = data.resample(config.inRate)
208
- print(f'Resample data from {sample_rate_old} to {config.inRate}')
208
+ print(f'Resample data from {sample_rate_old} to {job_seg.sample_rate}')
209
209
  return check_and_resample(data, config, i)
@@ -52,8 +52,14 @@ class WaveSegment:
52
52
  start time of the segment
53
53
  end_time: float
54
54
  end time of the segment
55
+ sample_rate: float
56
+ sample rate of the segment
55
57
  shift: list, optional
56
58
  list of shifts for each interferometer, used for superlags
59
+ seg_edge: float, optional
60
+ the edge of the segment
61
+ channels: list, optional
62
+ list of data channels for each interferometer
57
63
  frames: list, optional
58
64
  list of frame files that are within the segment
59
65
  noise: dict, optional
@@ -65,8 +71,10 @@ class WaveSegment:
65
71
  ifos: List[str]
66
72
  start_time: float
67
73
  end_time: float
74
+ sample_rate: float
75
+ seg_edge: float
68
76
  shift: List[float] = None
69
- seg_edge: Optional[float] = None
77
+ channels: Optional[List[str]] = None
70
78
  frames: Optional[List[FrameFile]] = None
71
79
  noise: Optional[Dict] = None
72
80
  injections: Optional[List[Dict]] = None
@@ -43,6 +43,6 @@ def set_default(params, schema):
43
43
  """
44
44
  for key in schema['properties'].keys():
45
45
  if key not in params:
46
- params[key] = schema['properties'][key]['default']
46
+ params[key] = schema['properties'][key]['default'] if 'default' in schema['properties'][key] else None
47
47
 
48
48
  return params
File without changes
File without changes
File without changes