Skip to main content

Quality control pipeline for MACSima / MACSiQView cell segmentation

Project description

macsima-qc

PyPI License: MIT

Quality control pipeline for MACSima / MACSiQView cell segmentation

Python package for evaluating and comparing cell segmentation results from the MACSima cyclic immunofluorescence platform, using manual ROI references from Fiji/ImageJ.

Installation

pip install macsima-qc

Or from source (development mode):

git clone https://github.com/mathisbouvet/macsima-qc
cd macsima-qc
pip install -e .

Average Kolmogorov-Smirnov distances by segmentation

Workflow

MACSiQView segmentation (.csv)
            │
    run_qc_pipeline()  ← Isolation Forest + Mann-Whitney
            │
    ┌───────┴────────────────────────┐
    │ segmentation_test_annotated.csv │  ← OK / KO labels per cell
    │ macsiq_param_suggestions.csv   │  ← MACSiQView adjustment suggestions
    └─────────────────────────────────┘

── Optional ──────────────────────────────────────────────
Fiji ROIs (.zip) ──► generate_masks() ──► run_comparison()  ← KS distances + KDE

Quick start

Minimal usage — built-in reference

No reference file needed. Just point to your MACSiQView segmentation CSV:

from macsima_qc import run_qc_pipeline

df_annotated, df_suggestions = run_qc_pipeline(
    test_path="Segmentation_test.csv",
    contamination=0.10,
    output_dir="figures/",
)

With a custom reference

If you want to use your own manually validated segmentation as reference:

from macsima_qc import run_qc_pipeline

df_annotated, df_suggestions = run_qc_pipeline(
    test_path="Segmentation_test.csv",
    ref_path="my_reference.csv",
    contamination=0.10,
)

1. Exporting data from MACSiQView

1.a What data to export

After segmentation in MACSiQView, navigate to the Feature Table tab and select the following 14 morphological parameters for export. Only morphological descriptors are used — fluorescence intensities are excluded.

Parameter Description
Cell Bbox X Size Bounding box width
Cell Bbox Y Size Bounding box height
Cell Shape Circle Like Circularity index
Cell Shape Ellipse Like Ellipse similarity
Cell Shape Elongation Elongation ratio
Cell Shape Square Like Square similarity
Cell Shape Triangle Like Triangle similarity
Cell Size Cell area
Nucleus Size Nucleus area
Nucleus Roundness Nucleus roundness
Nucleus Convexity Nucleus convexity
Cell Convexity Cell convexity
Quality Cell In-Focus Focus quality score
Quality Nuclear Segmentation Nuclear segmentation quality

These 14 features are mandatory. The pipeline will raise an error if any are missing from the exported CSV.

1.b How to export

  1. In MACSiQView, open the Feature Table panel
  2. Select the 14 parameters listed above
  3. Export as .csv
  4. This exported file is your test_path input for run_qc_pipeline()

1.c About the built-in reference

The package ships with a built-in reference segmentation derived from a manually validated MACSima acquisition (DAPI channel, human embryonic tissue). It contains 4,641 cells described by the same 14 morphological features listed above, exported using the exact same MACSiQView protocol.

If your tissue type differs significantly from human embryonic tissue (e.g. non-embryonic tissue, very different cell density or morphology), consider providing your own reference via ref_path.

1.d QC pipeline — Isolation Forest

Before fixing the contamination parameter, the model sensitivity is analyzed across a range of values (0.01 → 0.20). The Isolation Forest is then trained exclusively on the reference data. Each test cell receives a label (Segmentation_OK: 1 or -1) and a continuous anomaly score.

The Mann-Whitney U test then compares OK vs KO distributions for each feature. When a statistically significant difference is found (p < 0.01), the direction of deviation is translated into an operational MACSiQView adjustment suggestion, exported to macsiq_param_suggestions.csv.

Outputs

File Description
mask_1–4.tif ROI masks for MACSiQView import
figures/ks_average_distances.png KS distance barplot per segmentation
figures/kde_comparative_distributions.png KDE distribution comparison
figures/contamination_sensitivity.png Isolation Forest sensitivity curve
figures/anomaly_scores_distribution.png Anomaly score histogram
segmentation_test_annotated.csv Cells annotated OK/KO + anomaly score
macsiq_param_suggestions.csv MACSiQView parameter adjustment suggestions

Distribution of Isolation Forest anomaly scores

Anomaly score distribution from the Isolation Forest — cells below the decision threshold are flagged as Segmentation_KO.

2. Creating a reference segmentation (optional)

For the full step-by-step protocol, see the Test of Segmentation protocol.

A reference DAPI image is extracted from the MACSima system and exported in .tif format for processing in Fiji. Regions of interest (ROI) are manually drawn to serve as the basis for segmentation masks.

  • DAPI Image : exported in tiff format via MACSima
  • RoiSet : created and exported from Fiji in zip format

Once the ROIs are defined, four types of masks are generated and imported into MACSiQView as segmentation inputs:

File Description
mask_1.tif ROIs with random colors, black background
mask_2.tif ROIs with cyclic RGB colors (R/G/B), black background
mask_3.tif ROIs in cumulative grayscale
mask_4.tif ROIs in cumulative grayscale + black contours

2a. Comparing segmentations

from macsima_qc import run_comparison

distances = run_comparison(
    manual_path = "Segmentation_manuelle.csv",
    auto_paths  = [
        "Mask_3_Single_Cell.csv",
        "Mask_3_Tissue.csv",
        "Mask_4_Import_mask.csv",
        "Mask_4_Single_Cell.csv",
        "Mask_4_Tissue.csv",
    ],
    auto_names  = [
        "Mask 3 - Single Cell",
        "Mask 3 - Tissue",
        "Mask 4 - Import Mask",
        "Mask 4 - Single Cell",
        "Mask 4 - Tissue",
    ],
    output_dir = "figures/",
)

This produces a barplot of average KS distances and KDE distribution curves for the main morphological parameters, identifying the automatic segmentation closest to the manual reference.

Average Kolmogorov-Smirnov distances by segmentation

KDE comparative distributions

Lower KS distance = closer match to the manual reference. Here, Mask 4 – Single Cell performs best across most morphological parameters.


Requirements

  • Python ≥ 3.9
  • numpy, opencv-python, matplotlib, scikit-image, read-roi
  • pandas, scikit-learn, scipy, seaborn

Citation

If you use this package in a publication, please cite:

Bouvet M. (2026)


License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

macsima_qc-0.1.3.tar.gz (18.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

macsima_qc-0.1.3-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

File details

Details for the file macsima_qc-0.1.3.tar.gz.

File metadata

  • Download URL: macsima_qc-0.1.3.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for macsima_qc-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f5b586d4ca886d98faafe1dedb39610d8b7128ce832ca94ffc1ae7b402434d3b
MD5 1b97def77cebfa63dfcbd0baeffc4f7b
BLAKE2b-256 2a8dba4e3c0c1c1b570cbebbfe0d723297ef6bc9731ad98731401f3f22bb77bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for macsima_qc-0.1.3.tar.gz:

Publisher: python-publish.yml on mathisbouvet/macsima-qc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file macsima_qc-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: macsima_qc-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 15.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for macsima_qc-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 19355a705c7c9125196dfe241392332127e554981109844926c8da6252b44e50
MD5 9e5a944746b204c8e45a565fb8756ee1
BLAKE2b-256 4eb1df89f2b1b11fd7bbd4468ae400c43122c2a57732d20dbcf0ea995e0fbeb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for macsima_qc-0.1.3-py3-none-any.whl:

Publisher: python-publish.yml on mathisbouvet/macsima-qc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page