dcscope 2.26.1__tar.gz → 2.26.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.
- {dcscope-2.26.1 → dcscope-2.26.2}/CHANGELOG +10 -1
- {dcscope-2.26.1/dcscope.egg-info → dcscope-2.26.2}/PKG-INFO +2 -2
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/_version.py +3 -3
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_filter.py +3 -3
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_plot.py +62 -45
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_plot.ui +8 -1
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_slot.py +4 -4
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/dlg_slot_reorder.py +1 -2
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/bulk/bulk_emodulus.py +1 -2
- dcscope-2.26.2/dcscope/gui/helpers.py +34 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/main.py +9 -17
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_dataset.py +5 -5
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_dataset.ui +33 -46
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_element.py +2 -2
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_filter.py +9 -4
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_filter.ui +23 -66
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/pm_element.py +1 -2
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/pm_plot.py +9 -4
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/pm_plot.ui +14 -37
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/pipeline_plot.py +60 -6
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/preferences.py +1 -1
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/core.py +73 -3
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/filter_ray.py +10 -2
- {dcscope-2.26.1 → dcscope-2.26.2/dcscope.egg-info}/PKG-INFO +2 -2
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope.egg-info/SOURCES.txt +1 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope.egg-info/requires.txt +1 -1
- {dcscope-2.26.1 → dcscope-2.26.2}/pyproject.toml +1 -1
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_plotting.py +65 -0
- dcscope-2.26.2/tests/test_pipeline_filter_ray_2.py +114 -0
- dcscope-2.26.1/dcscope/gui/helpers.py +0 -16
- {dcscope-2.26.1 → dcscope-2.26.2}/.github/workflows/check.yml +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/.github/workflows/deploy_github.yml +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/.github/workflows/deploy_pypi.yml +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/.gitignore +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/.readthedocs.yml +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/LICENSE +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/MANIFEST.in +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/README.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/DCscope.icns +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/DCscope.ico +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/DCscopeLauncher.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/Readme.md +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/hook-dcscope.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/macos_DCscope.spec +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/macos_build_app.sh +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/macos_build_requirements.txt +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/win_DCscope.spec +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/win_build_requirements.txt +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/win_dcscope.iss_dummy +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/win_make_iss.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/__main__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/extensions.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_basins.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_basins.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_filter.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_log.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_log.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_meta.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_meta.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_slot.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_tables.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_tables.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_view.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_view.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/dlg_slot_reorder.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/bulk/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/bulk/bulk_emodulus.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_dataset.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_dataset.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_results.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_results.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_stats.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_stats.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/dcor/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/dcor/dcor.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2data.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2data.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2filter.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2filter.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2plot.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2plot.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/main.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/Readme.md +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/block_matrix.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/block_matrix.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/data_matrix.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_element.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/plot_matrix.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/pipeline_plot.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/preferences.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/quick_view/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_main.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_main.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_scatter.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_style.css +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/settings.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/update.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/bg_thread.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/bulk_list.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/bulk_list.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/double_spin_box_nan.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/feature_combobox.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/get_path.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/key_value_table_widget.css +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/key_value_table_widget.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/mdi_subwindow_wo_close.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/qrangeslider.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/rangecontrol.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/rangecontrol.ui +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/simple_image_view.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/simple_plot_widget.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/so_colorbaritem.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/wait_cursor.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/idiom.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/COPYING-ICONS +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/COPYING.LIB +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/README +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/application-exit.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/code-context.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-cancel.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-close.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-messages.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok-apply.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/document-open-folder.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/document-open.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/document-save.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/documentinfo.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/draw-watercolor.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/edit-clear-all.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/edit-clear.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/edit-paste.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/globe.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/gtk-preferences.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/list-add.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/messagebox_warning.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/object-columns.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/object-order-lower.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/object-rows.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/office-chart-line-stacked.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/office-chart-ring.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/office-chart-scatter.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/path-mode-polyline.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/preferences-activities.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/remove.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/search.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/show-grid.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/special_paste.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/tools-wizard.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-calendar-list.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-filter.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-list-tree.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-statistics.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/visibility.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/application-exit.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/code-context.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-cancel.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-close.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-messages.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok-apply.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/document-open-folder.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/document-open.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/document-save.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/documentinfo.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/draw-watercolor.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/edit-clear-all.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/edit-clear.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/edit-paste.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/globe.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/gtk-preferences.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/list-add.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/messagebox_warning.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/object-columns.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/object-order-lower.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/object-rows.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/office-chart-line-stacked.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/office-chart-ring.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/office-chart-scatter.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/path-mode-polyline.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/preferences-activities.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/remove.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/special_paste.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/tools-wizard.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-calendar-list.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-filter.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-list-tree.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-statistics.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/visibility.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/application-exit.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/code-context.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-cancel.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-close.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-messages.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok-apply.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/document-open-folder.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/document-open.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/document-save.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/documentinfo.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/draw-watercolor.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/edit-clear-all.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/edit-clear.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/edit-paste.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/globe.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/gtk-preferences.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/list-add.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/messagebox_warning.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/object-columns.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/object-order-lower.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/object-rows.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/office-chart-line-stacked.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/office-chart-ring.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/office-chart-scatter.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/path-mode-polyline.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/preferences-activities.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/remove.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/special_paste.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/tools-wizard.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-calendar-list.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-filter.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-list-tree.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-statistics.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/visibility.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/application-exit.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-cancel.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-messages.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok-apply.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/document-open-folder.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/document-open.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/document-save.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/gtk-preferences.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/object-order-lower.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/view-filter.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/view-list-tree.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/16/folder-cloud.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/16/folder.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/22/folder-cloud.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/22/folder.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/24/folder-cloud.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/24/folder.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/32/folder-cloud.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/32/folder.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/64/folder-cloud.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/64/folder.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-error.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-information.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-question.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-warning.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-error.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-information.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-question.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-warning.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-error.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-information.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-question.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-warning.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-error.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-information.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-question.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-warning.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/collect_icons.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/dcor.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/edit-copy-anew.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/emodulus.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/filter_ray.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/region_channel.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/region_reservoir.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/rlang.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/statistical_significance.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/index.theme +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/splash.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/meta_tool.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/__init__.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/dataslot.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/filter.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/plot.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/session.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/util.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope.egg-info/dependency_links.txt +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope.egg-info/entry_points.txt +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/dcscope.egg-info/top_level.txt +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/README.md +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/Readme.md +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/dcscope_icon.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/dcscope_large_white.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/dcscope_large_white.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/dcscope_splash.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/favicon.ico +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/favicon.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/conf.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/data/extension_fl1_density.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/dcscope.bib +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/extensions/fancy_include.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/extensions/github_changelog.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/extensions/rtd_pdf.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/ATTRIBUTION +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/area.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/aspect.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/brightness.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/deform.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/deform.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/fluorescence.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/fluorescence.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/inert_ratio.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/inert_ratio.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_countrate.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_countrate.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_area.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_area.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_porosity.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_porosity.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_ratios.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_ratios.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_time.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_time.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_15um.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_20um.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_30um.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_40um.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/rtdc-setup.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/volume.jpg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/volume.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/index.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/requirements.txt +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/.gitignore +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/CD66+_CD14-.poly +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/Readme.md +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots.sh +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_dcor.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_emodulus.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_export.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_extensions.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_lme4.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_lme4_diff.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_statistics.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_ui.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_dcor_dlg.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_emodulus_badtemp.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_emodulus_config.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_emodulus_feature.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_emodulus_other.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_export_data.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_extensions.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_lme4_diff_init.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_lme4_diff_results.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_lme4_init.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_lme4_results.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_statistics_folder.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_statistics_init.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/scrots.so2 +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_basins.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_filter.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_logs.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_meta.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_plot.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_slot.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_tables.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_block_matrix.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_main.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_qv_event.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_qv_poly.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_qv_settings.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_changelog.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_devs.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_getting_started.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_imprint.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_interface.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_batch_stats.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_consistency_check.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_dcor.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_export_data.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_extensions.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_filtering.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_lme4.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_youngs_modulus.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_quick_guides.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_rtdc_basics.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_z_bib.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/setup.cfg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/README.md +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/conftest.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/artificial_with_image_bg.rtdc +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/blood_rbc_leukocytes.rtdc +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/blood_rbc_qpi_data.rtdc +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/calibration_beads_47.rtdc +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/cytoshot_blood.rtdc +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/empty_recording.rtdc +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/ext_feat_anc_plugin_ca.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/extreme_shear.rtdc +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/naiad-capture_blood_pipeline.rtdc +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/version_2_1_0_basic.so2 +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/version_2_1_2_plot_color_emodulus.so2 +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/version_2_1_6_no_events.so2 +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/version_2_5_0_dcor_lme4.so2 +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/version_2_5_0_dcor_lme4_diff.so2 +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/requirements.txt +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_extensions.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_ana_meta.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_basic.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_bulk_emodulus.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_compute_lme4.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_compute_stats.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_emodulus.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_export_data.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_export_filter.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_export_plot.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_filter.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_matrix.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_pipeline_plot.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_quickview.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_reorder_datasets.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_update.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_pipeline_core.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_pipeline_filter_ray.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_session.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_util.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/.gitignore +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/Readme.rst +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export.py +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export.so2 +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_log-large-points-export-png_expected.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_log-large-points-export-svg_expected.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-export-png_expected.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-export-svg_expected.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot1-export-png_expected.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot1-export-svg_expected.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot2-export-png_expected.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot2-export-svg_expected.svg +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-long-title-export-png_expected.png +0 -0
- {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/run-tests.sh +0 -0
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
2.26.2
|
|
2
|
+
- reg: filters not applied in final plots since 2.25.1
|
|
3
|
+
- fix: prevent `pipeline.lock` deadlocks via Qt signal cluttering
|
|
4
|
+
- fix: update axes ranges when "Auto XY-range" is selected in plotting
|
|
5
|
+
- enh: remember plot size when manually resizing
|
|
6
|
+
- enh: increase default disk store size from 2GB to 9GB
|
|
7
|
+
- enh: reduce delay after selecting axes in the Plot view
|
|
8
|
+
- ref: incorporate `PipelinePlot` into sender-receiver signal pyramid
|
|
9
|
+
- setup: bump dclab to 0.71.2 (disk-caching of DCOR/HTTP/S3 data)
|
|
1
10
|
2.26.1
|
|
2
11
|
- fix: possibly fix `KeyError` on hover in QuickView by doing a
|
|
3
12
|
`GraphicsScene.hoverItems.clear()` whenever something changes (#205)
|
|
@@ -52,7 +61,7 @@
|
|
|
52
61
|
- enh: improved presentation of multiple datasets with identical sample names
|
|
53
62
|
- ref: tentative `set_pipeline`, so widgets have direct access to the pipeline
|
|
54
63
|
- ref: raise ValueError in unreachable case in DataSlot creation
|
|
55
|
-
- ref: restructure pipeline management
|
|
64
|
+
- ref: restructure pipeline management with sender-receiver signal pyramid
|
|
56
65
|
- ref: move slot, plot, and filter duplication to `Pipeline` class
|
|
57
66
|
- ref: refer power to Slot/Plot/Filter creation to `Pipeline`
|
|
58
67
|
- setup: bump pyqtgraph to 0.14.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dcscope
|
|
3
|
-
Version: 2.26.
|
|
3
|
+
Version: 2.26.2
|
|
4
4
|
Summary: User interface for deformability cytometry (DC)
|
|
5
5
|
Author: Benedikt Hartmann, Eoghan O'Connell, Maximilian Schlögel, Paul Müller, Raghava Alajangi
|
|
6
6
|
Maintainer-email: Paul Müller <dev@craban.de>
|
|
@@ -16,7 +16,7 @@ Classifier: Intended Audience :: Science/Research
|
|
|
16
16
|
Requires-Python: <4,>=3.9
|
|
17
17
|
Description-Content-Type: text/x-rst
|
|
18
18
|
License-File: LICENSE
|
|
19
|
-
Requires-Dist: dclab[dcor,export,http,s3]>=0.71.
|
|
19
|
+
Requires-Dist: dclab[dcor,export,http,s3]>=0.71.2
|
|
20
20
|
Requires-Dist: h5py>=2.8.0
|
|
21
21
|
Requires-Dist: numpy>=1.21
|
|
22
22
|
Requires-Dist: pygments
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '2.26.
|
|
22
|
-
__version_tuple__ = version_tuple = (2, 26,
|
|
21
|
+
__version__ = version = '2.26.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 26, 2)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'ga09ea9064'
|
|
@@ -211,7 +211,7 @@ class FilterPanel(QtWidgets.QWidget):
|
|
|
211
211
|
with self.pipeline.lock:
|
|
212
212
|
filt_id = self.current_filter.identifier
|
|
213
213
|
new_id = self.pipeline.duplicate_filter(filt_id)
|
|
214
|
-
|
|
214
|
+
self.pp_mod_send.emit({"pipeline": {"filter_added": new_id}})
|
|
215
215
|
|
|
216
216
|
def get_polygon_filter_selection(self):
|
|
217
217
|
"""Return selected polygon filters"""
|
|
@@ -309,7 +309,7 @@ class FilterPanel(QtWidgets.QWidget):
|
|
|
309
309
|
with self.pipeline.lock:
|
|
310
310
|
filt_id = self.current_filter.identifier
|
|
311
311
|
self.pipeline.remove_filter(filt_id)
|
|
312
|
-
|
|
312
|
+
self.pp_mod_send.emit({"pipeline": {"filter_removed": filt_id}})
|
|
313
313
|
|
|
314
314
|
@QtCore.pyqtSlot()
|
|
315
315
|
def on_moreless(self):
|
|
@@ -442,4 +442,4 @@ class FilterPanel(QtWidgets.QWidget):
|
|
|
442
442
|
filt_id = filter_state["identifier"]
|
|
443
443
|
filt_index = self.pipeline.filter_ids.index(filt_id)
|
|
444
444
|
self.pipeline.filters[filt_index].__setstate__(filter_state)
|
|
445
|
-
|
|
445
|
+
self.pp_mod_send.emit({"pipeline": {"filter_modified": filt_id}})
|
|
@@ -276,7 +276,7 @@ class PlotPanel(QtWidgets.QWidget):
|
|
|
276
276
|
else:
|
|
277
277
|
self.setEnabled(True)
|
|
278
278
|
if feat is not None:
|
|
279
|
-
lim = self.pipeline.
|
|
279
|
+
lim = self.pipeline.get_min_max_coarse(
|
|
280
280
|
feat=feat, plot_id=self.current_plot.identifier)
|
|
281
281
|
if not (np.isinf(lim[0]) or np.isinf(lim[1])):
|
|
282
282
|
self.widget_range_feat.setLimits(vmin=lim[0], vmax=lim[1])
|
|
@@ -307,16 +307,19 @@ class PlotPanel(QtWidgets.QWidget):
|
|
|
307
307
|
[self.widget_range_x, self.widget_range_y],
|
|
308
308
|
):
|
|
309
309
|
if axis is not None:
|
|
310
|
-
lim = self.pipeline.
|
|
310
|
+
lim = self.pipeline.get_min_max_coarse(
|
|
311
|
+
feat=axis,
|
|
312
|
+
plot_id=plot_id)
|
|
311
313
|
if not (np.isinf(lim[0]) or np.isinf(lim[1])):
|
|
312
314
|
rc.blockSignals(True)
|
|
313
315
|
rc.setLimits(vmin=lim[0],
|
|
314
316
|
vmax=lim[1])
|
|
315
317
|
if rang is None or rang[0] == rang[1]:
|
|
316
318
|
# default range is limits + 5% margin
|
|
317
|
-
rang = self.pipeline.
|
|
318
|
-
|
|
319
|
-
|
|
319
|
+
rang = self.pipeline.get_min_max_coarse(
|
|
320
|
+
feat=axis,
|
|
321
|
+
plot_id=plot_id,
|
|
322
|
+
margin=0.05)
|
|
320
323
|
rc.write_pipeline_state({"active": True,
|
|
321
324
|
"start": rang[0],
|
|
322
325
|
"end": rang[1],
|
|
@@ -347,12 +350,9 @@ class PlotPanel(QtWidgets.QWidget):
|
|
|
347
350
|
spinBox.setSingleStep(10**(-dec + 1))
|
|
348
351
|
spinBox.setValue(spacing)
|
|
349
352
|
|
|
350
|
-
def
|
|
353
|
+
def _set_kde_spacing_simple(self, axis_x=None, axis_y=None):
|
|
351
354
|
"""automatically estimate and set the KDE spacing
|
|
352
355
|
|
|
353
|
-
- uses :func:`dclab.kde.binning.bin_width_percentile`
|
|
354
|
-
- uses _set_kde_spacing
|
|
355
|
-
|
|
356
356
|
Not to be confused with `on_spacing_auto`!
|
|
357
357
|
"""
|
|
358
358
|
if len(self.pipeline.slots) == 0:
|
|
@@ -361,32 +361,28 @@ class PlotPanel(QtWidgets.QWidget):
|
|
|
361
361
|
return
|
|
362
362
|
else:
|
|
363
363
|
self.setEnabled(True)
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
spacing_x, spacing_y = spacings_xy
|
|
387
|
-
# sets the limits before setting the value
|
|
388
|
-
self._set_kde_spacing(spacing_x=spacing_x,
|
|
389
|
-
spacing_y=spacing_y)
|
|
364
|
+
|
|
365
|
+
spacings_xy = []
|
|
366
|
+
for feat, scaleCombo in zip([axis_x, axis_y],
|
|
367
|
+
[self.comboBox_scale_x,
|
|
368
|
+
self.comboBox_scale_y]):
|
|
369
|
+
if feat is None:
|
|
370
|
+
spacings_xy.append(None)
|
|
371
|
+
else:
|
|
372
|
+
vmin, vmax = self.pipeline.get_min_max_coarse(
|
|
373
|
+
feat=feat,
|
|
374
|
+
plot_id=self.current_plot.identifier)
|
|
375
|
+
|
|
376
|
+
if scaleCombo.currentData() == "log":
|
|
377
|
+
vmin = np.log(vmin)
|
|
378
|
+
vmax = np.log(vmax)
|
|
379
|
+
|
|
380
|
+
spacings_xy.append((vmax-vmin)/300)
|
|
381
|
+
|
|
382
|
+
spacing_x, spacing_y = spacings_xy
|
|
383
|
+
# sets the limits before setting the value
|
|
384
|
+
self._set_kde_spacing(spacing_x=spacing_x,
|
|
385
|
+
spacing_y=spacing_y)
|
|
390
386
|
|
|
391
387
|
@property
|
|
392
388
|
def current_plot(self):
|
|
@@ -432,14 +428,14 @@ class PlotPanel(QtWidgets.QWidget):
|
|
|
432
428
|
gen = self.read_plot_state()["general"]
|
|
433
429
|
if self.sender() == self.comboBox_axis_x:
|
|
434
430
|
self._set_range_xy_state(axis_x=gen["axis x"])
|
|
435
|
-
self.
|
|
431
|
+
self._set_kde_spacing_simple(axis_x=gen["axis x"])
|
|
436
432
|
elif self.sender() == self.comboBox_axis_y:
|
|
437
433
|
self._set_range_xy_state(axis_y=gen["axis y"])
|
|
438
|
-
self.
|
|
434
|
+
self._set_kde_spacing_simple(axis_y=gen["axis y"])
|
|
439
435
|
elif self.sender() == self.comboBox_scale_x:
|
|
440
|
-
self.
|
|
436
|
+
self._set_kde_spacing_simple(axis_x=gen["axis x"])
|
|
441
437
|
elif self.sender() == self.comboBox_scale_y:
|
|
442
|
-
self.
|
|
438
|
+
self._set_kde_spacing_simple(axis_y=gen["axis y"])
|
|
443
439
|
|
|
444
440
|
@QtCore.pyqtSlot()
|
|
445
441
|
def on_column_num_changed(self):
|
|
@@ -500,21 +496,21 @@ class PlotPanel(QtWidgets.QWidget):
|
|
|
500
496
|
with self.pipeline.lock:
|
|
501
497
|
plot_id = self.current_plot.identifier
|
|
502
498
|
new_id = self.pipeline.duplicate_plot(plot_id)
|
|
503
|
-
|
|
499
|
+
self.pp_mod_send.emit({"pipeline": {"plot_created": new_id}})
|
|
504
500
|
|
|
505
501
|
@QtCore.pyqtSlot()
|
|
506
502
|
def on_plot_removed(self):
|
|
507
503
|
with self.pipeline.lock:
|
|
508
504
|
plot_id = self.current_plot.identifier
|
|
509
505
|
self.pipeline.remove_plot(plot_id)
|
|
510
|
-
|
|
506
|
+
self.pp_mod_send.emit({"pipeline": {"plot_removed": plot_id}})
|
|
511
507
|
|
|
512
508
|
@QtCore.pyqtSlot(dict)
|
|
513
509
|
def on_pp_mod_recv(self, data):
|
|
514
510
|
"""We received a signal that something changed"""
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
if
|
|
511
|
+
if self.isVisible():
|
|
512
|
+
pp_dict = data.get("pipeline", {})
|
|
513
|
+
if "plot_added" in pp_dict:
|
|
518
514
|
plot_id = pp_dict.get("plot_added")
|
|
519
515
|
if plot_id is not None:
|
|
520
516
|
plot_index = self.pipeline.plot_ids.index(plot_id)
|
|
@@ -522,6 +518,27 @@ class PlotPanel(QtWidgets.QWidget):
|
|
|
522
518
|
plot_index = None
|
|
523
519
|
self.update_content(plot_index)
|
|
524
520
|
|
|
521
|
+
pr_dict = data.get("pipeline-rendering", {})
|
|
522
|
+
if "plot_size_changed" in pr_dict:
|
|
523
|
+
plot_id = pr_dict.get("plot_size_changed")
|
|
524
|
+
plot_index = self.pipeline.plot_ids.index(plot_id)
|
|
525
|
+
state = self.pipeline.plots[plot_index].__getstate__()
|
|
526
|
+
self.spinBox_size_x.setValue(state["layout"]["size x"])
|
|
527
|
+
self.spinBox_size_y.setValue(state["layout"]["size y"])
|
|
528
|
+
elif "plot_range_corrected" in pr_dict:
|
|
529
|
+
plot_id = pr_dict.get("plot_range_corrected")
|
|
530
|
+
plot_index = self.pipeline.plot_ids.index(plot_id)
|
|
531
|
+
state = self.pipeline.plots[plot_index].__getstate__()
|
|
532
|
+
for nm, rc in [("range x", self.widget_range_x),
|
|
533
|
+
("range y", self.widget_range_y)]:
|
|
534
|
+
rc.blockSignals(True)
|
|
535
|
+
rc.write_pipeline_state({
|
|
536
|
+
"active": True,
|
|
537
|
+
"start": state["general"][nm][0],
|
|
538
|
+
"end": state["general"][nm][1],
|
|
539
|
+
})
|
|
540
|
+
rc.blockSignals(False)
|
|
541
|
+
|
|
525
542
|
@QtCore.pyqtSlot()
|
|
526
543
|
@show_wait_cursor
|
|
527
544
|
def on_spacing_auto(self):
|
|
@@ -639,4 +656,4 @@ class PlotPanel(QtWidgets.QWidget):
|
|
|
639
656
|
plot_id = plot_state["identifier"]
|
|
640
657
|
plot_index = self.pipeline.plot_ids.index(plot_id)
|
|
641
658
|
self.pipeline.plots[plot_index].__setstate__(plot_state)
|
|
642
|
-
|
|
659
|
+
self.pp_mod_send.emit({"pipeline": {"plot_changed": plot_id}})
|
|
@@ -301,7 +301,14 @@
|
|
|
301
301
|
<item row="4" column="1">
|
|
302
302
|
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
|
303
303
|
<item>
|
|
304
|
-
<widget class="FeatureComboBox" name="comboBox_axis_y"
|
|
304
|
+
<widget class="FeatureComboBox" name="comboBox_axis_y">
|
|
305
|
+
<property name="sizePolicy">
|
|
306
|
+
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
|
307
|
+
<horstretch>0</horstretch>
|
|
308
|
+
<verstretch>0</verstretch>
|
|
309
|
+
</sizepolicy>
|
|
310
|
+
</property>
|
|
311
|
+
</widget>
|
|
305
312
|
</item>
|
|
306
313
|
<item>
|
|
307
314
|
<widget class="QComboBox" name="comboBox_scale_y">
|
|
@@ -345,7 +345,7 @@ class SlotPanel(QtWidgets.QWidget):
|
|
|
345
345
|
new_id = self.pipeline.add_slot(path=slot_state["path"],
|
|
346
346
|
index=pos + 1,
|
|
347
347
|
)
|
|
348
|
-
|
|
348
|
+
self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
|
|
349
349
|
|
|
350
350
|
@QtCore.pyqtSlot()
|
|
351
351
|
def on_duplicate_slot(self):
|
|
@@ -353,7 +353,7 @@ class SlotPanel(QtWidgets.QWidget):
|
|
|
353
353
|
# determine the new filter state
|
|
354
354
|
slot_state = self.read_pipeline_state()
|
|
355
355
|
new_id = self.pipeline.duplicate_slot(slot_state["identifier"])
|
|
356
|
-
|
|
356
|
+
self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
|
|
357
357
|
|
|
358
358
|
@QtCore.pyqtSlot(dict)
|
|
359
359
|
def on_pp_mod_recv(self, data):
|
|
@@ -368,7 +368,7 @@ class SlotPanel(QtWidgets.QWidget):
|
|
|
368
368
|
slot_state = self.read_pipeline_state()
|
|
369
369
|
slot_id = slot_state["identifier"]
|
|
370
370
|
self.pipeline.remove_slot(slot_id)
|
|
371
|
-
|
|
371
|
+
self.pp_mod_send.emit({"pipeline": {"slot_created": slot_id}})
|
|
372
372
|
|
|
373
373
|
@QtCore.pyqtSlot()
|
|
374
374
|
def on_reorder_slots(self):
|
|
@@ -505,4 +505,4 @@ class SlotPanel(QtWidgets.QWidget):
|
|
|
505
505
|
slot_id = slot_state["identifier"]
|
|
506
506
|
slot_index = self.pipeline.slot_ids.index(slot_id)
|
|
507
507
|
self.pipeline.slots[slot_index].__setstate__(slot_state)
|
|
508
|
-
|
|
508
|
+
self.pp_mod_send.emit({"pipeline": {"slot_changed": slot_id}})
|
|
@@ -36,8 +36,7 @@ class DlgSlotReorder(QtWidgets.QDialog):
|
|
|
36
36
|
# reorder pipeline and send pipeline_changed signal
|
|
37
37
|
with self.pipeline.lock:
|
|
38
38
|
self.pipeline.reorder_slots(indices)
|
|
39
|
-
|
|
40
|
-
{"pipeline": {"slot_order_changed": indices}})
|
|
39
|
+
self.pp_mod_send.emit({"pipeline": {"slot_order_changed": indices}})
|
|
41
40
|
|
|
42
41
|
@QtCore.pyqtSlot()
|
|
43
42
|
def on_move_item(self):
|
|
@@ -86,8 +86,7 @@ class BulkActionEmodulus(QtWidgets.QDialog):
|
|
|
86
86
|
def on_ok(self):
|
|
87
87
|
with self.pipeline.lock:
|
|
88
88
|
self.set_emodulus_properties()
|
|
89
|
-
|
|
90
|
-
{"pipeline": {"feature_changed": "emodulus"}})
|
|
89
|
+
self.pp_mod_send.emit({"pipeline": {"feature_changed": "emodulus"}})
|
|
91
90
|
|
|
92
91
|
@QtCore.pyqtSlot()
|
|
93
92
|
def on_cb_medium(self):
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
def connect_pp_mod_signals(parent, child):
|
|
2
|
+
"""The sender-receiver signal pyramid
|
|
3
|
+
|
|
4
|
+
Each widget that implements the `pp_mod_send` and `pp_mod_recv`
|
|
5
|
+
may be part of the sender-receiver pipeline modifications pyramid.
|
|
6
|
+
The tip of the pyramid is the main class.
|
|
7
|
+
When a widget changes something about the pipeline, it sends a dictionary
|
|
8
|
+
through the `pp_mod_send` signal up the pyramid. At the top of the
|
|
9
|
+
pyramid this signal is connected to the `pp_mod_recv` side of the
|
|
10
|
+
pyramid.
|
|
11
|
+
Every widget can send and receive any kind of pipeline change.
|
|
12
|
+
Receiving widgets are responsible for filtering out what they need.
|
|
13
|
+
This approach makes it easy to synchronize widgets.
|
|
14
|
+
"""
|
|
15
|
+
parent.pp_mod_recv.connect(child.pp_mod_recv)
|
|
16
|
+
child.pp_mod_send.connect(parent.pp_mod_send)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def disconnect_pp_mod_signals(parent, child):
|
|
20
|
+
"""The sender-receiver signal pyramid
|
|
21
|
+
|
|
22
|
+
Each widget that implements the `pp_mod_send` and `pp_mod_recv`
|
|
23
|
+
may be part of the sender-receiver pipeline modifications pyramid.
|
|
24
|
+
The tip of the pyramid is the main class.
|
|
25
|
+
When a widget changes something about the pipeline, it sends a dictionary
|
|
26
|
+
through the `pp_mod_send` signal up the pyramid. At the top of the
|
|
27
|
+
pyramid this signal is connected to the `pp_mod_recv` side of the
|
|
28
|
+
pyramid.
|
|
29
|
+
Every widget can send and receive any kind of pipeline change.
|
|
30
|
+
Receiving widgets are responsible for filtering out what they need.
|
|
31
|
+
This approach makes it easy to synchronize widgets.
|
|
32
|
+
"""
|
|
33
|
+
parent.pp_mod_recv.disconnect(child.pp_mod_recv)
|
|
34
|
+
child.pp_mod_send.disconnect(parent.pp_mod_send)
|
|
@@ -35,7 +35,7 @@ from . import (
|
|
|
35
35
|
update,
|
|
36
36
|
widgets,
|
|
37
37
|
)
|
|
38
|
-
from .helpers import connect_pp_mod_signals
|
|
38
|
+
from .helpers import connect_pp_mod_signals, disconnect_pp_mod_signals
|
|
39
39
|
|
|
40
40
|
# global plotting configuration parameters
|
|
41
41
|
pg.setConfigOption("background", None)
|
|
@@ -57,7 +57,6 @@ logger = logging.getLogger(__name__)
|
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
class DCscope(QtWidgets.QMainWindow):
|
|
60
|
-
plots_changed = QtCore.pyqtSignal()
|
|
61
60
|
# widgets emit these whenever they changed the pipeline
|
|
62
61
|
pp_mod_send = QtCore.pyqtSignal(dict)
|
|
63
62
|
# widgets receive these so they can reflect the pipeline changes
|
|
@@ -134,7 +133,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
134
133
|
store_keeper.set_interval(
|
|
135
134
|
int(self.settings.value("cache/write interval", "30")))
|
|
136
135
|
store_keeper.set_disk_store_size_bytes(int(float(
|
|
137
|
-
self.settings.value("cache/disk store size", "
|
|
136
|
+
self.settings.value("cache/disk store size", "9")) * 1000**3))
|
|
138
137
|
store_keeper.set_memory_store_size(
|
|
139
138
|
int(self.settings.value("cache/memory num", "200")))
|
|
140
139
|
|
|
@@ -384,7 +383,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
384
383
|
pw = pipeline_plot.PipelinePlot(parent=sub,
|
|
385
384
|
pipeline=self.pipeline,
|
|
386
385
|
plot_id=plot_id)
|
|
387
|
-
self
|
|
386
|
+
connect_pp_mod_signals(self, pw)
|
|
388
387
|
sub.setWidget(pw)
|
|
389
388
|
pw.update_content()
|
|
390
389
|
self.mdiArea.addSubWindow(sub)
|
|
@@ -555,7 +554,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
555
554
|
if yes:
|
|
556
555
|
with self.pipeline.lock:
|
|
557
556
|
session.clear_session(self.pipeline)
|
|
558
|
-
|
|
557
|
+
self.pp_mod_send.emit({"pipeline": {"cleared": "full"}})
|
|
559
558
|
self.setWindowTitle(f"DCscope {version}")
|
|
560
559
|
return yes
|
|
561
560
|
|
|
@@ -576,8 +575,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
576
575
|
slot_ids = list(self.pipeline.slot_ids)
|
|
577
576
|
for slot_id in slot_ids:
|
|
578
577
|
self.pipeline.remove_slot(slot_id)
|
|
579
|
-
|
|
580
|
-
{"pipeline": {"slots_removed": slot_ids}})
|
|
578
|
+
self.pp_mod_send.emit({"pipeline": {"slots_removed": slot_ids}})
|
|
581
579
|
return yes
|
|
582
580
|
|
|
583
581
|
@QtCore.pyqtSlot()
|
|
@@ -694,8 +692,8 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
694
692
|
settings.set_dir("filters", path, self.settings)
|
|
695
693
|
with self.pipeline.lock:
|
|
696
694
|
session.import_filters(path, self.pipeline)
|
|
697
|
-
|
|
698
|
-
|
|
695
|
+
self.pp_mod_send.emit(
|
|
696
|
+
{"pipeline": {"filters_imported": str(path)}})
|
|
699
697
|
|
|
700
698
|
@QtCore.pyqtSlot()
|
|
701
699
|
def on_action_open(self, path=None):
|
|
@@ -740,8 +738,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
740
738
|
else:
|
|
741
739
|
break
|
|
742
740
|
self.show()
|
|
743
|
-
|
|
744
|
-
{"pipeline": {"session_opened": str(path)}})
|
|
741
|
+
self.pp_mod_send.emit({"pipeline": {"session_opened": str(path)}})
|
|
745
742
|
self.setWindowTitle(
|
|
746
743
|
f"{pathlib.Path(path).name} [DCscope {version}]")
|
|
747
744
|
|
|
@@ -921,7 +918,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
921
918
|
for child in sub.children():
|
|
922
919
|
# disconnect signals
|
|
923
920
|
if isinstance(child, pipeline_plot.PipelinePlot):
|
|
924
|
-
self
|
|
921
|
+
disconnect_pp_mod_signals(self, child)
|
|
925
922
|
break
|
|
926
923
|
sub.deleteLater()
|
|
927
924
|
|
|
@@ -945,11 +942,6 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
945
942
|
QtWidgets.QApplication.processEvents(
|
|
946
943
|
QtCore.QEventLoop.ProcessEventsFlag.AllEvents, 300)
|
|
947
944
|
|
|
948
|
-
if data.get("pipeline"):
|
|
949
|
-
# Update plots after updating block matrix
|
|
950
|
-
with widgets.ShowWaitCursor():
|
|
951
|
-
self.plots_changed.emit()
|
|
952
|
-
|
|
953
945
|
# redraw
|
|
954
946
|
self.mdiArea.update()
|
|
955
947
|
self.subwindows["analysis_view"].update()
|
|
@@ -80,20 +80,20 @@ class MatrixDataset(QtWidgets.QWidget):
|
|
|
80
80
|
with self.pipeline.lock:
|
|
81
81
|
slot_id = self.pipeline.slot_ids[self.slot_index]
|
|
82
82
|
new_id = self.pipeline.duplicate_slot(slot_id)
|
|
83
|
-
|
|
83
|
+
self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
|
|
84
84
|
|
|
85
85
|
def action_insert_anew(self):
|
|
86
86
|
with self.pipeline.lock:
|
|
87
87
|
new_id = self.pipeline.add_slot(
|
|
88
88
|
path=self.path,
|
|
89
89
|
index=self.slot_index+1)
|
|
90
|
-
|
|
90
|
+
self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
|
|
91
91
|
|
|
92
92
|
def action_remove(self):
|
|
93
93
|
with self.pipeline.lock:
|
|
94
94
|
slot_id = self.pipeline.slot_ids[self.slot_index]
|
|
95
95
|
self.pipeline.remove_slot(slot_id)
|
|
96
|
-
|
|
96
|
+
self.pp_mod_send.emit({"pipeline": {"slot_removed": slot_id}})
|
|
97
97
|
|
|
98
98
|
@QtCore.pyqtSlot()
|
|
99
99
|
def on_active_toggled(self):
|
|
@@ -115,13 +115,13 @@ class MatrixDataset(QtWidgets.QWidget):
|
|
|
115
115
|
active=self.active
|
|
116
116
|
)
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
self.pp_mod_send.emit({"pipeline": {"slot_toggled": slot_id}})
|
|
119
119
|
|
|
120
120
|
def on_enabled_toggled(self, b):
|
|
121
121
|
with self.pipeline.lock:
|
|
122
122
|
self.pipeline.slots[self.slot_index].slot_used = b
|
|
123
123
|
state = "enabled" if b else "disabled"
|
|
124
|
-
|
|
124
|
+
self.pp_mod_send.emit({"pipeline": {f"slot {state}": b}})
|
|
125
125
|
|
|
126
126
|
def on_modify(self):
|
|
127
127
|
self.modify_clicked.emit(self.identifier)
|
|
@@ -32,6 +32,9 @@
|
|
|
32
32
|
<property name="spacing">
|
|
33
33
|
<number>0</number>
|
|
34
34
|
</property>
|
|
35
|
+
<property name="sizeConstraint">
|
|
36
|
+
<enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
|
|
37
|
+
</property>
|
|
35
38
|
<property name="leftMargin">
|
|
36
39
|
<number>0</number>
|
|
37
40
|
</property>
|
|
@@ -150,6 +153,36 @@
|
|
|
150
153
|
</item>
|
|
151
154
|
</layout>
|
|
152
155
|
</item>
|
|
156
|
+
<item>
|
|
157
|
+
<widget class="QToolButton" name="toolButton_modify">
|
|
158
|
+
<property name="sizePolicy">
|
|
159
|
+
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
|
160
|
+
<horstretch>0</horstretch>
|
|
161
|
+
<verstretch>0</verstretch>
|
|
162
|
+
</sizepolicy>
|
|
163
|
+
</property>
|
|
164
|
+
<property name="font">
|
|
165
|
+
<font>
|
|
166
|
+
<pointsize>9</pointsize>
|
|
167
|
+
</font>
|
|
168
|
+
</property>
|
|
169
|
+
<property name="toolTip">
|
|
170
|
+
<string>Modify this dataset in Analysis View</string>
|
|
171
|
+
</property>
|
|
172
|
+
<property name="text">
|
|
173
|
+
<string>edit</string>
|
|
174
|
+
</property>
|
|
175
|
+
<property name="icon">
|
|
176
|
+
<iconset theme="tools-wizard"/>
|
|
177
|
+
</property>
|
|
178
|
+
<property name="toolButtonStyle">
|
|
179
|
+
<enum>Qt::ToolButtonStyle::ToolButtonTextBesideIcon</enum>
|
|
180
|
+
</property>
|
|
181
|
+
<property name="autoRaise">
|
|
182
|
+
<bool>true</bool>
|
|
183
|
+
</property>
|
|
184
|
+
</widget>
|
|
185
|
+
</item>
|
|
153
186
|
<item>
|
|
154
187
|
<widget class="Line" name="line">
|
|
155
188
|
<property name="styleSheet">
|
|
@@ -166,52 +199,6 @@
|
|
|
166
199
|
</property>
|
|
167
200
|
</widget>
|
|
168
201
|
</item>
|
|
169
|
-
<item>
|
|
170
|
-
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
|
171
|
-
<property name="leftMargin">
|
|
172
|
-
<number>0</number>
|
|
173
|
-
</property>
|
|
174
|
-
<property name="topMargin">
|
|
175
|
-
<number>0</number>
|
|
176
|
-
</property>
|
|
177
|
-
<property name="rightMargin">
|
|
178
|
-
<number>0</number>
|
|
179
|
-
</property>
|
|
180
|
-
<property name="bottomMargin">
|
|
181
|
-
<number>0</number>
|
|
182
|
-
</property>
|
|
183
|
-
<item alignment="Qt::AlignmentFlag::AlignLeft">
|
|
184
|
-
<widget class="QToolButton" name="toolButton_modify">
|
|
185
|
-
<property name="sizePolicy">
|
|
186
|
-
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
|
187
|
-
<horstretch>0</horstretch>
|
|
188
|
-
<verstretch>0</verstretch>
|
|
189
|
-
</sizepolicy>
|
|
190
|
-
</property>
|
|
191
|
-
<property name="font">
|
|
192
|
-
<font>
|
|
193
|
-
<pointsize>9</pointsize>
|
|
194
|
-
</font>
|
|
195
|
-
</property>
|
|
196
|
-
<property name="toolTip">
|
|
197
|
-
<string>Modify this dataset in Analysis View</string>
|
|
198
|
-
</property>
|
|
199
|
-
<property name="text">
|
|
200
|
-
<string>edit</string>
|
|
201
|
-
</property>
|
|
202
|
-
<property name="icon">
|
|
203
|
-
<iconset theme="tools-wizard"/>
|
|
204
|
-
</property>
|
|
205
|
-
<property name="toolButtonStyle">
|
|
206
|
-
<enum>Qt::ToolButtonStyle::ToolButtonTextBesideIcon</enum>
|
|
207
|
-
</property>
|
|
208
|
-
<property name="autoRaise">
|
|
209
|
-
<bool>true</bool>
|
|
210
|
-
</property>
|
|
211
|
-
</widget>
|
|
212
|
-
</item>
|
|
213
|
-
</layout>
|
|
214
|
-
</item>
|
|
215
202
|
<item>
|
|
216
203
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
217
204
|
<property name="spacing">
|
|
@@ -51,8 +51,8 @@ class DataMatrixElement(QtWidgets.QWidget):
|
|
|
51
51
|
self.pipeline.set_element_active(slot_id,
|
|
52
52
|
filter_id,
|
|
53
53
|
not self.active)
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
self.pp_mod_send.emit(
|
|
55
|
+
{"pipeline": {"filter_ray_change": slot_id}})
|
|
56
56
|
|
|
57
57
|
event.accept()
|
|
58
58
|
|
|
@@ -31,6 +31,11 @@ class MatrixFilter(QtWidgets.QWidget):
|
|
|
31
31
|
menu.addAction('remove', self.action_remove)
|
|
32
32
|
self.toolButton_opt.setMenu(menu)
|
|
33
33
|
|
|
34
|
+
self.setFixedWidth(int(65))
|
|
35
|
+
self.setMinimumWidth(int(65))
|
|
36
|
+
self.setMaximumWidth(int(65))
|
|
37
|
+
self.adjustSize()
|
|
38
|
+
|
|
34
39
|
# toggle all active, all inactive, semi state
|
|
35
40
|
self.toolButton_toggle.clicked.connect(self.on_active_toggled)
|
|
36
41
|
|
|
@@ -81,7 +86,7 @@ class MatrixFilter(QtWidgets.QWidget):
|
|
|
81
86
|
filt_plot_id=filter_id,
|
|
82
87
|
active=self.active
|
|
83
88
|
)
|
|
84
|
-
|
|
89
|
+
self.pp_mod_send.emit({"pipeline": {"filter_toggled": filter_id}})
|
|
85
90
|
|
|
86
91
|
@QtCore.pyqtSlot(dict)
|
|
87
92
|
def on_pp_mod_recv(self, data: dict):
|
|
@@ -116,19 +121,19 @@ class MatrixFilter(QtWidgets.QWidget):
|
|
|
116
121
|
with self.pipeline.lock:
|
|
117
122
|
filt_id = self.pipeline.filter_ids[self.filt_index]
|
|
118
123
|
new_id = self.pipeline.duplicate_filter(filt_id)
|
|
119
|
-
|
|
124
|
+
self.pp_mod_send.emit({"pipeline": {"filter_added": new_id}})
|
|
120
125
|
|
|
121
126
|
def action_remove(self):
|
|
122
127
|
with self.pipeline.lock:
|
|
123
128
|
filter_id = self.pipeline.filter_ids[self.filt_index]
|
|
124
129
|
self.pipeline.remove_filter(filter_id)
|
|
125
|
-
|
|
130
|
+
self.pp_mod_send.emit({"pipeline": {"filter_removed": filter_id}})
|
|
126
131
|
|
|
127
132
|
def on_enabled_toggled(self, b):
|
|
128
133
|
with self.pipeline.lock:
|
|
129
134
|
self.pipeline.filters[self.filt_index].filter_used = b
|
|
130
135
|
state = "enabled" if b else "disabled"
|
|
131
|
-
|
|
136
|
+
self.pp_mod_send.emit({"pipeline": {f"filter {state}": b}})
|
|
132
137
|
|
|
133
138
|
def on_modify(self):
|
|
134
139
|
self.modify_clicked.emit(self.identifier)
|