TTV/TDV Around a Point Mass

The transiting moon does not cross the star on a fixed schedule: it orbits the dark primary, so its transits arrive early or late (transit-timing variation, TTV) and last longer or shorter (transit-duration variation, TDV). Because the thing we watch is the moon, the signal is unattenuated — unlike a conventional exomoon search, where the moon’s tiny mass barely budges its luminous planet.

Code
from lastmoon.physics import constants as c
from lastmoon.physics.orbits import orbital_velocity
from lastmoon.physics.signatures import tdv_fraction, ttv_amplitude

v_bary = orbital_velocity(c.AU, c.M_SUN)
ttv_s = ttv_amplitude(c.LUNAR_SEMI_MAJOR_AXIS, c.M_EARTH, c.LUNAR_MASS, v_bary)
tdv = tdv_fraction(c.LUNAR_SEMI_MAJOR_AXIS, c.M_EARTH, c.LUNAR_MASS, v_bary)
print(f"TTV amplitude (Moon analogue at 1 AU): {ttv_s/3600:.1f} hours")
print(f"TDV fraction: {tdv*100:.2f} %")
TTV amplitude (Moon analogue at 1 AU): 3.5 hours
TDV fraction: 3.40 %

A 3.5-hour timing wobble is enormous by exoplanet standards — conventional planet TTVs are minutes. The amplitude grows with the moon’s orbital radius up to the stability limit:

Code
import matplotlib.pyplot as plt
import numpy as np

from lastmoon.figures.style import apply_style
from lastmoon.physics.orbits import HILL_STABILITY_FRACTION, hill_radius

apply_style()
a_max = HILL_STABILITY_FRACTION * hill_radius(c.AU, c.M_EARTH, c.M_SUN)
a_moon = np.linspace(0.05, 1.0, 60) * a_max
ttv_hr = [ttv_amplitude(a, c.M_EARTH, c.LUNAR_MASS, v_bary) / 3600 for a in a_moon]
fig, ax = plt.subplots()
ax.plot(a_moon / 1e9, ttv_hr)
ax.axvline(c.LUNAR_SEMI_MAJOR_AXIS / 1e9, ls="--", label="the Moon's orbit")
ax.set_xlabel("moon orbital radius (million km)")
ax.set_ylabel("TTV amplitude (hours)")
ax.legend()
fig

TTV amplitude vs moon orbital radius (up to the 1/3-Hill stability limit).
NoteWhat this means for the paper

TTV/TDV is the dynamical fingerprint that turns “a small transiting thing” into “a small thing orbiting an invisible planet-mass point” — and because the primary is a perfect point mass (no oblateness, no tides on it), the forward model is cleaner than for any real planet-moon pair.

WarningIdealizations

Maximum projected amplitudes (circular coplanar orbits, full phase coverage); the paper’s survey module treats recoverability more conservatively.