PycWB 0.22.0__tar.gz → 0.22.1__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 (386) hide show
  1. {PycWB-0.22.0 → pycwb-0.22.1}/PKG-INFO +2 -1
  2. {PycWB-0.22.0 → pycwb-0.22.1}/PycWB.egg-info/PKG-INFO +2 -1
  3. {PycWB-0.22.0 → pycwb-0.22.1}/PycWB.egg-info/SOURCES.txt +3 -0
  4. {PycWB-0.22.0 → pycwb-0.22.1}/PycWB.egg-info/requires.txt +1 -0
  5. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/_version.py +2 -2
  6. pycwb-0.22.1/pycwb/cli/run.py +87 -0
  7. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/constants/user_parameters_schema.py +48 -0
  8. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/job_segment/job_segment.py +27 -0
  9. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/statistics/eff.py +55 -17
  10. pycwb-0.22.1/pycwb/modules/statistics/eff_plot.py +45 -0
  11. pycwb-0.22.1/pycwb/modules/statistics/merge.py +65 -0
  12. pycwb-0.22.1/pycwb/modules/statistics/sigmoid_fit.py +81 -0
  13. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/workflow_utils/job_setup.py +18 -6
  14. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/job.py +3 -0
  15. pycwb-0.22.1/pycwb/workflow/batch.py +168 -0
  16. pycwb-0.22.1/pycwb/workflow/subflow/__init__.py +2 -0
  17. pycwb-0.22.1/pycwb/workflow/subflow/prepare_job_runs.py +102 -0
  18. {PycWB-0.22.0 → pycwb-0.22.1}/setup.py +1 -0
  19. PycWB-0.22.0/pycwb/cli/run.py +0 -87
  20. PycWB-0.22.0/pycwb/workflow/batch.py +0 -116
  21. PycWB-0.22.0/pycwb/workflow/subflow/__init__.py +0 -2
  22. PycWB-0.22.0/pycwb/workflow/subflow/prepare_job_runs.py +0 -42
  23. {PycWB-0.22.0 → pycwb-0.22.1}/.gitignore +0 -0
  24. {PycWB-0.22.0 → pycwb-0.22.1}/.gitlab-ci.yml +0 -0
  25. {PycWB-0.22.0 → pycwb-0.22.1}/LICENSE +0 -0
  26. {PycWB-0.22.0 → pycwb-0.22.1}/MANIFEST.in +0 -0
  27. {PycWB-0.22.0 → pycwb-0.22.1}/Makefile +0 -0
  28. {PycWB-0.22.0 → pycwb-0.22.1}/PycWB.egg-info/dependency_links.txt +0 -0
  29. {PycWB-0.22.0 → pycwb-0.22.1}/PycWB.egg-info/top_level.txt +0 -0
  30. {PycWB-0.22.0 → pycwb-0.22.1}/README.md +0 -0
  31. {PycWB-0.22.0 → pycwb-0.22.1}/benchmark/README.md +0 -0
  32. {PycWB-0.22.0 → pycwb-0.22.1}/benchmark/likelihood/README.md +0 -0
  33. {PycWB-0.22.0 → pycwb-0.22.1}/benchmark/likelihood/generate_data_for_likelihood.py +0 -0
  34. {PycWB-0.22.0 → pycwb-0.22.1}/benchmark/likelihood/performance_test_dpf.py +0 -0
  35. {PycWB-0.22.0 → pycwb-0.22.1}/benchmark/likelihood/performance_test_opt_sky.py +0 -0
  36. {PycWB-0.22.0 → pycwb-0.22.1}/benchmark/likelihood/user_parameters_injection.yaml +0 -0
  37. {PycWB-0.22.0 → pycwb-0.22.1}/benchmark/supercluster/README.md +0 -0
  38. {PycWB-0.22.0 → pycwb-0.22.1}/benchmark/supercluster/generate_data.py +0 -0
  39. {PycWB-0.22.0 → pycwb-0.22.1}/benchmark/supercluster/generate_data_2.py +0 -0
  40. {PycWB-0.22.0 → pycwb-0.22.1}/benchmark/supercluster/performance_supercluster.py +0 -0
  41. {PycWB-0.22.0 → pycwb-0.22.1}/benchmark/supercluster/user_parameters_injection.yaml +0 -0
  42. {PycWB-0.22.0 → pycwb-0.22.1}/bin/pycwb +0 -0
  43. {PycWB-0.22.0 → pycwb-0.22.1}/bin/pycwb_search +0 -0
  44. {PycWB-0.22.0 → pycwb-0.22.1}/bin/pycwb_show +0 -0
  45. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Biorthogonal.cc +0 -0
  46. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Biorthogonal.hh +0 -0
  47. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/CMakeLists.txt +0 -0
  48. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Daubechies.cc +0 -0
  49. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Daubechies.hh +0 -0
  50. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/FourierCoefficients.icc +0 -0
  51. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Haar.cc +0 -0
  52. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Haar.hh +0 -0
  53. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/LineFilter.cc +0 -0
  54. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/LineFilter.hh +0 -0
  55. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Makefile +0 -0
  56. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Meyer.cc +0 -0
  57. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Meyer.hh +0 -0
  58. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Symlet.cc +0 -0
  59. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Symlet.hh +0 -0
  60. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/SymmArray.cc +0 -0
  61. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/SymmArray.hh +0 -0
  62. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/SymmArraySSE.cc +0 -0
  63. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/SymmArraySSE.hh +0 -0
  64. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/SymmObjArray.cc +0 -0
  65. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/SymmObjArray.hh +0 -0
  66. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/WDM.cc +0 -0
  67. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/WDM.hh +0 -0
  68. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/WDMOverlap.cc +0 -0
  69. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/WDMOverlap.hh +0 -0
  70. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/WaveDWT.cc +0 -0
  71. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/WaveDWT.hh +0 -0
  72. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Wavelet.cc +0 -0
  73. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/Wavelet.hh +0 -0
  74. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/alm.hh +0 -0
  75. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/build.sh +0 -0
  76. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/cluster.cc +0 -0
  77. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/cluster.hh +0 -0
  78. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/cmake/FindHealpix.cmake +0 -0
  79. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/cmake/FindeBBH.cmake +0 -0
  80. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/cmake/install_function.cmake +0 -0
  81. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/constants.hh +0 -0
  82. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/detector.cc +0 -0
  83. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/detector.hh +0 -0
  84. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/injection.cc +0 -0
  85. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/injection.hh +0 -0
  86. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/lossy.cc +0 -0
  87. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/lossy.hh +0 -0
  88. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/monster.cc +0 -0
  89. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/monster.hh +0 -0
  90. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/netcluster.cc +0 -0
  91. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/netcluster.hh +0 -0
  92. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/netevent.cc +0 -0
  93. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/netevent.hh +0 -0
  94. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/netpixel.cc +0 -0
  95. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/netpixel.hh +0 -0
  96. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/network.cc +0 -0
  97. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/network.hh +0 -0
  98. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/pycwb.hh +0 -0
  99. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/rdfr.cc +0 -0
  100. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/rdfr.hh +0 -0
  101. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/readframe.cc +0 -0
  102. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/readframe.hh +0 -0
  103. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/readfrfile.cc +0 -0
  104. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/readfrfile.hh +0 -0
  105. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/regression.cc +0 -0
  106. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/regression.hh +0 -0
  107. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/skycoord.hh +0 -0
  108. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/skymap.cc +0 -0
  109. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/skymap.hh +0 -0
  110. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/sseries.cc +0 -0
  111. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/sseries.hh +0 -0
  112. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/time.cc +0 -0
  113. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/time.hh +0 -0
  114. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wat.hh +0 -0
  115. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/watasm.S +0 -0
  116. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/watasm_elf64.o +0 -0
  117. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/watavx.hh +0 -0
  118. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/watbranch.in +0 -0
  119. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/watfun.hh +0 -0
  120. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wathash.in +0 -0
  121. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/watplot.cc +0 -0
  122. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/watplot.hh +0 -0
  123. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/watsse.hh +0 -0
  124. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wattag.in +0 -0
  125. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/waturl.in +0 -0
  126. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/watversion.hh.in +0 -0
  127. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wavearray.cc +0 -0
  128. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wavearray.hh +0 -0
  129. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wavecomplex.cc +0 -0
  130. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wavecomplex.hh +0 -0
  131. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wavecor.cc +0 -0
  132. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wavecor.hh +0 -0
  133. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wavefft.cc +0 -0
  134. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wavefft.hh +0 -0
  135. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wavelet_LinkDef.h +0 -0
  136. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wavelinefilter.cc +0 -0
  137. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wavelinefilter.hh +0 -0
  138. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/waverdc.cc +0 -0
  139. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/waverdc.hh +0 -0
  140. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wseries.cc +0 -0
  141. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wseries.hh +0 -0
  142. {PycWB-0.22.0 → pycwb-0.22.1}/cwb-core/wslice.hh +0 -0
  143. {PycWB-0.22.0 → pycwb-0.22.1}/docs/0.installation_guide.md +0 -0
  144. {PycWB-0.22.0 → pycwb-0.22.1}/docs/1.initialisation_guide.md +0 -0
  145. {PycWB-0.22.0 → pycwb-0.22.1}/docs/2.test_interactive_multistages_2G_analysis.md +0 -0
  146. {PycWB-0.22.0 → pycwb-0.22.1}/docs/3.run_pycwb_with_yaml_config.md +0 -0
  147. {PycWB-0.22.0 → pycwb-0.22.1}/docs/4.py_cwb_inet_2G.md +0 -0
  148. {PycWB-0.22.0 → pycwb-0.22.1}/docs/5.cwb2G_analyse.md +0 -0
  149. {PycWB-0.22.0 → pycwb-0.22.1}/docs/6.wat_codes_notes.md +0 -0
  150. {PycWB-0.22.0 → pycwb-0.22.1}/docs/Makefile +0 -0
  151. {PycWB-0.22.0 → pycwb-0.22.1}/docs/diagram.py +0 -0
  152. {PycWB-0.22.0 → pycwb-0.22.1}/docs/make.bat +0 -0
  153. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/_static/.keep +0 -0
  154. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/_templates/.keep +0 -0
  155. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/conf.py +0 -0
  156. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/credit.rst +0 -0
  157. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/index.rst +0 -0
  158. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/install.rst +0 -0
  159. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/mod_cwb.rst +0 -0
  160. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/package.rst +0 -0
  161. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/schema.rst +0 -0
  162. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/tutorial_batch_inj.rst +0 -0
  163. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/tutorial_customized_wf_gen.rst +0 -0
  164. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/tutorial_injection.rst +0 -0
  165. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/tutorial_multi_injection.rst +0 -0
  166. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/tutorial_search.rst +0 -0
  167. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/tutorials.rst +0 -0
  168. {PycWB-0.22.0 → pycwb-0.22.1}/docs/source/workflow.png +0 -0
  169. {PycWB-0.22.0 → pycwb-0.22.1}/envs/Dockerfile +0 -0
  170. {PycWB-0.22.0 → pycwb-0.22.1}/envs/mamba/Dockerfile +0 -0
  171. {PycWB-0.22.0 → pycwb-0.22.1}/examples/autoencoder/pycwb_injection.ipynb +0 -0
  172. {PycWB-0.22.0 → pycwb-0.22.1}/examples/autoencoder/user_parameters_injection.yaml +0 -0
  173. {PycWB-0.22.0 → pycwb-0.22.1}/examples/batch_injection/generate_parameters.py +0 -0
  174. {PycWB-0.22.0 → pycwb-0.22.1}/examples/batch_injection/pycbc_inject/hyperbolicTD/__init__.py +0 -0
  175. {PycWB-0.22.0 → pycwb-0.22.1}/examples/batch_injection/pycbc_inject/hyperbolicTD/parameters.py +0 -0
  176. {PycWB-0.22.0 → pycwb-0.22.1}/examples/batch_injection/pycbc_inject/hyperbolicTD/waveform.py +0 -0
  177. {PycWB-0.22.0 → pycwb-0.22.1}/examples/batch_injection/pycwb_injection.py +0 -0
  178. {PycWB-0.22.0 → pycwb-0.22.1}/examples/batch_injection/user_parameters_injection.yaml +0 -0
  179. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/DQ/H1_cat0.txt +0 -0
  180. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/DQ/H1_cat1.txt +0 -0
  181. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/DQ/H1_cat2.txt +0 -0
  182. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/DQ/H1_cat4.txt +0 -0
  183. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/DQ/L1_cat0.txt +0 -0
  184. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/DQ/L1_cat1.txt +0 -0
  185. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/DQ/L1_cat2.txt +0 -0
  186. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/DQ/L1_cat4.txt +0 -0
  187. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/input/OPBM.period +0 -0
  188. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/input/OPBM_H1.frames +0 -0
  189. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/input/OPBM_L1.frames +0 -0
  190. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/pycwb_mdc.py +0 -0
  191. {PycWB-0.22.0 → pycwb-0.22.1}/examples/benchmark/user_parameters_mdc.yaml +0 -0
  192. {PycWB-0.22.0 → pycwb-0.22.1}/examples/colab/pycWB_GW150914.ipynb +0 -0
  193. {PycWB-0.22.0 → pycwb-0.22.1}/examples/injection/pycwb_injection.ipynb +0 -0
  194. {PycWB-0.22.0 → pycwb-0.22.1}/examples/injection/pycwb_injection.py +0 -0
  195. {PycWB-0.22.0 → pycwb-0.22.1}/examples/injection/user_parameters_injection.yaml +0 -0
  196. {PycWB-0.22.0 → pycwb-0.22.1}/examples/lvk_sep_2023/demo.ipynb +0 -0
  197. {PycWB-0.22.0 → pycwb-0.22.1}/examples/lvk_sep_2023/user_parameters.yaml +0 -0
  198. {PycWB-0.22.0 → pycwb-0.22.1}/examples/multiple_injection/pycwb_injection.py +0 -0
  199. {PycWB-0.22.0 → pycwb-0.22.1}/examples/multiple_injection/user_parameters_injection.yaml +0 -0
  200. {PycWB-0.22.0 → pycwb-0.22.1}/examples/pyseobnr_injection/generate_parameters.py +0 -0
  201. {PycWB-0.22.0 → pycwb-0.22.1}/examples/pyseobnr_injection/user_parameters_injection.yaml +0 -0
  202. {PycWB-0.22.0 → pycwb-0.22.1}/examples/pyseobnr_injection/waveform_model/__init__.py +0 -0
  203. {PycWB-0.22.0 → pycwb-0.22.1}/examples/pyseobnr_injection/waveform_model/waveform.py +0 -0
  204. {PycWB-0.22.0 → pycwb-0.22.1}/examples/waveform_reconstruction/reconstruct_waveform_from_cluster.ipynb +0 -0
  205. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/cwb_core/coherence.cc +0 -0
  206. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/cwb_core/coherence.hh +0 -0
  207. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/cwb_core/likelihood.cc +0 -0
  208. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/cwb_core/likelihood.hh +0 -0
  209. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/dag/dag.py +0 -0
  210. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/dag/dask-prefect.py +0 -0
  211. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/dag/prefect_test.py +0 -0
  212. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger/__init__.py +0 -0
  213. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger/server.py +0 -0
  214. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger/visualizition.py +0 -0
  215. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/.eslintrc.cjs +0 -0
  216. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/.gitignore +0 -0
  217. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/.prettierrc.json +0 -0
  218. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/README.md +0 -0
  219. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/index.html +0 -0
  220. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/package-lock.json +0 -0
  221. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/package.json +0 -0
  222. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/public/favicon.ico +0 -0
  223. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/App.vue +0 -0
  224. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/assets/base.css +0 -0
  225. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/assets/cwb_icon_modern_blue_alfa.png +0 -0
  226. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/assets/main.css +0 -0
  227. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/assets/style.css +0 -0
  228. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/components/HelloWorld.vue +0 -0
  229. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/components/TheWelcome.vue +0 -0
  230. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/components/WelcomeItem.vue +0 -0
  231. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/components/__tests__/HelloWorld.spec.js +0 -0
  232. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/components/icons/IconCommunity.vue +0 -0
  233. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/components/icons/IconDocumentation.vue +0 -0
  234. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/components/icons/IconEcosystem.vue +0 -0
  235. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/components/icons/IconSupport.vue +0 -0
  236. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/components/icons/IconTooling.vue +0 -0
  237. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/main.js +0 -0
  238. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/router/index.js +0 -0
  239. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/stores/counter.js +0 -0
  240. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/views/drawflow.vue +0 -0
  241. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/views/nodes/node1.vue +0 -0
  242. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/views/nodes/node2.vue +0 -0
  243. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/views/nodes/node3.vue +0 -0
  244. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/src/views/nodes/nodeHeader.vue +0 -0
  245. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/messenger-web-interface/vite.config.js +0 -0
  246. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/performance/numba_test.py +0 -0
  247. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/performance/taichi_test.py +0 -0
  248. {PycWB-0.22.0 → pycwb-0.22.1}/prototypes/search.yaml +0 -0
  249. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/__init__.py +0 -0
  250. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/cli/__init__.py +0 -0
  251. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/cli/batch.py +0 -0
  252. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/cli/flow.py +0 -0
  253. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/cli/server.py +0 -0
  254. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/cli/xtalk.py +0 -0
  255. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/config/__init__.py +0 -0
  256. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/config/config.py +0 -0
  257. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/constants/__init__.py +0 -0
  258. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/constants/project_constants.py +0 -0
  259. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/__init__.py +0 -0
  260. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/autoencoder/__init__.py +0 -0
  261. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/autoencoder/autoencoder.py +0 -0
  262. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/autoencoder/cwb_autoencoder.py +0 -0
  263. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/autoencoder/module.yaml +0 -0
  264. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/catalog/__init__.py +0 -0
  265. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/catalog/catalog.py +0 -0
  266. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/catalog/module.yaml +0 -0
  267. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/coherence/__init__.py +0 -0
  268. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/coherence/coherence.py +0 -0
  269. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/coherence/coherence_lite.py +0 -0
  270. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/coherence/module.yaml +0 -0
  271. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/condor/__init__.py +0 -0
  272. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/condor/condor.py +0 -0
  273. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/condor/module.yaml +0 -0
  274. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/cwb_conversions/__init__.py +0 -0
  275. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/cwb_conversions/cluster.py +0 -0
  276. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/cwb_conversions/module.yaml +0 -0
  277. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/cwb_conversions/pixel.py +0 -0
  278. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/cwb_conversions/series.py +0 -0
  279. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/cwb_conversions/sparse_series.py +0 -0
  280. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/data_conditioning/__init__.py +0 -0
  281. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/data_conditioning/data_conditioning.py +0 -0
  282. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/data_conditioning/module.yaml +0 -0
  283. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/data_conditioning/regression.py +0 -0
  284. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/data_conditioning/whitening.py +0 -0
  285. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/job_segment/__init__.py +0 -0
  286. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/job_segment/dq_segment.py +0 -0
  287. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/job_segment/frame.py +0 -0
  288. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/job_segment/module.yaml +0 -0
  289. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/job_segment/plots.py +0 -0
  290. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/job_segment/super_lag.py +0 -0
  291. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/likelihood/__init__.py +0 -0
  292. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/likelihood/likelihood.py +0 -0
  293. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/likelihood/module.yaml +0 -0
  294. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/likelihoodWP/__init__.py +0 -0
  295. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/likelihoodWP/dpf.py +0 -0
  296. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/likelihoodWP/dpf_cython.pyx +0 -0
  297. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/likelihoodWP/likelihood.py +0 -0
  298. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/likelihoodWP/sky_stat.py +0 -0
  299. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/likelihoodWP/utils.py +0 -0
  300. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/logger/__init__.py +0 -0
  301. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/logger/logger.py +0 -0
  302. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/logger/module.yaml +0 -0
  303. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/multi_resolution_wdm/__init__.py +0 -0
  304. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/multi_resolution_wdm/module.yaml +0 -0
  305. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/multi_resolution_wdm/wdm.py +0 -0
  306. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot/__init__.py +0 -0
  307. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot/cluster_statistics.py +0 -0
  308. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot/event.py +0 -0
  309. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot/module.yaml +0 -0
  310. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot/spectrogram.py +0 -0
  311. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot/waveform.py +0 -0
  312. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot_data_quality/__init__.py +0 -0
  313. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot_data_quality/module.yaml +0 -0
  314. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot_data_quality/plot.py +0 -0
  315. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot_map/__init__.py +0 -0
  316. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot_map/module.yaml +0 -0
  317. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/plot_map/world_map.py +0 -0
  318. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/read_data/__init__.py +0 -0
  319. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/read_data/data_check.py +0 -0
  320. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/read_data/data_find.py +0 -0
  321. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/read_data/mdc.py +0 -0
  322. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/read_data/module.yaml +0 -0
  323. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/read_data/read_data.py +0 -0
  324. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/reconstruction/__init__.py +0 -0
  325. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/reconstruction/getMRAwaveform.py +0 -0
  326. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/reconstruction/module.yaml +0 -0
  327. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/sparse_series/__init__.py +0 -0
  328. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/sparse_series/module.yaml +0 -0
  329. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/sparse_series/sparse_table.py +0 -0
  330. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/statistics/__init__.py +0 -0
  331. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/super_cluster/__init__.py +0 -0
  332. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/super_cluster/module.yaml +0 -0
  333. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/super_cluster/sub_net_cut.py +0 -0
  334. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/super_cluster/super_cluster.py +0 -0
  335. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/super_cluster/supercluster.py +0 -0
  336. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/super_cluster/utils.py +0 -0
  337. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/superlag/__init__.py +0 -0
  338. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/superlag/superlag.py +0 -0
  339. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/web_viewer/__init__.py +0 -0
  340. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/web_viewer/create.py +0 -0
  341. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/web_viewer/module.yaml +0 -0
  342. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/workflow_utils/__init__.py +0 -0
  343. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/xtalk/__init__.py +0 -0
  344. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/xtalk/monster.py +0 -0
  345. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/modules/xtalk/monster_old.py +0 -0
  346. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/prefect_flow/__init__.py +0 -0
  347. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/prefect_flow/pycwb_flow.py +0 -0
  348. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/prefect_flow/tasks/__init__.py +0 -0
  349. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/prefect_flow/tasks/builtin.py +0 -0
  350. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/search.py +0 -0
  351. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/__init__.py +0 -0
  352. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/data_quality_file.py +0 -0
  353. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/detector.py +0 -0
  354. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/network.py +0 -0
  355. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/network_cluster.py +0 -0
  356. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/network_event.py +0 -0
  357. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/network_pixel.py +0 -0
  358. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/sparse_series.py +0 -0
  359. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/time_frequency_series.py +0 -0
  360. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/wdm.py +0 -0
  361. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/types/wdm_xtalk.py +0 -0
  362. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/__init__.py +0 -0
  363. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/async_write.py +0 -0
  364. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/check_ROOT.py +0 -0
  365. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/conversions/__init__.py +0 -0
  366. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/conversions/timeseries.py +0 -0
  367. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/dataclass_object_io.py +0 -0
  368. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/dep_check.py +0 -0
  369. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/image.py +0 -0
  370. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/module.py +0 -0
  371. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/network.py +0 -0
  372. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/skymap_coord.py +0 -0
  373. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/utils/yaml_helper.py +0 -0
  374. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/vendor/__init__.py +0 -0
  375. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/vendor/autoencoder/__init__.py +0 -0
  376. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/vendor/autoencoder/cwb_autoencoder.h5 +0 -0
  377. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/vendor/example.yaml +0 -0
  378. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/vendor/lib/__init__.py +0 -0
  379. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/vendor/web_viewer/event_dump.html +0 -0
  380. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/vendor/web_viewer/styles.css +0 -0
  381. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/vendor/web_viewer/viewer.html +0 -0
  382. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/workflow/__init__.py +0 -0
  383. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/workflow/subflow/postprocess_and_plots.py +0 -0
  384. {PycWB-0.22.0 → pycwb-0.22.1}/pycwb/workflow/subflow/supercluster_and_likelihood.py +0 -0
  385. {PycWB-0.22.0 → pycwb-0.22.1}/pyproject.toml +0 -0
  386. {PycWB-0.22.0 → pycwb-0.22.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PycWB
3
- Version: 0.22.0
3
+ Version: 0.22.1
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>
@@ -30,6 +30,7 @@ Requires-Dist: prefect
30
30
  Requires-Dist: prefect-dask
31
31
  Requires-Dist: dask
32
32
  Requires-Dist: dask_jobqueue
33
+ Requires-Dist: htcondor
33
34
 
34
35
  # PycWB
35
36
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PycWB
3
- Version: 0.22.0
3
+ Version: 0.22.1
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>
@@ -30,6 +30,7 @@ Requires-Dist: prefect
30
30
  Requires-Dist: prefect-dask
31
31
  Requires-Dist: dask
32
32
  Requires-Dist: dask_jobqueue
33
+ Requires-Dist: htcondor
33
34
 
34
35
  # PycWB
35
36
 
@@ -317,6 +317,9 @@ pycwb/modules/sparse_series/module.yaml
317
317
  pycwb/modules/sparse_series/sparse_table.py
318
318
  pycwb/modules/statistics/__init__.py
319
319
  pycwb/modules/statistics/eff.py
320
+ pycwb/modules/statistics/eff_plot.py
321
+ pycwb/modules/statistics/merge.py
322
+ pycwb/modules/statistics/sigmoid_fit.py
320
323
  pycwb/modules/super_cluster/__init__.py
321
324
  pycwb/modules/super_cluster/module.yaml
322
325
  pycwb/modules/super_cluster/sub_net_cut.py
@@ -20,3 +20,4 @@ prefect
20
20
  prefect-dask
21
21
  dask
22
22
  dask_jobqueue
23
+ htcondor
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.22.0'
16
- __version_tuple__ = version_tuple = (0, 22, 0)
15
+ __version__ = version = '0.22.1'
16
+ __version_tuple__ = version_tuple = (0, 22, 1)
@@ -0,0 +1,87 @@
1
+ import os
2
+
3
+
4
+ def init_parser(parser):
5
+ # Add the arguments
6
+ parser.add_argument('user_parameter_file',
7
+ metavar='file_path',
8
+ type=str,
9
+ help='the path to the user parameter file')
10
+
11
+ # working dir
12
+ parser.add_argument('--work-dir',
13
+ '-d',
14
+ metavar='work_dir',
15
+ type=str,
16
+ default='.',
17
+ help='the working directory')
18
+
19
+ # force overwrite
20
+ parser.add_argument('--force-overwrite',
21
+ '-f',
22
+ action='store_true',
23
+ default=False,
24
+ help='overwrite the existing results')
25
+
26
+ # threads
27
+ parser.add_argument('--n-proc',
28
+ '-n',
29
+ metavar='n_proc',
30
+ type=int,
31
+ default=0,
32
+ help='the number of cpu to use, if it set to 0, '
33
+ 'it will use the value from the user parameter file.')
34
+
35
+ # generate plot
36
+ parser.add_argument('--plot',
37
+ action='store_true',
38
+ default=False,
39
+ help='generate the plot, by default False')
40
+
41
+ # compress json
42
+ parser.add_argument('--compress_json',
43
+ action='store_true',
44
+ default=False,
45
+ help='compress the json files, by default False')
46
+
47
+ # serve name
48
+ parser.add_argument('--name',
49
+ metavar='name',
50
+ type=str,
51
+ default='pycwb',
52
+ help='the name of the serve')
53
+
54
+ # list number of jobs
55
+ parser.add_argument('--list-n-jobs',
56
+ action='store_true',
57
+ default=False,
58
+ help='list number of the jobs in the flow')
59
+
60
+ # list jobs
61
+ parser.add_argument('--list-jobs',
62
+ action='store_true',
63
+ default=False,
64
+ help='list all jobs in the flow')
65
+
66
+
67
+ def command(args):
68
+ from pycwb.workflow.batch import search
69
+
70
+ if args.list_n_jobs or args.list_jobs:
71
+ jobs = search(args.user_parameter_file, working_dir=args.work_dir, n_proc=1, dry_run=True)
72
+
73
+ print(f"Number of jobs: {len(jobs)}")
74
+
75
+ if args.list_n_jobs:
76
+ print(f"To list all jobs, use --list-jobs option.")
77
+
78
+ # list all jobs
79
+ if args.list_jobs:
80
+ for job in jobs:
81
+ print(job)
82
+
83
+ return 0
84
+
85
+ # Run the search function with the specified user parameter file
86
+ search(args.user_parameter_file, working_dir=args.work_dir, n_proc=args.n_proc, submit=args.submit,
87
+ overwrite=args.force_overwrite, plot=args.plot, compress_json=args.compress_json)
@@ -21,6 +21,54 @@ schema = {
21
21
  "default": "log",
22
22
  "cwb": False
23
23
  },
24
+ "catalog_dir": {
25
+ "type": "string",
26
+ "description": "catalog directory",
27
+ "default": "catalog",
28
+ "cwb": False
29
+ },
30
+ "trigger_dir": {
31
+ "type": "string",
32
+ "description": "trigger directory",
33
+ "default": "trigger",
34
+ "cwb": False
35
+ },
36
+ "plot_trigger": {
37
+ "type": "boolean",
38
+ "description": "plot triggers",
39
+ "default": False,
40
+ "cwb": False
41
+ },
42
+ "save_waveform": {
43
+ "type": "boolean",
44
+ "description": "save waveform from triggers",
45
+ "default": False,
46
+ "cwb": False
47
+ },
48
+ "plot_waveform": {
49
+ "type": "boolean",
50
+ "description": "plot waveform from triggers",
51
+ "default": False,
52
+ "cwb": False
53
+ },
54
+ "save_sky_map": {
55
+ "type": "boolean",
56
+ "description": "save sky maps to json",
57
+ "default": False,
58
+ "cwb": False
59
+ },
60
+ "plot_sky_map": {
61
+ "type": "boolean",
62
+ "description": "plot sky maps",
63
+ "default": False,
64
+ "cwb": False
65
+ },
66
+ "compress_output_json": {
67
+ "type": "boolean",
68
+ "description": "compress output json",
69
+ "default": False,
70
+ "cwb": False
71
+ },
24
72
  "nproc": {
25
73
  "type": "integer",
26
74
  "description": "number of processes",
@@ -1,4 +1,7 @@
1
1
  import logging
2
+
3
+ import orjson
4
+
2
5
  from .super_lag import get_slag_job_list, get_slag_list
3
6
  from .dq_segment import read_seg_list, get_seg_list, get_job_list
4
7
  from .frame import get_frame_meta, select_frame_list
@@ -170,3 +173,27 @@ def create_job_segment_from_injection(ifo, simulation_mode, injection):
170
173
 
171
174
  return job_segments
172
175
 
176
+
177
+ def save_job_segments_to_json(job_segments, output_file) -> None:
178
+ """Save the job segments to a JSON file.
179
+
180
+ :param job_segments: The job segments.
181
+ :type job_segments: list[WaveSegment]
182
+ :param output_file: The output file.
183
+ :type output_file: str
184
+ """
185
+ with open(output_file, 'wb') as f:
186
+ f.write(orjson.dumps(job_segments))
187
+
188
+
189
+ def load_job_segments_from_json(input_file: str) -> list[WaveSegment]:
190
+ """Load the job segments from a JSON file.
191
+
192
+ :param input_file: The input file.
193
+ :type input_file: str
194
+ :return: The job segments.
195
+ :rtype: list[WaveSegment]
196
+ """
197
+ with open(input_file, 'rb') as f:
198
+ data = orjson.loads(f.read())
199
+ return data
@@ -1,6 +1,12 @@
1
1
  import numpy as np
2
2
  from scipy.special import erfc
3
3
  from scipy.optimize import root_scalar
4
+ import warnings
5
+
6
+ # this function is deprecated, please consider using sigmoid_fit.py to fit the data instead
7
+ # of reading from the fit_parameters file
8
+ warnings.warn("This function is deprecated, please consider using sigmoid_fit.py to fit the data instead"
9
+ " of reading from the fit_parameters file", DeprecationWarning)
4
10
 
5
11
 
6
12
  def read_inj_type(file_name):
@@ -191,17 +197,25 @@ def plot_hrss_from_mdc(run_dirs, tags, output_dir='.'):
191
197
  plt.savefig(f'{output_dir}/hrss50.png')
192
198
 
193
199
 
194
- def barplot_hrss_from_mdc(run_dirs, tags, output_dir='.'):
200
+ def sort_key(s):
201
+ import re
202
+ parts = re.match(r"([a-zA-Z]+)(\d+)Q(\d+)", s)
203
+ num_before_q = int(parts.group(2))
204
+ num_after_q = int(parts.group(3))
205
+ return (num_after_q, num_before_q)
206
+
207
+ def barplot_hrss_from_mdc(run_dirs, tags, output_dir='.', filename='hrss50_comparison.png', wf_names_selection=None):
195
208
  import matplotlib.pyplot as plt
196
209
  import seaborn as sns
197
210
  import numpy as np
198
211
 
199
- color = sns.color_palette("Paired")
212
+ color = sns.color_palette('Paired')
200
213
  bar_width = 0.8 / len(run_dirs)
201
214
  opacity = 0.8
202
215
 
203
216
  data_sets = []
204
217
  for i, (run_dir, tag) in enumerate(zip(run_dirs, tags)):
218
+ print(f"Reading: {tag}")
205
219
  injections = read_inj_type(run_dir + 'injectionList.txt')
206
220
  imdc_set_hrss10, imdc_set_hrss50, imdc_set_hrss90, imdc_set_hrss50_err = read_hrss_for_mdc(run_dir)
207
221
  wf_names_all = []
@@ -210,8 +224,11 @@ def barplot_hrss_from_mdc(run_dirs, tags, output_dir='.'):
210
224
  hrss50_errs_all = []
211
225
  for j, inj_set_name in enumerate(imdc_set_hrss50.keys()):
212
226
  wf_names = list(imdc_set_hrss50[inj_set_name].keys())
213
- hrss50s = [imdc_set_hrss50[inj_set_name][wf_name] for wf_name in wf_names]
214
- hrss50_errs = np.array([imdc_set_hrss50_err[inj_set_name][wf_name] for wf_name in wf_names]) - hrss50s
227
+ # filter out the wf_names containing 5000
228
+ wf_names = [wf_name for wf_name in wf_names if '5000' not in wf_name and '849' not in wf_name]
229
+ hrss50s = [imdc_set_hrss50[inj_set_name][wf_name] for wf_name in wf_names if wf_name in imdc_set_hrss50[inj_set_name]]
230
+ # print(f"inj_set_name: {inj_set_name}, wf_names: {wf_names}, hrss50s: {hrss50s}, hrss50_errs: {[imdc_set_hrss50_err[inj_set_name][wf_name] for wf_name in wf_names]}")
231
+ hrss50_errs = np.array([imdc_set_hrss50_err[inj_set_name][wf_name] for wf_name in wf_names if wf_name in imdc_set_hrss50_err[inj_set_name]]) - hrss50s
215
232
 
216
233
  wf_names_all += wf_names
217
234
  hrss50s_all += list(hrss50s)
@@ -224,26 +241,47 @@ def barplot_hrss_from_mdc(run_dirs, tags, output_dir='.'):
224
241
  # hrss50_errs_all = np.array(hrss50_errs_all)[sorted_indices]
225
242
  # wf_names_sorted = np.array(wf_names_all)[sorted_indices]
226
243
 
227
- data_sets.append((wf_names_all, hrss50s_all, hrss50_errs_all, tag))
228
-
244
+ data_set = {}
245
+ for i, wf_name in enumerate(wf_names_all):
246
+ data_set[wf_name] = [hrss50s_all[i], hrss50_errs_all[i]]
247
+ # data_sets.append((wf_names_all, hrss50s_all, hrss50_errs_all, tag))
248
+ data_sets.append((data_set, tag))
249
+
250
+ if wf_names_selection:
251
+ wf_names_plot = wf_names_selection
252
+ else:
253
+ wf_names_plot = set([k for d in data_sets for k in d[0].keys() ])
254
+ wf_names_plot = sorted(wf_names_plot, key=sort_key)
229
255
  # Plot the data
230
256
  # figure size (10, 5)
231
257
 
232
- fig, ax = plt.subplots(figsize=(12, 5))
258
+ fig, ax = plt.subplots(figsize=(14, 3.5))
233
259
  len_data_sets = len(data_sets)
234
- for i, (wf_names, hrss50s, hrss50_errs, label) in enumerate(data_sets):
235
- index = np.arange(len(wf_names))
236
- bars = ax.bar(index + i*bar_width, hrss50s, bar_width, alpha=opacity, color=color[i], yerr=hrss50_errs, label=label,
260
+ for i, (data_set, label) in enumerate(data_sets):
261
+ indexes = []
262
+ hrss50s = []
263
+ hrss50_errs = []
264
+ for wf_name in data_set.keys():
265
+ if wf_name not in wf_names_plot:
266
+ continue
267
+ indexes.append(wf_names_plot.index(wf_name))
268
+ hrss50s.append(data_set[wf_name][0])
269
+ hrss50_errs.append(data_set[wf_name][1])
270
+ bars = ax.bar(np.array(indexes) + i*bar_width, hrss50s, bar_width, alpha=opacity, color=color[i], yerr=hrss50_errs, label=label,
237
271
  error_kw=dict(lw=1, capsize=1.5, capthick=1, alpha=0.7))
238
- wf_names = data_sets[0][0]
239
- index = np.arange(len(wf_names))
272
+ # wf_names = data_sets[0][0]
273
+ index = np.arange(len(wf_names_plot))
240
274
  ax.set_yscale('log')
241
- ax.set_xlabel('Waveform Names')
275
+ # ax.set_xlabel('Waveform Names')
242
276
  ax.set_ylabel('hrss50 values')
243
- ax.set_title('Comparison of hrss50 values')
277
+ # ax.set_title('Comparison of hrss50 values')
244
278
  ax.set_xticks(index + bar_width*(len_data_sets-1)/2)
245
- ax.set_xticklabels(wf_names, rotation=45, ha='right') # Rotate x-labels 45 degrees
246
- ax.legend()
279
+ ax.set_xticklabels(wf_names_plot, rotation=45, ha='right') # Rotate x-labels 45 degrees
280
+ ax.legend(ncol=3)
247
281
 
248
282
  plt.tight_layout()
249
- plt.savefig(f'{output_dir}/hrss50_barplot.png')
283
+ # save the plot with transparent background
284
+ plt.savefig(output_dir + '/' + filename, bbox_inches='tight', transparent=True)
285
+ plt.show()
286
+
287
+ # barplot_hrss_from_mdc([run_dir1, run4_dir], ['v20', 'run4'])
@@ -0,0 +1,45 @@
1
+ import matplotlib.pyplot as plt
2
+ import numpy as np
3
+ import pandas as pd
4
+
5
+
6
+ def hrss50_bar_plot(data_sets: list[tuple[dict[str, pd.DataFrame], str]],
7
+ wf_selections=None, output_dir='.', filename='hrss50_comparison.png'):
8
+ if wf_selections is None:
9
+ wf_names_plot = list(data_sets[0][0].keys())
10
+ else:
11
+ wf_names_plot = wf_selections
12
+
13
+ color = ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c',
14
+ '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928']
15
+
16
+ bar_width = 0.8 / len(data_sets)
17
+ opacity = 0.8
18
+
19
+ fig, ax = plt.subplots(figsize=(14, 3.5))
20
+ len_data_sets = len(data_sets)
21
+ for i, (data_set, label) in enumerate(data_sets):
22
+ indexes = []
23
+ hrss50s = []
24
+ hrss50_errs = []
25
+ for wf_name in data_set.keys():
26
+ if wf_name not in wf_names_plot:
27
+ continue
28
+ indexes.append(wf_names_plot.index(wf_name))
29
+ hrss50s.append(data_set[wf_name][0])
30
+ hrss50_errs.append(data_set[wf_name][1])
31
+ bars = ax.bar(np.array(indexes) + i * bar_width, hrss50s, bar_width, alpha=opacity, color=color[i],
32
+ yerr=hrss50_errs, label=label,
33
+ error_kw=dict(lw=1, capsize=1.5, capthick=1, alpha=0.7))
34
+
35
+ index = np.arange(len(wf_names_plot))
36
+ ax.set_yscale('log')
37
+ ax.set_ylabel('hrss50')
38
+ ax.set_xticks(index + bar_width * (len_data_sets - 1) / 2)
39
+ ax.set_xticklabels(wf_names_plot, rotation=45, ha='right') # Rotate x-labels 45 degrees
40
+ ax.legend(ncol=3)
41
+
42
+ plt.tight_layout()
43
+
44
+ plt.savefig(output_dir + '/' + filename, bbox_inches='tight', transparent=True)
45
+
@@ -0,0 +1,65 @@
1
+ from functools import reduce
2
+
3
+ import pandas as pd
4
+
5
+
6
+ def read_data_file(file_path: str, i: int) -> pd.DataFrame:
7
+ """
8
+ Read the data from cwb eff_*.txt files and return a DataFrame
9
+
10
+ Parameters
11
+ ----------
12
+ file_path : str
13
+ Path to the file to read
14
+ i : int
15
+ Index of the chunk
16
+
17
+ Returns
18
+ -------
19
+ pd.DataFrame
20
+ DataFrame with the data read from the file
21
+ """
22
+ data = pd.read_csv(file_path, sep='\s+', header=None, names=['hrss', f'evt_{i}', f'inj_{i}', f'ratio_{i}'])
23
+
24
+ return data
25
+
26
+
27
+ def get_evt_vs_inj(chunks: list[str], wf_selections: list[str]) -> dict[str, pd.DataFrame]:
28
+ """
29
+ Merge the data from the chunks into a single DataFrame for each waveform selected
30
+
31
+ Parameters
32
+ ----------
33
+ chunks : list[str]
34
+ List of paths to the chunks to merge
35
+ wf_selections : list[str]
36
+ List of waveform selections to merge
37
+
38
+ Returns
39
+ -------
40
+ dict[str, pd.DataFrame]
41
+ A dictionary with the waveform name as the key and the merged DataFrame as the value
42
+
43
+ Examples
44
+ --------
45
+ >>> chunks = ['chunk1', 'chunk2']
46
+ >>> wf_selections = ['waveform1', 'waveform2']
47
+ >>> get_evt_vs_inj(chunks, wf_selections)
48
+ {'waveform1': pd.DataFrame, 'waveform2': pd.DataFrame}
49
+ """
50
+ wf_data = {}
51
+ for wf in wf_selections:
52
+ data = []
53
+ for i, chunk in enumerate(chunks):
54
+ data.append(read_data_file(f"{chunk}/eff_{wf}.txt", i + 1))
55
+
56
+ merged_df = reduce(lambda left, right: pd.merge(left, right, on='hrss'), data)
57
+
58
+ merged_df['evt_total'] = 0
59
+ merged_df['inj_total'] = 0
60
+ for i in range(len(chunks)):
61
+ merged_df['evt_total'] += merged_df[f'evt_{i + 1}']
62
+ merged_df['inj_total'] += merged_df[f'inj_{i + 1}']
63
+ wf_data[wf] = merged_df
64
+
65
+ return wf_data
@@ -0,0 +1,81 @@
1
+ import numpy as np
2
+ import warnings
3
+ from scipy.optimize import curve_fit
4
+ from scipy.special import erfc
5
+
6
+
7
+ def logNfit(x, par0, par1, par2, par3, par4):
8
+ # Vectorized computation of y based on par0 and par4
9
+ y = x - par0
10
+ y = np.where(par4, -y, y)
11
+
12
+ # Vectorized computation of s based on y and parameters par1, par2, par3
13
+ s = np.where(y < 0, par1 * np.exp(y * par2), par1 * np.exp(y * par3))
14
+
15
+ # Adjust s when y > 0 and par3 > 1. / y
16
+ mask = (y > 0) & (par3 > 1. / y)
17
+ s = np.where(mask, par1 * par3 * np.exp(1.), s)
18
+ y = np.where(mask, 1, y)
19
+
20
+ # Compute output based on s and y
21
+ ny = np.where(y != 0, np.where(s > 0, np.abs(y / s), 100), y)
22
+
23
+ result = np.where(y > 0, 1 - erfc(ny) / 2, erfc(ny) / 2)
24
+ result = np.where(y == 0, 0.5, result) # Handle the case y == 0
25
+
26
+ return result
27
+
28
+
29
+ def fit(xdata, ydata, debug=False):
30
+ # find the ydata that close to 0.5 and the corresponding xdata
31
+ xdata = np.array(xdata)
32
+ ydata = np.array(ydata)
33
+ idx = np.argmin(np.abs(ydata - 0.5))
34
+
35
+ # Initial parameters
36
+ initial_guesses = [
37
+ [xdata[idx], 0.3, 1, 1, 0],
38
+ [xdata[idx], 0.7, 1, 1, 0],
39
+ [xdata[idx], 0.3, 2, 0.5, 0],
40
+ [xdata[idx], 0.7, 2, 0.5, 0],
41
+ [xdata[idx], 0.3, 3, 1, 0],
42
+ [xdata[idx], 0.7, 3, 1, 0],
43
+ ]
44
+
45
+ best_fit = None
46
+ best_chi2 = 1
47
+ for initial_params in initial_guesses:
48
+ if debug:
49
+ print(initial_params)
50
+
51
+ params_bounds = ([-25, 0, 0, 0, 0], [-19, np.inf, np.inf, 2.5, np.inf])
52
+
53
+ params, covariance = curve_fit(logNfit, xdata, ydata, method='dogbox',
54
+ p0=initial_params, bounds=params_bounds,
55
+ )
56
+ chi2 = np.sum(((logNfit(xdata, *params) - ydata) / ydata.std()) ** 2)
57
+ if debug:
58
+ print(chi2)
59
+ if chi2 < best_chi2:
60
+ best_fit = (params, covariance)
61
+ best_chi2 = chi2
62
+
63
+ if best_chi2 > 0.01:
64
+ warnings.warn(f"Best fit error is high: {best_chi2:.2E} > 0.01")
65
+
66
+ params, covariance = best_fit
67
+ # Calculate derived quantities and errors
68
+ hrss50 = 10 ** params[0]
69
+ hrssEr = (10 ** (params[0] + np.sqrt(np.diag(covariance)[0])) - 10 ** params[0])
70
+ sigma, betam, betap = params[1], params[2], params[3]
71
+ chi2 = np.sum(((logNfit(xdata, *params) - ydata) / ydata.std()) ** 2)
72
+
73
+ # Output results
74
+ if debug:
75
+ print(f"{chi2:.2E} {hrss50:.2E} +- {hrssEr:.2E} {sigma:.2E} {betam:.2E} {betap:.2E}")
76
+ import matplotlib.pyplot as plt
77
+ plt.plot(xdata, ydata, 'o')
78
+ new_xdata = np.linspace(xdata[0], xdata[-1], 1000)
79
+ plt.plot(new_xdata, logNfit(new_xdata, np.log10(hrss50), sigma, betam, betap, 0))
80
+
81
+ return [chi2, hrss50, hrssEr, sigma, betam, betap]
@@ -23,25 +23,37 @@ def check_if_output_exists(working_dir: str, output_dir: str, overwrite: bool =
23
23
  f"if you want to overwrite it.")
24
24
 
25
25
 
26
- def create_output_directory(working_dir: str, output_dir: str, log_dir: str, user_parameter_file: str) -> None:
26
+ def create_output_directory(working_dir: str, output_dir: str, log_dir: str, catalog_dir: str,
27
+ trigger_dir: str, user_parameter_file: str) -> None:
27
28
  # create folder for output and log
29
+ config_dir = f"{working_dir}/config"
28
30
  print(f"Output folder: {working_dir}/{output_dir}")
31
+ print(f"Trigger folder: {working_dir}/{trigger_dir}")
29
32
  print(f"Log folder: {working_dir}/{log_dir}")
33
+ print(f"Config folder: {config_dir}")
34
+ print(f"Catalog folder: {working_dir}/{catalog_dir}")
35
+
30
36
  if not os.path.exists(output_dir):
31
37
  os.makedirs(output_dir)
32
38
  if not os.path.exists(log_dir):
33
39
  os.makedirs(log_dir)
40
+ if not os.path.exists(config_dir):
41
+ os.makedirs(config_dir)
42
+ if not os.path.exists(catalog_dir):
43
+ os.makedirs(catalog_dir)
44
+ if not os.path.exists(trigger_dir):
45
+ os.makedirs(trigger_dir)
34
46
 
35
- if os.path.exists(f"{output_dir}/user_parameters.yaml"):
36
- # check if the files are the same with md5
37
- if not filecmp.cmp(user_parameter_file, f"{output_dir}/user_parameters.yaml"):
47
+ if os.path.exists(f"{config_dir}/user_parameters.yaml"):
48
+ # check if the files are the same with md5, if not, backup the old file
49
+ if not filecmp.cmp(user_parameter_file, f"{config_dir}/user_parameters.yaml"):
38
50
  print(f"Old user_parameters.yaml file is different from the new one.")
39
51
  # rename the old user parameter file to user_parameters_old_{date}.yaml
40
52
  timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
41
- shutil.move(f"{output_dir}/user_parameters.yaml", f"{output_dir}/user_parameters_old_{timestamp}.yaml")
53
+ shutil.move(f"{config_dir}/user_parameters.yaml", f"{config_dir}/user_parameters_old_{timestamp}.yaml")
42
54
  print(f"Old user_parameters.yaml file is renamed to user_parameters_old_{timestamp}.yaml")
43
55
 
44
- shutil.copyfile(user_parameter_file, f"{output_dir}/user_parameters.yaml")
56
+ shutil.copyfile(user_parameter_file, f"{config_dir}/user_parameters.yaml")
45
57
 
46
58
 
47
59
  def check_MRACatalog_setting() -> bool:
@@ -52,6 +52,8 @@ class WaveSegment:
52
52
  start time of the segment
53
53
  end_time: float
54
54
  end time of the segment
55
+ shift: list, optional
56
+ list of shifts for each interferometer, used for superlags
55
57
  frames: list, optional
56
58
  list of frame files that are within the segment
57
59
  noise: dict, optional
@@ -63,6 +65,7 @@ class WaveSegment:
63
65
  ifos: List[str]
64
66
  start_time: float
65
67
  end_time: float
68
+ shift: List[float] = None
66
69
  seg_edge: Optional[float] = None
67
70
  frames: Optional[List[FrameFile]] = None
68
71
  noise: Optional[Dict] = None