dcscope 2.26.2__tar.gz → 2.26.3__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.2 → dcscope-2.26.3}/CHANGELOG +6 -0
- {dcscope-2.26.2/dcscope.egg-info → dcscope-2.26.3}/PKG-INFO +2 -2
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/_version.py +3 -3
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/main.py +8 -0
- dcscope-2.26.3/dcscope/gui/quick_view/qv_event_getter.py +107 -0
- dcscope-2.26.3/dcscope/gui/quick_view/qv_image_vis.py +222 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_main.py +176 -345
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_main.ui +42 -20
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/util.py +17 -0
- {dcscope-2.26.2 → dcscope-2.26.3/dcscope.egg-info}/PKG-INFO +2 -2
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope.egg-info/SOURCES.txt +2 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope.egg-info/requires.txt +1 -1
- {dcscope-2.26.2 → dcscope-2.26.3}/pyproject.toml +1 -1
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/conftest.py +10 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_bulk_emodulus.py +11 -15
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_compute_lme4.py +4 -5
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_compute_stats.py +4 -3
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_emodulus.py +11 -19
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_export_data.py +7 -11
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_export_filter.py +5 -5
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_export_plot.py +3 -3
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_filter.py +7 -11
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_matrix.py +5 -7
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_pipeline_plot.py +1 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_plotting.py +17 -29
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_quickview.py +43 -63
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_reorder_datasets.py +4 -3
- {dcscope-2.26.2 → dcscope-2.26.3}/.github/workflows/check.yml +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/.github/workflows/deploy_github.yml +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/.github/workflows/deploy_pypi.yml +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/.gitignore +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/.readthedocs.yml +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/LICENSE +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/MANIFEST.in +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/README.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/DCscope.icns +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/DCscope.ico +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/DCscopeLauncher.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/Readme.md +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/hook-dcscope.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/macos_DCscope.spec +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/macos_build_app.sh +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/macos_build_requirements.txt +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/win_DCscope.spec +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/win_build_requirements.txt +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/win_dcscope.iss_dummy +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/win_make_iss.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/__main__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/extensions.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_basins.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_basins.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_filter.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_filter.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_log.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_log.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_meta.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_meta.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_plot.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_plot.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_slot.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_slot.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_tables.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_tables.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_view.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_view.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/dlg_slot_reorder.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/dlg_slot_reorder.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/bulk/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/bulk/bulk_emodulus.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/bulk/bulk_emodulus.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_dataset.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_dataset.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_results.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_results.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_stats.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_stats.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/dcor/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/dcor/dcor.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2data.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2data.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2filter.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2filter.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2plot.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2plot.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/helpers.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/main.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/Readme.md +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/block_matrix.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/block_matrix.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/data_matrix.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_dataset.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_dataset.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_element.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_element.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_filter.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_filter.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/plot_matrix.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/pm_element.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/pm_plot.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/pm_plot.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/pipeline_plot.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/pipeline_plot.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/preferences.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/preferences.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/quick_view/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_scatter.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_style.css +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/settings.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/update.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/bg_thread.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/bulk_list.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/bulk_list.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/double_spin_box_nan.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/feature_combobox.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/get_path.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/key_value_table_widget.css +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/key_value_table_widget.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/mdi_subwindow_wo_close.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/qrangeslider.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/rangecontrol.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/rangecontrol.ui +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/simple_image_view.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/simple_plot_widget.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/so_colorbaritem.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/wait_cursor.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/idiom.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/COPYING-ICONS +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/COPYING.LIB +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/README +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/application-exit.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/code-context.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-cancel.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-close.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-messages.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok-apply.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/document-open-folder.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/document-open.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/document-save.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/documentinfo.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/draw-watercolor.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/edit-clear-all.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/edit-clear.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/edit-paste.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/globe.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/gtk-preferences.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/list-add.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/messagebox_warning.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/object-columns.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/object-order-lower.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/object-rows.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/office-chart-line-stacked.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/office-chart-ring.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/office-chart-scatter.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/path-mode-polyline.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/preferences-activities.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/remove.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/search.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/show-grid.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/special_paste.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/tools-wizard.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-calendar-list.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-filter.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-list-tree.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-statistics.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/visibility.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/application-exit.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/code-context.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-cancel.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-close.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-messages.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok-apply.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/document-open-folder.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/document-open.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/document-save.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/documentinfo.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/draw-watercolor.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/edit-clear-all.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/edit-clear.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/edit-paste.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/globe.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/gtk-preferences.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/list-add.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/messagebox_warning.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/object-columns.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/object-order-lower.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/object-rows.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/office-chart-line-stacked.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/office-chart-ring.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/office-chart-scatter.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/path-mode-polyline.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/preferences-activities.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/remove.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/special_paste.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/tools-wizard.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-calendar-list.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-filter.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-list-tree.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-statistics.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/visibility.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/application-exit.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/code-context.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-cancel.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-close.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-messages.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok-apply.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/document-open-folder.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/document-open.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/document-save.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/documentinfo.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/draw-watercolor.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/edit-clear-all.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/edit-clear.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/edit-paste.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/globe.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/gtk-preferences.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/list-add.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/messagebox_warning.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/object-columns.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/object-order-lower.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/object-rows.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/office-chart-line-stacked.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/office-chart-ring.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/office-chart-scatter.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/path-mode-polyline.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/preferences-activities.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/remove.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/special_paste.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/tools-wizard.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-calendar-list.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-filter.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-list-tree.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-statistics.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/visibility.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/application-exit.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-cancel.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-messages.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok-apply.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/document-open-folder.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/document-open.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/document-save.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/gtk-preferences.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/object-order-lower.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/view-filter.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/view-list-tree.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/16/folder-cloud.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/16/folder.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/22/folder-cloud.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/22/folder.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/24/folder-cloud.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/24/folder.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/32/folder-cloud.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/32/folder.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/64/folder-cloud.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/64/folder.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-error.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-information.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-question.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-warning.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-error.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-information.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-question.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-warning.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-error.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-information.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-question.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-warning.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-error.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-information.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-question.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-warning.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/collect_icons.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/dcor.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/edit-copy-anew.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/emodulus.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/filter_ray.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/region_channel.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/region_reservoir.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/rlang.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/statistical_significance.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/index.theme +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/splash.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/meta_tool.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/__init__.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/core.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/dataslot.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/filter.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/filter_ray.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/plot.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/session.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope.egg-info/dependency_links.txt +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope.egg-info/entry_points.txt +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/dcscope.egg-info/top_level.txt +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/README.md +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/Readme.md +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/dcscope_icon.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/dcscope_large_white.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/dcscope_large_white.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/dcscope_splash.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/favicon.ico +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/favicon.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/conf.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/data/extension_fl1_density.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/dcscope.bib +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/extensions/fancy_include.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/extensions/github_changelog.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/extensions/rtd_pdf.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/ATTRIBUTION +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/area.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/aspect.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/brightness.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/deform.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/deform.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/fluorescence.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/fluorescence.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/inert_ratio.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/inert_ratio.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_countrate.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_countrate.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_area.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_area.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_porosity.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_porosity.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_ratios.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_ratios.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_time.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_time.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_15um.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_20um.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_30um.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_40um.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/rtdc-setup.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/volume.jpg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/volume.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/index.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/requirements.txt +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/.gitignore +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/CD66+_CD14-.poly +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/Readme.md +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots.sh +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_dcor.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_emodulus.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_export.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_extensions.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_lme4.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_lme4_diff.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_statistics.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_ui.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_dcor_dlg.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_emodulus_badtemp.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_emodulus_config.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_emodulus_feature.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_emodulus_other.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_export_data.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_extensions.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_lme4_diff_init.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_lme4_diff_results.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_lme4_init.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_lme4_results.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_statistics_folder.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_statistics_init.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/scrots.so2 +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_basins.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_filter.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_logs.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_meta.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_plot.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_slot.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_tables.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_block_matrix.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_main.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_qv_event.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_qv_poly.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_qv_settings.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_changelog.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_devs.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_getting_started.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_imprint.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_interface.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_batch_stats.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_consistency_check.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_dcor.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_export_data.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_extensions.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_filtering.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_lme4.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_youngs_modulus.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_quick_guides.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_rtdc_basics.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_z_bib.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/setup.cfg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/README.md +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/artificial_with_image_bg.rtdc +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/blood_rbc_leukocytes.rtdc +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/blood_rbc_qpi_data.rtdc +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/calibration_beads_47.rtdc +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/cytoshot_blood.rtdc +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/empty_recording.rtdc +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/ext_feat_anc_plugin_ca.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/extreme_shear.rtdc +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/naiad-capture_blood_pipeline.rtdc +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/version_2_1_0_basic.so2 +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/version_2_1_2_plot_color_emodulus.so2 +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/version_2_1_6_no_events.so2 +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/version_2_5_0_dcor_lme4.so2 +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/version_2_5_0_dcor_lme4_diff.so2 +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/requirements.txt +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_extensions.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_ana_meta.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_basic.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_update.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_pipeline_core.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_pipeline_filter_ray.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_pipeline_filter_ray_2.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_session.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_util.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/.gitignore +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/Readme.rst +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export.py +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export.so2 +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_log-large-points-export-png_expected.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_log-large-points-export-svg_expected.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-export-png_expected.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-export-svg_expected.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot1-export-png_expected.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot1-export-svg_expected.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot2-export-png_expected.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot2-export-svg_expected.svg +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-long-title-export-png_expected.png +0 -0
- {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/run-tests.sh +0 -0
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
2.26.3
|
|
2
|
+
- enh: fetch QuickView image and trace data in `EventGetterThread`
|
|
3
|
+
- enh: busy indicator in QuickView when event data is fetched in the background
|
|
4
|
+
- ref: new `qv_event_getter` and `qv_image_vis` submodules
|
|
5
|
+
- setup: bump dclab to 0.71.6 (disable file locking, improved DCOR support,
|
|
6
|
+
IndexError during plotting)
|
|
1
7
|
2.26.2
|
|
2
8
|
- reg: filters not applied in final plots since 2.25.1
|
|
3
9
|
- fix: prevent `pipeline.lock` deadlocks via Qt signal cluttering
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dcscope
|
|
3
|
-
Version: 2.26.
|
|
3
|
+
Version: 2.26.3
|
|
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.6
|
|
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.3'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 26, 3)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g9e68b5ca9'
|
|
@@ -251,6 +251,7 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
251
251
|
print(version)
|
|
252
252
|
QtWidgets.QApplication.processEvents(
|
|
253
253
|
QtCore.QEventLoop.ProcessEventsFlag.AllEvents, 300)
|
|
254
|
+
self.close()
|
|
254
255
|
sys.exit(0)
|
|
255
256
|
else:
|
|
256
257
|
# deal with any other arguments that might have been passed
|
|
@@ -390,11 +391,18 @@ class DCscope(QtWidgets.QMainWindow):
|
|
|
390
391
|
self.subwindows_plots[plot_id] = sub
|
|
391
392
|
sub.show()
|
|
392
393
|
|
|
394
|
+
def close(self):
|
|
395
|
+
if self.widget_quick_view is not None:
|
|
396
|
+
self.widget_quick_view.close()
|
|
397
|
+
return super(DCscope, self).close()
|
|
398
|
+
|
|
393
399
|
@QtCore.pyqtSlot(QtCore.QEvent)
|
|
394
400
|
def closeEvent(self, event):
|
|
395
401
|
"""Determine what happens when the user wants to quit"""
|
|
396
402
|
if self.pipeline.slots or self.pipeline.filters:
|
|
397
403
|
if self.on_action_clear():
|
|
404
|
+
if self.widget_quick_view is not None:
|
|
405
|
+
self.widget_quick_view.close()
|
|
398
406
|
event.accept()
|
|
399
407
|
else:
|
|
400
408
|
event.ignore()
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import threading
|
|
3
|
+
import time
|
|
4
|
+
import traceback
|
|
5
|
+
|
|
6
|
+
import dclab
|
|
7
|
+
from dclab.rtdc_dataset import RTDCBase
|
|
8
|
+
import numpy as np
|
|
9
|
+
from PyQt6 import QtCore
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EventGetterThread(QtCore.QThread):
|
|
13
|
+
new_event_data = QtCore.pyqtSignal(dict)
|
|
14
|
+
busy_fetching_data = QtCore.pyqtSignal(bool)
|
|
15
|
+
|
|
16
|
+
def __init__(self, parent):
|
|
17
|
+
super(EventGetterThread, self).__init__(parent)
|
|
18
|
+
self.worker_lock = threading.Lock()
|
|
19
|
+
self.event_abort = threading.Event()
|
|
20
|
+
self.request = (None, None)
|
|
21
|
+
self.prev_request = (None, None)
|
|
22
|
+
self.logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
def close(self):
|
|
25
|
+
self.event_abort.set()
|
|
26
|
+
while self.isRunning():
|
|
27
|
+
time.sleep(0.1)
|
|
28
|
+
|
|
29
|
+
@QtCore.pyqtSlot(RTDCBase, int)
|
|
30
|
+
def request_event_data(self, ds: RTDCBase, event_index: int):
|
|
31
|
+
with self.worker_lock:
|
|
32
|
+
self.request = (ds, event_index)
|
|
33
|
+
|
|
34
|
+
def run(self):
|
|
35
|
+
while not self.event_abort.is_set():
|
|
36
|
+
with self.worker_lock:
|
|
37
|
+
ds, event_index = self.request
|
|
38
|
+
|
|
39
|
+
if self.prev_request == (ds, event_index):
|
|
40
|
+
time.sleep(0.05)
|
|
41
|
+
continue
|
|
42
|
+
|
|
43
|
+
self.prev_request = (ds, event_index)
|
|
44
|
+
|
|
45
|
+
if ds is not None and event_index is not None:
|
|
46
|
+
try:
|
|
47
|
+
self.busy_fetching_data.emit(True)
|
|
48
|
+
event_data = self.get_event_data(ds, event_index)
|
|
49
|
+
self.new_event_data.emit(event_data)
|
|
50
|
+
if self.prev_request == self.request:
|
|
51
|
+
self.busy_fetching_data.emit(False)
|
|
52
|
+
except BaseException:
|
|
53
|
+
self.logger.error(traceback.format_exc())
|
|
54
|
+
else:
|
|
55
|
+
time.sleep(0.01)
|
|
56
|
+
|
|
57
|
+
def get_event_data(self, ds: RTDCBase, event_index: int):
|
|
58
|
+
"""Return all event data relevant for QuickView visualization"""
|
|
59
|
+
data = {}
|
|
60
|
+
data["index"] = event_index
|
|
61
|
+
try:
|
|
62
|
+
# Image data
|
|
63
|
+
for feat in ["image", "image_bg", "mask", "qpi_amp", "qpi_pha"]:
|
|
64
|
+
if feat in ds:
|
|
65
|
+
data[feat] = ds[feat][event_index]
|
|
66
|
+
|
|
67
|
+
# Trace data
|
|
68
|
+
if "trace" in ds:
|
|
69
|
+
try:
|
|
70
|
+
data["traces"] = self.get_event_traces(ds, event_index)
|
|
71
|
+
except BaseException:
|
|
72
|
+
self.logger.error(traceback.format_exc())
|
|
73
|
+
except IndexError:
|
|
74
|
+
if event_index != 0:
|
|
75
|
+
data = self.get_event_data(ds, 0)
|
|
76
|
+
else:
|
|
77
|
+
self.logger.error(traceback.format_exc())
|
|
78
|
+
return data
|
|
79
|
+
|
|
80
|
+
def get_event_traces(self,
|
|
81
|
+
ds: RTDCBase,
|
|
82
|
+
event_index: int,
|
|
83
|
+
):
|
|
84
|
+
"""Return all trace data"""
|
|
85
|
+
tdata = {}
|
|
86
|
+
# time axis
|
|
87
|
+
flsamples = ds.config["fluorescence"]["samples per event"]
|
|
88
|
+
flrate = ds.config["fluorescence"]["sample rate"]
|
|
89
|
+
fltime = np.arange(flsamples) / flrate * 1e6
|
|
90
|
+
tdata["time"] = fltime
|
|
91
|
+
|
|
92
|
+
# fluorescence traces and pos/width/max features
|
|
93
|
+
range_fl = [0, 0]
|
|
94
|
+
for name in dclab.dfn.FLUOR_TRACES:
|
|
95
|
+
flid = name.split("_")[0]
|
|
96
|
+
if name in ds["trace"]:
|
|
97
|
+
# show the trace information
|
|
98
|
+
tracey = ds["trace"][name][event_index] # trace data
|
|
99
|
+
range_fl[0] = min(range_fl[0], tracey.min())
|
|
100
|
+
range_fl[1] = max(range_fl[1], tracey.max())
|
|
101
|
+
tdata[name] = tracey
|
|
102
|
+
for which in ["pos", "width", "max"]:
|
|
103
|
+
feat = f"{flid}_{which}"
|
|
104
|
+
if feat not in tdata:
|
|
105
|
+
tdata[feat] = ds[feat][event_index]
|
|
106
|
+
|
|
107
|
+
return tdata
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
from typing import Literal
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
import pyqtgraph as pg
|
|
5
|
+
from scipy.ndimage import binary_erosion
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
cmap_pha: pg.ColorMap = pg.colormap.get('CET-D1A', skipCache=True)
|
|
9
|
+
cmap_pha_with_black: pg.ColorMap = pg.colormap.get('CET-D1A', skipCache=True)
|
|
10
|
+
cmap_pha_with_black.color[0] = [0, 0, 0, 1]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@staticmethod
|
|
14
|
+
def convert_to_rgb(cell_img):
|
|
15
|
+
"""Add a third axis of length 3 with copies"""
|
|
16
|
+
cell_img = cell_img.reshape(
|
|
17
|
+
cell_img.shape[0], cell_img.shape[1], 1)
|
|
18
|
+
return np.repeat(cell_img, 3, axis=2)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def get_rgb_image(data: dict,
|
|
22
|
+
feat: str,
|
|
23
|
+
zoom: bool = False,
|
|
24
|
+
draw_contour: bool = False,
|
|
25
|
+
auto_contrast: bool = False,
|
|
26
|
+
subtract_background: bool = False,
|
|
27
|
+
) -> tuple[np.ndarray, float, float, pg.ColorMap | None]:
|
|
28
|
+
"""Return a pretty visualization of image data"""
|
|
29
|
+
if feat == "image":
|
|
30
|
+
cmap = None
|
|
31
|
+
cell_img, vmin, vmax = prepare_event_image_image(
|
|
32
|
+
data,
|
|
33
|
+
zoom=zoom,
|
|
34
|
+
draw_contour=draw_contour,
|
|
35
|
+
auto_contrast=auto_contrast,
|
|
36
|
+
subtract_background=subtract_background,
|
|
37
|
+
)
|
|
38
|
+
elif feat == "qpi_amp":
|
|
39
|
+
cmap = None
|
|
40
|
+
cell_img, vmin, vmax = prepare_event_image_qpi_amp(
|
|
41
|
+
data,
|
|
42
|
+
zoom=zoom,
|
|
43
|
+
draw_contour=draw_contour,
|
|
44
|
+
auto_contrast=auto_contrast,
|
|
45
|
+
)
|
|
46
|
+
elif feat == "qpi_pha":
|
|
47
|
+
cell_img, vmin, vmax, cmap = prepare_event_image_qpi_pha(
|
|
48
|
+
data,
|
|
49
|
+
zoom=zoom,
|
|
50
|
+
draw_contour=draw_contour,
|
|
51
|
+
auto_contrast=auto_contrast,
|
|
52
|
+
)
|
|
53
|
+
else:
|
|
54
|
+
raise KeyError(f"Unknown image feature '{feat}'")
|
|
55
|
+
|
|
56
|
+
return cell_img, vmin, vmax, cmap
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def image_insert_contour(cell_img: np.ndarray,
|
|
60
|
+
mask: np.ndarray,
|
|
61
|
+
cmap_levels: tuple[float, float],
|
|
62
|
+
contour_style: Literal["red", "lowest-level"],
|
|
63
|
+
):
|
|
64
|
+
"""Insert contour data in an image"""
|
|
65
|
+
# Compute contour image from mask. If you are wondering
|
|
66
|
+
# whether this is kosher, please take a look at issue #76:
|
|
67
|
+
# https://github.com/DC-analysis/dclab/issues/76
|
|
68
|
+
cont = mask ^ binary_erosion(mask)
|
|
69
|
+
if contour_style == "red":
|
|
70
|
+
vmin, vmax = cmap_levels
|
|
71
|
+
# draw red contour for grayscale images
|
|
72
|
+
ch_red = vmin + (vmax - vmin) * 0.7
|
|
73
|
+
ch_other = vmin
|
|
74
|
+
# assign channel values for contour
|
|
75
|
+
cell_img[cont, 0] = ch_red
|
|
76
|
+
cell_img[cont, 1] = ch_other
|
|
77
|
+
cell_img[cont, 2] = ch_other
|
|
78
|
+
elif contour_style == "lowest-level":
|
|
79
|
+
# use the lowest value from the colormap
|
|
80
|
+
# (used for e.g. phase images)
|
|
81
|
+
cell_img[cont] = cmap_levels[0]
|
|
82
|
+
|
|
83
|
+
return cell_img
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def image_zoom(cell_img, mask):
|
|
87
|
+
"""Zoom in on the image"""
|
|
88
|
+
xv, yv = np.where(mask)
|
|
89
|
+
idminx = xv.min() - 5
|
|
90
|
+
idminy = yv.min() - 5
|
|
91
|
+
idmaxx = xv.max() + 5
|
|
92
|
+
idmaxy = yv.max() + 5
|
|
93
|
+
idminx = idminx if idminx >= 0 else 0
|
|
94
|
+
idminy = idminy if idminy >= 0 else 0
|
|
95
|
+
shx, shy = mask.shape
|
|
96
|
+
idmaxx = idmaxx if idmaxx < shx else shx
|
|
97
|
+
idmaxy = idmaxy if idmaxy < shy else shy
|
|
98
|
+
return cell_img[idminx:idmaxx, idminy:idmaxy]
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def prepare_event_image_image(
|
|
102
|
+
data,
|
|
103
|
+
zoom: bool = False,
|
|
104
|
+
draw_contour: bool = False,
|
|
105
|
+
auto_contrast: bool = False,
|
|
106
|
+
subtract_background: bool = False,
|
|
107
|
+
) -> tuple[np.ndarray, float, float]:
|
|
108
|
+
"""Prepare to draw a regular image event"""
|
|
109
|
+
cell_img = data["image"]
|
|
110
|
+
|
|
111
|
+
if zoom and "mask" in data:
|
|
112
|
+
cell_img = image_zoom(cell_img, data["mask"])
|
|
113
|
+
|
|
114
|
+
# apply background correction
|
|
115
|
+
if subtract_background and "image_bg" in data:
|
|
116
|
+
|
|
117
|
+
bgimg = data["image_bg"].astype(np.int16)
|
|
118
|
+
if zoom and "mask" in data:
|
|
119
|
+
bgimg = image_zoom(bgimg, data["mask"])
|
|
120
|
+
|
|
121
|
+
cell_img = cell_img.astype(np.int16)
|
|
122
|
+
cell_img = cell_img - bgimg + int(np.mean(bgimg))
|
|
123
|
+
|
|
124
|
+
# automatic contrast
|
|
125
|
+
if auto_contrast:
|
|
126
|
+
vmin, vmax = cell_img.min(), cell_img.max()
|
|
127
|
+
else:
|
|
128
|
+
vmin, vmax = (0, 255)
|
|
129
|
+
|
|
130
|
+
cell_img = convert_to_rgb(cell_img)
|
|
131
|
+
|
|
132
|
+
if draw_contour and "mask" in data:
|
|
133
|
+
mask = data["mask"]
|
|
134
|
+
if zoom:
|
|
135
|
+
mask = image_zoom(mask, mask)
|
|
136
|
+
|
|
137
|
+
cell_img = image_insert_contour(
|
|
138
|
+
cell_img,
|
|
139
|
+
mask,
|
|
140
|
+
cmap_levels=(vmin, vmax),
|
|
141
|
+
contour_style="red",
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
return cell_img, vmin, vmax
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def prepare_event_image_qpi_amp(
|
|
148
|
+
data,
|
|
149
|
+
zoom: bool = False,
|
|
150
|
+
draw_contour: bool = False,
|
|
151
|
+
auto_contrast: bool = False,
|
|
152
|
+
) -> tuple[np.ndarray, float, float]:
|
|
153
|
+
"""Prepare to draw a QPI amplitude event image"""
|
|
154
|
+
cell_img = data["qpi_amp"]
|
|
155
|
+
|
|
156
|
+
if zoom and "mask" in data:
|
|
157
|
+
cell_img = image_zoom(cell_img, data["mask"])
|
|
158
|
+
|
|
159
|
+
if auto_contrast:
|
|
160
|
+
vmin, vmax = cell_img.min(), cell_img.max()
|
|
161
|
+
else:
|
|
162
|
+
vmin, vmax = (0, 2)
|
|
163
|
+
|
|
164
|
+
cell_img = convert_to_rgb(cell_img)
|
|
165
|
+
|
|
166
|
+
if draw_contour and "mask" in data:
|
|
167
|
+
mask = data["mask"]
|
|
168
|
+
if zoom:
|
|
169
|
+
mask = image_zoom(mask, mask)
|
|
170
|
+
|
|
171
|
+
cell_img = image_insert_contour(
|
|
172
|
+
cell_img,
|
|
173
|
+
mask,
|
|
174
|
+
cmap_levels=(vmin, vmax),
|
|
175
|
+
contour_style="red",
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
return cell_img, vmin, vmax
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def prepare_event_image_qpi_pha(
|
|
182
|
+
data,
|
|
183
|
+
zoom: bool = False,
|
|
184
|
+
draw_contour: bool = False,
|
|
185
|
+
auto_contrast: bool = False,
|
|
186
|
+
) -> tuple[np.ndarray, float, float, pg.ColorMap]:
|
|
187
|
+
"""Prepare to draw a QPI phase event image"""
|
|
188
|
+
cell_img = np.copy(data["qpi_pha"])
|
|
189
|
+
|
|
190
|
+
if zoom and "mask" in data:
|
|
191
|
+
cell_img = image_zoom(cell_img, data["mask"])
|
|
192
|
+
|
|
193
|
+
if auto_contrast:
|
|
194
|
+
# phase values centered around zero
|
|
195
|
+
vmin_abs, vmax_abs = np.abs(cell_img.min()), np.abs(cell_img.max())
|
|
196
|
+
v_largest = max(vmax_abs, vmin_abs)
|
|
197
|
+
vmin, vmax = -v_largest, v_largest
|
|
198
|
+
else:
|
|
199
|
+
vmin, vmax = (-3.14, 3.14)
|
|
200
|
+
|
|
201
|
+
if draw_contour and "mask" in data:
|
|
202
|
+
# offset required for auto-contrast with contour
|
|
203
|
+
# two times the contrast range, divided by the cmap length
|
|
204
|
+
# this essentially adds a cmap point for our contour
|
|
205
|
+
offset = 2 * ((vmax - vmin) / len(cmap_pha.color))
|
|
206
|
+
vmin -= offset
|
|
207
|
+
|
|
208
|
+
mask = data["mask"]
|
|
209
|
+
if zoom:
|
|
210
|
+
mask = image_zoom(mask, mask)
|
|
211
|
+
|
|
212
|
+
cell_img = image_insert_contour(
|
|
213
|
+
cell_img,
|
|
214
|
+
mask,
|
|
215
|
+
cmap_levels=(vmin, vmax),
|
|
216
|
+
contour_style="lowest-level",
|
|
217
|
+
)
|
|
218
|
+
cmap = cmap_pha_with_black
|
|
219
|
+
else:
|
|
220
|
+
cmap = cmap_pha
|
|
221
|
+
|
|
222
|
+
return cell_img, vmin, vmax, cmap
|