Galaxies and jets as flows of space

E.P.J. de Haas · Kandinsky College, Nijmegen · SPARC fits 2026

All 175 SPARC rotation curves in the constant-Lagrangian model

Every rotation curve of the SPARC database was fitted with the constant-Lagrangian inflow model and, where the data asked for it, with its extensions: a second Lagrangian or a virial window. 100 galaxies need only one Lagrangian. The rest add one or two features, and which feature appears follows the size of the bulge.

The seven rotation-curve classes, ordered from late-type to early-type galaxies, with the number of SPARC galaxies in each Single Lagrangian: 100 galaxies, median type Sm 100 Single Lagrangian median SmTwo Lagrangians: 25 galaxies, median type Sm 25 Two Lagrangians median SmSingle + descent: 24 galaxies, median type Sbc 24 Single + descent median SbcDescent only: 7 galaxies, median type Sb 7 Descent only median SbMulti-region: 6 galaxies, median type Sc 6 Multi-region median ScFlattening: 2 galaxies, median type Sbc 2 Flattening median SbcUnresolved: 11 galaxies, median type Sab 11 Unresolved median Sab bulgeless disksbulge-dominated spirals

The seven classes of the overall report, with the typical shape of v²(r) and the number of galaxies in each. From left to right the share of galaxies with a photometric bulge rises from 2% to 86%.

How the sample was sorted

A single-Lagrangian fit comes first. The pattern of its residuals then decides which extension is tested.

  1. Fit one Lagrangian

    Fit (M, R) to v²(r) of every galaxy, with Hz = 2.2×10⁻¹⁸ s⁻¹ fixed.

  2. Read the residuals

    A runs test and two sign templates sort the galaxies into categories A to E.

  3. Test the extensions

    Two Lagrangians, one or two virial windows, compared with the single fit by BIC.

  4. Accept or keep

    An extension is accepted at ΔBIC < −6 and screened for physically sensible parameters.

  5. Flag short curves

    Curves with 13 points or fewer are marked tentative.

The five category reports

Each report gives the fits, residual diagnostics, parameter uncertainties (statistical, jackknife, distance and inclination) and an atlas with a residual panel for every galaxy. The coloured bar shows where the galaxies of each category end up in the overall classification.

Single LagrangianTwo LagrangiansSingle + descentDescent onlyMulti-regionFlatteningUnresolved

Overall classification

The five reports combined into one classification of all 175 galaxies, without refitting. Each galaxy is given the simplest description its own analysis accepted.

Seven rotation curves, one per class, with the single-Lagrangian fit dotted and the final description solid
One galaxy per class: UGC 5005, IC 2574, NGC 3198, UGC 5253, NGC 2841, ESO563-G021 and UGC 2487. Dotted: single Lagrangian; solid: final description.
ClassGalaxiesMedian typeWith bulgeMedian χ²ν, single → finalMedian RMSrelDescription
Single Lagrangian100Sm2%0.28 → 0.280.109One constant Lagrangian (M, R) fits the whole curve.
Two Lagrangians25Sm8%3.26 → 0.900.127An inner Lagrangian hands over to an outer one at R₂: a nested spiral.
Single + descent24Sbc42%4.28 → 0.890.075CL rise and peak, then a Keplerian descent onto a floor.
Descent only7Sb86%5.54 → 1.060.053Compact central mass with a Keplerian descent from the first points.
Multi-region6Sc33%4.94 → 1.140.052Two virial windows, or a reset plus a window.
Flattening2Sbc50%2.34 → 0.760.070Beyond the window radius the curve keeps rising, but more slowly.
Unresolved11Sab82%3.06 → 0.800.058A sharp inner peak the CL bulge cannot follow.
Hubble-type composition of the seven classes: late types in single and double, intermediate spirals in descent, early types in descent-only and unresolved
The classes form a sequence along the Hubble types (Kruskal–Wallis p ≈ 6×10⁻¹² for the four main classes).

Code and data

The Python scripts reproduce every fit, figure and report. Each step stores its results, so a later step can be rerun without repeating the earlier ones.

Put the SPARC files MassModels_Lelli2016c.mrt and Table1wbulge.mrt in SPARC-CL-fit/data/, or point the variable SPARC_DATA to their folder.

Browse the folder on GitHub

cd SPARC-CL-fit/code
python pipeline.py && python pipeline_plots.py && python make_report.py
python catA.py && python catA_plots.py && python catA_report.py
python catB.py && python catB_profile.py && python catB_fix.py
python catB.py && python catB_profile.py
python catB_plots.py && python catB_report.py
python catC.py && python catC_post.py
python catC_plots.py && python catC_report.py
python catD.py && python catD_post.py && python catD_status.py
python catD_plots.py && python catD_report.py
python catE.py && python catE_post.py
python catE_plots.py && python catE_report.py
python overall_build.py && python overall_plots.py
python overall_report.py