Finding Planets · a bookSearchlearn.xhelio.ai
Part VII · Exoplanets · Chapter 32

Microlensing: planets that bend starlight

How a planet is found by the brief distortion its gravity adds to a background star's lensing brightening: the physics of caustics, the search pipelines from EventFinder to AnomalyFinder, the solvers from ray shooting to GPU contour integration, and why the hard computational problem is not fitting the best model but proving that no other model fits.

In the southern winter of 2003 two survey telescopes were watching the same star in the Galactic bulge brighten. The Optical Gravitational Lensing Experiment (OGLE) had flagged it on 22 June as a microlensing event: a star in front of it, too faint to see, was acting as a lens and slowly magnifying it. On 14 July the light curve stopped following the smooth, symmetric shape that a single lens produces. For about a week it ran high, and on 21 July the 0.6-m telescope of the Microlensing Observations in Astrophysics (MOA) collaboration at Mount John, New Zealand, caught a sharp spike and then a sudden drop. Three groups modelled the 1,275 measurements independently, with different codes, and reached the same answer. The lens was a star with a companion 0.0039 times its mass: a planet of roughly one and a half Jupiter masses, several kiloparsecs away, which neither group could see and never would (Bond et al. 2004).

Nothing about that planet was luminous. It was detected because its gravity changed the paths of photons from a third body, a background star, that happened to pass behind its own host star. This is the only exoplanet method in this part of the book that does not depend on light from the planet or its host. It finds cold planets near and beyond the snow line, planets around faint stars far across the Galaxy, and planets with no host at all. It is also the method in which a discovery is least repeatable: the alignment happens once, the anomaly lasts hours or days, and the light curve is a single one-dimensional cut through a complicated two-dimensional pattern of magnification.

Those facts shape the computing. Microlensing has three separate search problems, and it pays to keep them apart. Event finding screens hundreds of millions of stellar light curves for the brightening caused by any lens. Anomaly finding searches the residuals of known events for the extra bump or dip a companion adds. Modelling explores a strongly multimodal parameter space to decide whether that companion is a planet, and whether some other configuration explains the data equally well. A fourth problem, completeness, repeats the second and third thousands of times on injected signals to turn a list of discoveries into an occurrence rate. This chapter follows those problems in order.

From a lensing experiment to a planet experiment

The idea

Shude Mao and Bohdan Paczyński’s 1991 Letter made the step from lensing to planets. Binary lenses, they argued, should be recognisable in monitoring of the Galactic bulge, and the perturbation stays strong even when the second mass is a planet. They proposed discovering planetary systems this way before any microlensing event had been confirmed. Their examples used a foreground stellar lens and a background bulge source, computed the probability that the source would cross a caustic, and stressed that short spikes would need real-time processing and advance warning. Their planetary disturbances lasted 2.5 to 10 hours for the event timescales they adopted. These were model predictions, but they set the cadence target for the next three decades (Mao & Paczyński 1991).

Andrew Gould and Abraham Loeb then worked out the observing strategy (Gould & Loeb 1992): find ordinary events with a wide-field survey, alert other observers while the events are still rising, then monitor selected stars rapidly from telescopes spread in longitude so that the bulge is never out of sight. OGLE and MACHO ran early alert systems. Follow-up networks, PLANET, GMAN, MPS and later μFUN, supplied the dense monitoring (Kim, D.-J. et al. 2018; Kim, H.-W. et al. 2018). Kim Griest and Neda Safizadeh added the observation that made follow-up efficient. In a high-magnification event the source passes very close to the host lens, where every planet, whatever its separation, creates a small central caustic. Sensitivity to planets is therefore concentrated in a short, predictable interval around peak, which is exactly when follow-up telescopes should be pointed at the event (Griest & Safizadeh 1998).

The surveys built the data stream. OGLE began in 1992, and its dedicated 1.3-m Warsaw telescope at Las Campanas enabled the OGLE-II phase from 1997. Difference imaging became central with OGLE-III in 2001, because the crowded bulge defeats aperture photometry of isolated stars (Udalski et al. 2015). The technique itself belongs to Chapter 10. What matters here is that it turned the bulge into a stable, dense set of light curves in which a planetary anomaly could be seen.

The first planet and the first warning

OGLE-2003-BLG-235/MOA-2003-BLG-53

OGLE used the 1.3-m Warsaw telescope in Chile, an 8192 × 8192-pixel camera and 120-s I-band exposures. MOA used its then 0.6-m telescope, a 4096 × 6144-pixel camera and 180-s exposures in a broad red filter. The analysis used 183 OGLE and 1,092 MOA points. Both surveys recorded a roughly seven-day departure from 14 to 21 July 2003, and MOA alone covered the caustic-exit spike. The short caustic traversal and the modest deviation inside it pointed to an extreme mass ratio.

The preferred model had q=0.0039−0.0007+0.0011q = 0.0039^{+0.0011}_{-0.0007} and an Einstein timescale tE=61.5±1.8t_E = 61.5 \pm 1.8 days. The best single-lens model was worse by Δχ2=650.96\Delta\chi^2 = 650.96, and the best model restricted to stellar companions (q≥0.03q \ge 0.03) was worse by 210.96. The mass of about 1.5 Jupiter masses and the projected separation of about 3 AU were inferred from a Galactic model. The mass ratio was the robust measurement. And even this first case had a second planetary solution, with q=0.0070q = 0.0070, only 7.37 higher in χ2\chi^2 (Bond et al. 2004).

That last number is the thread through this chapter. The first secure microlensing planet already came with an alternative interpretation that the data did not decisively exclude, and with a physical mass that depended on a model of the Galaxy. Neither problem was introduced by later automation. Both are built into the method.

Low masses, survey networks and buried planets

OGLE-2005-BLG-390 showed the method could reach cold, low-mass planets. OGLE alerted the event on 11 July 2005. After peak magnification on 31 July, the PLANET network detected a deviation on 9 August. The combined data gave q=(7.6±0.7)×10−5q = (7.6 \pm 0.7) \times 10^{-5} and an inferred companion of 5.5−2.7+5.5 M⊕5.5^{+5.5}_{-2.7}\,M_\oplus. The often quoted orbital separation of about 2.6 AU is a Bayesian interpretation, not the measured dimensionless separation. The source was a giant star, and its size smoothed the anomaly so much that the planet sat near the detection floor for that source (Beaulieu et al. 2006).

In the 2010s the observing model changed. OGLE-IV’s large mosaic, MOA-II’s high cadence and the Korea Microlensing Telescope Network (KMTNet) replaced scarce follow-up time with continuous survey coverage. KMTNet has three 1.6-m telescopes, each with a 4-deg² camera, at Cerro Tololo in Chile, the South African Astronomical Observatory and Siding Spring in Australia, so that the bulge can be watched around the clock. Commissioning observations began in 2015. The event-finding software for that season was developed only from mid-2016, after the data were already accumulating, and found 660 clear and 182 possible events (Kim, D.-J. et al. 2018). Telescope commissioning and discovery-software readiness are different milestones.

With continuous coverage, many planets could be found after the fact, in archival data, by software. Weicheng Zang and colleagues introduced the AnomalyFinder in 2021. Its first demonstration uncovered OGLE-2019-BLG-1053Lb, a low-mass-ratio planet whose signal was buried in a peripheral part of the light curve (Zang et al. 2021). Kyu-Ha Hwang and colleagues then found six new planets with q<2×10−4q < 2 \times 10^{-4} in the 2018–2019 data, five of them as subtle dips that visual searches had missed (Hwang et al. 2022). The systematic search has since been completed for the first four KMTNet seasons, 2016 to 2019, with 112 unambiguous planets, including previously known ones (Gui et al. 2025), and extended to the 2021 prime fields, where it found seven hidden planetary systems and three candidates (Shin et al. 2026). These planets were in the archive all along. Better software, not better telescopes, found them.

The physics of a lens

Einstein scales

A point mass MM at distance DLD_L deflects light from a source at distance DSD_S. When the three are aligned, the source appears as a ring of angular radius

θE=[4GMc2 DS−DLDLDS]1/2=κMπrel,\theta_E = \left[\frac{4GM}{c^2}\,\frac{D_S - D_L}{D_L D_S}\right]^{1/2} = \sqrt{\kappa M \pi_{\rm rel}},

the Einstein radius. Here πrel=AU (DL−1−DS−1)\pi_{\rm rel} = {\rm AU}\,(D_L^{-1} - D_S^{-1}) is the relative parallax of lens and source and

κ=4Gc2 AU≃8.144 mas M⊙−1.\kappa = \frac{4G}{c^2\,{\rm AU}} \simeq 8.144\ {\rm mas}\,M_\odot^{-1}.

The physical Einstein radius at the lens is RE=DLθER_E = D_L\theta_E, and the event timescale is tE=θE/μrelt_E = \theta_E/\mu_{\rm rel}, where μrel\mu_{\rm rel} is the relative proper motion of lens and source (Penny et al. 2019).

Worked example: the scales of a bulge event

Take a lens of M=0.5 M⊙M = 0.5\,M_\odot at DL=4D_L = 4 kpc and a source in the bulge at DS=8D_S = 8 kpc. Then πrel=0.25−0.125=0.125\pi_{\rm rel} = 0.25 - 0.125 = 0.125 mas, and θE=8.144×0.5×0.125≈0.71\theta_E = \sqrt{8.144 \times 0.5 \times 0.125} \approx 0.71 mas. At 4 kpc one milliarcsecond is 4 AU, so RE≈2.9R_E \approx 2.9 AU. With an assumed relative proper motion of 5 mas per year, tE≈0.71/5t_E \approx 0.71/5 yr, about 52 days.

A planet of mass ratio qq has its own Einstein radius q θE\sqrt{q}\,\theta_E and its own crossing time q tE\sqrt{q}\,t_E. For a Jupiter around this star, q≈1.9×10−3q \approx 1.9 \times 10^{-3} and q tE≈2.3\sqrt{q}\,t_E \approx 2.3 days. For an Earth, q=6×10−6q = 6 \times 10^{-6}, the planet’s Einstein radius is about 1.7 μas and its crossing time is about 3 hours. These are the 2.5-to-10-hour signals Mao and Paczyński predicted.

Two features of these numbers explain where microlensing looks. First, the Einstein radius of a typical bulge lens is a few AU, near the snow line of a low-mass star. A planet is most likely to perturb a magnified image when its projected separation ss, in units of θE\theta_E, is close to 1, so microlensing is most sensitive to planets a few AU from their hosts: cold planets that transits and radial velocities find hard. Second, the planetary signal is short compared with the event. The survey has to sample a 50-day event densely enough to catch a 3-hour feature in it.

Side view (not to scale) Sky seen by the observer observer lens star at D_L planet source at D_S apparent image + apparent image − Einstein ring, angular radius θ_E true source lens major image minor image planet images are a few hundred μas apart: unresolved
A point lens splits a background source into two images, one outside the Einstein ring and one inside it, on opposite sides of the lens. The images are not resolved, so the observable is their summed brightness, the magnification. A planet near one of the images distorts that image and adds a brief anomaly. A planet near the major image usually adds light. A planet near the minor image can remove it.

The single-lens light curve

Write uu for the lens–source separation in units of θE\theta_E. For a point source, a single point lens and straight-line relative motion,

u(t)=u02+(t−t0tE)2,A(u)=u2+2uu2+4,u(t) = \sqrt{u_0^2 + \left(\frac{t - t_0}{t_E}\right)^2},\qquad A(u) = \frac{u^2 + 2}{u\sqrt{u^2 + 4}},

where u0u_0 is the impact parameter and t0t_0 the time of closest approach. For small uu, A≈1/uA \approx 1/u. This is the Paczyński curve, and it is the shape every event-finding algorithm looks for. Each telescope and filter dd records

Fd(t)=Fs,d A(t;ϑ)+Fb,d,F_d(t) = F_{s,d}\,A(t;\boldsymbol\vartheta) + F_{b,d},

where FsF_s is the source flux and the blend flux FbF_b includes unresolved neighbours and possibly the lens itself. In a difference image one measures approximately Fs[A(t)−A(tref)]F_s[A(t) - A(t_{\rm ref})], the change since the reference image, with an offset that depends on the dataset (Zang et al. 2021; Koshimoto et al. 2023).

1101001000-40-2002040Days from peakMagnification A (log scale) (-40, 1.0435) (-25.75, 1.1073) (-6.5, 1.3071) (0, 1.3416) (6.5, 1.3071) (25.75, 1.1073) (40, 1.0435) (-40, 1.0587) (-32.75, 1.1014) (-26.75, 1.1671) (-21.75, 1.2634) (-17.5, 1.401) (-14.5, 1.5517) (-11.5, 1.7752) (-8.25, 2.1469) (-2.75, 3.1526) (-1.3, 3.3717) (0, 3.4448) (1.3, 3.3717) (2.75, 3.1526) (8.25, 2.1469) (11.5, 1.7752) (14.5, 1.5517) (17.5, 1.401) (21.75, 1.2634) (26.75, 1.1671) (32.75, 1.1014) (40, 1.0587) (-40, 1.0604) (-30.5, 1.1271) (-23.5, 1.2384) (-20.5, 1.3211) (-17.75, 1.4301) (-15.25, 1.5726) (-13, 1.7569) (-11, 1.992) (-9.25, 2.2868) (-7.75, 2.6464) (-6.25, 3.1694) (-5, 3.8141) (-3.75, 4.7852) (-3, 5.6144) (-1.41, 8.2189) (-0.89, 9.1772) (-0.42, 9.8248) (0, 10.0375) (0.42, 9.8248) (0.89, 9.1772) (1.41, 8.2189) (3, 5.6144) (3.75, 4.7852) (5, 3.8141) (6.25, 3.1694) (7.75, 2.6464) (9.25, 2.2868) (11, 1.992) (13, 1.7569) (15.25, 1.5726) (17.75, 1.4301) (20.5, 1.3211) (23.5, 1.2384) (30.5, 1.1271) (40, 1.0604) (-40, 1.0607) (-33.25, 1.1018) (-27.75, 1.1622) (-23, 1.2523) (-19, 1.3798) (-15.5, 1.5644) (-12.5, 1.8253) (-10, 2.1825) (-7.75, 2.7229) (-6.75, 3.0868) (-5.75, 3.5831) (-5, 4.09) (-4.25, 4.7801) (-3.5, 5.7705) (-3, 6.7081) (-2.5, 8.0215) (-2, 9.988) (-1.64, 12.1364) (-1.33, 14.8956) (-1.06, 18.561) (-0.82, 23.7114) (-0.65, 29.4213) (-0.49, 37.7996) (-0.41, 43.8509) (-0.33, 51.8374) (-0.1, 89.4469) (-0.05, 97.0181) (0, 100.004) (0.05, 97.0181) (0.1, 89.4469) (0.33, 51.8374) (0.41, 43.8509) (0.49, 37.7996) (0.65, 29.4213) (0.82, 23.7114) (1.06, 18.561) (1.33, 14.8956) (1.64, 12.1364) (2, 9.988) (2.5, 8.0215) (3, 6.7081) (3.5, 5.7705) (4.25, 4.7801) (5, 4.09) (5.75, 3.5831) (6.75, 3.0868) (7.75, 2.7229) (10, 2.1825) (12.5, 1.8253) (15.5, 1.5644) (19, 1.3798) (23, 1.2523) (27.75, 1.1622) (33.25, 1.1018) (40, 1.0607)u0 = 1u0 = 0.3u0 = 0.1u0 = 0.01
The Paczyński curve: one shape, set by impact parameter. Point-source, point-lens magnification A(u) for a source passing the lens with t_E = 20 days at four impact parameters u0 (in Einstein radii). The peak magnification is roughly 1/u0 for small u0, so a source passing at a hundredth of an Einstein radius brightens a hundredfold, and the high-magnification peak is narrow, about u0 t_E wide. That narrow peak is when the source sweeps past the tiny central caustic of any planet around the lens. Source: Computed for this book from A(u) = (u^2+2)/(u sqrt(u^2+4)), u(t) = sqrt(u0^2 + (t/t_E)^2).

The two fluxes enter linearly. For fixed nonlinear parameters ϑ\boldsymbol\vartheta, with design matrix Xd=[A,1]X_d = [A, 1], data yd\mathbf y_d and inverse covariance WdW_d, the best fluxes are a weighted least-squares solution,

β^d=(XdTWdXd)−1XdTWd yd.\widehat{\boldsymbol\beta}_d = (X_d^T W_d X_d)^{-1} X_d^T W_d\, \mathbf y_d .

Every serious code profiles them out this way, removing two search dimensions per dataset. That matters more than it sounds: a modern event may have data from six or more site–filter combinations, so a naive search would carry a dozen extra parameters. With independent Gaussian errors the objective is the familiar χ2\chi^2. With correlated errors it is rTC−1r\mathbf r^T C^{-1}\mathbf r, plus log⁡det⁡C\log\det C in the likelihood. In practice, bulge photometry is not well described by its nominal errors. Blending, sky, seeing-dependent subtraction residuals and shared reference images make errors correlated and heavy-tailed. The usual fix is an empirical rescaling, σ′=kσ2+emin⁡2\sigma' = k\sqrt{\sigma^2 + e_{\min}^2} in magnitudes, which has to be converted consistently when fitting in flux (Zhang et al. 2021).

Two masses and their caustics

A planet makes the lens a binary. In complex coordinates zz (image plane) and ζ\zeta (source plane), normalised by the Einstein radius of the total mass, with lens components at zjz_j carrying mass fractions ϵj\epsilon_j, the lens equation and its Jacobian are

ζ=z−∑jϵjzˉ−zˉj,J=1−∣∑jϵj(zˉ−zˉj)2∣2.\zeta = z - \sum_j \frac{\epsilon_j}{\bar z - \bar z_j},\qquad J = 1 - \left|\sum_j \frac{\epsilon_j}{(\bar z - \bar z_j)^2}\right|^2 .

The point-source magnification is the sum over images, Apoint=∑1/∣J∣A_{\rm point} = \sum 1/|J|. For two masses, eliminating zˉ\bar z gives a complex polynomial of fifth degree in zz. Away from caustics only three or five of its roots are real images, and the others must be rejected by substituting them back into the lens equation (Bozza et al. 2018). This fifth-degree polynomial, solved millions of times, is the inner loop of the whole field.

Where J=0J = 0 the magnification of a point source is infinite. These points form closed critical curves in the image plane, and their images in the source plane are the caustics. When a point source crosses a fold caustic, a pair of images appears or disappears, and the magnification on the inside diverges as the inverse square root of the distance from the fold. A planet produces two kinds of caustic. A small central caustic sits near the host star, and is what a high-magnification event probes. One or two planetary caustics sit near the position s−1/ss - 1/s from the host along the star–planet axis. For a wide planet (s>1s > 1) there is a single four-cusped planetary caustic on the planet’s side. For a close planet (s<1s < 1) there are two small triangular caustics on the far side, with a region of demagnification between them. Near s=1s = 1 the caustics merge into a single resonant caustic.

close, s = 0.77 resonant, s = 1.0 wide, s = 1.3
Critical curves (thin grey) and caustics (accent) for a planet of mass ratio q = 0.003 at three separations, in units of the total-mass Einstein radius. The host is the dark dot, the planet the coloured dot, and the dashed circle the host's Einstein ring. Close (left): two triangular planetary caustics opposite the planet and a tiny central caustic. Resonant (centre): one six-cusped caustic. Wide (right): a diamond-shaped planetary caustic between host and planet, and a tiny central caustic. Computed for this book from the binary-lens critical-curve polynomial. A smaller q shrinks every caustic: the planetary ones roughly as the square root of q, the central one roughly in proportion to q.

The standard static model of a planetary event, with one source, has seven nonlinear parameters,

ϑ=(t0,u0,tE,s,q,α,ρ),q=MpM⋆,ρ=θ⋆θE,\boldsymbol\vartheta = (t_0, u_0, t_E, s, q, \alpha, \rho),\qquad q = \frac{M_p}{M_\star},\quad \rho = \frac{\theta_\star}{\theta_E},

where α\alpha is the angle of the source trajectory to the star–planet axis and ρ\rho the angular source radius in Einstein units. A convenient trajectory is ζ(t)=eiα[(t−t0)/tE+iu0]\zeta(t) = e^{i\alpha}[(t - t_0)/t_E + i u_0], with the coordinate origin chosen consistently with the code. Conventions differ between codes (origin at the primary, at the centre of mass, or at the “centre of magnification”, and Einstein radius of the total or of the primary mass), and copying parameters between codes without converting them is a common way to get a wrong curve.

Two scaling results guide intuition. For q≪1q \ll 1, away from the resonant regime, planetary caustics have a linear size proportional to q\sqrt q, while the central caustic’s width along the binary axis is approximately

wc≃4q(s−s−1)2w_c \simeq \frac{4q}{(s - s^{-1})^2}

(Chung et al. 2005). This is asymptotic and fails near s=1s = 1, where its divergence is not physical. For q=10−3q = 10^{-3} and s=1.3s = 1.3 it gives wc≈0.014w_c \approx 0.014. For an Earth-mass ratio, q=6×10−6q = 6 \times 10^{-6}, it gives 8.5×10−58.5 \times 10^{-5}. The anomaly duration is often estimated as tp∼q tEt_p \sim \sqrt{q}\,t_E, but central-caustic geometry, grazing trajectories and the source crossing time t⋆=ρtEt_\star = \rho t_E can control the observed duration instead. One cannot read qq off the duration of an anomaly (Wang et al. 2025).

234-15-10-5051015Days from peakMagnification A (-15, 1.522) (-13.5, 1.616) (-11.8, 1.748) (-10.3, 1.893) (-8.95, 2.052) (-7.8, 2.212) (-6.45, 2.432) (-5.15, 2.675) (-3.1, 3.087) (-2, 3.28) (-1, 3.401) (-0.5, 3.434) (0, 3.445) (0.5, 3.434) (1, 3.401) (2, 3.28) (3, 3.106) (5.15, 2.675) (6.45, 2.432) (7.8, 2.212) (9.09, 2.034) (10.3, 1.893) (11.8, 1.748) (13.5, 1.616) (15, 1.522) (-15, 1.523) (-11.85, 1.745) (-10.4, 1.884) (-9.1, 2.034) (-7.75, 2.221) (-6.45, 2.433) (-3, 3.103) (-2, 3.274) (-1, 3.392) (0, 3.432) (1, 3.384) (1.5, 3.33) (2.5, 3.175) (3.5, 2.981) (6.6, 2.324) (7.35, 2.148) (8.25, 1.907) (8.26, 2.452) (8.27, 2.605) (8.28, 2.803) (8.29, 3.148) (8.3, 3.313) (8.32, 3.48) (8.33, 3.533) (8.34, 3.748) (8.35, 3.771) (8.36, 3.942) (8.39, 4.147) (8.4, 4.243) (8.41, 4.477) (8.42, 4.319) (8.43, 4.042) (8.44, 3.86) (8.45, 3.744) (8.46, 3.658) (8.48, 3.533) (8.51, 3.41) (8.56, 3.287) (8.63, 3.197) (8.71, 3.155) (8.8, 3.161) (8.87, 3.207) (8.93, 3.291) (8.98, 3.424) (9.01, 3.561) (9.03, 3.705) (9.04, 3.809) (9.05, 3.957) (9.06, 4.256) (9.07, 4.379) (9.08, 4.745) (9.09, 4.294) (9.12, 3.935) (9.13, 3.732) (9.14, 3.776) (9.15, 3.539) (9.16, 3.558) (9.17, 3.448) (9.18, 3.273) (9.19, 3.01) (9.2, 2.893) (9.21, 3.023) (9.22, 2.422) (9.23, 1.993) (9.24, 1.806) (9.9, 1.818) (10.65, 1.794) (15, 1.517) (-15, 1.527) (-12.45, 1.714) (-10.5, 1.945) (-10.25, 1.911) (-9.8, 1.711) (-9.5, 1.649) (-9, 1.637) (-8.4, 1.685) (-8, 1.76) (-7.85, 1.812) (-7.7, 1.894) (-7.55, 2.037) (-7.3, 2.432) (-7.25, 2.494) (-7.2, 2.538) (-7.1, 2.579) (-6.5, 2.558) (-5.95, 2.603) (-5.05, 2.74) (-3, 3.127) (-2, 3.296) (-1, 3.413) (0, 3.454) (1, 3.407) (2, 3.283) (3, 3.107) (6.4, 2.44) (7.65, 2.234) (8.96, 2.05) (10.35, 1.887) (11.8, 1.748) (15, 1.522)Single lens (no planet)Wide planet, s = 1.3: caustic-crossing bumpClose planet, s = 0.77: minor-image dip
A planet is a short perturbation on a smooth stellar event. Point-lens magnification for an event with t_E = 20 days and impact parameter u0 = 0.3 (grey baseline), and the same event with a planet of mass ratio q = 0.001. In one case the source crosses the planetary caustic of a wide planet (s = 1.3) about 9 days after peak and the magnification spikes; in the other it passes between the two planetary caustics of a close planet (s = 0.77) about 8 days before peak, where the minor image is suppressed, and the star dims. The anomaly lasts a fraction of a day to a few days, against an event of about 40 days. Illustrative geometries, not observed events. Source: Computed for this book by solving the fifth-degree binary-lens polynomial (Witt-Mao form) for each epoch and averaging over a uniform source of radius rho = 0.004 near the caustics; trajectories chosen to cross the binary axis at x = s - 1/s.

The figure shows the two basic signatures. A trajectory through the planetary caustic of a wide planet produces a sharp bump, often double, as the source enters and leaves the caustic. A trajectory through the gap between the two triangular caustics of a close planet produces a dip, because the planet sits near the minor image and suppresses it. Dips were the signals visual searches missed most often. Any anomaly search must allow the extra signal to be negative.

Finite sources

A real source is a disk. The observed magnification is the point-source field averaged over it,

Afs(ζ)=∫∣r∣≤ρI(r) Apoint(ζ+r) d2r∫∣r∣≤ρI(r) d2r,A_{\rm fs}(\zeta) = \frac{\displaystyle\int_{|\mathbf r| \le \rho} I(\mathbf r)\,A_{\rm point}(\zeta + \mathbf r)\,d^2 r} {\displaystyle\int_{|\mathbf r| \le \rho} I(\mathbf r)\,d^2 r},

where II is the surface brightness, including limb darkening. The convolution regularises the caustic divergence. It also sets a physical floor on detectable planets. A Sun-like star at 8 kpc subtends about 0.58 μas, so for the lens of the worked example ρ≈8×10−4\rho \approx 8 \times 10^{-4}, comparable to the ρ=0.00096\rho = 0.00096 fitted for the first planet. A giant of ten solar radii subtends about 5.8 μas, larger than the 1.7-μas Einstein radius of an Earth-mass planet. Against such a source an Earth’s caustic is washed out, which is why OGLE-2005-BLG-390Lb, with its giant source, sat close to the floor. Small sources keep fine caustic structure but are faint, so photometric precision and finite-source smoothing pull in opposite directions (Beaulieu et al. 2006). If the light curve changes within an exposure, the model should also average over the shutter interval (Miyazaki & Kawahara 2025).

What is measured, and what is inferred

Key idea: microlensing measures ratios

A planetary light curve measures the mass ratio qq and the projected separation ss in Einstein units, directly. It does not measure the planet’s mass, distance or orbit. The timescale tEt_E mixes lens mass, distance and velocity. Two further measurements break the degeneracy. Finite-source effects give ρ\rho, and with an independent estimate of the source’s angular radius, θE=θ⋆/ρ\theta_E = \theta_\star/\rho. Annual or satellite parallax gives the microlens parallax πE=πrel/θE\pi_E = \pi_{\rm rel}/\theta_E. With both,

M=θEκ πE,DL=AUπEθE+πS,Mp=q1+q M.M = \frac{\theta_E}{\kappa\,\pi_E},\qquad D_L = \frac{\rm AU}{\pi_E\theta_E + \pi_S},\qquad M_p = \frac{q}{1+q}\,M .

Without them, a mass comes from a Galactic-model posterior, and should not be described as a measurement. The physical separation r⊥=sDLθEr_\perp = s D_L\theta_E is instantaneous and projected. It is not a semimajor axis, and there is no period.

Lens flux measured years later in high-resolution images, the separation of lens and source as they move apart, and astrometric microlensing can all add constraints (Zang et al. 2021; Penny et al. 2019). Astrometric lensing is treated in Chapter 34. For demographics, the honest coordinates are (s,q)(s, q), and most occurrence results from microlensing are stated in them.

Detection statistics

The basic test in an anomaly search is a matched filter applied to residuals. Let r\mathbf r be the residual vector after the single-lens fit, h\mathbf h a trial anomaly shape, and WW the inverse covariance, with the constant baseline projected out. The best signed amplitude is a^=(hTWr)/(hTWh)\hat a = (\mathbf h^T W\mathbf r)/(\mathbf h^T W\mathbf h), and the improvement in fit is

Δχtemplate2=(hTWr)2hTWh.\Delta\chi^2_{\rm template} = \frac{(\mathbf h^T W\mathbf r)^2}{\mathbf h^T W\mathbf h}.

This is the weighted reduction at the heart of the fast bump-and-dip searches, written here in analytic form; pipelines differ in normalisation. The sign of a^\hat a must be kept: a bump and a dip are different physical signals. The test that matters for a discovery compares optimised physical models,

Δχp2=min⁡χ1L1S2−min⁡χ2L1S2,\Delta\chi^2_p = \min\chi^2_{\rm 1L1S} - \min\chi^2_{\rm 2L1S},

the improvement of a binary-lens, single-source model over a single-lens, single-source model. Confirmation also requires comparison with a stellar binary lens and with a binary source: a faint second source star magnified by a single lens can mimic a short positive anomaly.

None of these numbers is a significance in the textbook sense. Under the null hypothesis of no planet, ss and α\alpha are not identified, the search maximises over many correlated templates, and pipelines often trim outliers adaptively. The tail probability of Δχ2\Delta\chi^2 is therefore not the χ2\chi^2 distribution, and nominal Δχ2\sqrt{\Delta\chi^2} is not a survey-wide false-alarm rate (see Chapter 1 on trials factors). The first planet paper already documented non-Gaussian outliers in its photometry (Bond et al. 2004). The field’s working answer is empirical: high thresholds, real-data null tests, inspection of the images, agreement between independent observatories, and injection and recovery.

Why the thresholds are so high

Forecasts for the Roman isolated-planet search required six consecutive points more than 3σ3\sigma above baseline. For independent Gaussian noise, six one-sided 3σ3\sigma excursions in a row have probability of order 10−1810^{-18}. With the assumed 4×1054 \times 10^5 measurements per light curve and 2×1082 \times 10^8 light curves, the expected number of accidental runs per survey is about 4×10−44 \times 10^{-4} (Johnson et al. 2020). That is an ideal calculation. The same paper identifies correlated points and detector effects as the reason to keep conservative cuts anyway. Real false positives come from systematics, not from Gaussian tails.

Methods

The pipeline has six stages, and a gain in any one is worth only what the stages around it can use.

Difference imaging Event finding Anomaly finding Global modelling Injection and recovery Occurrence rates 10⁸ stars, crowded fields ~10⁴ trial fits per star signed bumps and dips all modes, all alternatives same pipeline, fake planets in (s, q) coordinates cheap per star expensive per event, repeated per injection
The stages of a systematic microlensing planet search. Event and anomaly finding are cheap per light curve but run over enormous numbers of them. Modelling is expensive per event, and completeness repeats it for every injected planet.

From crowded images to searchable light curves

Everything starts with difference imaging: register each image to a sharp reference, match the point-spread function with a convolution kernel, subtract, and measure flux at catalogue positions in the difference image (Chapter 10). A search in the image domain also finds sources too faint to be in the reference catalogue. Quality metadata (seeing, background, saturation, detector position and subtraction diagnostics) must travel with every measurement, because they are what later rejects false anomalies (Udalski et al. 2015; Koshimoto et al. 2023).

The scale is large before any lens is modelled. OGLE-IV reported 100 to 200 GB of uncompressed images per night. From 2010 to 2014 its photometry ran on 48 CPU cores and finished 2 to 16 hours after the night. A 260-core server installed in 2015 brought reductions to within minutes of preprocessing (Udalski et al. 2015). MOA’s nine-year analysis used 2,489,362 CCD images, equal to 248,936 full-camera exposures over 3,146 days, from its 1.8-m telescope with a 2.18-deg² field. Six fields were observed every 15 minutes from 2008 to 2014. Its image-domain search kept difference-image peaks above S/N 2.7, then required repeated detections at a consistent position and further light-curve cuts. The 2.7 is a candidate threshold, not a detection threshold (Koshimoto et al. 2023).

The most instructive recent result is about photometry rather than models. Qiyue Qian and colleagues rebuilt KMTNet full-frame subtraction with improved pySIS-based processing and Gaia input positions, then searched 483,068 effective bright-star light curves. They found 36 microlensing events, including five new events and six known to other surveys but missed by earlier KMTNet searches. Registration and subtraction cost about 50,000 CPU-hours and light-curve extraction about 3,500 CPU-hours for the tested data. Their extrapolated cost for all eight seasons is 16.3 million CPU-hours, before review and modelling (Qian et al. 2025). That is a projection, not a completed search. Its lesson is that a signal never represented accurately in the light curve cannot be recovered by any downstream optimiser, however good.

Finding events: EventFinder

A direct search for Paczyński curves would grid (t0,tE,u0)(t_0, t_E, u_0): a three-dimensional template bank for each of hundreds of millions of stars. Dong-Jin Kim and colleagues reduced it to two shapes. With Q=1+[(t−t0)/teff]2Q = 1 + [(t - t_0)/t_{\rm eff}]^2,

H0(Q)=Q−1/2,H1(Q)=Q+2Q(Q+4),F=f1Hj+f0.H_0(Q) = Q^{-1/2},\qquad H_1(Q) = \frac{Q + 2}{\sqrt{Q(Q + 4)}},\qquad F = f_1 H_j + f_0 .

H0H_0 is the high-magnification limit of the Paczyński curve, with teff≃u0tEt_{\rm eff} \simeq u_0 t_E, and H1H_1 is the curve for u0=1u_0 = 1. The fitted f0,f1f_0, f_1 are search parameters, not physical fluxes. Collapsing u0u_0 to two shapes is the key approximation (Kim, D.-J. et al. 2018).

for each star:
    for t_eff in geometric grid (ratio 4/3):
        for t0 spaced by t_eff/3:
            window = epochs within t0 ± 5 t_eff   (need ≥ 50 points)
            for shape in {H0, H1}:
                weighted linear fit for (f0, f1)
                drop worst 10% of points; refit
                compare with piecewise-constant baseline
    keep best trial above an empirical threshold
group neighbouring stars with similar events; inspect representatives
confirm with other sites; classify

For the 2015 season, durations spanned about 0.56 to 99 days and fits used only data within t0±5tefft_0 \pm 5t_{\rm eff}. For a 250-day season with about 4,000 points per star, the paper estimates about 10,000 trial fits per star. That number is easy to check. With a ratio of 4/3, the duration range needs log⁡(99/0.56)/log⁡(4/3)≈18\log(99/0.56)/\log(4/3) \approx 18 steps. The number of centres at each duration is 250/(teff/3)250/(t_{\rm eff}/3), and summing the geometric series over durations gives about 5,300 centres, or about 10,700 fits for two shapes. The catalogue had 71,555,640 stars. The often quoted 101210^{12} measurements across 3×1083 \times 10^8 light curves a year is the paper’s scaling target, not the size of its commissioning sample (Kim, D.-J. et al. 2018).

The window is what makes this cheap. Let SS be the number of stars, NN the epochs per star, KK the number of durations and δ\delta the centre step in units of duration. Each epoch falls in O(Z/δ)O(Z/\delta) windows at each duration, where ZZ is the window half-width in units of duration (here 5). Direct fitting therefore costs O(SNKZ/δ)O(SNKZ/\delta), not O(SN⋅Ntemplates)O(SN \cdot N_{\rm templates}), and the duration grid adds only logarithmically to the dynamic range. This derivation assumes roughly uniform sampling. The score is Ndata(1−χlens2/χflat2)N_{\rm data}(1 - \chi^2_{\rm lens}/\chi^2_{\rm flat}) in positive-improvement form, and the operational thresholds of Δχ2>500\Delta\chi^2 > 500, later 1,000, refer to that definition, not to a likelihood-ratio tail. Friends-of-friends grouping stops a single bright variable, whose light leaks into neighbouring catalogue positions, from multiplying the review burden.

Alerts and follow-up

A search of completed light curves cannot request more photons once an anomaly has passed. KMTNet’s AlertFinder handles the real-time problem. It first requires enough new points high above baseline, then consecutive high points in combinations of observatories, and finally a broken-line fit,

F(t)=a+b max⁡(0, t−trise),b>0.F(t) = a + b\,\max(0,\, t - t_{\rm rise}),\qquad b > 0 .

The published settings use (Nhigh,Δχthresh2)=(5,250)(N_{\rm high}, \Delta\chi^2_{\rm thresh}) = (5, 250) or (10,400)(10, 400), with high points at least 3σ3\sigma above baseline. Using different site combinations prevents one poorly behaved site from vetoing a real rise. Operators inspect what passes (Kim, H.-W. et al. 2018).

For a fixed break time the fit is linear, so prefix sums of ww, wywy, wtwt, wt2wt^2 and wtywty allow every break to be scanned in linear time after sorting. That is an implementation detail. The scientific optimisation is scheduling: predicting which events will reach a short, highly sensitive peak, and allocating follow-up before it. Latency, weather and visibility matter as much as model throughput here.

Finding anomalies: AnomalyFinder

AnomalyFinder fits a point-source single-lens model, aligns the datasets, and scans the residuals with the EventFinder shapes. The crucial change is that the linear amplitude may be negative, so the same machinery finds dips. A caustic crossing may give two bumps or a U shape. The screening template only has to locate the anomaly, because the physical fit comes later (Zang et al. 2021).

The first study selected 1,216 events with catalogue I<19I < 19, removed problematic ones after preliminary fits, and searched the remaining 997. It used 13 duration levels from 0.30 to 9.47 days, centres spaced by teff/6t_{\rm eff}/6, and windows of ±3teff\pm 3t_{\rm eff}. A window needed at least five points and three consecutive residuals at least 2σ2\sigma from zero. Two statistics ranked the candidates,

Δχ02=χzero2−χsignal2,Δχflat2=χflat2−χsignal2,\Delta\chi^2_0 = \chi^2_{\rm zero} - \chi^2_{\rm signal},\qquad \Delta\chi^2_{\rm flat} = \chi^2_{\rm flat} - \chi^2_{\rm signal},

the improvement over zero residual and over a flat offset. The second separates a localised feature from a level shift. The initial thresholds were Δχ02>120\Delta\chi^2_0 > 120, or Δχ02>75\Delta\chi^2_0 > 75 together with Δχflat2>35\Delta\chi^2_{\rm flat} > 35. They produced 6,320 signals in 422 events, which review reduced to 24 potential planetary events and 59 other anomalous events (Zang et al. 2021). The 6,320 are overlapping template detections, not thousands of independent false positives.

The four-season sample used different settings: durations from 0.05 to 6.65 days and, in the prime fields, Δχ02>200\Delta\chi^2_0 > 200, or Δχ02>120\Delta\chi^2_0 > 120 with Δχflat2>60\Delta\chi^2_{\rm flat} > 60. Subprime fields used 100, or 60 and 30. The three-consecutive-2σ2\sigma requirement stayed (Zang et al. 2023). An occurrence analysis must use exactly the thresholds and reductions that defined the sample. Reproducing it with the preliminary settings would give a different selection function.

Independent data are decisive at the candidate stage. In the first study an apparent bump in one KMTNet event was absent from simultaneous OGLE data and was rejected. Another bump appeared at all three KMTNet sites, but image inspection traced it to a nearby variable star (Zang et al. 2021). Agreement between sites shows that the light varied, not that it was the intended source that varied.

Free-floating planets

A planet with no host, or one so distant that the host’s effect is negligible, gives a short event of its own. A search of residuals of long stellar events misses this channel. Its signature also differs from the Paczyński curve. When ρ\rho is large, the event’s duration is set by the time to cross the source, and the magnification is diluted. For a uniform source much larger than the Einstein radius, with the lens well inside the disk, A−1≃2/ρ2A - 1 \simeq 2/\rho^2. Lower lens mass can mean a smaller amplitude without a proportionally shorter event (Johnson et al. 2020).

Qian and colleagues therefore used a model-independent search for positive excess rather than a point-source template. Windows ran from 0.05 to 28 days. The statistic sums squared positive standardised residuals, with threshold 250+0.1max⁡(Nwindow−20,0)250 + 0.1\max(N_{\rm window} - 20, 0), and also requires the summed significance of the ten strongest positive points to exceed 32, plus consecutive high points. From 11,876 initial candidates, matching against variable stars and visual and image checks left the 36 events described above. Seven of the candidates that looked like microlensing were asteroids (Qian et al. 2025), the population that Chapter 12 exists to find and that here is contamination.

The population numbers have moved a long way. In 2011 the MOA-II analysis suggested about 1.8 unbound or wide-orbit Jupiter-mass planets per main-sequence star (Sumi et al. 2011). In 2017 OGLE searched 50 million light curves, injected 8.6 million artificial events into images to calibrate efficiency, found no excess of Jupiter-timescale events, and set a 95% upper limit of 0.25 such planets per star (Mróz et al. 2017). The earlier large population was not confirmed at that mass.

The shortest events point instead to small masses. OGLE-2016-BLG-1928 has tE=41.5t_E = 41.5 minutes and θE=0.842±0.064\theta_E = 0.842 \pm 0.064 μas. Its lens could be between a Mars and an Earth mass, depending on distance, and stellar companions are excluded only out to a projected 8 AU (Mróz et al. 2020). MOA’s nine-year survey kept 3,535 high-quality single-lens events from 6,111 candidates, six of them with tE<0.5t_E < 0.5 day, and calibrated efficiency with 64 million image-level injections that included finite-source effects. The shortest, MOA-9y-5919, has tE=0.057±0.016t_E = 0.057 \pm 0.016 day and θE=0.90±0.14\theta_E = 0.90 \pm 0.14 μas (Koshimoto et al. 2023). The accompanying mass-function analysis infers 21−13+2321^{+23}_{-13} free-floating or very wide-orbit planets per star between 0.33 and 6,660 Earth masses (Sumi et al. 2023). That is a model-dependent integral, dominated by extrapolation to low masses, not a count.

Finite sources make the efficiency of a free-floating-planet search at least two-dimensional, ϵ(tE,θE)\epsilon(t_E, \theta_E). A one-dimensional efficiency in tEt_E alone is an average over an assumed population,

ϵ~(tE;Γ)=∫ϵ(tE,θE) Γ(θE∣tE) dθE,\widetilde\epsilon(t_E; \Gamma) = \int \epsilon(t_E, \theta_E)\,\Gamma(\theta_E \mid t_E)\,d\theta_E ,

so an efficiency calibrated under one mass function cannot be carried into a fit of a different one. MOA showed explicitly that the difference is large at the shortest durations (Koshimoto et al. 2023).

Modelling: rays, contours and global searches

Once an anomaly is found, the model has to be fitted, and every likelihood evaluation needs the finite-source magnification at every epoch. There are two families of solver.

Inverse ray shooting samples the image plane, maps each ray through the lens equation (which is explicit in that direction), and counts how many land on the source. For RR rays and LL lens masses the mapping costs O(RL)O(RL). A static magnification map over PP pixels costs O(P)O(P) storage and can be reused for many trajectories. Convolving it with a source profile costs O(Plog⁡P)O(P\log P) by FFT, after which each trajectory costs O(N)O(N) interpolations. These costs exclude map construction, padding, resolution convergence and interpolation error. Maps suit global (s,q)(s, q) searches, but orbital motion of the lens changes the map, tiny caustics demand high resolution, and a uniform map wastes work far from where the images are. Image-centred ray shooting shoots rays only around the images of the source, which suits moving lenses, limb darkening and more than two masses (Miyazaki & Kawahara 2025).

Contour integration uses the fact that lensing conserves surface brightness. For a uniform source the magnification is the total image area divided by the source area, and Green’s theorem turns area into a boundary integral,

Afs=1πρ2∑kpk2∮∂Ik(x dy−y dx),A_{\rm fs} = \frac{1}{\pi\rho^2}\sum_k \frac{p_k}{2}\oint_{\partial I_k}(x\,dy - y\,dx),

where pkp_k is the parity of image kk and orientations must be consistent. The algorithm samples points on the source limb, solves the fifth-degree polynomial at each, connects corresponding roots into image boundaries, and integrates. Valerio Bozza’s method adds a parabolic correction and a local error estimate that place extra samples where they are needed, special rules for image creation and destruction, and handling of a cusp hidden between two limb samples. Limb darkening is integrated over concentric annuli (Bozza 2010). For BB limb samples and II root-solver iterations the cost per epoch is about O(BI)O(BI), times the number of annuli. Near caustics BB varies wildly. Most epochs are far from caustics, and cheap tests decide when the point-source value suffices. VBBinaryLensing added quadrupole, ghost-image and planetary-caustic tests for exactly this switch (Bozza et al. 2018). Root solving itself is delicate: polynomial roots can be catastrophically inaccurate at small qq, and the field has specialised solvers for it (Skowron & Gould 2012).

Global search is where the compute goes. The standard strategy grids (log⁡s,log⁡q,α)(\log s, \log q, \alpha), optimises (t0,u0,tE,ρ)(t_0, u_0, t_E, \rho) and the linear fluxes at each grid point, collects every local minimum, then releases the grid parameters and refines. With GG geometric cells, AA angle seeds, KK optimiser evaluations, NN epochs and magnification cost CAC_A per epoch, the cost is O(GAKNCA)O(GAKNC_A). A better sampler does not help if it starts in only one basin. The search must cover stellar-binary qq as well as planetary qq, and must fit a binary-source model explicitly (Shang et al. 2026).

Yuxin Shang and colleagues supplied a concrete workload. For simulated KMTNet-like events they searched 533 geometric grid points and eight angle seeds, with 8,640 epochs per light curve. Over 198,720 generated light curves, of which 58,081 had a detectable anomaly, they found 2,705,397 local minima and refined them. Precomputed maps cut the grid-search cost from about 400 to about 4 CPU-hours per light curve. The total reported cost was 3.34×1053.34 \times 10^5 CPU-hours (Shang et al. 2026).

Anomaly identification (all curves)276 CPU-hGlobal binary-lens grid search259,000 CPU-hFinal optimisation of minima75,100 CPU-hGrid search, one curve, direct400 CPU-hGrid search, one curve, with maps≈4 CPU-hCPU-hours (log scale)
Where the compute goes when degeneracies are taken seriously. Reported CPU cost of one degeneracy-aware sensitivity experiment: 198,720 simulated light curves, of which 58,081 showed a detectable anomaly, refit globally (533 grid points in s and q, eight trajectory-angle seeds, 2,705,397 local minima refined). Finding the anomalies is almost free. The global search over lens models is nearly all the cost. The lower two bars are per-light-curve grid-search costs, computed directly and with precomputed magnification maps. Source: Shang et al. 2026 (arXiv:2509.16191v3) Table 3 and Sections 2.4-2.7.

GPUs, gradients and neural posteriors

Three lines of work since 2021 attack the solver cost directly.

Twinkle, by Suwei Wang, Lile Wang and Subo Dong, ports contour integration to GPUs (CUDA for NVIDIA, HIP for AMD). It reformulates the polynomial coefficients to avoid catastrophic cancellation, makes ghost-image rejection more robust, and schedules work so that expensive unfinished cases are compacted and redispatched rather than stalling completed ones. On an RTX 4090 against one core of an AMD EPYC 7H12, it reports about a hundredfold speedup in its tests, and recommends batches of more than about 200 source positions to fill the device (Wang et al. 2025). That is GPU against one CPU core, not a hundredfold algorithmic gain on matched hardware, and not a speedup of complete inference.

microlux, by Haibin Ren and Wei Zhu, implements adaptive contour integration in JAX, with an error criterion for the convergence of gradients as well as of magnification. Its magnification is about 1.5 to 5 times slower than VBBinaryLensing, but gradients make Hamiltonian Monte Carlo possible. For KMT-2019-BLG-0371 the No-U-Turn sampler needed about 33 likelihood calls per effective sample against 158 for an ensemble sampler, a roughly fivefold wall-time advantage. The tests ran on an M2 MacBook Pro, and the gain is local: it assumes the mode is already known (Ren & Zhu 2025).

microJAX, by Shota Miyazaki and Hajime Kawahara, implements differentiable image-centred ray shooting for binary and triple lenses. On a 40-GB A100 against single-threaded VBBinaryLensing on an EPYC 7452, it is 5 to 6 times faster for small limb-darkened sources but 4 to 5 times slower for large uniform sources. Memory scales as O(NrNθNbatch)O(N_r N_\theta N_{\rm batch}), for radial and angular grid sizes and batch size, so epochs must be batched. An example injection-and-recovery run with 500 warm-up steps and 5,000 retained samples took about 19 hours (Miyazaki & Kawahara 2025). Fast forward evaluation and cheap complete inference are different things.

Automatic differentiation through a root solver also needs care. For a simple root, implicit differentiation gives dz/dλ=−(∂p/∂λ)/(∂p/∂z)dz/d\lambda = -(\partial p/\partial\lambda)/(\partial p/\partial z), which is ill-conditioned where roots merge, at exactly the caustics where the information is. microJAX uses custom derivatives, including smooth sigmoid approximations to step functions, so its gradients are derivatives of a numerical model and should be validated as such.

Neural posterior estimation takes a different route. Keming Zhang, Joshua Bloom, Scott Gaudi and colleagues trained a ResNet–GRU encoder and a 20-block masked autoregressive flow on simulated Roman binary-lens light curves. From one million simulations they kept 291,012 distinguishable binaries, split 276,461 for training and 14,551 for testing. Training took about 25 hours on four 2080 Ti GPUs, and sampling runs at about 10510^5 draws per second on one GPU (Zhang et al. 2021). These are draws from a learned approximation, not exact-likelihood samples. The principled use is as a proposal: suggest the plausible modes quickly, then evaluate the true likelihood and refine each one. The simulation prior, the cadence, the noise model and the higher-order effects included in training define where the network can be trusted. It cannot certify that a mode it never learned is absent.

Completeness, occurrence and Roman

To turn detections into rates, inject planets into each observed event over (s,q,α)(s, q, \alpha) and ρ\rho, using that event’s actual sampling and noise, run the same detection and classification pipeline, and record whether the planet is recovered and uniquely interpreted. The sensitivity of event jj and of the survey are

ϵj(s,q)=12π∫dα  P(detected and retained∣s,q,α,j),S(s,q)=∑jϵj(s,q).\epsilon_j(s, q) = \frac{1}{2\pi}\int d\alpha\; P(\text{detected and retained} \mid s, q, \alpha, j),\qquad S(s, q) = \sum_j \epsilon_j(s, q).

For an occurrence density f(s,q)f(s, q), a schematic population likelihood is

L∝  exp⁡ ⁣[−∫fS dlog⁡s dlog⁡q]×∏k∫f(s,q) ϵjk(s,q) Lk(s,q) dlog⁡s dlog⁡q,\begin{aligned} \mathcal L \propto\; & \exp\!\left[-\int f S\, d\log s\, d\log q\right] \\ & \times \prod_k \int f(s,q)\,\epsilon_{j_k}(s,q)\,\mathcal L_k(s,q)\,d\log s\,d\log q , \end{aligned}

where Lk\mathcal L_k is the likelihood of planet kk‘s parameters conditional on its having been retained; using an unconditional likelihood instead would count selection twice. Real analyses also have to handle normalisation and multi-planet events (Zang et al. 2025). The general machinery of selection functions is the subject of Chapter 16 and Chapter 35.

The KMTNet occurrence analysis used 63 planets in 60 events, down to q=6.79×10−6q = 6.79 \times 10^{-6} for OGLE-2016-BLG-0007. It infers 0.65−0.15+0.350.65^{+0.35}_{-0.15} planets per star per dex in ss over −5.2<log⁡q<−1.5-5.2 < \log q < -1.5, of which 0.35−0.14+0.340.35^{+0.34}_{-0.14} fall in the super-Earth interval −5.2<log⁡q<−4.5-5.2 < \log q < -4.5. A double-Gaussian mass-ratio distribution improved the population likelihood by −2Δln⁡L=22.6-2\Delta\ln\mathcal L = 22.6, with a null-model probability of 1.60×10−41.60 \times 10^{-4} (Zang et al. 2025). That probability tests the shape of the population model, not the reality of any planet. The headline, that super-Earths are common in Jupiter-like orbits, is the kind of result only microlensing can currently provide.

Degeneracy enters the sensitivity directly. In Shang and colleagues’ study, a simulated planet counted as detected only if no competitive stellar-binary solution existed and competing planetary solutions did not have very different qq. Of 58,081 anomalous simulations, 1,052 failed. After weighting by sensitivity, degeneracies reduce overall planet sensitivity by about 5 to 10%. The raw ratio and the weighted effect are different numbers. The authors project that a full realistic-sample calculation would need O(108)O(10^8) CPU-hours, and suggest O(105)O(10^5) GPU-hours as a hardware-based projection, not a benchmark (Shang et al. 2026).

The Nancy Grace Roman Space Telescope will run a Galactic Bulge Time-Domain Survey designed for this science. Pre-launch forecasts and the adopted design must be kept apart. Matthew Penny and colleagues’ forecast assumed six 72-day seasons, about 1.97 deg² and a 15-minute cadence, and predicted 1,428 bound planets between 0.1 and 104 M⊕10^4\,M_\oplus with a detection criterion of Δχ2>160\Delta\chi^2 > 160 (Penny et al. 2019). Samson Johnson and colleagues’ isolated-planet forecast used Δχ2≥300\Delta\chi^2 \ge 300 plus six consecutive 3σ3\sigma points and predicted 249 free-floating planets under its fiducial mass function (Johnson et al. 2020). Under the 2023 MOA mass function the isolated-planet prediction becomes 988−566+1848988^{+1848}_{-566}, including 575−424+1733575^{+1733}_{-424} between 0.1 and 1 Earth mass (Sumi et al. 2023). That jump reflects uncertainty in the population, not a change in Roman’s hardware.

0.111010010001041050.010.11101001000104Planet mass (Earth masses)Expected detections (0.1, 20.5) (1, 180) (10, 545) (100, 412) (1000, 224) (10000, 90.7) (0.01, 0.698) (0.1, 10.3) (1, 50.5) (10, 103) (100, 68.9) (1000, 42) (10000, 25.4) (0.01, 1.22) (0.1, 17.9) (1, 88.3) (10, 349) (100, 1250) (1000, 4100) (10000, 13300)Bound planets (Penny et al.)Isolated planets, fiducial (Johnson et al.)Isolated, if one per star at that mass
What Roman was forecast to find, by planet mass. Published pre-launch forecasts for the Roman Galactic Bulge survey. Bound planets (Penny et al. 2019, Cycle-7 design, fiducial occurrence law) and isolated planets (Johnson et al. 2020, fiducial mass function, per 0.5-dex bin) use different bin conventions, so compare shapes rather than heights. The third curve is the number Roman would detect if every star had one isolated planet of that mass: a sensitivity curve, not a prediction. Integrated totals are 1,428 bound and 249 isolated planets. These forecasts use older survey assumptions and were not recomputed for the design adopted in August 2026. Source: Penny et al. 2019 (arXiv:1808.02490) Table 4; Johnson et al. 2020 (arXiv:2006.10760) Table 2.

The implementation documentation updated on 24 August 2026 specifies six fields totalling 1.7 deg², a 12.1-minute cycle through them, six high-cadence seasons and four low-cadence seasons with visits about five days apart. High-cadence monitoring is generally 70.5 days per season, with an exception for the first (STScI 2026). The pre-launch strategy lists 66.9-s exposures (RGES-PIT 2026a). These differ from the forecasts’ assumptions, and the old totals have not been recomputed for this design. Roman’s planned efficiency pipeline injects planets into images or light curves, propagates them through photometry and modelling, and publishes the injected and recovered catalogues (STScI 2025). The Roman Microlensing Data Challenge 2026 supplies simulated light curves for classification and fitting, requires documented code and CPU-hours, and scores computational efficiency. Its experienced-tier deadline was 2 October 2026, with evaluation in October and final reports due in November, so no results were available when this chapter was written (RGES-PIT 2026b).

Landmark results

YearWorkWhat it showedKey number
1991Mao & PaczyńskiPlanets detectable by bulge microlensingPredicted anomalies of 2.5–10 h
1998Griest & SafizadehHigh-magnification events concentrate sensitivityStrategy, not a count
2004Bond et al. (OGLE, MOA)First secure microlensing planetq=0.0039q = 0.0039; single lens worse by Δχ2=651\Delta\chi^2 = 651
2006Beaulieu et al.Cold planet of a few Earth massesq=7.6×10−5q = 7.6 \times 10^{-5}; 5.5−2.7+5.5 M⊕5.5^{+5.5}_{-2.7}\,M_\oplus
2010BozzaError-controlled contour integrationBasis of VBBinaryLensing
2011Sumi et al. (MOA-II)Suggested many Jupiter-mass free floaters~1.8 per star (not confirmed)
2017Mróz et al. (OGLE-IV)Strong limit on Jupiter-mass free floaters< 0.25 per star (95%), 50 M light curves
2018Kim et al. (EventFinder)Systematic search of completed events660 clear + 182 possible (2015)
2020Mróz et al.Terrestrial-mass free-floating candidatetE=41.5t_E = 41.5 min, θE=0.84\theta_E = 0.84 μas
2021Zang et al. (AnomalyFinder I)Automated recovery of a buried planet997 events searched
2021Zhang et al.Amortised neural posterior for binary lenses~10510^5 draws/s on one GPU
2023Koshimoto, Sumi et al. (MOA 9 yr)Finite-source-aware free-floater mass function64 M injections; 21−13+2321^{+23}_{-13} per star
2025Gui et al. (AnomalyFinder XII)Complete 2016–2019 systematic sample112 unambiguous planets
2025Zang et al.Cold mass-ratio function63 planets; lowest q=6.8×10−6q = 6.8 \times 10^{-6}
2025Wang et al. (Twinkle)GPU contour solver~100× vs one CPU core
2026Shin et al. (AnomalyFinder XIII)2021 prime fields7 hidden systems, 3 candidates
2026Shang et al.Degeneracy-aware sensitivity5–10% loss; 3.3×1053.3 \times 10^5 CPU-h

Software

PackageWhat it doesNotes
VBMicrolensingC++/Python contour integration for single, binary and multiple lenses, astrometry, parallax, orbital motionCurrent reference CPU code (Bozza et al. 2025)
VBBinaryLensingBinary-lens contour solverLegacy, no longer maintained; use for pinned baselines
MulensModelPython modelling framework, linear flux fittingNo dedicated GPU solver (Poleski & Yee 2019)
pyLIMAPython modelling, simulation and fittingCPU multiprocessing
TwinkleGPU contour integration (CUDA, HIP)CPU companion separates algorithm from hardware
microluxJAX contour integration with gradientsBenchmarks on a Mac CPU
microJAXJAX image-centred ray shooting, binary and triple lensesA100 benchmarks
causticsJAX contour integration, triple lensesDevelopment package
GULLSSpace-survey simulator behind the Roman forecastsRepository not fully operational

A reproduction should pin the lens engine and wrapper versions; state whether Einstein units refer to total or host mass, the source profile, the time standard and the observatory ephemerides; fit fluxes analytically; record every mode seed and acceptance cut; keep image-quality masks; and publish both injected and recovered catalogues. For JAX and GPU codes, report cold-start compilation and warm throughput separately. A numerical tolerance on magnification is not the same thing as a fractional photometric error. Online photometry from survey event pages is optimised for rapid triage and is usually not the reduction used to claim a planet (Poleski & Yee 2019).

Limitations and open problems

Missing data cannot be recomputed. A short perturbation may fall between exposures, in daylight, behind clouds, or outside a space mission’s season. More computation can recover a marginally sampled signal. It cannot reconstruct an unobserved one without adding prior assumptions. The finite source sets a further physical limit, a source-dependent loss of contrast.

Degeneracy is more than close versus wide. Central caustics often give similar light curves at ss and 1/s1/s with similar qq, which is harmless for demographics. But inner versus outer trajectories, close versus wide planetary-caustic events, central versus resonant solutions, and accidental degeneracies created by gaps in the data can give different qq or ρ\rho. A planetary model can resemble a stellar binary, and a binary source can mimic a planet. Colour information helps against binary sources, but sparse colour sampling and similar source colours can defeat it (Shang et al. 2026).

Higher-order effects interact. Annual parallax, lens orbital motion and source orbital motion (xallarap) distort the trajectory in partly similar ways. Satellite parallax has discrete sign alternatives. These are problems of identifiability, not of optimisation, and only new information breaks them: observatories with useful separation, late-time imaging that resolves lens and source, or astrometry.

An isolated lens is not necessarily unbound. The absence of a detectable host excludes a range of separations, orientations and host masses, not every host. A short tEt_E also admits unusually fast or nearby lenses. Measuring θE\theta_E is strong evidence for low mass but leaves the distance uncertain, and the large free-floating population integrals rest on extrapolation and Galactic priors (Mróz et al. 2020; Sumi et al. 2023).

Systematics dominate the tails. Nearby variables, reference-image artefacts, seeing correlations, saturation and moving objects can all mimic bumps and dips. The KMTNet full-frame result showed that improved subtraction and better source positions can matter more than a new classifier, and a catalogue-only search misses sources absent from the reference list (Qian et al. 2025). Only injection into images tests the whole chain.

Numerical and statistical convergence are different. Roots can be inaccurate at small qq. Root continuation can connect images wrongly across a caustic. Magnification convergence does not ensure gradient convergence. And a perfectly evaluated likelihood, sampled by a long, well-mixed chain in one minimum, can still miss another minimum that matters. Global mode recovery, effective sample size within a mode, and relative weights of modes each need their own validation (Skowron & Gould 2012; Ren & Zhu 2025).

The field’s own statement of its unsolved problem is complete, scalable sensitivity calculations that include degenerate models and realistic gaps and systematics. Shang and colleagues state that their corrections from representative events are not sufficient for direct application to every real event, and that their grid still misses closely spaced resonant minima (Shang et al. 2026). Put more sharply: no method today gives a calibrated upper bound on the probability of having missed a viable alternative interpretation. That probability matters for single discoveries and for occurrence rates alike.

Where the room is

It helps to sort the limits first. Alignment probability, photon statistics, finite-source averaging, missing time coverage and genuine degeneracy in the observables are physical: no algorithm removes them. Inaccurate photometry, slow or incomplete search, late alerts, numerical failures and impractically expensive completeness experiments are engineering. A good new method attacks the second list without disguising the first as smaller error bars. The broader argument for where order-of-magnitude gains are plausible is in Chapter 42. For microlensing the opportunities are specific.

Reuse geometry before buying more FLOPs

The largest demonstrated algorithmic saving in this chapter is not a GPU result. It is the drop from about 400 to about 4 CPU-hours per light curve when Shang and colleagues reused precomputed magnification maps, a factor of about 100 on the same hardware. A static lens geometry (s,q)(s, q) can be reused across angle seeds, timing shifts, source tracks and many completeness injections. A GPU map service would group work by (s,q,ρ)(s, q, \rho), keep maps resident, batch trajectory interpolations and fuse the flux profiling into the same reduction. The figure of merit is likelihoods per second at controlled error, including map construction. Parallax changes the trajectory through a static map and keeps reuse possible. Lens orbital motion changes the map itself and needs extra dimensions, local approximations or direct evaluation. That distinction should drive the cache design.

Make the hierarchy preserve rare modes. A sensible cascade is image-quality filtering, then a signed anomaly scan, a geometric proposal bank, a map-based coarse likelihood, an accurate solver, multi-mode refinement, and finally physical interpretation. Neural posterior proposals can replace much of a blind grid, but an independent coarse bank or explicit exploratory proposals should be kept to catch what the network omits. Caustic morphology suggests separate parameterisations for central, planetary and resonant events, because one uniform logarithmic grid is inefficient in all three. Early rejection is possible: partial sums of nonnegative squared residuals bound the final χ2\chi^2 when the model and fluxes are fixed. But when fluxes are refitted as data are added, the running residual is not automatically a lower bound on the final profiled score, and a safe implementation needs bounds that account for that. A rigorous branch-and-bound search near caustic topology changes would be new. It is a research proposal, in the spirit of the safe pruning discussed in Chapter 38.

Batch irregular work explicitly. Twinkle already compacts unfinished tasks. The idea extends naturally: separate point-source epochs, mild finite-source corrections and difficult caustic crossings into queues bucketed by estimated contour complexity, and batch many parameter vectors and many events together rather than the epochs of one light curve, since a single event rarely has enough work to fill a GPU. Reuse polynomial coefficients, nearby root seeds and ephemerides where accuracy tests allow (Chapter 40). Mixed precision suits map interpolation and regular reductions, but small-qq coefficients and nearly coincident roots are numerically sensitive, and a final FP64 solve or independently verified residual may be needed. Tensor cores fit neural encoders and large dense contractions. An adaptive complex root solver is not a tensor-core problem. An order of magnitude over a scalar CPU baseline is already observed. Another order of magnitude over a tuned GPU code, at matched error and with complete mode recovery, is unproven.

Optimise the population experiment, not the single fit. Completeness is the larger repeated workload: one observed event may need many injected planets, each with its own search over alternative models. Importance sampling toward the boundaries where efficiency changes, stratification by magnification, source size and cadence, and sharing of calculations between injections with the same geometry could all reduce the cost. The target is the uncertainty of the final occurrence distribution per unit compute, with unbiased weights. An injection scheme that skips rare ambiguous configurations gives precise-looking but biased answers. For free-floating planets, keep the two-dimensional ϵ(tE,θE)\epsilon(t_E, \theta_E) table and integrate it jointly with the population model, rather than regenerating one-dimensional corrections. For bound planets, the measured 5 to 10% degeneracy effect is a scale for the scientific error: compute savings are worth most if they make realistic, degeneracy-aware calibration affordable for every event, instead of a universal correction from idealised ones.

Transforms help only where the sampling allows. At fixed duration, an anomaly-search numerator is a correlation of residuals with a translated template, and on a regular time grid FFTs or multiresolution filter banks could share work across centres (Chapter 39). The denominator needs its own correlation with weights and masks. Irregular times, weather gaps, clipping and per-site calibration erode the advantage, and naive interpolation can invent correlations or dilute a short dip. The window-limited direct scan is already efficient, so a transform bank must beat it end to end. And there is no folding shortcut of the kind a transit search uses (Chapter 30): a microlensing event happens once.

Build an equal-sensitivity benchmark. Claims of speed are cheap when sensitivity is not held fixed. A credible comparison uses the same raw images or frozen light curves, the same timestamps, masks, source population, injected lens parameters and non-planetary contaminants. It compares against both a pinned historical code and a strong current one. It measures weak-anomaly completeness at a fixed candidate-review budget or false-positive rate, recovery of alternative modes, bias and coverage in qq, ρ\rho and πE\pi_E, and end-to-end wall time, energy, peak memory, compilation and training cost. It includes short free-floating events, negative dips, incomplete caustic crossings, stellar-binary alternatives and lens orbital motion. The Roman data challenge is a starting point for the inference half. Image-level selection needs tests of its own.

The summary is that microlensing’s hardest computational problem is not making one likelihood fast. It is proving, at survey scale and for every injected planet, that nothing else fits. A method that delivers that proof cheaply would change both the discovery papers and the occurrence rates that rest on them.

References

  1. Mao, S. & Paczyński, B. (1991). Gravitational microlensing by double stars and planetary systems. ApJ Letters 374, L37. doi:10.1086/186066
  2. Gould, A. & Loeb, A. (1992). Discovering planetary systems through gravitational microlenses. ApJ 396, 104. doi:10.1086/171700
  3. Griest, K. & Safizadeh, N. (1998). The use of high-magnification microlensing events in discovering extrasolar planets. ApJ 500, 37. arXiv:astro-ph/9710342
  4. Bond, I. A., Udalski, A. et al. (2004). OGLE 2003-BLG-235/MOA 2003-BLG-53: a planetary microlensing event. ApJ Letters. arXiv:astro-ph/0404309
  5. Chung, S.-J., Han, C., Park, B.-G. et al. (2005). Properties of central caustics in planetary microlensing. ApJ. arXiv:astro-ph/0505363
  6. Beaulieu, J.-P., Bennett, D. P. et al. (2006). Discovery of a cool planet of 5.5 Earth masses through gravitational microlensing. Nature. arXiv:astro-ph/0601563
  7. Bozza, V. (2010). Microlensing with an advanced contour integration algorithm: Green's theorem to third order, error control, optimal sampling and limb darkening. MNRAS 408, 2188. arXiv:1004.2796
  8. Sumi, T. et al. (2011). Unbound or distant planetary mass population detected by gravitational microlensing. Nature. arXiv:1105.3544
  9. Skowron, J. & Gould, A. (2012). General complex polynomial root solver and its further optimization for binary microlenses. arXiv preprint. arXiv:1203.1034
  10. Udalski, A., Szymański, M. K. & Szymański, G. (2015). OGLE-IV: fourth phase of the Optical Gravitational Lensing Experiment. Acta Astronomica 65, 1. arXiv:1504.05966
  11. Mróz, P. et al. (2017). No large population of unbound or wide-orbit Jupiter-mass planets. Nature. arXiv:1707.07634
  12. Kim, D.-J., Kim, H.-W., Hwang, K.-H. et al. (2018). Korea Microlensing Telescope Network microlensing events from 2015: event-finding algorithm, vetting, and photometry. AJ 155, 76. arXiv:1703.06883
  13. Kim, H.-W., Hwang, K.-H. et al. (2018). The Korea Microlensing Telescope Network (KMTNet) alert algorithm and alert system. arXiv preprint. arXiv:1806.07545
  14. Bozza, V., Bachelet, E., Bartolić, F. et al. (2018). VBBinaryLensing: a public package for microlensing light-curve computation. MNRAS 479, 5157. arXiv:1805.05653
  15. Poleski, R. & Yee, J. C. (2019). Modeling microlensing events with MulensModel. Astronomy and Computing 26, 35. arXiv:1803.01003
  16. Penny, M. T. et al. (2019). Predictions of the WFIRST microlensing survey. I. Bound planet detection rates. ApJS 241, 3. arXiv:1808.02490
  17. Johnson, S. A., Penny, M., Gaudi, B. S. et al. (2020). Predictions of the Nancy Grace Roman Space Telescope Galactic Exoplanet Survey. II. Free-floating planet detection rates. AJ. arXiv:2006.10760
  18. Mróz, P. et al. (2020). A terrestrial-mass rogue planet candidate detected in the shortest-timescale microlensing event. ApJ Letters. arXiv:2009.12377
  19. Zang, W. et al. (2021). Systematic KMTNet planetary anomaly search. I. OGLE-2019-BLG-1053Lb, a buried terrestrial planet. AJ 162, 163. arXiv:2103.11880
  20. Zhang, K., Bloom, J. S., Gaudi, B. S., Lanusse, F., Lam, C. & Lu, J. R. (2021). Real-time likelihood-free inference of Roman binary microlensing events with amortized neural posterior estimation. AJ 161, 262. arXiv:2102.05673
  21. Hwang, K.-H. et al. (2022). Systematic KMTNet planetary anomaly search, Paper II: six new q < 2 × 10⁻⁴ mass-ratio planets. AJ 163, 43. arXiv:2106.06686
  22. Zang, W. et al. (2023). Systematic KMTNet planetary anomaly search, Paper VII: complete sample of q < 10⁻⁴ planets from the first four-year survey. AJ. arXiv:2210.12344
  23. Koshimoto, N., Sumi, T., Bennett, D. P. et al. (2023). Terrestrial- and Neptune-mass free-floating planet candidates from the MOA-II 9 yr Galactic Bulge survey. AJ. arXiv:2303.08279
  24. Sumi, T., Koshimoto, N. et al. (2023). Free-floating planet mass function from MOA-II 9 yr survey toward the Galactic Bulge. AJ. arXiv:2303.08280
  25. Bozza, V., Saggese, V., Covone, G., Rota, P. & Zhang, J. (2025). VBMicrolensing: three algorithms for multiple lensing with contour integration. A&A 694, A219. arXiv:2410.13660
  26. Wang, S., Wang, L. & Dong, S. (2025). Twinkle: a GPU-based binary-lens microlensing code with the contour integration method. ApJS 276, 40. arXiv:2501.03322
  27. Ren, H. & Zhu, W. (2025). A differentiable binary microlensing model using adaptive contour integration method. AJ. arXiv:2501.07268
  28. Qian, Q., Yang, H. et al. (2025). Systematic search for FFPs in KMTNet full-frame images. I. Photometry pipeline. PASP 137, 064401. arXiv:2503.24097
  29. Gui, Y., Zang, W. et al. (2025). Systematic KMTNet planetary anomaly search. XII. Complete sample of 2017 subprime field planets. arXiv preprint. arXiv:2504.20155
  30. Zang, W., Jung, Y. K., Yee, J. C. et al. (2025). Microlensing events indicate that super-Earth exoplanets are common in Jupiter-like orbits. Science 388, 400. arXiv:2504.20158
  31. Miyazaki, S. & Kawahara, H. (2025). microJAX: a differentiable framework for microlensing modeling with GPU-accelerated image-centered ray shooting. ApJ 994, 144. arXiv:2510.02639
  32. Shang, Y., Yang, H., Zhang, J., Mao, S., Gould, A., Zang, W., Qian, Q. & Yee, J. C. (2026). Binary-lens microlensing degeneracy: impact on planetary sensitivity and mass-ratio function. arXiv preprint, v3. arXiv:2509.16191
  33. Shin, I.-G., Yee, J. C., Zang, W. et al. (2026). Systematic KMTNet planetary anomaly search. XIII. Complete sample of 2021 prime field planets. arXiv preprint. arXiv:2605.17053
  34. STScI (2025). MSOS detection efficiency pipeline. Roman User Documentation. roman-docs.stsci.edu
  35. STScI (2026). Galactic Bulge Time-Domain Survey (updated 24 August 2026). Roman User Documentation. roman-docs.stsci.edu
  36. RGES-PIT (2026a). RGES design. Roman Galactic Exoplanet Survey Project Infrastructure Team. rges-pit.org/design
  37. RGES-PIT (2026b). Roman Microlensing Data Challenge 2026. Roman Galactic Exoplanet Survey Project Infrastructure Team. rges-pit.org/data-challenge