dclab 0.66.0__tar.gz → 0.67.0__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.

Potentially problematic release.


This version of dclab might be problematic. Click here for more details.

Files changed (334) hide show
  1. {dclab-0.66.0 → dclab-0.67.0}/CHANGELOG +13 -5
  2. {dclab-0.66.0 → dclab-0.67.0}/PKG-INFO +8 -2
  3. {dclab-0.66.0 → dclab-0.67.0}/README.rst +7 -1
  4. {dclab-0.66.0 → dclab-0.67.0}/dclab/_version.py +16 -3
  5. {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_tdms2rtdc.py +1 -1
  6. {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/__init__.py +1 -1
  7. {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/feat_const.py +1 -1
  8. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/config.py +1 -1
  9. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/export.py +30 -0
  10. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_basin.py +49 -4
  11. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/events.py +20 -1
  12. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hierarchy/base.py +1 -1
  13. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/event_trace.py +1 -1
  14. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/naming.py +1 -1
  15. {dclab-0.66.0 → dclab-0.67.0}/dclab/warn.py +1 -1
  16. {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/PKG-INFO +8 -2
  17. {dclab-0.66.0 → dclab-0.67.0}/docs/conf.py +1 -1
  18. {dclab-0.66.0 → dclab-0.67.0}/docs/data/example.poly +1 -1
  19. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_basins/index.rst +2 -2
  20. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/plot_emodulus_lut.py +1 -1
  21. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_feat_temp.rst +1 -1
  22. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_notation.rst +1 -1
  23. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_scatter.rst +4 -4
  24. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_code_reference.rst +1 -1
  25. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_getting_started.rst +6 -6
  26. {dclab-0.66.0 → dclab-0.67.0}/tests/helper_methods.py +1 -1
  27. {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_argparse.py +13 -2
  28. {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_split.py +14 -2
  29. {dclab-0.66.0 → dclab-0.67.0}/tests/test_isoelastics.py +1 -1
  30. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_config.py +1 -1
  31. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_export_hdf5.py +39 -7
  32. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_anc_plugin.py +2 -0
  33. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_basin.py +29 -0
  34. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_basin_mapped.py +12 -0
  35. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_hdf5.py +2 -2
  36. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_hdf5_basins_internal.py +60 -0
  37. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_writer.py +1 -1
  38. {dclab-0.66.0 → dclab-0.67.0}/.gitignore +0 -0
  39. {dclab-0.66.0 → dclab-0.67.0}/.readthedocs.yml +0 -0
  40. {dclab-0.66.0 → dclab-0.67.0}/LICENSE +0 -0
  41. {dclab-0.66.0 → dclab-0.67.0}/MANIFEST.in +0 -0
  42. {dclab-0.66.0 → dclab-0.67.0}/dclab/__init__.py +0 -0
  43. {dclab-0.66.0 → dclab-0.67.0}/dclab/cached.py +0 -0
  44. {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/__init__.py +0 -0
  45. {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/common.py +0 -0
  46. {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_compress.py +0 -0
  47. {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_condense.py +0 -0
  48. {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_join.py +0 -0
  49. {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_repack.py +0 -0
  50. {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_split.py +0 -0
  51. {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_verify_dataset.py +0 -0
  52. {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/feat_logic.py +0 -0
  53. {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/meta_const.py +0 -0
  54. {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/meta_logic.py +0 -0
  55. {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/meta_parse.py +0 -0
  56. {dclab-0.66.0 → dclab-0.67.0}/dclab/downsampling.pyx +0 -0
  57. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/__init__.py +0 -0
  58. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/LICENSE +0 -0
  59. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/LICENSE.APACHE +0 -0
  60. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/LICENSE.BSD +0 -0
  61. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/__init__.py +0 -0
  62. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/_structures.py +0 -0
  63. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/version.py +0 -0
  64. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/LICENSE +0 -0
  65. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/__init__.py +0 -0
  66. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_find_contours.py +0 -0
  67. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_find_contours_cy.pyx +0 -0
  68. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_pnpoly.pyx +0 -0
  69. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_shared/__init__.py +0 -0
  70. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_shared/geometry.pxd +0 -0
  71. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_shared/geometry.pyx +0 -0
  72. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/measure.py +0 -0
  73. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/pnpoly.py +0 -0
  74. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/LICENSE +0 -0
  75. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/__init__.py +0 -0
  76. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/nonparametric/__init__.py +0 -0
  77. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/nonparametric/_kernel_base.py +0 -0
  78. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/nonparametric/kernel_density.py +0 -0
  79. {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/nonparametric/kernels.py +0 -0
  80. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/__init__.py +0 -0
  81. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/bright.py +0 -0
  82. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/bright_bc.py +0 -0
  83. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/bright_perc.py +0 -0
  84. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/contour.py +0 -0
  85. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/__init__.py +0 -0
  86. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/load.py +0 -0
  87. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/lut_HE-2D-FEM-22.txt +0 -0
  88. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/lut_HE-3D-FEM-22.txt +0 -0
  89. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/lut_LE-2D-FEM-19.txt +0 -0
  90. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/pxcorr.py +0 -0
  91. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/scale_linear.py +0 -0
  92. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/viscosity.py +0 -0
  93. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/fl_crosstalk.py +0 -0
  94. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/inert_ratio.py +0 -0
  95. {dclab-0.66.0 → dclab-0.67.0}/dclab/features/volume.py +0 -0
  96. {dclab-0.66.0 → dclab-0.67.0}/dclab/http_utils.py +0 -0
  97. {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/__init__.py +0 -0
  98. {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_HE-2D-FEM-22-area_um-deform.txt +0 -0
  99. {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_HE-2D-FEM-22-volume-deform.txt +0 -0
  100. {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_HE-3D-FEM-22-area_um-deform.txt +0 -0
  101. {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_HE-3D-FEM-22-volume-deform.txt +0 -0
  102. {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_LE-2D-FEM-19-area_um-deform.txt +0 -0
  103. {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_LE-2D-FEM-19-volume-deform.txt +0 -0
  104. {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_LE-2D-ana-18-area_um-deform.txt +0 -0
  105. {dclab-0.66.0 → dclab-0.67.0}/dclab/kde/__init__.py +0 -0
  106. {dclab-0.66.0 → dclab-0.67.0}/dclab/kde/base.py +0 -0
  107. {dclab-0.66.0 → dclab-0.67.0}/dclab/kde/contours.py +0 -0
  108. {dclab-0.66.0 → dclab-0.67.0}/dclab/kde/methods.py +0 -0
  109. {dclab-0.66.0 → dclab-0.67.0}/dclab/kde_contours.py +0 -0
  110. {dclab-0.66.0 → dclab-0.67.0}/dclab/kde_methods.py +0 -0
  111. {dclab-0.66.0 → dclab-0.67.0}/dclab/lme4/__init__.py +0 -0
  112. {dclab-0.66.0 → dclab-0.67.0}/dclab/lme4/lme4_template.R +0 -0
  113. {dclab-0.66.0 → dclab-0.67.0}/dclab/lme4/rsetup.py +0 -0
  114. {dclab-0.66.0 → dclab-0.67.0}/dclab/lme4/wrapr.py +0 -0
  115. {dclab-0.66.0 → dclab-0.67.0}/dclab/polygon_filter.py +0 -0
  116. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/__init__.py +0 -0
  117. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/check.py +0 -0
  118. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/copier.py +0 -0
  119. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/core.py +0 -0
  120. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/__init__.py +0 -0
  121. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/af_basic.py +0 -0
  122. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/af_emodulus.py +0 -0
  123. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/af_fl_max_ctc.py +0 -0
  124. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/af_image_contour.py +0 -0
  125. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/af_ml_class.py +0 -0
  126. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/ancillary_feature.py +0 -0
  127. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_ml/__init__.py +0 -0
  128. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_plugin/__init__.py +0 -0
  129. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_plugin/plugin_feature.py +0 -0
  130. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_temp.py +0 -0
  131. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/filter.py +0 -0
  132. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/__init__.py +0 -0
  133. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/access_token.py +0 -0
  134. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/api.py +0 -0
  135. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/base.py +0 -0
  136. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/basin.py +0 -0
  137. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/logs.py +0 -0
  138. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/tables.py +0 -0
  139. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dict.py +0 -0
  140. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/__init__.py +0 -0
  141. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/base.py +0 -0
  142. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/basin.py +0 -0
  143. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/feat_defect.py +0 -0
  144. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/logs.py +0 -0
  145. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/tables.py +0 -0
  146. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hierarchy/__init__.py +0 -0
  147. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hierarchy/events.py +0 -0
  148. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hierarchy/hfilter.py +0 -0
  149. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hierarchy/mapper.py +0 -0
  150. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_http.py +0 -0
  151. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_s3.py +0 -0
  152. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/__init__.py +0 -0
  153. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/event_contour.py +0 -0
  154. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/event_image.py +0 -0
  155. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/event_mask.py +0 -0
  156. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/exc.py +0 -0
  157. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/load.py +0 -0
  158. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/meta_table.py +0 -0
  159. {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/writer.py +0 -0
  160. {dclab-0.66.0 → dclab-0.67.0}/dclab/statistics.py +0 -0
  161. {dclab-0.66.0 → dclab-0.67.0}/dclab/util.py +0 -0
  162. {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/SOURCES.txt +0 -0
  163. {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/dependency_links.txt +0 -0
  164. {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/entry_points.txt +0 -0
  165. {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/requires.txt +0 -0
  166. {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/top_level.txt +0 -0
  167. {dclab-0.66.0 → dclab-0.67.0}/docs/.gitignore +0 -0
  168. {dclab-0.66.0 → dclab-0.67.0}/docs/README.md +0 -0
  169. {dclab-0.66.0 → dclab-0.67.0}/docs/data/example.rtdc +0 -0
  170. {dclab-0.66.0 → dclab-0.67.0}/docs/data/example_plugin.py +0 -0
  171. {dclab-0.66.0 → dclab-0.67.0}/docs/data/example_plugin_metadata.py +0 -0
  172. {dclab-0.66.0 → dclab-0.67.0}/docs/data/example_traces.rtdc +0 -0
  173. {dclab-0.66.0 → dclab-0.67.0}/docs/data/example_video.rtdc +0 -0
  174. {dclab-0.66.0 → dclab-0.67.0}/docs/dclab.bib +0 -0
  175. {dclab-0.66.0 → dclab-0.67.0}/docs/extensions/dclab_defs.py +0 -0
  176. {dclab-0.66.0 → dclab-0.67.0}/docs/extensions/fancy_include.py +0 -0
  177. {dclab-0.66.0 → dclab-0.67.0}/docs/extensions/github_changelog.py +0 -0
  178. {dclab-0.66.0 → dclab-0.67.0}/docs/extensions/simple_argparse.py +0 -0
  179. {dclab-0.66.0 → dclab-0.67.0}/docs/figures/DCOR_API_Token_website.png +0 -0
  180. {dclab-0.66.0 → dclab-0.67.0}/docs/index.rst +0 -0
  181. {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dc_logo.png +0 -0
  182. {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dc_logo.svg +0 -0
  183. {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dclab.png +0 -0
  184. {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dclab.svg +0 -0
  185. {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dclab_large_white.png +0 -0
  186. {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dclab_large_white.svg +0 -0
  187. {dclab-0.66.0 → dclab-0.67.0}/docs/logo/favicon.ico +0 -0
  188. {dclab-0.66.0 → dclab-0.67.0}/docs/logo/favicon.svg +0 -0
  189. {dclab-0.66.0 → dclab-0.67.0}/docs/requirements.txt +0 -0
  190. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_advanced_usage.rst +0 -0
  191. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_basins/basin_example_workflows.svg +0 -0
  192. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_dc_io.rst +0 -0
  193. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_dc_usage.rst +0 -0
  194. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_dcor.rst +0 -0
  195. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/.gitignore +0 -0
  196. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-2D-FEM-22.png +0 -0
  197. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-3D-FEM-22.png +0 -0
  198. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_LE-2D-FEM-19.png +0 -0
  199. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/requirements.txt +0 -0
  200. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_viscosity/LICENSE +0 -0
  201. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.jpg +0 -0
  202. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.pdf +0 -0
  203. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/index.rst +0 -0
  204. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_feat_plugin.rst +0 -0
  205. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_fluorescence.rst +0 -0
  206. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_lme4.rst +0 -0
  207. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_s3.rst +0 -0
  208. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_changelog.rst +0 -0
  209. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_cli.rst +0 -0
  210. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_examples.rst +0 -0
  211. {dclab-0.66.0 → dclab-0.67.0}/docs/sec_z_bib.rst +0 -0
  212. {dclab-0.66.0 → dclab-0.67.0}/examples/emodulus_dcor.jpg +0 -0
  213. {dclab-0.66.0 → dclab-0.67.0}/examples/emodulus_dcor.py +0 -0
  214. {dclab-0.66.0 → dclab-0.67.0}/examples/generate_example_images.py +0 -0
  215. {dclab-0.66.0 → dclab-0.67.0}/examples/isoelastics.jpg +0 -0
  216. {dclab-0.66.0 → dclab-0.67.0}/examples/isoelastics.py +0 -0
  217. {dclab-0.66.0 → dclab-0.67.0}/examples/isoelastics_custom.jpg +0 -0
  218. {dclab-0.66.0 → dclab-0.67.0}/examples/isoelastics_custom.py +0 -0
  219. {dclab-0.66.0 → dclab-0.67.0}/examples/lme4_glmer_diff.py +0 -0
  220. {dclab-0.66.0 → dclab-0.67.0}/examples/lme4_lmer.jpg +0 -0
  221. {dclab-0.66.0 → dclab-0.67.0}/examples/lme4_lmer.py +0 -0
  222. {dclab-0.66.0 → dclab-0.67.0}/examples/overview_plot.jpg +0 -0
  223. {dclab-0.66.0 → dclab-0.67.0}/examples/overview_plot.py +0 -0
  224. {dclab-0.66.0 → dclab-0.67.0}/examples/plugin_example.py +0 -0
  225. {dclab-0.66.0 → dclab-0.67.0}/examples/plugin_usage.jpg +0 -0
  226. {dclab-0.66.0 → dclab-0.67.0}/examples/plugin_usage.py +0 -0
  227. {dclab-0.66.0 → dclab-0.67.0}/examples/viscosity_models.jpg +0 -0
  228. {dclab-0.66.0 → dclab-0.67.0}/examples/viscosity_models.py +0 -0
  229. {dclab-0.66.0 → dclab-0.67.0}/pyproject.toml +0 -0
  230. {dclab-0.66.0 → dclab-0.67.0}/scripts/.gitignore +0 -0
  231. {dclab-0.66.0 → dclab-0.67.0}/scripts/README.md +0 -0
  232. {dclab-0.66.0 → dclab-0.67.0}/scripts/fem2iso_volume.py +0 -0
  233. {dclab-0.66.0 → dclab-0.67.0}/scripts/fem2lutiso_std.py +0 -0
  234. {dclab-0.66.0 → dclab-0.67.0}/scripts/fem2rtdc.py +0 -0
  235. {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/__init__.py +0 -0
  236. {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/LUT_analytical_linear-elastic_2Daxis.txt +0 -0
  237. {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/README.md +0 -0
  238. {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/__init__.py +0 -0
  239. {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/common.py +0 -0
  240. {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/he_2d_fem_22.py +0 -0
  241. {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/he_3d_fem_22.py +0 -0
  242. {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/le_2d_fem_19.py +0 -0
  243. {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/lut_processor.py +0 -0
  244. {dclab-0.66.0 → dclab-0.67.0}/scripts/pixelation_correction.py +0 -0
  245. {dclab-0.66.0 → dclab-0.67.0}/scripts/pixelation_correction_2020.png +0 -0
  246. {dclab-0.66.0 → dclab-0.67.0}/scripts/pixelation_correction_2022.png +0 -0
  247. {dclab-0.66.0 → dclab-0.67.0}/scripts/requirements.txt +0 -0
  248. {dclab-0.66.0 → dclab-0.67.0}/scripts/vid2dc.py +0 -0
  249. {dclab-0.66.0 → dclab-0.67.0}/setup.cfg +0 -0
  250. {dclab-0.66.0 → dclab-0.67.0}/setup.py +0 -0
  251. {dclab-0.66.0 → dclab-0.67.0}/tests/README.md +0 -0
  252. {dclab-0.66.0 → dclab-0.67.0}/tests/conftest.py +0 -0
  253. {dclab-0.66.0 → dclab-0.67.0}/tests/data/README.md +0 -0
  254. {dclab-0.66.0 → dclab-0.67.0}/tests/data/example_access_token.dcor-access +0 -0
  255. {dclab-0.66.0 → dclab-0.67.0}/tests/data/example_isoelastics.txt +0 -0
  256. {dclab-0.66.0 → dclab-0.67.0}/tests/data/feat_anc_plugin_creative.py +0 -0
  257. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_fl-no-contour_2019.zip +0 -0
  258. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_fl_2017.zip +0 -0
  259. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_fl_2018.zip +0 -0
  260. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_fl_wide-channel_2023.zip +0 -0
  261. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_image-bg_2020.zip +0 -0
  262. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_image-mask-blood_2021.zip +0 -0
  263. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_mask-contour_2018.zip +0 -0
  264. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_polygon_gate_2021.zip +0 -0
  265. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_raw-cytoshot-exported.zip +0 -0
  266. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_segfault-compound_2023.zip +0 -0
  267. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_wide-channel_2023.zip +0 -0
  268. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_2fl-no-image_2017.zip +0 -0
  269. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_fl-image-bright_2017.zip +0 -0
  270. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_fl-image-large-fov_2017.zip +0 -0
  271. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_fl-image_2016.zip +0 -0
  272. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_fl_2015.zip +0 -0
  273. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_minimal_2016.zip +0 -0
  274. {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_shapein-2.0.1-no-image_2017.zip +0 -0
  275. {dclab-0.66.0 → dclab-0.67.0}/tests/requirements.txt +0 -0
  276. {dclab-0.66.0 → dclab-0.67.0}/tests/test_cache.py +0 -0
  277. {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli.py +0 -0
  278. {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_compress.py +0 -0
  279. {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_condense.py +0 -0
  280. {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_join.py +0 -0
  281. {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_repack.py +0 -0
  282. {dclab-0.66.0 → dclab-0.67.0}/tests/test_config_value_mapping.py +0 -0
  283. {dclab-0.66.0 → dclab-0.67.0}/tests/test_dfn_feat.py +0 -0
  284. {dclab-0.66.0 → dclab-0.67.0}/tests/test_dfn_meta.py +0 -0
  285. {dclab-0.66.0 → dclab-0.67.0}/tests/test_downsampling.py +0 -0
  286. {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_bright.py +0 -0
  287. {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_bright_bc.py +0 -0
  288. {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_bright_perc.py +0 -0
  289. {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_contour.py +0 -0
  290. {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_emodulus.py +0 -0
  291. {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_emodulus_viscosity.py +0 -0
  292. {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_fl_crosstalk.py +0 -0
  293. {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_inert_ratio.py +0 -0
  294. {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_volume.py +0 -0
  295. {dclab-0.66.0 → dclab-0.67.0}/tests/test_http_utils.py +0 -0
  296. {dclab-0.66.0 → dclab-0.67.0}/tests/test_kde.py +0 -0
  297. {dclab-0.66.0 → dclab-0.67.0}/tests/test_kde_contours.py +0 -0
  298. {dclab-0.66.0 → dclab-0.67.0}/tests/test_kde_deprecations.py +0 -0
  299. {dclab-0.66.0 → dclab-0.67.0}/tests/test_kde_methods.py +0 -0
  300. {dclab-0.66.0 → dclab-0.67.0}/tests/test_lme4.py +0 -0
  301. {dclab-0.66.0 → dclab-0.67.0}/tests/test_lut_he_2d_fem_22.py +0 -0
  302. {dclab-0.66.0 → dclab-0.67.0}/tests/test_lut_he_3d_fem_22.py +0 -0
  303. {dclab-0.66.0 → dclab-0.67.0}/tests/test_polygon_contains.py +0 -0
  304. {dclab-0.66.0 → dclab-0.67.0}/tests/test_polygon_filter.py +0 -0
  305. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_check_dataset.py +0 -0
  306. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_copier.py +0 -0
  307. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_core_feat.py +0 -0
  308. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_downsampling.py +0 -0
  309. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_export.py +0 -0
  310. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_export_avi.py +0 -0
  311. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_export_fcs.py +0 -0
  312. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_export_tsv.py +0 -0
  313. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_anc_core.py +0 -0
  314. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_anc_ml.py +0 -0
  315. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_basin_perishable.py +0 -0
  316. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_temp.py +0 -0
  317. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_filter.py +0 -0
  318. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_dcor.py +0 -0
  319. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_dcor_access_token.py +0 -0
  320. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_dcor_basin.py +0 -0
  321. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_dcor_private.py +0 -0
  322. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_dict.py +0 -0
  323. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_hdf5_basins.py +0 -0
  324. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_hierarchy.py +0 -0
  325. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_http.py +0 -0
  326. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_http_basin.py +0 -0
  327. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_s3.py +0 -0
  328. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_s3_basin.py +0 -0
  329. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_tdms.py +0 -0
  330. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_hash.py +0 -0
  331. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_kde.py +0 -0
  332. {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_limit_events.py +0 -0
  333. {dclab-0.66.0 → dclab-0.67.0}/tests/test_statistics.py +0 -0
  334. {dclab-0.66.0 → dclab-0.67.0}/tests/test_util.py +0 -0
@@ -1,3 +1,11 @@
1
+ 0.67.0
2
+ - BREAKING CHANGE: make it difficult to export the "contour" feature
3
+ - fix: `BasinProxyFeature` returned incorrect `shape` and `size`
4
+ - enh: implement `size` for `H5MaskEvent` and `H5ScalarEvent`
5
+ - enh: implement `BasinProxyContour`
6
+ - enh: improve hashing of `H5ContourEvent`
7
+ - docs: acknowledge Shape-Out is being continued as DCscope
8
+ - tests: correct DCOR IP address
1
9
  0.66.0
2
10
  - feat: introduce optional identifiers for basins
3
11
  - ref: rename `measurement_identifier` to `referrer_identifier`
@@ -1495,7 +1503,7 @@
1495
1503
  - Contour accuracy for Defo overridden by that of Circ
1496
1504
  0.1.5
1497
1505
  - Fix regressions with filtering.
1498
- https://github.com/ZELLMECHANIK-DRESDEN/ShapeOut/issues/43
1506
+ https://github.com/DC-analysis/DCscope/issues/43
1499
1507
  - Ignore empty columns in .tdms files (#1)
1500
1508
  - Moved RTDC_DataSet and PolygonFilter classes to separate files
1501
1509
  - Introduce more transparent caching - improves speed in some cases
@@ -1504,10 +1512,10 @@
1504
1512
  0.1.3
1505
1513
  - Fixed minor polygon filter problems.
1506
1514
  - Fix a couple of Shape-Out-related issues:
1507
- - https://github.com/ZELLMECHANIK-DRESDEN/ShapeOut/issues/17
1508
- - https://github.com/ZELLMECHANIK-DRESDEN/ShapeOut/issues/20
1509
- - https://github.com/ZELLMECHANIK-DRESDEN/ShapeOut/issues/37
1510
- - https://github.com/ZELLMECHANIK-DRESDEN/ShapeOut/issues/38
1515
+ - https://github.com/DC-analysis/DCscope/issues/17
1516
+ - https://github.com/DC-analysis/DCscope/issues/20
1517
+ - https://github.com/DC-analysis/DCscope/issues/37
1518
+ - https://github.com/DC-analysis/DCscope/issues/38
1511
1519
  0.1.2
1512
1520
  - Add support for limiting amount of data points analyzed
1513
1521
  with the configuration keyword "Limit Events"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dclab
3
- Version: 0.66.0
3
+ Version: 0.67.0
4
4
  Summary: Library for real-time deformability cytometry (RT-DC)
5
5
  Author: Benedikt Hartmann, Eoghan O'Connell, Maik Herbig, Maximilian Schlögel, Nadia Sbaa, Paul Müller, Philipp Rosendahl, Raghava Alajangi
6
6
  Maintainer-email: Paul Müller <dev@craban.de>
@@ -46,7 +46,13 @@ Dynamic: license-file
46
46
 
47
47
  This is a Python library for the post-measurement analysis of
48
48
  real-time deformability cytometry (RT-DC) datasets; an essential part of
49
- `Shape-Out <https://github.com/ZELLMECHANIK-DRESDEN/ShapeOut2>`__.
49
+ the DC Cosmos (
50
+ `DCscope <https://github.com/DC-analysis/DCscope>`__,
51
+ `DCOR <https://github.com/DCOR-dev/dcor_control>`__,
52
+ `DCOR-Aid <https://github.com/DCOR-dev/DCOR-Aid>`__,
53
+ `DCTag <https://github.com/DC-analysis/DCTag>`__,
54
+ `DCKit <https://github.com/DC-analysis/DCKit>`__,
55
+ ).
50
56
 
51
57
  Documentation
52
58
  -------------
@@ -6,7 +6,13 @@
6
6
 
7
7
  This is a Python library for the post-measurement analysis of
8
8
  real-time deformability cytometry (RT-DC) datasets; an essential part of
9
- `Shape-Out <https://github.com/ZELLMECHANIK-DRESDEN/ShapeOut2>`__.
9
+ the DC Cosmos (
10
+ `DCscope <https://github.com/DC-analysis/DCscope>`__,
11
+ `DCOR <https://github.com/DCOR-dev/dcor_control>`__,
12
+ `DCOR-Aid <https://github.com/DCOR-dev/DCOR-Aid>`__,
13
+ `DCTag <https://github.com/DC-analysis/DCTag>`__,
14
+ `DCKit <https://github.com/DC-analysis/DCKit>`__,
15
+ ).
10
16
 
11
17
  Documentation
12
18
  -------------
@@ -1,7 +1,14 @@
1
1
  # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
3
 
4
- __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
4
+ __all__ = [
5
+ "__version__",
6
+ "__version_tuple__",
7
+ "version",
8
+ "version_tuple",
9
+ "__commit_id__",
10
+ "commit_id",
11
+ ]
5
12
 
6
13
  TYPE_CHECKING = False
7
14
  if TYPE_CHECKING:
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
9
16
  from typing import Union
10
17
 
11
18
  VERSION_TUPLE = Tuple[Union[int, str], ...]
19
+ COMMIT_ID = Union[str, None]
12
20
  else:
13
21
  VERSION_TUPLE = object
22
+ COMMIT_ID = object
14
23
 
15
24
  version: str
16
25
  __version__: str
17
26
  __version_tuple__: VERSION_TUPLE
18
27
  version_tuple: VERSION_TUPLE
28
+ commit_id: COMMIT_ID
29
+ __commit_id__: COMMIT_ID
19
30
 
20
- __version__ = version = '0.66.0'
21
- __version_tuple__ = version_tuple = (0, 66, 0)
31
+ __version__ = version = '0.67.0'
32
+ __version_tuple__ = version_tuple = (0, 67, 0)
33
+
34
+ __commit_id__ = commit_id = 'g52c420117'
@@ -158,7 +158,7 @@ def tdms2rtdc_parser():
158
158
  help='Compute features, such as volume or emodulus, '
159
159
  + 'that are otherwise computed on-the-fly. '
160
160
  + 'Use this if you want to minimize analysis '
161
- + 'time in e.g. Shape-Out. CAUTION: ancillary '
161
+ + 'time in e.g. DCscope. CAUTION: ancillary '
162
162
  + 'feature recipes might be subject to change '
163
163
  + '(e.g. if an error is found in the recipe). '
164
164
  + 'Disabling this option maximizes '
@@ -6,7 +6,7 @@ from .feat_const import (
6
6
  # these should not be used
7
7
  feature_names, feature_labels, feature_name2label,
8
8
  # this one should also not be used, but we wait with deprecation,
9
- # because Shape-Out heavily relies on it (it shouldn't)
9
+ # because DCscope heavily relies on it (it shouldn't)
10
10
  scalar_feature_names
11
11
  )
12
12
  from .feat_logic import (
@@ -149,7 +149,7 @@ for _i in range(10):
149
149
  #: consist of the integer array `[1, 3, 5, 7, ...]` (indexing starts at zero).
150
150
  #: The `basinmap1` feature must then be referenced in the corresponding basin
151
151
  #: definition. These features should not be presented explicitly to the
152
- #: normal user (e.g. in Shape-Out) to avoid ambiguities, and they should
152
+ #: normal user (e.g. in DCscope) to avoid ambiguities, and they should
153
153
  #: always be exported alongside basins that refer to them.
154
154
  for _j in range(10):
155
155
  FEATURES_SCALAR.append([f"basinmap{_j}", f"Basin mapping {_j}"])
@@ -437,7 +437,7 @@ def load_from_file(cfg_file):
437
437
  convfunc = dfn.get_config_value_func(sec, var)
438
438
  val = convfunc(val)
439
439
  else:
440
- # unknown parameter (e.g. plotting in Shape-Out), guess type
440
+ # unknown parameter (e.g. plotting in DCscope), guess type
441
441
  var, val = keyval_str2typ(var, val)
442
442
  if len(var) != 0 and len(str(val)) != 0:
443
443
  cfg[sec][var] = val
@@ -39,6 +39,10 @@ class LimitingExportSizeWarning(UserWarning):
39
39
  pass
40
40
 
41
41
 
42
+ class ContourNotExportedWarning(UserWarning):
43
+ pass
44
+
45
+
42
46
  class Export(object):
43
47
  def __init__(self, rtdc_ds):
44
48
  """Export functionalities for RT-DC datasets"""
@@ -228,6 +232,7 @@ class Export(object):
228
232
  logs: bool = False,
229
233
  tables: bool = False,
230
234
  basins: bool = False,
235
+ allow_contour: bool = False,
231
236
  meta_prefix: str = "src_",
232
237
  override: bool = False,
233
238
  compression_kwargs: Dict = None,
@@ -260,6 +265,14 @@ class Export(object):
260
265
  Whether to export basins. If filtering is disabled, basins
261
266
  are copied directly to the output file. If filtering is enabled,
262
267
  then mapped basins are exported.
268
+ allow_contour: bool
269
+ Whether to allow exporting the "contour" feature. Writing this
270
+ feature to an HDF5 file is extremely inefficient, because it
271
+ cannot be represented by an ND array and thus must be stored
272
+ in a group, each contour stored in a separate dataset. The
273
+ contour can easily be computed via the mask, so actually storing
274
+ the contour should be avoided. If "contour" is in `features`,
275
+ it will only be written to the output file if `allow_contour=True`.
263
276
  meta_prefix: str
264
277
  Prefix for log and table names in the exported file
265
278
  override: bool
@@ -318,8 +331,25 @@ class Export(object):
318
331
  # for convenience
319
332
  ds = self.rtdc_ds
320
333
 
334
+ # remove contour information from user-specified features
335
+ if "contour" in (features or []) and not allow_contour:
336
+ features = list(features)
337
+ features.remove("contour")
338
+ warnings.warn(
339
+ "Feature 'contour' not exported to output file, because "
340
+ "`allow_contour` is `False`. If you really need the "
341
+ "'contour' feature in the output file (unlikely, unless you "
342
+ "are venturing outside the DC Cosmos), you must set "
343
+ "`allow_contour=True`. Otherwise, you can safely ignore "
344
+ "this warning or silence it by not providing 'contour' in "
345
+ "`features`.",
346
+ ContourNotExportedWarning)
347
+
321
348
  if features is None:
322
349
  features = ds.features_innate
350
+ # silently remove contour information
351
+ if "contour" in features and not allow_contour:
352
+ features.remove("contour")
323
353
 
324
354
  # decide which metadata to export
325
355
  meta = {}
@@ -567,8 +567,8 @@ class BasinProxy:
567
567
  def __getitem__(self, feat):
568
568
  if feat not in self._features:
569
569
  if feat == "contour":
570
- raise NotImplementedError("Feature 'contour' cannot be "
571
- "handled by BasinProxy.")
570
+ feat_obj = BasinProxyContour(feat_obj=self.ds[feat],
571
+ basinmap=self.basinmap)
572
572
  else:
573
573
  feat_obj = BasinProxyFeature(feat_obj=self.ds[feat],
574
574
  basinmap=self.basinmap)
@@ -579,14 +579,61 @@ class BasinProxy:
579
579
  return len(self.basinmap)
580
580
 
581
581
 
582
+ class BasinProxyContour:
583
+ def __init__(self, feat_obj, basinmap):
584
+ """Wrap around a contour, mapping it upon data access, no caching"""
585
+ self.feat_obj = feat_obj
586
+ self.basinmap = basinmap
587
+ self.is_scalar = False
588
+ self.shape = (len(self.basinmap), np.nan, 2)
589
+ self.identifier = feat_obj.identifier
590
+
591
+ def __getattr__(self, item):
592
+ if item in [
593
+ "dtype",
594
+ ]:
595
+ return getattr(self.feat_obj, item)
596
+ else:
597
+ raise AttributeError(
598
+ f"BasinProxyContour does not implement {item}")
599
+
600
+ def __getitem__(self, index):
601
+ if isinstance(index, numbers.Integral):
602
+ # single index, cheap operation
603
+ return self.feat_obj[self.basinmap[index]]
604
+ else:
605
+ raise NotImplementedError(
606
+ "Cannot index contours without anything else than integers.")
607
+
608
+ def __len__(self):
609
+ return self.shape[0]
610
+
611
+
582
612
  class BasinProxyFeature(np.lib.mixins.NDArrayOperatorsMixin):
583
613
  def __init__(self, feat_obj, basinmap):
584
614
  """Wrap around a feature object, mapping it upon data access"""
585
615
  self.feat_obj = feat_obj
586
616
  self.basinmap = basinmap
587
617
  self._cache = None
618
+ self._shape = None
619
+ self._size = None
588
620
  self.is_scalar = bool(len(self.feat_obj.shape) == 1)
589
621
 
622
+ @property
623
+ def shape(self):
624
+ if self._shape is None:
625
+ if self.is_scalar:
626
+ self._shape = self.basinmap.shape
627
+ else:
628
+ self._shape = (self.basinmap.size,) + self.feat_obj.shape[1:]
629
+ return self._shape
630
+
631
+ @property
632
+ def size(self):
633
+ if self._size is None:
634
+ self._size = np.prod(self.shape)
635
+ return self._size
636
+
590
637
  def __array__(self, dtype=None, copy=copy_if_needed, *args, **kwargs):
591
638
  if self._cache is None and self.is_scalar:
592
639
  self._cache = self.feat_obj[:][self.basinmap]
@@ -603,8 +650,6 @@ class BasinProxyFeature(np.lib.mixins.NDArrayOperatorsMixin):
603
650
  def __getattr__(self, item):
604
651
  if item in [
605
652
  "dtype",
606
- "shape",
607
- "size",
608
653
  ]:
609
654
  return getattr(self.feat_obj, item)
610
655
  else:
@@ -1,6 +1,7 @@
1
1
  """RT-DC hdf5 format"""
2
2
  from __future__ import annotations
3
3
 
4
+ import pathlib
4
5
  import warnings
5
6
 
6
7
  import numbers
@@ -17,7 +18,17 @@ class H5ContourEvent:
17
18
  self._length = length
18
19
  self.h5group = h5group
19
20
  # for hashing in util.obj2bytes
20
- self.identifier = (h5group.file.filename, h5group["0"].name)
21
+ # path within the HDF5 file
22
+ o_name = h5group["0"].name,
23
+ # filename
24
+ o_filename = h5group.file.filename
25
+ _data = [o_name, o_filename]
26
+ if pathlib.Path(o_filename).exists():
27
+ # when the file was changed
28
+ _data.append(pathlib.Path(h5group.file.filename).stat().st_mtime)
29
+ # size of the file
30
+ _data.append(pathlib.Path(h5group.file.filename).stat().st_size)
31
+ self.identifier = _data
21
32
 
22
33
  def __getitem__(self, key):
23
34
  if not isinstance(key, numbers.Integral):
@@ -168,6 +179,10 @@ class H5MaskEvent:
168
179
  def shape(self):
169
180
  return self.h5dataset.shape
170
181
 
182
+ @property
183
+ def size(self):
184
+ return np.prod(self.shape)
185
+
171
186
 
172
187
  class H5ScalarEvent(np.lib.mixins.NDArrayOperatorsMixin):
173
188
  def __init__(self, h5ds):
@@ -224,6 +239,10 @@ class H5ScalarEvent(np.lib.mixins.NDArrayOperatorsMixin):
224
239
  def shape(self):
225
240
  return self.h5ds.shape
226
241
 
242
+ @property
243
+ def size(self):
244
+ return len(self)
245
+
227
246
 
228
247
  class H5TraceEvent:
229
248
  def __init__(self, h5group):
@@ -29,7 +29,7 @@ class RTDC_Hierarchy(RTDCBase):
29
29
  Children in hierarchies always update their data according to
30
30
  the filtered event data from their parent when `apply_filter`
31
31
  is called. This makes it easier to save and load hierarchy
32
- children with e.g. Shape-Out and it makes the handling of
32
+ children with e.g. DCscope and it makes the handling of
33
33
  hierarchies more intuitive (when the parent changes,
34
34
  the child changes as well).
35
35
 
@@ -17,7 +17,7 @@ class TraceColumn(object):
17
17
 
18
18
  The trace data is loaded when __getitem__, __len__, or __iter__
19
19
  are called. This saves time and memory when the trace data is
20
- not needed at all, e.g. for batch processing with Shape-Out.
20
+ not needed at all, e.g. for batch processing with DCscope.
21
21
  """
22
22
  self._trace = None
23
23
  self.mname = rtdc_dataset.path
@@ -49,7 +49,7 @@ for kk in dclab2tdms:
49
49
  tdms2dclab[dclab2tdms[kk]] = kk
50
50
 
51
51
  # Add capitalized userdef features as well.
52
- # see https://github.com/ZELLMECHANIK-DRESDEN/ShapeOut/issues/212
52
+ # see https://github.com/DC-analysis/DCscope/issues/212
53
53
  for _i in range(10):
54
54
  tdms2dclab["UserDef{}".format(_i)] = "userdef{}".format(_i)
55
55
 
@@ -9,7 +9,7 @@ class PipelineWarning(UserWarning):
9
9
  computation) in his analysis pipeline. All of these
10
10
  warnings should be subclassed from PipelineWarning
11
11
  to allow identifying them in higher-level software
12
- such as Shape-Out and to present them correctly to the
12
+ such as DCscope and to present them correctly to the
13
13
  user.
14
14
  """
15
15
  pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dclab
3
- Version: 0.66.0
3
+ Version: 0.67.0
4
4
  Summary: Library for real-time deformability cytometry (RT-DC)
5
5
  Author: Benedikt Hartmann, Eoghan O'Connell, Maik Herbig, Maximilian Schlögel, Nadia Sbaa, Paul Müller, Philipp Rosendahl, Raghava Alajangi
6
6
  Maintainer-email: Paul Müller <dev@craban.de>
@@ -46,7 +46,13 @@ Dynamic: license-file
46
46
 
47
47
  This is a Python library for the post-measurement analysis of
48
48
  real-time deformability cytometry (RT-DC) datasets; an essential part of
49
- `Shape-Out <https://github.com/ZELLMECHANIK-DRESDEN/ShapeOut2>`__.
49
+ the DC Cosmos (
50
+ `DCscope <https://github.com/DC-analysis/DCscope>`__,
51
+ `DCOR <https://github.com/DCOR-dev/dcor_control>`__,
52
+ `DCOR-Aid <https://github.com/DCOR-dev/DCOR-Aid>`__,
53
+ `DCTag <https://github.com/DC-analysis/DCTag>`__,
54
+ `DCKit <https://github.com/DC-analysis/DCKit>`__,
55
+ ).
50
56
 
51
57
  Documentation
52
58
  -------------
@@ -206,5 +206,5 @@ intersphinx_mapping = {
206
206
  "numpy": ('https://numpy.org/doc/stable/', None),
207
207
  "skimage": ('https://scikit-image.org/docs/stable/', None),
208
208
  "scipy": ('https://docs.scipy.org/doc/scipy/', None),
209
- "shapeout2": ('https://shapeout2.readthedocs.io/en/stable/', None),
209
+ "dcscope": ('https://dcscope.readthedocs.io/en/stable/', None),
210
210
  }
@@ -1,7 +1,7 @@
1
1
  [Polygon 00000000]
2
2
  X Axis = area_um
3
3
  Y Axis = deform
4
- Name = Example polygon filter created with Shape-Out
4
+ Name = Example polygon filter created with DCscope
5
5
  Inverted = False
6
6
  point00000000 = 4.806285699729710e+01 3.159643080378363e-02
7
7
  point00000001 = 4.707025517531432e+01 2.200807132494297e-02
@@ -14,7 +14,7 @@ file to the input file. Feature data "flows" from the basins to the
14
14
  files downstream.
15
15
 
16
16
  Due to the fact that basins are implemented in dclab, all software that relies
17
- on dclab for opening data files (e.g. Shape-Out or CytoPlot) automatically
17
+ on dclab for opening data files (e.g. DCscope or CytoPlot) automatically
18
18
  supports basins as well.
19
19
 
20
20
 
@@ -46,7 +46,7 @@ B. You have an automated data analysis pipeline that relies entirely on DCOR.
46
46
  connection.
47
47
 
48
48
  C. Let's say your pipeline is designed to compute a new feature ``userdef1``
49
- and you would like to open the output file in Shape-Out, visualizing
49
+ and you would like to open the output file in DCscope, visualizing
50
50
  this feature in combination with other features defined in the input file
51
51
  (e.g. ``deform``). What you *could* do is write the ``userdef1`` feature
52
52
  directly to the input file or create a copy of your input file and write
@@ -3,7 +3,7 @@
3
3
  The Young's modulus is corrected for pixelation (pixel size 0.34 µm).
4
4
  The temperature is set to 23°C.
5
5
  The 20µm plot is used in the dclab documentation. The others
6
- are used in the Shape-Out documentation.
6
+ are used in the DCscope documentation.
7
7
  """
8
8
  from dclab.features import emodulus
9
9
  import numpy as np
@@ -14,7 +14,7 @@ in your dataset without modifying any files on disk.
14
14
 
15
15
  .. note::
16
16
 
17
- Temporary features are not supported by Shape-Out, DCKit, or DCOR/DCOR-Aid.
17
+ Temporary features are not supported by DCscope, DCKit, or DCOR/DCOR-Aid.
18
18
  They are only really helpful if you quickly need to test things. If possible,
19
19
  it is recommended to work with :ref:`plugin features <sec_av_feat_plugin>`.
20
20
 
@@ -199,7 +199,7 @@ a dataset is exported as an .rtdc (HDF5) file.
199
199
  .. note::
200
200
  It is recommended to use the following data types for the value of
201
201
  each key: ``str``, ``bool``, ``float`` and ``int``. Other data types may
202
- not render nicely in ShapeOut2 or DCOR.
202
+ not render nicely in DCscope or DCOR.
203
203
 
204
204
  To edit the "user" section in dclab, simply modify the `config`
205
205
  property of a loaded dataset. The changes made are *not* written
@@ -191,12 +191,12 @@ using :func:`~dclab.kde.KernelDensityEstimator.get_contour_lines`.
191
191
 
192
192
 
193
193
 
194
- Polygon filters / Shape-Out
195
- ---------------------------
194
+ Polygon filters / DCscope
195
+ -------------------------
196
196
  Keep in mind that you can combine your dclab analysis pipeline with
197
- :ref:`Shape-Out <shapeout2:index>`. For instance, you can create and export
197
+ :ref:`DCscope <dcscope:index>`. For instance, you can create and export
198
198
  :ref:`polygon filters <sec_ref_polygon_filter>`
199
- in Shape-Out and then import them in dclab.
199
+ in DCscope and then import them in dclab.
200
200
 
201
201
 
202
202
  .. plot::
@@ -17,7 +17,7 @@ Module-level methods
17
17
 
18
18
  Global definitions
19
19
  ==================
20
- These definitionas are used throughout the dclab/Shape-In/Shape-Out ecosystem.
20
+ These definitionas are used throughout the dclab/Shape-In/DCscope ecosystem.
21
21
 
22
22
  Metadata
23
23
  --------
@@ -43,11 +43,11 @@ Use cases
43
43
  =========
44
44
  If you are a frequent user of RT-DC, you might run into problems that
45
45
  cannot (yet) be addressed with the graphical user interface
46
- `Shape-Out <https://github.com/ZellMechanik-Dresden/ShapeOut2>`_.
46
+ `DCscope <https://github.com/DC-analysis/DCscope>`_.
47
47
  Here is a list of use cases that would motivate an installation of dclab.
48
48
 
49
49
  - You would like to convert old .tdms-based datasets to the new .rtdc
50
- file format, because of enhanced speed in Shape-Out and reduced
50
+ file format, because of enhanced speed in DCscope and reduced
51
51
  disk usage. What you are looking for is the command line program
52
52
  :ref:`sec_tdms2rtdc` that comes with dclab. It allows to batch-convert
53
53
  multiple measurements at a time. Note that you should keep the original
@@ -60,18 +60,18 @@ Here is a list of use cases that would motivate an installation of dclab.
60
60
  :class:`.RTDCWriter` class that allows you to convert your tabular data
61
61
  to *.rtdc* files.
62
62
  - You would like to apply a simple set of filters (e.g. polygon filters that you
63
- exported from within Shape-Out) to every new measurement you take and
63
+ exported from within DCscope) to every new measurement you take and
64
64
  apply a custom data analysis pipeline to the filtered data. This is a
65
65
  straight-forward Python coding problem with dclab. After reading the
66
66
  basic usage section below, please have a look at the
67
67
  :ref:`polygon filter reference <sec_ref_polygon_filter>`.
68
68
  - You would like to do advanced statistics or combine your RT-DC
69
69
  analysis with other fancy approaches such as machine-learning.
70
- It would be too laborious to do the analysis in Shape-Out, export the
70
+ It would be too laborious to do the analysis in DCscope, export the
71
71
  data as text files, and then open them in your custom Python script.
72
- If your initial analysis step with Shape-Out only involves tasks
72
+ If your initial analysis step with DCscope only involves tasks
73
73
  that can be automated, why not use dclab from the beginning?
74
- - You simulated RT-DC data and plan to import them in Shape-Out
74
+ - You simulated RT-DC data and plan to import them in DCscope
75
75
  for testing. Once you have loaded your data as a numpy array, you
76
76
  can instantiate an :class:`RTDC_Dict <dclab.rtdc_dataset.RTDC_Dict>`
77
77
  class and then use the :class:`Export <dclab.rtdc_dataset.export.Export>`
@@ -14,7 +14,7 @@ from dclab.rtdc_dataset.fmt_s3 import BOTO3_AVAILABLE # noqa: F401
14
14
  with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
15
15
  try:
16
16
  # dcor.mpl.mpg.de
17
- s.connect(("130.183.206.45", 443))
17
+ s.connect(("130.183.217.150", 443))
18
18
  except (socket.gaierror, OSError):
19
19
  DCOR_AVAILABLE = False
20
20
  else:
@@ -207,8 +207,19 @@ def test_split():
207
207
  "time", # issue #204
208
208
  ]:
209
209
  continue
210
- assert np.all(
211
- ds[feat][ecount:ecount+len(di)] == di[feat]), feat
210
+ elif feat in ["volume"]:
211
+ # Contour data is required for computing volume.
212
+ # But contour data is not exported. Instead,
213
+ # contour data must be computed from mask data.
214
+ assert np.allclose(
215
+ ds[feat][ecount:ecount + len(di)],
216
+ di[feat],
217
+ rtol=0,
218
+ atol=1e-5,
219
+ )
220
+ else:
221
+ assert np.all(
222
+ ds[feat][ecount:ecount+len(di)] == di[feat]), feat
212
223
  ecount += len(di)
213
224
 
214
225
 
@@ -22,8 +22,20 @@ def test_split():
22
22
  "time", # issue 204
23
23
  ]:
24
24
  continue
25
- assert np.all(
26
- ds[feat][ecount:ecount + len(di)] == di[feat]), feat
25
+ elif feat in ["volume"]:
26
+ # Contour data is required for computing volume.
27
+ # But contour data is not exported. Instead,
28
+ # contour data must be computed from mask data.
29
+ assert np.allclose(
30
+ ds[feat][ecount:ecount + len(di)],
31
+ di[feat],
32
+ rtol=0,
33
+ atol=1e-5,
34
+ )
35
+ else:
36
+ assert np.all(
37
+ ds[feat][ecount:ecount + len(di)]
38
+ == di[feat]), feat
27
39
  ecount += len(di)
28
40
 
29
41
 
@@ -113,7 +113,7 @@ def test_convert():
113
113
  viscosity_in=15,
114
114
  viscosity_out=15)
115
115
  # These values were taken from previous isoelasticity files
116
- # used in Shape-Out.
116
+ # used in DCscope.
117
117
  assert np.allclose(isoel15[0][:, 2], 7.11111111e-01)
118
118
  assert np.allclose(isoel15[1][:, 2], 9.48148148e-01)
119
119
  # area_um
@@ -445,7 +445,7 @@ def test_user_section_set_save_reload_fmt_tdms():
445
445
  with new_dataset(h5path) as ds:
446
446
  ds.config.update({"user": metadata})
447
447
  expath = h5path.with_name("exported.rtdc")
448
- ds.export.hdf5(expath, features=ds.features_innate)
448
+ ds.export.hdf5(expath)
449
449
  # make sure that worked
450
450
  with h5py.File(expath, "r") as h5:
451
451
  assert h5.attrs["user:channel area"] == 100.5