PycWB 0.25.0__tar.gz → 0.26.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pycwb-0.25.0 → pycwb-0.26.0}/.gitlab-ci.yml +19 -18
- {pycwb-0.25.0 → pycwb-0.26.0}/.readthedocs.yaml +3 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/PKG-INFO +1 -1
- {pycwb-0.25.0 → pycwb-0.26.0}/PycWB.egg-info/PKG-INFO +1 -1
- {pycwb-0.25.0 → pycwb-0.26.0}/PycWB.egg-info/SOURCES.txt +10 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/bin/pycwb +5 -0
- pycwb-0.26.0/prototypes/pp_workflow/simple.yaml +43 -0
- pycwb-0.26.0/prototypes/pp_workflow/simple_module.yaml +44 -0
- pycwb-0.26.0/prototypes/pp_workflow/workflow.yaml +40 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/_version.py +2 -2
- pycwb-0.26.0/pycwb/cli/post_process.py +15 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihood/likelihood.py +6 -4
- pycwb-0.26.0/pycwb/modules/report/far_rho.py +50 -0
- pycwb-0.26.0/pycwb/modules/report/read_results.py +79 -0
- pycwb-0.26.0/pycwb/modules/report/report.py +120 -0
- pycwb-0.26.0/pycwb/post_production/workflow.py +36 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/network_event.py +18 -5
- pycwb-0.26.0/pycwb/vendor/lib/__init__.py +0 -0
- pycwb-0.26.0/pycwb/workflow/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/subflow/process_job_segment.py +3 -2
- {pycwb-0.25.0 → pycwb-0.26.0}/.gitignore +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/LICENSE +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/MANIFEST.in +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/Makefile +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/PycWB.egg-info/dependency_links.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/PycWB.egg-info/requires.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/PycWB.egg-info/top_level.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/README.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/README.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/likelihood/README.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/likelihood/generate_data_for_likelihood.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/likelihood/performance_test_dpf.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/likelihood/performance_test_opt_sky.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/likelihood/user_parameters_injection.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/supercluster/README.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/supercluster/generate_data.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/supercluster/generate_data_2.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/supercluster/performance_supercluster.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/benchmark/supercluster/user_parameters_injection.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/bin/pycwb_search +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/bin/pycwb_show +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Biorthogonal.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Biorthogonal.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/CMakeLists.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Daubechies.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Daubechies.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/FourierCoefficients.icc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Haar.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Haar.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/LineFilter.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/LineFilter.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Makefile +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Meyer.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Meyer.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Symlet.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Symlet.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmArray.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmArray.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmArraySSE.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmArraySSE.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmObjArray.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/SymmObjArray.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WDM.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WDM.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WDMOverlap.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WDMOverlap.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WaveDWT.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/WaveDWT.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Wavelet.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/Wavelet.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/alm.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/build.sh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/cluster.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/cluster.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/cmake/FindHealpix.cmake +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/cmake/FindeBBH.cmake +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/cmake/install_function.cmake +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/constants.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/detector.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/detector.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/injection.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/injection.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/lossy.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/lossy.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/monster.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/monster.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netcluster.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netcluster.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netevent.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netevent.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netpixel.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/netpixel.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/network.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/network.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/pycwb.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/rdfr.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/rdfr.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/readframe.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/readframe.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/readfrfile.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/readfrfile.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/regression.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/regression.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/skycoord.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/skymap.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/skymap.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/sseries.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/sseries.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/time.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/time.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wat.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watasm.S +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watasm_elf64.o +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watavx.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watbranch.in +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watfun.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wathash.in +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watplot.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watplot.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watsse.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wattag.in +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/waturl.in +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/watversion.hh.in +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavearray.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavearray.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavecomplex.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavecomplex.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavecor.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavecor.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavefft.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavefft.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavelet_LinkDef.h +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavelinefilter.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wavelinefilter.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/waverdc.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/waverdc.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wseries.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wseries.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/cwb-core/wslice.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/0.installation_guide.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/1.initialisation_guide.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/2.test_interactive_multistages_2G_analysis.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/3.run_pycwb_with_yaml_config.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/4.py_cwb_inet_2G.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/5.cwb2G_analyse.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/6.wat_codes_notes.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/Makefile +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/diagram.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/make.bat +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/_static/.keep +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/_templates/.keep +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/conf.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/credit.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/index.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/install.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/mod_cwb.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/package.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/schema.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorial_batch_inj.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorial_customized_wf_gen.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorial_injection.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorial_multi_injection.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorial_search.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/tutorials.rst +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/docs/source/workflow.png +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/envs/Dockerfile +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/envs/environment.yml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/envs/mamba/Dockerfile +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/autoencoder/pycwb_injection.ipynb +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/autoencoder/user_parameters_injection.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/generate_parameters.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/pycbc_inject/hyperbolicTD/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/pycbc_inject/hyperbolicTD/parameters.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/pycbc_inject/hyperbolicTD/waveform.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/pycwb_injection.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/batch_injection/user_parameters_injection.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/H1_cat0.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/H1_cat1.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/H1_cat2.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/H1_cat4.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/L1_cat0.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/L1_cat1.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/L1_cat2.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/DQ/L1_cat4.txt +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/input/OPBM.period +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/input/OPBM_H1.frames +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/input/OPBM_L1.frames +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/pycwb_mdc.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/benchmark/user_parameters_mdc.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/colab/pycWB_GW150914.ipynb +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/injection/pycwb_injection.ipynb +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/injection/user_parameters_injection.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/injection/wdmXTalk/OverlapCatalog16-1024.bin +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/lvk_sep_2023/demo.ipynb +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/lvk_sep_2023/user_parameters.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/multiple_injection/pycwb_injection.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/multiple_injection/user_parameters_injection.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/pyseobnr_injection/generate_parameters.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/pyseobnr_injection/user_parameters_injection.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/pyseobnr_injection/waveform_model/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/pyseobnr_injection/waveform_model/waveform.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/examples/waveform_reconstruction/reconstruct_waveform_from_cluster.ipynb +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/cwb_core/coherence.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/cwb_core/coherence.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/cwb_core/likelihood.cc +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/cwb_core/likelihood.hh +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/dag/dag.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/dag/dask-prefect.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/dag/prefect_test.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger/server.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger/visualizition.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/.eslintrc.cjs +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/.gitignore +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/.prettierrc.json +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/README.md +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/index.html +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/package-lock.json +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/package.json +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/public/favicon.ico +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/App.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/assets/base.css +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/assets/cwb_icon_modern_blue_alfa.png +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/assets/main.css +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/assets/style.css +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/HelloWorld.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/TheWelcome.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/WelcomeItem.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/__tests__/HelloWorld.spec.js +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/icons/IconCommunity.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/icons/IconDocumentation.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/icons/IconEcosystem.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/icons/IconSupport.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/components/icons/IconTooling.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/main.js +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/router/index.js +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/stores/counter.js +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/views/drawflow.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/views/nodes/node1.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/views/nodes/node2.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/views/nodes/node3.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/src/views/nodes/nodeHeader.vue +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/messenger-web-interface/vite.config.js +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/performance/numba_test.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/performance/taichi_test.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/prototypes/search.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/batch_runner.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/batch_setup.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/flow.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/merge_catalog.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/run.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/server.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/cli/xtalk.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/config/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/config/config.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/constants/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/constants/project_constants.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/constants/user_parameters_schema.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/autoencoder/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/autoencoder/autoencoder.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/autoencoder/cwb_autoencoder.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/autoencoder/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/catalog/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/catalog/catalog.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/catalog/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/coherence/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/coherence/coherence.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/coherence/coherence_lite.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/coherence/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/condor/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/condor/condor.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/condor/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/cluster.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/pixel.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/series.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/cwb_conversions/sparse_series.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/data_conditioning/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/data_conditioning/data_conditioning.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/data_conditioning/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/data_conditioning/regression.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/data_conditioning/whitening.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/energy_threshold/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/energy_threshold/threshold.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/gracedb/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/gracedb/gracedb.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/gracedb/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/gracedb/test_gracedb.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/dq_segment.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/frame.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/job_segment.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/plots.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/super_lag.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/job_segment/test_job_segment.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihood/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihood/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/dpf.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/dpf_cython.pyx +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/likelihood.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/sky_stat.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/likelihoodWP/utils.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/logger/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/logger/logger.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/logger/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/multi_resolution_wdm/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/multi_resolution_wdm/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/multi_resolution_wdm/wdm.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/cluster_statistics.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/event.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/spectrogram.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot/waveform.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_data_quality/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_data_quality/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_data_quality/plot.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_map/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_map/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/plot_map/world_map.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/data_check.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/data_find.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/mdc.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/read_data/read_data.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/reconstruction/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/reconstruction/getMRAwaveform.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/reconstruction/module.yaml +0 -0
- {pycwb-0.25.0/pycwb/modules/statistics → pycwb-0.26.0/pycwb/modules/report}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/sparse_series/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/sparse_series/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/sparse_series/sparse_table.py +0 -0
- {pycwb-0.25.0/pycwb/modules/supercluster_naive → pycwb-0.26.0/pycwb/modules/statistics}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/statistics/eff.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/statistics/eff_plot.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/statistics/merge.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/statistics/sigmoid_fit.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/sub_net_cut.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/super_cluster.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/supercluster.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/super_cluster/utils.py +0 -0
- {pycwb-0.25.0/pycwb/modules/web_viewer → pycwb-0.26.0/pycwb/modules/supercluster_naive}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/supercluster_naive/supercluster2.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/superlag/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/superlag/module.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/superlag/superlag.py +0 -0
- {pycwb-0.25.0/pycwb/modules/workflow_utils → pycwb-0.26.0/pycwb/modules/web_viewer}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/web_viewer/create.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/web_viewer/module.yaml +0 -0
- {pycwb-0.25.0/pycwb/modules/xtalk → pycwb-0.26.0/pycwb/modules/workflow_utils}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/workflow_utils/job_setup.py +0 -0
- {pycwb-0.25.0/pycwb/prefect_flow → pycwb-0.26.0/pycwb/modules/xtalk}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/xtalk/monster.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/xtalk/monster_old.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/modules/xtalk/xtalk_data.py +0 -0
- {pycwb-0.25.0/pycwb/prefect_flow/tasks → pycwb-0.26.0/pycwb/post_production}/__init__.py +0 -0
- {pycwb-0.25.0/pycwb/types → pycwb-0.26.0/pycwb/prefect_flow}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/prefect_flow/pycwb_flow.py +0 -0
- {pycwb-0.25.0/pycwb/utils → pycwb-0.26.0/pycwb/prefect_flow/tasks}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/prefect_flow/tasks/builtin.py +0 -0
- {pycwb-0.25.0/pycwb/utils/conversions → pycwb-0.26.0/pycwb/types}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/data_quality_file.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/detector.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/job.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/network.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/network_cluster.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/network_pixel.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/sparse_series.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/time_frequency_series.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/wdm.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/types/wdm_xtalk.py +0 -0
- {pycwb-0.25.0/pycwb/vendor → pycwb-0.26.0/pycwb/utils}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/async_write.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/check_ROOT.py +0 -0
- {pycwb-0.25.0/pycwb/vendor/autoencoder → pycwb-0.26.0/pycwb/utils/conversions}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/conversions/timeseries.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/dataclass_object_io.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/dep_check.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/generate_params_table.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/image.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/module.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/network.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/parser.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/skymap_coord.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/utils/yaml_helper.py +0 -0
- {pycwb-0.25.0/pycwb/vendor/lib → pycwb-0.26.0/pycwb/vendor}/__init__.py +0 -0
- {pycwb-0.25.0/pycwb/workflow → pycwb-0.26.0/pycwb/vendor/autoencoder}/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/vendor/autoencoder/cwb_autoencoder.h5 +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/vendor/example.yaml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/vendor/web_viewer/event_dump.html +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/vendor/web_viewer/styles.css +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/vendor/web_viewer/viewer.html +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/batch.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/merge.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/run.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/subflow/__init__.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/subflow/postprocess_and_plots.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pycwb/workflow/subflow/prepare_job_runs.py +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/pyproject.toml +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/setup.cfg +0 -0
- {pycwb-0.25.0 → pycwb-0.26.0}/setup.py +0 -0
|
@@ -20,7 +20,7 @@ image: buildpack-deps:jammy
|
|
|
20
20
|
stages: # List of stages for jobs, and their order of execution
|
|
21
21
|
- build
|
|
22
22
|
- deploy
|
|
23
|
-
|
|
23
|
+
#- post-deploy
|
|
24
24
|
|
|
25
25
|
.install_common: &install_common
|
|
26
26
|
- wget -q https://root.cern/download/root_v6.26.14.Linux-ubuntu22-x86_64-gcc11.4.tar.gz
|
|
@@ -64,23 +64,24 @@ publish:
|
|
|
64
64
|
- pip install twine
|
|
65
65
|
- TWINE_PASSWORD=${PYPI_TOKEN} TWINE_USERNAME=__token__ python -m twine upload dist/*.tar.gz
|
|
66
66
|
|
|
67
|
-
pages:
|
|
68
|
-
stage: post-deploy
|
|
69
|
-
rules:
|
|
70
|
-
- changes:
|
|
71
|
-
- docs/**/*
|
|
72
|
-
- if: '$CI_COMMIT_TAG'
|
|
73
|
-
script:
|
|
74
|
-
- *install_common
|
|
75
|
-
- pip install pycwb
|
|
76
|
-
- ln -fs /usr/share/zoneinfo/Etc/UTC /etc/localtime
|
|
77
|
-
- pip install "sphinx<7.0.0" sphinx_rtd_theme
|
|
78
|
-
- make doc
|
|
79
|
-
- mkdir public
|
|
80
|
-
- cp -r docs/build/html/* public/
|
|
81
|
-
artifacts:
|
|
82
|
-
paths:
|
|
83
|
-
- public
|
|
67
|
+
#pages:
|
|
68
|
+
# stage: post-deploy
|
|
69
|
+
# rules:
|
|
70
|
+
# - changes:
|
|
71
|
+
# - docs/**/*
|
|
72
|
+
# - if: '$CI_COMMIT_TAG'
|
|
73
|
+
# script:
|
|
74
|
+
# - *install_common
|
|
75
|
+
# - pip install pycwb
|
|
76
|
+
# - ln -fs /usr/share/zoneinfo/Etc/UTC /etc/localtime
|
|
77
|
+
# - pip install "sphinx<7.0.0" sphinx_rtd_theme
|
|
78
|
+
# - make doc
|
|
79
|
+
# - mkdir public
|
|
80
|
+
# - cp -r docs/build/html/* public/
|
|
81
|
+
# artifacts:
|
|
82
|
+
# paths:
|
|
83
|
+
# - public
|
|
84
|
+
|
|
84
85
|
#test-job: # This job runs in the test stage.
|
|
85
86
|
# image: continuumio/miniconda3
|
|
86
87
|
# stage: test # It only starts when the job in the build stage completes successfully.
|
|
@@ -231,6 +231,9 @@ prototypes/messenger-web-interface/src/views/nodes/node3.vue
|
|
|
231
231
|
prototypes/messenger-web-interface/src/views/nodes/nodeHeader.vue
|
|
232
232
|
prototypes/performance/numba_test.py
|
|
233
233
|
prototypes/performance/taichi_test.py
|
|
234
|
+
prototypes/pp_workflow/simple.yaml
|
|
235
|
+
prototypes/pp_workflow/simple_module.yaml
|
|
236
|
+
prototypes/pp_workflow/workflow.yaml
|
|
234
237
|
pycwb/__init__.py
|
|
235
238
|
pycwb/_version.py
|
|
236
239
|
pycwb/cli/__init__.py
|
|
@@ -238,6 +241,7 @@ pycwb/cli/batch_runner.py
|
|
|
238
241
|
pycwb/cli/batch_setup.py
|
|
239
242
|
pycwb/cli/flow.py
|
|
240
243
|
pycwb/cli/merge_catalog.py
|
|
244
|
+
pycwb/cli/post_process.py
|
|
241
245
|
pycwb/cli/run.py
|
|
242
246
|
pycwb/cli/server.py
|
|
243
247
|
pycwb/cli/xtalk.py
|
|
@@ -322,6 +326,10 @@ pycwb/modules/read_data/read_data.py
|
|
|
322
326
|
pycwb/modules/reconstruction/__init__.py
|
|
323
327
|
pycwb/modules/reconstruction/getMRAwaveform.py
|
|
324
328
|
pycwb/modules/reconstruction/module.yaml
|
|
329
|
+
pycwb/modules/report/__init__.py
|
|
330
|
+
pycwb/modules/report/far_rho.py
|
|
331
|
+
pycwb/modules/report/read_results.py
|
|
332
|
+
pycwb/modules/report/report.py
|
|
325
333
|
pycwb/modules/sparse_series/__init__.py
|
|
326
334
|
pycwb/modules/sparse_series/module.yaml
|
|
327
335
|
pycwb/modules/sparse_series/sparse_table.py
|
|
@@ -350,6 +358,8 @@ pycwb/modules/xtalk/__init__.py
|
|
|
350
358
|
pycwb/modules/xtalk/monster.py
|
|
351
359
|
pycwb/modules/xtalk/monster_old.py
|
|
352
360
|
pycwb/modules/xtalk/xtalk_data.py
|
|
361
|
+
pycwb/post_production/__init__.py
|
|
362
|
+
pycwb/post_production/workflow.py
|
|
353
363
|
pycwb/prefect_flow/__init__.py
|
|
354
364
|
pycwb/prefect_flow/pycwb_flow.py
|
|
355
365
|
pycwb/prefect_flow/tasks/__init__.py
|
|
@@ -11,6 +11,7 @@ import pycwb.cli.batch_setup as batch_setup
|
|
|
11
11
|
import pycwb.cli.batch_runner as batch_runner
|
|
12
12
|
import pycwb.cli.xtalk as xtalk
|
|
13
13
|
import pycwb.cli.merge_catalog as merge_catalog
|
|
14
|
+
import pycwb.cli.post_process as post_process
|
|
14
15
|
|
|
15
16
|
def main():
|
|
16
17
|
parser = argparse.ArgumentParser(prog='pycwb')
|
|
@@ -46,6 +47,10 @@ def main():
|
|
|
46
47
|
merge_catalog.init_parser(merge_catalog_parser)
|
|
47
48
|
merge_catalog_parser.set_defaults(func=merge_catalog.command)
|
|
48
49
|
|
|
50
|
+
post_process_parser = subparsers.add_parser('post-process', help='Post process the results')
|
|
51
|
+
post_process.init_parser(post_process_parser)
|
|
52
|
+
post_process_parser.set_defaults(func=post_process.command)
|
|
53
|
+
|
|
49
54
|
args = parser.parse_args()
|
|
50
55
|
if hasattr(args, 'func'):
|
|
51
56
|
args.func(args)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
global:
|
|
2
|
+
work_dir: /Users/yumengxu/Downloads/pycwb_examples
|
|
3
|
+
steps:
|
|
4
|
+
- action: read_triggers
|
|
5
|
+
args:
|
|
6
|
+
run_dir: background
|
|
7
|
+
filters:
|
|
8
|
+
- "lag[0]>0"
|
|
9
|
+
output_alias: 'background'
|
|
10
|
+
- action: read_live_time
|
|
11
|
+
args:
|
|
12
|
+
run_dir: background
|
|
13
|
+
filters:
|
|
14
|
+
- "lag[0]>0"
|
|
15
|
+
output_alias: 'livetime'
|
|
16
|
+
- action: far_rho # this module will calculate the ifar_rho and pass the output to the downstream modules
|
|
17
|
+
args:
|
|
18
|
+
source: 'background'
|
|
19
|
+
livetime_key: 'livetime'
|
|
20
|
+
ranking_par: rho[0]
|
|
21
|
+
bin_size: 0.0001
|
|
22
|
+
output_alias: 'far_rho'
|
|
23
|
+
- action: read_triggers
|
|
24
|
+
args:
|
|
25
|
+
run_dir: background
|
|
26
|
+
filters:
|
|
27
|
+
- "lag[0]==0"
|
|
28
|
+
output_alias: 'zero_lag'
|
|
29
|
+
- action: read_live_time
|
|
30
|
+
args:
|
|
31
|
+
run_dir: background
|
|
32
|
+
filters:
|
|
33
|
+
- "lag[0]==0"
|
|
34
|
+
output_alias: 'livetime_zerolag'
|
|
35
|
+
- action: report_zero_lag
|
|
36
|
+
args:
|
|
37
|
+
source: 'zero_lag'
|
|
38
|
+
livetime_key: 'livetime_zerolag'
|
|
39
|
+
far_rho_source: 'far_rho'
|
|
40
|
+
- action: report # generate report
|
|
41
|
+
args:
|
|
42
|
+
far_rho_source: 'far_rho'
|
|
43
|
+
output: public/
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
global:
|
|
2
|
+
work_dir: /Users/yumengxu/Downloads/pycwb_examples
|
|
3
|
+
steps:
|
|
4
|
+
- action: report.read_results.read_triggers
|
|
5
|
+
args:
|
|
6
|
+
run_dir: background
|
|
7
|
+
filters:
|
|
8
|
+
- "lag[0]>0"
|
|
9
|
+
output_alias: 'background'
|
|
10
|
+
- action: report.read_results.read_live_time
|
|
11
|
+
args:
|
|
12
|
+
run_dir: background
|
|
13
|
+
filters:
|
|
14
|
+
- "lag[0]>0"
|
|
15
|
+
output_alias: 'livetime'
|
|
16
|
+
- action: report.far_rho.far_rho # this module will calculate the far_rho and pass the output to the downstream modules
|
|
17
|
+
args:
|
|
18
|
+
source: 'background'
|
|
19
|
+
livetime_key: 'livetime'
|
|
20
|
+
ranking_par: rho[0]
|
|
21
|
+
bin_size: 0.0001
|
|
22
|
+
save: far_rho.json
|
|
23
|
+
output_alias: 'far_rho'
|
|
24
|
+
- action: report.read_results.read_triggers
|
|
25
|
+
args:
|
|
26
|
+
run_dir: background
|
|
27
|
+
filters:
|
|
28
|
+
- "lag[0]==0"
|
|
29
|
+
output_alias: 'zero_lag'
|
|
30
|
+
- action: report.read_results.read_live_time
|
|
31
|
+
args:
|
|
32
|
+
run_dir: background
|
|
33
|
+
filters:
|
|
34
|
+
- "lag[0]==0"
|
|
35
|
+
output_alias: 'livetime_zerolag'
|
|
36
|
+
- action: report.report.report_zero_lag
|
|
37
|
+
args:
|
|
38
|
+
source: 'zero_lag'
|
|
39
|
+
livetime_key: 'livetime_zerolag'
|
|
40
|
+
far_rho_source: 'far_rho'
|
|
41
|
+
- action: report.report.report # generate report
|
|
42
|
+
args:
|
|
43
|
+
far_rho_source: 'far_rho'
|
|
44
|
+
output: public/
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
global:
|
|
2
|
+
work_dir: /Users/yumengxu/Downloads/pycwb_examples/non-builtin-waveform
|
|
3
|
+
steps:
|
|
4
|
+
- action: events_filter # this module will filter the event and pass to the downstream modules
|
|
5
|
+
args:
|
|
6
|
+
run_dir: O4_K01_BurstLD_BKG
|
|
7
|
+
conditions:
|
|
8
|
+
- "lag>0" # only process non-zero lag events
|
|
9
|
+
output_alias: 'background'
|
|
10
|
+
- action: events_filter # read the training set and name it as 'training_set'
|
|
11
|
+
args:
|
|
12
|
+
run_dir: O4_K01_BurstLD_SIM_TrainingSet1
|
|
13
|
+
output_alias: 'sim_training_set'
|
|
14
|
+
- action: events_splitter # split the background into bkg_training_set and bkg_test_set
|
|
15
|
+
args:
|
|
16
|
+
source: 'background'
|
|
17
|
+
percent: [0.5, 0.5]
|
|
18
|
+
output_alias: ['bkg_training_set', 'bkg_test_set']
|
|
19
|
+
- action: xgboost_model # take the training set from the upsteam
|
|
20
|
+
args:
|
|
21
|
+
background: ['bkg_training_set']
|
|
22
|
+
simulation: ['sim_training_set']
|
|
23
|
+
config: xgb_config.py
|
|
24
|
+
get_rhor: xgb_get_rhor.py
|
|
25
|
+
name: 'model_v1a'
|
|
26
|
+
- action: xgboost_apply # apply xgb on BKG
|
|
27
|
+
args:
|
|
28
|
+
source: 'bkg_test_set'
|
|
29
|
+
model: 'model_v1a'
|
|
30
|
+
output_alias: 'bkg_test_set.model_v1a'
|
|
31
|
+
- action: ifar_rho # this module will calculate the ifar_rho and pass the output to the downstream modules
|
|
32
|
+
args:
|
|
33
|
+
source: 'bkg_test_set.model_v1a'
|
|
34
|
+
ranking_par: rho[1]
|
|
35
|
+
ranking_par_bin: 0.0001
|
|
36
|
+
output_alias: 'bkg_test_set.model_v1a.ifar'
|
|
37
|
+
- action: report # generate report
|
|
38
|
+
args:
|
|
39
|
+
source: 'bkg_test_set.model_v1a.ifar'
|
|
40
|
+
output: public/
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def init_parser(parser):
|
|
5
|
+
# Add the arguments
|
|
6
|
+
parser.add_argument('workflow_file',
|
|
7
|
+
metavar='file_path',
|
|
8
|
+
type=str,
|
|
9
|
+
help='the path to the workflow file')
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def command(args):
|
|
13
|
+
from pycwb.post_production.workflow import run_workflow
|
|
14
|
+
|
|
15
|
+
run_workflow(args.workflow_file)
|
|
@@ -11,7 +11,8 @@ from pycwb.types.network_event import Event
|
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
def likelihood(config, network, fragment_cluster, lag=0
|
|
14
|
+
def likelihood(config, network, fragment_cluster, lag=0, shifts=(0,0,0), job_id=None) \
|
|
15
|
+
-> tuple[list[Event], list[Cluster], list[dict]]:
|
|
15
16
|
"""
|
|
16
17
|
calculate likelihood for single lag
|
|
17
18
|
|
|
@@ -56,7 +57,8 @@ def likelihood(config, network, fragment_cluster, lag=0) -> tuple[list[Event], l
|
|
|
56
57
|
continue
|
|
57
58
|
|
|
58
59
|
cluster_id = k + 1
|
|
59
|
-
event, cluster = _likelihood(config, network, lag, cluster_id, fragment_cluster.dump_cluster(k))
|
|
60
|
+
event, cluster = _likelihood(config, network, lag, cluster_id, fragment_cluster.dump_cluster(k), shifts)
|
|
61
|
+
event.job_id = job_id
|
|
60
62
|
events.append(event)
|
|
61
63
|
clusters.append(cluster)
|
|
62
64
|
|
|
@@ -106,7 +108,7 @@ def likelihood(config, network, fragment_cluster, lag=0) -> tuple[list[Event], l
|
|
|
106
108
|
return events, clusters, skymap_statistics
|
|
107
109
|
|
|
108
110
|
|
|
109
|
-
def _likelihood(config, network, lag, cluster_id, fragment_cluster):
|
|
111
|
+
def _likelihood(config, network, lag, cluster_id, fragment_cluster, shifts=(0,0,0)):
|
|
110
112
|
# dumb variables
|
|
111
113
|
k = 0
|
|
112
114
|
|
|
@@ -149,7 +151,7 @@ def _likelihood(config, network, lag, cluster_id, fragment_cluster):
|
|
|
149
151
|
cluster = convert_netcluster_to_fragment_clusters(network.get_cluster(lag)).clusters[0]
|
|
150
152
|
|
|
151
153
|
event = Event()
|
|
152
|
-
event.output(network.net, k + 1, lag)
|
|
154
|
+
event.output(network.net, k + 1, lag, shifts=shifts)
|
|
153
155
|
|
|
154
156
|
pwc.clean(1)
|
|
155
157
|
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import orjson
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def far_rho(source, ranking_par, bin_size, livetime_key='livetime', save='far_rho.json', **kwargs):
|
|
6
|
+
print(f"Calculating far and rho for source {source} with ranking parameter {ranking_par} with bin size {bin_size}")
|
|
7
|
+
|
|
8
|
+
if source not in kwargs:
|
|
9
|
+
print(f"Source {source} not found in the results")
|
|
10
|
+
raise ValueError(f"Source {source} not found in the results")
|
|
11
|
+
triggers = kwargs[source]
|
|
12
|
+
|
|
13
|
+
if livetime_key not in kwargs:
|
|
14
|
+
print(f"Live time key {livetime_key} not found in the results")
|
|
15
|
+
raise ValueError(f"Live time key {livetime_key} not found in the results")
|
|
16
|
+
livetime = kwargs[livetime_key]
|
|
17
|
+
|
|
18
|
+
# extract the ranking parameter from the triggers
|
|
19
|
+
if '[' not in ranking_par:
|
|
20
|
+
values = [trigger[ranking_par] for trigger in triggers]
|
|
21
|
+
else:
|
|
22
|
+
base_key, index = ranking_par.split('[')
|
|
23
|
+
index = int(index.rstrip(']'))
|
|
24
|
+
values = [trigger[base_key][index] for trigger in triggers]
|
|
25
|
+
|
|
26
|
+
# remove None in values and print warning with trigger job_id and id
|
|
27
|
+
none_values = [triggers[i] for i, value in enumerate(values) if value is None]
|
|
28
|
+
if none_values:
|
|
29
|
+
print(f"Warning: {len(none_values)} triggers with None value in {ranking_par}")
|
|
30
|
+
for none_value in none_values:
|
|
31
|
+
print(none_value)
|
|
32
|
+
|
|
33
|
+
values = [value for value in values if value is not None]
|
|
34
|
+
|
|
35
|
+
# calculate the n_events vs rho
|
|
36
|
+
hist, bins = np.histogram(values, bins=np.arange(min(values), max(values) + bin_size, bin_size))
|
|
37
|
+
accumulate_hist = np.cumsum(hist[::-1])[::-1]
|
|
38
|
+
bins = bins[:-1]
|
|
39
|
+
|
|
40
|
+
# calculate the far for each bin
|
|
41
|
+
livetime_in_years = livetime / 86400 / 365.25
|
|
42
|
+
far = [accumulate_hist[i] / livetime_in_years for i in range(len(accumulate_hist))]
|
|
43
|
+
data = {'bins': bins, 'far': far, 'n_events': hist,
|
|
44
|
+
'ranking_par': ranking_par, 'source': source, 'livetime': livetime}
|
|
45
|
+
|
|
46
|
+
if save:
|
|
47
|
+
with open(save, 'wb') as f:
|
|
48
|
+
f.write(orjson.dumps(data, option=orjson.OPT_SERIALIZE_NUMPY))
|
|
49
|
+
|
|
50
|
+
return data
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
2
|
+
import orjson
|
|
3
|
+
import os
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def read_catalog(catalog_file):
|
|
8
|
+
with open(catalog_file, 'rb') as f:
|
|
9
|
+
catalog = orjson.loads(f.read())
|
|
10
|
+
|
|
11
|
+
# remove redundant events (unique event['id']) in catalog
|
|
12
|
+
n_events_before = len(catalog['events'])
|
|
13
|
+
catalog['events'] = list({f"{event['job_id']}_{event['id']}": event for event in catalog['events']}.values())
|
|
14
|
+
n_events_after = len(catalog['events'])
|
|
15
|
+
if n_events_before != n_events_after:
|
|
16
|
+
print(f"Removed {n_events_before - n_events_after} duplicated events")
|
|
17
|
+
return catalog
|
|
18
|
+
|
|
19
|
+
def read_event(event_file):
|
|
20
|
+
with open(event_file, 'rb') as f:
|
|
21
|
+
events = orjson.loads(f.read())
|
|
22
|
+
return events
|
|
23
|
+
|
|
24
|
+
def list_dict_filter(data, conditions, name='event'):
|
|
25
|
+
print(f"number of {name} before filtering: {len(data)}")
|
|
26
|
+
filter_string = " and ".join(conditions)
|
|
27
|
+
print(f"Performing filter: {filter_string}")
|
|
28
|
+
filtered_events = [d for d in data if eval(filter_string, {"__builtins__": None}, d)]
|
|
29
|
+
print(f"number of {name} after filtering: {len(filtered_events)}")
|
|
30
|
+
return filtered_events
|
|
31
|
+
|
|
32
|
+
def read_triggers(work_dir, run_dir, filters=None, file='catalog/catalog.json',**kwargs):
|
|
33
|
+
print(f"Reading results from {os.path.join(work_dir, run_dir, file)}")
|
|
34
|
+
catalog = read_catalog(os.path.join(work_dir, run_dir, file))
|
|
35
|
+
|
|
36
|
+
events = []
|
|
37
|
+
n_events = len(catalog['events'])
|
|
38
|
+
# for i, event in enumerate(catalog['events']):
|
|
39
|
+
# if i % 100 == 0:
|
|
40
|
+
# print(f"Reading event {i}/{n_events}", end='\r')
|
|
41
|
+
# event_file = os.path.join(work_dir, run_dir, f"trigger/trigger_{event['job_id']}_{event['id']}/event.json")
|
|
42
|
+
# events.append(read_event(event_file))
|
|
43
|
+
|
|
44
|
+
with ThreadPoolExecutor() as executor:
|
|
45
|
+
futures = [executor.submit(read_event, os.path.join(work_dir, run_dir, f"trigger/trigger_{event['job_id']}_{event['id']}/event.json"))
|
|
46
|
+
for event in catalog['events']]
|
|
47
|
+
for i, future in enumerate(futures):
|
|
48
|
+
if i % 100 == 0:
|
|
49
|
+
print(f"Reading event {i}/{n_events}", end='\r')
|
|
50
|
+
events.append(future.result())
|
|
51
|
+
if filters:
|
|
52
|
+
events = list_dict_filter(events, filters, name='triggers')
|
|
53
|
+
return events
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def read_live_time(work_dir, run_dir, filters=None, file='catalog/catalog.json',**kwargs):
|
|
57
|
+
print(f"Reading live time from {os.path.join(work_dir, run_dir, file)}")
|
|
58
|
+
catalog = read_catalog(os.path.join(work_dir, run_dir, file))
|
|
59
|
+
|
|
60
|
+
# TODO: this is for the simplest case only
|
|
61
|
+
lags = np.arange(catalog['config']['lagSize'])
|
|
62
|
+
|
|
63
|
+
livetimes = []
|
|
64
|
+
for job in catalog['jobs']:
|
|
65
|
+
shift = job['shift']
|
|
66
|
+
livetime_single = job['end_time'] - job['start_time']
|
|
67
|
+
for lag in lags:
|
|
68
|
+
livetimes.append({
|
|
69
|
+
'shift': shift,
|
|
70
|
+
'livetime': livetime_single,
|
|
71
|
+
'lag': lag
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
if filters:
|
|
75
|
+
livetimes = list_dict_filter(livetimes, filters, name='live times')
|
|
76
|
+
|
|
77
|
+
total_live_time = sum([lt['livetime'] for lt in livetimes])
|
|
78
|
+
print(f"Total live time: {total_live_time}s ({total_live_time/86400:.2f} days, {total_live_time/86400/365:.2f} years)")
|
|
79
|
+
return total_live_time
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import matplotlib.pyplot as plt
|
|
2
|
+
import numpy as np
|
|
3
|
+
from scipy.stats import poisson
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def report(far_rho_source=None, **kwargs):
|
|
7
|
+
|
|
8
|
+
print(f"Reporting the results")
|
|
9
|
+
if far_rho_source:
|
|
10
|
+
if far_rho_source not in kwargs:
|
|
11
|
+
print(f"Source {far_rho_source} not found in the results")
|
|
12
|
+
raise ValueError(f"Source {far_rho_source} not found in the results")
|
|
13
|
+
data = kwargs[far_rho_source]
|
|
14
|
+
|
|
15
|
+
# plot the far vs ranking parameter
|
|
16
|
+
plt.plot(data['bins'], data['far'], drawstyle='steps-post')
|
|
17
|
+
plt.xlabel(data['ranking_par'])
|
|
18
|
+
plt.ylabel('far')
|
|
19
|
+
plt.yscale('log')
|
|
20
|
+
plt.savefig(f"{far_rho_source}.png")
|
|
21
|
+
plt.close()
|
|
22
|
+
|
|
23
|
+
# plot the number of events vs ranking parameter
|
|
24
|
+
plt.plot(data['bins'], data['n_events'], drawstyle='steps-post')
|
|
25
|
+
plt.xlabel(data['ranking_par'])
|
|
26
|
+
plt.ylabel('number of events')
|
|
27
|
+
plt.yscale('log')
|
|
28
|
+
plt.savefig(f"{far_rho_source}_n_events.png")
|
|
29
|
+
plt.close()
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def report_zero_lag(source, livetime_key='livetime_zerolag', far_rho_source='far_rho', **kwargs):
|
|
33
|
+
print(f"Reporting the zero lag results")
|
|
34
|
+
if source not in kwargs:
|
|
35
|
+
print(f"Source {source} not found in the results")
|
|
36
|
+
raise ValueError(f"Source {source} not found in the results")
|
|
37
|
+
triggers = kwargs[source]
|
|
38
|
+
|
|
39
|
+
if livetime_key not in kwargs:
|
|
40
|
+
print(f"Live time key {livetime_key} not found in the results")
|
|
41
|
+
raise ValueError(f"Live time key {livetime_key} not found in the results")
|
|
42
|
+
livetime = kwargs[livetime_key]
|
|
43
|
+
|
|
44
|
+
if far_rho_source not in kwargs:
|
|
45
|
+
print(f"Source {far_rho_source} not found in the results")
|
|
46
|
+
raise ValueError(f"Source {far_rho_source} not found in the results")
|
|
47
|
+
far_rho_data = kwargs[far_rho_source]
|
|
48
|
+
|
|
49
|
+
# attach far to the triggers if the trigger's ranking_par is within the range of bin
|
|
50
|
+
ranking_par = far_rho_data['ranking_par']
|
|
51
|
+
bins = far_rho_data['bins']
|
|
52
|
+
far = far_rho_data['far']
|
|
53
|
+
|
|
54
|
+
if '[' not in ranking_par:
|
|
55
|
+
values = [trigger[ranking_par] for trigger in triggers]
|
|
56
|
+
else:
|
|
57
|
+
base_key, index = ranking_par.split('[')
|
|
58
|
+
index = int(index.rstrip(']'))
|
|
59
|
+
values = [trigger[base_key][index] for trigger in triggers]
|
|
60
|
+
|
|
61
|
+
# remove None in values and print warning with trigger job_id and id
|
|
62
|
+
none_values = [triggers[i] for i, value in enumerate(values) if value is None]
|
|
63
|
+
if none_values:
|
|
64
|
+
print(f"Warning: {len(none_values)} triggers with None value in {ranking_par}")
|
|
65
|
+
for none_value in none_values:
|
|
66
|
+
print(none_value)
|
|
67
|
+
triggers = [triggers[i] for i, value in enumerate(values) if value is not None]
|
|
68
|
+
values = [value for value in values if value is not None]
|
|
69
|
+
|
|
70
|
+
# align the values to the bin
|
|
71
|
+
bin_indices = np.digitize(values, bins) - 1
|
|
72
|
+
far_values = [far[i] for i in bin_indices]
|
|
73
|
+
for i, trigger in enumerate(triggers):
|
|
74
|
+
trigger['far'] = far_values[i]
|
|
75
|
+
|
|
76
|
+
# plot the triggers far vs ranking parameter
|
|
77
|
+
print(f"Plotting far vs {ranking_par}")
|
|
78
|
+
plt.scatter(values, far_values)
|
|
79
|
+
plt.xlabel(ranking_par)
|
|
80
|
+
plt.ylabel('far')
|
|
81
|
+
plt.yscale('log')
|
|
82
|
+
plt.savefig(f"{source}_far.png")
|
|
83
|
+
plt.close()
|
|
84
|
+
|
|
85
|
+
print(f"Plotting far vs n_events accumulative distribution")
|
|
86
|
+
# plot accumulated triggers vs trigger['far']
|
|
87
|
+
ranked_triggers = sorted(triggers, key=lambda x: 1/x['far'], reverse=True)
|
|
88
|
+
ifar = np.array([1/trigger['far'] for trigger in ranked_triggers])
|
|
89
|
+
plot_y = np.arange(1, len(ranked_triggers) + 1)
|
|
90
|
+
plt.plot(ifar, plot_y, drawstyle='steps-post')
|
|
91
|
+
|
|
92
|
+
livetime_in_years = livetime / 86400 / 365.25
|
|
93
|
+
ifar_min = min(ifar)
|
|
94
|
+
n_events_at_ifar_min = livetime_in_years / ifar_min
|
|
95
|
+
ifar_max = max(ifar)
|
|
96
|
+
n_events_at_ifar_max = livetime_in_years / ifar_max
|
|
97
|
+
plt.plot([ifar_min, ifar_max], [n_events_at_ifar_min, n_events_at_ifar_max], color='black', linewidth=0.5)
|
|
98
|
+
print(f"ifar_min: {ifar_min}, n_events_at_ifar_min: {n_events_at_ifar_min}")
|
|
99
|
+
print(f"ifar_max: {ifar_max}, n_events_at_ifar_max: {n_events_at_ifar_max}")
|
|
100
|
+
|
|
101
|
+
# Calculate the Poisson confidence intervals
|
|
102
|
+
# generate the ifar range which is denser at the higher ifar
|
|
103
|
+
ifar_range = np.linspace(ifar_min, ifar_max, 100000)
|
|
104
|
+
n_events_range = livetime_in_years / ifar_range
|
|
105
|
+
sigma_levels = [1, 2, 3]
|
|
106
|
+
confidence_levels = [0.6827, 0.9545, 0.9973]
|
|
107
|
+
conf_intervals = {sigma: poisson.interval(confidence, n_events_range) for sigma, confidence in zip(sigma_levels, confidence_levels)}
|
|
108
|
+
# Plot the Poisson confidence intervals
|
|
109
|
+
colors = ['gray', 'gray', 'gray']
|
|
110
|
+
for sigma, color in zip(sigma_levels, colors):
|
|
111
|
+
lower, upper = conf_intervals[sigma]
|
|
112
|
+
plt.fill_between(ifar_range, lower, upper, color=color, alpha=0.6 / sigma, label=f'{sigma} sigma', linewidth=0.4)
|
|
113
|
+
|
|
114
|
+
plt.xlabel('ifar')
|
|
115
|
+
plt.ylabel('n_events')
|
|
116
|
+
plt.xscale('log')
|
|
117
|
+
plt.yscale('log')
|
|
118
|
+
plt.legend()
|
|
119
|
+
plt.savefig(f"{source}_far_n_events.png")
|
|
120
|
+
plt.close()
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import yaml
|
|
2
|
+
import copy
|
|
3
|
+
from pycwb.utils.module import import_helper
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def run_workflow(workflow_file):
|
|
7
|
+
with open(workflow_file, 'r') as f:
|
|
8
|
+
workflow = yaml.safe_load(f)
|
|
9
|
+
|
|
10
|
+
# the global arguments will be inserted into each step,
|
|
11
|
+
# the output of each step will be stored in the global arguments
|
|
12
|
+
# if the output_alias if given, the output will be stored in the
|
|
13
|
+
# global arguments with the key of output_alias
|
|
14
|
+
global_args = workflow['global']
|
|
15
|
+
# iterate through each step
|
|
16
|
+
for step in workflow['steps']:
|
|
17
|
+
# get the function, this will be replaced with a module loader
|
|
18
|
+
func_name = step['action'].split('.')[-1]
|
|
19
|
+
module_name = '.'.join(step['action'].split('.')[:-1])
|
|
20
|
+
if not module_name.startswith('pycwb'):
|
|
21
|
+
module_name = f"pycwb.modules.{module_name}"
|
|
22
|
+
module = import_helper(module_name, module_name)
|
|
23
|
+
func = getattr(module, func_name)
|
|
24
|
+
# combine global_args and step['args']
|
|
25
|
+
args = copy.deepcopy(global_args)
|
|
26
|
+
args.update(step['args'])
|
|
27
|
+
|
|
28
|
+
print("-"*50)
|
|
29
|
+
print(f"Running action {step['action']} with args {list(args.keys())}")
|
|
30
|
+
result = func(**args)
|
|
31
|
+
if 'output_alias' in step:
|
|
32
|
+
global_args[step['output_alias']] = result
|
|
33
|
+
print(f"Output stored with key: {step['output_alias']}")
|
|
34
|
+
# if result is a dict, add to results
|
|
35
|
+
elif isinstance(result, dict):
|
|
36
|
+
global_args.update(result)
|