# Human-banana ortholog counts

ProteinIQ analysis of existing OMA predictions, retrieved September 19, 2026,
with a sequence-identity extension retrieved September 25, 2026 (see below).
This is a count of database records, not new experimental data, a new orthology
inference, or a measurement of whole-genome DNA identity.

## Results

| Gene set | Representative genes | Genes with a counterpart | Percentage |
| -------- | -------------------- | ------------------------ | ---------- |
| HUMAN    | 20,430               | 3,683                    | 18.027411% |
| MUSAM    | 35,012               | 6,193                    | 17.688221% |

The article rounds to one decimal place: 18.0% and 17.7%.
The unrounded gene fractions, not the displayed six-decimal values, define the
results. The returned pairs comprise 13,522 unique relationships. All have main
isoforms at both endpoints. A gene with several counterparts counts only once.

## Sources and scope

- OMA database release: `All.May2026`; API version: `1.11`.
- Human: `HUMAN`, Homo sapiens, NCBI taxonomy 9606.
- Banana: `MUSAM`, Musa acuminata subsp. malaccensis, NCBI taxonomy 214687.
- Genome inventories: `https://omabrowser.org/api/genome/HUMAN/` and
  `https://omabrowser.org/api/genome/MUSAM/`.
- Protein records: `https://omabrowser.org/api/genome/HUMAN/proteins/` and
  `https://omabrowser.org/api/genome/MUSAM/proteins/`.
- Ortholog pairs: `https://omabrowser.org/api/pairs/HUMAN/MUSAM/?type=vps&per_page=10000`.
- Version: `https://omabrowser.org/api/version/`.
- API documentation: `https://omabrowser.org/api/docs/`.
- Historical counting method and rounded comparisons:
  `https://github.com/DessimozLab/blogpost-code/blob/main/banana_conjecture/The_Banana_Conjecture.ipynb`.
- OMA methodological reference: Zahn-Zabal, Dessimoz and Glover (2020),
  _Identifying orthologs with OMA: A primer_,
  `https://pmc.ncbi.nlm.nih.gov/articles/PMC7014581/`.

We use OMA's complete gene sets for these two species, without chromosome,
sequence length, identity, distance, or relationship-multiplicity filters. The
human set includes mitochondrial and scaffold records. We count all relationship
types (1:1, 1:n, m:1, m:n). These gene sets are specific to OMA's release, rather
than the latest annotations available from every possible source.

## Method

1. Retrieve the release/API version and both genome inventories.
2. Follow every `Link: rel="next"` response for each protein list and the pair
   list, requesting 10,000 records per page. Verify record totals against
   `x-total-count` and genome `nr_entries`.
3. Retain records with `is_main_isoform = true` as the representative gene set.
   The unfiltered lists contain 103,200 human and 45,589 banana protein entries;
   these include alternative isoforms and are not gene denominators.
4. For each species independently, collect distinct OMA IDs from pair endpoints
   whose `is_main_isoform` flag is true. Confirm all endpoints exist in the
   corresponding protein inventory and that flags agree.
5. Calculate `100 * distinct matched main-isoform IDs / all main-isoform IDs`.
6. Check the release/API version again to rule out a release transition during
   retrieval. Reject duplicate IDs, duplicate pairs, and incomplete pagination.

This follows the 2020 notebook's independent endpoint filtering. In this
snapshot, all pair endpoints are main isoforms, so requiring both endpoints to
be main isoforms gives the same result. We did not align sequences or infer
orthology ourselves. Non-protein-coding genes and alternative protein isoforms
are excluded from the denominator.

## Files and reproduction

- `snapshot.json.gz`: compact projection of the retrieved OMA records, including
  every protein's OMA ID, canonical ID and main-isoform flag, every ortholog pair's
  endpoint IDs/flags and relationship type, both genome metadata records, release
  information, and per-request URLs, times, totals, pagination links and SHA-256
  hashes of the full decoded JSON response bodies. Unused annotations and
  sequence data are not retained. The snapshot defines its array column order.
- `analyze.mjs`: dependency-free Node.js script for retrieval and offline counts.
- `summary.csv`: results regenerated from the snapshot.

Download these files into one directory and run with Node.js 24 or later:

```sh
node analyze.mjs
```

This reads the saved snapshot offline and regenerates `summary.csv`. To query
the then-current release, copy `analyze.mjs` to a new empty directory and run:

```sh
node analyze.mjs --fetch
```

The script refuses to overwrite a saved snapshot during retrieval. Future live
queries may differ. The published snapshot was collected with Node.js v24.18.0.

Snapshot SHA-256:
`555335367f023714ceaf06c90737ec8d99cb7155f21120bb42e3ef395780255f`.

## Verification and interpretation

An independent Python calculation from the saved snapshot confirmed both gene
counts and percentages. A second live API query in the reverse direction
(`MUSAM/HUMAN`, `type=vps`) reproduced exactly the same 13,522 relationships.

The 2020 notebook reported rounded OMA percentages of 17% for human and 14% for
banana, using 20,159 and 36,439 representative genes respectively. Its values
are historical published results, not estimates we recalculated. Differences
between those values and ours can reflect changed annotations, data and
prediction methods. We did not hold those variables constant or perform a
gene-by-gene change analysis. We did not rerun OrthoInspector or reciprocal
BLASTP. No result here measures the fraction of identical whole-genome DNA, and
no statistical confidence interval is implied.

## Sequence identity and species comparison (added September 25, 2026)

`sequence_analysis.py` extends the gene count with protein and coding-DNA
identity, a genome-share estimate, and the same gene count for ten other
species. It uses the same OMA release (`All.May2026`, API `1.11`), retrieved
again on September 25, 2026.

### Results

| Measure | Result |
| ------- | ------ |
| Human genes with a banana ortholog | 3,683 of 20,430 (18.0%) |
| Protein identity over aligned positions, median (IQR) | 39.9% (33.0–49.8%) |
| Pooled protein identity over aligned positions | 40.7% |
| Aligned share of the human protein, median | 93.3% |
| Protein identity over the full human length, median (IQR) | 35.9% (29.0–46.6%) |
| Same, one-to-one best pairs only (1,236 genes) | 33.3% |
| Shuffled non-orthologous control, identity over human length, median | 1.3% |
| Coding-DNA identity over aligned codon positions, median (IQR) | 48.4% (44.4–54.2%) |
| Coding sequence of all 20,430 human main isoforms | 34.1 Mb (1.11% of genome) |
| Coding sequence of the 3,683 matched genes | 5.41 Mb (0.177%) |
| Of which aligned to banana coding DNA | 4.84 Mb (0.159%) |
| Of which identical | 2.36 Mb (0.077%) |

Human genes with at least one OMA ortholog, out of 20,430:

| OMA code | Species | Genes | Percent | TimeTree median divergence |
| -------- | ------- | ----- | ------- | -------------------------- |
| PANTR | Chimpanzee | 18,639 | 91.2% | 6.5 Mya |
| MOUSE | Mouse | 18,096 | 88.6% | 83.5 Mya |
| CHICK | Chicken | 13,530 | 66.2% | 318.8 Mya |
| DANRE | Zebrafish | 12,331 | 60.4% | 435.1 Mya |
| DROME | Fruit fly | 5,446 | 26.7% | 721.5 Mya |
| CAEEL | Nematode worm | 4,929 | 24.1% | 721.5 Mya |
| ARATH | Thale cress | 3,723 | 18.2% | 1,455.3 Mya |
| MUSAM | Banana | 3,683 | 18.0% | 1,455.3 Mya |
| ORYSJ | Rice | 3,375 | 16.5% | 1,455.3 Mya |
| SCHPO | Fission yeast | 2,564 | 12.6% | 1,217.9 Mya |
| YEAST | Baker's yeast | 2,260 | 11.1% | 1,217.9 Mya |

Divergence times are TimeTree 5 pairwise medians, queried September 25, 2026 at
`https://timetree.org/api/pairwise/9606/<taxon>` with taxa 9598, 10090, 9031,
7955, 7227, 6239, 3702, 4530, 4641, 4932 and 4896. OMA genome records list
6,600 entries for YEAST and 5,087 for SCHPO (`https://omabrowser.org/api/genome/<code>/`).

### Method

1. Page through `/api/genome/HUMAN/proteins/` (main-isoform flag, length,
   chromosome) and `/api/pairs/HUMAN/<code>/?type=vps` for each species,
   verifying totals against `X-Total-Count`.
2. For the species comparison, count distinct human main-isoform endpoints and
   divide by 20,430, the denominator of `analyze.mjs`.
3. For banana, keep pairs whose endpoints are both main isoforms and choose, for
   each human gene, the banana ortholog with the highest OMA alignment `score`
   (ties broken by OMA ID). Retrieve protein and cDNA sequences with
   `POST /api/protein/bulk_retrieve/`.
4. Align each pair with Biopython 1.85 `PairwiseAligner`: global mode, BLOSUM62,
   gap open -11, gap extend -1, end gaps free. Protein identity is identical
   residues over aligned columns (both residues present); the full-length
   variant divides by the human protein length instead.
5. Map each aligned residue pair to its codons (the cDNA must translate to the
   protein; 3,674 of 3,683 pairs pass) and count identical nucleotides.
6. Control: pair each human protein with a random banana main-isoform protein
   (seed 20260925) that is not one of its OMA orthologs, and repeat steps 4–5.
7. Genome share: coding length is 3 × (protein length + 1) per main isoform.
   Aligned and identical nucleotides from the codon-checked pairs are scaled by
   coding length to all 3,683 genes (factor 1.002) and divided by the
   3,054,815,472-bp T2T-CHM13 genome.

### Limitations

Only one banana counterpart per human gene is aligned, and only OMA's orthology
predictions are used; OrthoInspector assigned more human genes in 2020.
Identical letters include chance matches. RNA genes, such as ribosomal RNA, and
non-coding DNA are not assessed, and no whole-genome alignment was performed.
Medians describe genes with a banana ortholog, not all human genes.

### Files and reproduction

- `sequence_snapshot.json.gz`: release, request log with SHA-256 hashes, human
  protein projection, and pair projections for all eleven species.
- `sequences_human.json.gz`, `sequences_banana.json.gz`: protein and cDNA
  sequences for every main-isoform endpoint of a human–banana pair (split to
  keep each file under 5 MiB).
- `sequence_summary.json`: all results above, with file hashes.
- `banana_pairs.csv`: one row per human gene with its best banana ortholog,
  relationship type, aligned and identical residues and nucleotides, and
  readable identifiers.

With Python 3.11+ and Biopython 1.85:

```sh
python sequence_analysis.py
```

recomputes the results offline (about one minute). `--fetch` retrieves a new
snapshot and refuses to overwrite an existing one.
