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.