PycWB 0.22.0__tar.gz → 0.22.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. {PycWB-0.22.0 → pycwb-0.22.2}/PKG-INFO +2 -1
  2. {PycWB-0.22.0 → pycwb-0.22.2}/PycWB.egg-info/PKG-INFO +2 -1
  3. {PycWB-0.22.0 → pycwb-0.22.2}/PycWB.egg-info/SOURCES.txt +4 -0
  4. {PycWB-0.22.0 → pycwb-0.22.2}/PycWB.egg-info/requires.txt +1 -0
  5. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/_version.py +2 -2
  6. pycwb-0.22.2/pycwb/cli/run.py +87 -0
  7. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/cli/xtalk.py +1 -0
  8. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/config/config.py +35 -4
  9. pycwb-0.22.2/pycwb/constants/project_constants.py +3 -0
  10. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/constants/user_parameters_schema.py +48 -0
  11. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/job_segment/job_segment.py +27 -0
  12. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/statistics/eff.py +55 -17
  13. pycwb-0.22.2/pycwb/modules/statistics/eff_plot.py +45 -0
  14. pycwb-0.22.2/pycwb/modules/statistics/merge.py +65 -0
  15. pycwb-0.22.2/pycwb/modules/statistics/sigmoid_fit.py +81 -0
  16. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/workflow_utils/job_setup.py +18 -6
  17. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/xtalk/monster.py +10 -8
  18. pycwb-0.22.2/pycwb/modules/xtalk/xtalk_data.py +49 -0
  19. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/job.py +3 -0
  20. pycwb-0.22.2/pycwb/workflow/batch.py +168 -0
  21. pycwb-0.22.2/pycwb/workflow/subflow/__init__.py +2 -0
  22. pycwb-0.22.2/pycwb/workflow/subflow/prepare_job_runs.py +102 -0
  23. {PycWB-0.22.0 → pycwb-0.22.2}/setup.py +1 -0
  24. PycWB-0.22.0/pycwb/cli/run.py +0 -87
  25. PycWB-0.22.0/pycwb/constants/project_constants.py +0 -1
  26. PycWB-0.22.0/pycwb/workflow/batch.py +0 -116
  27. PycWB-0.22.0/pycwb/workflow/subflow/__init__.py +0 -2
  28. PycWB-0.22.0/pycwb/workflow/subflow/prepare_job_runs.py +0 -42
  29. {PycWB-0.22.0 → pycwb-0.22.2}/.gitignore +0 -0
  30. {PycWB-0.22.0 → pycwb-0.22.2}/.gitlab-ci.yml +0 -0
  31. {PycWB-0.22.0 → pycwb-0.22.2}/LICENSE +0 -0
  32. {PycWB-0.22.0 → pycwb-0.22.2}/MANIFEST.in +0 -0
  33. {PycWB-0.22.0 → pycwb-0.22.2}/Makefile +0 -0
  34. {PycWB-0.22.0 → pycwb-0.22.2}/PycWB.egg-info/dependency_links.txt +0 -0
  35. {PycWB-0.22.0 → pycwb-0.22.2}/PycWB.egg-info/top_level.txt +0 -0
  36. {PycWB-0.22.0 → pycwb-0.22.2}/README.md +0 -0
  37. {PycWB-0.22.0 → pycwb-0.22.2}/benchmark/README.md +0 -0
  38. {PycWB-0.22.0 → pycwb-0.22.2}/benchmark/likelihood/README.md +0 -0
  39. {PycWB-0.22.0 → pycwb-0.22.2}/benchmark/likelihood/generate_data_for_likelihood.py +0 -0
  40. {PycWB-0.22.0 → pycwb-0.22.2}/benchmark/likelihood/performance_test_dpf.py +0 -0
  41. {PycWB-0.22.0 → pycwb-0.22.2}/benchmark/likelihood/performance_test_opt_sky.py +0 -0
  42. {PycWB-0.22.0 → pycwb-0.22.2}/benchmark/likelihood/user_parameters_injection.yaml +0 -0
  43. {PycWB-0.22.0 → pycwb-0.22.2}/benchmark/supercluster/README.md +0 -0
  44. {PycWB-0.22.0 → pycwb-0.22.2}/benchmark/supercluster/generate_data.py +0 -0
  45. {PycWB-0.22.0 → pycwb-0.22.2}/benchmark/supercluster/generate_data_2.py +0 -0
  46. {PycWB-0.22.0 → pycwb-0.22.2}/benchmark/supercluster/performance_supercluster.py +0 -0
  47. {PycWB-0.22.0 → pycwb-0.22.2}/benchmark/supercluster/user_parameters_injection.yaml +0 -0
  48. {PycWB-0.22.0 → pycwb-0.22.2}/bin/pycwb +0 -0
  49. {PycWB-0.22.0 → pycwb-0.22.2}/bin/pycwb_search +0 -0
  50. {PycWB-0.22.0 → pycwb-0.22.2}/bin/pycwb_show +0 -0
  51. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Biorthogonal.cc +0 -0
  52. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Biorthogonal.hh +0 -0
  53. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/CMakeLists.txt +0 -0
  54. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Daubechies.cc +0 -0
  55. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Daubechies.hh +0 -0
  56. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/FourierCoefficients.icc +0 -0
  57. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Haar.cc +0 -0
  58. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Haar.hh +0 -0
  59. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/LineFilter.cc +0 -0
  60. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/LineFilter.hh +0 -0
  61. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Makefile +0 -0
  62. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Meyer.cc +0 -0
  63. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Meyer.hh +0 -0
  64. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Symlet.cc +0 -0
  65. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Symlet.hh +0 -0
  66. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/SymmArray.cc +0 -0
  67. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/SymmArray.hh +0 -0
  68. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/SymmArraySSE.cc +0 -0
  69. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/SymmArraySSE.hh +0 -0
  70. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/SymmObjArray.cc +0 -0
  71. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/SymmObjArray.hh +0 -0
  72. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/WDM.cc +0 -0
  73. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/WDM.hh +0 -0
  74. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/WDMOverlap.cc +0 -0
  75. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/WDMOverlap.hh +0 -0
  76. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/WaveDWT.cc +0 -0
  77. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/WaveDWT.hh +0 -0
  78. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Wavelet.cc +0 -0
  79. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/Wavelet.hh +0 -0
  80. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/alm.hh +0 -0
  81. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/build.sh +0 -0
  82. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/cluster.cc +0 -0
  83. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/cluster.hh +0 -0
  84. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/cmake/FindHealpix.cmake +0 -0
  85. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/cmake/FindeBBH.cmake +0 -0
  86. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/cmake/install_function.cmake +0 -0
  87. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/constants.hh +0 -0
  88. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/detector.cc +0 -0
  89. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/detector.hh +0 -0
  90. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/injection.cc +0 -0
  91. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/injection.hh +0 -0
  92. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/lossy.cc +0 -0
  93. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/lossy.hh +0 -0
  94. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/monster.cc +0 -0
  95. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/monster.hh +0 -0
  96. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/netcluster.cc +0 -0
  97. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/netcluster.hh +0 -0
  98. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/netevent.cc +0 -0
  99. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/netevent.hh +0 -0
  100. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/netpixel.cc +0 -0
  101. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/netpixel.hh +0 -0
  102. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/network.cc +0 -0
  103. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/network.hh +0 -0
  104. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/pycwb.hh +0 -0
  105. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/rdfr.cc +0 -0
  106. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/rdfr.hh +0 -0
  107. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/readframe.cc +0 -0
  108. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/readframe.hh +0 -0
  109. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/readfrfile.cc +0 -0
  110. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/readfrfile.hh +0 -0
  111. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/regression.cc +0 -0
  112. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/regression.hh +0 -0
  113. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/skycoord.hh +0 -0
  114. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/skymap.cc +0 -0
  115. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/skymap.hh +0 -0
  116. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/sseries.cc +0 -0
  117. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/sseries.hh +0 -0
  118. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/time.cc +0 -0
  119. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/time.hh +0 -0
  120. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wat.hh +0 -0
  121. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/watasm.S +0 -0
  122. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/watasm_elf64.o +0 -0
  123. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/watavx.hh +0 -0
  124. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/watbranch.in +0 -0
  125. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/watfun.hh +0 -0
  126. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wathash.in +0 -0
  127. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/watplot.cc +0 -0
  128. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/watplot.hh +0 -0
  129. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/watsse.hh +0 -0
  130. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wattag.in +0 -0
  131. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/waturl.in +0 -0
  132. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/watversion.hh.in +0 -0
  133. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wavearray.cc +0 -0
  134. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wavearray.hh +0 -0
  135. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wavecomplex.cc +0 -0
  136. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wavecomplex.hh +0 -0
  137. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wavecor.cc +0 -0
  138. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wavecor.hh +0 -0
  139. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wavefft.cc +0 -0
  140. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wavefft.hh +0 -0
  141. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wavelet_LinkDef.h +0 -0
  142. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wavelinefilter.cc +0 -0
  143. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wavelinefilter.hh +0 -0
  144. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/waverdc.cc +0 -0
  145. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/waverdc.hh +0 -0
  146. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wseries.cc +0 -0
  147. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wseries.hh +0 -0
  148. {PycWB-0.22.0 → pycwb-0.22.2}/cwb-core/wslice.hh +0 -0
  149. {PycWB-0.22.0 → pycwb-0.22.2}/docs/0.installation_guide.md +0 -0
  150. {PycWB-0.22.0 → pycwb-0.22.2}/docs/1.initialisation_guide.md +0 -0
  151. {PycWB-0.22.0 → pycwb-0.22.2}/docs/2.test_interactive_multistages_2G_analysis.md +0 -0
  152. {PycWB-0.22.0 → pycwb-0.22.2}/docs/3.run_pycwb_with_yaml_config.md +0 -0
  153. {PycWB-0.22.0 → pycwb-0.22.2}/docs/4.py_cwb_inet_2G.md +0 -0
  154. {PycWB-0.22.0 → pycwb-0.22.2}/docs/5.cwb2G_analyse.md +0 -0
  155. {PycWB-0.22.0 → pycwb-0.22.2}/docs/6.wat_codes_notes.md +0 -0
  156. {PycWB-0.22.0 → pycwb-0.22.2}/docs/Makefile +0 -0
  157. {PycWB-0.22.0 → pycwb-0.22.2}/docs/diagram.py +0 -0
  158. {PycWB-0.22.0 → pycwb-0.22.2}/docs/make.bat +0 -0
  159. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/_static/.keep +0 -0
  160. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/_templates/.keep +0 -0
  161. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/conf.py +0 -0
  162. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/credit.rst +0 -0
  163. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/index.rst +0 -0
  164. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/install.rst +0 -0
  165. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/mod_cwb.rst +0 -0
  166. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/package.rst +0 -0
  167. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/schema.rst +0 -0
  168. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/tutorial_batch_inj.rst +0 -0
  169. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/tutorial_customized_wf_gen.rst +0 -0
  170. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/tutorial_injection.rst +0 -0
  171. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/tutorial_multi_injection.rst +0 -0
  172. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/tutorial_search.rst +0 -0
  173. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/tutorials.rst +0 -0
  174. {PycWB-0.22.0 → pycwb-0.22.2}/docs/source/workflow.png +0 -0
  175. {PycWB-0.22.0 → pycwb-0.22.2}/envs/Dockerfile +0 -0
  176. {PycWB-0.22.0 → pycwb-0.22.2}/envs/mamba/Dockerfile +0 -0
  177. {PycWB-0.22.0 → pycwb-0.22.2}/examples/autoencoder/pycwb_injection.ipynb +0 -0
  178. {PycWB-0.22.0 → pycwb-0.22.2}/examples/autoencoder/user_parameters_injection.yaml +0 -0
  179. {PycWB-0.22.0 → pycwb-0.22.2}/examples/batch_injection/generate_parameters.py +0 -0
  180. {PycWB-0.22.0 → pycwb-0.22.2}/examples/batch_injection/pycbc_inject/hyperbolicTD/__init__.py +0 -0
  181. {PycWB-0.22.0 → pycwb-0.22.2}/examples/batch_injection/pycbc_inject/hyperbolicTD/parameters.py +0 -0
  182. {PycWB-0.22.0 → pycwb-0.22.2}/examples/batch_injection/pycbc_inject/hyperbolicTD/waveform.py +0 -0
  183. {PycWB-0.22.0 → pycwb-0.22.2}/examples/batch_injection/pycwb_injection.py +0 -0
  184. {PycWB-0.22.0 → pycwb-0.22.2}/examples/batch_injection/user_parameters_injection.yaml +0 -0
  185. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/DQ/H1_cat0.txt +0 -0
  186. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/DQ/H1_cat1.txt +0 -0
  187. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/DQ/H1_cat2.txt +0 -0
  188. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/DQ/H1_cat4.txt +0 -0
  189. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/DQ/L1_cat0.txt +0 -0
  190. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/DQ/L1_cat1.txt +0 -0
  191. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/DQ/L1_cat2.txt +0 -0
  192. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/DQ/L1_cat4.txt +0 -0
  193. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/input/OPBM.period +0 -0
  194. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/input/OPBM_H1.frames +0 -0
  195. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/input/OPBM_L1.frames +0 -0
  196. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/pycwb_mdc.py +0 -0
  197. {PycWB-0.22.0 → pycwb-0.22.2}/examples/benchmark/user_parameters_mdc.yaml +0 -0
  198. {PycWB-0.22.0 → pycwb-0.22.2}/examples/colab/pycWB_GW150914.ipynb +0 -0
  199. {PycWB-0.22.0 → pycwb-0.22.2}/examples/injection/pycwb_injection.ipynb +0 -0
  200. {PycWB-0.22.0 → pycwb-0.22.2}/examples/injection/pycwb_injection.py +0 -0
  201. {PycWB-0.22.0 → pycwb-0.22.2}/examples/injection/user_parameters_injection.yaml +0 -0
  202. {PycWB-0.22.0 → pycwb-0.22.2}/examples/lvk_sep_2023/demo.ipynb +0 -0
  203. {PycWB-0.22.0 → pycwb-0.22.2}/examples/lvk_sep_2023/user_parameters.yaml +0 -0
  204. {PycWB-0.22.0 → pycwb-0.22.2}/examples/multiple_injection/pycwb_injection.py +0 -0
  205. {PycWB-0.22.0 → pycwb-0.22.2}/examples/multiple_injection/user_parameters_injection.yaml +0 -0
  206. {PycWB-0.22.0 → pycwb-0.22.2}/examples/pyseobnr_injection/generate_parameters.py +0 -0
  207. {PycWB-0.22.0 → pycwb-0.22.2}/examples/pyseobnr_injection/user_parameters_injection.yaml +0 -0
  208. {PycWB-0.22.0 → pycwb-0.22.2}/examples/pyseobnr_injection/waveform_model/__init__.py +0 -0
  209. {PycWB-0.22.0 → pycwb-0.22.2}/examples/pyseobnr_injection/waveform_model/waveform.py +0 -0
  210. {PycWB-0.22.0 → pycwb-0.22.2}/examples/waveform_reconstruction/reconstruct_waveform_from_cluster.ipynb +0 -0
  211. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/cwb_core/coherence.cc +0 -0
  212. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/cwb_core/coherence.hh +0 -0
  213. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/cwb_core/likelihood.cc +0 -0
  214. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/cwb_core/likelihood.hh +0 -0
  215. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/dag/dag.py +0 -0
  216. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/dag/dask-prefect.py +0 -0
  217. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/dag/prefect_test.py +0 -0
  218. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger/__init__.py +0 -0
  219. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger/server.py +0 -0
  220. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger/visualizition.py +0 -0
  221. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/.eslintrc.cjs +0 -0
  222. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/.gitignore +0 -0
  223. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/.prettierrc.json +0 -0
  224. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/README.md +0 -0
  225. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/index.html +0 -0
  226. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/package-lock.json +0 -0
  227. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/package.json +0 -0
  228. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/public/favicon.ico +0 -0
  229. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/App.vue +0 -0
  230. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/assets/base.css +0 -0
  231. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/assets/cwb_icon_modern_blue_alfa.png +0 -0
  232. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/assets/main.css +0 -0
  233. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/assets/style.css +0 -0
  234. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/components/HelloWorld.vue +0 -0
  235. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/components/TheWelcome.vue +0 -0
  236. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/components/WelcomeItem.vue +0 -0
  237. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/components/__tests__/HelloWorld.spec.js +0 -0
  238. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/components/icons/IconCommunity.vue +0 -0
  239. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/components/icons/IconDocumentation.vue +0 -0
  240. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/components/icons/IconEcosystem.vue +0 -0
  241. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/components/icons/IconSupport.vue +0 -0
  242. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/components/icons/IconTooling.vue +0 -0
  243. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/main.js +0 -0
  244. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/router/index.js +0 -0
  245. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/stores/counter.js +0 -0
  246. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/views/drawflow.vue +0 -0
  247. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/views/nodes/node1.vue +0 -0
  248. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/views/nodes/node2.vue +0 -0
  249. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/views/nodes/node3.vue +0 -0
  250. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/src/views/nodes/nodeHeader.vue +0 -0
  251. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/messenger-web-interface/vite.config.js +0 -0
  252. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/performance/numba_test.py +0 -0
  253. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/performance/taichi_test.py +0 -0
  254. {PycWB-0.22.0 → pycwb-0.22.2}/prototypes/search.yaml +0 -0
  255. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/__init__.py +0 -0
  256. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/cli/__init__.py +0 -0
  257. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/cli/batch.py +0 -0
  258. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/cli/flow.py +0 -0
  259. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/cli/server.py +0 -0
  260. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/config/__init__.py +0 -0
  261. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/constants/__init__.py +0 -0
  262. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/__init__.py +0 -0
  263. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/autoencoder/__init__.py +0 -0
  264. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/autoencoder/autoencoder.py +0 -0
  265. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/autoencoder/cwb_autoencoder.py +0 -0
  266. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/autoencoder/module.yaml +0 -0
  267. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/catalog/__init__.py +0 -0
  268. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/catalog/catalog.py +0 -0
  269. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/catalog/module.yaml +0 -0
  270. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/coherence/__init__.py +0 -0
  271. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/coherence/coherence.py +0 -0
  272. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/coherence/coherence_lite.py +0 -0
  273. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/coherence/module.yaml +0 -0
  274. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/condor/__init__.py +0 -0
  275. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/condor/condor.py +0 -0
  276. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/condor/module.yaml +0 -0
  277. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/cwb_conversions/__init__.py +0 -0
  278. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/cwb_conversions/cluster.py +0 -0
  279. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/cwb_conversions/module.yaml +0 -0
  280. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/cwb_conversions/pixel.py +0 -0
  281. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/cwb_conversions/series.py +0 -0
  282. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/cwb_conversions/sparse_series.py +0 -0
  283. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/data_conditioning/__init__.py +0 -0
  284. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/data_conditioning/data_conditioning.py +0 -0
  285. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/data_conditioning/module.yaml +0 -0
  286. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/data_conditioning/regression.py +0 -0
  287. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/data_conditioning/whitening.py +0 -0
  288. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/job_segment/__init__.py +0 -0
  289. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/job_segment/dq_segment.py +0 -0
  290. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/job_segment/frame.py +0 -0
  291. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/job_segment/module.yaml +0 -0
  292. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/job_segment/plots.py +0 -0
  293. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/job_segment/super_lag.py +0 -0
  294. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/likelihood/__init__.py +0 -0
  295. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/likelihood/likelihood.py +0 -0
  296. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/likelihood/module.yaml +0 -0
  297. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/likelihoodWP/__init__.py +0 -0
  298. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/likelihoodWP/dpf.py +0 -0
  299. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/likelihoodWP/dpf_cython.pyx +0 -0
  300. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/likelihoodWP/likelihood.py +0 -0
  301. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/likelihoodWP/sky_stat.py +0 -0
  302. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/likelihoodWP/utils.py +0 -0
  303. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/logger/__init__.py +0 -0
  304. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/logger/logger.py +0 -0
  305. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/logger/module.yaml +0 -0
  306. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/multi_resolution_wdm/__init__.py +0 -0
  307. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/multi_resolution_wdm/module.yaml +0 -0
  308. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/multi_resolution_wdm/wdm.py +0 -0
  309. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot/__init__.py +0 -0
  310. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot/cluster_statistics.py +0 -0
  311. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot/event.py +0 -0
  312. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot/module.yaml +0 -0
  313. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot/spectrogram.py +0 -0
  314. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot/waveform.py +0 -0
  315. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot_data_quality/__init__.py +0 -0
  316. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot_data_quality/module.yaml +0 -0
  317. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot_data_quality/plot.py +0 -0
  318. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot_map/__init__.py +0 -0
  319. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot_map/module.yaml +0 -0
  320. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/plot_map/world_map.py +0 -0
  321. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/read_data/__init__.py +0 -0
  322. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/read_data/data_check.py +0 -0
  323. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/read_data/data_find.py +0 -0
  324. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/read_data/mdc.py +0 -0
  325. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/read_data/module.yaml +0 -0
  326. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/read_data/read_data.py +0 -0
  327. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/reconstruction/__init__.py +0 -0
  328. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/reconstruction/getMRAwaveform.py +0 -0
  329. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/reconstruction/module.yaml +0 -0
  330. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/sparse_series/__init__.py +0 -0
  331. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/sparse_series/module.yaml +0 -0
  332. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/sparse_series/sparse_table.py +0 -0
  333. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/statistics/__init__.py +0 -0
  334. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/super_cluster/__init__.py +0 -0
  335. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/super_cluster/module.yaml +0 -0
  336. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/super_cluster/sub_net_cut.py +0 -0
  337. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/super_cluster/super_cluster.py +0 -0
  338. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/super_cluster/supercluster.py +0 -0
  339. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/super_cluster/utils.py +0 -0
  340. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/superlag/__init__.py +0 -0
  341. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/superlag/superlag.py +0 -0
  342. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/web_viewer/__init__.py +0 -0
  343. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/web_viewer/create.py +0 -0
  344. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/web_viewer/module.yaml +0 -0
  345. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/workflow_utils/__init__.py +0 -0
  346. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/xtalk/__init__.py +0 -0
  347. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/modules/xtalk/monster_old.py +0 -0
  348. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/prefect_flow/__init__.py +0 -0
  349. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/prefect_flow/pycwb_flow.py +0 -0
  350. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/prefect_flow/tasks/__init__.py +0 -0
  351. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/prefect_flow/tasks/builtin.py +0 -0
  352. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/search.py +0 -0
  353. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/__init__.py +0 -0
  354. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/data_quality_file.py +0 -0
  355. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/detector.py +0 -0
  356. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/network.py +0 -0
  357. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/network_cluster.py +0 -0
  358. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/network_event.py +0 -0
  359. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/network_pixel.py +0 -0
  360. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/sparse_series.py +0 -0
  361. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/time_frequency_series.py +0 -0
  362. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/wdm.py +0 -0
  363. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/types/wdm_xtalk.py +0 -0
  364. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/__init__.py +0 -0
  365. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/async_write.py +0 -0
  366. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/check_ROOT.py +0 -0
  367. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/conversions/__init__.py +0 -0
  368. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/conversions/timeseries.py +0 -0
  369. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/dataclass_object_io.py +0 -0
  370. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/dep_check.py +0 -0
  371. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/image.py +0 -0
  372. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/module.py +0 -0
  373. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/network.py +0 -0
  374. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/skymap_coord.py +0 -0
  375. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/utils/yaml_helper.py +0 -0
  376. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/vendor/__init__.py +0 -0
  377. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/vendor/autoencoder/__init__.py +0 -0
  378. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/vendor/autoencoder/cwb_autoencoder.h5 +0 -0
  379. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/vendor/example.yaml +0 -0
  380. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/vendor/lib/__init__.py +0 -0
  381. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/vendor/web_viewer/event_dump.html +0 -0
  382. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/vendor/web_viewer/styles.css +0 -0
  383. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/vendor/web_viewer/viewer.html +0 -0
  384. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/workflow/__init__.py +0 -0
  385. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/workflow/subflow/postprocess_and_plots.py +0 -0
  386. {PycWB-0.22.0 → pycwb-0.22.2}/pycwb/workflow/subflow/supercluster_and_likelihood.py +0 -0
  387. {PycWB-0.22.0 → pycwb-0.22.2}/pyproject.toml +0 -0
  388. {PycWB-0.22.0 → pycwb-0.22.2}/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.2
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.2
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
@@ -333,6 +336,7 @@ pycwb/modules/workflow_utils/job_setup.py
333
336
  pycwb/modules/xtalk/__init__.py
334
337
  pycwb/modules/xtalk/monster.py
335
338
  pycwb/modules/xtalk/monster_old.py
339
+ pycwb/modules/xtalk/xtalk_data.py
336
340
  pycwb/prefect_flow/__init__.py
337
341
  pycwb/prefect_flow/pycwb_flow.py
338
342
  pycwb/prefect_flow/tasks/__init__.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.2'
16
+ __version_tuple__ = version_tuple = (0, 22, 2)
@@ -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)
@@ -14,6 +14,7 @@ def init_parser(parser):
14
14
  '-o',
15
15
  metavar='output_dir',
16
16
  type=str,
17
+ default='.',
17
18
  help='the output directory')
18
19
 
19
20
 
@@ -5,7 +5,9 @@ pycwb.constants.user_parameters_schema.
5
5
  """
6
6
  import os.path
7
7
  import logging
8
+ import pathlib
8
9
 
10
+ from ..modules.xtalk.xtalk_data import check_and_download_xtalk_data
9
11
  from ..types.wdm_xtalk import WDMXTalkCatalog
10
12
  from ..types.data_quality_file import DQFile
11
13
  from ..utils.network import max_delay
@@ -67,9 +69,8 @@ class Config:
67
69
  setattr(self, key, params[key])
68
70
 
69
71
  self.add_derived_key()
70
- self.check_file(self.MRAcatalog)
71
- if self.MRAcatalog:
72
- self.check_MRA_catalog()
72
+ self.check_xtalk_file(self.MRAcatalog)
73
+ self.check_MRA_catalog()
73
74
  self.check_lagStep()
74
75
 
75
76
  def add_derived_key(self):
@@ -90,7 +91,10 @@ class Config:
90
91
 
91
92
  # load WAT filter directory and set MRAcatalog
92
93
  if not self.filter_dir:
93
- self.filter_dir = os.environ['HOME_WAT_FILTERS']
94
+ if os.environ.get('HOME_WAT_FILTERS') is None:
95
+ self.filter_dir = os.path.abspath(".")
96
+ else:
97
+ self.filter_dir = os.environ['HOME_WAT_FILTERS']
94
98
 
95
99
  self.MRAcatalog = f"{self.filter_dir}/{self.wdmXTalk}"
96
100
 
@@ -142,6 +146,33 @@ class Config:
142
146
  if not os.path.isfile(file_name):
143
147
  raise FileNotFoundError(f"File {file_name} does not exist")
144
148
 
149
+ @staticmethod
150
+ def check_xtalk_file(file_name: str) -> bool:
151
+ """
152
+ Helper function to check if xtalk file exists and download it if it does not exist
153
+
154
+ Parameters
155
+ ----------
156
+ file_name : str
157
+ Path to the xtalk file
158
+
159
+ Returns
160
+ -------
161
+ bool
162
+ True if the file exists or has been downloaded successfully, False otherwise
163
+
164
+ Raises
165
+ ------
166
+ FileNotFoundError
167
+ If the file does not exist and cannot be downloaded
168
+ """
169
+ if not os.path.isfile(file_name):
170
+ if check_and_download_xtalk_data(str(pathlib.Path(file_name).name), str(pathlib.Path(file_name).parent)):
171
+ return True
172
+ else:
173
+ raise FileNotFoundError(f"File {file_name} does not exist")
174
+ return True
175
+
145
176
  def check_lagStep(self):
146
177
  """
147
178
  Check if lagStep compatible with WDM parity
@@ -0,0 +1,3 @@
1
+ ROUNDED_DIGITS = 50
2
+ XTALK_FILE_LIST_URL = "https://raw.githubusercontent.com/PycWB/xtalk-data/main/file_list.txt"
3
+ XTALK_DATA_URL = "https://github.com/PycWB/xtalk-data/raw/main"
@@ -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]