Chapter 6 · Section 3
Reading a Galaxy's Type
The BPT law
BPT Part 3.14 (How the Type Is Read) begins from the kinematic measure: "The shape of a galaxy is the share of its stars' motion that is orderly rotation. A disk turns together; an elliptical's stars swarm." Its law is the Rotation Fraction, κ_rot = K_φ / K, the share of the stars' kinetic energy in rotation about the axis: "Above about one half a galaxy is disk-dominated, a spiral or a lenticular; below it, spheroid-dominated, an elliptical." The book then lists the types the game reads, "spiral (rotating, forming stars), lenticular (rotating, quiet), elliptical (swarming), irregular (half-settled, κ_rot 0.3 to 0.5, or rich in gas, forming stars at the spiral rate), dwarf (small) and starburst (forming stars fast)", and says how the game reads them: "Its field is far coarser than any disk, so the game cannot measure a galaxy's turning from its matter, and it reads the type by the measure it can trust, its star formation, as the sky divides: the blue cloud of galaxies still forming stars are disks, spirals, or starbursts when they form fast; the red sequence of quenched ones are spheroids, ellipticals above the knee of the galaxy masses and lenticulars below it."
The lines come from the measured star formation rates, turned into a share of young stars: "a star of two Suns lives about 1.8 billion years ... so the share of a galaxy's stars still above two Suns, set against that share in a newborn population (2.5% under the Kroupa mass function), is the share of its stars formed within one such lifetime. Multiplying each rate by that lifetime gives its line: below about 2% of the newborn share a galaxy is quiet, near 10% it forms stars as a spiral does, and above about 45% it is a starburst. A long-lived disk like ours holds only about one star in six hundred above two Suns, about 6% of the newborn share, and reads as forming stars, as it should." And "a galaxy below a fiftieth of M* is a dwarf." BPT Part 3.14 (The Game's Reading) adds that "a central well that feeds fast lights as a quasar ... and a weaker one as a Seyfert glow", and Eddington Luminosity sets the lines: a Seyfert from a hundredth of the Eddington rate, a quasar from a tenth.
The established physics
- Rotation fraction κ_rot (Sales et al. 2012, The origin of discs and spheroids in simulated galaxies).
- The blue cloud and red sequence (Strateva et al. 2001, Color separation of galaxy types in the SDSS; Wuyts et al. 2011, Galaxy structure and mode of star formation).
- Quenched below a specific star formation rate of 10⁻¹¹ per year (Wetzel, Tinker & Conroy 2012); main-sequence spirals near 10^−10.2 per year (Speagle et al. 2014, as the code comment cites it); starbursts at 4 times that or more (Rodighiero et al. 2011, as the code comment cites it).
- The newborn share above two Suns from the Kroupa mass function (Kroupa 2001, On the variation of the initial mass function); the two-Sun lifetime of about 1.8 Gyr from lifetime ∝ M^−2.5, as BPT Part 3.14 states.
- The dwarf line from Baldry et al. 2012.
- Seyferts and quasars by Eddington ratio (Eddington 1926; Seyfert 1943, as BPT Part 3.14 cites them).
The arithmetic of the lines: 10⁻¹¹ /yr × 1.8 × 10⁹ yr = 0.018 ≈ 0.02; 10^−10.2 /yr = 6.3 × 10⁻¹¹ /yr, × 1.8 × 10⁹ yr = 0.114 ≈ 0.1; four times that is 0.45.
The game's math
galaxyOf(w, idx) app.js:2963. The reach R is the same max(3, min(rows, cols)/16) (app.js:2965).
The sums (app.js:2968–2978). Over the bodies in the well's bins that it owns, at periodic offset (dr, dc), distance d with 10⁻⁶ < d ≤ R, and velocity relative to the well (vr, vc):
v_φ = (dr·vc − dc·vr) / d the motion round the well
M = Σ m K_φ = Σ m·v_φ² K = Σ m·(vr² + vc²)
L_z = Σ m·(dr·vc − dc·vr) sense = sign(L_z)
gas = Σ b.gas zm = Σ b.zm n = members
alive = Σ n_s over living star groups blue = Σ n_s for groups of m ≥ 2 Suns, not giants
The cases before a type (app.js:2979–2995): no members and a host: "satellite"; no members: "no galaxy gathered here yet"; members but no living stars: "a cloud of gas gathering round its well".
The shares (app.js:2996–2997):
κ_rot = K_φ / K bl = blue / alive f_gas = gas / M share = M / Mall
young = bl / BLUE_AT_BIRTH
forming = (young ≥ 0.02) or (f_gas > 0.3)
BLUE_AT_BIRTH (app.js:2916) is computed once at load: the share of 4000 evenly spaced quantiles of the IMF, sampleIMF((i + 0.5)/4000, false), at 2 Suns or more. BPT Part 3.14 gives it as 2.5%.
The type (app.js:3004–3010), in order:
if (knee > 0 ? M < 0.02·knee : share < 0.004) dwarf irregular if forming, else dwarf spheroidal
else if young ≥ 0.45 starburst
else if forming spiral
else if knee = 0 or M < knee lenticular (S0)
else elliptical
The feeding tag (app.js:3011): Eddington ratio w.edd ≥ 0.1 adds "a quasar", ≥ 0.01 "a Seyfert".
The text (app.js:3028) shows the type, the tag, the arms and pitch for spirals and starbursts, the heat, κ_rot to two decimals, the stars alive × starMult, and the young blue share as a percent.
Example: BPT Part 3.14 gives our galaxy about one star in six hundred above two Suns, bl ≈ 0.0016. Then young = 0.0016 / 0.025 = 0.064 ≥ 0.02, so it is forming; 0.064 < 0.45, so it is not a starburst; if its mass is at least a fiftieth of the knee, it reads as a spiral.
In the game
The type is what the player sees first in a galaxy, because the scene draws each type in its own shape and its own color (Part 6.8). The comment at scene3d.js:534–536 names them: "a spiral's arms blue-white on a warm core, an elliptical yellow-orange, a lenticular pale gold, an irregular patchy blue". A spiral and a starburst show arms; a lenticular a smooth disk and a larger bulge; an elliptical or a dwarf spheroidal a round, slightly flattened swarm that barely turns; a dwarf irregular four clumps. As a galaxy's young stars die it can pass from the blue cloud to the red sequence: at the next reading (every four Pulses) a spiral whose young share falls under the quiet line is redrawn as a lenticular or, above the knee, an elliptical, and its arms are gone.
The type is named in words in the dive banner. After the universe returns to the Source, a tap on a well opens a banner headed by the well's name, with the title "Next Universe – Level … · generation …" and, below it, the galaxy's line from app.js:3028 (diveWell() app.js:3135–3136), for example:
spiral galaxy · a Seyfert · 2 arms, pitch 22° · <heat mode> · T_vir … K · metals … of the Sun's · κ_rot 0.41 · … stars, 3% young and blue
(the numbers vary; the form is the code's). A well whose bodies hold gas but no lit star reads "a cloud of gas gathering round its well, no stars lit yet", with "· feeding the well" when its Eddington ratio is a hundredth or more (app.js:2995). The line ends with "tap the well again to dive in".
Every type the reading produced in the life is recorded: updateGalaxies() adds 'galaxy:' + type to the routines seen (app.js:3119), and the Language Block, opened by the "✎ Language Block" button on the run card, lists "spiral galaxies", "lenticular (S0) galaxies" and "elliptical galaxies" always, and the other types once they appear, each marked as running or not (universeRoutines() app.js:2232, app.js:2250). The run record carries the same list, so a child universe's Language Block marks each type "inherited", "NEW" or "lost" against its parent's (app.js:2267).
The scale model
Exact: no scale model in the shares. κ_rot, bl, f_gas and the share of the universe are ratios of drawn quantities, unchanged when every drawn star stands for starMult stars. The star count shown is alive × starMult, the real count at the true level. The young share is a ratio of star counts in each drawn population, so a drawn galaxy's population stands for its real one star kind by star kind.
Where the game and the theory differ
- BPT says the types come from "κ_rot and the share of young blue stars together", and BPT Part 3.14 (The Game's Reading) says "a selected galaxy is named by its type, read from its stars' rotation fraction and their colour." Since 2026-10-29 (comment app.js:2999–3002) κ_rot is computed and shown but sets no type; the type comes from the young share alone. The comment at app.js:3008–3009 still describes κ_rot ≥ ½ for a lenticular and a κ_rot band for irregulars; neither is in the code.
- BPT lists "irregular (half-settled, κ_rot 0.3 to 0.5, or rich in gas, forming stars at the spiral rate)". No branch returns "irregular" or "dwarf elliptical", though both are in
GALAXY_TYPES(app.js:2231), the list the Language Block shows. Irregular disks appear only as "dwarf irregular". - BPT puts a spiral "near 10%" of the newborn share.
YOUNG_MAIN = 0.1(app.js:2917) is defined and never used: the spiral line is "forming", which starts at 0.02, not at 0.1. - The gas share 0.3 and the fallback share 0.004 (used only before a knee exists) are not in BPT and carry no source in the code.
Fixed numbers
| Number | Where | What it is | Kind |
|---|---|---|---|
| 2 | app.js:2916, 2974 | Suns: the "young blue" line, a two-Sun star living about 1.8 Gyr | BPT (Part 3.14, What separates forming stars from quiet) |
| 4000 | app.js:2916 | quantiles of the IMF used to compute BLUE_AT_BIRTH | METHOD (numerical quadrature; error under 0.03%) |
| 0.5 | app.js:2916 | quantile midpoints (i + 0.5)/N | METHOD (midpoint rule) |
| 0.02 | app.js:2917 | YOUNG_QUIET: quenched line, 10⁻¹¹/yr × 1.8 Gyr | PHYSICS (Wetzel, Tinker & Conroy 2012) |
| 0.1 | app.js:2917 | YOUNG_MAIN: spiral rate line; unused | PHYSICS (Speagle et al. 2014) |
| 0.45 | app.js:2917 | YOUNG_BURST: starburst line | PHYSICS (Rodighiero et al. 2011) |
| 0.02 | app.js:2917 | DWARF_OF_KNEE: a dwarf is under 1/50 of M* | PHYSICS (Baldry et al. 2012) |
| 1e-6 | app.js:2971 | least distance counted (the well itself is skipped) | METHOD (avoids dividing by d = 0) |
| 0.3 | app.js:2997 | gas share above which a galaxy counts as forming | METHOD (a classification cut; no source given) |
| 0.004 | app.js:3004 | dwarf line as a share of all mass when no knee exists | METHOD (a fallback cut; no source given) |
| 0.1 | app.js:3011 | Eddington ratio above which a feeding well is "a quasar" | METHOD (conventional cut; no source given) |
| 0.01 | app.js:3011 | Eddington ratio above which it is "a Seyfert" | METHOD (conventional cut; no source given) |
| 0.019 | app.js:2994 | the Sun's metal mass fraction, for "of the Sun's" | PHYSICS (solar metallicity as the code takes it) |
| 0.01 | app.js:2994 | metals under a hundredth of the Sun's read "none yet" | DISPLAY |
| 2 | app.js:2994, 3028 | significant figures and decimals in the text | DISPLAY |
| 100 | app.js:3028 | young share shown as a percent | DISPLAY |
| 3 | app.js:2250 | the first three galaxy types always listed on the end card | RECORD |