dcscope 2.26.1__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.
Files changed (446) hide show
  1. {dcscope-2.26.1 → dcscope-2.26.3}/CHANGELOG +16 -1
  2. {dcscope-2.26.1/dcscope.egg-info → dcscope-2.26.3}/PKG-INFO +2 -2
  3. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/_version.py +3 -3
  4. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_filter.py +3 -3
  5. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_plot.py +62 -45
  6. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_plot.ui +8 -1
  7. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_slot.py +4 -4
  8. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/dlg_slot_reorder.py +1 -2
  9. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/bulk/bulk_emodulus.py +1 -2
  10. dcscope-2.26.3/dcscope/gui/helpers.py +34 -0
  11. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/main.py +17 -17
  12. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/dm_dataset.py +5 -5
  13. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/dm_dataset.ui +33 -46
  14. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/dm_element.py +2 -2
  15. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/dm_filter.py +9 -4
  16. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/dm_filter.ui +23 -66
  17. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/pm_element.py +1 -2
  18. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/pm_plot.py +9 -4
  19. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/pm_plot.ui +14 -37
  20. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/pipeline_plot.py +60 -6
  21. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/preferences.py +1 -1
  22. dcscope-2.26.3/dcscope/gui/quick_view/qv_event_getter.py +107 -0
  23. dcscope-2.26.3/dcscope/gui/quick_view/qv_image_vis.py +222 -0
  24. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_main.py +176 -345
  25. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_main.ui +42 -20
  26. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/pipeline/core.py +73 -3
  27. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/pipeline/filter_ray.py +10 -2
  28. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/util.py +17 -0
  29. {dcscope-2.26.1 → dcscope-2.26.3/dcscope.egg-info}/PKG-INFO +2 -2
  30. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope.egg-info/SOURCES.txt +3 -0
  31. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope.egg-info/requires.txt +1 -1
  32. {dcscope-2.26.1 → dcscope-2.26.3}/pyproject.toml +1 -1
  33. {dcscope-2.26.1 → dcscope-2.26.3}/tests/conftest.py +10 -0
  34. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_bulk_emodulus.py +11 -15
  35. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_compute_lme4.py +4 -5
  36. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_compute_stats.py +4 -3
  37. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_emodulus.py +11 -19
  38. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_export_data.py +7 -11
  39. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_export_filter.py +5 -5
  40. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_export_plot.py +3 -3
  41. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_filter.py +7 -11
  42. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_matrix.py +5 -7
  43. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_pipeline_plot.py +1 -0
  44. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_plotting.py +80 -27
  45. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_quickview.py +43 -63
  46. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_reorder_datasets.py +4 -3
  47. dcscope-2.26.3/tests/test_pipeline_filter_ray_2.py +114 -0
  48. dcscope-2.26.1/dcscope/gui/helpers.py +0 -16
  49. {dcscope-2.26.1 → dcscope-2.26.3}/.github/workflows/check.yml +0 -0
  50. {dcscope-2.26.1 → dcscope-2.26.3}/.github/workflows/deploy_github.yml +0 -0
  51. {dcscope-2.26.1 → dcscope-2.26.3}/.github/workflows/deploy_pypi.yml +0 -0
  52. {dcscope-2.26.1 → dcscope-2.26.3}/.gitignore +0 -0
  53. {dcscope-2.26.1 → dcscope-2.26.3}/.readthedocs.yml +0 -0
  54. {dcscope-2.26.1 → dcscope-2.26.3}/LICENSE +0 -0
  55. {dcscope-2.26.1 → dcscope-2.26.3}/MANIFEST.in +0 -0
  56. {dcscope-2.26.1 → dcscope-2.26.3}/README.rst +0 -0
  57. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/DCscope.icns +0 -0
  58. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/DCscope.ico +0 -0
  59. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/DCscopeLauncher.py +0 -0
  60. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/Readme.md +0 -0
  61. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/hook-dcscope.py +0 -0
  62. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/macos_DCscope.spec +0 -0
  63. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/macos_build_app.sh +0 -0
  64. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/macos_build_requirements.txt +0 -0
  65. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/win_DCscope.spec +0 -0
  66. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/win_build_requirements.txt +0 -0
  67. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/win_dcscope.iss_dummy +0 -0
  68. {dcscope-2.26.1 → dcscope-2.26.3}/build-recipes/win_make_iss.py +0 -0
  69. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/__init__.py +0 -0
  70. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/__main__.py +0 -0
  71. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/extensions.py +0 -0
  72. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/__init__.py +0 -0
  73. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/__init__.py +0 -0
  74. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_basins.py +0 -0
  75. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_basins.ui +0 -0
  76. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_filter.ui +0 -0
  77. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_log.py +0 -0
  78. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_log.ui +0 -0
  79. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_meta.py +0 -0
  80. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_meta.ui +0 -0
  81. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_slot.ui +0 -0
  82. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_tables.py +0 -0
  83. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_tables.ui +0 -0
  84. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_view.py +0 -0
  85. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/ana_view.ui +0 -0
  86. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/analysis/dlg_slot_reorder.ui +0 -0
  87. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/bulk/__init__.py +0 -0
  88. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/bulk/bulk_emodulus.ui +0 -0
  89. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/compute/__init__.py +0 -0
  90. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4.py +0 -0
  91. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4.ui +0 -0
  92. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_dataset.py +0 -0
  93. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_dataset.ui +0 -0
  94. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_results.py +0 -0
  95. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_results.ui +0 -0
  96. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/compute/comp_stats.py +0 -0
  97. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/compute/comp_stats.ui +0 -0
  98. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/dcor/__init__.py +0 -0
  99. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/dcor/dcor.ui +0 -0
  100. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/export/__init__.py +0 -0
  101. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/export/e2data.py +0 -0
  102. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/export/e2data.ui +0 -0
  103. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/export/e2filter.py +0 -0
  104. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/export/e2filter.ui +0 -0
  105. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/export/e2plot.py +0 -0
  106. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/export/e2plot.ui +0 -0
  107. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/main.ui +0 -0
  108. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/Readme.md +0 -0
  109. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/__init__.py +0 -0
  110. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/block_matrix.py +0 -0
  111. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/block_matrix.ui +0 -0
  112. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/data_matrix.py +0 -0
  113. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/dm_element.ui +0 -0
  114. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/matrix/plot_matrix.py +0 -0
  115. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/pipeline_plot.ui +0 -0
  116. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/preferences.ui +0 -0
  117. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/quick_view/__init__.py +0 -0
  118. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_scatter.py +0 -0
  119. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_style.css +0 -0
  120. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/settings.py +0 -0
  121. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/update.py +0 -0
  122. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/__init__.py +0 -0
  123. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/bg_thread.py +0 -0
  124. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/bulk_list.py +0 -0
  125. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/bulk_list.ui +0 -0
  126. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/double_spin_box_nan.py +0 -0
  127. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/feature_combobox.py +0 -0
  128. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/get_path.py +0 -0
  129. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/key_value_table_widget.css +0 -0
  130. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/key_value_table_widget.py +0 -0
  131. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/mdi_subwindow_wo_close.py +0 -0
  132. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/qrangeslider.py +0 -0
  133. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/rangecontrol.py +0 -0
  134. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/rangecontrol.ui +0 -0
  135. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/simple_image_view.py +0 -0
  136. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/simple_plot_widget.py +0 -0
  137. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/so_colorbaritem.py +0 -0
  138. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/gui/widgets/wait_cursor.py +0 -0
  139. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/idiom.py +0 -0
  140. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/__init__.py +0 -0
  141. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/COPYING-ICONS +0 -0
  142. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/COPYING.LIB +0 -0
  143. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/README +0 -0
  144. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/application-exit.svg +0 -0
  145. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/code-context.svg +0 -0
  146. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-cancel.svg +0 -0
  147. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-close.svg +0 -0
  148. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-messages.svg +0 -0
  149. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok-apply.svg +0 -0
  150. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok.svg +0 -0
  151. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/document-open-folder.svg +0 -0
  152. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/document-open.svg +0 -0
  153. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/document-save.svg +0 -0
  154. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/documentinfo.svg +0 -0
  155. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/draw-watercolor.svg +0 -0
  156. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/edit-clear-all.svg +0 -0
  157. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/edit-clear.svg +0 -0
  158. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/edit-paste.svg +0 -0
  159. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/globe.svg +0 -0
  160. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/gtk-preferences.svg +0 -0
  161. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/list-add.svg +0 -0
  162. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/messagebox_warning.svg +0 -0
  163. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/object-columns.svg +0 -0
  164. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/object-order-lower.svg +0 -0
  165. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/object-rows.svg +0 -0
  166. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/office-chart-line-stacked.svg +0 -0
  167. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/office-chart-ring.svg +0 -0
  168. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/office-chart-scatter.svg +0 -0
  169. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/path-mode-polyline.svg +0 -0
  170. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/preferences-activities.svg +0 -0
  171. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/remove.svg +0 -0
  172. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/search.svg +0 -0
  173. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/show-grid.svg +0 -0
  174. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/special_paste.svg +0 -0
  175. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/tools-wizard.svg +0 -0
  176. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-calendar-list.svg +0 -0
  177. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-filter.svg +0 -0
  178. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-list-tree.svg +0 -0
  179. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-statistics.svg +0 -0
  180. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/visibility.svg +0 -0
  181. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/application-exit.svg +0 -0
  182. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/code-context.svg +0 -0
  183. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-cancel.svg +0 -0
  184. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-close.svg +0 -0
  185. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-messages.svg +0 -0
  186. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok-apply.svg +0 -0
  187. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok.svg +0 -0
  188. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/document-open-folder.svg +0 -0
  189. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/document-open.svg +0 -0
  190. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/document-save.svg +0 -0
  191. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/documentinfo.svg +0 -0
  192. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/draw-watercolor.svg +0 -0
  193. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/edit-clear-all.svg +0 -0
  194. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/edit-clear.svg +0 -0
  195. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/edit-paste.svg +0 -0
  196. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/globe.svg +0 -0
  197. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/gtk-preferences.svg +0 -0
  198. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/list-add.svg +0 -0
  199. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/messagebox_warning.svg +0 -0
  200. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/object-columns.svg +0 -0
  201. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/object-order-lower.svg +0 -0
  202. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/object-rows.svg +0 -0
  203. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/office-chart-line-stacked.svg +0 -0
  204. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/office-chart-ring.svg +0 -0
  205. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/office-chart-scatter.svg +0 -0
  206. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/path-mode-polyline.svg +0 -0
  207. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/preferences-activities.svg +0 -0
  208. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/remove.svg +0 -0
  209. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/special_paste.svg +0 -0
  210. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/tools-wizard.svg +0 -0
  211. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-calendar-list.svg +0 -0
  212. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-filter.svg +0 -0
  213. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-list-tree.svg +0 -0
  214. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-statistics.svg +0 -0
  215. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/visibility.svg +0 -0
  216. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/application-exit.svg +0 -0
  217. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/code-context.svg +0 -0
  218. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-cancel.svg +0 -0
  219. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-close.svg +0 -0
  220. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-messages.svg +0 -0
  221. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok-apply.svg +0 -0
  222. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok.svg +0 -0
  223. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/document-open-folder.svg +0 -0
  224. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/document-open.svg +0 -0
  225. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/document-save.svg +0 -0
  226. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/documentinfo.svg +0 -0
  227. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/draw-watercolor.svg +0 -0
  228. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/edit-clear-all.svg +0 -0
  229. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/edit-clear.svg +0 -0
  230. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/edit-paste.svg +0 -0
  231. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/globe.svg +0 -0
  232. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/gtk-preferences.svg +0 -0
  233. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/list-add.svg +0 -0
  234. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/messagebox_warning.svg +0 -0
  235. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/object-columns.svg +0 -0
  236. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/object-order-lower.svg +0 -0
  237. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/object-rows.svg +0 -0
  238. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/office-chart-line-stacked.svg +0 -0
  239. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/office-chart-ring.svg +0 -0
  240. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/office-chart-scatter.svg +0 -0
  241. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/path-mode-polyline.svg +0 -0
  242. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/preferences-activities.svg +0 -0
  243. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/remove.svg +0 -0
  244. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/special_paste.svg +0 -0
  245. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/tools-wizard.svg +0 -0
  246. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-calendar-list.svg +0 -0
  247. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-filter.svg +0 -0
  248. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-list-tree.svg +0 -0
  249. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-statistics.svg +0 -0
  250. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/visibility.svg +0 -0
  251. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/application-exit.svg +0 -0
  252. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-cancel.svg +0 -0
  253. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-messages.svg +0 -0
  254. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok-apply.svg +0 -0
  255. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok.svg +0 -0
  256. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/document-open-folder.svg +0 -0
  257. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/document-open.svg +0 -0
  258. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/document-save.svg +0 -0
  259. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/gtk-preferences.svg +0 -0
  260. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/object-order-lower.svg +0 -0
  261. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/view-filter.svg +0 -0
  262. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/view-list-tree.svg +0 -0
  263. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/16/folder-cloud.svg +0 -0
  264. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/16/folder.svg +0 -0
  265. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/22/folder-cloud.svg +0 -0
  266. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/22/folder.svg +0 -0
  267. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/24/folder-cloud.svg +0 -0
  268. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/24/folder.svg +0 -0
  269. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/32/folder-cloud.svg +0 -0
  270. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/32/folder.svg +0 -0
  271. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/64/folder-cloud.svg +0 -0
  272. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/64/folder.svg +0 -0
  273. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-error.svg +0 -0
  274. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-information.svg +0 -0
  275. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-question.svg +0 -0
  276. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-warning.svg +0 -0
  277. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-error.svg +0 -0
  278. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-information.svg +0 -0
  279. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-question.svg +0 -0
  280. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-warning.svg +0 -0
  281. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-error.svg +0 -0
  282. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-information.svg +0 -0
  283. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-question.svg +0 -0
  284. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-warning.svg +0 -0
  285. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-error.svg +0 -0
  286. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-information.svg +0 -0
  287. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-question.svg +0 -0
  288. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-warning.svg +0 -0
  289. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/collect_icons.py +0 -0
  290. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/dcor.png +0 -0
  291. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/edit-copy-anew.svg +0 -0
  292. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/emodulus.svg +0 -0
  293. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/filter_ray.svg +0 -0
  294. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/region_channel.svg +0 -0
  295. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/region_reservoir.svg +0 -0
  296. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/rlang.svg +0 -0
  297. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/statistical_significance.svg +0 -0
  298. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon-theme/index.theme +0 -0
  299. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/icon.png +0 -0
  300. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/img/splash.png +0 -0
  301. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/meta_tool.py +0 -0
  302. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/pipeline/__init__.py +0 -0
  303. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/pipeline/dataslot.py +0 -0
  304. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/pipeline/filter.py +0 -0
  305. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/pipeline/plot.py +0 -0
  306. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope/session.py +0 -0
  307. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope.egg-info/dependency_links.txt +0 -0
  308. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope.egg-info/entry_points.txt +0 -0
  309. {dcscope-2.26.1 → dcscope-2.26.3}/dcscope.egg-info/top_level.txt +0 -0
  310. {dcscope-2.26.1 → dcscope-2.26.3}/docs/README.md +0 -0
  311. {dcscope-2.26.1 → dcscope-2.26.3}/docs/artwork/Readme.md +0 -0
  312. {dcscope-2.26.1 → dcscope-2.26.3}/docs/artwork/dcscope_icon.svg +0 -0
  313. {dcscope-2.26.1 → dcscope-2.26.3}/docs/artwork/dcscope_large_white.png +0 -0
  314. {dcscope-2.26.1 → dcscope-2.26.3}/docs/artwork/dcscope_large_white.svg +0 -0
  315. {dcscope-2.26.1 → dcscope-2.26.3}/docs/artwork/dcscope_splash.svg +0 -0
  316. {dcscope-2.26.1 → dcscope-2.26.3}/docs/artwork/favicon.ico +0 -0
  317. {dcscope-2.26.1 → dcscope-2.26.3}/docs/artwork/favicon.svg +0 -0
  318. {dcscope-2.26.1 → dcscope-2.26.3}/docs/conf.py +0 -0
  319. {dcscope-2.26.1 → dcscope-2.26.3}/docs/data/extension_fl1_density.py +0 -0
  320. {dcscope-2.26.1 → dcscope-2.26.3}/docs/dcscope.bib +0 -0
  321. {dcscope-2.26.1 → dcscope-2.26.3}/docs/extensions/fancy_include.py +0 -0
  322. {dcscope-2.26.1 → dcscope-2.26.3}/docs/extensions/github_changelog.py +0 -0
  323. {dcscope-2.26.1 → dcscope-2.26.3}/docs/extensions/rtd_pdf.py +0 -0
  324. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/ATTRIBUTION +0 -0
  325. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/area.png +0 -0
  326. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/aspect.jpg +0 -0
  327. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/brightness.jpg +0 -0
  328. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/deform.jpg +0 -0
  329. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/deform.py +0 -0
  330. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/fluorescence.jpg +0 -0
  331. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/fluorescence.py +0 -0
  332. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/inert_ratio.jpg +0 -0
  333. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/inert_ratio.py +0 -0
  334. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_countrate.jpg +0 -0
  335. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_countrate.py +0 -0
  336. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_filter_area.jpg +0 -0
  337. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_filter_area.py +0 -0
  338. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_filter_porosity.jpg +0 -0
  339. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_filter_porosity.py +0 -0
  340. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_filter_ratios.jpg +0 -0
  341. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_filter_ratios.py +0 -0
  342. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_time.jpg +0 -0
  343. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_time.py +0 -0
  344. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus.py +0 -0
  345. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_15um.png +0 -0
  346. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_20um.png +0 -0
  347. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_30um.png +0 -0
  348. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_40um.png +0 -0
  349. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/rtdc-setup.jpg +0 -0
  350. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/volume.jpg +0 -0
  351. {dcscope-2.26.1 → dcscope-2.26.3}/docs/figures/volume.py +0 -0
  352. {dcscope-2.26.1 → dcscope-2.26.3}/docs/index.rst +0 -0
  353. {dcscope-2.26.1 → dcscope-2.26.3}/docs/requirements.txt +0 -0
  354. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/.gitignore +0 -0
  355. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/CD66+_CD14-.poly +0 -0
  356. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/Readme.md +0 -0
  357. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/make_scrots.sh +0 -0
  358. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_dcor.py +0 -0
  359. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_emodulus.py +0 -0
  360. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_export.py +0 -0
  361. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_extensions.py +0 -0
  362. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_lme4.py +0 -0
  363. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_lme4_diff.py +0 -0
  364. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_statistics.py +0 -0
  365. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/make_scrots_ui.py +0 -0
  366. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_dcor_dlg.png +0 -0
  367. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_emodulus_badtemp.png +0 -0
  368. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_emodulus_config.png +0 -0
  369. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_emodulus_feature.png +0 -0
  370. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_emodulus_other.png +0 -0
  371. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_export_data.png +0 -0
  372. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_extensions.png +0 -0
  373. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_lme4_diff_init.png +0 -0
  374. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_lme4_diff_results.png +0 -0
  375. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_lme4_init.png +0 -0
  376. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_lme4_results.png +0 -0
  377. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_statistics_folder.png +0 -0
  378. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/qg_statistics_init.png +0 -0
  379. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/scrots.so2 +0 -0
  380. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_ana_basins.png +0 -0
  381. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_ana_filter.png +0 -0
  382. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_ana_logs.png +0 -0
  383. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_ana_meta.png +0 -0
  384. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_ana_plot.png +0 -0
  385. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_ana_slot.png +0 -0
  386. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_ana_tables.png +0 -0
  387. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_block_matrix.png +0 -0
  388. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_main.png +0 -0
  389. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_qv_event.png +0 -0
  390. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_qv_poly.png +0 -0
  391. {dcscope-2.26.1 → dcscope-2.26.3}/docs/scrots/ui_qv_settings.png +0 -0
  392. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_changelog.rst +0 -0
  393. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_devs.rst +0 -0
  394. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_getting_started.rst +0 -0
  395. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_imprint.rst +0 -0
  396. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_interface.rst +0 -0
  397. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_qg_batch_stats.rst +0 -0
  398. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_qg_consistency_check.rst +0 -0
  399. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_qg_dcor.rst +0 -0
  400. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_qg_export_data.rst +0 -0
  401. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_qg_extensions.rst +0 -0
  402. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_qg_filtering.rst +0 -0
  403. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_qg_lme4.rst +0 -0
  404. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_qg_youngs_modulus.rst +0 -0
  405. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_quick_guides.rst +0 -0
  406. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_rtdc_basics.rst +0 -0
  407. {dcscope-2.26.1 → dcscope-2.26.3}/docs/sec_z_bib.rst +0 -0
  408. {dcscope-2.26.1 → dcscope-2.26.3}/setup.cfg +0 -0
  409. {dcscope-2.26.1 → dcscope-2.26.3}/tests/README.md +0 -0
  410. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/artificial_with_image_bg.rtdc +0 -0
  411. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/blood_rbc_leukocytes.rtdc +0 -0
  412. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/blood_rbc_qpi_data.rtdc +0 -0
  413. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/calibration_beads_47.rtdc +0 -0
  414. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/cytoshot_blood.rtdc +0 -0
  415. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/empty_recording.rtdc +0 -0
  416. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/ext_feat_anc_plugin_ca.py +0 -0
  417. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/extreme_shear.rtdc +0 -0
  418. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/naiad-capture_blood_pipeline.rtdc +0 -0
  419. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/version_2_1_0_basic.so2 +0 -0
  420. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/version_2_1_2_plot_color_emodulus.so2 +0 -0
  421. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/version_2_1_6_no_events.so2 +0 -0
  422. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/version_2_5_0_dcor_lme4.so2 +0 -0
  423. {dcscope-2.26.1 → dcscope-2.26.3}/tests/data/version_2_5_0_dcor_lme4_diff.so2 +0 -0
  424. {dcscope-2.26.1 → dcscope-2.26.3}/tests/requirements.txt +0 -0
  425. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_extensions.py +0 -0
  426. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_ana_meta.py +0 -0
  427. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_basic.py +0 -0
  428. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_gui_update.py +0 -0
  429. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_pipeline_core.py +0 -0
  430. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_pipeline_filter_ray.py +0 -0
  431. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_session.py +0 -0
  432. {dcscope-2.26.1 → dcscope-2.26.3}/tests/test_util.py +0 -0
  433. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/.gitignore +0 -0
  434. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/Readme.rst +0 -0
  435. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/plot-export.py +0 -0
  436. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/plot-export.so2 +0 -0
  437. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/plot-export_log-large-points-export-png_expected.png +0 -0
  438. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/plot-export_log-large-points-export-svg_expected.svg +0 -0
  439. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-export-png_expected.png +0 -0
  440. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-export-svg_expected.svg +0 -0
  441. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot1-export-png_expected.png +0 -0
  442. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot1-export-svg_expected.svg +0 -0
  443. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot2-export-png_expected.png +0 -0
  444. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot2-export-svg_expected.svg +0 -0
  445. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/plot-export_scatter-long-title-export-png_expected.png +0 -0
  446. {dcscope-2.26.1 → dcscope-2.26.3}/tests-manual/run-tests.sh +0 -0
@@ -1,3 +1,18 @@
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)
7
+ 2.26.2
8
+ - reg: filters not applied in final plots since 2.25.1
9
+ - fix: prevent `pipeline.lock` deadlocks via Qt signal cluttering
10
+ - fix: update axes ranges when "Auto XY-range" is selected in plotting
11
+ - enh: remember plot size when manually resizing
12
+ - enh: increase default disk store size from 2GB to 9GB
13
+ - enh: reduce delay after selecting axes in the Plot view
14
+ - ref: incorporate `PipelinePlot` into sender-receiver signal pyramid
15
+ - setup: bump dclab to 0.71.2 (disk-caching of DCOR/HTTP/S3 data)
1
16
  2.26.1
2
17
  - fix: possibly fix `KeyError` on hover in QuickView by doing a
3
18
  `GraphicsScene.hoverItems.clear()` whenever something changes (#205)
@@ -52,7 +67,7 @@
52
67
  - enh: improved presentation of multiple datasets with identical sample names
53
68
  - ref: tentative `set_pipeline`, so widgets have direct access to the pipeline
54
69
  - ref: raise ValueError in unreachable case in DataSlot creation
55
- - ref: restructure pipeline management through signaling
70
+ - ref: restructure pipeline management with sender-receiver signal pyramid
56
71
  - ref: move slot, plot, and filter duplication to `Pipeline` class
57
72
  - ref: refer power to Slot/Plot/Filter creation to `Pipeline`
58
73
  - setup: bump pyqtgraph to 0.14.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dcscope
3
- Version: 2.26.1
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.1
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.1'
22
- __version_tuple__ = version_tuple = (2, 26, 1)
21
+ __version__ = version = '2.26.3'
22
+ __version_tuple__ = version_tuple = (2, 26, 3)
23
23
 
24
- __commit_id__ = commit_id = 'gd3f120a27'
24
+ __commit_id__ = commit_id = 'g9e68b5ca9'
@@ -211,7 +211,7 @@ class FilterPanel(QtWidgets.QWidget):
211
211
  with self.pipeline.lock:
212
212
  filt_id = self.current_filter.identifier
213
213
  new_id = self.pipeline.duplicate_filter(filt_id)
214
- self.pp_mod_send.emit({"pipeline": {"filter_added": new_id}})
214
+ self.pp_mod_send.emit({"pipeline": {"filter_added": new_id}})
215
215
 
216
216
  def get_polygon_filter_selection(self):
217
217
  """Return selected polygon filters"""
@@ -309,7 +309,7 @@ class FilterPanel(QtWidgets.QWidget):
309
309
  with self.pipeline.lock:
310
310
  filt_id = self.current_filter.identifier
311
311
  self.pipeline.remove_filter(filt_id)
312
- self.pp_mod_send.emit({"pipeline": {"filter_removed": filt_id}})
312
+ self.pp_mod_send.emit({"pipeline": {"filter_removed": filt_id}})
313
313
 
314
314
  @QtCore.pyqtSlot()
315
315
  def on_moreless(self):
@@ -442,4 +442,4 @@ class FilterPanel(QtWidgets.QWidget):
442
442
  filt_id = filter_state["identifier"]
443
443
  filt_index = self.pipeline.filter_ids.index(filt_id)
444
444
  self.pipeline.filters[filt_index].__setstate__(filter_state)
445
- self.pp_mod_send.emit({"pipeline": {"filter_modified": filt_id}})
445
+ self.pp_mod_send.emit({"pipeline": {"filter_modified": filt_id}})
@@ -276,7 +276,7 @@ class PlotPanel(QtWidgets.QWidget):
276
276
  else:
277
277
  self.setEnabled(True)
278
278
  if feat is not None:
279
- lim = self.pipeline.get_min_max(
279
+ lim = self.pipeline.get_min_max_coarse(
280
280
  feat=feat, plot_id=self.current_plot.identifier)
281
281
  if not (np.isinf(lim[0]) or np.isinf(lim[1])):
282
282
  self.widget_range_feat.setLimits(vmin=lim[0], vmax=lim[1])
@@ -307,16 +307,19 @@ class PlotPanel(QtWidgets.QWidget):
307
307
  [self.widget_range_x, self.widget_range_y],
308
308
  ):
309
309
  if axis is not None:
310
- lim = self.pipeline.get_min_max(feat=axis, plot_id=plot_id)
310
+ lim = self.pipeline.get_min_max_coarse(
311
+ feat=axis,
312
+ plot_id=plot_id)
311
313
  if not (np.isinf(lim[0]) or np.isinf(lim[1])):
312
314
  rc.blockSignals(True)
313
315
  rc.setLimits(vmin=lim[0],
314
316
  vmax=lim[1])
315
317
  if rang is None or rang[0] == rang[1]:
316
318
  # default range is limits + 5% margin
317
- rang = self.pipeline.get_min_max(feat=axis,
318
- plot_id=plot_id,
319
- margin=0.05)
319
+ rang = self.pipeline.get_min_max_coarse(
320
+ feat=axis,
321
+ plot_id=plot_id,
322
+ margin=0.05)
320
323
  rc.write_pipeline_state({"active": True,
321
324
  "start": rang[0],
322
325
  "end": rang[1],
@@ -347,12 +350,9 @@ class PlotPanel(QtWidgets.QWidget):
347
350
  spinBox.setSingleStep(10**(-dec + 1))
348
351
  spinBox.setValue(spacing)
349
352
 
350
- def _set_kde_spacing_auto(self, axis_x=None, axis_y=None):
353
+ def _set_kde_spacing_simple(self, axis_x=None, axis_y=None):
351
354
  """automatically estimate and set the KDE spacing
352
355
 
353
- - uses :func:`dclab.kde.binning.bin_width_percentile`
354
- - uses _set_kde_spacing
355
-
356
356
  Not to be confused with `on_spacing_auto`!
357
357
  """
358
358
  if len(self.pipeline.slots) == 0:
@@ -361,32 +361,28 @@ class PlotPanel(QtWidgets.QWidget):
361
361
  return
362
362
  else:
363
363
  self.setEnabled(True)
364
- dslist, _ = self.pipeline.get_plot_datasets(
365
- self.current_plot.identifier)
366
- if dslist:
367
- spacings_xy = []
368
- for axis, scaleCombo in zip([axis_x, axis_y],
369
- [self.comboBox_scale_x,
370
- self.comboBox_scale_y]):
371
- if axis is None:
372
- # nothing to do
373
- spacings_xy.append(None)
374
- else:
375
- # determine good approximation
376
- spacings = []
377
- for ds in dslist:
378
- spa = ds.get_kde_spacing(
379
- a=ds[axis],
380
- feat=axis,
381
- scale=scaleCombo.currentData(),
382
- method=dclab.kde.binning.bin_width_percentile,
383
- )
384
- spacings.append(spa)
385
- spacings_xy.append(np.min(spacings))
386
- spacing_x, spacing_y = spacings_xy
387
- # sets the limits before setting the value
388
- self._set_kde_spacing(spacing_x=spacing_x,
389
- spacing_y=spacing_y)
364
+
365
+ spacings_xy = []
366
+ for feat, scaleCombo in zip([axis_x, axis_y],
367
+ [self.comboBox_scale_x,
368
+ self.comboBox_scale_y]):
369
+ if feat is None:
370
+ spacings_xy.append(None)
371
+ else:
372
+ vmin, vmax = self.pipeline.get_min_max_coarse(
373
+ feat=feat,
374
+ plot_id=self.current_plot.identifier)
375
+
376
+ if scaleCombo.currentData() == "log":
377
+ vmin = np.log(vmin)
378
+ vmax = np.log(vmax)
379
+
380
+ spacings_xy.append((vmax-vmin)/300)
381
+
382
+ spacing_x, spacing_y = spacings_xy
383
+ # sets the limits before setting the value
384
+ self._set_kde_spacing(spacing_x=spacing_x,
385
+ spacing_y=spacing_y)
390
386
 
391
387
  @property
392
388
  def current_plot(self):
@@ -432,14 +428,14 @@ class PlotPanel(QtWidgets.QWidget):
432
428
  gen = self.read_plot_state()["general"]
433
429
  if self.sender() == self.comboBox_axis_x:
434
430
  self._set_range_xy_state(axis_x=gen["axis x"])
435
- self._set_kde_spacing_auto(axis_x=gen["axis x"])
431
+ self._set_kde_spacing_simple(axis_x=gen["axis x"])
436
432
  elif self.sender() == self.comboBox_axis_y:
437
433
  self._set_range_xy_state(axis_y=gen["axis y"])
438
- self._set_kde_spacing_auto(axis_y=gen["axis y"])
434
+ self._set_kde_spacing_simple(axis_y=gen["axis y"])
439
435
  elif self.sender() == self.comboBox_scale_x:
440
- self._set_kde_spacing_auto(axis_x=gen["axis x"])
436
+ self._set_kde_spacing_simple(axis_x=gen["axis x"])
441
437
  elif self.sender() == self.comboBox_scale_y:
442
- self._set_kde_spacing_auto(axis_y=gen["axis y"])
438
+ self._set_kde_spacing_simple(axis_y=gen["axis y"])
443
439
 
444
440
  @QtCore.pyqtSlot()
445
441
  def on_column_num_changed(self):
@@ -500,21 +496,21 @@ class PlotPanel(QtWidgets.QWidget):
500
496
  with self.pipeline.lock:
501
497
  plot_id = self.current_plot.identifier
502
498
  new_id = self.pipeline.duplicate_plot(plot_id)
503
- self.pp_mod_send.emit({"pipeline": {"plot_created": new_id}})
499
+ self.pp_mod_send.emit({"pipeline": {"plot_created": new_id}})
504
500
 
505
501
  @QtCore.pyqtSlot()
506
502
  def on_plot_removed(self):
507
503
  with self.pipeline.lock:
508
504
  plot_id = self.current_plot.identifier
509
505
  self.pipeline.remove_plot(plot_id)
510
- self.pp_mod_send.emit({"pipeline": {"plot_removed": plot_id}})
506
+ self.pp_mod_send.emit({"pipeline": {"plot_removed": plot_id}})
511
507
 
512
508
  @QtCore.pyqtSlot(dict)
513
509
  def on_pp_mod_recv(self, data):
514
510
  """We received a signal that something changed"""
515
- pp_dict = data.get("pipeline")
516
- if pp_dict:
517
- if self.isVisible():
511
+ if self.isVisible():
512
+ pp_dict = data.get("pipeline", {})
513
+ if "plot_added" in pp_dict:
518
514
  plot_id = pp_dict.get("plot_added")
519
515
  if plot_id is not None:
520
516
  plot_index = self.pipeline.plot_ids.index(plot_id)
@@ -522,6 +518,27 @@ class PlotPanel(QtWidgets.QWidget):
522
518
  plot_index = None
523
519
  self.update_content(plot_index)
524
520
 
521
+ pr_dict = data.get("pipeline-rendering", {})
522
+ if "plot_size_changed" in pr_dict:
523
+ plot_id = pr_dict.get("plot_size_changed")
524
+ plot_index = self.pipeline.plot_ids.index(plot_id)
525
+ state = self.pipeline.plots[plot_index].__getstate__()
526
+ self.spinBox_size_x.setValue(state["layout"]["size x"])
527
+ self.spinBox_size_y.setValue(state["layout"]["size y"])
528
+ elif "plot_range_corrected" in pr_dict:
529
+ plot_id = pr_dict.get("plot_range_corrected")
530
+ plot_index = self.pipeline.plot_ids.index(plot_id)
531
+ state = self.pipeline.plots[plot_index].__getstate__()
532
+ for nm, rc in [("range x", self.widget_range_x),
533
+ ("range y", self.widget_range_y)]:
534
+ rc.blockSignals(True)
535
+ rc.write_pipeline_state({
536
+ "active": True,
537
+ "start": state["general"][nm][0],
538
+ "end": state["general"][nm][1],
539
+ })
540
+ rc.blockSignals(False)
541
+
525
542
  @QtCore.pyqtSlot()
526
543
  @show_wait_cursor
527
544
  def on_spacing_auto(self):
@@ -639,4 +656,4 @@ class PlotPanel(QtWidgets.QWidget):
639
656
  plot_id = plot_state["identifier"]
640
657
  plot_index = self.pipeline.plot_ids.index(plot_id)
641
658
  self.pipeline.plots[plot_index].__setstate__(plot_state)
642
- self.pp_mod_send.emit({"pipeline": {"plot_changed": plot_id}})
659
+ self.pp_mod_send.emit({"pipeline": {"plot_changed": plot_id}})
@@ -301,7 +301,14 @@
301
301
  <item row="4" column="1">
302
302
  <layout class="QHBoxLayout" name="horizontalLayout_8">
303
303
  <item>
304
- <widget class="FeatureComboBox" name="comboBox_axis_y"/>
304
+ <widget class="FeatureComboBox" name="comboBox_axis_y">
305
+ <property name="sizePolicy">
306
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
307
+ <horstretch>0</horstretch>
308
+ <verstretch>0</verstretch>
309
+ </sizepolicy>
310
+ </property>
311
+ </widget>
305
312
  </item>
306
313
  <item>
307
314
  <widget class="QComboBox" name="comboBox_scale_y">
@@ -345,7 +345,7 @@ class SlotPanel(QtWidgets.QWidget):
345
345
  new_id = self.pipeline.add_slot(path=slot_state["path"],
346
346
  index=pos + 1,
347
347
  )
348
- self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
348
+ self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
349
349
 
350
350
  @QtCore.pyqtSlot()
351
351
  def on_duplicate_slot(self):
@@ -353,7 +353,7 @@ class SlotPanel(QtWidgets.QWidget):
353
353
  # determine the new filter state
354
354
  slot_state = self.read_pipeline_state()
355
355
  new_id = self.pipeline.duplicate_slot(slot_state["identifier"])
356
- self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
356
+ self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
357
357
 
358
358
  @QtCore.pyqtSlot(dict)
359
359
  def on_pp_mod_recv(self, data):
@@ -368,7 +368,7 @@ class SlotPanel(QtWidgets.QWidget):
368
368
  slot_state = self.read_pipeline_state()
369
369
  slot_id = slot_state["identifier"]
370
370
  self.pipeline.remove_slot(slot_id)
371
- self.pp_mod_send.emit({"pipeline": {"slot_created": slot_id}})
371
+ self.pp_mod_send.emit({"pipeline": {"slot_created": slot_id}})
372
372
 
373
373
  @QtCore.pyqtSlot()
374
374
  def on_reorder_slots(self):
@@ -505,4 +505,4 @@ class SlotPanel(QtWidgets.QWidget):
505
505
  slot_id = slot_state["identifier"]
506
506
  slot_index = self.pipeline.slot_ids.index(slot_id)
507
507
  self.pipeline.slots[slot_index].__setstate__(slot_state)
508
- self.pp_mod_send.emit({"pipeline": {"slot_changed": slot_id}})
508
+ self.pp_mod_send.emit({"pipeline": {"slot_changed": slot_id}})
@@ -36,8 +36,7 @@ class DlgSlotReorder(QtWidgets.QDialog):
36
36
  # reorder pipeline and send pipeline_changed signal
37
37
  with self.pipeline.lock:
38
38
  self.pipeline.reorder_slots(indices)
39
- self.pp_mod_send.emit(
40
- {"pipeline": {"slot_order_changed": indices}})
39
+ self.pp_mod_send.emit({"pipeline": {"slot_order_changed": indices}})
41
40
 
42
41
  @QtCore.pyqtSlot()
43
42
  def on_move_item(self):
@@ -86,8 +86,7 @@ class BulkActionEmodulus(QtWidgets.QDialog):
86
86
  def on_ok(self):
87
87
  with self.pipeline.lock:
88
88
  self.set_emodulus_properties()
89
- self.pp_mod_send.emit(
90
- {"pipeline": {"feature_changed": "emodulus"}})
89
+ self.pp_mod_send.emit({"pipeline": {"feature_changed": "emodulus"}})
91
90
 
92
91
  @QtCore.pyqtSlot()
93
92
  def on_cb_medium(self):
@@ -0,0 +1,34 @@
1
+ def connect_pp_mod_signals(parent, child):
2
+ """The sender-receiver signal pyramid
3
+
4
+ Each widget that implements the `pp_mod_send` and `pp_mod_recv`
5
+ may be part of the sender-receiver pipeline modifications pyramid.
6
+ The tip of the pyramid is the main class.
7
+ When a widget changes something about the pipeline, it sends a dictionary
8
+ through the `pp_mod_send` signal up the pyramid. At the top of the
9
+ pyramid this signal is connected to the `pp_mod_recv` side of the
10
+ pyramid.
11
+ Every widget can send and receive any kind of pipeline change.
12
+ Receiving widgets are responsible for filtering out what they need.
13
+ This approach makes it easy to synchronize widgets.
14
+ """
15
+ parent.pp_mod_recv.connect(child.pp_mod_recv)
16
+ child.pp_mod_send.connect(parent.pp_mod_send)
17
+
18
+
19
+ def disconnect_pp_mod_signals(parent, child):
20
+ """The sender-receiver signal pyramid
21
+
22
+ Each widget that implements the `pp_mod_send` and `pp_mod_recv`
23
+ may be part of the sender-receiver pipeline modifications pyramid.
24
+ The tip of the pyramid is the main class.
25
+ When a widget changes something about the pipeline, it sends a dictionary
26
+ through the `pp_mod_send` signal up the pyramid. At the top of the
27
+ pyramid this signal is connected to the `pp_mod_recv` side of the
28
+ pyramid.
29
+ Every widget can send and receive any kind of pipeline change.
30
+ Receiving widgets are responsible for filtering out what they need.
31
+ This approach makes it easy to synchronize widgets.
32
+ """
33
+ parent.pp_mod_recv.disconnect(child.pp_mod_recv)
34
+ child.pp_mod_send.disconnect(parent.pp_mod_send)
@@ -35,7 +35,7 @@ from . import (
35
35
  update,
36
36
  widgets,
37
37
  )
38
- from .helpers import connect_pp_mod_signals
38
+ from .helpers import connect_pp_mod_signals, disconnect_pp_mod_signals
39
39
 
40
40
  # global plotting configuration parameters
41
41
  pg.setConfigOption("background", None)
@@ -57,7 +57,6 @@ logger = logging.getLogger(__name__)
57
57
 
58
58
 
59
59
  class DCscope(QtWidgets.QMainWindow):
60
- plots_changed = QtCore.pyqtSignal()
61
60
  # widgets emit these whenever they changed the pipeline
62
61
  pp_mod_send = QtCore.pyqtSignal(dict)
63
62
  # widgets receive these so they can reflect the pipeline changes
@@ -134,7 +133,7 @@ class DCscope(QtWidgets.QMainWindow):
134
133
  store_keeper.set_interval(
135
134
  int(self.settings.value("cache/write interval", "30")))
136
135
  store_keeper.set_disk_store_size_bytes(int(float(
137
- self.settings.value("cache/disk store size", "2")) * 1000**3))
136
+ self.settings.value("cache/disk store size", "9")) * 1000**3))
138
137
  store_keeper.set_memory_store_size(
139
138
  int(self.settings.value("cache/memory num", "200")))
140
139
 
@@ -252,6 +251,7 @@ class DCscope(QtWidgets.QMainWindow):
252
251
  print(version)
253
252
  QtWidgets.QApplication.processEvents(
254
253
  QtCore.QEventLoop.ProcessEventsFlag.AllEvents, 300)
254
+ self.close()
255
255
  sys.exit(0)
256
256
  else:
257
257
  # deal with any other arguments that might have been passed
@@ -384,18 +384,25 @@ class DCscope(QtWidgets.QMainWindow):
384
384
  pw = pipeline_plot.PipelinePlot(parent=sub,
385
385
  pipeline=self.pipeline,
386
386
  plot_id=plot_id)
387
- self.plots_changed.connect(pw.update_content)
387
+ connect_pp_mod_signals(self, pw)
388
388
  sub.setWidget(pw)
389
389
  pw.update_content()
390
390
  self.mdiArea.addSubWindow(sub)
391
391
  self.subwindows_plots[plot_id] = sub
392
392
  sub.show()
393
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
+
394
399
  @QtCore.pyqtSlot(QtCore.QEvent)
395
400
  def closeEvent(self, event):
396
401
  """Determine what happens when the user wants to quit"""
397
402
  if self.pipeline.slots or self.pipeline.filters:
398
403
  if self.on_action_clear():
404
+ if self.widget_quick_view is not None:
405
+ self.widget_quick_view.close()
399
406
  event.accept()
400
407
  else:
401
408
  event.ignore()
@@ -555,7 +562,7 @@ class DCscope(QtWidgets.QMainWindow):
555
562
  if yes:
556
563
  with self.pipeline.lock:
557
564
  session.clear_session(self.pipeline)
558
- self.pp_mod_send.emit({"pipeline": {"cleared": "full"}})
565
+ self.pp_mod_send.emit({"pipeline": {"cleared": "full"}})
559
566
  self.setWindowTitle(f"DCscope {version}")
560
567
  return yes
561
568
 
@@ -576,8 +583,7 @@ class DCscope(QtWidgets.QMainWindow):
576
583
  slot_ids = list(self.pipeline.slot_ids)
577
584
  for slot_id in slot_ids:
578
585
  self.pipeline.remove_slot(slot_id)
579
- self.pp_mod_send.emit(
580
- {"pipeline": {"slots_removed": slot_ids}})
586
+ self.pp_mod_send.emit({"pipeline": {"slots_removed": slot_ids}})
581
587
  return yes
582
588
 
583
589
  @QtCore.pyqtSlot()
@@ -694,8 +700,8 @@ class DCscope(QtWidgets.QMainWindow):
694
700
  settings.set_dir("filters", path, self.settings)
695
701
  with self.pipeline.lock:
696
702
  session.import_filters(path, self.pipeline)
697
- self.pp_mod_send.emit(
698
- {"pipeline": {"filters_imported": str(path)}})
703
+ self.pp_mod_send.emit(
704
+ {"pipeline": {"filters_imported": str(path)}})
699
705
 
700
706
  @QtCore.pyqtSlot()
701
707
  def on_action_open(self, path=None):
@@ -740,8 +746,7 @@ class DCscope(QtWidgets.QMainWindow):
740
746
  else:
741
747
  break
742
748
  self.show()
743
- self.pp_mod_send.emit(
744
- {"pipeline": {"session_opened": str(path)}})
749
+ self.pp_mod_send.emit({"pipeline": {"session_opened": str(path)}})
745
750
  self.setWindowTitle(
746
751
  f"{pathlib.Path(path).name} [DCscope {version}]")
747
752
 
@@ -921,7 +926,7 @@ class DCscope(QtWidgets.QMainWindow):
921
926
  for child in sub.children():
922
927
  # disconnect signals
923
928
  if isinstance(child, pipeline_plot.PipelinePlot):
924
- self.plots_changed.disconnect(child.update_content)
929
+ disconnect_pp_mod_signals(self, child)
925
930
  break
926
931
  sub.deleteLater()
927
932
 
@@ -945,11 +950,6 @@ class DCscope(QtWidgets.QMainWindow):
945
950
  QtWidgets.QApplication.processEvents(
946
951
  QtCore.QEventLoop.ProcessEventsFlag.AllEvents, 300)
947
952
 
948
- if data.get("pipeline"):
949
- # Update plots after updating block matrix
950
- with widgets.ShowWaitCursor():
951
- self.plots_changed.emit()
952
-
953
953
  # redraw
954
954
  self.mdiArea.update()
955
955
  self.subwindows["analysis_view"].update()
@@ -80,20 +80,20 @@ class MatrixDataset(QtWidgets.QWidget):
80
80
  with self.pipeline.lock:
81
81
  slot_id = self.pipeline.slot_ids[self.slot_index]
82
82
  new_id = self.pipeline.duplicate_slot(slot_id)
83
- self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
83
+ self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
84
84
 
85
85
  def action_insert_anew(self):
86
86
  with self.pipeline.lock:
87
87
  new_id = self.pipeline.add_slot(
88
88
  path=self.path,
89
89
  index=self.slot_index+1)
90
- self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
90
+ self.pp_mod_send.emit({"pipeline": {"slot_created": new_id}})
91
91
 
92
92
  def action_remove(self):
93
93
  with self.pipeline.lock:
94
94
  slot_id = self.pipeline.slot_ids[self.slot_index]
95
95
  self.pipeline.remove_slot(slot_id)
96
- self.pp_mod_send.emit({"pipeline": {"slot_removed": slot_id}})
96
+ self.pp_mod_send.emit({"pipeline": {"slot_removed": slot_id}})
97
97
 
98
98
  @QtCore.pyqtSlot()
99
99
  def on_active_toggled(self):
@@ -115,13 +115,13 @@ class MatrixDataset(QtWidgets.QWidget):
115
115
  active=self.active
116
116
  )
117
117
 
118
- self.pp_mod_send.emit({"pipeline": {"slot_toggled": slot_id}})
118
+ self.pp_mod_send.emit({"pipeline": {"slot_toggled": slot_id}})
119
119
 
120
120
  def on_enabled_toggled(self, b):
121
121
  with self.pipeline.lock:
122
122
  self.pipeline.slots[self.slot_index].slot_used = b
123
123
  state = "enabled" if b else "disabled"
124
- self.pp_mod_send.emit({"pipeline": {f"slot {state}": b}})
124
+ self.pp_mod_send.emit({"pipeline": {f"slot {state}": b}})
125
125
 
126
126
  def on_modify(self):
127
127
  self.modify_clicked.emit(self.identifier)
@@ -32,6 +32,9 @@
32
32
  <property name="spacing">
33
33
  <number>0</number>
34
34
  </property>
35
+ <property name="sizeConstraint">
36
+ <enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
37
+ </property>
35
38
  <property name="leftMargin">
36
39
  <number>0</number>
37
40
  </property>
@@ -150,6 +153,36 @@
150
153
  </item>
151
154
  </layout>
152
155
  </item>
156
+ <item>
157
+ <widget class="QToolButton" name="toolButton_modify">
158
+ <property name="sizePolicy">
159
+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
160
+ <horstretch>0</horstretch>
161
+ <verstretch>0</verstretch>
162
+ </sizepolicy>
163
+ </property>
164
+ <property name="font">
165
+ <font>
166
+ <pointsize>9</pointsize>
167
+ </font>
168
+ </property>
169
+ <property name="toolTip">
170
+ <string>Modify this dataset in Analysis View</string>
171
+ </property>
172
+ <property name="text">
173
+ <string>edit</string>
174
+ </property>
175
+ <property name="icon">
176
+ <iconset theme="tools-wizard"/>
177
+ </property>
178
+ <property name="toolButtonStyle">
179
+ <enum>Qt::ToolButtonStyle::ToolButtonTextBesideIcon</enum>
180
+ </property>
181
+ <property name="autoRaise">
182
+ <bool>true</bool>
183
+ </property>
184
+ </widget>
185
+ </item>
153
186
  <item>
154
187
  <widget class="Line" name="line">
155
188
  <property name="styleSheet">
@@ -166,52 +199,6 @@
166
199
  </property>
167
200
  </widget>
168
201
  </item>
169
- <item>
170
- <layout class="QHBoxLayout" name="horizontalLayout_2">
171
- <property name="leftMargin">
172
- <number>0</number>
173
- </property>
174
- <property name="topMargin">
175
- <number>0</number>
176
- </property>
177
- <property name="rightMargin">
178
- <number>0</number>
179
- </property>
180
- <property name="bottomMargin">
181
- <number>0</number>
182
- </property>
183
- <item alignment="Qt::AlignmentFlag::AlignLeft">
184
- <widget class="QToolButton" name="toolButton_modify">
185
- <property name="sizePolicy">
186
- <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
187
- <horstretch>0</horstretch>
188
- <verstretch>0</verstretch>
189
- </sizepolicy>
190
- </property>
191
- <property name="font">
192
- <font>
193
- <pointsize>9</pointsize>
194
- </font>
195
- </property>
196
- <property name="toolTip">
197
- <string>Modify this dataset in Analysis View</string>
198
- </property>
199
- <property name="text">
200
- <string>edit</string>
201
- </property>
202
- <property name="icon">
203
- <iconset theme="tools-wizard"/>
204
- </property>
205
- <property name="toolButtonStyle">
206
- <enum>Qt::ToolButtonStyle::ToolButtonTextBesideIcon</enum>
207
- </property>
208
- <property name="autoRaise">
209
- <bool>true</bool>
210
- </property>
211
- </widget>
212
- </item>
213
- </layout>
214
- </item>
215
202
  <item>
216
203
  <layout class="QHBoxLayout" name="horizontalLayout">
217
204
  <property name="spacing">
@@ -51,8 +51,8 @@ class DataMatrixElement(QtWidgets.QWidget):
51
51
  self.pipeline.set_element_active(slot_id,
52
52
  filter_id,
53
53
  not self.active)
54
- self.pp_mod_send.emit(
55
- {"pipeline": {"filter_ray_change": slot_id}})
54
+ self.pp_mod_send.emit(
55
+ {"pipeline": {"filter_ray_change": slot_id}})
56
56
 
57
57
  event.accept()
58
58