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.
- {dclab-0.66.0 → dclab-0.67.0}/CHANGELOG +13 -5
- {dclab-0.66.0 → dclab-0.67.0}/PKG-INFO +8 -2
- {dclab-0.66.0 → dclab-0.67.0}/README.rst +7 -1
- {dclab-0.66.0 → dclab-0.67.0}/dclab/_version.py +16 -3
- {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_tdms2rtdc.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/__init__.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/feat_const.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/config.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/export.py +30 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_basin.py +49 -4
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/events.py +20 -1
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hierarchy/base.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/event_trace.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/naming.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/dclab/warn.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/PKG-INFO +8 -2
- {dclab-0.66.0 → dclab-0.67.0}/docs/conf.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/docs/data/example.poly +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_basins/index.rst +2 -2
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/plot_emodulus_lut.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_feat_temp.rst +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_notation.rst +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_scatter.rst +4 -4
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_code_reference.rst +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_getting_started.rst +6 -6
- {dclab-0.66.0 → dclab-0.67.0}/tests/helper_methods.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_argparse.py +13 -2
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_split.py +14 -2
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_isoelastics.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_config.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_export_hdf5.py +39 -7
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_anc_plugin.py +2 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_basin.py +29 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_basin_mapped.py +12 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_hdf5.py +2 -2
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_hdf5_basins_internal.py +60 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_writer.py +1 -1
- {dclab-0.66.0 → dclab-0.67.0}/.gitignore +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/.readthedocs.yml +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/LICENSE +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/MANIFEST.in +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/cached.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/common.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_compress.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_condense.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_join.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_repack.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_split.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/cli/task_verify_dataset.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/feat_logic.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/meta_const.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/meta_logic.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/definitions/meta_parse.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/downsampling.pyx +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/LICENSE +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/LICENSE.APACHE +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/LICENSE.BSD +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/_structures.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/packaging/version.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/LICENSE +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_find_contours.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_find_contours_cy.pyx +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_pnpoly.pyx +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_shared/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_shared/geometry.pxd +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/_shared/geometry.pyx +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/measure.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/skimage/pnpoly.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/LICENSE +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/nonparametric/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/nonparametric/_kernel_base.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/nonparametric/kernel_density.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/external/statsmodels/nonparametric/kernels.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/bright.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/bright_bc.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/bright_perc.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/contour.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/load.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/lut_HE-2D-FEM-22.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/lut_HE-3D-FEM-22.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/lut_LE-2D-FEM-19.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/pxcorr.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/scale_linear.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/emodulus/viscosity.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/fl_crosstalk.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/inert_ratio.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/features/volume.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/http_utils.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_HE-2D-FEM-22-area_um-deform.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_HE-2D-FEM-22-volume-deform.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_HE-3D-FEM-22-area_um-deform.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_HE-3D-FEM-22-volume-deform.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_LE-2D-FEM-19-area_um-deform.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_LE-2D-FEM-19-volume-deform.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/isoelastics/iso_LE-2D-ana-18-area_um-deform.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/kde/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/kde/base.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/kde/contours.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/kde/methods.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/kde_contours.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/kde_methods.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/lme4/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/lme4/lme4_template.R +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/lme4/rsetup.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/lme4/wrapr.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/polygon_filter.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/check.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/copier.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/core.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/af_basic.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/af_emodulus.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/af_fl_max_ctc.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/af_image_contour.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/af_ml_class.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_core/ancillary_feature.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_ml/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_plugin/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_anc_plugin/plugin_feature.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/feat_temp.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/filter.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/access_token.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/api.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/base.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/basin.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/logs.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dcor/tables.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_dict.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/base.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/basin.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/feat_defect.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/logs.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hdf5/tables.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hierarchy/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hierarchy/events.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hierarchy/hfilter.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_hierarchy/mapper.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_http.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_s3.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/event_contour.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/event_image.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/event_mask.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/fmt_tdms/exc.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/load.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/meta_table.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/rtdc_dataset/writer.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/statistics.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab/util.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/SOURCES.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/dependency_links.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/entry_points.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/requires.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/dclab.egg-info/top_level.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/.gitignore +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/README.md +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/data/example.rtdc +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/data/example_plugin.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/data/example_plugin_metadata.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/data/example_traces.rtdc +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/data/example_video.rtdc +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/dclab.bib +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/extensions/dclab_defs.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/extensions/fancy_include.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/extensions/github_changelog.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/extensions/simple_argparse.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/figures/DCOR_API_Token_website.png +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/index.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dc_logo.png +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dc_logo.svg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dclab.png +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dclab.svg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dclab_large_white.png +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/logo/dclab_large_white.svg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/logo/favicon.ico +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/logo/favicon.svg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/requirements.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_advanced_usage.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_basins/basin_example_workflows.svg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_dc_io.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_dc_usage.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_dcor.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/.gitignore +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-2D-FEM-22.png +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-3D-FEM-22.png +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_LE-2D-FEM-19.png +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_emodulus/requirements.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_viscosity/LICENSE +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.jpg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.pdf +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_emodulus/index.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_feat_plugin.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_fluorescence.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_lme4.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_av_s3.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_changelog.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_cli.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_examples.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/docs/sec_z_bib.rst +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/emodulus_dcor.jpg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/emodulus_dcor.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/generate_example_images.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/isoelastics.jpg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/isoelastics.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/isoelastics_custom.jpg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/isoelastics_custom.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/lme4_glmer_diff.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/lme4_lmer.jpg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/lme4_lmer.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/overview_plot.jpg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/overview_plot.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/plugin_example.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/plugin_usage.jpg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/plugin_usage.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/viscosity_models.jpg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/examples/viscosity_models.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/pyproject.toml +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/.gitignore +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/README.md +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/fem2iso_volume.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/fem2lutiso_std.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/fem2rtdc.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/LUT_analytical_linear-elastic_2Daxis.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/README.md +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/__init__.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/common.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/he_2d_fem_22.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/he_3d_fem_22.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/hooks/le_2d_fem_19.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/lut_recipes/lut_processor.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/pixelation_correction.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/pixelation_correction_2020.png +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/pixelation_correction_2022.png +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/requirements.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/scripts/vid2dc.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/setup.cfg +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/setup.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/README.md +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/conftest.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/README.md +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/example_access_token.dcor-access +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/example_isoelastics.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/feat_anc_plugin_creative.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_fl-no-contour_2019.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_fl_2017.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_fl_2018.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_fl_wide-channel_2023.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_image-bg_2020.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_image-mask-blood_2021.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_mask-contour_2018.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_polygon_gate_2021.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_raw-cytoshot-exported.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_segfault-compound_2023.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-hdf5_wide-channel_2023.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_2fl-no-image_2017.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_fl-image-bright_2017.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_fl-image-large-fov_2017.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_fl-image_2016.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_fl_2015.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_minimal_2016.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/data/fmt-tdms_shapein-2.0.1-no-image_2017.zip +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/requirements.txt +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_cache.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_compress.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_condense.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_join.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_cli_repack.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_config_value_mapping.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_dfn_feat.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_dfn_meta.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_downsampling.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_bright.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_bright_bc.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_bright_perc.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_contour.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_emodulus.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_emodulus_viscosity.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_fl_crosstalk.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_inert_ratio.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_feat_volume.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_http_utils.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_kde.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_kde_contours.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_kde_deprecations.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_kde_methods.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_lme4.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_lut_he_2d_fem_22.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_lut_he_3d_fem_22.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_polygon_contains.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_polygon_filter.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_check_dataset.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_copier.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_core_feat.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_downsampling.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_export.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_export_avi.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_export_fcs.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_export_tsv.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_anc_core.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_anc_ml.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_basin_perishable.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_feat_temp.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_filter.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_dcor.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_dcor_access_token.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_dcor_basin.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_dcor_private.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_dict.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_hdf5_basins.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_hierarchy.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_http.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_http_basin.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_s3.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_s3_basin.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_fmt_tdms.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_hash.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_kde.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_rtdc_limit_events.py +0 -0
- {dclab-0.66.0 → dclab-0.67.0}/tests/test_statistics.py +0 -0
- {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/
|
|
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/
|
|
1508
|
-
- https://github.com/
|
|
1509
|
-
- https://github.com/
|
|
1510
|
-
- https://github.com/
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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__ = [
|
|
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.
|
|
21
|
-
__version_tuple__ = version_tuple = (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.
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
571
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
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/
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
-
"
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 /
|
|
195
|
-
|
|
194
|
+
Polygon filters / DCscope
|
|
195
|
+
-------------------------
|
|
196
196
|
Keep in mind that you can combine your dclab analysis pipeline with
|
|
197
|
-
:ref:`
|
|
197
|
+
:ref:`DCscope <dcscope:index>`. For instance, you can create and export
|
|
198
198
|
:ref:`polygon filters <sec_ref_polygon_filter>`
|
|
199
|
-
in
|
|
199
|
+
in DCscope and then import them in dclab.
|
|
200
200
|
|
|
201
201
|
|
|
202
202
|
.. plot::
|
|
@@ -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
|
-
`
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
|
|
211
|
-
|
|
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
|
-
|
|
26
|
-
|
|
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
|
|
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
|
|
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
|