obophenotype / obophenotype/uberon

Track Uberon/CL single-cell coverage as a recurring report

Open
#3,765 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Emacs Lisp
Stars
163
Forks
43
Avg merge
1d 17h
Merged PRs (30d)
5

Description

Problem

How well Uberon and CL together support single-cell data is currently unmeasured, so it gets rediscovered rather than tracked. The numbers are not good and we have no way to tell whether they are improving:

Measure Value
Live Uberon terms that are the target of ≥1 CL location axiom 753 / 14,525 (5.2%)
Live Uberon terms with any cell type beneath them 1,352 (9.3%)
Live CL classes with any Uberon location 1,331 / 3,129 (42.5%)
CELLxGENE tissue terms with no cell type beneath them 424 / 705 (60%)
CELLxGENE cell types with no Uberon location 583 / 1,142 (51%)

Per-organism, which matters for the cross-species mission:

Organism Tissue terms used Linked
Homo sapiens 559 40.6%
Mus musculus 138 49.3%
Danio rerio 104 51.9%
Callithrix jacchus 33 36.4%
Macaca mulatta 29 24.1%

Proposal

src/scripts/single_cell_coverage.py (added on claude/uberon-single-cell-coverage-lg89hg) already computes all of the above from uberon-edit.obo, imports/local-cl.owl, the public CELLxGENE curation API, and the HRA ASCT+B CDN. No credentials are needed.

Wire it into the existing reports mechanism so the numbers land in reports/ on a schedule, alongside stages-*-report.tsv. That gives a tracked baseline against which any future tissue↔cell-type work can be judged.

One caveat worth noting: the script reads the checked-in imports/local-cl.owl, which snapshots CL 2025-07-30 and so runs slightly behind current CL (934 vs 909 part_of axioms). If wired into the build it should run after the CL mirror refresh.

Why this is actionable now

Pure reporting. No decision on relations or modelling required.

Context

Single-cell coverage gap report.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with src/scripts/single_cell_coverage.py and inspect the existing reports mechanism alongside reports/stages-*-report.tsv. Determine how scheduled reports are wired and ensure this coverage output is generated after the CL mirror refresh. Done means the computed numbers land in reports/ on the existing schedule without requiring credentials.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
build-system, data
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.