Extend a microlensing limit to a spread of black hole masses
Sandbox Physics ·
For a probe that is linear in the mass function, one published curve fmax(M) is enough to test any spread of masses. The script integrates ψ/fmax over lnM for a lognormal and reports the largest total fraction the Subaru microlensing table allows. At 10−8M⊙ a width of σ=0.5 moves the limit from 0.00949 to 0.00964; at 10−6M⊙ it moves from 0.169 to 0.160.
The input is a table of log10fmax against log10(M/M⊙). The mass function is a lognormal in M with total fraction f, central mass Mc and width σ in natural-log mass. The script evaluates the ratio below for f=1 and reports fallowed=1/R.
Because R is linear in f, this one number answers the question for every amplitude. It is Eq. 12 of Carr et al. 2017 written per unit lnM, the convention the Lab also uses.
The archive holds two tables copied unchanged from the PBHconstraints repository at commit ef2fb03 (MIT licence, copyright 2026 Ville Vaskonen), with that licence file. SUB.dat is the Subaru HSC microlensing limit from M31 (Smyth et al. 2020). LIGO.dat is the LIGO-Virgo-KAGRA O3 merger limit (Andrés-Carcasona et al. 2024) and is included only so the script can refuse it. Each row is log10(M/M⊙) and log10fmax.
The README lists the SHA-256 of every file. The mapping from table to paper comes from the repository’s notebook; for this tutorial the two papers were read as arXiv abstracts only, so the archive makes no claim about how their curves were derived. The script was written and checked with Python 3.9.6.
The test file checks normalisation, the narrow limit against a hand interpolation, grid convergence, the saved outputs to a relative 10−12 and the refusals. The second command writes the five tutorial cases; compare them with expected/results.json.
Saved results for the Subaru table, as largest allowed f: centred at 10−8M⊙, widths 0.005, 0.5, 1 and 2 give 0.0094879, 0.0096371, 0.0098154 and 0.010949, against a single-mass value of 0.0094880. Centred at 10−6M⊙, width 0.5 gives 0.15997 against 0.16890. The narrowest case reproduces the table to 2.2×10−6, which checks the integrator.
The integral uses the trapezoid rule on a uniform log10M grid, 400 points per σ over ±9σ. Halving or doubling the grid changes R by less than 7×10−8 for σ=0.5 and 2. The cut at 9σ drops a Gaussian tail of about 2×10−19.
These errors are far below the uncertainty of a digitised curve, which the script does not propagate. Between table points it interpolates log10fmax linearly. Mass outside the table is dropped; the digitised curves stop where fmax reaches one, so dropping it can only lower R and make the result weaker than the full curve would give.
expected/failures.json lists four commands that must fail. LIGO.dat exits with code 3, because a merger rate depends on pairs of black holes and is not linear in ψ. A width of zero or NaN exits with 2. A centre of 10−3M⊙ exits with 5, because less than half of the distribution lies inside the Subaru table and the table cannot bound it. A table whose masses do not strictly increase exits with 4.
A refusal is a result. Eq. 12 applied to the merger table would still print a number, so the script checks linearity before it integrates.
The probe must be linear in ψ. Clustering, mergers and accretion that grows the black holes break this, as Sec. VI of the 2026 review lists. The script handles one table at a time. Combining probes in quadrature needs the extra assumptions in the L3 chapter and is not done here, and comparing ψ with the lowest curve at each mass is wrong in any case.
The lognormal is an input, not a prediction. The Lab’s formation model gives a skewed spread, so its numbers differ slightly from the lognormal ones even at the same mass.
Review; arXiv lists the journal reference Riv. Nuovo Cim. (2026). Read in full: Sec. II.A.2 on non-Gaussianity, Sec. IV.C (gravitational waves), IV.E (accretion), V (asteroid-mass window), VI (Eqs. 25–29) and the captions of Figs. 2–6; parts of Sec. II and III.
Abstract only. A hierarchical analysis of O3 mergers with several mass functions limits PBHs to at most about 10−3 of the dark matter between 1 and 200 solar masses.
Keep reading
What this page links to directly
You are hereExtend a microlensing limit to a spread of black hole masses