Chroma#

chroma() serves cpg0029-chroma-pilot, the alternative-dye pilot the JUMP consortium ran to test stains beyond the five channels of the standard Cell Painting protocol. Each field was imaged in eight acquisition channels rather than five, over a panel of 91 compounds with annotated mechanisms, so the subject of the dataset is the imaging chemistry rather than the compounds. The rehosted object is well-level, one row per well across eight plate acquisitions.

This is the only example here about the stain panel itself. Each acquisition measured a slightly different channel set, so the well table keeps only the features shared across all of them (the channel-agnostic shape descriptors and the brightfield textures); the per-dye intensity and texture features stay in the raw per-plate tables.

Use it if your own screen runs a non-standard stain panel or more than the five standard channels, or you are deciding which dyes to acquire. No tutorial is built on it; the compound-screen tools shown on the other datasets apply to its shared features.

import mantispy as mt
adata = mt.ds.chroma()
adata
AnnData object with n_obs × n_vars = 3455 × 64
    obs: 'Metadata_plate_map_name', 'Metadata_control_type', 'Metadata_broad_sample', 'Metadata_mg_per_ml', 'Metadata_mmoles_per_liter', 'Metadata_solvent', 'Metadata_BRD ID', 'Metadata_BRD with batch', 'Metadata_Common Name', 'Metadata_MoA', 'Metadata_Plate', 'Metadata_Well', 'Metadata_Site_Count', 'Metadata_Count_Cells', 'Metadata_Count_Cytoplasm', 'Metadata_Count_Nuclei', 'Metadata_Object_Count', 'Metadata_CellCount', 'Metadata_SiteCount', 'Metadata_Control', 'Metadata_Compound', 'Metadata_Concentration', 'Metadata_MOA', 'Metadata_Perturbation', 'Metadata_Perturbation_Type'
    var: 'object', 'feature_group', 'feature', 'channel', 'scale', 'angle', 'gray_levels', 'radial_bin', 'params', 'is_feature'
    uns: 'mantispy'
    layers: None (.X)

Shape and controls#

The rehosted well table holds one row per well over eight plate acquisitions. Two of them are the same barcode read at 0 h and 24 h, which is why the object is not indexed by plate and well. Metadata_Control marks the negcon wells; Metadata_Compound, Metadata_Concentration and Metadata_MOA carry the treatment, its dose and its mechanism.

Where the extra channels went#

The extra dyes live in the raw images. Each acquisition measured a slightly different channel panel, so the features shared across every plate and timepoint, which are what the rehosted well table keeps, are the channel-agnostic shape descriptors and the Brightfield textures. The per-dye intensity and texture features are recovered by reading the raw per-plate tables from the Cell Painting Gallery.

adata.var["channel"].value_counts(dropna=False)
channel
NaN            46
Brightfield    18
Name: count, dtype: int64

Cells per well across the eight acquisitions#

The two 24 h re-reads of BR00122248 sit beside the 0 h plates, so the effect of incubation time on cell density is visible next to the plate-to-plate spread.

mt.pl.cell_counts(adata, groupby="Metadata_Plate")