Skills

Marker Panel Annotation

Assigns cell-type labels to clusters from a protein marker panel (multiplexed imaging...

Install

npx skills add synthetic-sciences/openscience --skill marker-panel-annotation -g -a claude-code -y
Category
Data and ML
Updated
5d ago
License
MIT
Context cost
Mediumabout 2,321 tokens
Runs scripts
No, instructions only

What it does

Assigns cell-type labels to clusters from a protein marker panel (multiplexed imaging such as MIBI, CODEX, IMC and CyCIF; mass and flow cytometry; CITE-seq protein), where the labels are judged against an expert reference. Within-dataset normalisation of cluster summaries, lineage first by positive defining markers, subtype only as far as the panel can determine it, marker-poor clusters assigned by exclusion, class-coverage sanity checks, and two independent annotators with adjudication. Use when the output is one label per cluster and the grader is agreement with an expert; for gating single cells in FCS data use flow-cytometry-analysis, and for transcript-based annotation use scanpy or scvi-tools.

Marker-panel cluster annotation

An expert annotating clusters from a marker panel gets two things right that a first-pass reading gets wrong: the level at which each label is stated, and the clusters that carry almost nothing. Both directions cost equally under an expert-agreement grader: a subtype the panel cannot support scores like a wrong lineage, and a broad label where the panel determines the subtype scores like a miss. Everything below follows from that.

1. Summarise within the dataset, never across

  • Work one dataset (panel, platform, run) at a time. Intensities are not comparable across platforms or panels; a threshold or z-score computed on the pooled data is wrong for every dataset in it.
  • For each cluster and marker compute three summaries: the mean or median intensity, the z-score of that cluster's mean across the clusters of the same dataset (which marker is high for this dataset), and the fraction of the cluster's cells above a per-marker positivity cut taken from the marker's own distribution (a bimodal split, or a high percentile of the whole dataset when the marker is unimodal). Read all three: a marker with a modest mean but 80% of cells positive is a positive marker.
  • Print the full cluster-by-marker table before labelling anything. Decide from the table, not from the first two markers that come to mind.

2. Lineage first, by positive defining markers

Assign the broad lineage from the markers that define it positively, in this order of precedence, each one excluding the ones below unless the panel says otherwise:

Read the whole SKILL.md on GitHub

More in Data and ML