dcscope 2.22.1__py3-none-any.whl

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 (267) hide show
  1. dcscope/__init__.py +17 -0
  2. dcscope/__main__.py +44 -0
  3. dcscope/_version.py +21 -0
  4. dcscope/extensions.py +250 -0
  5. dcscope/gui/__init__.py +2 -0
  6. dcscope/gui/analysis/__init__.py +10 -0
  7. dcscope/gui/analysis/ana_basins.py +110 -0
  8. dcscope/gui/analysis/ana_basins.ui +143 -0
  9. dcscope/gui/analysis/ana_filter.py +341 -0
  10. dcscope/gui/analysis/ana_filter.ui +364 -0
  11. dcscope/gui/analysis/ana_log.py +122 -0
  12. dcscope/gui/analysis/ana_log.ui +100 -0
  13. dcscope/gui/analysis/ana_meta.py +207 -0
  14. dcscope/gui/analysis/ana_meta.ui +141 -0
  15. dcscope/gui/analysis/ana_plot.py +638 -0
  16. dcscope/gui/analysis/ana_plot.ui +1060 -0
  17. dcscope/gui/analysis/ana_slot.py +504 -0
  18. dcscope/gui/analysis/ana_slot.ui +684 -0
  19. dcscope/gui/analysis/ana_tables.py +227 -0
  20. dcscope/gui/analysis/ana_tables.ui +195 -0
  21. dcscope/gui/analysis/ana_view.py +69 -0
  22. dcscope/gui/analysis/ana_view.ui +269 -0
  23. dcscope/gui/analysis/dlg_slot_reorder.py +55 -0
  24. dcscope/gui/analysis/dlg_slot_reorder.ui +138 -0
  25. dcscope/gui/bulk/__init__.py +2 -0
  26. dcscope/gui/bulk/bulk_emodulus.py +200 -0
  27. dcscope/gui/bulk/bulk_emodulus.ui +245 -0
  28. dcscope/gui/compute/__init__.py +3 -0
  29. dcscope/gui/compute/comp_lme4.py +115 -0
  30. dcscope/gui/compute/comp_lme4.ui +194 -0
  31. dcscope/gui/compute/comp_lme4_dataset.py +51 -0
  32. dcscope/gui/compute/comp_lme4_dataset.ui +92 -0
  33. dcscope/gui/compute/comp_lme4_results.py +120 -0
  34. dcscope/gui/compute/comp_lme4_results.ui +268 -0
  35. dcscope/gui/compute/comp_stats.py +223 -0
  36. dcscope/gui/compute/comp_stats.ui +187 -0
  37. dcscope/gui/dcor/__init__.py +304 -0
  38. dcscope/gui/dcor/dcor.ui +118 -0
  39. dcscope/gui/export/__init__.py +3 -0
  40. dcscope/gui/export/e2data.py +394 -0
  41. dcscope/gui/export/e2data.ui +367 -0
  42. dcscope/gui/export/e2filter.py +76 -0
  43. dcscope/gui/export/e2filter.ui +111 -0
  44. dcscope/gui/export/e2plot.py +94 -0
  45. dcscope/gui/export/e2plot.ui +175 -0
  46. dcscope/gui/main.py +1089 -0
  47. dcscope/gui/main.ui +579 -0
  48. dcscope/gui/matrix/__init__.py +4 -0
  49. dcscope/gui/matrix/block_matrix.py +141 -0
  50. dcscope/gui/matrix/block_matrix.ui +207 -0
  51. dcscope/gui/matrix/data_matrix.py +574 -0
  52. dcscope/gui/matrix/dm_dataset.py +116 -0
  53. dcscope/gui/matrix/dm_dataset.ui +348 -0
  54. dcscope/gui/matrix/dm_element.py +111 -0
  55. dcscope/gui/matrix/dm_element.ui +169 -0
  56. dcscope/gui/matrix/dm_filter.py +115 -0
  57. dcscope/gui/matrix/dm_filter.ui +287 -0
  58. dcscope/gui/matrix/plot_matrix.py +316 -0
  59. dcscope/gui/matrix/pm_element.py +39 -0
  60. dcscope/gui/matrix/pm_plot.py +86 -0
  61. dcscope/gui/matrix/pm_plot.ui +249 -0
  62. dcscope/gui/pipeline_plot.py +797 -0
  63. dcscope/gui/pipeline_plot.ui +66 -0
  64. dcscope/gui/preferences.py +380 -0
  65. dcscope/gui/preferences.ui +554 -0
  66. dcscope/gui/quick_view/__init__.py +1 -0
  67. dcscope/gui/quick_view/qv_main.py +1072 -0
  68. dcscope/gui/quick_view/qv_main.ui +1297 -0
  69. dcscope/gui/quick_view/qv_scatter.py +284 -0
  70. dcscope/gui/quick_view/qv_style.css +10 -0
  71. dcscope/gui/update.py +90 -0
  72. dcscope/gui/widgets/__init__.py +15 -0
  73. dcscope/gui/widgets/bg_thread.py +29 -0
  74. dcscope/gui/widgets/bulk_list.py +79 -0
  75. dcscope/gui/widgets/bulk_list.ui +95 -0
  76. dcscope/gui/widgets/double_spin_box_nan.py +75 -0
  77. dcscope/gui/widgets/feature_combobox.py +140 -0
  78. dcscope/gui/widgets/get_path.py +42 -0
  79. dcscope/gui/widgets/key_value_table_widget.css +12 -0
  80. dcscope/gui/widgets/key_value_table_widget.py +75 -0
  81. dcscope/gui/widgets/mdi_subwindow_wo_close.py +12 -0
  82. dcscope/gui/widgets/qrangeslider.py +262 -0
  83. dcscope/gui/widgets/rangecontrol.py +308 -0
  84. dcscope/gui/widgets/rangecontrol.ui +136 -0
  85. dcscope/gui/widgets/simple_image_view.py +55 -0
  86. dcscope/gui/widgets/simple_plot_widget.py +113 -0
  87. dcscope/gui/widgets/so_colorbaritem.py +29 -0
  88. dcscope/gui/widgets/wait_cursor.py +33 -0
  89. dcscope/idiom.py +26 -0
  90. dcscope/img/__init__.py +2 -0
  91. dcscope/img/icon-theme/breeze/COPYING-ICONS +209 -0
  92. dcscope/img/icon-theme/breeze/COPYING.LIB +510 -0
  93. dcscope/img/icon-theme/breeze/README +5 -0
  94. dcscope/img/icon-theme/breeze/actions/16/application-exit.svg +17 -0
  95. dcscope/img/icon-theme/breeze/actions/16/code-context.svg +13 -0
  96. dcscope/img/icon-theme/breeze/actions/16/dialog-cancel.svg +13 -0
  97. dcscope/img/icon-theme/breeze/actions/16/dialog-close.svg +17 -0
  98. dcscope/img/icon-theme/breeze/actions/16/dialog-messages.svg +13 -0
  99. dcscope/img/icon-theme/breeze/actions/16/dialog-ok-apply.svg +13 -0
  100. dcscope/img/icon-theme/breeze/actions/16/dialog-ok.svg +13 -0
  101. dcscope/img/icon-theme/breeze/actions/16/document-open-folder.svg +13 -0
  102. dcscope/img/icon-theme/breeze/actions/16/document-open.svg +13 -0
  103. dcscope/img/icon-theme/breeze/actions/16/document-save.svg +13 -0
  104. dcscope/img/icon-theme/breeze/actions/16/documentinfo.svg +12 -0
  105. dcscope/img/icon-theme/breeze/actions/16/draw-watercolor.svg +13 -0
  106. dcscope/img/icon-theme/breeze/actions/16/edit-clear-all.svg +13 -0
  107. dcscope/img/icon-theme/breeze/actions/16/edit-clear.svg +13 -0
  108. dcscope/img/icon-theme/breeze/actions/16/edit-paste.svg +13 -0
  109. dcscope/img/icon-theme/breeze/actions/16/globe.svg +16 -0
  110. dcscope/img/icon-theme/breeze/actions/16/gtk-preferences.svg +13 -0
  111. dcscope/img/icon-theme/breeze/actions/16/list-add.svg +13 -0
  112. dcscope/img/icon-theme/breeze/actions/16/messagebox_warning.svg +20 -0
  113. dcscope/img/icon-theme/breeze/actions/16/object-columns.svg +13 -0
  114. dcscope/img/icon-theme/breeze/actions/16/object-order-lower.svg +13 -0
  115. dcscope/img/icon-theme/breeze/actions/16/object-rows.svg +13 -0
  116. dcscope/img/icon-theme/breeze/actions/16/office-chart-line-stacked.svg +13 -0
  117. dcscope/img/icon-theme/breeze/actions/16/office-chart-ring.svg +13 -0
  118. dcscope/img/icon-theme/breeze/actions/16/office-chart-scatter.svg +13 -0
  119. dcscope/img/icon-theme/breeze/actions/16/path-mode-polyline.svg +13 -0
  120. dcscope/img/icon-theme/breeze/actions/16/preferences-activities.svg +13 -0
  121. dcscope/img/icon-theme/breeze/actions/16/remove.svg +10 -0
  122. dcscope/img/icon-theme/breeze/actions/16/search.svg +13 -0
  123. dcscope/img/icon-theme/breeze/actions/16/show-grid.svg +13 -0
  124. dcscope/img/icon-theme/breeze/actions/16/special_paste.svg +13 -0
  125. dcscope/img/icon-theme/breeze/actions/16/tools-wizard.svg +13 -0
  126. dcscope/img/icon-theme/breeze/actions/16/view-calendar-list.svg +13 -0
  127. dcscope/img/icon-theme/breeze/actions/16/view-filter.svg +13 -0
  128. dcscope/img/icon-theme/breeze/actions/16/view-list-tree.svg +13 -0
  129. dcscope/img/icon-theme/breeze/actions/16/view-statistics.svg +13 -0
  130. dcscope/img/icon-theme/breeze/actions/16/visibility.svg +21 -0
  131. dcscope/img/icon-theme/breeze/actions/22/application-exit.svg +13 -0
  132. dcscope/img/icon-theme/breeze/actions/22/code-context.svg +14 -0
  133. dcscope/img/icon-theme/breeze/actions/22/dialog-cancel.svg +14 -0
  134. dcscope/img/icon-theme/breeze/actions/22/dialog-close.svg +10 -0
  135. dcscope/img/icon-theme/breeze/actions/22/dialog-messages.svg +14 -0
  136. dcscope/img/icon-theme/breeze/actions/22/dialog-ok-apply.svg +14 -0
  137. dcscope/img/icon-theme/breeze/actions/22/dialog-ok.svg +14 -0
  138. dcscope/img/icon-theme/breeze/actions/22/document-open-folder.svg +14 -0
  139. dcscope/img/icon-theme/breeze/actions/22/document-open.svg +14 -0
  140. dcscope/img/icon-theme/breeze/actions/22/document-save.svg +14 -0
  141. dcscope/img/icon-theme/breeze/actions/22/documentinfo.svg +14 -0
  142. dcscope/img/icon-theme/breeze/actions/22/draw-watercolor.svg +14 -0
  143. dcscope/img/icon-theme/breeze/actions/22/edit-clear-all.svg +14 -0
  144. dcscope/img/icon-theme/breeze/actions/22/edit-clear.svg +14 -0
  145. dcscope/img/icon-theme/breeze/actions/22/edit-paste.svg +14 -0
  146. dcscope/img/icon-theme/breeze/actions/22/globe.svg +12 -0
  147. dcscope/img/icon-theme/breeze/actions/22/gtk-preferences.svg +13 -0
  148. dcscope/img/icon-theme/breeze/actions/22/list-add.svg +14 -0
  149. dcscope/img/icon-theme/breeze/actions/22/messagebox_warning.svg +17 -0
  150. dcscope/img/icon-theme/breeze/actions/22/object-columns.svg +14 -0
  151. dcscope/img/icon-theme/breeze/actions/22/object-order-lower.svg +17 -0
  152. dcscope/img/icon-theme/breeze/actions/22/object-rows.svg +17 -0
  153. dcscope/img/icon-theme/breeze/actions/22/office-chart-line-stacked.svg +17 -0
  154. dcscope/img/icon-theme/breeze/actions/22/office-chart-ring.svg +17 -0
  155. dcscope/img/icon-theme/breeze/actions/22/office-chart-scatter.svg +17 -0
  156. dcscope/img/icon-theme/breeze/actions/22/path-mode-polyline.svg +17 -0
  157. dcscope/img/icon-theme/breeze/actions/22/preferences-activities.svg +14 -0
  158. dcscope/img/icon-theme/breeze/actions/22/remove.svg +10 -0
  159. dcscope/img/icon-theme/breeze/actions/22/special_paste.svg +14 -0
  160. dcscope/img/icon-theme/breeze/actions/22/tools-wizard.svg +14 -0
  161. dcscope/img/icon-theme/breeze/actions/22/view-calendar-list.svg +14 -0
  162. dcscope/img/icon-theme/breeze/actions/22/view-filter.svg +14 -0
  163. dcscope/img/icon-theme/breeze/actions/22/view-list-tree.svg +14 -0
  164. dcscope/img/icon-theme/breeze/actions/22/view-statistics.svg +14 -0
  165. dcscope/img/icon-theme/breeze/actions/22/visibility.svg +14 -0
  166. dcscope/img/icon-theme/breeze/actions/24/application-exit.svg +12 -0
  167. dcscope/img/icon-theme/breeze/actions/24/code-context.svg +12 -0
  168. dcscope/img/icon-theme/breeze/actions/24/dialog-cancel.svg +12 -0
  169. dcscope/img/icon-theme/breeze/actions/24/dialog-close.svg +10 -0
  170. dcscope/img/icon-theme/breeze/actions/24/dialog-messages.svg +12 -0
  171. dcscope/img/icon-theme/breeze/actions/24/dialog-ok-apply.svg +12 -0
  172. dcscope/img/icon-theme/breeze/actions/24/dialog-ok.svg +14 -0
  173. dcscope/img/icon-theme/breeze/actions/24/document-open-folder.svg +12 -0
  174. dcscope/img/icon-theme/breeze/actions/24/document-open.svg +12 -0
  175. dcscope/img/icon-theme/breeze/actions/24/document-save.svg +12 -0
  176. dcscope/img/icon-theme/breeze/actions/24/documentinfo.svg +14 -0
  177. dcscope/img/icon-theme/breeze/actions/24/draw-watercolor.svg +12 -0
  178. dcscope/img/icon-theme/breeze/actions/24/edit-clear-all.svg +14 -0
  179. dcscope/img/icon-theme/breeze/actions/24/edit-clear.svg +12 -0
  180. dcscope/img/icon-theme/breeze/actions/24/edit-paste.svg +12 -0
  181. dcscope/img/icon-theme/breeze/actions/24/globe.svg +14 -0
  182. dcscope/img/icon-theme/breeze/actions/24/gtk-preferences.svg +13 -0
  183. dcscope/img/icon-theme/breeze/actions/24/list-add.svg +12 -0
  184. dcscope/img/icon-theme/breeze/actions/24/messagebox_warning.svg +13 -0
  185. dcscope/img/icon-theme/breeze/actions/24/object-columns.svg +12 -0
  186. dcscope/img/icon-theme/breeze/actions/24/object-order-lower.svg +15 -0
  187. dcscope/img/icon-theme/breeze/actions/24/object-rows.svg +15 -0
  188. dcscope/img/icon-theme/breeze/actions/24/office-chart-line-stacked.svg +15 -0
  189. dcscope/img/icon-theme/breeze/actions/24/office-chart-ring.svg +15 -0
  190. dcscope/img/icon-theme/breeze/actions/24/office-chart-scatter.svg +15 -0
  191. dcscope/img/icon-theme/breeze/actions/24/path-mode-polyline.svg +15 -0
  192. dcscope/img/icon-theme/breeze/actions/24/preferences-activities.svg +13 -0
  193. dcscope/img/icon-theme/breeze/actions/24/remove.svg +10 -0
  194. dcscope/img/icon-theme/breeze/actions/24/special_paste.svg +12 -0
  195. dcscope/img/icon-theme/breeze/actions/24/tools-wizard.svg +12 -0
  196. dcscope/img/icon-theme/breeze/actions/24/view-calendar-list.svg +12 -0
  197. dcscope/img/icon-theme/breeze/actions/24/view-filter.svg +12 -0
  198. dcscope/img/icon-theme/breeze/actions/24/view-list-tree.svg +12 -0
  199. dcscope/img/icon-theme/breeze/actions/24/view-statistics.svg +12 -0
  200. dcscope/img/icon-theme/breeze/actions/24/visibility.svg +14 -0
  201. dcscope/img/icon-theme/breeze/actions/32/application-exit.svg +8 -0
  202. dcscope/img/icon-theme/breeze/actions/32/dialog-cancel.svg +13 -0
  203. dcscope/img/icon-theme/breeze/actions/32/dialog-messages.svg +13 -0
  204. dcscope/img/icon-theme/breeze/actions/32/dialog-ok-apply.svg +1 -0
  205. dcscope/img/icon-theme/breeze/actions/32/dialog-ok.svg +1 -0
  206. dcscope/img/icon-theme/breeze/actions/32/document-open-folder.svg +13 -0
  207. dcscope/img/icon-theme/breeze/actions/32/document-open.svg +13 -0
  208. dcscope/img/icon-theme/breeze/actions/32/document-save.svg +18 -0
  209. dcscope/img/icon-theme/breeze/actions/32/gtk-preferences.svg +17 -0
  210. dcscope/img/icon-theme/breeze/actions/32/object-order-lower.svg +18 -0
  211. dcscope/img/icon-theme/breeze/actions/32/view-filter.svg +18 -0
  212. dcscope/img/icon-theme/breeze/actions/32/view-list-tree.svg +18 -0
  213. dcscope/img/icon-theme/breeze/places/16/folder-cloud.svg +13 -0
  214. dcscope/img/icon-theme/breeze/places/16/folder.svg +13 -0
  215. dcscope/img/icon-theme/breeze/places/22/folder-cloud.svg +13 -0
  216. dcscope/img/icon-theme/breeze/places/22/folder.svg +13 -0
  217. dcscope/img/icon-theme/breeze/places/24/folder-cloud.svg +12 -0
  218. dcscope/img/icon-theme/breeze/places/24/folder.svg +12 -0
  219. dcscope/img/icon-theme/breeze/places/32/folder-cloud.svg +35 -0
  220. dcscope/img/icon-theme/breeze/places/32/folder.svg +30 -0
  221. dcscope/img/icon-theme/breeze/places/64/folder-cloud.svg +35 -0
  222. dcscope/img/icon-theme/breeze/places/64/folder.svg +30 -0
  223. dcscope/img/icon-theme/breeze/status/16/dialog-error.svg +9 -0
  224. dcscope/img/icon-theme/breeze/status/16/dialog-information.svg +9 -0
  225. dcscope/img/icon-theme/breeze/status/16/dialog-question.svg +7 -0
  226. dcscope/img/icon-theme/breeze/status/16/dialog-warning.svg +9 -0
  227. dcscope/img/icon-theme/breeze/status/22/dialog-error.svg +9 -0
  228. dcscope/img/icon-theme/breeze/status/22/dialog-information.svg +9 -0
  229. dcscope/img/icon-theme/breeze/status/22/dialog-question.svg +7 -0
  230. dcscope/img/icon-theme/breeze/status/22/dialog-warning.svg +9 -0
  231. dcscope/img/icon-theme/breeze/status/24/dialog-error.svg +13 -0
  232. dcscope/img/icon-theme/breeze/status/24/dialog-information.svg +13 -0
  233. dcscope/img/icon-theme/breeze/status/24/dialog-question.svg +9 -0
  234. dcscope/img/icon-theme/breeze/status/24/dialog-warning.svg +1 -0
  235. dcscope/img/icon-theme/breeze/status/64/dialog-error.svg +25 -0
  236. dcscope/img/icon-theme/breeze/status/64/dialog-information.svg +25 -0
  237. dcscope/img/icon-theme/breeze/status/64/dialog-question.svg +25 -0
  238. dcscope/img/icon-theme/breeze/status/64/dialog-warning.svg +25 -0
  239. dcscope/img/icon-theme/collect_icons.py +124 -0
  240. dcscope/img/icon-theme/dcscope/dcor.png +0 -0
  241. dcscope/img/icon-theme/dcscope/edit-copy-anew.svg +13 -0
  242. dcscope/img/icon-theme/dcscope/emodulus.svg +69 -0
  243. dcscope/img/icon-theme/dcscope/filter_ray.svg +54 -0
  244. dcscope/img/icon-theme/dcscope/region_channel.svg +86 -0
  245. dcscope/img/icon-theme/dcscope/region_reservoir.svg +89 -0
  246. dcscope/img/icon-theme/dcscope/rlang.svg +108 -0
  247. dcscope/img/icon-theme/dcscope/statistical_significance.svg +106 -0
  248. dcscope/img/icon-theme/index.theme +81 -0
  249. dcscope/img/icon.png +0 -0
  250. dcscope/img/icon.svg +73 -0
  251. dcscope/img/splash.png +0 -0
  252. dcscope/meta_tool.py +143 -0
  253. dcscope/pipeline/__init__.py +5 -0
  254. dcscope/pipeline/core.py +632 -0
  255. dcscope/pipeline/dataslot.py +270 -0
  256. dcscope/pipeline/filter.py +161 -0
  257. dcscope/pipeline/filter_ray.py +170 -0
  258. dcscope/pipeline/plot.py +187 -0
  259. dcscope/plot_cache.py +79 -0
  260. dcscope/session.py +379 -0
  261. dcscope/util.py +34 -0
  262. dcscope-2.22.1.dist-info/METADATA +95 -0
  263. dcscope-2.22.1.dist-info/RECORD +267 -0
  264. dcscope-2.22.1.dist-info/WHEEL +5 -0
  265. dcscope-2.22.1.dist-info/entry_points.txt +2 -0
  266. dcscope-2.22.1.dist-info/licenses/LICENSE +621 -0
  267. dcscope-2.22.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,269 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ui version="4.0">
3
+ <class>Form</class>
4
+ <widget class="QWidget" name="Form">
5
+ <property name="geometry">
6
+ <rect>
7
+ <x>0</x>
8
+ <y>0</y>
9
+ <width>702</width>
10
+ <height>547</height>
11
+ </rect>
12
+ </property>
13
+ <property name="minimumSize">
14
+ <size>
15
+ <width>600</width>
16
+ <height>500</height>
17
+ </size>
18
+ </property>
19
+ <property name="windowTitle">
20
+ <string>Analysis View</string>
21
+ </property>
22
+ <property name="windowIcon">
23
+ <iconset theme="tools-wizard"/>
24
+ </property>
25
+ <layout class="QHBoxLayout" name="horizontalLayout">
26
+ <item>
27
+ <widget class="QTabWidget" name="tabWidget">
28
+ <property name="currentIndex">
29
+ <number>1</number>
30
+ </property>
31
+ <widget class="QWidget" name="tab_meta">
32
+ <attribute name="icon">
33
+ <iconset theme="documentinfo"/>
34
+ </attribute>
35
+ <attribute name="title">
36
+ <string>Meta</string>
37
+ </attribute>
38
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
39
+ <property name="spacing">
40
+ <number>0</number>
41
+ </property>
42
+ <property name="leftMargin">
43
+ <number>0</number>
44
+ </property>
45
+ <property name="topMargin">
46
+ <number>0</number>
47
+ </property>
48
+ <property name="rightMargin">
49
+ <number>0</number>
50
+ </property>
51
+ <property name="bottomMargin">
52
+ <number>0</number>
53
+ </property>
54
+ <item>
55
+ <widget class="MetaPanel" name="widget_meta" native="true">
56
+ <property name="minimumSize">
57
+ <size>
58
+ <width>0</width>
59
+ <height>0</height>
60
+ </size>
61
+ </property>
62
+ </widget>
63
+ </item>
64
+ </layout>
65
+ </widget>
66
+ <widget class="QWidget" name="tab_basins">
67
+ <attribute name="icon">
68
+ <iconset theme="view-list-tree"/>
69
+ </attribute>
70
+ <attribute name="title">
71
+ <string>Basins</string>
72
+ </attribute>
73
+ <layout class="QVBoxLayout" name="verticalLayout_5">
74
+ <property name="leftMargin">
75
+ <number>0</number>
76
+ </property>
77
+ <property name="topMargin">
78
+ <number>0</number>
79
+ </property>
80
+ <property name="rightMargin">
81
+ <number>0</number>
82
+ </property>
83
+ <property name="bottomMargin">
84
+ <number>0</number>
85
+ </property>
86
+ <item>
87
+ <widget class="BasinsPanel" name="widget_basins" native="true"/>
88
+ </item>
89
+ </layout>
90
+ </widget>
91
+ <widget class="QWidget" name="tab_tables">
92
+ <attribute name="icon">
93
+ <iconset theme="office-chart-line-stacked"/>
94
+ </attribute>
95
+ <attribute name="title">
96
+ <string>Tables</string>
97
+ </attribute>
98
+ <layout class="QVBoxLayout" name="verticalLayout_4">
99
+ <property name="leftMargin">
100
+ <number>0</number>
101
+ </property>
102
+ <property name="topMargin">
103
+ <number>0</number>
104
+ </property>
105
+ <property name="rightMargin">
106
+ <number>0</number>
107
+ </property>
108
+ <property name="bottomMargin">
109
+ <number>0</number>
110
+ </property>
111
+ <item>
112
+ <widget class="TablesPanel" name="widget_tables" native="true"/>
113
+ </item>
114
+ </layout>
115
+ </widget>
116
+ <widget class="QWidget" name="tab_log">
117
+ <attribute name="icon">
118
+ <iconset theme="view-calendar-list"/>
119
+ </attribute>
120
+ <attribute name="title">
121
+ <string>Logs</string>
122
+ </attribute>
123
+ <layout class="QVBoxLayout" name="verticalLayout_3">
124
+ <property name="leftMargin">
125
+ <number>0</number>
126
+ </property>
127
+ <property name="topMargin">
128
+ <number>0</number>
129
+ </property>
130
+ <property name="rightMargin">
131
+ <number>0</number>
132
+ </property>
133
+ <property name="bottomMargin">
134
+ <number>0</number>
135
+ </property>
136
+ <item>
137
+ <widget class="LogPanel" name="widget_log" native="true"/>
138
+ </item>
139
+ </layout>
140
+ </widget>
141
+ <widget class="QWidget" name="tab_slot">
142
+ <attribute name="icon">
143
+ <iconset theme="office-chart-ring"/>
144
+ </attribute>
145
+ <attribute name="title">
146
+ <string>Dataset</string>
147
+ </attribute>
148
+ <layout class="QVBoxLayout" name="verticalLayout_2">
149
+ <property name="leftMargin">
150
+ <number>0</number>
151
+ </property>
152
+ <property name="topMargin">
153
+ <number>0</number>
154
+ </property>
155
+ <property name="rightMargin">
156
+ <number>0</number>
157
+ </property>
158
+ <property name="bottomMargin">
159
+ <number>0</number>
160
+ </property>
161
+ <item>
162
+ <widget class="SlotPanel" name="widget_slot" native="true"/>
163
+ </item>
164
+ </layout>
165
+ </widget>
166
+ <widget class="QWidget" name="tab_filter">
167
+ <attribute name="icon">
168
+ <iconset theme="view-filter"/>
169
+ </attribute>
170
+ <attribute name="title">
171
+ <string>Filter</string>
172
+ </attribute>
173
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
174
+ <property name="spacing">
175
+ <number>0</number>
176
+ </property>
177
+ <property name="leftMargin">
178
+ <number>0</number>
179
+ </property>
180
+ <property name="topMargin">
181
+ <number>0</number>
182
+ </property>
183
+ <property name="rightMargin">
184
+ <number>0</number>
185
+ </property>
186
+ <property name="bottomMargin">
187
+ <number>0</number>
188
+ </property>
189
+ <item>
190
+ <widget class="FilterPanel" name="widget_filter" native="true"/>
191
+ </item>
192
+ </layout>
193
+ </widget>
194
+ <widget class="QWidget" name="tab_plot">
195
+ <attribute name="icon">
196
+ <iconset theme="draw-watercolor"/>
197
+ </attribute>
198
+ <attribute name="title">
199
+ <string>Plot</string>
200
+ </attribute>
201
+ <layout class="QVBoxLayout" name="verticalLayout">
202
+ <property name="leftMargin">
203
+ <number>0</number>
204
+ </property>
205
+ <property name="topMargin">
206
+ <number>0</number>
207
+ </property>
208
+ <property name="rightMargin">
209
+ <number>0</number>
210
+ </property>
211
+ <property name="bottomMargin">
212
+ <number>0</number>
213
+ </property>
214
+ <item>
215
+ <widget class="PlotPanel" name="widget_plot" native="true"/>
216
+ </item>
217
+ </layout>
218
+ </widget>
219
+ </widget>
220
+ </item>
221
+ </layout>
222
+ </widget>
223
+ <customwidgets>
224
+ <customwidget>
225
+ <class>FilterPanel</class>
226
+ <extends>QWidget</extends>
227
+ <header>dcscope.gui.analysis</header>
228
+ <container>1</container>
229
+ </customwidget>
230
+ <customwidget>
231
+ <class>MetaPanel</class>
232
+ <extends>QWidget</extends>
233
+ <header>dcscope.gui.analysis</header>
234
+ <container>1</container>
235
+ </customwidget>
236
+ <customwidget>
237
+ <class>PlotPanel</class>
238
+ <extends>QWidget</extends>
239
+ <header>dcscope.gui.analysis</header>
240
+ <container>1</container>
241
+ </customwidget>
242
+ <customwidget>
243
+ <class>SlotPanel</class>
244
+ <extends>QWidget</extends>
245
+ <header>dcscope.gui.analysis</header>
246
+ <container>1</container>
247
+ </customwidget>
248
+ <customwidget>
249
+ <class>LogPanel</class>
250
+ <extends>QWidget</extends>
251
+ <header>dcscope.gui.analysis</header>
252
+ <container>1</container>
253
+ </customwidget>
254
+ <customwidget>
255
+ <class>TablesPanel</class>
256
+ <extends>QWidget</extends>
257
+ <header>dcscope.gui.analysis</header>
258
+ <container>1</container>
259
+ </customwidget>
260
+ <customwidget>
261
+ <class>BasinsPanel</class>
262
+ <extends>QWidget</extends>
263
+ <header>dcscope.gui.analysis</header>
264
+ <container>1</container>
265
+ </customwidget>
266
+ </customwidgets>
267
+ <resources/>
268
+ <connections/>
269
+ </ui>
@@ -0,0 +1,55 @@
1
+ import importlib.resources
2
+
3
+ from PyQt6 import uic, QtCore, QtWidgets
4
+
5
+
6
+ class DlgSlotReorder(QtWidgets.QDialog):
7
+ pipeline_changed = QtCore.pyqtSignal(dict)
8
+
9
+ def __init__(self, pipeline, *args, **kwargs):
10
+ super(DlgSlotReorder, self).__init__(*args, **kwargs)
11
+ ref = importlib.resources.files(
12
+ "dcscope.gui.analysis") / "dlg_slot_reorder.ui"
13
+ with importlib.resources.as_file(ref) as path_ui:
14
+ uic.loadUi(path_ui, self)
15
+
16
+ self.pipeline = pipeline
17
+ for ii, slot in enumerate(pipeline.slots):
18
+ self.listWidget.addItem("{}: {}".format(ii, slot.name))
19
+
20
+ self.toolButton_down.clicked.connect(self.on_move_item)
21
+ self.toolButton_up.clicked.connect(self.on_move_item)
22
+ btn_ok = self.buttonBox.button(
23
+ QtWidgets.QDialogButtonBox.StandardButton.Ok)
24
+ btn_ok.clicked.connect(self.on_ok)
25
+
26
+ @QtCore.pyqtSlot()
27
+ def on_ok(self):
28
+ """Apply the changes made in the UI and update the pipeline"""
29
+ # get order
30
+ indices = []
31
+ for row in range(self.listWidget.count()):
32
+ item = self.listWidget.item(row)
33
+ text = item.text()
34
+ idx = int(text.split(":", 1)[0])
35
+ indices.append(idx)
36
+ # reorder pipeline and send pipeline_changed signal
37
+ self.pipeline.reorder_slots(indices)
38
+ state = self.pipeline.__getstate__()
39
+ self.pipeline_changed.emit(state)
40
+
41
+ @QtCore.pyqtSlot()
42
+ def on_move_item(self):
43
+ """Move currently selected item one row up or down"""
44
+ row = self.listWidget.currentRow()
45
+ if row == -1:
46
+ return
47
+ item = self.listWidget.takeItem(row)
48
+
49
+ if self.sender() == self.toolButton_down:
50
+ new_row = row + 1
51
+ else:
52
+ new_row = row - 1
53
+
54
+ self.listWidget.insertItem(new_row, item)
55
+ self.listWidget.setCurrentRow(new_row)
@@ -0,0 +1,138 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ui version="4.0">
3
+ <class>Dialog</class>
4
+ <widget class="QDialog" name="Dialog">
5
+ <property name="geometry">
6
+ <rect>
7
+ <x>0</x>
8
+ <y>0</y>
9
+ <width>400</width>
10
+ <height>300</height>
11
+ </rect>
12
+ </property>
13
+ <property name="windowTitle">
14
+ <string>Change dataset order</string>
15
+ </property>
16
+ <layout class="QVBoxLayout" name="verticalLayout">
17
+ <item>
18
+ <widget class="QLabel" name="label">
19
+ <property name="text">
20
+ <string>To change the dataset order, use drag&amp;drop or select an item and use the arrow buttons.</string>
21
+ </property>
22
+ <property name="wordWrap">
23
+ <bool>true</bool>
24
+ </property>
25
+ </widget>
26
+ </item>
27
+ <item>
28
+ <layout class="QHBoxLayout" name="horizontalLayout">
29
+ <item>
30
+ <widget class="QListWidget" name="listWidget">
31
+ <property name="showDropIndicator" stdset="0">
32
+ <bool>true</bool>
33
+ </property>
34
+ <property name="dragDropMode">
35
+ <enum>QAbstractItemView::InternalMove</enum>
36
+ </property>
37
+ </widget>
38
+ </item>
39
+ <item>
40
+ <layout class="QVBoxLayout" name="verticalLayout_2">
41
+ <item>
42
+ <spacer name="verticalSpacer">
43
+ <property name="orientation">
44
+ <enum>Qt::Vertical</enum>
45
+ </property>
46
+ <property name="sizeHint" stdset="0">
47
+ <size>
48
+ <width>20</width>
49
+ <height>0</height>
50
+ </size>
51
+ </property>
52
+ </spacer>
53
+ </item>
54
+ <item>
55
+ <widget class="QToolButton" name="toolButton_up">
56
+ <property name="text">
57
+ <string>...</string>
58
+ </property>
59
+ <property name="arrowType">
60
+ <enum>Qt::UpArrow</enum>
61
+ </property>
62
+ </widget>
63
+ </item>
64
+ <item>
65
+ <widget class="QToolButton" name="toolButton_down">
66
+ <property name="text">
67
+ <string>...</string>
68
+ </property>
69
+ <property name="arrowType">
70
+ <enum>Qt::DownArrow</enum>
71
+ </property>
72
+ </widget>
73
+ </item>
74
+ <item>
75
+ <spacer name="verticalSpacer_2">
76
+ <property name="orientation">
77
+ <enum>Qt::Vertical</enum>
78
+ </property>
79
+ <property name="sizeHint" stdset="0">
80
+ <size>
81
+ <width>20</width>
82
+ <height>0</height>
83
+ </size>
84
+ </property>
85
+ </spacer>
86
+ </item>
87
+ </layout>
88
+ </item>
89
+ </layout>
90
+ </item>
91
+ <item>
92
+ <widget class="QDialogButtonBox" name="buttonBox">
93
+ <property name="orientation">
94
+ <enum>Qt::Horizontal</enum>
95
+ </property>
96
+ <property name="standardButtons">
97
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
98
+ </property>
99
+ </widget>
100
+ </item>
101
+ </layout>
102
+ </widget>
103
+ <resources/>
104
+ <connections>
105
+ <connection>
106
+ <sender>buttonBox</sender>
107
+ <signal>accepted()</signal>
108
+ <receiver>Dialog</receiver>
109
+ <slot>accept()</slot>
110
+ <hints>
111
+ <hint type="sourcelabel">
112
+ <x>248</x>
113
+ <y>254</y>
114
+ </hint>
115
+ <hint type="destinationlabel">
116
+ <x>157</x>
117
+ <y>274</y>
118
+ </hint>
119
+ </hints>
120
+ </connection>
121
+ <connection>
122
+ <sender>buttonBox</sender>
123
+ <signal>rejected()</signal>
124
+ <receiver>Dialog</receiver>
125
+ <slot>reject()</slot>
126
+ <hints>
127
+ <hint type="sourcelabel">
128
+ <x>316</x>
129
+ <y>260</y>
130
+ </hint>
131
+ <hint type="destinationlabel">
132
+ <x>286</x>
133
+ <y>274</y>
134
+ </hint>
135
+ </hints>
136
+ </connection>
137
+ </connections>
138
+ </ui>
@@ -0,0 +1,2 @@
1
+ # flake8: noqa: F401
2
+ from .bulk_emodulus import BulkActionEmodulus
@@ -0,0 +1,200 @@
1
+ import importlib.resources
2
+
3
+ import dclab
4
+ from dclab.features.emodulus.viscosity import (
5
+ KNOWN_MEDIA, SAME_MEDIA, get_viscosity
6
+ )
7
+ import numpy as np
8
+
9
+ from PyQt6 import uic, QtCore, QtWidgets
10
+
11
+ from dcscope.gui.analysis.ana_slot import SlotPanel
12
+ from dcscope.gui.widgets import show_wait_cursor
13
+
14
+
15
+ class BulkActionEmodulus(QtWidgets.QDialog):
16
+ #: Emitted when the pipeline is to be changed
17
+ pipeline_changed = QtCore.pyqtSignal(dict)
18
+
19
+ def __init__(self, parent, pipeline, *args, **kwargs):
20
+ super(BulkActionEmodulus, self).__init__(parent=parent,
21
+ *args, **kwargs)
22
+ ref = importlib.resources.files(
23
+ "dcscope.gui.bulk") / "bulk_emodulus.ui"
24
+ with importlib.resources.as_file(ref) as path_ui:
25
+ uic.loadUi(path_ui, self)
26
+
27
+ # main
28
+ self.parent = self.parent
29
+
30
+ # set pipeline
31
+ self.pipeline = pipeline
32
+
33
+ # ui choices
34
+ self.comboBox_medium.clear()
35
+ self.comboBox_medium.addItem("Other", "other")
36
+ for name in SAME_MEDIA:
37
+ for sk in SAME_MEDIA[name]:
38
+ if sk.count("Cell"): # just add CellCarrier information
39
+ info = f" ({sk})"
40
+ break
41
+ else:
42
+ info = ""
43
+ self.comboBox_medium.addItem(name + info, name)
44
+
45
+ self.comboBox_medium.addItem("Not defined", "undefined")
46
+ self.comboBox_medium.addItem("Unchanged", "unchanged")
47
+ self.comboBox_medium.setCurrentIndex(
48
+ self.comboBox_medium.findData("unchanged"))
49
+ self.comboBox_medium.currentIndexChanged.connect(self.on_cb_medium)
50
+
51
+ self.comboBox_temp.clear()
52
+ self.comboBox_temp.addItem("From feature", "feature")
53
+ self.comboBox_temp.addItem("From meta data", "config")
54
+ self.comboBox_temp.addItem("Manual", "manual")
55
+ self.comboBox_temp.setCurrentIndex(
56
+ self.comboBox_temp.findData("feature"))
57
+ self.comboBox_temp.currentIndexChanged.connect(self.on_cb_temp)
58
+
59
+ self.comboBox_visc_model.clear()
60
+ self.comboBox_visc_model.addItem("buyukurganci-2022",
61
+ "buyukurganci-2022")
62
+ self.comboBox_visc_model.addItem("herold-2017", "herold-2017")
63
+ self.comboBox_visc_model.setCurrentIndex(
64
+ self.comboBox_visc_model.findData("buyukurganci-2022"))
65
+ self.comboBox_visc_model.currentIndexChanged.connect(self.on_cb_medium)
66
+
67
+ self.comboBox_lut.clear()
68
+ lut_dict = dclab.features.emodulus.load.get_internal_lut_names_dict()
69
+ for lut_id in lut_dict.keys():
70
+ self.comboBox_lut.addItem(lut_id, lut_id)
71
+ # Set default LUT
72
+ idx = self.comboBox_lut.findData("LE-2D-FEM-19")
73
+ self.comboBox_lut.setCurrentIndex(idx)
74
+
75
+ # buttons
76
+ btn_ok = self.buttonBox.button(
77
+ QtWidgets.QDialogButtonBox.StandardButton.Ok)
78
+ btn_ok.clicked.connect(self.on_ok)
79
+
80
+ # spin control
81
+ self.doubleSpinBox_temp.valueChanged.connect(self.on_cb_temp)
82
+
83
+ self.on_cb_medium()
84
+
85
+ @QtCore.pyqtSlot()
86
+ def on_ok(self):
87
+ self.set_emodulus_properties()
88
+ self.update_ui()
89
+
90
+ @QtCore.pyqtSlot()
91
+ def on_cb_medium(self):
92
+ """User changed medium"""
93
+ medium = self.comboBox_medium.currentData()
94
+ if medium in list(SAME_MEDIA.keys()) + ["unchanged"]:
95
+ self.doubleSpinBox_visc.setEnabled(False)
96
+ self.comboBox_temp.setEnabled(True)
97
+ self.comboBox_visc_model.setEnabled(True)
98
+ else:
99
+ self.doubleSpinBox_visc.setEnabled(True)
100
+ self.comboBox_temp.setEnabled(False)
101
+ self.comboBox_visc_model.setEnabled(False)
102
+ self.on_cb_temp()
103
+
104
+ @QtCore.pyqtSlot()
105
+ def on_cb_temp(self):
106
+ """User changed temperature"""
107
+ temp = self.comboBox_temp.currentData()
108
+
109
+ if not self.comboBox_temp.isEnabled() or temp in ["feature", "config"]:
110
+ self.doubleSpinBox_temp.setEnabled(False)
111
+ self.doubleSpinBox_temp.setValue(np.nan)
112
+ else:
113
+ self.doubleSpinBox_temp.setEnabled(True)
114
+ if np.isnan(self.doubleSpinBox_temp.value()):
115
+ self.doubleSpinBox_temp.setValue(23)
116
+
117
+ self.update_viscosity()
118
+
119
+ @show_wait_cursor
120
+ @QtCore.pyqtSlot()
121
+ def set_emodulus_properties(self):
122
+ """Set the given emodulus properties for all datasets"""
123
+ medium = self.comboBox_medium.currentData()
124
+ visc_model = self.comboBox_visc_model.currentData()
125
+ lut = self.comboBox_lut.currentData()
126
+ if self.comboBox_temp.isEnabled():
127
+ scen = self.comboBox_temp.currentData()
128
+ else:
129
+ scen = None
130
+ if self.doubleSpinBox_temp.isEnabled():
131
+ tempval = self.doubleSpinBox_temp.value()
132
+ else:
133
+ tempval = None
134
+ if self.doubleSpinBox_visc.isEnabled():
135
+ viscval = self.doubleSpinBox_visc.value()
136
+ else:
137
+ viscval = None
138
+
139
+ if len(self.pipeline.slots) == 0:
140
+ return
141
+
142
+ for slot in self.pipeline.slots:
143
+ ds = slot.get_dataset()
144
+
145
+ # Use the internal sanity checks to determine whether
146
+ # we can set the medium or temperature scenarios.
147
+ valid_media = SlotPanel.get_dataset_choices_medium(ds)
148
+ valid_scenarios = SlotPanel.get_dataset_choices_temperature(ds)
149
+
150
+ state = slot.__getstate__()
151
+
152
+ if medium in [m[1] for m in valid_media]:
153
+ state["emodulus"]["emodulus medium"] = medium
154
+ # Set the viscosity here, because unknown media are
155
+ # available.
156
+ if viscval is not None:
157
+ state["emodulus"]["emodulus viscosity"] = viscval
158
+
159
+ if scen in [s[1] for s in valid_scenarios]: # scen is not None
160
+ state["emodulus"]["emodulus scenario"] = scen
161
+ if tempval is not None:
162
+ state["emodulus"]["emodulus temperature"] = tempval
163
+
164
+ if state["emodulus"]["emodulus medium"] in KNOWN_MEDIA:
165
+ state["emodulus"]["emodulus viscosity model"] = visc_model
166
+ else:
167
+ if "emodulus viscosity model" in state["emodulus"]:
168
+ state["emodulus"].pop("emodulus viscosity model")
169
+
170
+ state["emodulus"]["emodulus lut"] = lut
171
+
172
+ slot.__setstate__(state)
173
+
174
+ def update_ui(self):
175
+ """Update all relevant parts of the main user interface"""
176
+ state = self.pipeline.__getstate__()
177
+ self.pipeline_changed.emit(state)
178
+
179
+ def update_viscosity(self):
180
+ """Update viscosity shown"""
181
+ temp = self.comboBox_temp.currentData()
182
+
183
+ if not self.comboBox_temp.isEnabled() or temp in ["feature", "config"]:
184
+ self.doubleSpinBox_visc.setValue(np.nan)
185
+ self.doubleSpinBox_visc.setToolTip("unique values per dataset")
186
+ else:
187
+ # update the viscosity value shown in the spin control
188
+ medium = self.comboBox_medium.currentData()
189
+ if medium in KNOWN_MEDIA:
190
+ visc = get_viscosity(
191
+ temperature=self.doubleSpinBox_temp.value(),
192
+ medium=medium,
193
+ model=self.comboBox_visc_model.currentData(),
194
+ )
195
+ tooltip = "valid for 0.16 µL/s flow rate and 20 µm channel"
196
+ else:
197
+ visc = np.nan
198
+ tooltip = ""
199
+ self.doubleSpinBox_visc.setValue(visc)
200
+ self.doubleSpinBox_visc.setToolTip(tooltip)