| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A scale-invariant framework and reproducible dataset for comparing black holes across the mass spectrum (Nagy 2025).
Stephen L. Nagy · Independent Researcher · September 2025 - Current
A Scale-Invariant Ruler for Black Holes: From Stellar-Mass to Ultra-Massive with Unified Uncertainties
License: MIT
BHRuler implements the Black Hole Ruler framework for scale-invariant, reproducible comparison of black holes from stellar to ultra-massive regimes. It provides code and data to compute gravitational units and ISCO landmarks, spin-aware Kerr corrections, dual accretion prescriptions (η-bridge and ADAF/RIAF), Blandford–Znajek jet-power estimates, environmental metrics (σ, r_infl, r_infl/R_e), and a TDE module with a logistic capture boundary—plus a versioned catalog schema for cross-scale studies.
The single-file CLI, bhruler.py, now also supports direct ingestion of the Survey V2 CSV format, including fields such as Name, Class, Mass_Msun, Spin_a, Spin_Known, and Regime, while preserving the standard BHRuler schema for pipeline use.
python bhruler.py --input 50_BH_Survey_V2_verified.csv --branch core --output survey_out.csvGravitational units
t_g = GM/c³, r_g = GM/c², r_s = 2r_g
Schwarzschild ISCO
r_ISCO = 6 r_g
f_ISCO = c³ / (6^{3/2} 2π GM)
f_ISCO × t_g = 1 / (6^{3/2} 2π) [mass-invariant]
Kerr ISCO (equatorial, prograde/retrograde) Using Bardeen–Press–Teukolsky (1972):
f_ISCO(a*) = (c³ / 2π GM) × 1 / (r_ISCO^{3/2}(a*) ± a*)
Accretion prescriptions
Blandford–Znajek (order-of-magnitude; normalization from Tchekhovskoy+ 2011 GRMHD MAD simulations)
P_BZ ≈ 10⁴⁵ erg/s × (a*/0.9)² × (B_H/10⁴ G)² × (M/10⁹ M☉)²
Environment & TDE
r_infl = GM/σ²
t_fb ≈ 41 d × (M/10⁶ M☉)^{1/2} × (R*/R☉)^{3/2} × (M*/M☉)⁻¹
TDE capture boundary: logistic S(M; a*) with tunable midpoint and width.
Requirements: Python ≥ 3.8, pandas
pip install pandaspython bhruler.py --output trio_out.csvThis writes a 3-row CSV (Cygnus X-1, Sgr A*, M87*) using both accretion branches by default.
python bhruler.py --input objects.csv --branch both --output derived.csvpython bhruler.py --input 50_BH_Survey_V2_verified.csv --branch core --output survey_out.csvFor survey-style catalogs that contain mass and spin but not accretion inputs, --branch core is the recommended mode.
See Using_BHRuler.md for the full user guide, accepted aliases, worked examples, and troubleshooting.
import bhruler as br
row = dict(
name="Test",
M_Msun=1e8,
a_star=0.7,
lambda_Edd=0.01,
eta_eff=0.1,
kappa=0.1,
sigma_kms=200,
Re_kpc=4.0
)
out = br.compute_row(row, branch="both", tde_mcrit=3e7, tde_width=0.15)| File | Description |
|---|---|
| bh_ruler_check_2025.csv | Cross-scale invariant check: Gaia BH3, GW231123, ω Cen IMBH, CEERS-1019, J0529-4351 |
| bh_spin_aware_ISCO_2025.csv | Spin-corrected ISCOs: Cyg X-1, LMC X-1, GW150914 remnant |
| bh_trio_spin_field_jet_2025.csv | Trio (Cyg X-1, Sgr A*, M87*) with B_H and P_BZ under dual branches |
| M87_RIAF_sensitivity_2025.csv | M87* jet-power sensitivity vs. accretion prescription (5 models) |
| bh_ruler_env_SgrA_M87_V1.csv | Environment + TDE diagnostics for Sgr A* and M87* |
| 50_BH_Survey_V2_verified.csv | Survey V2 source list supported directly by the updated parser |
| survey_out.csv | Example Survey V2-derived output using --branch core |
Core inputs: name, M_Msun, a_star, lambda_Edd, eta_eff, kappa, sigma_kms, Re_kpc, branch
Name / identifier
Mass
Spin
Eddington ratio
Optional metadata
Core: t_g_s, r_s_km, f_ISCO_Schw_Hz, fISCO_tg_invariant
Spin-aware: r_ISCO_rg, f_ISCO_Kerr_Hz, f_ratio
Environment: rinfl_pc, rinfl_over_Re, t_fb_days
TDE: tde_possible
Accretion/Jets: B_H_G_eta, P_BZ_erg_s_eta, B_H_G_adaf, P_BZ_erg_s_adaf
When survey-style input is detected, bhruler.py also writes:
This preserves compatibility with survey-style tables while keeping the canonical BHRuler columns in the same output file.
cd Paper/figures
python fig1_invariant.py
python fig2_spin.py
python fig3_m87.py
python fig4_atlas.py
python fig5_uncertainty.pyRequires: matplotlib, numpy.
cd Paper
pdflatex Black_Hole_Ruler_V2_2025.tex
pdflatex Black_Hole_Ruler_V2_2025.teximport pandas as pd
# Verify invariant
check = pd.read_csv("data/bh_ruler_check_2025.csv")
print(check[["Object", "Mass [M_sun]", "f_ISCO * t_g (dimensionless)"]])
# M87* sensitivity
sens = pd.read_csv("data/M87_RIAF_sensitivity_2025.csv")
print(sens[["Model", "mdot (dotM/dotM_Edd)", "P_BZ [erg/s]"]])Issues and pull requests are welcome. Please:
If you use BHRuler or the accompanying datasets in your work, please cite:
Nagy, S. L. (2025). A Scale-Invariant Ruler for Black Holes: From Stellar-Mass to Ultra-Massive with Unified Uncertainties. Black Hole Ruler.
BibTeX
@software{Nagy2025BHRuler,
author = {Stephen L. Nagy},
title = {{A Scale-Invariant Ruler for Black Holes:
From Stellar-Mass to Ultra-Massive with Unified Uncertainties}},
year = {2025},
version = {2.1.1-survey},
url = {https://github.com/SNagy3/BHRuler},
note = {BHRuler software, data, and paper}
}Topics
This project is licensed under the MIT License. See LICENSE for details.
| Back | FazBrowse Home | New Git URL |