dcscope 2.25.4__tar.gz → 2.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.
- {dcscope-2.25.4 → dcscope-2.26.0}/CHANGELOG +8 -0
- {dcscope-2.25.4/dcscope.egg-info → dcscope-2.26.0}/PKG-INFO +2 -2
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/_version.py +3 -3
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_filter.py +122 -29
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_filter.ui +95 -51
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/main.py +47 -2
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/pipeline_plot.py +3 -3
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/quick_view/qv_main.py +8 -8
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/quick_view/qv_main.ui +7 -7
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/quick_view/qv_scatter.py +2 -2
- dcscope-2.26.0/dcscope/plotting.py +45 -0
- {dcscope-2.25.4 → dcscope-2.26.0/dcscope.egg-info}/PKG-INFO +2 -2
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope.egg-info/SOURCES.txt +2 -1
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope.egg-info/requires.txt +1 -1
- dcscope-2.26.0/docs/scrots/Readme.md +11 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/make_scrots_qg_emodulus.py +0 -1
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/make_scrots_qg_export.py +0 -1
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/make_scrots_qg_statistics.py +0 -2
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/make_scrots_ui.py +5 -9
- dcscope-2.26.0/docs/scrots/qg_export_data.png +0 -0
- dcscope-2.26.0/docs/scrots/qg_lme4_diff_init.png +0 -0
- dcscope-2.26.0/docs/scrots/qg_lme4_diff_results.png +0 -0
- dcscope-2.26.0/docs/scrots/qg_lme4_init.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/qg_lme4_results.png +0 -0
- dcscope-2.26.0/docs/scrots/qg_statistics_folder.png +0 -0
- dcscope-2.26.0/docs/scrots/qg_statistics_init.png +0 -0
- dcscope-2.26.0/docs/scrots/scrots.so2 +0 -0
- dcscope-2.26.0/docs/scrots/ui_ana_basins.png +0 -0
- dcscope-2.26.0/docs/scrots/ui_ana_filter.png +0 -0
- dcscope-2.26.0/docs/scrots/ui_ana_logs.png +0 -0
- dcscope-2.26.0/docs/scrots/ui_ana_meta.png +0 -0
- dcscope-2.26.0/docs/scrots/ui_ana_plot.png +0 -0
- dcscope-2.26.0/docs/scrots/ui_ana_slot.png +0 -0
- dcscope-2.26.0/docs/scrots/ui_ana_tables.png +0 -0
- dcscope-2.26.0/docs/scrots/ui_main.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/pyproject.toml +1 -1
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_export_filter.py +12 -6
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_filter.py +8 -4
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_quickview.py +11 -15
- dcscope-2.25.4/dcscope/plot_cache.py +0 -79
- dcscope-2.25.4/docs/scrots/qg_export_data.png +0 -0
- dcscope-2.25.4/docs/scrots/qg_lme4_diff_init.png +0 -0
- dcscope-2.25.4/docs/scrots/qg_lme4_diff_results.png +0 -0
- dcscope-2.25.4/docs/scrots/qg_lme4_init.png +0 -0
- dcscope-2.25.4/docs/scrots/qg_statistics_folder.png +0 -0
- dcscope-2.25.4/docs/scrots/qg_statistics_init.png +0 -0
- dcscope-2.25.4/docs/scrots/scrots.so2 +0 -0
- dcscope-2.25.4/docs/scrots/ui_ana_basins.png +0 -0
- dcscope-2.25.4/docs/scrots/ui_ana_filter.png +0 -0
- dcscope-2.25.4/docs/scrots/ui_ana_logs.png +0 -0
- dcscope-2.25.4/docs/scrots/ui_ana_meta.png +0 -0
- dcscope-2.25.4/docs/scrots/ui_ana_plot.png +0 -0
- dcscope-2.25.4/docs/scrots/ui_ana_slot.png +0 -0
- dcscope-2.25.4/docs/scrots/ui_ana_tables.png +0 -0
- dcscope-2.25.4/docs/scrots/ui_main.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/.github/workflows/check.yml +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/.github/workflows/deploy_github.yml +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/.github/workflows/deploy_pypi.yml +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/.gitignore +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/.readthedocs.yml +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/LICENSE +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/MANIFEST.in +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/README.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/DCscope.icns +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/DCscope.ico +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/DCscopeLauncher.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/Readme.md +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/hook-dcscope.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/macos_DCscope.spec +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/macos_build_app.sh +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/macos_build_requirements.txt +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/win_DCscope.spec +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/win_build_requirements.txt +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/win_dcscope.iss_dummy +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/build-recipes/win_make_iss.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/__main__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/extensions.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_basins.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_basins.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_log.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_log.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_meta.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_meta.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_plot.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_plot.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_slot.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_slot.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_tables.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_tables.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_view.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/ana_view.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/dlg_slot_reorder.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/analysis/dlg_slot_reorder.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/bulk/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/bulk/bulk_emodulus.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/bulk/bulk_emodulus.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/compute/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/compute/comp_lme4.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/compute/comp_lme4.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/compute/comp_lme4_dataset.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/compute/comp_lme4_dataset.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/compute/comp_lme4_results.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/compute/comp_lme4_results.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/compute/comp_stats.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/compute/comp_stats.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/dcor/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/dcor/dcor.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/export/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/export/e2data.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/export/e2data.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/export/e2filter.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/export/e2filter.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/export/e2plot.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/export/e2plot.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/helpers.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/main.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/Readme.md +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/block_matrix.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/block_matrix.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/data_matrix.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/dm_dataset.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/dm_dataset.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/dm_element.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/dm_element.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/dm_filter.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/dm_filter.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/plot_matrix.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/pm_element.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/pm_plot.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/matrix/pm_plot.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/pipeline_plot.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/preferences.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/preferences.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/quick_view/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/quick_view/qv_style.css +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/settings.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/update.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/bg_thread.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/bulk_list.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/bulk_list.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/double_spin_box_nan.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/feature_combobox.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/get_path.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/key_value_table_widget.css +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/key_value_table_widget.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/mdi_subwindow_wo_close.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/qrangeslider.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/rangecontrol.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/rangecontrol.ui +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/simple_image_view.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/simple_plot_widget.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/so_colorbaritem.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/gui/widgets/wait_cursor.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/idiom.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/COPYING-ICONS +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/COPYING.LIB +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/README +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/application-exit.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/code-context.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/dialog-cancel.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/dialog-close.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/dialog-messages.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok-apply.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/document-open-folder.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/document-open.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/document-save.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/documentinfo.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/draw-watercolor.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/edit-clear-all.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/edit-clear.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/edit-paste.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/globe.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/gtk-preferences.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/list-add.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/messagebox_warning.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/object-columns.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/object-order-lower.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/object-rows.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/office-chart-line-stacked.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/office-chart-ring.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/office-chart-scatter.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/path-mode-polyline.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/preferences-activities.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/remove.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/search.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/show-grid.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/special_paste.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/tools-wizard.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/view-calendar-list.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/view-filter.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/view-list-tree.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/view-statistics.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/16/visibility.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/application-exit.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/code-context.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/dialog-cancel.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/dialog-close.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/dialog-messages.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok-apply.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/document-open-folder.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/document-open.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/document-save.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/documentinfo.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/draw-watercolor.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/edit-clear-all.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/edit-clear.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/edit-paste.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/globe.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/gtk-preferences.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/list-add.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/messagebox_warning.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/object-columns.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/object-order-lower.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/object-rows.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/office-chart-line-stacked.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/office-chart-ring.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/office-chart-scatter.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/path-mode-polyline.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/preferences-activities.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/remove.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/special_paste.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/tools-wizard.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/view-calendar-list.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/view-filter.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/view-list-tree.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/view-statistics.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/22/visibility.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/application-exit.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/code-context.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/dialog-cancel.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/dialog-close.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/dialog-messages.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok-apply.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/document-open-folder.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/document-open.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/document-save.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/documentinfo.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/draw-watercolor.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/edit-clear-all.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/edit-clear.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/edit-paste.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/globe.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/gtk-preferences.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/list-add.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/messagebox_warning.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/object-columns.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/object-order-lower.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/object-rows.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/office-chart-line-stacked.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/office-chart-ring.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/office-chart-scatter.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/path-mode-polyline.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/preferences-activities.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/remove.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/special_paste.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/tools-wizard.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/view-calendar-list.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/view-filter.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/view-list-tree.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/view-statistics.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/24/visibility.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/application-exit.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/dialog-cancel.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/dialog-messages.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok-apply.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/document-open-folder.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/document-open.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/document-save.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/gtk-preferences.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/object-order-lower.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/view-filter.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/actions/32/view-list-tree.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/places/16/folder-cloud.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/places/16/folder.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/places/22/folder-cloud.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/places/22/folder.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/places/24/folder-cloud.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/places/24/folder.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/places/32/folder-cloud.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/places/32/folder.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/places/64/folder-cloud.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/places/64/folder.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/16/dialog-error.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/16/dialog-information.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/16/dialog-question.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/16/dialog-warning.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/22/dialog-error.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/22/dialog-information.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/22/dialog-question.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/22/dialog-warning.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/24/dialog-error.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/24/dialog-information.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/24/dialog-question.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/24/dialog-warning.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/64/dialog-error.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/64/dialog-information.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/64/dialog-question.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/breeze/status/64/dialog-warning.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/collect_icons.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/dcscope/dcor.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/dcscope/edit-copy-anew.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/dcscope/emodulus.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/dcscope/filter_ray.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/dcscope/region_channel.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/dcscope/region_reservoir.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/dcscope/rlang.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/dcscope/statistical_significance.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon-theme/index.theme +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/icon.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/img/splash.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/meta_tool.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/pipeline/__init__.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/pipeline/core.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/pipeline/dataslot.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/pipeline/filter.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/pipeline/filter_ray.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/pipeline/plot.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/session.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope/util.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope.egg-info/dependency_links.txt +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope.egg-info/entry_points.txt +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/dcscope.egg-info/top_level.txt +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/README.md +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/artwork/Readme.md +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/artwork/dcscope_icon.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/artwork/dcscope_large_white.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/artwork/dcscope_large_white.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/artwork/dcscope_splash.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/artwork/favicon.ico +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/artwork/favicon.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/conf.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/data/extension_fl1_density.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/dcscope.bib +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/extensions/fancy_include.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/extensions/github_changelog.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/extensions/rtd_pdf.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/ATTRIBUTION +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/area.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/aspect.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/brightness.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/deform.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/deform.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/fluorescence.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/fluorescence.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/inert_ratio.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/inert_ratio.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_countrate.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_countrate.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_filter_area.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_filter_area.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_filter_porosity.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_filter_porosity.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_filter_ratios.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_filter_ratios.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_time.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_time.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_youngs_modulus.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_youngs_modulus_15um.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_youngs_modulus_20um.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_youngs_modulus_30um.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/qg_youngs_modulus_40um.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/rtdc-setup.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/volume.jpg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/figures/volume.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/index.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/requirements.txt +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/.gitignore +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/CD66+_CD14-.poly +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/make_scrots.sh +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/make_scrots_qg_dcor.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/make_scrots_qg_extensions.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/make_scrots_qg_lme4.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/make_scrots_qg_lme4_diff.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/qg_dcor_dlg.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/qg_emodulus_badtemp.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/qg_emodulus_config.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/qg_emodulus_feature.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/qg_emodulus_other.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/qg_extensions.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/ui_block_matrix.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/ui_qv_event.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/ui_qv_poly.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/scrots/ui_qv_settings.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_changelog.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_devs.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_getting_started.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_imprint.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_interface.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_qg_batch_stats.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_qg_consistency_check.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_qg_dcor.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_qg_export_data.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_qg_extensions.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_qg_filtering.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_qg_lme4.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_qg_youngs_modulus.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_quick_guides.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_rtdc_basics.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/docs/sec_z_bib.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/setup.cfg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/README.md +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/conftest.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/artificial_with_image_bg.rtdc +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/blood_rbc_leukocytes.rtdc +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/blood_rbc_qpi_data.rtdc +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/calibration_beads_47.rtdc +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/cytoshot_blood.rtdc +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/empty_recording.rtdc +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/ext_feat_anc_plugin_ca.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/extreme_shear.rtdc +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/naiad-capture_blood_pipeline.rtdc +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/version_2_1_0_basic.so2 +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/version_2_1_2_plot_color_emodulus.so2 +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/version_2_1_6_no_events.so2 +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/version_2_5_0_dcor_lme4.so2 +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/data/version_2_5_0_dcor_lme4_diff.so2 +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/requirements.txt +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_extensions.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_ana_meta.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_basic.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_bulk_emodulus.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_compute_lme4.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_compute_stats.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_emodulus.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_export_data.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_export_plot.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_matrix.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_pipeline_plot.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_plotting.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_reorder_datasets.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_gui_update.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_pipeline_core.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_pipeline_filter_ray.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_session.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests/test_util.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/.gitignore +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/Readme.rst +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/plot-export.py +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/plot-export.so2 +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/plot-export_log-large-points-export-png_expected.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/plot-export_log-large-points-export-svg_expected.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/plot-export_scatter-and-contour-export-png_expected.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/plot-export_scatter-and-contour-export-svg_expected.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/plot-export_scatter-and-contour-subplot1-export-png_expected.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/plot-export_scatter-and-contour-subplot1-export-svg_expected.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/plot-export_scatter-and-contour-subplot2-export-png_expected.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/plot-export_scatter-and-contour-subplot2-export-svg_expected.svg +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/plot-export_scatter-long-title-export-png_expected.png +0 -0
- {dcscope-2.25.4 → dcscope-2.26.0}/tests-manual/run-tests.sh +0 -0
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
2.26.0
|
|
2
|
+
- feat: edit, duplicate and remove polygon filters in the "Filter" view
|
|
3
|
+
- fix: override-check in filter export did not work
|
|
4
|
+
- enh: enable disk caching for kernel density estimate data
|
|
5
|
+
- enh: bring windows to front when requesting controls via Block Matrix
|
|
6
|
+
- docs: update screenshots
|
|
7
|
+
- ref: disable caching for plots (fully done in dclab)
|
|
8
|
+
- setup: bump dclab to 0.69.2 (KDE caching, polygon filter stability)
|
|
1
9
|
2.25.4
|
|
2
10
|
- setup: bump dclab to 0.68.0 (open SWMR files in read mode)
|
|
3
11
|
2.25.3
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dcscope
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.26.0
|
|
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.
|
|
19
|
+
Requires-Dist: dclab[dcor,export,http,s3]>=0.69.2
|
|
20
20
|
Requires-Dist: h5py>=2.8.0
|
|
21
21
|
Requires-Dist: numpy>=1.21
|
|
22
22
|
Requires-Dist: pygments
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '2.
|
|
32
|
-
__version_tuple__ = version_tuple = (2,
|
|
31
|
+
__version__ = version = '2.26.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (2, 26, 0)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g5867420fb'
|
|
@@ -19,6 +19,7 @@ class FilterPanel(QtWidgets.QWidget):
|
|
|
19
19
|
"""
|
|
20
20
|
#: Emitted when the user wants to create a new polygon filter
|
|
21
21
|
request_new_polygon_filter = QtCore.pyqtSignal()
|
|
22
|
+
request_edit_polygon_filter = QtCore.pyqtSignal(int)
|
|
22
23
|
|
|
23
24
|
# widgets emit these whenever they changed the pipeline
|
|
24
25
|
pp_mod_send = QtCore.pyqtSignal(dict)
|
|
@@ -45,6 +46,20 @@ class FilterPanel(QtWidgets.QWidget):
|
|
|
45
46
|
self.pushButton_apply.clicked.connect(self.write_filter)
|
|
46
47
|
self.pushButton_reset.clicked.connect(self.update_content)
|
|
47
48
|
|
|
49
|
+
# polygon buttons
|
|
50
|
+
self.pushButton_polygon_add.clicked.connect(
|
|
51
|
+
self.request_new_polygon_filter)
|
|
52
|
+
self.pushButton_polygon_edit.clicked.connect(
|
|
53
|
+
self.on_polygon_edit)
|
|
54
|
+
self.pushButton_polygon_duplicate.clicked.connect(
|
|
55
|
+
self.on_polygon_duplicate)
|
|
56
|
+
self.pushButton_polygon_remove.clicked.connect(
|
|
57
|
+
self.on_polygon_remove)
|
|
58
|
+
|
|
59
|
+
# polygon selection
|
|
60
|
+
self.listWidget_polygon.itemSelectionChanged.connect(
|
|
61
|
+
self.on_polygon_selection)
|
|
62
|
+
|
|
48
63
|
self.comboBox_filters.currentIndexChanged.connect(self.update_content)
|
|
49
64
|
self.toolButton_moreless.clicked.connect(self.on_moreless)
|
|
50
65
|
self.label_box_edit.setVisible(False)
|
|
@@ -54,6 +69,7 @@ class FilterPanel(QtWidgets.QWidget):
|
|
|
54
69
|
self.pp_mod_recv.connect(self.on_pp_mod_recv)
|
|
55
70
|
|
|
56
71
|
def read_filter_state(self):
|
|
72
|
+
"""Read filter state from UI"""
|
|
57
73
|
state = {
|
|
58
74
|
"filter used": self.checkBox_enable.isChecked(),
|
|
59
75
|
"identifier": self.current_filter.identifier,
|
|
@@ -68,15 +84,23 @@ class FilterPanel(QtWidgets.QWidget):
|
|
|
68
84
|
rc = self._box_range_controls[feat]
|
|
69
85
|
box[feat] = rc.read_pipeline_state()
|
|
70
86
|
state["box filters"] = box
|
|
87
|
+
|
|
71
88
|
# polygon filters
|
|
89
|
+
state["polygon filters"] = self.read_filter_state_polygon()
|
|
90
|
+
|
|
91
|
+
return state
|
|
92
|
+
|
|
93
|
+
def read_filter_state_polygon(self):
|
|
94
|
+
"""Read polygon filter state from UI"""
|
|
72
95
|
pflist = []
|
|
73
96
|
for key in self._polygon_checkboxes:
|
|
74
|
-
if self._polygon_checkboxes[key].
|
|
97
|
+
if (self._polygon_checkboxes[key].checkState()
|
|
98
|
+
== QtCore.Qt.CheckState.Checked):
|
|
75
99
|
pflist.append(key)
|
|
76
|
-
|
|
77
|
-
return state
|
|
100
|
+
return pflist
|
|
78
101
|
|
|
79
102
|
def write_filter_state(self, state):
|
|
103
|
+
"""Write filter state to UI"""
|
|
80
104
|
if self.current_filter.identifier != state["identifier"]:
|
|
81
105
|
raise ValueError("Filter identifier mismatch!")
|
|
82
106
|
self.checkBox_enable.setChecked(state["filter used"])
|
|
@@ -97,12 +121,17 @@ class FilterPanel(QtWidgets.QWidget):
|
|
|
97
121
|
rc.reset_range()
|
|
98
122
|
|
|
99
123
|
# polygon filters
|
|
100
|
-
|
|
124
|
+
self.write_filter_state_polygon(state["polygon filters"])
|
|
125
|
+
|
|
126
|
+
def write_filter_state_polygon(self, state):
|
|
127
|
+
"""Write polygon filter state to UI"""
|
|
101
128
|
for key in self._polygon_checkboxes:
|
|
102
|
-
if key in
|
|
103
|
-
self._polygon_checkboxes[key].
|
|
129
|
+
if key in state:
|
|
130
|
+
self._polygon_checkboxes[key].setCheckState(
|
|
131
|
+
QtCore.Qt.CheckState.Checked)
|
|
104
132
|
else:
|
|
105
|
-
self._polygon_checkboxes[key].
|
|
133
|
+
self._polygon_checkboxes[key].setCheckState(
|
|
134
|
+
QtCore.Qt.CheckState.Unchecked)
|
|
106
135
|
|
|
107
136
|
def _populate_box_filters(self):
|
|
108
137
|
"""Dynamically update available pipeline box filters
|
|
@@ -184,6 +213,71 @@ class FilterPanel(QtWidgets.QWidget):
|
|
|
184
213
|
new_id = self.pipeline.duplicate_filter(filt_id)
|
|
185
214
|
self.pp_mod_send.emit({"pipeline": {"filter_added": new_id}})
|
|
186
215
|
|
|
216
|
+
def get_polygon_filter_selection(self):
|
|
217
|
+
"""Return selected polygon filters"""
|
|
218
|
+
items = self.listWidget_polygon.selectedItems()
|
|
219
|
+
pfs = []
|
|
220
|
+
pf_ids = []
|
|
221
|
+
for (pfid, item) in self._polygon_checkboxes.items():
|
|
222
|
+
if item in items:
|
|
223
|
+
pf_ids.append(pfid)
|
|
224
|
+
pfs.append(dclab.PolygonFilter.get_instance_from_id(pfid))
|
|
225
|
+
return pf_ids, pfs
|
|
226
|
+
|
|
227
|
+
@QtCore.pyqtSlot()
|
|
228
|
+
def on_polygon_selection(self):
|
|
229
|
+
num_selected = len(self.listWidget_polygon.selectedItems())
|
|
230
|
+
if num_selected == 0:
|
|
231
|
+
self.widget_selection.setEnabled(False)
|
|
232
|
+
else:
|
|
233
|
+
self.widget_selection.setEnabled(True)
|
|
234
|
+
self.pushButton_polygon_edit.setEnabled(num_selected == 1)
|
|
235
|
+
|
|
236
|
+
@QtCore.pyqtSlot()
|
|
237
|
+
def on_polygon_duplicate(self):
|
|
238
|
+
pf_ids, pfs = self.get_polygon_filter_selection()
|
|
239
|
+
|
|
240
|
+
if len(pf_ids) > 1:
|
|
241
|
+
button_reply = QtWidgets.QMessageBox.question(
|
|
242
|
+
self,
|
|
243
|
+
"Duplicate multiple polygon filters?",
|
|
244
|
+
f"Are you sure you want to duplicate {len(pf_ids)} "
|
|
245
|
+
f"polygon filters?")
|
|
246
|
+
yes = button_reply == QtWidgets.QMessageBox.StandardButton.Yes
|
|
247
|
+
else:
|
|
248
|
+
yes = True
|
|
249
|
+
|
|
250
|
+
if yes:
|
|
251
|
+
for pf in pfs:
|
|
252
|
+
pf_copy = pf.copy()
|
|
253
|
+
pf_copy.name = pf.name + "+"
|
|
254
|
+
|
|
255
|
+
self.update_polygon_filters()
|
|
256
|
+
|
|
257
|
+
@QtCore.pyqtSlot()
|
|
258
|
+
def on_polygon_edit(self):
|
|
259
|
+
pf_ids, _ = self.get_polygon_filter_selection()
|
|
260
|
+
|
|
261
|
+
if len(pf_ids) == 1:
|
|
262
|
+
self.request_edit_polygon_filter.emit(pf_ids[0])
|
|
263
|
+
|
|
264
|
+
@QtCore.pyqtSlot()
|
|
265
|
+
def on_polygon_remove(self):
|
|
266
|
+
pf_ids, pfs = self.get_polygon_filter_selection()
|
|
267
|
+
|
|
268
|
+
button_reply = QtWidgets.QMessageBox.question(
|
|
269
|
+
self,
|
|
270
|
+
"Polygon filter removal?",
|
|
271
|
+
"Are you sure you want to remove the following polygon "
|
|
272
|
+
"filters?\n" + "\n".join([f" - {pf.name}" for pf in pfs]))
|
|
273
|
+
yes = button_reply == QtWidgets.QMessageBox.StandardButton.Yes
|
|
274
|
+
|
|
275
|
+
if yes:
|
|
276
|
+
for pfid in pf_ids:
|
|
277
|
+
dclab.PolygonFilter.remove(pfid)
|
|
278
|
+
|
|
279
|
+
self.update_polygon_filters()
|
|
280
|
+
|
|
187
281
|
@QtCore.pyqtSlot(dict)
|
|
188
282
|
def on_pp_mod_recv(self, data):
|
|
189
283
|
"""We received a signal that something changed"""
|
|
@@ -312,33 +406,32 @@ class FilterPanel(QtWidgets.QWidget):
|
|
|
312
406
|
|
|
313
407
|
def update_polygon_filters(self):
|
|
314
408
|
"""Update the layout containing the polygon filters"""
|
|
315
|
-
self.verticalLayout_poly.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop)
|
|
316
409
|
# clear layout
|
|
317
|
-
for
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
item.hide()
|
|
321
|
-
item.deleteLater()
|
|
410
|
+
for _ in range(self.listWidget_polygon.count()):
|
|
411
|
+
self.listWidget_polygon.takeItem(0)
|
|
412
|
+
|
|
322
413
|
self._polygon_checkboxes = {} # must come after getting the state
|
|
323
414
|
if dclab.PolygonFilter.instances:
|
|
415
|
+
self.listWidget_polygon.setEnabled(True)
|
|
324
416
|
for pf in dclab.PolygonFilter.instances:
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
widget.setLayout(hbox)
|
|
333
|
-
self.verticalLayout_poly.addWidget(widget)
|
|
334
|
-
self._polygon_checkboxes[pf.unique_id] = chb
|
|
417
|
+
item = QtWidgets.QListWidgetItem(pf.name)
|
|
418
|
+
item.setFlags(
|
|
419
|
+
item.flags() | QtCore.Qt.ItemFlag.ItemIsUserCheckable)
|
|
420
|
+
item.setCheckState(QtCore.Qt.CheckState.Unchecked)
|
|
421
|
+
self.listWidget_polygon.addItem(item)
|
|
422
|
+
item.setToolTip(f"{pf.unique_id}: {pf.name}")
|
|
423
|
+
self._polygon_checkboxes[pf.unique_id] = item
|
|
335
424
|
else:
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
425
|
+
self.listWidget_polygon.addItem(
|
|
426
|
+
"No polygon filters have been created yet.")
|
|
427
|
+
self.listWidget_polygon.setEnabled(False)
|
|
428
|
+
self.widget_selection.setEnabled(False)
|
|
429
|
+
|
|
430
|
+
if self.current_filter is not None:
|
|
431
|
+
filt_id = self.current_filter.identifier
|
|
432
|
+
filt_index = self.pipeline.filter_ids.index(filt_id)
|
|
433
|
+
pflist = self.pipeline.filters[filt_index].polylist
|
|
434
|
+
self.write_filter_state_polygon(pflist)
|
|
342
435
|
|
|
343
436
|
@QtCore.pyqtSlot()
|
|
344
437
|
def write_filter(self):
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
<rect>
|
|
7
7
|
<x>0</x>
|
|
8
8
|
<y>0</y>
|
|
9
|
-
<width>
|
|
10
|
-
<height>
|
|
9
|
+
<width>702</width>
|
|
10
|
+
<height>655</height>
|
|
11
11
|
</rect>
|
|
12
12
|
</property>
|
|
13
13
|
<property name="windowTitle">
|
|
@@ -26,17 +26,17 @@
|
|
|
26
26
|
<item>
|
|
27
27
|
<widget class="QComboBox" name="comboBox_filters">
|
|
28
28
|
<property name="sizeAdjustPolicy">
|
|
29
|
-
<enum>QComboBox::AdjustToContents</enum>
|
|
29
|
+
<enum>QComboBox::SizeAdjustPolicy::AdjustToContents</enum>
|
|
30
30
|
</property>
|
|
31
31
|
</widget>
|
|
32
32
|
</item>
|
|
33
33
|
<item>
|
|
34
34
|
<spacer name="horizontalSpacer_2">
|
|
35
35
|
<property name="orientation">
|
|
36
|
-
<enum>Qt::Horizontal</enum>
|
|
36
|
+
<enum>Qt::Orientation::Horizontal</enum>
|
|
37
37
|
</property>
|
|
38
38
|
<property name="sizeType">
|
|
39
|
-
<enum>QSizePolicy::Expanding</enum>
|
|
39
|
+
<enum>QSizePolicy::Policy::Expanding</enum>
|
|
40
40
|
</property>
|
|
41
41
|
<property name="sizeHint" stdset="0">
|
|
42
42
|
<size>
|
|
@@ -55,8 +55,7 @@
|
|
|
55
55
|
<string>Duplicate</string>
|
|
56
56
|
</property>
|
|
57
57
|
<property name="icon">
|
|
58
|
-
<iconset theme="edit-paste"
|
|
59
|
-
<normaloff>.</normaloff>.</iconset>
|
|
58
|
+
<iconset theme="edit-paste"/>
|
|
60
59
|
</property>
|
|
61
60
|
</widget>
|
|
62
61
|
</item>
|
|
@@ -69,8 +68,7 @@
|
|
|
69
68
|
<string>Remove</string>
|
|
70
69
|
</property>
|
|
71
70
|
<property name="icon">
|
|
72
|
-
<iconset theme="remove"
|
|
73
|
-
<normaloff>.</normaloff>.</iconset>
|
|
71
|
+
<iconset theme="remove"/>
|
|
74
72
|
</property>
|
|
75
73
|
</widget>
|
|
76
74
|
</item>
|
|
@@ -79,12 +77,12 @@
|
|
|
79
77
|
<item>
|
|
80
78
|
<widget class="Line" name="line">
|
|
81
79
|
<property name="orientation">
|
|
82
|
-
<enum>Qt::Horizontal</enum>
|
|
80
|
+
<enum>Qt::Orientation::Horizontal</enum>
|
|
83
81
|
</property>
|
|
84
82
|
</widget>
|
|
85
83
|
</item>
|
|
86
84
|
<item>
|
|
87
|
-
<layout class="QVBoxLayout" name="verticalLayout_5">
|
|
85
|
+
<layout class="QVBoxLayout" name="verticalLayout_5" stretch="0,2,1,0">
|
|
88
86
|
<property name="leftMargin">
|
|
89
87
|
<number>9</number>
|
|
90
88
|
</property>
|
|
@@ -94,7 +92,7 @@
|
|
|
94
92
|
<item>
|
|
95
93
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
|
96
94
|
<property name="sizeConstraint">
|
|
97
|
-
<enum>QLayout::SetMinimumSize</enum>
|
|
95
|
+
<enum>QLayout::SizeConstraint::SetMinimumSize</enum>
|
|
98
96
|
</property>
|
|
99
97
|
<item>
|
|
100
98
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
|
@@ -157,7 +155,7 @@
|
|
|
157
155
|
<item>
|
|
158
156
|
<spacer name="horizontalSpacer_3">
|
|
159
157
|
<property name="orientation">
|
|
160
|
-
<enum>Qt::Horizontal</enum>
|
|
158
|
+
<enum>Qt::Orientation::Horizontal</enum>
|
|
161
159
|
</property>
|
|
162
160
|
<property name="sizeHint" stdset="0">
|
|
163
161
|
<size>
|
|
@@ -197,7 +195,7 @@
|
|
|
197
195
|
</property>
|
|
198
196
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
|
199
197
|
<property name="sizeConstraint">
|
|
200
|
-
<enum>QLayout::SetMaximumSize</enum>
|
|
198
|
+
<enum>QLayout::SizeConstraint::SetMaximumSize</enum>
|
|
201
199
|
</property>
|
|
202
200
|
<property name="leftMargin">
|
|
203
201
|
<number>9</number>
|
|
@@ -205,16 +203,16 @@
|
|
|
205
203
|
<item>
|
|
206
204
|
<widget class="QScrollArea" name="scrollArea_box">
|
|
207
205
|
<property name="frameShape">
|
|
208
|
-
<enum>QFrame::NoFrame</enum>
|
|
206
|
+
<enum>QFrame::Shape::NoFrame</enum>
|
|
209
207
|
</property>
|
|
210
208
|
<property name="lineWidth">
|
|
211
209
|
<number>0</number>
|
|
212
210
|
</property>
|
|
213
211
|
<property name="horizontalScrollBarPolicy">
|
|
214
|
-
<enum>Qt::ScrollBarAlwaysOff</enum>
|
|
212
|
+
<enum>Qt::ScrollBarPolicy::ScrollBarAlwaysOff</enum>
|
|
215
213
|
</property>
|
|
216
214
|
<property name="sizeAdjustPolicy">
|
|
217
|
-
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
|
215
|
+
<enum>QAbstractScrollArea::SizeAdjustPolicy::AdjustToContents</enum>
|
|
218
216
|
</property>
|
|
219
217
|
<property name="widgetResizable">
|
|
220
218
|
<bool>true</bool>
|
|
@@ -224,7 +222,7 @@
|
|
|
224
222
|
<rect>
|
|
225
223
|
<x>0</x>
|
|
226
224
|
<y>0</y>
|
|
227
|
-
<width>
|
|
225
|
+
<width>650</width>
|
|
228
226
|
<height>68</height>
|
|
229
227
|
</rect>
|
|
230
228
|
</property>
|
|
@@ -265,43 +263,89 @@
|
|
|
265
263
|
<string>Polygon filters</string>
|
|
266
264
|
</property>
|
|
267
265
|
<property name="alignment">
|
|
268
|
-
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
|
266
|
+
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop</set>
|
|
269
267
|
</property>
|
|
270
|
-
<layout class="
|
|
268
|
+
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
|
271
269
|
<property name="sizeConstraint">
|
|
272
|
-
<enum>QLayout::SetMinimumSize</enum>
|
|
270
|
+
<enum>QLayout::SizeConstraint::SetMinimumSize</enum>
|
|
273
271
|
</property>
|
|
274
272
|
<item>
|
|
275
|
-
<widget class="
|
|
276
|
-
<property name="
|
|
277
|
-
<enum>
|
|
278
|
-
</property>
|
|
279
|
-
<property name="horizontalScrollBarPolicy">
|
|
280
|
-
<enum>Qt::ScrollBarAlwaysOff</enum>
|
|
281
|
-
</property>
|
|
282
|
-
<property name="sizeAdjustPolicy">
|
|
283
|
-
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
|
273
|
+
<widget class="QListWidget" name="listWidget_polygon">
|
|
274
|
+
<property name="selectionMode">
|
|
275
|
+
<enum>QAbstractItemView::SelectionMode::ExtendedSelection</enum>
|
|
284
276
|
</property>
|
|
285
|
-
<property name="widgetResizable">
|
|
286
|
-
<bool>true</bool>
|
|
287
|
-
</property>
|
|
288
|
-
<widget class="QWidget" name="scrollAreaWidgetContents_2">
|
|
289
|
-
<property name="geometry">
|
|
290
|
-
<rect>
|
|
291
|
-
<x>0</x>
|
|
292
|
-
<y>0</y>
|
|
293
|
-
<width>649</width>
|
|
294
|
-
<height>116</height>
|
|
295
|
-
</rect>
|
|
296
|
-
</property>
|
|
297
|
-
<layout class="QVBoxLayout" name="verticalLayout_7">
|
|
298
|
-
<item>
|
|
299
|
-
<layout class="QVBoxLayout" name="verticalLayout_poly"/>
|
|
300
|
-
</item>
|
|
301
|
-
</layout>
|
|
302
|
-
</widget>
|
|
303
277
|
</widget>
|
|
304
278
|
</item>
|
|
279
|
+
<item>
|
|
280
|
+
<layout class="QVBoxLayout" name="verticalLayout_7">
|
|
281
|
+
<item>
|
|
282
|
+
<widget class="QPushButton" name="pushButton_polygon_add">
|
|
283
|
+
<property name="text">
|
|
284
|
+
<string>Create</string>
|
|
285
|
+
</property>
|
|
286
|
+
</widget>
|
|
287
|
+
</item>
|
|
288
|
+
<item>
|
|
289
|
+
<widget class="QWidget" name="widget_selection" native="true">
|
|
290
|
+
<layout class="QVBoxLayout" name="verticalLayout_4">
|
|
291
|
+
<property name="leftMargin">
|
|
292
|
+
<number>0</number>
|
|
293
|
+
</property>
|
|
294
|
+
<property name="topMargin">
|
|
295
|
+
<number>0</number>
|
|
296
|
+
</property>
|
|
297
|
+
<property name="rightMargin">
|
|
298
|
+
<number>0</number>
|
|
299
|
+
</property>
|
|
300
|
+
<property name="bottomMargin">
|
|
301
|
+
<number>0</number>
|
|
302
|
+
</property>
|
|
303
|
+
<item>
|
|
304
|
+
<widget class="QLabel" name="label_3">
|
|
305
|
+
<property name="text">
|
|
306
|
+
<string>Selection</string>
|
|
307
|
+
</property>
|
|
308
|
+
</widget>
|
|
309
|
+
</item>
|
|
310
|
+
<item>
|
|
311
|
+
<widget class="QPushButton" name="pushButton_polygon_edit">
|
|
312
|
+
<property name="text">
|
|
313
|
+
<string>Edit/View</string>
|
|
314
|
+
</property>
|
|
315
|
+
</widget>
|
|
316
|
+
</item>
|
|
317
|
+
<item>
|
|
318
|
+
<widget class="QPushButton" name="pushButton_polygon_duplicate">
|
|
319
|
+
<property name="text">
|
|
320
|
+
<string>Duplicate</string>
|
|
321
|
+
</property>
|
|
322
|
+
</widget>
|
|
323
|
+
</item>
|
|
324
|
+
<item>
|
|
325
|
+
<widget class="QPushButton" name="pushButton_polygon_remove">
|
|
326
|
+
<property name="text">
|
|
327
|
+
<string>Remove</string>
|
|
328
|
+
</property>
|
|
329
|
+
</widget>
|
|
330
|
+
</item>
|
|
331
|
+
</layout>
|
|
332
|
+
</widget>
|
|
333
|
+
</item>
|
|
334
|
+
<item>
|
|
335
|
+
<spacer name="verticalSpacer">
|
|
336
|
+
<property name="orientation">
|
|
337
|
+
<enum>Qt::Orientation::Vertical</enum>
|
|
338
|
+
</property>
|
|
339
|
+
<property name="sizeHint" stdset="0">
|
|
340
|
+
<size>
|
|
341
|
+
<width>20</width>
|
|
342
|
+
<height>0</height>
|
|
343
|
+
</size>
|
|
344
|
+
</property>
|
|
345
|
+
</spacer>
|
|
346
|
+
</item>
|
|
347
|
+
</layout>
|
|
348
|
+
</item>
|
|
305
349
|
</layout>
|
|
306
350
|
</widget>
|
|
307
351
|
</item>
|
|
@@ -313,7 +357,7 @@
|
|
|
313
357
|
<item>
|
|
314
358
|
<spacer name="horizontalSpacer_4">
|
|
315
359
|
<property name="orientation">
|
|
316
|
-
<enum>Qt::Horizontal</enum>
|
|
360
|
+
<enum>Qt::Orientation::Horizontal</enum>
|
|
317
361
|
</property>
|
|
318
362
|
<property name="sizeHint" stdset="0">
|
|
319
363
|
<size>
|
|
@@ -333,10 +377,10 @@
|
|
|
333
377
|
<item>
|
|
334
378
|
<spacer name="horizontalSpacer_5">
|
|
335
379
|
<property name="orientation">
|
|
336
|
-
<enum>Qt::Horizontal</enum>
|
|
380
|
+
<enum>Qt::Orientation::Horizontal</enum>
|
|
337
381
|
</property>
|
|
338
382
|
<property name="sizeType">
|
|
339
|
-
<enum>QSizePolicy::Fixed</enum>
|
|
383
|
+
<enum>QSizePolicy::Policy::Fixed</enum>
|
|
340
384
|
</property>
|
|
341
385
|
<property name="sizeHint" stdset="0">
|
|
342
386
|
<size>
|
|
@@ -10,6 +10,7 @@ import webbrowser
|
|
|
10
10
|
|
|
11
11
|
import dclab
|
|
12
12
|
from dclab.lme4 import rsetup
|
|
13
|
+
from dclab import cached
|
|
13
14
|
import h5py
|
|
14
15
|
import numpy
|
|
15
16
|
import scipy
|
|
@@ -117,6 +118,16 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
117
118
|
dclab.rtdc_dataset.fmt_s3.S3_SECRET_ACCESS_KEY = \
|
|
118
119
|
s3_secret_access_key
|
|
119
120
|
|
|
121
|
+
# setup memory and disk caching
|
|
122
|
+
cache_path = pathlib.Path(
|
|
123
|
+
QStandardPaths.writableLocation(
|
|
124
|
+
QStandardPaths.StandardLocation.CacheLocation))
|
|
125
|
+
store_keeper = cached.StoreKeeper.get_instance()
|
|
126
|
+
store_keeper.set_disk_store_path(cache_path)
|
|
127
|
+
store_keeper.set_interval(30)
|
|
128
|
+
store_keeper.set_disk_store_size_bytes(1024**3)
|
|
129
|
+
store_keeper.set_memory_store_size(200)
|
|
130
|
+
|
|
120
131
|
#: Extensions
|
|
121
132
|
store_path = pathlib.Path(
|
|
122
133
|
QStandardPaths.writableLocation(
|
|
@@ -212,6 +223,8 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
212
223
|
# polygon filter creation
|
|
213
224
|
self.widget_ana_view.widget_filter.request_new_polygon_filter.connect(
|
|
214
225
|
self.on_new_polygon_filter)
|
|
226
|
+
self.widget_ana_view.widget_filter.request_edit_polygon_filter.connect(
|
|
227
|
+
self.on_edit_polygon_filter)
|
|
215
228
|
|
|
216
229
|
# Top of the pipeline modification hierarchy
|
|
217
230
|
self.pp_mod_send.connect(self.on_pp_mod_recv)
|
|
@@ -630,13 +643,14 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
630
643
|
+ "\n".join([str(p) for p in list(set(double_paths))])
|
|
631
644
|
)
|
|
632
645
|
if existing_paths:
|
|
633
|
-
|
|
646
|
+
button_reply = QtWidgets.QMessageBox.question(
|
|
634
647
|
self,
|
|
635
648
|
"Override existing files?",
|
|
636
649
|
"The following files already exist, override?\n\n"
|
|
637
650
|
+ "\n".join([str(p) for p in existing_paths])
|
|
638
651
|
)
|
|
639
|
-
|
|
652
|
+
yes = button_reply == QtWidgets.QMessageBox.StandardButton.Yes
|
|
653
|
+
if yes:
|
|
640
654
|
# if the user agrees, these files will be overridden
|
|
641
655
|
existing_paths.clear()
|
|
642
656
|
for path in filt_dict:
|
|
@@ -785,6 +799,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
785
799
|
|
|
786
800
|
@QtCore.pyqtSlot()
|
|
787
801
|
def on_new_polygon_filter(self):
|
|
802
|
+
"""Create a new polygon filter"""
|
|
788
803
|
if not self.pipeline.slots:
|
|
789
804
|
msg = QtWidgets.QMessageBox()
|
|
790
805
|
msg.setIcon(QtWidgets.QMessageBox.Icon.Critical)
|
|
@@ -793,6 +808,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
793
808
|
msg.exec()
|
|
794
809
|
else:
|
|
795
810
|
self.toolButton_quick_view.setChecked(True)
|
|
811
|
+
self.mdiArea.setActiveSubWindow(self.subwindows["quick_view"])
|
|
796
812
|
if not self.widget_quick_view.current_pipeline_element:
|
|
797
813
|
# select the first item in the pipeline
|
|
798
814
|
self.pp_mod_send.emit({"quickview": {
|
|
@@ -802,13 +818,39 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
802
818
|
"filt_id": self.pipeline.filter_ids[0],
|
|
803
819
|
}})
|
|
804
820
|
|
|
821
|
+
# adjusts QuickView size correctly
|
|
822
|
+
self.widget_quick_view.on_tool()
|
|
805
823
|
self.widget_quick_view.on_poly_create()
|
|
824
|
+
|
|
825
|
+
@QtCore.pyqtSlot(int)
|
|
826
|
+
def on_edit_polygon_filter(self, polygon_filter_id):
|
|
827
|
+
"""Edit a polygon filter"""
|
|
828
|
+
if not self.pipeline.slots:
|
|
829
|
+
msg = QtWidgets.QMessageBox()
|
|
830
|
+
msg.setIcon(QtWidgets.QMessageBox.Icon.Critical)
|
|
831
|
+
msg.setText("A dataset is required for editing a polygon filter!")
|
|
832
|
+
msg.setWindowTitle("No dataset loaded")
|
|
833
|
+
msg.exec()
|
|
834
|
+
else:
|
|
835
|
+
self.toolButton_quick_view.setChecked(True)
|
|
836
|
+
self.mdiArea.setActiveSubWindow(self.subwindows["quick_view"])
|
|
837
|
+
if not self.widget_quick_view.current_pipeline_element:
|
|
838
|
+
# select the first item in the pipeline
|
|
839
|
+
self.pp_mod_send.emit({"quickview": {
|
|
840
|
+
"slot_index": 0,
|
|
841
|
+
"filt_index": 0,
|
|
842
|
+
"slot_id": self.pipeline.slot_ids[0],
|
|
843
|
+
"filt_id": self.pipeline.filter_ids[0],
|
|
844
|
+
}})
|
|
845
|
+
|
|
806
846
|
# adjusts QuickView size correctly
|
|
807
847
|
self.widget_quick_view.on_tool()
|
|
848
|
+
self.widget_quick_view.on_poly_modify(polygon_filter_id)
|
|
808
849
|
|
|
809
850
|
@widgets.show_wait_cursor
|
|
810
851
|
@QtCore.pyqtSlot(str)
|
|
811
852
|
def on_modify_filter(self, filt_id):
|
|
853
|
+
self.mdiArea.setActiveSubWindow(self.subwindows["analysis_view"])
|
|
812
854
|
self.widget_ana_view.tabWidget.setCurrentWidget(
|
|
813
855
|
self.widget_ana_view.tab_filter)
|
|
814
856
|
self.widget_ana_view.widget_filter.show_filter(filt_id)
|
|
@@ -822,6 +864,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
822
864
|
@widgets.show_wait_cursor
|
|
823
865
|
@QtCore.pyqtSlot(str)
|
|
824
866
|
def on_modify_plot(self, plot_id):
|
|
867
|
+
self.mdiArea.setActiveSubWindow(self.subwindows["analysis_view"])
|
|
825
868
|
self.widget_ana_view.tabWidget.setCurrentWidget(
|
|
826
869
|
self.widget_ana_view.tab_plot)
|
|
827
870
|
self.widget_ana_view.widget_plot.show_plot(plot_id)
|
|
@@ -835,6 +878,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
835
878
|
@widgets.show_wait_cursor
|
|
836
879
|
@QtCore.pyqtSlot(str)
|
|
837
880
|
def on_modify_slot(self, slot_id):
|
|
881
|
+
self.mdiArea.setActiveSubWindow(self.subwindows["analysis_view"])
|
|
838
882
|
self.widget_ana_view.tabWidget.setCurrentWidget(
|
|
839
883
|
self.widget_ana_view.tab_slot)
|
|
840
884
|
self.widget_ana_view.widget_slot.show_slot(slot_id)
|
|
@@ -880,6 +924,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
880
924
|
if not self.subwindows["quick_view"].isVisible():
|
|
881
925
|
self.toolButton_quick_view.setChecked(True)
|
|
882
926
|
self.subwindows["quick_view"].setVisible(True)
|
|
927
|
+
self.mdiArea.setActiveSubWindow(self.subwindows["quick_view"])
|
|
883
928
|
|
|
884
929
|
# Send new signal to all receivers
|
|
885
930
|
self.pp_mod_recv.emit(data)
|
|
@@ -10,7 +10,7 @@ from pyqtgraph import exporters
|
|
|
10
10
|
from pyqtgraph.graphicsItems.GradientEditorItem import Gradients
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
from .. import
|
|
13
|
+
from .. import plotting
|
|
14
14
|
from .. import util
|
|
15
15
|
from .widgets import DCscopeColorBarItem
|
|
16
16
|
|
|
@@ -603,7 +603,7 @@ def add_scatter(plot_item, plot_state, rtdc_ds, slot_state, hash_flag):
|
|
|
603
603
|
else:
|
|
604
604
|
kde_type = "none"
|
|
605
605
|
|
|
606
|
-
x, y, kde, idx =
|
|
606
|
+
x, y, kde, idx = plotting.get_scatter_data(
|
|
607
607
|
rtdc_ds=rtdc_ds,
|
|
608
608
|
downsample=sca["downsample"] * sca["downsampling value"],
|
|
609
609
|
xax=gen["axis x"],
|
|
@@ -674,7 +674,7 @@ def add_scatter(plot_item, plot_state, rtdc_ds, slot_state, hash_flag):
|
|
|
674
674
|
def compute_contours(plot_state, rtdc_ds):
|
|
675
675
|
gen = plot_state["general"]
|
|
676
676
|
con = plot_state["contour"]
|
|
677
|
-
contours =
|
|
677
|
+
contours = plotting.get_contour_lines(
|
|
678
678
|
rtdc_ds=rtdc_ds,
|
|
679
679
|
xax=gen["axis x"],
|
|
680
680
|
yax=gen["axis y"],
|