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.
The expanded three-way research funnel uses tumor ≥2 in at least one observed sample: native linear TPM from all 132 compatible published OncoRef matrices, or native HPA pTPM. These are alternative source-specific gates, not pooled or averaged measurements. Microarray/CPM proxies, single-cell pseudobulk scales and invalid legacy scales are excluded from this absolute tumor floor. DICE and corneal coverage are optional, while their supported measurements still contribute to normal-expression decisions.
| Measure | What is normalized | Interpretation |
|---|---|---|
| Counts | No abundance normalization | Reads/fragments or deduplicated UMIs, depending on the assay. Fragment counts depend on transcript length; 3′ UMI counts should not receive the same length correction. |
| CPM | Counts divided by library size, multiplied by one million | Adjusts sequencing depth; does not adjust transcript length. |
| CP10K | Counts divided by library size, multiplied by 10,000 | Multiply by 100 to obtain CPM on the same feature universe and with the same aggregation. |
| TPM | Length-adjusted abundance rescaled to sum to one million per sample | Relative RNA abundance over the included transcripts. |
| HPA pTPM | Protein-coding transcript abundance rescaled to one million after removing noncoding transcripts | The “p” denotes protein-coding; this is an RNA measurement. |
| 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.
Linked research thresholds and the corneal count scale
The 27 October linked comparison uses the same tissue/IHC ceiling definition for bulk, HPA clusters and sorted immune assays. This is a deliberate provisional numerical linkage, not an assertion that TPM and nTPM from different pipelines are calibrated equivalents. There is no independent single-cell purity multiplier. Future assay-specific deviations need ground-truth calibration and a versioned justification.
The Collin adult corneal source uses 10x 3′ single-cell RNA sequencing. Our statistic is the mean of each cell's counts divided by its whole-cell library and multiplied by 10,000, including zero cells. 1 CP10K = 100 CPM exactly for this same statistic. Calling it impossible to express per million would be incorrect. Calling the result identical to HPA nTPM would also be incorrect: the gene universe, protein-coding restriction, TMM and cluster pooling differ. For UMI data, applying a bulk-fragment transcript-length correction is not the appropriate way to resolve that difference. Collin et al., HPA v23 processing.
The linked comparison therefore expresses its corneal cutoff in the native unit as the shared nominal per-million ceiling divided by 100. For example, the Vital baseline of 2 corresponds numerically to 0.02 CP10K. This is a policy assumption, not a validated conversion to HPA-equivalent abundance. The old independent 1 CP10K cutoff is retained as an explicitly labeled sensitivity, so the effect of this assumption is visible. Cell-count and replicate-group support requirements remain unchanged.
CTAG2 heart: HPA 5.0 versus GTEx 0.4/0.9
The current CTAG2 heart page (checked 2026-10-20) reports HPA's own cohort at 5.0 nTPM, and separately displays HPA-normalized GTEx means of 0.4 nTPM for atrial appendage and 0.9 nTPM for left ventricle. They are different datasets. The consensus uses the higher tissue estimate; it does not imply cross-dataset agreement. Our pinned v23 consensus is 5.1 nTPM, so later portal values cannot silently replace it. Bulk tissue RNA also does not identify the expressing cell type. See the donor-level review.
Absolute RNA ceilings
Here “absolute cutoff” means a cutoff on the reported nTPM value, rather than a restriction fraction; nTPM itself remains a relative abundance measure. The published 21 October screen uses inclusive Vital ceilings of 2/4/6/12, Protected 6/8/12/24, and Manageable 10/20/30/60 nTPM, ordered from missing/uncertain to Approved, Supported and Enhanced negative IHC. Every routine IHC context for that same anatomical tissue must be valid and negative; the weakest local reliability determines the allowance. Positive IHC outside the permitted set still excludes. These are project screening parameters, not validated clinical limits.
The continuous pilot keeps these absolute ceilings and adds a small fixed allowance to the selectivity comparison, with reproductive RNA still strictly higher. That allowance is not an uncertainty estimate. The uncertainty assessment requires separately modeled donor evidence. The 20 October screen is a historical policy with different ceilings.
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.
New tissue-by-tissue selectivity screen
The reproductive selectivity screen
uses Rmax / (Rmax + tissue RNA), where Rmax is the highest valid raw nTPM in
Reproductive for the same gene and source/version. This is a separate pairwise
selectivity score, not the historical summed or deflated fraction above.
Disposable does not enter its reference or the screened tissue set. Each
Manageable, Protected and Vital observation must pass both its IHC-conditioned
absolute ceiling and selectivity minimum; positive IHC independently vetoes.
Zero or missing reproductive RNA produces an unresolved score, never 100%.
The new report preserves every reference,
observation, threshold and decision. The frozen core/extended public panels retain
their historical fraction semantics.