Skip to content
fowler-labPublic

About

Automated Mycobacterial Growth Detection Algorithm, funded by NIHR Oxford Biomedical Research Centre

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

105 Commits

Folders and files

Repository files navigation

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.

About

Automated Mycobacterial Growth Detection Algorithm, funded by NIHR Oxford Biomedical Research Centre

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages