Metadata-Version: 2.4
Name: iohub
Version: 0.2.3
Summary: N-dimensional bioimaging data I/O with OME metadata in Python
Home-page: https://github.com/czbiohub-sf/iohub
Author: CZ Biohub and iohub contributors
Author-email: iohub@czbiohub.org
License: BSD 3-Clause License
Project-URL: Bug Tracker, https://github.com/czbiohub-sf/iohub/issues
Project-URL: Documentation, https://czbiohub-sf.github.io/iohub
Project-URL: Source Code, https://github.com/czbiohub-sf/iohub
Project-URL: User Support, https://github.com/czbiohub-sf/iohub/issues
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Image Processing
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: MacOS :: MacOS X
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pandas>=1.5.2
Requires-Dist: pydantic>=2.8.2
Requires-Dist: pydantic_extra_types>=2.9.0
Requires-Dist: tifffile<2025.5.21,>=2024.1.30
Requires-Dist: natsort>=7.1.1
Requires-Dist: ndtiff>=2.2.1
Requires-Dist: zarr<3,>=2.17.0
Requires-Dist: tqdm
Requires-Dist: pillow>=9.4.0
Requires-Dist: blosc2
Requires-Dist: xarray>=2024.1.1
Requires-Dist: dask[array]
Provides-Extra: tensorstore
Requires-Dist: tensorstore>=0.1.64; extra == "tensorstore"
Provides-Extra: dev
Requires-Dist: iohub[tensorstore]; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: flake8; extra == "dev"
Requires-Dist: pytest>=5.0.0; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: hypothesis>=6.61.0; extra == "dev"
Requires-Dist: requests>=2.22.0; extra == "dev"
Requires-Dist: wget>=3.2; extra == "dev"
Requires-Dist: ome-zarr>=0.9.0; extra == "dev"
Provides-Extra: doc
Requires-Dist: matplotlib; extra == "doc"
Requires-Dist: numpydoc>=1.1.0; extra == "doc"
Requires-Dist: sphinx>=4.2.0; extra == "doc"
Requires-Dist: pydata-sphinx-theme>=0.15.2; extra == "doc"
Requires-Dist: sphinx-copybutton>=0.4.0; extra == "doc"
Requires-Dist: sphinx-polyversion>=0.2.4; extra == "doc"
Requires-Dist: sphinx-sitemap>=2.5.0; extra == "doc"
Requires-Dist: sphinx-gallery>=0.13.0; extra == "doc"
Dynamic: license-file

# iohub

[![PyPI - Python version](https://img.shields.io/pypi/pyversions/iohub)](https://pypi.org/project/iohub)
[![PyPI - iohub version](https://img.shields.io/pypi/v/iohub.svg)](https://pypi.org/project/iohub)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.15022067.svg)](https://doi.org/10.5281/zenodo.15022067)
[![Docs deployment](https://github.com/czbiohub-sf/iohub/actions/workflows/docs.yml/badge.svg)](https://czbiohub-sf.github.io/iohub)

N-dimensional bioimaging produces data and metadata in various formats,
and iohub aims to become a unified Python interface to the most common formats
used at the Biohub and in the broader imaging community.

## Supported formats

### Read

- OME-Zarr ([OME-NGFF v0.4](https://ngff.openmicroscopy.org/0.4/))
- Micro-Manager TIFF sequence, OME-TIFF (MMStack), and NDTiff datasets
- Custom data formats generated by Biohub microscopes
  - Supported: Falcon (PTI), Dorado (ClearControl), Dragonfly (OpenCell OME-TIFF), Mantis (NDTiff)
  - WIP: DaXi

### Write

- OME-Zarr
- Multi-page TIFF stacks organized in a directory hierarchy that mimics OME-NGFF (WIP)

## Quick start

### Installation

Install a released version of iohub from PyPI with pip:

```sh
pip install iohub
```

Or install the latest Git version:

```sh
git clone https://github.com/czbiohub-sf/iohub.git
pip install /path/to/iohub
```

> For more details about installation, see the [related section in the contribution guide](CONTRIBUTING.md#setting-up-developing-environment).

### Command-line interface

To check if iohub works for a dataset:

```sh
iohub info /path/to/data/
```

The CLI can show a summary of the dataset,
point to relevant Python calls,
and convert other data formats to the latest OME-Zarr.
See the full CLI help message by typing `iohub` or `iohub [command] --help` in the terminal.

### Working with OME-Zarr

Load and modify an [example OME-Zarr](https://zenodo.org/record/7274533#.Y-q9uOzMJqv) dataset:

```py
import numpy as np
from iohub import open_ome_zarr

with open_ome_zarr(
    "20200812-CardiomyocyteDifferentiation14-Cycle1.zarr",
    mode="r",
    layout="auto",
) as dataset:
    dataset.print_tree()  # prints the hierarchy of the zarr store
    channel_names = dataset.channel_names
    print(channel_names)
    img_array = dataset[
        "B/03/0/0"
    ]  # lazy Zarr array for the raw image in the first position
    raw_data = img_array.numpy()  # loads a CZYX 4D array into RAM
    print(raw_data.mean())  # does some analysis

with open_ome_zarr(
    "max_intensity_projection.zarr",
    mode="w-",
    layout="hcs",
    channel_names=channel_names,
) as dataset:
    new_fov = dataset.create_position(
        "B", "03", "0"
    )  # creates fov with the same path
    new_fov["0"] = raw_data.max(axis=1).reshape(
        (1, 1, 1, *raw_data.shape[2:])
    )  # max projection along Z axis and prepend dims to 5D
    dataset.print_tree()  # checks that new data has been written
```

For more about API usage, refer to the [documentation](https://czbiohub-sf.github.io/iohub/)
and the [example scripts](https://github.com/czbiohub-sf/iohub/tree/main/docs/examples).

### Reading Micro-Manager TIFF data

Read a directory containing a TIFF dataset:

```py
from iohub import read_images

reader = read_images("/path/to/data/")
print(reader)
```

## Why iohub?

This project is inspired by the existing Python libraries for bioimaging data I/O,
including [ome-zarr-py](https://github.com/ome/ome-zarr-py), [tifffile](https://github.com/cgohlke/tifffile) and [aicsimageio](https://github.com/AllenCellModeling/aicsimageio).
They support some of the most widely adopted and/or promising formats in microscopy,
such as OME-Zarr and OME-TIFF.

iohub bridges the gaps among them with the following features:

- Efficient reading of data in various TIFF-based formats produced by the Micro-Manager/Pycro-Manager acquisition stack.
- Efficient and customizable conversion of data and metadata from TIFF to OME-Zarr.
- Pythonic and atomic access of OME-Zarr data with parallelized analysis in mind.
- OME-Zarr metadata is automatically constructed and updated for writing,
and verified against the specification when reading.
- Adherence to the latest OME-NGFF specification (v0.4) whenever possible.
