Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Halo + core recovery (B3)

San Diego State University

A real cluster is not one population. This demo builds a two-family cluster — a spatially extended, kinematically anisotropic halo plus a compact, isotropic core — in one shared self-consistent potential, and asks whether three structural parameters can be recovered jointly from its kinematics:

The truth model (the science-headline mix of the Engine B validation suite):

Plummer(rh=2pc)halo, 60%, mj=0.5M, ra=3pc + EFF(a=0.8pc,γ=5,rt=9pc)core, 40%, mj=1.0M, isotropic\underbrace{\text{Plummer}(r_h=2\,\text{pc})}_{\text{halo, } 60\%,\ m_j=0.5\,\Msun,\ r_a=3\,\text{pc}} \ +\ \underbrace{\text{EFF}(a=0.8\,\text{pc},\,\gamma=5,\,r_t=9\,\text{pc})}_{\text{core, } 40\%,\ m_j=1.0\,\Msun,\ \text{isotropic}}

sampled with N=3×104N = 3\times10^4 stars. The EFF core shape (a,γ,rt)(a,\gamma,r_t), the stellar-mass labels mjm_j, and the core’s isotropy are held fixed; only (t,ra,rh)(t, r_a, r_h) are recovered.

The physics being recovered

Anisotropy (Osipkov-Merritt). The halo’s DF depends on energy and angular momentum only through Q=EL2/(2ra2)Q = E - L^2/(2 r_a^2), which makes the velocity ellipsoid isotropic in the centre and increasingly radial outside rar_a. The Binney anisotropy has the closed form

β(r)1σt22σr2=r2r2+ra2,\beta(r) \equiv 1 - \frac{\sigma_t^2}{2\sigma_r^2} = \frac{r^2}{r^2 + r_a^2},

so β0\beta\to 0 as r0r\to 0 (isotropic) and β1\beta\to 1 as rr\to\infty (radial). The core, with rar_a\to\infty, has β0\beta\equiv 0. The OM curve Merritt, 1985 is the second observable, and it is what pins rar_a.

Dispersion. The 1-D dispersion of each component is built from the speed moments of its Eddington DF fjf_j in the shared potential, with the OM stretch folded in:

σ1D,j2(r)=v2j(r)3,v2j(r)=m2,j(r)m0,j(r)(13+2311+r2/ra,j2),\sigma_{1\mathrm D, j}^2(r) = \frac{\langle v^2\rangle_j(r)}{3}, \qquad \langle v^2\rangle_j(r) = \frac{m_{2,j}(r)}{m_{0,j}(r)} \left(\frac13 + \frac23\,\frac{1}{1 + r^2/r_{a,j}^2}\right),

where mp,j(r)=02Ψwpfj ⁣(Ψ12w2)dwm_{p,j}(r) = \int_0^{\sqrt{2\Psi}} w^{p} f_j\!\big(\Psi - \tfrac12 w^2\big)\,dw are the stretched-frame speed moments. This is the verbatim oracle the Engine B validation suite checks against sampled velocities. Physical units come from the engine’s own velocity scale v=GMsampled/(4πμ)sv = \sqrt{G M_{\rm sampled}/(4\pi\mu)}\,s, anchored to the measured total mass (never an input MM).

Why σ(r)\sigma(r) and β(r)\beta(r) together recover all three. The halo scale rhr_h sets where σ(r)\sigma(r) falls off; the mass split tt sets the relative amplitude and shape of the two components’ dispersion profiles; rar_a is read almost entirely from the rising β(r)\beta(r). The three are nearly orthogonal — borne out by the near-zero Fisher correlations below.

Inputs and assumptions

The fit recovers three halo parameters (t,ra,rh)(t, r_a, r_h); the core family, the domain radius, and the total mass are all assumed known. The split matters: the recovery looks clean partly because the hardest potential degeneracy (rhr_h vs the cluster’s outer extent) is removed by fixing the domain.

Table 1:Model inputs

Input

Meaning and role

Status (fiducial)

tt

Halo (Plummer) mass fraction; core carries 1t1-t. Read from the relative dispersion amplitudes.

recovered (0.6)

rar_a

Halo Osipkov–Merritt anisotropy radius; read from the rising β(r)\beta(r).

recovered (3.0 pc)

rhr_h

Halo Plummer half-mass radius; sets where σ(r)\sigma(r) falls off.

recovered (2.0 pc)

core EFF (a,γ)(a,\gamma), isotropy

Fixed core density profile (a=0.8a=0.8 pc, γ=5\gamma=5) and isotropic core (ra=r_a=\infty) — not fitted.

known / fixed

rtr_t

Domain outer radius = the fixed EFF extent, passed explicitly so a traced rhr_h never re-derives the boundary.

known / fixed (9.0 pc)

mjm_j

Stellar-mass labels [halo 0.5, core 1.0] MM_\odot; the 1/mj1/m_j cancels in the per-bin σ\sigma ratio.

known / fixed

MfixedM_{\rm fixed}

Measured total mass anchoring the physical velocity scale GM/(4πμ)\sqrt{GM/(4\pi\mu)} — treated as exactly known (see below).

known / fixed (data scalar)

NN, bins, occupancy, quadrature, MLE

3×1043\times10^4 stars; 16 equal-count radial bins; occupancy floors N_MIN=50, MIN_BINS_PER_CMP=8; 400-pt speed-moment quadrature; 3 dispersed Adam starts.

numerical choices

Result — joint MLE + Fisher (freshly run, ALL PASS)

Measured 2026-06-11 (N=3×104N=3\times10^4, three dispersed Adam starts; exit 0):

Parameter

Truth

θ^±σ^\hat\theta \pm \hat\sigma

Pull (θ^θtrue)/σ^(\hat\theta-\theta_{\rm true})/\hat\sigma

tt (halo mass fraction)

0.600

0.602±0.0080.602 \pm 0.008

+0.22

rar_a (halo OM radius)

3.000 pc

3.051±0.0533.051 \pm 0.053 pc

+0.96

rhr_h (Plummer half-mass)

2.000 pc

2.015±0.0292.015 \pm 0.029 pc

+0.51

All three within 1σ1\sigma, comfortably inside the 3σ3\sigma recovery gate. Supporting diagnostics, all measured in the same run:

Figure

Halo + core recovery (scripts/demo_halo_core.py, ALL PASS). (a, b)
Per-component \sigma_{1\mathrm D}(r): mock data (points, finite-N error bars)
with the best-fit binned-expectation curve and the truth curve, for the Plummer
halo and EFF core. (c) Halo Binney anisotropy \hat\beta(r) rising along the
OM curve r^2/(r^2+r_a^2) (\hat r_a = 3.05 pc vs truth 3.0), with the
isotropic-core reference at \beta=0. (d) 2\sigma Fisher ellipses in
(r_a, r_h) (and inset (t, r_a)): the truth ★ sits inside, near the MLE; the
ellipses are nearly axis-aligned, reflecting the near-zero correlations.

Figure 1:Halo + core recovery (scripts/demo_halo_core.py, ALL PASS). (a, b) Per-component σ1D(r)\sigma_{1\mathrm D}(r): mock data (points, finite-NN error bars) with the best-fit binned-expectation curve and the truth curve, for the Plummer halo and EFF core. (c) Halo Binney anisotropy β^(r)\hat\beta(r) rising along the OM curve r2/(r2+ra2)r^2/(r^2+r_a^2) (r^a=3.05\hat r_a = 3.05 pc vs truth 3.0), with the isotropic-core reference at β=0\beta=0. (d) 2σ2\sigma Fisher ellipses in (ra,rh)(r_a, r_h) (and inset (t,ra)(t, r_a)): the truth ★ sits inside, near the MLE; the ellipses are nearly axis-aligned, reflecting the near-zero correlations.

Caveats

How to run

env -u VIRTUAL_ENV uv run --no-sync python scripts/demo_halo_core.py

References

The EFF profile is Elson et al. (1987); the Plummer model Plummer (1911); Osipkov-Merritt anisotropy Merritt (1985); Eddington inversion follows Binney & Tremaine (2008). The Engine B construction and its realizability/anisotropy validation are documented at Engine B (Eddington) and the multi-component theory pages.

References
  1. Merritt, D. (1985). Spherical stellar systems with spheroidal velocity distributions. The Astronomical Journal, 90, 1027–1037. 10.1086/113810
  2. Elson, R. A. W., Fall, S. M., & Freeman, K. C. (1987). The structure of young star clusters in the Large Magellanic Cloud. The Astrophysical Journal, 323, 54–78. 10.1086/165807
  3. Plummer, H. C. (1911). On the problem of distribution in globular star clusters. Monthly Notices of the Royal Astronomical Society, 71, 460–470. 10.1093/mnras/71.5.460