dcscope 2.26.2__tar.gz → 2.26.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. {dcscope-2.26.2 → dcscope-2.26.3}/CHANGELOG +6 -0
  2. {dcscope-2.26.2/dcscope.egg-info → dcscope-2.26.3}/PKG-INFO +2 -2
  3. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/_version.py +3 -3
  4. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/main.py +8 -0
  5. dcscope-2.26.3/dcscope/gui/quick_view/qv_event_getter.py +107 -0
  6. dcscope-2.26.3/dcscope/gui/quick_view/qv_image_vis.py +222 -0
  7. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_main.py +176 -345
  8. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_main.ui +42 -20
  9. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/util.py +17 -0
  10. {dcscope-2.26.2 → dcscope-2.26.3/dcscope.egg-info}/PKG-INFO +2 -2
  11. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope.egg-info/SOURCES.txt +2 -0
  12. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope.egg-info/requires.txt +1 -1
  13. {dcscope-2.26.2 → dcscope-2.26.3}/pyproject.toml +1 -1
  14. {dcscope-2.26.2 → dcscope-2.26.3}/tests/conftest.py +10 -0
  15. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_bulk_emodulus.py +11 -15
  16. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_compute_lme4.py +4 -5
  17. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_compute_stats.py +4 -3
  18. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_emodulus.py +11 -19
  19. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_export_data.py +7 -11
  20. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_export_filter.py +5 -5
  21. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_export_plot.py +3 -3
  22. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_filter.py +7 -11
  23. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_matrix.py +5 -7
  24. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_pipeline_plot.py +1 -0
  25. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_plotting.py +17 -29
  26. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_quickview.py +43 -63
  27. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_reorder_datasets.py +4 -3
  28. {dcscope-2.26.2 → dcscope-2.26.3}/.github/workflows/check.yml +0 -0
  29. {dcscope-2.26.2 → dcscope-2.26.3}/.github/workflows/deploy_github.yml +0 -0
  30. {dcscope-2.26.2 → dcscope-2.26.3}/.github/workflows/deploy_pypi.yml +0 -0
  31. {dcscope-2.26.2 → dcscope-2.26.3}/.gitignore +0 -0
  32. {dcscope-2.26.2 → dcscope-2.26.3}/.readthedocs.yml +0 -0
  33. {dcscope-2.26.2 → dcscope-2.26.3}/LICENSE +0 -0
  34. {dcscope-2.26.2 → dcscope-2.26.3}/MANIFEST.in +0 -0
  35. {dcscope-2.26.2 → dcscope-2.26.3}/README.rst +0 -0
  36. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/DCscope.icns +0 -0
  37. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/DCscope.ico +0 -0
  38. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/DCscopeLauncher.py +0 -0
  39. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/Readme.md +0 -0
  40. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/hook-dcscope.py +0 -0
  41. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/macos_DCscope.spec +0 -0
  42. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/macos_build_app.sh +0 -0
  43. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/macos_build_requirements.txt +0 -0
  44. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/win_DCscope.spec +0 -0
  45. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/win_build_requirements.txt +0 -0
  46. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/win_dcscope.iss_dummy +0 -0
  47. {dcscope-2.26.2 → dcscope-2.26.3}/build-recipes/win_make_iss.py +0 -0
  48. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/__init__.py +0 -0
  49. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/__main__.py +0 -0
  50. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/extensions.py +0 -0
  51. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/__init__.py +0 -0
  52. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/__init__.py +0 -0
  53. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_basins.py +0 -0
  54. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_basins.ui +0 -0
  55. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_filter.py +0 -0
  56. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_filter.ui +0 -0
  57. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_log.py +0 -0
  58. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_log.ui +0 -0
  59. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_meta.py +0 -0
  60. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_meta.ui +0 -0
  61. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_plot.py +0 -0
  62. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_plot.ui +0 -0
  63. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_slot.py +0 -0
  64. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_slot.ui +0 -0
  65. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_tables.py +0 -0
  66. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_tables.ui +0 -0
  67. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_view.py +0 -0
  68. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/ana_view.ui +0 -0
  69. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/dlg_slot_reorder.py +0 -0
  70. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/analysis/dlg_slot_reorder.ui +0 -0
  71. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/bulk/__init__.py +0 -0
  72. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/bulk/bulk_emodulus.py +0 -0
  73. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/bulk/bulk_emodulus.ui +0 -0
  74. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/__init__.py +0 -0
  75. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4.py +0 -0
  76. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4.ui +0 -0
  77. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_dataset.py +0 -0
  78. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_dataset.ui +0 -0
  79. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_results.py +0 -0
  80. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_lme4_results.ui +0 -0
  81. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_stats.py +0 -0
  82. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/compute/comp_stats.ui +0 -0
  83. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/dcor/__init__.py +0 -0
  84. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/dcor/dcor.ui +0 -0
  85. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/__init__.py +0 -0
  86. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2data.py +0 -0
  87. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2data.ui +0 -0
  88. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2filter.py +0 -0
  89. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2filter.ui +0 -0
  90. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2plot.py +0 -0
  91. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/export/e2plot.ui +0 -0
  92. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/helpers.py +0 -0
  93. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/main.ui +0 -0
  94. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/Readme.md +0 -0
  95. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/__init__.py +0 -0
  96. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/block_matrix.py +0 -0
  97. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/block_matrix.ui +0 -0
  98. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/data_matrix.py +0 -0
  99. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_dataset.py +0 -0
  100. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_dataset.ui +0 -0
  101. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_element.py +0 -0
  102. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_element.ui +0 -0
  103. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_filter.py +0 -0
  104. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/dm_filter.ui +0 -0
  105. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/plot_matrix.py +0 -0
  106. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/pm_element.py +0 -0
  107. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/pm_plot.py +0 -0
  108. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/matrix/pm_plot.ui +0 -0
  109. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/pipeline_plot.py +0 -0
  110. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/pipeline_plot.ui +0 -0
  111. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/preferences.py +0 -0
  112. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/preferences.ui +0 -0
  113. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/quick_view/__init__.py +0 -0
  114. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_scatter.py +0 -0
  115. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/quick_view/qv_style.css +0 -0
  116. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/settings.py +0 -0
  117. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/update.py +0 -0
  118. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/__init__.py +0 -0
  119. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/bg_thread.py +0 -0
  120. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/bulk_list.py +0 -0
  121. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/bulk_list.ui +0 -0
  122. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/double_spin_box_nan.py +0 -0
  123. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/feature_combobox.py +0 -0
  124. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/get_path.py +0 -0
  125. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/key_value_table_widget.css +0 -0
  126. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/key_value_table_widget.py +0 -0
  127. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/mdi_subwindow_wo_close.py +0 -0
  128. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/qrangeslider.py +0 -0
  129. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/rangecontrol.py +0 -0
  130. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/rangecontrol.ui +0 -0
  131. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/simple_image_view.py +0 -0
  132. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/simple_plot_widget.py +0 -0
  133. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/so_colorbaritem.py +0 -0
  134. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/gui/widgets/wait_cursor.py +0 -0
  135. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/idiom.py +0 -0
  136. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/__init__.py +0 -0
  137. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/COPYING-ICONS +0 -0
  138. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/COPYING.LIB +0 -0
  139. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/README +0 -0
  140. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/application-exit.svg +0 -0
  141. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/code-context.svg +0 -0
  142. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-cancel.svg +0 -0
  143. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-close.svg +0 -0
  144. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-messages.svg +0 -0
  145. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok-apply.svg +0 -0
  146. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok.svg +0 -0
  147. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/document-open-folder.svg +0 -0
  148. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/document-open.svg +0 -0
  149. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/document-save.svg +0 -0
  150. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/documentinfo.svg +0 -0
  151. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/draw-watercolor.svg +0 -0
  152. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/edit-clear-all.svg +0 -0
  153. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/edit-clear.svg +0 -0
  154. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/edit-paste.svg +0 -0
  155. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/globe.svg +0 -0
  156. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/gtk-preferences.svg +0 -0
  157. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/list-add.svg +0 -0
  158. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/messagebox_warning.svg +0 -0
  159. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/object-columns.svg +0 -0
  160. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/object-order-lower.svg +0 -0
  161. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/object-rows.svg +0 -0
  162. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/office-chart-line-stacked.svg +0 -0
  163. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/office-chart-ring.svg +0 -0
  164. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/office-chart-scatter.svg +0 -0
  165. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/path-mode-polyline.svg +0 -0
  166. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/preferences-activities.svg +0 -0
  167. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/remove.svg +0 -0
  168. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/search.svg +0 -0
  169. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/show-grid.svg +0 -0
  170. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/special_paste.svg +0 -0
  171. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/tools-wizard.svg +0 -0
  172. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-calendar-list.svg +0 -0
  173. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-filter.svg +0 -0
  174. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-list-tree.svg +0 -0
  175. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/view-statistics.svg +0 -0
  176. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/16/visibility.svg +0 -0
  177. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/application-exit.svg +0 -0
  178. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/code-context.svg +0 -0
  179. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-cancel.svg +0 -0
  180. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-close.svg +0 -0
  181. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-messages.svg +0 -0
  182. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok-apply.svg +0 -0
  183. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok.svg +0 -0
  184. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/document-open-folder.svg +0 -0
  185. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/document-open.svg +0 -0
  186. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/document-save.svg +0 -0
  187. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/documentinfo.svg +0 -0
  188. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/draw-watercolor.svg +0 -0
  189. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/edit-clear-all.svg +0 -0
  190. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/edit-clear.svg +0 -0
  191. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/edit-paste.svg +0 -0
  192. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/globe.svg +0 -0
  193. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/gtk-preferences.svg +0 -0
  194. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/list-add.svg +0 -0
  195. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/messagebox_warning.svg +0 -0
  196. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/object-columns.svg +0 -0
  197. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/object-order-lower.svg +0 -0
  198. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/object-rows.svg +0 -0
  199. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/office-chart-line-stacked.svg +0 -0
  200. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/office-chart-ring.svg +0 -0
  201. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/office-chart-scatter.svg +0 -0
  202. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/path-mode-polyline.svg +0 -0
  203. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/preferences-activities.svg +0 -0
  204. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/remove.svg +0 -0
  205. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/special_paste.svg +0 -0
  206. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/tools-wizard.svg +0 -0
  207. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-calendar-list.svg +0 -0
  208. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-filter.svg +0 -0
  209. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-list-tree.svg +0 -0
  210. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/view-statistics.svg +0 -0
  211. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/22/visibility.svg +0 -0
  212. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/application-exit.svg +0 -0
  213. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/code-context.svg +0 -0
  214. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-cancel.svg +0 -0
  215. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-close.svg +0 -0
  216. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-messages.svg +0 -0
  217. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok-apply.svg +0 -0
  218. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok.svg +0 -0
  219. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/document-open-folder.svg +0 -0
  220. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/document-open.svg +0 -0
  221. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/document-save.svg +0 -0
  222. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/documentinfo.svg +0 -0
  223. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/draw-watercolor.svg +0 -0
  224. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/edit-clear-all.svg +0 -0
  225. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/edit-clear.svg +0 -0
  226. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/edit-paste.svg +0 -0
  227. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/globe.svg +0 -0
  228. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/gtk-preferences.svg +0 -0
  229. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/list-add.svg +0 -0
  230. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/messagebox_warning.svg +0 -0
  231. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/object-columns.svg +0 -0
  232. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/object-order-lower.svg +0 -0
  233. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/object-rows.svg +0 -0
  234. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/office-chart-line-stacked.svg +0 -0
  235. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/office-chart-ring.svg +0 -0
  236. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/office-chart-scatter.svg +0 -0
  237. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/path-mode-polyline.svg +0 -0
  238. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/preferences-activities.svg +0 -0
  239. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/remove.svg +0 -0
  240. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/special_paste.svg +0 -0
  241. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/tools-wizard.svg +0 -0
  242. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-calendar-list.svg +0 -0
  243. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-filter.svg +0 -0
  244. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-list-tree.svg +0 -0
  245. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/view-statistics.svg +0 -0
  246. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/24/visibility.svg +0 -0
  247. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/application-exit.svg +0 -0
  248. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-cancel.svg +0 -0
  249. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-messages.svg +0 -0
  250. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok-apply.svg +0 -0
  251. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok.svg +0 -0
  252. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/document-open-folder.svg +0 -0
  253. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/document-open.svg +0 -0
  254. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/document-save.svg +0 -0
  255. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/gtk-preferences.svg +0 -0
  256. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/object-order-lower.svg +0 -0
  257. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/view-filter.svg +0 -0
  258. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/actions/32/view-list-tree.svg +0 -0
  259. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/16/folder-cloud.svg +0 -0
  260. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/16/folder.svg +0 -0
  261. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/22/folder-cloud.svg +0 -0
  262. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/22/folder.svg +0 -0
  263. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/24/folder-cloud.svg +0 -0
  264. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/24/folder.svg +0 -0
  265. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/32/folder-cloud.svg +0 -0
  266. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/32/folder.svg +0 -0
  267. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/64/folder-cloud.svg +0 -0
  268. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/places/64/folder.svg +0 -0
  269. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-error.svg +0 -0
  270. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-information.svg +0 -0
  271. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-question.svg +0 -0
  272. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/16/dialog-warning.svg +0 -0
  273. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-error.svg +0 -0
  274. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-information.svg +0 -0
  275. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-question.svg +0 -0
  276. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/22/dialog-warning.svg +0 -0
  277. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-error.svg +0 -0
  278. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-information.svg +0 -0
  279. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-question.svg +0 -0
  280. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/24/dialog-warning.svg +0 -0
  281. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-error.svg +0 -0
  282. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-information.svg +0 -0
  283. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-question.svg +0 -0
  284. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/breeze/status/64/dialog-warning.svg +0 -0
  285. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/collect_icons.py +0 -0
  286. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/dcor.png +0 -0
  287. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/edit-copy-anew.svg +0 -0
  288. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/emodulus.svg +0 -0
  289. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/filter_ray.svg +0 -0
  290. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/region_channel.svg +0 -0
  291. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/region_reservoir.svg +0 -0
  292. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/rlang.svg +0 -0
  293. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/dcscope/statistical_significance.svg +0 -0
  294. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon-theme/index.theme +0 -0
  295. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/icon.png +0 -0
  296. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/img/splash.png +0 -0
  297. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/meta_tool.py +0 -0
  298. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/__init__.py +0 -0
  299. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/core.py +0 -0
  300. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/dataslot.py +0 -0
  301. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/filter.py +0 -0
  302. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/filter_ray.py +0 -0
  303. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/pipeline/plot.py +0 -0
  304. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope/session.py +0 -0
  305. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope.egg-info/dependency_links.txt +0 -0
  306. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope.egg-info/entry_points.txt +0 -0
  307. {dcscope-2.26.2 → dcscope-2.26.3}/dcscope.egg-info/top_level.txt +0 -0
  308. {dcscope-2.26.2 → dcscope-2.26.3}/docs/README.md +0 -0
  309. {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/Readme.md +0 -0
  310. {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/dcscope_icon.svg +0 -0
  311. {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/dcscope_large_white.png +0 -0
  312. {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/dcscope_large_white.svg +0 -0
  313. {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/dcscope_splash.svg +0 -0
  314. {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/favicon.ico +0 -0
  315. {dcscope-2.26.2 → dcscope-2.26.3}/docs/artwork/favicon.svg +0 -0
  316. {dcscope-2.26.2 → dcscope-2.26.3}/docs/conf.py +0 -0
  317. {dcscope-2.26.2 → dcscope-2.26.3}/docs/data/extension_fl1_density.py +0 -0
  318. {dcscope-2.26.2 → dcscope-2.26.3}/docs/dcscope.bib +0 -0
  319. {dcscope-2.26.2 → dcscope-2.26.3}/docs/extensions/fancy_include.py +0 -0
  320. {dcscope-2.26.2 → dcscope-2.26.3}/docs/extensions/github_changelog.py +0 -0
  321. {dcscope-2.26.2 → dcscope-2.26.3}/docs/extensions/rtd_pdf.py +0 -0
  322. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/ATTRIBUTION +0 -0
  323. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/area.png +0 -0
  324. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/aspect.jpg +0 -0
  325. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/brightness.jpg +0 -0
  326. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/deform.jpg +0 -0
  327. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/deform.py +0 -0
  328. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/fluorescence.jpg +0 -0
  329. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/fluorescence.py +0 -0
  330. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/inert_ratio.jpg +0 -0
  331. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/inert_ratio.py +0 -0
  332. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_countrate.jpg +0 -0
  333. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_countrate.py +0 -0
  334. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_area.jpg +0 -0
  335. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_area.py +0 -0
  336. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_porosity.jpg +0 -0
  337. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_porosity.py +0 -0
  338. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_ratios.jpg +0 -0
  339. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_filter_ratios.py +0 -0
  340. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_time.jpg +0 -0
  341. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_time.py +0 -0
  342. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus.py +0 -0
  343. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_15um.png +0 -0
  344. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_20um.png +0 -0
  345. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_30um.png +0 -0
  346. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/qg_youngs_modulus_40um.png +0 -0
  347. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/rtdc-setup.jpg +0 -0
  348. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/volume.jpg +0 -0
  349. {dcscope-2.26.2 → dcscope-2.26.3}/docs/figures/volume.py +0 -0
  350. {dcscope-2.26.2 → dcscope-2.26.3}/docs/index.rst +0 -0
  351. {dcscope-2.26.2 → dcscope-2.26.3}/docs/requirements.txt +0 -0
  352. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/.gitignore +0 -0
  353. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/CD66+_CD14-.poly +0 -0
  354. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/Readme.md +0 -0
  355. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots.sh +0 -0
  356. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_dcor.py +0 -0
  357. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_emodulus.py +0 -0
  358. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_export.py +0 -0
  359. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_extensions.py +0 -0
  360. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_lme4.py +0 -0
  361. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_lme4_diff.py +0 -0
  362. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_qg_statistics.py +0 -0
  363. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/make_scrots_ui.py +0 -0
  364. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_dcor_dlg.png +0 -0
  365. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_emodulus_badtemp.png +0 -0
  366. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_emodulus_config.png +0 -0
  367. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_emodulus_feature.png +0 -0
  368. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_emodulus_other.png +0 -0
  369. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_export_data.png +0 -0
  370. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_extensions.png +0 -0
  371. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_lme4_diff_init.png +0 -0
  372. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_lme4_diff_results.png +0 -0
  373. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_lme4_init.png +0 -0
  374. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_lme4_results.png +0 -0
  375. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_statistics_folder.png +0 -0
  376. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/qg_statistics_init.png +0 -0
  377. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/scrots.so2 +0 -0
  378. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_basins.png +0 -0
  379. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_filter.png +0 -0
  380. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_logs.png +0 -0
  381. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_meta.png +0 -0
  382. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_plot.png +0 -0
  383. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_slot.png +0 -0
  384. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_ana_tables.png +0 -0
  385. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_block_matrix.png +0 -0
  386. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_main.png +0 -0
  387. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_qv_event.png +0 -0
  388. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_qv_poly.png +0 -0
  389. {dcscope-2.26.2 → dcscope-2.26.3}/docs/scrots/ui_qv_settings.png +0 -0
  390. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_changelog.rst +0 -0
  391. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_devs.rst +0 -0
  392. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_getting_started.rst +0 -0
  393. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_imprint.rst +0 -0
  394. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_interface.rst +0 -0
  395. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_batch_stats.rst +0 -0
  396. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_consistency_check.rst +0 -0
  397. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_dcor.rst +0 -0
  398. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_export_data.rst +0 -0
  399. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_extensions.rst +0 -0
  400. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_filtering.rst +0 -0
  401. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_lme4.rst +0 -0
  402. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_qg_youngs_modulus.rst +0 -0
  403. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_quick_guides.rst +0 -0
  404. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_rtdc_basics.rst +0 -0
  405. {dcscope-2.26.2 → dcscope-2.26.3}/docs/sec_z_bib.rst +0 -0
  406. {dcscope-2.26.2 → dcscope-2.26.3}/setup.cfg +0 -0
  407. {dcscope-2.26.2 → dcscope-2.26.3}/tests/README.md +0 -0
  408. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/artificial_with_image_bg.rtdc +0 -0
  409. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/blood_rbc_leukocytes.rtdc +0 -0
  410. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/blood_rbc_qpi_data.rtdc +0 -0
  411. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/calibration_beads_47.rtdc +0 -0
  412. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/cytoshot_blood.rtdc +0 -0
  413. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/empty_recording.rtdc +0 -0
  414. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/ext_feat_anc_plugin_ca.py +0 -0
  415. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/extreme_shear.rtdc +0 -0
  416. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/naiad-capture_blood_pipeline.rtdc +0 -0
  417. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/version_2_1_0_basic.so2 +0 -0
  418. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/version_2_1_2_plot_color_emodulus.so2 +0 -0
  419. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/version_2_1_6_no_events.so2 +0 -0
  420. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/version_2_5_0_dcor_lme4.so2 +0 -0
  421. {dcscope-2.26.2 → dcscope-2.26.3}/tests/data/version_2_5_0_dcor_lme4_diff.so2 +0 -0
  422. {dcscope-2.26.2 → dcscope-2.26.3}/tests/requirements.txt +0 -0
  423. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_extensions.py +0 -0
  424. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_ana_meta.py +0 -0
  425. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_basic.py +0 -0
  426. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_gui_update.py +0 -0
  427. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_pipeline_core.py +0 -0
  428. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_pipeline_filter_ray.py +0 -0
  429. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_pipeline_filter_ray_2.py +0 -0
  430. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_session.py +0 -0
  431. {dcscope-2.26.2 → dcscope-2.26.3}/tests/test_util.py +0 -0
  432. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/.gitignore +0 -0
  433. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/Readme.rst +0 -0
  434. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export.py +0 -0
  435. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export.so2 +0 -0
  436. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_log-large-points-export-png_expected.png +0 -0
  437. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_log-large-points-export-svg_expected.svg +0 -0
  438. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-export-png_expected.png +0 -0
  439. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-export-svg_expected.svg +0 -0
  440. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot1-export-png_expected.png +0 -0
  441. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot1-export-svg_expected.svg +0 -0
  442. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot2-export-png_expected.png +0 -0
  443. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-and-contour-subplot2-export-svg_expected.svg +0 -0
  444. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/plot-export_scatter-long-title-export-png_expected.png +0 -0
  445. {dcscope-2.26.2 → dcscope-2.26.3}/tests-manual/run-tests.sh +0 -0
@@ -1,3 +1,9 @@
1
+ 2.26.3
2
+ - enh: fetch QuickView image and trace data in `EventGetterThread`
3
+ - enh: busy indicator in QuickView when event data is fetched in the background
4
+ - ref: new `qv_event_getter` and `qv_image_vis` submodules
5
+ - setup: bump dclab to 0.71.6 (disable file locking, improved DCOR support,
6
+ IndexError during plotting)
1
7
  2.26.2
2
8
  - reg: filters not applied in final plots since 2.25.1
3
9
  - fix: prevent `pipeline.lock` deadlocks via Qt signal cluttering
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dcscope
3
- Version: 2.26.2
3
+ Version: 2.26.3
4
4
  Summary: User interface for deformability cytometry (DC)
5
5
  Author: Benedikt Hartmann, Eoghan O'Connell, Maximilian Schlögel, Paul Müller, Raghava Alajangi
6
6
  Maintainer-email: Paul Müller <dev@craban.de>
@@ -16,7 +16,7 @@ Classifier: Intended Audience :: Science/Research
16
16
  Requires-Python: <4,>=3.9
17
17
  Description-Content-Type: text/x-rst
18
18
  License-File: LICENSE
19
- Requires-Dist: dclab[dcor,export,http,s3]>=0.71.2
19
+ Requires-Dist: dclab[dcor,export,http,s3]>=0.71.6
20
20
  Requires-Dist: h5py>=2.8.0
21
21
  Requires-Dist: numpy>=1.21
22
22
  Requires-Dist: pygments
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '2.26.2'
22
- __version_tuple__ = version_tuple = (2, 26, 2)
21
+ __version__ = version = '2.26.3'
22
+ __version_tuple__ = version_tuple = (2, 26, 3)
23
23
 
24
- __commit_id__ = commit_id = 'ga09ea9064'
24
+ __commit_id__ = commit_id = 'g9e68b5ca9'
@@ -251,6 +251,7 @@ class DCscope(QtWidgets.QMainWindow):
251
251
  print(version)
252
252
  QtWidgets.QApplication.processEvents(
253
253
  QtCore.QEventLoop.ProcessEventsFlag.AllEvents, 300)
254
+ self.close()
254
255
  sys.exit(0)
255
256
  else:
256
257
  # deal with any other arguments that might have been passed
@@ -390,11 +391,18 @@ class DCscope(QtWidgets.QMainWindow):
390
391
  self.subwindows_plots[plot_id] = sub
391
392
  sub.show()
392
393
 
394
+ def close(self):
395
+ if self.widget_quick_view is not None:
396
+ self.widget_quick_view.close()
397
+ return super(DCscope, self).close()
398
+
393
399
  @QtCore.pyqtSlot(QtCore.QEvent)
394
400
  def closeEvent(self, event):
395
401
  """Determine what happens when the user wants to quit"""
396
402
  if self.pipeline.slots or self.pipeline.filters:
397
403
  if self.on_action_clear():
404
+ if self.widget_quick_view is not None:
405
+ self.widget_quick_view.close()
398
406
  event.accept()
399
407
  else:
400
408
  event.ignore()
@@ -0,0 +1,107 @@
1
+ import logging
2
+ import threading
3
+ import time
4
+ import traceback
5
+
6
+ import dclab
7
+ from dclab.rtdc_dataset import RTDCBase
8
+ import numpy as np
9
+ from PyQt6 import QtCore
10
+
11
+
12
+ class EventGetterThread(QtCore.QThread):
13
+ new_event_data = QtCore.pyqtSignal(dict)
14
+ busy_fetching_data = QtCore.pyqtSignal(bool)
15
+
16
+ def __init__(self, parent):
17
+ super(EventGetterThread, self).__init__(parent)
18
+ self.worker_lock = threading.Lock()
19
+ self.event_abort = threading.Event()
20
+ self.request = (None, None)
21
+ self.prev_request = (None, None)
22
+ self.logger = logging.getLogger(__name__)
23
+
24
+ def close(self):
25
+ self.event_abort.set()
26
+ while self.isRunning():
27
+ time.sleep(0.1)
28
+
29
+ @QtCore.pyqtSlot(RTDCBase, int)
30
+ def request_event_data(self, ds: RTDCBase, event_index: int):
31
+ with self.worker_lock:
32
+ self.request = (ds, event_index)
33
+
34
+ def run(self):
35
+ while not self.event_abort.is_set():
36
+ with self.worker_lock:
37
+ ds, event_index = self.request
38
+
39
+ if self.prev_request == (ds, event_index):
40
+ time.sleep(0.05)
41
+ continue
42
+
43
+ self.prev_request = (ds, event_index)
44
+
45
+ if ds is not None and event_index is not None:
46
+ try:
47
+ self.busy_fetching_data.emit(True)
48
+ event_data = self.get_event_data(ds, event_index)
49
+ self.new_event_data.emit(event_data)
50
+ if self.prev_request == self.request:
51
+ self.busy_fetching_data.emit(False)
52
+ except BaseException:
53
+ self.logger.error(traceback.format_exc())
54
+ else:
55
+ time.sleep(0.01)
56
+
57
+ def get_event_data(self, ds: RTDCBase, event_index: int):
58
+ """Return all event data relevant for QuickView visualization"""
59
+ data = {}
60
+ data["index"] = event_index
61
+ try:
62
+ # Image data
63
+ for feat in ["image", "image_bg", "mask", "qpi_amp", "qpi_pha"]:
64
+ if feat in ds:
65
+ data[feat] = ds[feat][event_index]
66
+
67
+ # Trace data
68
+ if "trace" in ds:
69
+ try:
70
+ data["traces"] = self.get_event_traces(ds, event_index)
71
+ except BaseException:
72
+ self.logger.error(traceback.format_exc())
73
+ except IndexError:
74
+ if event_index != 0:
75
+ data = self.get_event_data(ds, 0)
76
+ else:
77
+ self.logger.error(traceback.format_exc())
78
+ return data
79
+
80
+ def get_event_traces(self,
81
+ ds: RTDCBase,
82
+ event_index: int,
83
+ ):
84
+ """Return all trace data"""
85
+ tdata = {}
86
+ # time axis
87
+ flsamples = ds.config["fluorescence"]["samples per event"]
88
+ flrate = ds.config["fluorescence"]["sample rate"]
89
+ fltime = np.arange(flsamples) / flrate * 1e6
90
+ tdata["time"] = fltime
91
+
92
+ # fluorescence traces and pos/width/max features
93
+ range_fl = [0, 0]
94
+ for name in dclab.dfn.FLUOR_TRACES:
95
+ flid = name.split("_")[0]
96
+ if name in ds["trace"]:
97
+ # show the trace information
98
+ tracey = ds["trace"][name][event_index] # trace data
99
+ range_fl[0] = min(range_fl[0], tracey.min())
100
+ range_fl[1] = max(range_fl[1], tracey.max())
101
+ tdata[name] = tracey
102
+ for which in ["pos", "width", "max"]:
103
+ feat = f"{flid}_{which}"
104
+ if feat not in tdata:
105
+ tdata[feat] = ds[feat][event_index]
106
+
107
+ return tdata
@@ -0,0 +1,222 @@
1
+ from typing import Literal
2
+
3
+ import numpy as np
4
+ import pyqtgraph as pg
5
+ from scipy.ndimage import binary_erosion
6
+
7
+
8
+ cmap_pha: pg.ColorMap = pg.colormap.get('CET-D1A', skipCache=True)
9
+ cmap_pha_with_black: pg.ColorMap = pg.colormap.get('CET-D1A', skipCache=True)
10
+ cmap_pha_with_black.color[0] = [0, 0, 0, 1]
11
+
12
+
13
+ @staticmethod
14
+ def convert_to_rgb(cell_img):
15
+ """Add a third axis of length 3 with copies"""
16
+ cell_img = cell_img.reshape(
17
+ cell_img.shape[0], cell_img.shape[1], 1)
18
+ return np.repeat(cell_img, 3, axis=2)
19
+
20
+
21
+ def get_rgb_image(data: dict,
22
+ feat: str,
23
+ zoom: bool = False,
24
+ draw_contour: bool = False,
25
+ auto_contrast: bool = False,
26
+ subtract_background: bool = False,
27
+ ) -> tuple[np.ndarray, float, float, pg.ColorMap | None]:
28
+ """Return a pretty visualization of image data"""
29
+ if feat == "image":
30
+ cmap = None
31
+ cell_img, vmin, vmax = prepare_event_image_image(
32
+ data,
33
+ zoom=zoom,
34
+ draw_contour=draw_contour,
35
+ auto_contrast=auto_contrast,
36
+ subtract_background=subtract_background,
37
+ )
38
+ elif feat == "qpi_amp":
39
+ cmap = None
40
+ cell_img, vmin, vmax = prepare_event_image_qpi_amp(
41
+ data,
42
+ zoom=zoom,
43
+ draw_contour=draw_contour,
44
+ auto_contrast=auto_contrast,
45
+ )
46
+ elif feat == "qpi_pha":
47
+ cell_img, vmin, vmax, cmap = prepare_event_image_qpi_pha(
48
+ data,
49
+ zoom=zoom,
50
+ draw_contour=draw_contour,
51
+ auto_contrast=auto_contrast,
52
+ )
53
+ else:
54
+ raise KeyError(f"Unknown image feature '{feat}'")
55
+
56
+ return cell_img, vmin, vmax, cmap
57
+
58
+
59
+ def image_insert_contour(cell_img: np.ndarray,
60
+ mask: np.ndarray,
61
+ cmap_levels: tuple[float, float],
62
+ contour_style: Literal["red", "lowest-level"],
63
+ ):
64
+ """Insert contour data in an image"""
65
+ # Compute contour image from mask. If you are wondering
66
+ # whether this is kosher, please take a look at issue #76:
67
+ # https://github.com/DC-analysis/dclab/issues/76
68
+ cont = mask ^ binary_erosion(mask)
69
+ if contour_style == "red":
70
+ vmin, vmax = cmap_levels
71
+ # draw red contour for grayscale images
72
+ ch_red = vmin + (vmax - vmin) * 0.7
73
+ ch_other = vmin
74
+ # assign channel values for contour
75
+ cell_img[cont, 0] = ch_red
76
+ cell_img[cont, 1] = ch_other
77
+ cell_img[cont, 2] = ch_other
78
+ elif contour_style == "lowest-level":
79
+ # use the lowest value from the colormap
80
+ # (used for e.g. phase images)
81
+ cell_img[cont] = cmap_levels[0]
82
+
83
+ return cell_img
84
+
85
+
86
+ def image_zoom(cell_img, mask):
87
+ """Zoom in on the image"""
88
+ xv, yv = np.where(mask)
89
+ idminx = xv.min() - 5
90
+ idminy = yv.min() - 5
91
+ idmaxx = xv.max() + 5
92
+ idmaxy = yv.max() + 5
93
+ idminx = idminx if idminx >= 0 else 0
94
+ idminy = idminy if idminy >= 0 else 0
95
+ shx, shy = mask.shape
96
+ idmaxx = idmaxx if idmaxx < shx else shx
97
+ idmaxy = idmaxy if idmaxy < shy else shy
98
+ return cell_img[idminx:idmaxx, idminy:idmaxy]
99
+
100
+
101
+ def prepare_event_image_image(
102
+ data,
103
+ zoom: bool = False,
104
+ draw_contour: bool = False,
105
+ auto_contrast: bool = False,
106
+ subtract_background: bool = False,
107
+ ) -> tuple[np.ndarray, float, float]:
108
+ """Prepare to draw a regular image event"""
109
+ cell_img = data["image"]
110
+
111
+ if zoom and "mask" in data:
112
+ cell_img = image_zoom(cell_img, data["mask"])
113
+
114
+ # apply background correction
115
+ if subtract_background and "image_bg" in data:
116
+
117
+ bgimg = data["image_bg"].astype(np.int16)
118
+ if zoom and "mask" in data:
119
+ bgimg = image_zoom(bgimg, data["mask"])
120
+
121
+ cell_img = cell_img.astype(np.int16)
122
+ cell_img = cell_img - bgimg + int(np.mean(bgimg))
123
+
124
+ # automatic contrast
125
+ if auto_contrast:
126
+ vmin, vmax = cell_img.min(), cell_img.max()
127
+ else:
128
+ vmin, vmax = (0, 255)
129
+
130
+ cell_img = convert_to_rgb(cell_img)
131
+
132
+ if draw_contour and "mask" in data:
133
+ mask = data["mask"]
134
+ if zoom:
135
+ mask = image_zoom(mask, mask)
136
+
137
+ cell_img = image_insert_contour(
138
+ cell_img,
139
+ mask,
140
+ cmap_levels=(vmin, vmax),
141
+ contour_style="red",
142
+ )
143
+
144
+ return cell_img, vmin, vmax
145
+
146
+
147
+ def prepare_event_image_qpi_amp(
148
+ data,
149
+ zoom: bool = False,
150
+ draw_contour: bool = False,
151
+ auto_contrast: bool = False,
152
+ ) -> tuple[np.ndarray, float, float]:
153
+ """Prepare to draw a QPI amplitude event image"""
154
+ cell_img = data["qpi_amp"]
155
+
156
+ if zoom and "mask" in data:
157
+ cell_img = image_zoom(cell_img, data["mask"])
158
+
159
+ if auto_contrast:
160
+ vmin, vmax = cell_img.min(), cell_img.max()
161
+ else:
162
+ vmin, vmax = (0, 2)
163
+
164
+ cell_img = convert_to_rgb(cell_img)
165
+
166
+ if draw_contour and "mask" in data:
167
+ mask = data["mask"]
168
+ if zoom:
169
+ mask = image_zoom(mask, mask)
170
+
171
+ cell_img = image_insert_contour(
172
+ cell_img,
173
+ mask,
174
+ cmap_levels=(vmin, vmax),
175
+ contour_style="red",
176
+ )
177
+
178
+ return cell_img, vmin, vmax
179
+
180
+
181
+ def prepare_event_image_qpi_pha(
182
+ data,
183
+ zoom: bool = False,
184
+ draw_contour: bool = False,
185
+ auto_contrast: bool = False,
186
+ ) -> tuple[np.ndarray, float, float, pg.ColorMap]:
187
+ """Prepare to draw a QPI phase event image"""
188
+ cell_img = np.copy(data["qpi_pha"])
189
+
190
+ if zoom and "mask" in data:
191
+ cell_img = image_zoom(cell_img, data["mask"])
192
+
193
+ if auto_contrast:
194
+ # phase values centered around zero
195
+ vmin_abs, vmax_abs = np.abs(cell_img.min()), np.abs(cell_img.max())
196
+ v_largest = max(vmax_abs, vmin_abs)
197
+ vmin, vmax = -v_largest, v_largest
198
+ else:
199
+ vmin, vmax = (-3.14, 3.14)
200
+
201
+ if draw_contour and "mask" in data:
202
+ # offset required for auto-contrast with contour
203
+ # two times the contrast range, divided by the cmap length
204
+ # this essentially adds a cmap point for our contour
205
+ offset = 2 * ((vmax - vmin) / len(cmap_pha.color))
206
+ vmin -= offset
207
+
208
+ mask = data["mask"]
209
+ if zoom:
210
+ mask = image_zoom(mask, mask)
211
+
212
+ cell_img = image_insert_contour(
213
+ cell_img,
214
+ mask,
215
+ cmap_levels=(vmin, vmax),
216
+ contour_style="lowest-level",
217
+ )
218
+ cmap = cmap_pha_with_black
219
+ else:
220
+ cmap = cmap_pha
221
+
222
+ return cell_img, vmin, vmax, cmap