dcscope 2.26.0__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 (446) hide show
  1. {dcscope-2.26.0 → dcscope-2.26.2}/CHANGELOG +26 -2
  2. {dcscope-2.26.0/dcscope.egg-info → dcscope-2.26.2}/PKG-INFO +2 -2
  3. dcscope-2.26.2/dcscope/_version.py +24 -0
  4. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_filter.py +4 -4
  5. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_plot.py +107 -96
  6. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_plot.ui +151 -144
  7. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_slot.py +4 -4
  8. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/dlg_slot_reorder.py +1 -2
  9. {dcscope-2.26.0 → 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.0 → dcscope-2.26.2}/dcscope/gui/main.py +62 -45
  12. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/dm_dataset.py +5 -5
  13. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/dm_dataset.ui +33 -46
  14. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/dm_element.py +9 -4
  15. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/dm_filter.py +9 -4
  16. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/dm_filter.ui +23 -66
  17. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/pm_element.py +1 -2
  18. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/pm_plot.py +9 -4
  19. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/pm_plot.ui +14 -37
  20. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/pipeline_plot.py +133 -83
  21. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/preferences.py +49 -13
  22. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/preferences.ui +137 -8
  23. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_main.py +15 -7
  24. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_scatter.py +48 -15
  25. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/idiom.py +1 -7
  26. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/pipeline/core.py +75 -5
  27. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/pipeline/dataslot.py +2 -2
  28. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/pipeline/filter_ray.py +10 -2
  29. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/pipeline/plot.py +16 -6
  30. {dcscope-2.26.0 → dcscope-2.26.2/dcscope.egg-info}/PKG-INFO +2 -2
  31. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope.egg-info/SOURCES.txt +1 -1
  32. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope.egg-info/requires.txt +1 -1
  33. {dcscope-2.26.0 → dcscope-2.26.2}/pyproject.toml +1 -1
  34. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_pipeline_plot.py +0 -71
  35. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_plotting.py +69 -4
  36. dcscope-2.26.2/tests/test_pipeline_filter_ray_2.py +114 -0
  37. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_session.py +26 -3
  38. dcscope-2.26.0/dcscope/_version.py +0 -34
  39. dcscope-2.26.0/dcscope/gui/helpers.py +0 -16
  40. dcscope-2.26.0/dcscope/plotting.py +0 -45
  41. {dcscope-2.26.0 → dcscope-2.26.2}/.github/workflows/check.yml +0 -0
  42. {dcscope-2.26.0 → dcscope-2.26.2}/.github/workflows/deploy_github.yml +0 -0
  43. {dcscope-2.26.0 → dcscope-2.26.2}/.github/workflows/deploy_pypi.yml +0 -0
  44. {dcscope-2.26.0 → dcscope-2.26.2}/.gitignore +0 -0
  45. {dcscope-2.26.0 → dcscope-2.26.2}/.readthedocs.yml +0 -0
  46. {dcscope-2.26.0 → dcscope-2.26.2}/LICENSE +0 -0
  47. {dcscope-2.26.0 → dcscope-2.26.2}/MANIFEST.in +0 -0
  48. {dcscope-2.26.0 → dcscope-2.26.2}/README.rst +0 -0
  49. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/DCscope.icns +0 -0
  50. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/DCscope.ico +0 -0
  51. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/DCscopeLauncher.py +0 -0
  52. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/Readme.md +0 -0
  53. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/hook-dcscope.py +0 -0
  54. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/macos_DCscope.spec +0 -0
  55. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/macos_build_app.sh +0 -0
  56. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/macos_build_requirements.txt +0 -0
  57. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/win_DCscope.spec +0 -0
  58. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/win_build_requirements.txt +0 -0
  59. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/win_dcscope.iss_dummy +0 -0
  60. {dcscope-2.26.0 → dcscope-2.26.2}/build-recipes/win_make_iss.py +0 -0
  61. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/__init__.py +0 -0
  62. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/__main__.py +0 -0
  63. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/extensions.py +0 -0
  64. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/__init__.py +0 -0
  65. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/__init__.py +0 -0
  66. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_basins.py +0 -0
  67. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_basins.ui +0 -0
  68. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_filter.ui +0 -0
  69. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_log.py +0 -0
  70. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_log.ui +0 -0
  71. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_meta.py +0 -0
  72. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_meta.ui +0 -0
  73. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_slot.ui +0 -0
  74. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_tables.py +0 -0
  75. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_tables.ui +0 -0
  76. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_view.py +0 -0
  77. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/ana_view.ui +0 -0
  78. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/analysis/dlg_slot_reorder.ui +0 -0
  79. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/bulk/__init__.py +0 -0
  80. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/bulk/bulk_emodulus.ui +0 -0
  81. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/compute/__init__.py +0 -0
  82. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4.py +0 -0
  83. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4.ui +0 -0
  84. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_dataset.py +0 -0
  85. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_dataset.ui +0 -0
  86. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_results.py +0 -0
  87. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/compute/comp_lme4_results.ui +0 -0
  88. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/compute/comp_stats.py +0 -0
  89. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/compute/comp_stats.ui +0 -0
  90. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/dcor/__init__.py +0 -0
  91. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/dcor/dcor.ui +0 -0
  92. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/export/__init__.py +0 -0
  93. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/export/e2data.py +0 -0
  94. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/export/e2data.ui +0 -0
  95. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/export/e2filter.py +0 -0
  96. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/export/e2filter.ui +0 -0
  97. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/export/e2plot.py +0 -0
  98. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/export/e2plot.ui +0 -0
  99. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/main.ui +0 -0
  100. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/Readme.md +0 -0
  101. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/__init__.py +0 -0
  102. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/block_matrix.py +0 -0
  103. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/block_matrix.ui +0 -0
  104. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/data_matrix.py +0 -0
  105. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/dm_element.ui +0 -0
  106. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/matrix/plot_matrix.py +0 -0
  107. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/pipeline_plot.ui +0 -0
  108. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/quick_view/__init__.py +0 -0
  109. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_main.ui +0 -0
  110. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/quick_view/qv_style.css +0 -0
  111. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/settings.py +0 -0
  112. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/update.py +0 -0
  113. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/__init__.py +0 -0
  114. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/bg_thread.py +0 -0
  115. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/bulk_list.py +0 -0
  116. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/bulk_list.ui +0 -0
  117. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/double_spin_box_nan.py +0 -0
  118. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/feature_combobox.py +0 -0
  119. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/get_path.py +0 -0
  120. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/key_value_table_widget.css +0 -0
  121. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/key_value_table_widget.py +0 -0
  122. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/mdi_subwindow_wo_close.py +0 -0
  123. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/qrangeslider.py +0 -0
  124. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/rangecontrol.py +0 -0
  125. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/rangecontrol.ui +0 -0
  126. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/simple_image_view.py +0 -0
  127. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/simple_plot_widget.py +0 -0
  128. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/so_colorbaritem.py +0 -0
  129. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/gui/widgets/wait_cursor.py +0 -0
  130. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/__init__.py +0 -0
  131. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/COPYING-ICONS +0 -0
  132. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/COPYING.LIB +0 -0
  133. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/README +0 -0
  134. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/application-exit.svg +0 -0
  135. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/code-context.svg +0 -0
  136. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-cancel.svg +0 -0
  137. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-close.svg +0 -0
  138. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-messages.svg +0 -0
  139. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok-apply.svg +0 -0
  140. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok.svg +0 -0
  141. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/document-open-folder.svg +0 -0
  142. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/document-open.svg +0 -0
  143. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/document-save.svg +0 -0
  144. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/documentinfo.svg +0 -0
  145. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/draw-watercolor.svg +0 -0
  146. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/edit-clear-all.svg +0 -0
  147. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/edit-clear.svg +0 -0
  148. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/edit-paste.svg +0 -0
  149. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/globe.svg +0 -0
  150. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/gtk-preferences.svg +0 -0
  151. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/list-add.svg +0 -0
  152. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/messagebox_warning.svg +0 -0
  153. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/object-columns.svg +0 -0
  154. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/object-order-lower.svg +0 -0
  155. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/object-rows.svg +0 -0
  156. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/office-chart-line-stacked.svg +0 -0
  157. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/office-chart-ring.svg +0 -0
  158. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/office-chart-scatter.svg +0 -0
  159. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/path-mode-polyline.svg +0 -0
  160. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/preferences-activities.svg +0 -0
  161. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/remove.svg +0 -0
  162. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/search.svg +0 -0
  163. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/show-grid.svg +0 -0
  164. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/special_paste.svg +0 -0
  165. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/tools-wizard.svg +0 -0
  166. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-calendar-list.svg +0 -0
  167. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-filter.svg +0 -0
  168. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-list-tree.svg +0 -0
  169. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/view-statistics.svg +0 -0
  170. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/16/visibility.svg +0 -0
  171. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/application-exit.svg +0 -0
  172. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/code-context.svg +0 -0
  173. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-cancel.svg +0 -0
  174. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-close.svg +0 -0
  175. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-messages.svg +0 -0
  176. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok-apply.svg +0 -0
  177. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok.svg +0 -0
  178. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/document-open-folder.svg +0 -0
  179. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/document-open.svg +0 -0
  180. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/document-save.svg +0 -0
  181. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/documentinfo.svg +0 -0
  182. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/draw-watercolor.svg +0 -0
  183. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/edit-clear-all.svg +0 -0
  184. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/edit-clear.svg +0 -0
  185. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/edit-paste.svg +0 -0
  186. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/globe.svg +0 -0
  187. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/gtk-preferences.svg +0 -0
  188. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/list-add.svg +0 -0
  189. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/messagebox_warning.svg +0 -0
  190. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/object-columns.svg +0 -0
  191. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/object-order-lower.svg +0 -0
  192. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/object-rows.svg +0 -0
  193. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/office-chart-line-stacked.svg +0 -0
  194. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/office-chart-ring.svg +0 -0
  195. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/office-chart-scatter.svg +0 -0
  196. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/path-mode-polyline.svg +0 -0
  197. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/preferences-activities.svg +0 -0
  198. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/remove.svg +0 -0
  199. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/special_paste.svg +0 -0
  200. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/tools-wizard.svg +0 -0
  201. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-calendar-list.svg +0 -0
  202. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-filter.svg +0 -0
  203. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-list-tree.svg +0 -0
  204. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/view-statistics.svg +0 -0
  205. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/22/visibility.svg +0 -0
  206. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/application-exit.svg +0 -0
  207. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/code-context.svg +0 -0
  208. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-cancel.svg +0 -0
  209. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-close.svg +0 -0
  210. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-messages.svg +0 -0
  211. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok-apply.svg +0 -0
  212. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok.svg +0 -0
  213. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/document-open-folder.svg +0 -0
  214. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/document-open.svg +0 -0
  215. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/document-save.svg +0 -0
  216. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/documentinfo.svg +0 -0
  217. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/draw-watercolor.svg +0 -0
  218. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/edit-clear-all.svg +0 -0
  219. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/edit-clear.svg +0 -0
  220. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/edit-paste.svg +0 -0
  221. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/globe.svg +0 -0
  222. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/gtk-preferences.svg +0 -0
  223. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/list-add.svg +0 -0
  224. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/messagebox_warning.svg +0 -0
  225. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/object-columns.svg +0 -0
  226. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/object-order-lower.svg +0 -0
  227. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/object-rows.svg +0 -0
  228. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/office-chart-line-stacked.svg +0 -0
  229. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/office-chart-ring.svg +0 -0
  230. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/office-chart-scatter.svg +0 -0
  231. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/path-mode-polyline.svg +0 -0
  232. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/preferences-activities.svg +0 -0
  233. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/remove.svg +0 -0
  234. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/special_paste.svg +0 -0
  235. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/tools-wizard.svg +0 -0
  236. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-calendar-list.svg +0 -0
  237. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-filter.svg +0 -0
  238. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-list-tree.svg +0 -0
  239. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/view-statistics.svg +0 -0
  240. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/24/visibility.svg +0 -0
  241. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/application-exit.svg +0 -0
  242. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-cancel.svg +0 -0
  243. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-messages.svg +0 -0
  244. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok-apply.svg +0 -0
  245. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok.svg +0 -0
  246. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/document-open-folder.svg +0 -0
  247. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/document-open.svg +0 -0
  248. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/document-save.svg +0 -0
  249. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/gtk-preferences.svg +0 -0
  250. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/object-order-lower.svg +0 -0
  251. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/view-filter.svg +0 -0
  252. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/actions/32/view-list-tree.svg +0 -0
  253. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/16/folder-cloud.svg +0 -0
  254. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/16/folder.svg +0 -0
  255. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/22/folder-cloud.svg +0 -0
  256. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/22/folder.svg +0 -0
  257. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/24/folder-cloud.svg +0 -0
  258. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/24/folder.svg +0 -0
  259. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/32/folder-cloud.svg +0 -0
  260. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/32/folder.svg +0 -0
  261. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/64/folder-cloud.svg +0 -0
  262. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/places/64/folder.svg +0 -0
  263. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-error.svg +0 -0
  264. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-information.svg +0 -0
  265. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-question.svg +0 -0
  266. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/16/dialog-warning.svg +0 -0
  267. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-error.svg +0 -0
  268. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-information.svg +0 -0
  269. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-question.svg +0 -0
  270. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/22/dialog-warning.svg +0 -0
  271. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-error.svg +0 -0
  272. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-information.svg +0 -0
  273. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-question.svg +0 -0
  274. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/24/dialog-warning.svg +0 -0
  275. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-error.svg +0 -0
  276. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-information.svg +0 -0
  277. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-question.svg +0 -0
  278. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/breeze/status/64/dialog-warning.svg +0 -0
  279. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/collect_icons.py +0 -0
  280. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/dcor.png +0 -0
  281. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/edit-copy-anew.svg +0 -0
  282. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/emodulus.svg +0 -0
  283. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/filter_ray.svg +0 -0
  284. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/region_channel.svg +0 -0
  285. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/region_reservoir.svg +0 -0
  286. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/rlang.svg +0 -0
  287. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/dcscope/statistical_significance.svg +0 -0
  288. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon-theme/index.theme +0 -0
  289. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/icon.png +0 -0
  290. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/img/splash.png +0 -0
  291. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/meta_tool.py +0 -0
  292. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/pipeline/__init__.py +0 -0
  293. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/pipeline/filter.py +0 -0
  294. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/session.py +0 -0
  295. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope/util.py +0 -0
  296. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope.egg-info/dependency_links.txt +0 -0
  297. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope.egg-info/entry_points.txt +0 -0
  298. {dcscope-2.26.0 → dcscope-2.26.2}/dcscope.egg-info/top_level.txt +0 -0
  299. {dcscope-2.26.0 → dcscope-2.26.2}/docs/README.md +0 -0
  300. {dcscope-2.26.0 → dcscope-2.26.2}/docs/artwork/Readme.md +0 -0
  301. {dcscope-2.26.0 → dcscope-2.26.2}/docs/artwork/dcscope_icon.svg +0 -0
  302. {dcscope-2.26.0 → dcscope-2.26.2}/docs/artwork/dcscope_large_white.png +0 -0
  303. {dcscope-2.26.0 → dcscope-2.26.2}/docs/artwork/dcscope_large_white.svg +0 -0
  304. {dcscope-2.26.0 → dcscope-2.26.2}/docs/artwork/dcscope_splash.svg +0 -0
  305. {dcscope-2.26.0 → dcscope-2.26.2}/docs/artwork/favicon.ico +0 -0
  306. {dcscope-2.26.0 → dcscope-2.26.2}/docs/artwork/favicon.svg +0 -0
  307. {dcscope-2.26.0 → dcscope-2.26.2}/docs/conf.py +0 -0
  308. {dcscope-2.26.0 → dcscope-2.26.2}/docs/data/extension_fl1_density.py +0 -0
  309. {dcscope-2.26.0 → dcscope-2.26.2}/docs/dcscope.bib +0 -0
  310. {dcscope-2.26.0 → dcscope-2.26.2}/docs/extensions/fancy_include.py +0 -0
  311. {dcscope-2.26.0 → dcscope-2.26.2}/docs/extensions/github_changelog.py +0 -0
  312. {dcscope-2.26.0 → dcscope-2.26.2}/docs/extensions/rtd_pdf.py +0 -0
  313. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/ATTRIBUTION +0 -0
  314. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/area.png +0 -0
  315. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/aspect.jpg +0 -0
  316. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/brightness.jpg +0 -0
  317. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/deform.jpg +0 -0
  318. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/deform.py +0 -0
  319. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/fluorescence.jpg +0 -0
  320. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/fluorescence.py +0 -0
  321. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/inert_ratio.jpg +0 -0
  322. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/inert_ratio.py +0 -0
  323. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_countrate.jpg +0 -0
  324. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_countrate.py +0 -0
  325. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_filter_area.jpg +0 -0
  326. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_filter_area.py +0 -0
  327. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_filter_porosity.jpg +0 -0
  328. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_filter_porosity.py +0 -0
  329. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_filter_ratios.jpg +0 -0
  330. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_filter_ratios.py +0 -0
  331. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_time.jpg +0 -0
  332. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_time.py +0 -0
  333. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus.py +0 -0
  334. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_15um.png +0 -0
  335. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_20um.png +0 -0
  336. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_30um.png +0 -0
  337. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/qg_youngs_modulus_40um.png +0 -0
  338. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/rtdc-setup.jpg +0 -0
  339. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/volume.jpg +0 -0
  340. {dcscope-2.26.0 → dcscope-2.26.2}/docs/figures/volume.py +0 -0
  341. {dcscope-2.26.0 → dcscope-2.26.2}/docs/index.rst +0 -0
  342. {dcscope-2.26.0 → dcscope-2.26.2}/docs/requirements.txt +0 -0
  343. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/.gitignore +0 -0
  344. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/CD66+_CD14-.poly +0 -0
  345. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/Readme.md +0 -0
  346. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/make_scrots.sh +0 -0
  347. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_dcor.py +0 -0
  348. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_emodulus.py +0 -0
  349. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_export.py +0 -0
  350. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_extensions.py +0 -0
  351. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_lme4.py +0 -0
  352. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_lme4_diff.py +0 -0
  353. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/make_scrots_qg_statistics.py +0 -0
  354. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/make_scrots_ui.py +0 -0
  355. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_dcor_dlg.png +0 -0
  356. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_emodulus_badtemp.png +0 -0
  357. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_emodulus_config.png +0 -0
  358. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_emodulus_feature.png +0 -0
  359. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_emodulus_other.png +0 -0
  360. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_export_data.png +0 -0
  361. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_extensions.png +0 -0
  362. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_lme4_diff_init.png +0 -0
  363. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_lme4_diff_results.png +0 -0
  364. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_lme4_init.png +0 -0
  365. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_lme4_results.png +0 -0
  366. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_statistics_folder.png +0 -0
  367. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/qg_statistics_init.png +0 -0
  368. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/scrots.so2 +0 -0
  369. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_ana_basins.png +0 -0
  370. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_ana_filter.png +0 -0
  371. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_ana_logs.png +0 -0
  372. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_ana_meta.png +0 -0
  373. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_ana_plot.png +0 -0
  374. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_ana_slot.png +0 -0
  375. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_ana_tables.png +0 -0
  376. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_block_matrix.png +0 -0
  377. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_main.png +0 -0
  378. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_qv_event.png +0 -0
  379. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_qv_poly.png +0 -0
  380. {dcscope-2.26.0 → dcscope-2.26.2}/docs/scrots/ui_qv_settings.png +0 -0
  381. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_changelog.rst +0 -0
  382. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_devs.rst +0 -0
  383. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_getting_started.rst +0 -0
  384. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_imprint.rst +0 -0
  385. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_interface.rst +0 -0
  386. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_qg_batch_stats.rst +0 -0
  387. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_qg_consistency_check.rst +0 -0
  388. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_qg_dcor.rst +0 -0
  389. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_qg_export_data.rst +0 -0
  390. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_qg_extensions.rst +0 -0
  391. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_qg_filtering.rst +0 -0
  392. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_qg_lme4.rst +0 -0
  393. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_qg_youngs_modulus.rst +0 -0
  394. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_quick_guides.rst +0 -0
  395. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_rtdc_basics.rst +0 -0
  396. {dcscope-2.26.0 → dcscope-2.26.2}/docs/sec_z_bib.rst +0 -0
  397. {dcscope-2.26.0 → dcscope-2.26.2}/setup.cfg +0 -0
  398. {dcscope-2.26.0 → dcscope-2.26.2}/tests/README.md +0 -0
  399. {dcscope-2.26.0 → dcscope-2.26.2}/tests/conftest.py +0 -0
  400. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/artificial_with_image_bg.rtdc +0 -0
  401. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/blood_rbc_leukocytes.rtdc +0 -0
  402. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/blood_rbc_qpi_data.rtdc +0 -0
  403. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/calibration_beads_47.rtdc +0 -0
  404. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/cytoshot_blood.rtdc +0 -0
  405. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/empty_recording.rtdc +0 -0
  406. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/ext_feat_anc_plugin_ca.py +0 -0
  407. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/extreme_shear.rtdc +0 -0
  408. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/naiad-capture_blood_pipeline.rtdc +0 -0
  409. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/version_2_1_0_basic.so2 +0 -0
  410. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/version_2_1_2_plot_color_emodulus.so2 +0 -0
  411. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/version_2_1_6_no_events.so2 +0 -0
  412. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/version_2_5_0_dcor_lme4.so2 +0 -0
  413. {dcscope-2.26.0 → dcscope-2.26.2}/tests/data/version_2_5_0_dcor_lme4_diff.so2 +0 -0
  414. {dcscope-2.26.0 → dcscope-2.26.2}/tests/requirements.txt +0 -0
  415. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_extensions.py +0 -0
  416. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_ana_meta.py +0 -0
  417. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_basic.py +0 -0
  418. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_bulk_emodulus.py +0 -0
  419. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_compute_lme4.py +0 -0
  420. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_compute_stats.py +0 -0
  421. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_emodulus.py +0 -0
  422. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_export_data.py +0 -0
  423. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_export_filter.py +0 -0
  424. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_export_plot.py +0 -0
  425. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_filter.py +0 -0
  426. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_matrix.py +0 -0
  427. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_quickview.py +0 -0
  428. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_reorder_datasets.py +0 -0
  429. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_gui_update.py +0 -0
  430. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_pipeline_core.py +0 -0
  431. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_pipeline_filter_ray.py +0 -0
  432. {dcscope-2.26.0 → dcscope-2.26.2}/tests/test_util.py +0 -0
  433. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/.gitignore +0 -0
  434. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/Readme.rst +0 -0
  435. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/plot-export.py +0 -0
  436. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/plot-export.so2 +0 -0
  437. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/plot-export_log-large-points-export-png_expected.png +0 -0
  438. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/plot-export_log-large-points-export-svg_expected.svg +0 -0
  439. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-export-png_expected.png +0 -0
  440. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-export-svg_expected.svg +0 -0
  441. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot1-export-png_expected.png +0 -0
  442. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot1-export-svg_expected.svg +0 -0
  443. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot2-export-png_expected.png +0 -0
  444. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/plot-export_scatter-and-contour-subplot2-export-svg_expected.svg +0 -0
  445. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/plot-export_scatter-long-title-export-png_expected.png +0 -0
  446. {dcscope-2.26.0 → dcscope-2.26.2}/tests-manual/run-tests.sh +0 -0
@@ -1,3 +1,27 @@
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)
10
+ 2.26.1
11
+ - fix: possibly fix `KeyError` on hover in QuickView by doing a
12
+ `GraphicsScene.hoverItems.clear()` whenever something changes (#205)
13
+ - fix: disable Block Matrix QuickView selection when QuickView is closed
14
+ - fix: don't update hidden QuickView panel when the pipeline changes
15
+ - fix: don't replot in QuickView when the plot parameters are identical
16
+ - fix: always show event view in QuickView when initialized
17
+ - enh: allow to modify caching settings in the "Advanced" preferences tab
18
+ - enh: joint KDE map for scatter and contour visualization (#111)
19
+ - enh: setup basic logging
20
+ - enh: inform user about unavailable contour data with dclab 0.71.0 (#207)
21
+ - ref: move contour spacing plot settings to "General" section
22
+ - ref: migrate find smooth contour spacing code to dclab
23
+ - ref: remove redundant `plotting` submodule
24
+ - setup: bump dclab to 0.71.1 (smooth contours, joint KDE maps)
1
25
  2.26.0
2
26
  - feat: edit, duplicate and remove polygon filters in the "Filter" view
3
27
  - fix: override-check in filter export did not work
@@ -37,7 +61,7 @@
37
61
  - enh: improved presentation of multiple datasets with identical sample names
38
62
  - ref: tentative `set_pipeline`, so widgets have direct access to the pipeline
39
63
  - ref: raise ValueError in unreachable case in DataSlot creation
40
- - ref: restructure pipeline management through signaling
64
+ - ref: restructure pipeline management with sender-receiver signal pyramid
41
65
  - ref: move slot, plot, and filter duplication to `Pipeline` class
42
66
  - ref: refer power to Slot/Plot/Filter creation to `Pipeline`
43
67
  - setup: bump pyqtgraph to 0.14.0
@@ -584,7 +608,7 @@
584
608
  2.1.0
585
609
  - feat: basic DCOR support
586
610
  - fix: improved session support (older pre-release sessions)
587
- - docs: add DCOR guick guide
611
+ - docs: add DCOR guick guide
588
612
  - enh: export event image via context menu in Quick View (#35)
589
613
  - setup: bump dclab from 0.21.1 to 0.22.1 (DCOR support)
590
614
  2.0.3
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dcscope
3
- Version: 2.26.0
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.69.2
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
@@ -0,0 +1,24 @@
1
+ # file generated by vcs-versioning
2
+ # don't change, don't track in version control
3
+ from __future__ import annotations
4
+
5
+ __all__ = [
6
+ "__version__",
7
+ "__version_tuple__",
8
+ "version",
9
+ "version_tuple",
10
+ "__commit_id__",
11
+ "commit_id",
12
+ ]
13
+
14
+ version: str
15
+ __version__: str
16
+ __version_tuple__: tuple[int | str, ...]
17
+ version_tuple: tuple[int | str, ...]
18
+ commit_id: str | None
19
+ __commit_id__: str | None
20
+
21
+ __version__ = version = '2.26.2'
22
+ __version_tuple__ = version_tuple = (2, 26, 2)
23
+
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"""
@@ -293,7 +293,7 @@ class FilterPanel(QtWidgets.QWidget):
293
293
  self.update_content(filt_index)
294
294
 
295
295
  qv_dict = data.get("quickview")
296
- if qv_dict:
296
+ if qv_dict and qv_dict.get("enabled"):
297
297
  if self.isVisible():
298
298
  # If quickview is clicked, show corresponding filter
299
299
  filt_index = qv_dict.get("filt_index")
@@ -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}})
@@ -1,20 +1,22 @@
1
1
  import importlib.resources
2
+ import logging
2
3
 
3
4
  import dclab
5
+ import dclab.kde.binning
4
6
  import dclab.kde.methods
7
+ import dclab.kde.smooth_contour
5
8
  import numpy as np
6
- from PyQt6 import uic, QtCore, QtWidgets
9
+ from PyQt6 import QtCore, QtWidgets, uic
7
10
 
8
11
  from ...pipeline.plot import STATE_OPTIONS
9
-
10
- from ..pipeline_plot import (
11
- compute_contours, compute_contour_opening_angles, compute_contour_reliable)
12
-
13
12
  from ..widgets import show_wait_cursor
14
13
 
15
14
  COLORMAPS = STATE_OPTIONS["scatter"]["colormap"]
16
15
 
17
16
 
17
+ logger = logging.getLogger(__name__)
18
+
19
+
18
20
  class PlotPanel(QtWidgets.QWidget):
19
21
  # widgets emit these whenever they changed the pipeline
20
22
  pp_mod_send = QtCore.pyqtSignal(dict)
@@ -102,6 +104,8 @@ class PlotPanel(QtWidgets.QWidget):
102
104
  "range y": [ry["start"], ry["end"]],
103
105
  "scale x": self.comboBox_scale_x.currentData(),
104
106
  "scale y": self.comboBox_scale_y.currentData(),
107
+ "spacing x": self.doubleSpinBox_spacing_x.value(),
108
+ "spacing y": self.doubleSpinBox_spacing_y.value(),
105
109
  },
106
110
  "scatter": {
107
111
  "colormap": self.comboBox_colormap.currentData(),
@@ -129,8 +133,6 @@ class PlotPanel(QtWidgets.QWidget):
129
133
  "percentiles": [self.doubleSpinBox_perc_1.value(),
130
134
  self.doubleSpinBox_perc_2.value(),
131
135
  ],
132
- "spacing x": self.doubleSpinBox_spacing_x.value(),
133
- "spacing y": self.doubleSpinBox_spacing_y.value(),
134
136
  }
135
137
  }
136
138
  return state
@@ -210,8 +212,8 @@ class PlotPanel(QtWidgets.QWidget):
210
212
  self.comboBox_ls_1.setCurrentIndex(ls1_index)
211
213
  ls2_index = self.comboBox_ls_2.findData(con["line styles"][1])
212
214
  self.comboBox_ls_2.setCurrentIndex(ls2_index)
213
- self._set_contour_spacing(spacing_x=con["spacing x"],
214
- spacing_y=con["spacing y"])
215
+ self._set_kde_spacing(spacing_x=gen["spacing x"],
216
+ spacing_y=gen["spacing y"])
215
217
  for b in toblock:
216
218
  b.blockSignals(False)
217
219
 
@@ -274,7 +276,7 @@ class PlotPanel(QtWidgets.QWidget):
274
276
  else:
275
277
  self.setEnabled(True)
276
278
  if feat is not None:
277
- lim = self.pipeline.get_min_max(
279
+ lim = self.pipeline.get_min_max_coarse(
278
280
  feat=feat, plot_id=self.current_plot.identifier)
279
281
  if not (np.isinf(lim[0]) or np.isinf(lim[1])):
280
282
  self.widget_range_feat.setLimits(vmin=lim[0], vmax=lim[1])
@@ -305,24 +307,27 @@ class PlotPanel(QtWidgets.QWidget):
305
307
  [self.widget_range_x, self.widget_range_y],
306
308
  ):
307
309
  if axis is not None:
308
- 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)
309
313
  if not (np.isinf(lim[0]) or np.isinf(lim[1])):
310
314
  rc.blockSignals(True)
311
315
  rc.setLimits(vmin=lim[0],
312
316
  vmax=lim[1])
313
317
  if rang is None or rang[0] == rang[1]:
314
318
  # default range is limits + 5% margin
315
- rang = self.pipeline.get_min_max(feat=axis,
316
- plot_id=plot_id,
317
- margin=0.05)
319
+ rang = self.pipeline.get_min_max_coarse(
320
+ feat=axis,
321
+ plot_id=plot_id,
322
+ margin=0.05)
318
323
  rc.write_pipeline_state({"active": True,
319
324
  "start": rang[0],
320
325
  "end": rang[1],
321
326
  })
322
327
  rc.blockSignals(False)
323
328
 
324
- def _set_contour_spacing(self, spacing_x=None, spacing_y=None):
325
- """Set the contour spacing in the spin boxes
329
+ def _set_kde_spacing(self, spacing_x=None, spacing_y=None):
330
+ """Set the KDE spacing in the spin boxes
326
331
 
327
332
  - sets spinbox limits first
328
333
  - sets number of digits
@@ -345,11 +350,8 @@ class PlotPanel(QtWidgets.QWidget):
345
350
  spinBox.setSingleStep(10**(-dec + 1))
346
351
  spinBox.setValue(spacing)
347
352
 
348
- def _set_contour_spacing_auto(self, axis_x=None, axis_y=None):
349
- """automatically set the contour spacing
350
-
351
- - uses :func:`dclab.kde.methods.bin_width_percentile`
352
- - uses _set_contour_spacing
353
+ def _set_kde_spacing_simple(self, axis_x=None, axis_y=None):
354
+ """automatically estimate and set the KDE spacing
353
355
 
354
356
  Not to be confused with `on_spacing_auto`!
355
357
  """
@@ -359,32 +361,28 @@ class PlotPanel(QtWidgets.QWidget):
359
361
  return
360
362
  else:
361
363
  self.setEnabled(True)
362
- dslist, _ = self.pipeline.get_plot_datasets(
363
- self.current_plot.identifier)
364
- if dslist:
365
- spacings_xy = []
366
- for axis, scaleCombo in zip([axis_x, axis_y],
367
- [self.comboBox_scale_x,
368
- self.comboBox_scale_y]):
369
- if axis is None:
370
- # nothing to do
371
- spacings_xy.append(None)
372
- else:
373
- # determine good approximation
374
- spacings = []
375
- for ds in dslist:
376
- spa = ds.get_kde_spacing(
377
- a=ds[axis],
378
- feat=axis,
379
- scale=scaleCombo.currentData(),
380
- method=dclab.kde.methods.bin_width_percentile,
381
- )
382
- spacings.append(spa)
383
- spacings_xy.append(np.min(spacings))
384
- spacing_x, spacing_y = spacings_xy
385
- # sets the limits before setting the value
386
- self._set_contour_spacing(spacing_x=spacing_x,
387
- 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)
388
386
 
389
387
  @property
390
388
  def current_plot(self):
@@ -430,14 +428,14 @@ class PlotPanel(QtWidgets.QWidget):
430
428
  gen = self.read_plot_state()["general"]
431
429
  if self.sender() == self.comboBox_axis_x:
432
430
  self._set_range_xy_state(axis_x=gen["axis x"])
433
- self._set_contour_spacing_auto(axis_x=gen["axis x"])
431
+ self._set_kde_spacing_simple(axis_x=gen["axis x"])
434
432
  elif self.sender() == self.comboBox_axis_y:
435
433
  self._set_range_xy_state(axis_y=gen["axis y"])
436
- self._set_contour_spacing_auto(axis_y=gen["axis y"])
434
+ self._set_kde_spacing_simple(axis_y=gen["axis y"])
437
435
  elif self.sender() == self.comboBox_scale_x:
438
- self._set_contour_spacing_auto(axis_x=gen["axis x"])
436
+ self._set_kde_spacing_simple(axis_x=gen["axis x"])
439
437
  elif self.sender() == self.comboBox_scale_y:
440
- self._set_contour_spacing_auto(axis_y=gen["axis y"])
438
+ self._set_kde_spacing_simple(axis_y=gen["axis y"])
441
439
 
442
440
  @QtCore.pyqtSlot()
443
441
  def on_column_num_changed(self):
@@ -498,21 +496,21 @@ class PlotPanel(QtWidgets.QWidget):
498
496
  with self.pipeline.lock:
499
497
  plot_id = self.current_plot.identifier
500
498
  new_id = self.pipeline.duplicate_plot(plot_id)
501
- self.pp_mod_send.emit({"pipeline": {"plot_created": new_id}})
499
+ self.pp_mod_send.emit({"pipeline": {"plot_created": new_id}})
502
500
 
503
501
  @QtCore.pyqtSlot()
504
502
  def on_plot_removed(self):
505
503
  with self.pipeline.lock:
506
504
  plot_id = self.current_plot.identifier
507
505
  self.pipeline.remove_plot(plot_id)
508
- self.pp_mod_send.emit({"pipeline": {"plot_removed": plot_id}})
506
+ self.pp_mod_send.emit({"pipeline": {"plot_removed": plot_id}})
509
507
 
510
508
  @QtCore.pyqtSlot(dict)
511
509
  def on_pp_mod_recv(self, data):
512
510
  """We received a signal that something changed"""
513
- pp_dict = data.get("pipeline")
514
- if pp_dict:
515
- if self.isVisible():
511
+ if self.isVisible():
512
+ pp_dict = data.get("pipeline", {})
513
+ if "plot_added" in pp_dict:
516
514
  plot_id = pp_dict.get("plot_added")
517
515
  if plot_id is not None:
518
516
  plot_index = self.pipeline.plot_ids.index(plot_id)
@@ -520,57 +518,70 @@ class PlotPanel(QtWidgets.QWidget):
520
518
  plot_index = None
521
519
  self.update_content(plot_index)
522
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
+
523
542
  @QtCore.pyqtSlot()
524
543
  @show_wait_cursor
525
544
  def on_spacing_auto(self):
526
545
  """Iteratively find a good spacing for smooth contours (#110)"""
527
546
  # https://github.com/DC-analysis/DCscope/issues/110
528
547
  plot_id = self.current_plot.identifier
529
- # Get all datasets belonging to this plot.
530
- datasets, _ = self.pipeline.get_plot_datasets(plot_id)
531
548
  state = self.read_plot_state()
532
- gen = state["general"]
533
- # initial guess
534
- # sensible start parameters
535
- self._set_contour_spacing_auto(axis_x=gen["axis x"],
536
- axis_y=gen["axis y"])
537
549
 
538
- # retrieve state with updated spacings
539
- state = self.read_plot_state()
540
- phi_conv = np.deg2rad(23)
541
-
542
- for ii in range(15): # hard-limit is 15 iterations
543
- # maximum difference of opening angle from 180° [rad]
544
- max_dphi = 0
545
- for ds in datasets:
546
- # Compute the contour for the highest percentile of the plot.
547
- state["contour"]["percentiles"] = \
548
- [np.max(state["contour"]["percentiles"])]
549
- cc = compute_contours(plot_state=state, rtdc_ds=ds)[0][0]
550
- if not compute_contour_reliable(
551
- plot_state=state, contour=cc, thresh_ang=phi_conv):
552
- # Compute the opening angle for each point of the cnotour
553
- # and take the point with the largest opening angle.
554
- angles = compute_contour_opening_angles(
555
- plot_state=state, contour=cc)
556
- dphi = np.max(np.abs(angles))
557
- max_dphi = max(max_dphi, np.abs(dphi))
558
- if max_dphi <= phi_conv:
559
- # Normal stopping criterion (opening angle <= 23°)
560
- break
561
- else:
562
- # If the absolute opening angle is too large,
563
- # we assume that we have to reduce the spacing.
564
- state["contour"]["spacing x"] /= 2
565
- state["contour"]["spacing y"] /= 2
550
+ # compute best spacing iteratively
551
+ res = dclab.kde.smooth_contour.find_smooth_contour_spacing(
552
+ # All datasets belonging to this plot.
553
+ ds_list=self.pipeline.get_plot_datasets(plot_id)[0],
554
+ xax=state["general"]["axis x"],
555
+ yax=state["general"]["axis y"],
556
+ xrange=state["general"]["range x"],
557
+ yrange=state["general"]["range y"],
558
+ quantiles=np.array(state["contour"]["percentiles"]) / 100,
559
+ xscale=state["general"]["scale x"],
560
+ yscale=state["general"]["scale y"],
561
+ kde_type="histogram",
562
+ max_iter=15,
563
+ )
564
+
565
+ success = res.get("success", False)
566
+ reason = res.get("reason", "unknown")
567
+ num_iter = res.get("total iterations", np.nan)
568
+ corners_found = res.get("corners found", "unknown")
569
+
570
+ if success:
571
+ logger.info(
572
+ f"Successfully found smooth contour within {num_iter} "
573
+ f"iterations: {reason} ({corners_found=})."
574
+ )
566
575
  else:
567
- raise ValueError(
568
- "Could not automatically determine contour spacing")
576
+ logger.warning(
577
+ f"Failed to find smooth contour within {num_iter} "
578
+ f"iterations: {reason} ({corners_found=})."
579
+ )
569
580
 
570
581
  # set the final spacing
571
582
  new_state = self.read_plot_state()
572
- new_state["contour"]["spacing x"] = state["contour"]["spacing x"]
573
- new_state["contour"]["spacing y"] = state["contour"]["spacing y"]
583
+ new_state["general"]["spacing x"] = res["spacing x"]
584
+ new_state["general"]["spacing y"] = res["spacing y"]
574
585
  self.write_plot_state(new_state)
575
586
 
576
587
  @QtCore.pyqtSlot()
@@ -645,4 +656,4 @@ class PlotPanel(QtWidgets.QWidget):
645
656
  plot_id = plot_state["identifier"]
646
657
  plot_index = self.pipeline.plot_ids.index(plot_id)
647
658
  self.pipeline.plots[plot_index].__setstate__(plot_state)
648
- self.pp_mod_send.emit({"pipeline": {"plot_changed": plot_id}})
659
+ self.pp_mod_send.emit({"pipeline": {"plot_changed": plot_id}})