Skip to content

Protein sites and zinc: what the measurements said

Written 2026-10-16, after the measurements. The forecast (FORECAST.md) was written first, on 2026-10-15 at 23:50, and has not been edited since.

The question was whether the orbital layer, built for molecules of up to 120 atoms, can show the electronic structure of a zinc site inside a protein of any size, fast enough for a 2-core server. Thirteen forecasts were written down, with fifteen checks among them. Ten held, four failed and one missed by a milliångström. Two of the failures were more interesting than the predictions, and both changed what the app does.

ForecastMeasured
F1Zn Hartree–Fock limit to < 1 mhartree−1777.847923 vs −1777.848116: Δ = 0.19 mhartreeheld
F2virtual 4s of Zn²⁺: ε = −0.62 ± 0.04 hartree−0.6054 (experiment, Zn⁺ ionisation: −0.6602)held
F3virtual 4p: ε = −0.41 ± 0.04 hartree−0.4081 (experiment, Zn⁺ 4p: −0.4366)held
F4⟨r⟩: 4s(atom) 1.55 ± 0.15, 4s(ion) 1.35 ± 0.15, 4p(ion) 1.75 ± 0.25 Å1.533, 1.368, 1.750 Åheld
F5Slater fits reach overlap ≥ 0.99990.999998 (5 terms), 0.999995 (4 terms)held
F67DDO: placed Zn ≤ 0.30 Å from the deposited one, rms < 0.12 Å0.301 Å, rms 0.080 Åfailed by 1 mÅ
F65A7U: no fit better than rms 0.30 Å; placed 0.3–0.8 Å awayrms 0.093 Å; 0.800 Å awayfailed
F7the right ligands, without Glu375 (7DDO) / all four, Nε2 (5A7U)exactly thatheld
F8donor pair to Zn line: ≤ 12° (His, 7DDO), ≤ 25° (Glu), one > 20° (5A7U)9.2° and 35.0°; 6.5°; 20.04°failed (His378)
F9four ligands: acceptor s character 0.25 ± 0.05 each0.09–0.43 (deposited), 0.14–0.34 (ideal distances)failed
F9three ligands: leftover orbital within 25° of the open side10.2° (deposited), 12.5° (placed)held
F10ADR1 Cys5–His26 with caps: 360 ± 40 atoms; x(3) misses, x(3,4) finds384 atoms; as forecastheld
F11> 20 s before the fix; < 1.5 s after; doubling < 2.3× time71.4 s; 1.15 s; 2.24× on average (2.84× at one step)held on average
F12JSON < 1.5 MB0.88 MB (5A7U), 1.09 MB (7DDO), 93 kB gzippedheld
F13~600 orbitals: < 4 s low, < 10 s medium (browser)752 orbitals: 4.4 s / 8.7 s first; 1.9 s / 3.4 s after two fixeslow failed first

1. Zinc's acceptor orbitals

Zn²⁺ is [Ar]3d¹⁰: every shell it has is full. What a ligand's electron pair can enter are its empty 4s and 4p orbitals. An empty orbital has no unique shape, so a choice was made and tested: the virtual orbitals of closed-shell Hartree–Fock on Zn²⁺. These are the orbitals that one added electron would occupy in the field of the ion. A virtual orbital's energy is then minus the energy needed to remove that electron again (Koopmans 1934, used in reverse), so the measured ionisation energy of Zn⁺ is a check on it.

The solver of the radial-function experiment (tools/radial/atomic_hf.py) needed three small additions:

  • zinc's nuclear charge;
  • ion configurations (a d-block cation loses its 4s electrons first, so Zn²⁺ is 3d¹⁰ and not 4s²3d⁸);
  • an accessor for the virtual orbitals of the final Fock matrix.

Two checks confirm the result:

  • Neutral zinc reproduces the numerical Hartree–Fock limit to 0.19 mhartree, and its 4s eigenvalue, −0.2925, is the tabulated −0.2925 of Clementi and Roetti.
  • A larger basis changes the virtual eigenvalues by less than 10⁻⁵ hartree.
ε (hartree)experiment⟨r⟩ (Å)99 % radius (Å)
4s of the neutral atom (occupied)−0.2925−0.3452 (IE of Zn)1.5333.49
4s of Zn²⁺ (virtual)−0.6054−0.6602 (IE of Zn⁺, NIST)1.3682.90
4p of Zn²⁺ (virtual)−0.4081−0.4366 (Zn⁺ 4p ²P, J-weighted)1.7503.73

Hartree–Fock binds both orbitals about 7 % less than experiment. That gap is the correlation of the added electron with the 3d shell, which Hartree–Fock leaves out. As forecast, the virtual 4s is smaller than the neutral atom's 4s, because the ion's charge pulls it in. The 4p is the more diffuse of the two. Both are now in radial_fits.json, fitted by 5 and 4 Slater terms (overlap with Hartree–Fock 0.999998 and 0.999995), and every page draws them the same way.

For comparison, calcium's 4s has ⟨r⟩ = 2.23 Å. Zinc's 4s is 30 % smaller because ten 3d electrons screen the nucleus poorly: the same effect that makes zinc smaller than calcium.

2. The site

Placing a zinc where the model has none (F6, F7)

AlphaFold models carry no metals. To test placement, the deposited zinc was deleted (and the hydrogens, to look like an AlphaFold file), and the zinc was placed again. The placement:

  • fits the target distances of Harding (2006) by least squares;
  • adds a term for the donor's geometry: an imidazole N is approached along its in-plane lone pair; Cβ–S–Zn is close to 105° and C–O–Zn close to 125°;
  • tries every choice of three or four ligands and every donor atom among the motif's Cys, His, Asp and Glu.

7DDO (ACE2). The ligands came out right: His374 Nε2, His378 Nε2 and Glu402, with Glu375 left out (it is the catalytic base of the HEXXH motif, not a ligand). The placed zinc lies 0.301 Å from the deposited one. The forecast said 0.30 Å, so by the letter it failed by one milliångström, a hundred times less than a 3.4 Å map can resolve. The mirror image on the other side of the three donors was rejected by the donor-geometry term, as forecast.

5A7U (ADR1). Here the forecast was wrong in an informative way. It expected the site to be so distorted that no position fits all four target distances. Instead one fits with an rms deviation of 0.093 Å, 0.80 Å away from where the zinc was deposited. The ligand atoms are fine; the deposited zinc is in the wrong place. Its three short distances (1.86–1.89 Å) and the long one (3.20 Å) say the same thing. The paper explains why: the zinc finger in this cryo-EM entry is the NMR model 2ADR, docked into a 4.8 Å map as a rigid body (Nilsson et al., Cell Rep. 2015).

What changed: whenever a file has a zinc, the site report now says where these ligands would hold one at ideal distances. A "refit" option draws the orbitals for that position.

Do the electron pairs point at the zinc? (F8)

On each ligand atom the hybrids are recomputed with the zinc as one more σ partner, by Coulson's method, exactly as for a covalent bond. The hybrid toward the zinc is the donated pair. Its angle to the N/S/O→Zn line is the measurement.

  • Cysteine sulfur always points exactly at the zinc. Two bonds and two lone pairs leave enough freedom for that. What the geometry changes is the hybrid: sp^4.9 at C–S–Zn = 102° (Cys8), sp^1.9 at 121° (Cys5). This is Coulson's theorem: a wider bond angle needs more s character.
  • Histidine nitrogen can only bend within its ring plane, so a zinc above the plane is missed. His374 in 7DDO is at 9°, as forecast. His378 is at 35°, because the zinc sits 35° out of its ring plane. That is unusual for a real His–Zn bond and is the main sign that this 3.4 Å site is strained. The forecast of ≤ 12° assumed a well-refined site.
  • The glutamate oxygen of 7DDO is at 6.5°.

Zinc's empty orbitals (F9)

The first attempt used Coulson's directional criterion for the metal too. With three ligands it was underdetermined: two acceptors came out as pure p orbitals and all the s character went into the leftover orbital. It was replaced by the criterion of maximum overlap: choose the orthonormal combinations of 4s and 4p that overlap the ligands' pairs as much as possible. This is the bond-strength idea of Pauling (1931) and Coulson, made exact as a Procrustes problem. Its solution is Löwdin's symmetric orthonormalisation of each donor pair's projection onto the zinc: the acceptor is the donor pair's own shadow on the metal. The overlaps are integrated in prolate spheroidal coordinates, and the quadrature reproduces the analytic p–p overlaps of basis.py to 10⁻⁶.

  • Three ligands (7DDO). The leftover fourth orbital points 10° from the open side (12.5° for the placed zinc), where ACE2's catalytic water binds. It also holds the most s character (0.48): the open site is the most Lewis-acidic direction of the zinc.
  • Four ligands. The forecast of an equivalent sp³ set (s = 0.25 ± 0.05) failed, even at ideal distances: s character runs from 0.14 to 0.34. The four ligands are not tetrahedral (rms 18° from 109.5°), and the overlaps reward the ligands that sit where 4s and 4p overlap them best. Equivalent hybrids would need equivalent ligands.

Donor–acceptor overlaps lie between 0.35 and 0.63. The long Cys5 contact of 5A7U has the smallest, 0.35 at 3.20 Å; at the refitted position it rises to 0.58.

3. Scale

The server (F10–F12)

The whole zinc finger of ADR1, Cys5 to His26 with acetyl and N-methylamide caps, is a 384-atom fragment with 948 orbitals and 33 π systems (22 peptide amides, rings, carboxylates, guanidinium groups). The first run of the orbital layer took 71.4 s: the ring search started a breadth-first search from every bond, without a depth limit, once for every atom. That search is now limited to the ring size it looks for and is cached until the graph changes: 1.15 s.

Two more costs grew faster than the atom count and turned up on larger fragments:

  • a coordinate check was asked once per atom and scanned every atom;
  • the π layer sorted whole rows of its coupling matrix to find neighbours.

Both are linear now. The table below is the best of three runs on one core of this sandbox, for stretches of ACE2 chain A:

residuesatomsorbital layer (s)ms per atom
101550.0970.63
203180.2120.67
406600.6020.91
8012621.1650.92
16025502.5851.01
32050745.4701.08

Each doubling multiplies the time by 2.24 on average. One step was 2.84×, where the stretch picks up aromatic rings, whose strained bond angles need the slower refinement of the hybrids. The cost per atom still rises 1.7× over a 33-fold range of size. A site of a few hundred atoms is answered in about a second, which is the case that matters.

The answer for the zinc finger is 0.88 MB of JSON, 93 kB gzipped on the wire.

The browser (F13)

Drawing every orbital of the fragment means 752 orbitals once hydrogens are left out. The forecast counted about 600 because it forgot that every heavy atom has four. The first measurement in Chromium, with the π density included, took 4.4 s at low quality and 8.7 s at medium. Profiling found two costs:

  • welding the surface's vertices by hashing their coordinates as strings;
  • evaluating sums of exponentials at every grid point.

Two fixes followed:

  • qo-mesh.js now names each surface vertex by the grid edge it lies on. Kuhn's triangulation only uses edges that run from a grid point in a non-negative direction, so the mesh comes out welded.
  • qo-orbitals.js tabulates each radial function once, on a grid uniform in √r, which agrees with the direct sums to 5·10⁻⁶.

After both: 1.9 s at low, 3.4 s at medium. The 120-orbital cap of the 3D viewer is now 1500.

What changed in the app

  • /sites: the page; POST /api/site; qo_chem/structure.py, qo_chem/bcif.py and qo_chem/site_orbitals.py; site_service.py.
  • Zn in the orbital layer (METALS, ion table, Slater table, radial table) and a Zn²⁺ button on /molviewer.
  • The scaling fixes in molgraph.py and huckel.py, and the faster surfaces in qo-mesh.js and the new qo-orbitals.js, which /molviewer now shares.

Not tested here

  • Real renderers. The real Mol* and 3Dmol.js bundles could not be downloaded in this sandbox. Every browser check used recording stand-ins (what is sent, in which frame, with which R check). The surfaces themselves were checked for closure and orientation, and rendered with a software renderer that hides back faces.
  • GL1X itself. gl1x.com was not reachable from the sandbox. The browser fetch of a record's file was tested against a stand-in answering with a gzip-compressed PDB file. The BinaryCIF decoder was tested on Biotite's 1AKI pair (text and binary give the same 1079 atoms), not on a MolNFT v2 record.
  • AlphaFold files. AlphaFold models were imitated by deleting the zinc and the hydrogens from the two PDB entries.

Reproduce

python tools/radial/atomic_hf.py                       # Hartree–Fock limits, Zn included
python tools/radial/make_radial_table.py --only Zn     # Zn²⁺ virtual 4s/4p into radial_fits.json
python -m unittest tests.test_structure                # readers, motifs, fragments, placement, metal orbitals
node tests/test_orbitals.js && node tests/test_mesh.js

Sources

  • M. M. Harding, Acta Cryst. D62, 678 (2006): target metal–donor distances.
  • NIST Atomic Spectra Database, Zn II: levels 4p ²P at 48 481.077 and 49 355.003 cm⁻¹, limit 144 892.6 cm⁻¹.
  • O. B. Nilsson et al., Cell Rep. 12, 1533 (2015): 5A7U, ADR1a in the ribosome exit tunnel.
  • E. Clementi & C. Roetti, At. Data Nucl. Data Tables 14, 177 (1974): Hartree–Fock atoms.
  • C. A. Coulson, Valence (1952); P.-O. Löwdin, J. Chem. Phys. 18, 365 (1950).
  • H. W. Kuhn, Some combinatorial lemmas in topology, IBM J. Res. Dev. 4, 518 (1960): the cube triangulation.

Source: tools/sites/RESULTS.md in the server package · updated