This is a 2D counterpart of the 3D light-harvesting antenna simulator, built as an independent second implementation of the same physics rather than a flattened render of the 3D scene. Photons are absorbed at the antenna's outer edge, creating excitons that hop between hexagonally-packed chlorophyll pigments by Förster Resonance Energy Transfer (FRET):
k_FRET(r) = k0 · (R0 / r)^6 · exp(−max(0, ΔE) / kT)
R0 = Förster radius, r = pigment separation
ΔE = energy step toward the periphery (uphill hops suppressed)
Two independent solvers run on the same rate model and are cross-checked live:
- Monte Carlo — a continuous-time (Gillespie) stochastic simulation: each visible dot is one exciton whose next hop/decay/trap event is drawn from the true exponential waiting-time distribution, exactly as a real photophysical trajectory would occur.
- Exact Markov chain — every pigment's probability of eventually reaching the reaction center (rather than being lost to decay/NPQ) is solved directly as an absorbing-Markov-chain fixed point: P(i) = [trap(i) + Σⱼ k(i→j)·P(j)] / (total exit rate at i). This needs no random sampling and converges to the exact answer; the heatmap shades every pigment by this number.
The two numbers you see — Monte Carlo Φ (measured from actual trapped/lost excitons) and exact Φ (the outer ring's analytic average) — should converge to the same value as more excitons run, which is a genuine, checkable consistency test you can watch happen in the panel.
Engineering note: the 2D hex-lattice geometry here was independently re-derived and numerically verified (matching the standard axial hex-ring construction) — while building this pair we found the 3D sim's ring-tracing order produces geometrically coincident pigment positions (only 4 of 7 "ring 1" sites are actually distinct, 9 of 19 at ring 2), which this 2D engine does not reproduce.