Applies the ITT Engine to the SPARC database of 175 disk galaxies.
What it measures: Where and how sharply the rotation curve deviates from what Newton predicts from visible mass — expressed as informational tension, a graph-theoretic measure of radial structural uniqueness. Not a dark-matter detector. A structural heterogeneity scanner.
git clone https://github.com/MatheusGrego/sparc-itt
cd sparc-itt
go run . download # ~110 KB zip from astroweb.cwru.edu
go run . analyze # 175 galaxies, ~18s, writes .sparc-data/results.json
go run . serve # http://localhost:9090Flags: --data-dir (default .sparc-data), --port (default 9090).
Two sources compete for each radial bin r_i:
observed ──wObs_i──▶ rot_r0 wObs_i = Vobs²_i / ΣVobs²
baryonic ──wBar_i──▶ rot_r0 wBar_i = Vbar²_i / ΣVbar²
where Vbar² = Vgas² + Vdisk² + Vbulge². Both weights are normalised
galaxy-wide so each source's distribution sums to exactly 1.0, regardless of
whether baryons under- or over-explain the observed velocity at any individual
bin. No clamping, no phantom "dark matter" node.
Informational tension τ(r_i): how much would removing bin i perturb each source's radial distribution relative to the rest of the galaxy? High τ means that radius is a structural inflection point — the shape of the rotation curve is most unlike its neighbours there.
The engine uses Jensen-Shannon Divergence (symmetric, bounded [0,1]) and normalises internally before all computations.
| Field | Description |
|---|---|
global_jsd |
JSD(normalised Vobs², normalised Vbar²) — overall Newton violation |
mond_radius |
Radius (kpc) where g_bar = Vbar²/r first crosses a₀ = 1.2×10⁻¹⁰ m/s²; −1 if galaxy is fully deep-MOND |
peak_tension_radius |
Radius of the highest-tension bin |
deficit |
max(0, 1 − Vbar²/Vobs²) per bin — local dark-matter fraction proxy |
g_bar_a0 |
Baryonic centripetal acceleration in units of a₀ |
profile_class |
τ(r) profile morphology: cusp / core / outer / flat |
tau_inner_frac |
mean τ(inner half) / mean τ(outer half) — > 1 means DM concentrated at centre |
tau_peak_pos_norm |
r_peak_τ / r_max ∈ [0,1] — normalised position of tension peak |
tau_monotonicity |
Spearman ρ(r, τ) — negative = tension falls outward (cusp); positive = rises (outer) |
| Metric | Value |
|---|---|
| Galaxies analysed | 175 |
| Total radial bins | ~3 400 |
| Galaxies in deep-MOND (g_bar < a₀ from first bin) | 111 / 175 (63%) |
| r(global_JSD, mean_tension) | −0.229 |
| r(mean_deficit, mean_tension) | 0.091 |
The near-zero r(deficit, tension) confirms that ITT tension is not a restatement of the mass discrepancy. A galaxy can have 80% dark matter and low tension (flat deficit profile) or 0% dark matter and high tension (steep baryonic gradient). Global JSD and local tension measure orthogonal properties.
For galaxies where g_bar actually crosses a₀ within the measured range (64/175):
| Group | n | r(r_MOND, r_peak_τ) | t | sig |
|---|---|---|---|---|
| All 64 | 64 | 0.410 | 3.54 | *** |
| Q=1 (high quality) | 42 | 0.472 | 3.39 | ** |
| Early spirals (S0–Sb, T=0–3) | 26 | 0.245 | 1.24 | |
| Mid spirals (Sbc–Sc, T=4–5) | 25 | 0.435 | 2.32 | * |
| Late spirals (Scd–Sd, T=6–7) | 9 | 0.630 | 2.14 | * |
| Late spirals, Q=1 | 7 | 0.864 | 3.84 | *** |
The strongest signal comes from late-type spirals (Scd–Sd) at high quality. These galaxies sit in the Newtonian-to-MOND transition zone: early types are baryon-dominated throughout (no structural kink from a Newton failure), and irregular galaxies are deep-MOND from the first measured point (no crossing to locate). Late spirals are the ones where g_bar actually crosses a₀ inside the observed range — and the ITT engine independently finds that crossing as the most structurally anomalous radius.
NGC2403 example: MOND crossing at 2.9 kpc; peak tension at 3.9 kpc (ratio 1.34). At the peak tension bin: g_bar/a₀ = 0.76, deficit = 21%. The tension rises monotonically as g_bar falls through a₀, then plateaus as the deficit flattens in the outer disc.
| Type | n | mean_JSD | mean_tension | mean_deficit |
|---|---|---|---|---|
| Early (S0–Sb) | 28 | 0.033 | 0.020 | 0.20 |
| Mid (Sbc–Sc) | 34 | 0.024 | 0.032 | 0.21 |
| Late (Scd–Sd) | 32 | 0.021 | 0.025 | 0.48 |
| Irr (Sdm–Im) | 76 | 0.015 | 0.047 | 0.51 |
| BCD | 5 | 0.047 | 0.054 | 0.56 |
Irregular and BCD galaxies have the highest mean tension despite the lowest global JSD (most Newton-violating galaxies have the smallest overall shape difference). Their high tension is driven by lumpy, irregular radial velocity profiles — the structural signal is real but not linked to a Newtonian-to-MOND transition.
Early-type spirals have the highest global JSD but low tension: their Newton violation is spread uniformly across all radii, so no single bin is structurally unique.
Classification of the shape of the tension curve as a proxy for dark-matter distribution morphology. Rules applied in order:
- cusp —
tau_inner_frac > 1.5ANDmono < −0.1— tension concentrated at centre, falling outward - outer —
peak_pos_norm > 0.65ORmono > 0.3— tension dominated by outer disc - core —
peak_pos_norm ∈ [0.2, 0.65]— peak at intermediate radius - flat — everything else — no strong gradient
Distribution across 175 galaxies:
| Class | n | mean_deficit | Hubble-type signal |
|---|---|---|---|
| outer | 114 (65%) | 0.466 | dominant in late spirals + irregulars |
| core | 27 (15%) | 0.228 | peaks in mid spirals (Sbc–Sc) |
| cusp | 17 (10%) | 0.294 | dominant in early spirals (S0–Sb) |
| flat | 17 (10%) | 0.304 | mixed |
Cross-tab by Hubble type:
Type cusp core outer flat n
Early (S0-Sb, T<=3) 12 6 1 9 28
Mid (Sbc-Sc, T=4-5) 4 11 17 2 34
Late (Scd-Sd, T=6-7) 1 6 22 3 32
Irr (T>=8) 0 4 74 3 81
Early spirals are cusp-dominated (baryon-concentrated centres). Irregulars are outer-dominated (DM spread across the outer disc). The gradient follows Hubble sequence.
-
NGC3109 — 80% of gravity unexplained by baryons; τ̄ = 0.017. The dark-matter fraction is essentially flat across all radii. A uniform deficit creates no structural tension.
-
F574-2 — 0% deficit (baryons fully explain the curve); τ̄ = 0.079 (top 10 galaxy). The tension comes entirely from the steep gradient in the disk's radial profile — no dark matter, but high structural complexity.
# Download SPARC main table (run once):
curl -o .sparc-data/sparc_meta.mrt \
https://cdsarc.cds.unistra.fr/ftp/J/AJ/152/157/table1.mrt
# Run stratified analysis:
python3 scripts/analyze_meta.pysparc-itt/
├── data/ parse + download SPARC .dat files
│ ├── download.go HTTPS fetch + zip extraction
│ ├── parser.go 7-column rotmod format → Galaxy structs
│ └── types.go
├── model/
│ └── graph.go Galaxy → []itt.Event (2-source: observed / baryonic)
├── analysis/
│ ├── runner.go AnalyzeGalaxy / AnalyzeAll + globalJSD + mondRadius
│ ├── profile.go τ(r) shape classifier (cusp/core/outer/flat)
│ └── results.go JSON-serialisable result types
├── server/
│ └── api.go REST: /api/galaxies /api/galaxy/:name /api/phases
├── scripts/
│ └── analyze_meta.py Hubble-type stratified correlation analysis
├── web/ static dashboard (Chart.js + d3-graphviz)
└── main.go cobra CLI: download | analyze | serve
GET /api/galaxies list of all 175 with summary stats
GET /api/galaxy/:name full result including per-bin tension and DOT graph
GET /api/phases name + phase classification for each galaxy
-
All phases = FullRecovery. The ITT temporal classifier requires genuine time-series dynamics. Encoding radial position as pseudo-time (1 h/bin) does not produce the variation needed to push galaxies into phases 1–3.
-
63% of galaxies are deep-MOND throughout. For these, g_bar never reaches a₀ in the measured range, making the MOND radius undefined and the tension-vs-MOND-transition comparison impossible.
-
Late-spiral sample is small. The strongest correlation (r = 0.864, Q=1 late spirals) rests on 7 galaxies. The t-statistic is significant (t = 3.84), but the result needs a larger, dedicated sample to be robust.
-
Profile class thresholds are heuristic. The cusp/core/outer/flat boundaries (1.5, 0.65, 0.3) were chosen to produce interpretable categories on SPARC data. They are not derived from physical first principles.
-
outerclass is partially driven by truncation. 50/114 outer galaxies havetau_peak_pos_norm = 1.0exactly — the tension is still rising at the last measured bin. These are classified outer by position, not by a genuine outer DM halo peak. -
Per-engine-per-galaxy design. One ITT Engine instance per galaxy. Graph size (10–50 nodes) is below the threshold where GPU acceleration helps.
- itt-engine — informational tension graphs
- cobra — CLI
- Chart.js (CDN) — tension + component charts
- d3-graphviz (CDN) — DOT graph rendering