dcscope 2.26.1__tar.gz → 2.26.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. {dcscope-2.26.1 → dcscope-2.26.2}/CHANGELOG +10 -1
  2. {dcscope-2.26.1/dcscope.egg-info → dcscope-2.26.2}/PKG-INFO +2 -2
  3. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/_version.py +3 -3
  4. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_filter.py +3 -3
  5. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_plot.py +62 -45
  6. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_plot.ui +8 -1
  7. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_slot.py +4 -4
  8. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/dlg_slot_reorder.py +1 -2
  9. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/bulk/bulk_emodulus.py +1 -2
  10. dcscope-2.26.2/dcscope/gui/helpers.py +34 -0
  11. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/main.py +9 -17
  12. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_dataset.py +5 -5
  13. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_dataset.ui +33 -46
  14. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_element.py +2 -2
  15. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_filter.py +9 -4
  16. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_filter.ui +23 -66
  17. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/pm_element.py +1 -2
  18. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/pm_plot.py +9 -4
  19. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/pm_plot.ui +14 -37
  20. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/pipeline_plot.py +60 -6
  21. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/preferences.py +1 -1
  22. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/core.py +73 -3
  23. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/filter_ray.py +10 -2
  24. {dcscope-2.26.1 → dcscope-2.26.2/dcscope.egg-info}/PKG-INFO +2 -2
  25. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope.egg-info/SOURCES.txt +1 -0
  26. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope.egg-info/requires.txt +1 -1
  27. {dcscope-2.26.1 → dcscope-2.26.2}/pyproject.toml +1 -1
  28. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_plotting.py +65 -0
  29. dcscope-2.26.2/tests/test_pipeline_filter_ray_2.py +114 -0
  30. dcscope-2.26.1/dcscope/gui/helpers.py +0 -16
  31. {dcscope-2.26.1 → dcscope-2.26.2}/.github/workflows/check.yml +0 -0
  32. {dcscope-2.26.1 → dcscope-2.26.2}/.github/workflows/deploy_github.yml +0 -0
  33. {dcscope-2.26.1 → dcscope-2.26.2}/.github/workflows/deploy_pypi.yml +0 -0
  34. {dcscope-2.26.1 → dcscope-2.26.2}/.gitignore +0 -0
  35. {dcscope-2.26.1 → dcscope-2.26.2}/.readthedocs.yml +0 -0
  36. {dcscope-2.26.1 → dcscope-2.26.2}/LICENSE +0 -0
  37. {dcscope-2.26.1 → dcscope-2.26.2}/MANIFEST.in +0 -0
  38. {dcscope-2.26.1 → dcscope-2.26.2}/README.rst +0 -0
  39. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/DCscope.icns +0 -0
  40. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/DCscope.ico +0 -0
  41. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/DCscopeLauncher.py +0 -0
  42. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/Readme.md +0 -0
  43. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/hook-dcscope.py +0 -0
  44. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/macos_DCscope.spec +0 -0
  45. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/macos_build_app.sh +0 -0
  46. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/macos_build_requirements.txt +0 -0
  47. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/win_DCscope.spec +0 -0
  48. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/win_build_requirements.txt +0 -0
  49. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/win_dcscope.iss_dummy +0 -0
  50. {dcscope-2.26.1 → dcscope-2.26.2}/build-recipes/win_make_iss.py +0 -0
  51. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/__init__.py +0 -0
  52. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/__main__.py +0 -0
  53. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/extensions.py +0 -0
  54. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/__init__.py +0 -0
  55. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/__init__.py +0 -0
  56. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_basins.py +0 -0
  57. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_basins.ui +0 -0
  58. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_filter.ui +0 -0
  59. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_log.py +0 -0
  60. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_log.ui +0 -0
  61. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_meta.py +0 -0
  62. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_meta.ui +0 -0
  63. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_slot.ui +0 -0
  64. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_tables.py +0 -0
  65. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_tables.ui +0 -0
  66. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_view.py +0 -0
  67. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/ana_view.ui +0 -0
  68. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/analysis/dlg_slot_reorder.ui +0 -0
  69. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/bulk/__init__.py +0 -0
  70. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/bulk/bulk_emodulus.ui +0 -0
  71. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/__init__.py +0 -0
  72. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4.py +0 -0
  73. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4.ui +0 -0
  74. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_dataset.py +0 -0
  75. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_dataset.ui +0 -0
  76. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_results.py +0 -0
  77. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_results.ui +0 -0
  78. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_stats.py +0 -0
  79. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/compute/comp_stats.ui +0 -0
  80. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/dcor/__init__.py +0 -0
  81. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/dcor/dcor.ui +0 -0
  82. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/__init__.py +0 -0
  83. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2data.py +0 -0
  84. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2data.ui +0 -0
  85. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2filter.py +0 -0
  86. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2filter.ui +0 -0
  87. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2plot.py +0 -0
  88. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/export/e2plot.ui +0 -0
  89. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/main.ui +0 -0
  90. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/Readme.md +0 -0
  91. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/__init__.py +0 -0
  92. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/block_matrix.py +0 -0
  93. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/block_matrix.ui +0 -0
  94. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/data_matrix.py +0 -0
  95. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/dm_element.ui +0 -0
  96. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/matrix/plot_matrix.py +0 -0
  97. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/pipeline_plot.ui +0 -0
  98. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/preferences.ui +0 -0
  99. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/quick_view/__init__.py +0 -0
  100. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_main.py +0 -0
  101. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_main.ui +0 -0
  102. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_scatter.py +0 -0
  103. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_style.css +0 -0
  104. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/settings.py +0 -0
  105. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/update.py +0 -0
  106. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/__init__.py +0 -0
  107. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/bg_thread.py +0 -0
  108. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/bulk_list.py +0 -0
  109. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/bulk_list.ui +0 -0
  110. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/double_spin_box_nan.py +0 -0
  111. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/feature_combobox.py +0 -0
  112. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/get_path.py +0 -0
  113. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/key_value_table_widget.css +0 -0
  114. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/key_value_table_widget.py +0 -0
  115. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/mdi_subwindow_wo_close.py +0 -0
  116. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/qrangeslider.py +0 -0
  117. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/rangecontrol.py +0 -0
  118. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/rangecontrol.ui +0 -0
  119. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/simple_image_view.py +0 -0
  120. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/simple_plot_widget.py +0 -0
  121. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/so_colorbaritem.py +0 -0
  122. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/gui/widgets/wait_cursor.py +0 -0
  123. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/idiom.py +0 -0
  124. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/__init__.py +0 -0
  125. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/COPYING-ICONS +0 -0
  126. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/COPYING.LIB +0 -0
  127. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/README +0 -0
  128. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/application-exit.svg +0 -0
  129. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/code-context.svg +0 -0
  130. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-cancel.svg +0 -0
  131. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-close.svg +0 -0
  132. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-messages.svg +0 -0
  133. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok-apply.svg +0 -0
  134. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok.svg +0 -0
  135. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/document-open-folder.svg +0 -0
  136. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/document-open.svg +0 -0
  137. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/document-save.svg +0 -0
  138. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/documentinfo.svg +0 -0
  139. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/draw-watercolor.svg +0 -0
  140. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/edit-clear-all.svg +0 -0
  141. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/edit-clear.svg +0 -0
  142. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/edit-paste.svg +0 -0
  143. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/globe.svg +0 -0
  144. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/gtk-preferences.svg +0 -0
  145. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/list-add.svg +0 -0
  146. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/messagebox_warning.svg +0 -0
  147. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/object-columns.svg +0 -0
  148. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/object-order-lower.svg +0 -0
  149. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/object-rows.svg +0 -0
  150. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/office-chart-line-stacked.svg +0 -0
  151. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/office-chart-ring.svg +0 -0
  152. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/office-chart-scatter.svg +0 -0
  153. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/path-mode-polyline.svg +0 -0
  154. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/preferences-activities.svg +0 -0
  155. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/remove.svg +0 -0
  156. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/search.svg +0 -0
  157. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/show-grid.svg +0 -0
  158. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/special_paste.svg +0 -0
  159. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/tools-wizard.svg +0 -0
  160. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-calendar-list.svg +0 -0
  161. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-filter.svg +0 -0
  162. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-list-tree.svg +0 -0
  163. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-statistics.svg +0 -0
  164. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/visibility.svg +0 -0
  165. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/application-exit.svg +0 -0
  166. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/code-context.svg +0 -0
  167. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-cancel.svg +0 -0
  168. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-close.svg +0 -0
  169. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-messages.svg +0 -0
  170. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok-apply.svg +0 -0
  171. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok.svg +0 -0
  172. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/document-open-folder.svg +0 -0
  173. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/document-open.svg +0 -0
  174. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/document-save.svg +0 -0
  175. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/documentinfo.svg +0 -0
  176. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/draw-watercolor.svg +0 -0
  177. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/edit-clear-all.svg +0 -0
  178. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/edit-clear.svg +0 -0
  179. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/edit-paste.svg +0 -0
  180. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/globe.svg +0 -0
  181. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/gtk-preferences.svg +0 -0
  182. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/list-add.svg +0 -0
  183. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/messagebox_warning.svg +0 -0
  184. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/object-columns.svg +0 -0
  185. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/object-order-lower.svg +0 -0
  186. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/object-rows.svg +0 -0
  187. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/office-chart-line-stacked.svg +0 -0
  188. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/office-chart-ring.svg +0 -0
  189. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/office-chart-scatter.svg +0 -0
  190. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/path-mode-polyline.svg +0 -0
  191. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/preferences-activities.svg +0 -0
  192. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/remove.svg +0 -0
  193. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/special_paste.svg +0 -0
  194. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/tools-wizard.svg +0 -0
  195. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-calendar-list.svg +0 -0
  196. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-filter.svg +0 -0
  197. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-list-tree.svg +0 -0
  198. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-statistics.svg +0 -0
  199. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/visibility.svg +0 -0
  200. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/application-exit.svg +0 -0
  201. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/code-context.svg +0 -0
  202. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-cancel.svg +0 -0
  203. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-close.svg +0 -0
  204. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-messages.svg +0 -0
  205. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok-apply.svg +0 -0
  206. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok.svg +0 -0
  207. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/document-open-folder.svg +0 -0
  208. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/document-open.svg +0 -0
  209. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/document-save.svg +0 -0
  210. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/documentinfo.svg +0 -0
  211. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/draw-watercolor.svg +0 -0
  212. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/edit-clear-all.svg +0 -0
  213. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/edit-clear.svg +0 -0
  214. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/edit-paste.svg +0 -0
  215. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/globe.svg +0 -0
  216. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/gtk-preferences.svg +0 -0
  217. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/list-add.svg +0 -0
  218. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/messagebox_warning.svg +0 -0
  219. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/object-columns.svg +0 -0
  220. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/object-order-lower.svg +0 -0
  221. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/object-rows.svg +0 -0
  222. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/office-chart-line-stacked.svg +0 -0
  223. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/office-chart-ring.svg +0 -0
  224. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/office-chart-scatter.svg +0 -0
  225. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/path-mode-polyline.svg +0 -0
  226. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/preferences-activities.svg +0 -0
  227. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/remove.svg +0 -0
  228. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/special_paste.svg +0 -0
  229. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/tools-wizard.svg +0 -0
  230. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-calendar-list.svg +0 -0
  231. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-filter.svg +0 -0
  232. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-list-tree.svg +0 -0
  233. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-statistics.svg +0 -0
  234. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/visibility.svg +0 -0
  235. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/application-exit.svg +0 -0
  236. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-cancel.svg +0 -0
  237. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-messages.svg +0 -0
  238. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok-apply.svg +0 -0
  239. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok.svg +0 -0
  240. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/document-open-folder.svg +0 -0
  241. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/document-open.svg +0 -0
  242. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/document-save.svg +0 -0
  243. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/gtk-preferences.svg +0 -0
  244. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/object-order-lower.svg +0 -0
  245. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/view-filter.svg +0 -0
  246. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/view-list-tree.svg +0 -0
  247. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/16/folder-cloud.svg +0 -0
  248. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/16/folder.svg +0 -0
  249. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/22/folder-cloud.svg +0 -0
  250. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/22/folder.svg +0 -0
  251. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/24/folder-cloud.svg +0 -0
  252. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/24/folder.svg +0 -0
  253. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/32/folder-cloud.svg +0 -0
  254. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/32/folder.svg +0 -0
  255. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/64/folder-cloud.svg +0 -0
  256. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/64/folder.svg +0 -0
  257. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-error.svg +0 -0
  258. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-information.svg +0 -0
  259. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-question.svg +0 -0
  260. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-warning.svg +0 -0
  261. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-error.svg +0 -0
  262. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-information.svg +0 -0
  263. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-question.svg +0 -0
  264. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-warning.svg +0 -0
  265. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-error.svg +0 -0
  266. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-information.svg +0 -0
  267. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-question.svg +0 -0
  268. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-warning.svg +0 -0
  269. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-error.svg +0 -0
  270. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-information.svg +0 -0
  271. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-question.svg +0 -0
  272. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-warning.svg +0 -0
  273. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/collect_icons.py +0 -0
  274. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/dcor.png +0 -0
  275. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/edit-copy-anew.svg +0 -0
  276. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/emodulus.svg +0 -0
  277. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/filter_ray.svg +0 -0
  278. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/region_channel.svg +0 -0
  279. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/region_reservoir.svg +0 -0
  280. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/rlang.svg +0 -0
  281. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/statistical_significance.svg +0 -0
  282. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon-theme/index.theme +0 -0
  283. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/icon.png +0 -0
  284. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/img/splash.png +0 -0
  285. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/meta_tool.py +0 -0
  286. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/__init__.py +0 -0
  287. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/dataslot.py +0 -0
  288. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/filter.py +0 -0
  289. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/pipeline/plot.py +0 -0
  290. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/session.py +0 -0
  291. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope/util.py +0 -0
  292. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope.egg-info/dependency_links.txt +0 -0
  293. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope.egg-info/entry_points.txt +0 -0
  294. {dcscope-2.26.1 → dcscope-2.26.2}/dcscope.egg-info/top_level.txt +0 -0
  295. {dcscope-2.26.1 → dcscope-2.26.2}/docs/README.md +0 -0
  296. {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/Readme.md +0 -0
  297. {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/dcscope_icon.svg +0 -0
  298. {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/dcscope_large_white.png +0 -0
  299. {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/dcscope_large_white.svg +0 -0
  300. {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/dcscope_splash.svg +0 -0
  301. {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/favicon.ico +0 -0
  302. {dcscope-2.26.1 → dcscope-2.26.2}/docs/artwork/favicon.svg +0 -0
  303. {dcscope-2.26.1 → dcscope-2.26.2}/docs/conf.py +0 -0
  304. {dcscope-2.26.1 → dcscope-2.26.2}/docs/data/extension_fl1_density.py +0 -0
  305. {dcscope-2.26.1 → dcscope-2.26.2}/docs/dcscope.bib +0 -0
  306. {dcscope-2.26.1 → dcscope-2.26.2}/docs/extensions/fancy_include.py +0 -0
  307. {dcscope-2.26.1 → dcscope-2.26.2}/docs/extensions/github_changelog.py +0 -0
  308. {dcscope-2.26.1 → dcscope-2.26.2}/docs/extensions/rtd_pdf.py +0 -0
  309. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/ATTRIBUTION +0 -0
  310. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/area.png +0 -0
  311. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/aspect.jpg +0 -0
  312. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/brightness.jpg +0 -0
  313. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/deform.jpg +0 -0
  314. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/deform.py +0 -0
  315. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/fluorescence.jpg +0 -0
  316. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/fluorescence.py +0 -0
  317. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/inert_ratio.jpg +0 -0
  318. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/inert_ratio.py +0 -0
  319. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_countrate.jpg +0 -0
  320. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_countrate.py +0 -0
  321. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_area.jpg +0 -0
  322. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_area.py +0 -0
  323. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_porosity.jpg +0 -0
  324. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_porosity.py +0 -0
  325. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_ratios.jpg +0 -0
  326. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_filter_ratios.py +0 -0
  327. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_time.jpg +0 -0
  328. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_time.py +0 -0
  329. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus.py +0 -0
  330. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_15um.png +0 -0
  331. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_20um.png +0 -0
  332. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_30um.png +0 -0
  333. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_40um.png +0 -0
  334. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/rtdc-setup.jpg +0 -0
  335. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/volume.jpg +0 -0
  336. {dcscope-2.26.1 → dcscope-2.26.2}/docs/figures/volume.py +0 -0
  337. {dcscope-2.26.1 → dcscope-2.26.2}/docs/index.rst +0 -0
  338. {dcscope-2.26.1 → dcscope-2.26.2}/docs/requirements.txt +0 -0
  339. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/.gitignore +0 -0
  340. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/CD66+_CD14-.poly +0 -0
  341. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/Readme.md +0 -0
  342. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots.sh +0 -0
  343. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_dcor.py +0 -0
  344. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_emodulus.py +0 -0
  345. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_export.py +0 -0
  346. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_extensions.py +0 -0
  347. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_lme4.py +0 -0
  348. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_lme4_diff.py +0 -0
  349. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_statistics.py +0 -0
  350. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/make_scrots_ui.py +0 -0
  351. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_dcor_dlg.png +0 -0
  352. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_emodulus_badtemp.png +0 -0
  353. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_emodulus_config.png +0 -0
  354. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_emodulus_feature.png +0 -0
  355. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_emodulus_other.png +0 -0
  356. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_export_data.png +0 -0
  357. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_extensions.png +0 -0
  358. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_lme4_diff_init.png +0 -0
  359. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_lme4_diff_results.png +0 -0
  360. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_lme4_init.png +0 -0
  361. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_lme4_results.png +0 -0
  362. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_statistics_folder.png +0 -0
  363. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/qg_statistics_init.png +0 -0
  364. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/scrots.so2 +0 -0
  365. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_basins.png +0 -0
  366. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_filter.png +0 -0
  367. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_logs.png +0 -0
  368. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_meta.png +0 -0
  369. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_plot.png +0 -0
  370. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_slot.png +0 -0
  371. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_ana_tables.png +0 -0
  372. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_block_matrix.png +0 -0
  373. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_main.png +0 -0
  374. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_qv_event.png +0 -0
  375. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_qv_poly.png +0 -0
  376. {dcscope-2.26.1 → dcscope-2.26.2}/docs/scrots/ui_qv_settings.png +0 -0
  377. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_changelog.rst +0 -0
  378. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_devs.rst +0 -0
  379. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_getting_started.rst +0 -0
  380. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_imprint.rst +0 -0
  381. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_interface.rst +0 -0
  382. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_batch_stats.rst +0 -0
  383. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_consistency_check.rst +0 -0
  384. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_dcor.rst +0 -0
  385. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_export_data.rst +0 -0
  386. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_extensions.rst +0 -0
  387. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_filtering.rst +0 -0
  388. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_lme4.rst +0 -0
  389. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_qg_youngs_modulus.rst +0 -0
  390. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_quick_guides.rst +0 -0
  391. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_rtdc_basics.rst +0 -0
  392. {dcscope-2.26.1 → dcscope-2.26.2}/docs/sec_z_bib.rst +0 -0
  393. {dcscope-2.26.1 → dcscope-2.26.2}/setup.cfg +0 -0
  394. {dcscope-2.26.1 → dcscope-2.26.2}/tests/README.md +0 -0
  395. {dcscope-2.26.1 → dcscope-2.26.2}/tests/conftest.py +0 -0
  396. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/artificial_with_image_bg.rtdc +0 -0
  397. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/blood_rbc_leukocytes.rtdc +0 -0
  398. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/blood_rbc_qpi_data.rtdc +0 -0
  399. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/calibration_beads_47.rtdc +0 -0
  400. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/cytoshot_blood.rtdc +0 -0
  401. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/empty_recording.rtdc +0 -0
  402. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/ext_feat_anc_plugin_ca.py +0 -0
  403. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/extreme_shear.rtdc +0 -0
  404. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/naiad-capture_blood_pipeline.rtdc +0 -0
  405. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/version_2_1_0_basic.so2 +0 -0
  406. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/version_2_1_2_plot_color_emodulus.so2 +0 -0
  407. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/version_2_1_6_no_events.so2 +0 -0
  408. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/version_2_5_0_dcor_lme4.so2 +0 -0
  409. {dcscope-2.26.1 → dcscope-2.26.2}/tests/data/version_2_5_0_dcor_lme4_diff.so2 +0 -0
  410. {dcscope-2.26.1 → dcscope-2.26.2}/tests/requirements.txt +0 -0
  411. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_extensions.py +0 -0
  412. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_ana_meta.py +0 -0
  413. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_basic.py +0 -0
  414. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_bulk_emodulus.py +0 -0
  415. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_compute_lme4.py +0 -0
  416. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_compute_stats.py +0 -0
  417. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_emodulus.py +0 -0
  418. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_export_data.py +0 -0
  419. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_export_filter.py +0 -0
  420. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_export_plot.py +0 -0
  421. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_filter.py +0 -0
  422. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_matrix.py +0 -0
  423. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_pipeline_plot.py +0 -0
  424. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_quickview.py +0 -0
  425. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_reorder_datasets.py +0 -0
  426. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_gui_update.py +0 -0
  427. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_pipeline_core.py +0 -0
  428. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_pipeline_filter_ray.py +0 -0
  429. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_session.py +0 -0
  430. {dcscope-2.26.1 → dcscope-2.26.2}/tests/test_util.py +0 -0
  431. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/.gitignore +0 -0
  432. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/Readme.rst +0 -0
  433. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export.py +0 -0
  434. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export.so2 +0 -0
  435. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_log-large-points-export-png_expected.png +0 -0
  436. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_log-large-points-export-svg_expected.svg +0 -0
  437. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-export-png_expected.png +0 -0
  438. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-export-svg_expected.svg +0 -0
  439. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot1-export-png_expected.png +0 -0
  440. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot1-export-svg_expected.svg +0 -0
  441. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot2-export-png_expected.png +0 -0
  442. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot2-export-svg_expected.svg +0 -0
  443. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/plot-export_scatter-long-title-export-png_expected.png +0 -0
  444. {dcscope-2.26.1 → dcscope-2.26.2}/tests-manual/run-tests.sh +0 -0
@@ -1,3 +1,12 @@
1
+ 2.26.2
2
+ - reg: filters not applied in final plots since 2.25.1
3
+ - fix: prevent `pipeline.lock` deadlocks via Qt signal cluttering
4
+ - fix: update axes ranges when "Auto XY-range" is selected in plotting
5
+ - enh: remember plot size when manually resizing
6
+ - enh: increase default disk store size from 2GB to 9GB
7
+ - enh: reduce delay after selecting axes in the Plot view
8
+ - ref: incorporate `PipelinePlot` into sender-receiver signal pyramid
9
+ - setup: bump dclab to 0.71.2 (disk-caching of DCOR/HTTP/S3 data)
1
10
  2.26.1
2
11
  - fix: possibly fix `KeyError` on hover in QuickView by doing a
3
12
  `GraphicsScene.hoverItems.clear()` whenever something changes (#205)
@@ -52,7 +61,7 @@
52
61
  - enh: improved presentation of multiple datasets with identical sample names
53
62
  - ref: tentative `set_pipeline`, so widgets have direct access to the pipeline
54
63
  - ref: raise ValueError in unreachable case in DataSlot creation
55
- - ref: restructure pipeline management through signaling
64
+ - ref: restructure pipeline management with sender-receiver signal pyramid
56
65
  - ref: move slot, plot, and filter duplication to `Pipeline` class
57
66
  - ref: refer power to Slot/Plot/Filter creation to `Pipeline`
58
67
  - setup: bump pyqtgraph to 0.14.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dcscope
3
- Version: 2.26.1
3
+ Version: 2.26.2
4
4
  Summary: User interface for deformability cytometry (DC)
5
5
  Author: Benedikt Hartmann, Eoghan O'Connell, Maximilian Schlögel, Paul Müller, Raghava Alajangi
6
6
  Maintainer-email: Paul Müller <dev@craban.de>
@@ -16,7 +16,7 @@ Classifier: Intended Audience :: Science/Research
16
16
  Requires-Python: <4,>=3.9
17
17
  Description-Content-Type: text/x-rst
18
18
  License-File: LICENSE
19
- Requires-Dist: dclab[dcor,export,http,s3]>=0.71.1
19
+ Requires-Dist: dclab[dcor,export,http,s3]>=0.71.2
20
20
  Requires-Dist: h5py>=2.8.0
21
21
  Requires-Dist: numpy>=1.21
22
22
  Requires-Dist: pygments
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '2.26.1'
22
- __version_tuple__ = version_tuple = (2, 26, 1)
21
+ __version__ = version = '2.26.2'
22
+ __version_tuple__ = version_tuple = (2, 26, 2)
23
23
 
24
- __commit_id__ = commit_id = 'gd3f120a27'
24
+ __commit_id__ = commit_id = 'ga09ea9064'
@@ -211,7 +211,7 @@ class FilterPanel(QtWidgets.QWidget):
211
211
  with self.pipeline.lock:
212
212
  filt_id = self.current_filter.identifier
213
213
  new_id = self.pipeline.duplicate_filter(filt_id)
214
- 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
 
@@ -384,7 +383,7 @@ class DCscope(QtWidgets.QMainWindow):
384
383
  pw = pipeline_plot.PipelinePlot(parent=sub,
385
384
  pipeline=self.pipeline,
386
385
  plot_id=plot_id)
387
- self.plots_changed.connect(pw.update_content)
386
+ connect_pp_mod_signals(self, pw)
388
387
  sub.setWidget(pw)
389
388
  pw.update_content()
390
389
  self.mdiArea.addSubWindow(sub)
@@ -555,7 +554,7 @@ class DCscope(QtWidgets.QMainWindow):
555
554
  if yes:
556
555
  with self.pipeline.lock:
557
556
  session.clear_session(self.pipeline)
558
- self.pp_mod_send.emit({"pipeline": {"cleared": "full"}})
557
+ self.pp_mod_send.emit({"pipeline": {"cleared": "full"}})
559
558
  self.setWindowTitle(f"DCscope {version}")
560
559
  return yes
561
560
 
@@ -576,8 +575,7 @@ class DCscope(QtWidgets.QMainWindow):
576
575
  slot_ids = list(self.pipeline.slot_ids)
577
576
  for slot_id in slot_ids:
578
577
  self.pipeline.remove_slot(slot_id)
579
- self.pp_mod_send.emit(
580
- {"pipeline": {"slots_removed": slot_ids}})
578
+ self.pp_mod_send.emit({"pipeline": {"slots_removed": slot_ids}})
581
579
  return yes
582
580
 
583
581
  @QtCore.pyqtSlot()
@@ -694,8 +692,8 @@ class DCscope(QtWidgets.QMainWindow):
694
692
  settings.set_dir("filters", path, self.settings)
695
693
  with self.pipeline.lock:
696
694
  session.import_filters(path, self.pipeline)
697
- self.pp_mod_send.emit(
698
- {"pipeline": {"filters_imported": str(path)}})
695
+ self.pp_mod_send.emit(
696
+ {"pipeline": {"filters_imported": str(path)}})
699
697
 
700
698
  @QtCore.pyqtSlot()
701
699
  def on_action_open(self, path=None):
@@ -740,8 +738,7 @@ class DCscope(QtWidgets.QMainWindow):
740
738
  else:
741
739
  break
742
740
  self.show()
743
- self.pp_mod_send.emit(
744
- {"pipeline": {"session_opened": str(path)}})
741
+ self.pp_mod_send.emit({"pipeline": {"session_opened": str(path)}})
745
742
  self.setWindowTitle(
746
743
  f"{pathlib.Path(path).name} [DCscope {version}]")
747
744
 
@@ -921,7 +918,7 @@ class DCscope(QtWidgets.QMainWindow):
921
918
  for child in sub.children():
922
919
  # disconnect signals
923
920
  if isinstance(child, pipeline_plot.PipelinePlot):
924
- self.plots_changed.disconnect(child.update_content)
921
+ disconnect_pp_mod_signals(self, child)
925
922
  break
926
923
  sub.deleteLater()
927
924
 
@@ -945,11 +942,6 @@ class DCscope(QtWidgets.QMainWindow):
945
942
  QtWidgets.QApplication.processEvents(
946
943
  QtCore.QEventLoop.ProcessEventsFlag.AllEvents, 300)
947
944
 
948
- if data.get("pipeline"):
949
- # Update plots after updating block matrix
950
- with widgets.ShowWaitCursor():
951
- self.plots_changed.emit()
952
-
953
945
  # redraw
954
946
  self.mdiArea.update()
955
947
  self.subwindows["analysis_view"].update()
@@ -80,20 +80,20 @@ class MatrixDataset(QtWidgets.QWidget):
80
80
  with self.pipeline.lock:
81
81
  slot_id = self.pipeline.slot_ids[self.slot_index]
82
82
  new_id = self.pipeline.duplicate_slot(slot_id)
83
- 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
 
@@ -31,6 +31,11 @@ class MatrixFilter(QtWidgets.QWidget):
31
31
  menu.addAction('remove', self.action_remove)
32
32
  self.toolButton_opt.setMenu(menu)
33
33
 
34
+ self.setFixedWidth(int(65))
35
+ self.setMinimumWidth(int(65))
36
+ self.setMaximumWidth(int(65))
37
+ self.adjustSize()
38
+
34
39
  # toggle all active, all inactive, semi state
35
40
  self.toolButton_toggle.clicked.connect(self.on_active_toggled)
36
41
 
@@ -81,7 +86,7 @@ class MatrixFilter(QtWidgets.QWidget):
81
86
  filt_plot_id=filter_id,
82
87
  active=self.active
83
88
  )
84
- self.pp_mod_send.emit({"pipeline": {"filter_toggled": filter_id}})
89
+ self.pp_mod_send.emit({"pipeline": {"filter_toggled": filter_id}})
85
90
 
86
91
  @QtCore.pyqtSlot(dict)
87
92
  def on_pp_mod_recv(self, data: dict):
@@ -116,19 +121,19 @@ class MatrixFilter(QtWidgets.QWidget):
116
121
  with self.pipeline.lock:
117
122
  filt_id = self.pipeline.filter_ids[self.filt_index]
118
123
  new_id = self.pipeline.duplicate_filter(filt_id)
119
- self.pp_mod_send.emit({"pipeline": {"filter_added": new_id}})
124
+ self.pp_mod_send.emit({"pipeline": {"filter_added": new_id}})
120
125
 
121
126
  def action_remove(self):
122
127
  with self.pipeline.lock:
123
128
  filter_id = self.pipeline.filter_ids[self.filt_index]
124
129
  self.pipeline.remove_filter(filter_id)
125
- self.pp_mod_send.emit({"pipeline": {"filter_removed": filter_id}})
130
+ self.pp_mod_send.emit({"pipeline": {"filter_removed": filter_id}})
126
131
 
127
132
  def on_enabled_toggled(self, b):
128
133
  with self.pipeline.lock:
129
134
  self.pipeline.filters[self.filt_index].filter_used = b
130
135
  state = "enabled" if b else "disabled"
131
- self.pp_mod_send.emit({"pipeline": {f"filter {state}": b}})
136
+ self.pp_mod_send.emit({"pipeline": {f"filter {state}": b}})
132
137
 
133
138
  def on_modify(self):
134
139
  self.modify_clicked.emit(self.identifier)