Skip to content

Genes

Gene identity is the least interesting part of a result and the easiest place to lose one. A symbol is a name humans gave a gene; names are changed, retired and occasionally reused for something else. An Ensembl stable identifier is not.

So: the identifier is primary, and the symbol travels beside it. A result file's gene axis is indexed by Ensembl stable gene identifier, and the symbol is a column next to it.

Part Contract
Format h5ad
Gene axis index ensembl_gene_id
Gene axis columns feature_name, hgnc_id, biotype, measured_in_training, n_train_datasets, model_token
Extra matrices bulk_calibrated, image_only
Provenance keys model, input_spec, job

Identifiers are stored unversionedENSG00000141510, not ENSG00000141510.16 — so a table carrying one version joins the same gene as a reference carrying another.

The table is the pin

One versioned table maps every symbol the model can predict to an identifier. It is built from the HGNC complete set and one pinned Ensembl release, and it is committed with the checksum of each source file it was built from — because a table rebuilt from "the current release" is a different table, and a result you cannot re-map is a result you cannot compare.

Fact Value
Symbols on the axis 19,338
Ensembl release 116
Built from sources fetched 2026-09-05
Source sha256 of the file it was built from
hgnc_complete_set 6f43d6ff43aa9fdfa5fb2f20a20a7cace66e6e02e2a0dcf19d9b726e2e248d20
ensembl_gtf_116 ed992f0eac7197d9627bda618f8f831ba355c95bd5d0796af785387d462828b6

How each symbol was resolved

Most symbols match the current HGNC symbol directly. The rest are exactly the cases that make symbol-keyed data quietly wrong, and every one of them is recorded rather than resolved on the fly:

Resolved by Symbols Meaning
symbol 19,166 the current HGNC symbol matched directly
prev_symbol 103 the name is a previous HGNC symbol for the gene
ensembl_name 65 no HGNC match; a gene of that name in the pinned Ensembl release
curated 3 resolved by hand, with the reason recorded on the row
alias_symbol 1 the name is a recorded HGNC alias

Nothing is dropped

A symbol the model predicts always keeps its row, even when no identifier could be sourced for it. A missing row would be an absence you had to notice; a row with an empty identifier is one you can see.

Symbol Why it has no identifier
IQCA1 no HGNC record and no gene named IQCA1 in Ensembl 116; the model predicts it, so the row stays and the id is unknown
IQCD no HGNC record and no gene named IQCD in Ensembl 116; the model predicts it, so the row stays and the id is unknown

4 further symbols carry an identifier from HGNC that the pinned Ensembl release no longer lists: PAXX, PRY, PRY2, SMIM2. They keep their row and their identifier.

Asking for particular genes

You may name the genes you want back, as identifiers or as symbols. Symbols are resolved through this table, so a previous symbol or a recorded alias works. Two failures are reported rather than guessed at:

Send the identifier when you know it. It is the one form that cannot be ambiguous.

Predicted is not measured

The gene axis carries columns saying whether each gene was measured in the training data and in how many datasets. A gene the model never saw measured still has a column in the output, because the output axis is fixed — and it is marked, because a prediction for a gene with no training signal is not the same kind of number as one with it.