RNA expression units in CTA curation
The CTA normal-tissue evidence uses HPA v23 consensus nTPM. Keep that unit when interpreting the tables, plots and thresholds; a tumor dataset reporting TPM is not automatically on the same scale.
| Measure | What is normalized | Interpretation |
|---|---|---|
| Counts | No abundance normalization | Assigned reads/fragments; affected by sequencing depth and transcript length. |
| CPM | Counts divided by library size, multiplied by one million | Adjusts sequencing depth; does not adjust transcript length. |
| TPM | Length-adjusted abundance rescaled to sum to one million per sample | Relative RNA abundance over the included transcripts. |
| RPKM / FPKM | Reads / fragments divided by feature length and library size | Adjusts length and depth; unlike TPM, the column total is not fixed. |
| HPA nTPM | Protein-coding TPM followed by TMM normalization | HPA's normalized RNA expression scale, with a defined reference set and processing pipeline. |
See the Salmon output definitions for TPM versus assigned reads, and the TPM methods paper for the distinction from RPKM.
Why HPA adds the ānā
HPA rescales TPM after removing noncoding transcripts, producing pTPM, then applies TMM (trimmed mean of M values) normalization. Its normal-tissue consensus uses the maximum of the HPA and GTEx estimates for each gene and tissue. The result is an aggregated reference, not a measurement from one individual. These definitions are pinned to the HPA v23 methods.
The extra scaling addresses RNA composition: a few highly abundant transcripts can consume much of a sample's fixed total, making other transcripts look relatively lower. TMM estimates a scaling factor from a trimmed set of gene ratios to reduce this effect. It does not make RNA measurements absolute or remove every biological or technical difference. See the original TMM paper.
Consequently, do not substitute 10 TPM from an unrelated pipeline for 10 HPA nTPM. There is no universal scalar conversion for an isolated gene value: the included genes, normalization factors and aggregation matter. Neither measure reports protein abundance or HLA peptide presentation.
What the CTA fractions mean
rna_*_ntpm columns are expression measurements. The
rna_deflated_reproductive_frac column is a dimensionless restriction score:
deflated signal[tissue] = max(nTPM[tissue] - 1, 0)
fraction = sum(deflated signal in selected tissues)
/ sum(deflated signal in all observed tissues)
rna_reproductive_tissue_scope identifies the numerator: core or extended.
Changing the scope does not change the expression unit. It changes which
tissues contribute to the numerator. For example, RNASE12 has a core fraction
of 0.0004 and an extended fraction of 0.9993 because its RNA is concentrated
in accessory reproductive tissues. Those two numbers are fractions, not nTPM.
See the full panel audit.
When observed expression is entirely below the deflation threshold, the
deflated fraction follows the existing convention of 1.0; the separate
expression policy prevents that convention alone from admitting a gene to the
default panel. When a gene has no RNA observations, regeneration instead
clears its RNA measurements, assigns NO_DATA RNA axes and fails the RNA gate.
Missing values are not observed zeros, and old measurements are never reused
under a new scope label.
Identical-protein expression and registry updates
The human CTA protein registry groups the longest Ensembl r112 protein sequences
from the current CTA source table and its explicitly seeded partners. This is
an identity reference, not a change to canonical CTA panel admission. The refresh
for #567 contains 37 groups and
93 member genes, including the identical 496-aa RBMY1F/RBMY1J pair. Both genes
now have the CTA-scope key RBMY1F/J.
Expression collapse sums independently allocated per-gene TPM contributions within each sample before calculating percentiles or within-sample ranks. Do not add previously computed prevalence fractions or percentiles, or duplicate one ambiguous RNA observation across its possible source loci.
scope="cta" and scope="genome" select different collapse registries. Ranking
uses all remaining biological rows after the selected collapse; CTA scope does
not restrict the ranking denominator to CTA genes alone. Genome scope can merge
additional groups and therefore change ranks even for an unchanged CTA protein.
Generated proteoform summary parquets retain proteoform_scope and
proteoform_registry_sha256 in their pandas attrs. Readers use a precomputed
summary only when both match the current registry. Legacy summaries without the
fingerprint, and summaries with an outdated fingerprint, are recomputed from the
cohort's per-sample matrix. If that matrix is unavailable, the accessor raises
an error explaining the rebuild requirement; the proteoform wrappers default to
auto_fetch=True. Local availability helpers exclude stale summaries unless
their source matrix is cached.
To regenerate the reference and summaries from biological clean-TPM matrices:
python scripts/generate_proteoform_groups.py --ensembl-release 112
python scripts/generate_cohort_percentiles.py --input <clean-matrix-dir> --proteoform --scope cta
python scripts/generate_within_sample_top5.py --input <clean-matrix-dir> --proteoform --scope cta
The summary inputs must use the intended sample-QC policy; drop technical genes
before building or supply the generators' --drop-genes file. The full
rebuild_expression_artifacts.py workflow also preserves the registry fingerprint.
OncoRef 1.8.210 pins data bundle 5.23.26, which refreshes both protein summaries
for all 143 cohorts. The rebuild preserves the base bundle's sample selection and
reproduces its gene-level percentiles and prevalence exactly before regrouping.
For a registry-only refresh, scripts/refresh_proteoform_artifacts.py --base
<published-bundle> --out <refresh-dir> enforces these checks and records an audit.
Runtime recomputation clips negative source values before normalization and uses
the recorded effective sample-QC policy for artifact reads. Explicit
sample_qc="pass" percentile reads remain strict.