Skip to main content

Measure mycobacterial growth on antibiotic plates and infer MICs

Project description

Tests PyPI version

Automated Mycobacterial Growth Detection Algorithm (AMyGDA)

AMyGDA analyses photographs of antibiotic-containing 96-well plates, estimates growth in each well, and infers minimum inhibitory concentrations (MICs).

A paper describing the software and demonstrating its reproducibility and accuracy is available in Microbiology.

This is a major release and the CLI uses a proper verb structure so is different to earlier versions!

AMyGDA has been used to analyse all images of all the 96-well plates from the CRyPTIC project; each was inoculated with a sample of M. tuberculosis and incubated for two weeks. Where possible, a minimum inhibitory concentration (MIC) for each drug was estimated -- these are referred to as AMYGDA_DILUTION in the UKMYC_PHENOTYPES table in the current release (v3.4.0) of the CRyPTIC datatables which are freely available on Zenodo.

Installation

AMyGDA now uses modern Python packaging via pyproject.toml.

python -m venv .venv
source .venv/bin/activate
pip install -e .[dev]

Running the CLI

amygda run examples/sample-images/01/image-01-raw.png

Subcommands:

  • amygda filter IMAGE
  • amygda segment IMAGE
  • amygda measure IMAGE
  • amygda run IMAGE
  • amygda strips IMAGE
  • amygda panels IMAGE

Useful options:

  • measure and run accept --plate_design UKMYC5
  • --growth_pixel_threshold 130
  • --growth_percentage 2
  • --measured_region 0.5
  • --sensitivity 4

Stage outputs:

  • filter reads the exact image you pass and writes an image with -filtered appended to the stem
  • segment reads the exact image you pass, writes a matching -arrays.npz, and only writes -segmented if you pass --save-segmented-image
  • measure reads the exact image you pass, loads the matching -arrays.npz, and writes an image with -growth appended to the stem
  • strips reads a filtered image plus the matching segmented arrays and automatically saves one horizontal *-DRUG-panel.png image per drug
  • panels does the same as strips but also includes the positive control wells above the drug strip, left-aligned, to help downstream machine-learning workflows
  • existing stage suffixes are replaced rather than accumulated, so segmenting image-filtered.png produces image-segmented.png
  • run executes all three stages in sequence in memory, producing *-filtered, *-growth, and the segmentation arrays, with *-segmented only if --save-segmented-image is supplied

Library usage

from amygda import PlateMeasurement

plate = PlateMeasurement(
    "examples/sample-images/01",
    categories={"ImageFileName": "image-01"},
    plate_design="UKMYC5",
)
plate.load_image("-raw.png")
plate.mean_shift_filter()
plate.equalise_histograms_locally()
plate.stretch_histogram()
plate.save_image("-filtered.jpg")

Development

Run the tests with:

pytest

Run linting and type checks with:

ruff check .
mypy

Compatibility notes

The legacy PlateMeasurement constructor arguments new, tags, and configuration_path are still accepted for compatibility, but they now emit deprecation warnings and no longer affect behavior.

Plate designs

Plate layouts live in amygda/config/ and are shipped as package data. Each design is defined by three matrices:

  • *-drug-matrix.txt
  • *-conc-matrix.txt
  • *-dilution-matrix.txt

Adding a new plate design means adding a matching set of those files.

Licence

The software is available subject to the terms of the attached academic-use licence.

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

amygda-2.1.0.tar.gz (28.2 kB view details)

Uploaded Source

Built Distribution

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

amygda-2.1.0-py3-none-any.whl (27.1 kB view details)

Uploaded Python 3

File details

Details for the file amygda-2.1.0.tar.gz.

File metadata

  • Download URL: amygda-2.1.0.tar.gz
  • Upload date:
  • Size: 28.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for amygda-2.1.0.tar.gz
Algorithm Hash digest
SHA256 a90112766788d70914f1bfaa0d10f6fbe4fa7abc8cb662b8aba1ec9faf360f95
MD5 c60b24e3b213524109a9ae078b3e5524
BLAKE2b-256 48bc615e356f0505cb5b79e7e70da893b82a427089b25d955ad23806f6118b99

See more details on using hashes here.

File details

Details for the file amygda-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: amygda-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 27.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for amygda-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4bb63c1dcd8c96674a2432313aea53804cd83d1a1739d5a5d7483256425ff449
MD5 ecbf2b0bbd7106422864e5312b631be7
BLAKE2b-256 8490e711b1a2cec4a3bf1bf2d4a0efac297355495126e9a0669bfbd724e3ba1e

See more details on using hashes here.

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