# Spin (physics)
## Microsim
### Live player
<div class="microsim-player">
<iframe src="https://editor.p5js.org/sciencenibber/full/yAQ3WhXLM" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<div class="microsim-fallback">
<img src="Microsims/thumbs/Spin_(physics).png" alt="Spin_(physics) microsim poster" style="width:100%;border:1px solid #4445;border-radius:6px;">
<p><em>Live microsim (desktop) · <a href="https://editor.p5js.org/sciencenibber/sketches/yAQ3WhXLM">open sketch in the p5.js editor</a></em></p>
</div>
**Editor URL:** https://editor.p5js.org/sciencenibber/sketches/yAQ3WhXLM
**Description (100 words):**
A 720x520 microsim split into a left-half Bloch sphere and a right-half 12-spin ensemble lattice. On the sphere, an orange spin vector precesses about the vertical B axis and leaves a fading trail; the lattice shows top-down spin cones color-coded by their longitudinal projection, with a magenta net-magnetization arrow underneath that visibly shrinks as the ensemble dephases. Three sliders set the static field B in Tesla, the initial tilt angle theta in degrees, and the transverse relaxation time T2 in seconds. Number keys 1-4 swap species among 1H [[Proton|proton]], [[Electron|electron]], 3He nucleus, and 13C nucleus, instantly rescaling the displayed Larmor frequency.
```js
// =====================================================================
// Spin_(physics).js -- Wikitube microsim
// Article: Spin (physics) en.wikitube.io/wiki/Spin_(physics)
// Room: Helium Pattern: E (particles / kinetic phenomena)
// ---------------------------------------------------------------------
// Idea: a live Bloch-sphere visualization of Larmor precession plus a
// satellite lattice of 12 ensemble spins, both driven by the same set
// of Bloch equations. The reader controls the static magnetic field
// magnitude B (along +z), the initial tilt angle theta of the spin
// vector away from +z, and the transverse-relaxation time T2. Pressing
// number keys 1 - 4 swaps the gyromagnetic species (1H proton,
// unpaired electron, 3He nucleus, 13C nucleus).
//
// Canonical equations (Bloch, 1946):
//
// dS/dt = gamma * (S x B) - Sx_hat/T2 - Sy_hat/T2
//
// i.e. each spin precesses about B at angular frequency
//
// omega_L = gamma * B (Larmor relation)
//
// while the transverse components Sx, Sy decay with time constant T2.
// Longitudinal recovery (T1) is held fixed for clarity -- the visual
// story is precession + dephasing.
//
// Spin connects to the Helium room through three threads:
// * He-4 is a spin-0 boson, so it has no Larmor precession at all
// -- its macroscopic identity is set by Bose-Einstein statistics.
// * He-3 is a spin-1/2 fermion with gamma/2pi = -32.43 MHz/T, the
// basis of hyperpolarized 3He MRI of the lung.
// * All commercial NMR, MRI, and EPR machines run their main coils
// in helium-cooled superconducting magnets.
//
// Visual layout (720 x 520 canvas):
// * top-left: HUD title + Wikitube URL subtitle
// * top-right: control hints
// * left half: Bloch sphere (3D-projected) with axes, equator, spin
// vector and precession trail
// * right half: 4 x 3 lattice of ensemble spins (top-down cones)
// with a net-magnetization arrow underneath
// * bottom: 3 sliders (B, theta, T2) + species selector + live
// readout of omega_L and current spin state
// * bottom-right: canonical equation omega = gamma * B
//
// Conventions (Wikitube Betterfire Standard v0):
// * single ARTICLE constant, single quotes, sourced once
// * p5.disableFriendlyErrors = true
// * createCanvas(720, 520), pixelDensity(2), system-ui font
// * all createSlider calls positioned and sized explicitly
// * non-ASCII (Greek omega/gamma/theta, dots, arrows) lives in
// COMMENTS ONLY -- every text() literal is plain ASCII
// * Energy-room palette (P5_JS_EDITOR section 4): BG = 18, FG = 240,
// HOT, COLD, STRUCT, TRAJ
//
// Numerical integration is symplectic-ish: a single midpoint update
// per frame on the Bloch ODE with dt = min(deltaTime / 1000, 0.05).
// At slider extremes the precession period can fall to roughly 0.05 s
// of screen-time per turn -- still readable, never aliased.
// =====================================================================
const ARTICLE = 'Spin_(physics)';
const TITLE = ARTICLE.replace(/_/g, ' ');
p5.disableFriendlyErrors = true;
// ----- Energy room palette (P5_JS_EDITOR section 4) ------------------
const BG = 18;
const FG = 240;
const DIM = [240, 240, 240, 140];
const HOT = [220, 110, 60]; // warm: spin tip, trail
const COLD = [60, 130, 220]; // cool: B-field arrows
const COLDER = [40, 80, 180]; // deeper cool: ensemble cones
const STRUCT = [120, 130, 150]; // structural grey: sphere, axes
const TRAJ = [240, 220, 80]; // trajectory accent: trail head
const ACCENT = [200, 100, 220]; // magenta: net-magnetization arrow
const GAUGE = [120, 220, 140]; // gauge green: readouts
// ----- Physical species (scaled gyromagnetic ratios in display units)
// We slow the real gamma by SPEED_SCALE so that one precession period
// is visible on screen (real proton at 1 T = 42.577 MHz, unreadable).
// gamma_display = gamma_real_MHz_per_T * SPEED_SCALE -> rad/s per T.
const SPEED_SCALE = 6e-7; // makes 1H at 1 T cycle ~3.9 s
const SPECIES = [
{ key: '1', name: '1H proton', gamma2pi: 42.577, sign: +1 },
{ key: '2', name: 'electron e-', gamma2pi: 28025, sign: -1 },
{ key: '3', name: '3He nucleus', gamma2pi: 32.434, sign: -1 },
{ key: '4', name: '13C nucleus', gamma2pi: 10.708, sign: +1 }
];
let speciesIdx = 0; // start on the proton
// ----- Spin state (Bloch vector S, |S| == 1) ------------------------
// Stored in Cartesian (Sx, Sy, Sz). At t = 0 we set it to a tilted
// vector in the x-z plane: (sin theta, 0, cos theta).
let S = { x: 0, y: 0, z: 1 };
let lastTilt = -1; // re-seed when slider changes
// Trail buffer of recent tip positions (in 3D, then projected each frame)
const TRAIL_MAX = 360;
const trail = [];
// ----- Ensemble lattice (right half of canvas) ----------------------
// 12 spins, each starting at the slider tilt but with a small random
// phase scatter so the dephasing under T2 is visible as the cones
// "fan out" with time.
const N_ENS = 12;
const ENS_COLS = 4;
const ENS_ROWS = 3;
let ensemble = []; // { x, y, z, phi0 } per spin
// ----- UI controls (set in setup) -----------------------------------
let bSlider, thetaSlider, t2Slider;
// ----- Camera (orthographic, fixed) ---------------------------------
// 3D -> 2D projection: simple axonometric. The B-field is +z (up).
// We tilt around x by ALPHA so +y leans toward the reader.
const ALPHA = -0.50; // radians, ~ -28.6 deg
const COS_A = Math.cos(ALPHA);
const SIN_A = Math.sin(ALPHA);
// Bloch-sphere screen geometry (left half) set in setup()
let blochCX, blochCY, blochR;
// Lattice geometry (right half) set in setup()
let latX, latY, latW, latH, conR;
function setup() {
createCanvas(720, 520);
pixelDensity(2);
textFont('system-ui');
// Bloch sphere in the left half, vertically centered between the
// HUD top band and the slider bottom band.
blochCX = 175;
blochCY = 270;
blochR = 130;
// Right-half lattice: 4 columns x 3 rows of ensemble spins.
latX = 380;
latY = 80;
latW = width - latX - 30;
latH = 360;
conR = 36; // cone radius for each ensemble spin
// Seed ensemble with small phase scatter (radians around z-axis).
ensemble = [];
for (let i = 0; i < N_ENS; i++) {
const phi0 = (i / N_ENS) * TWO_PI * 0.18 - 0.09 * TWO_PI; // narrow fan
ensemble.push({ x: 0, y: 0, z: 1, phi0: phi0 });
}
// Sliders -- all positioned + sized (Betterfire Standard rule 5).
bSlider = createSlider(0.05, 3.0, 1.0, 0.01 ).position(20, height - 70).size(180);
thetaSlider = createSlider(0, 90, 45, 1 ).position(20, height - 45).size(180);
t2Slider = createSlider(0.1, 10, 3.0, 0.1 ).position(20, height - 20).size(180);
}
function draw() {
background(BG);
// Re-seed when the tilt slider changes so the user always sees the
// initial condition clearly.
const tiltDeg = thetaSlider.value();
if (Math.abs(tiltDeg - lastTilt) > 0.5) {
seedSpins(tiltDeg);
lastTilt = tiltDeg;
}
// Integrate Bloch dynamics for one frame.
const dt = Math.min(deltaTime / 1000, 0.05);
stepBloch(dt);
// Draw layers: ambient field -> sphere -> lattice -> HUD on top.
drawBField();
drawBlochSphere();
drawLattice();
drawHUD();
}
// =====================================================================
// Bloch dynamics
// =====================================================================
function seedSpins(tiltDeg) {
const theta = radians(tiltDeg);
const s = Math.sin(theta);
const c = Math.cos(theta);
S = { x: s, y: 0, z: c };
trail.length = 0;
for (let i = 0; i < ensemble.length; i++) {
// Same magnitude tilt, different initial azimuth phi0.
const phi = ensemble[i].phi0;
ensemble[i].x = s * Math.cos(phi);
ensemble[i].y = s * Math.sin(phi);
ensemble[i].z = c;
}
}
function stepBloch(dt) {
const B = bSlider.value();
const T2 = t2Slider.value();
const sp = SPECIES[speciesIdx];
// Larmor angular frequency on screen: omega = gamma * B (display).
// Sign of gamma flips the precession direction (electron is opposite
// to proton, which is part of why EPR runs in GHz and NMR in MHz).
const omega = sp.sign * 2 * Math.PI * sp.gamma2pi * B * SPEED_SCALE;
// ----- Hero spin (Bloch sphere) ----------------------------------
// Bloch eqs (with no RF drive, B = B_z hat_z):
// dSx/dt = +omega * Sy - Sx / T2
// dSy/dt = -omega * Sx - Sy / T2
// dSz/dt = -(Sz - 1) / T1 (T1 frozen here)
S = bloch1Step(S, omega, T2, dt);
// Record the tip in the trail buffer (Cartesian 3-vector).
trail.push({ x: S.x, y: S.y, z: S.z });
if (trail.length > TRAIL_MAX) trail.shift();
// ----- Ensemble (12 spins) ---------------------------------------
// Same integrator, slightly different B per spin (a fake static
// inhomogeneity proportional to the spin index) so the ensemble
// dephases in a more visually interesting way than pure T2.
for (let i = 0; i < ensemble.length; i++) {
const dB = (i - N_ENS / 2) * 0.012; // tiny field inhom
const omegI = sp.sign * 2 * Math.PI * sp.gamma2pi * (B + dB) * SPEED_SCALE;
ensemble[i] = bloch1Step(ensemble[i], omegI, T2, dt);
}
}
function bloch1Step(s, omega, T2, dt) {
// Single explicit midpoint step. Cheap and stable for dt < 0.05.
// k1
const k1x = +omega * s.y - s.x / T2;
const k1y = -omega * s.x - s.y / T2;
const k1z = 0;
// midpoint
const mx = s.x + 0.5 * dt * k1x;
const my = s.y + 0.5 * dt * k1y;
const mz = s.z + 0.5 * dt * k1z;
// k2 from midpoint
const k2x = +omega * my - mx / T2;
const k2y = -omega * mx - my / T2;
const k2z = 0;
// final
return {
x: s.x + dt * k2x,
y: s.y + dt * k2y,
z: s.z + dt * k2z
};
}
// =====================================================================
// 3D -> 2D projection (axonometric, no zoom)
// =====================================================================
function project(x, y, z) {
// Axonometric: rotate around x by ALPHA so y leans toward the viewer.
// (Identity in x; y' = y*cos - z*sin; z' = y*sin + z*cos)
const yp = y * COS_A - z * SIN_A;
const zp = y * SIN_A + z * COS_A;
// Return px, py for a unit sphere centered at (cx, cy) with radius r.
return { dx: x, dy: -yp, depth: zp };
}
// =====================================================================
// Bloch sphere (left half)
// =====================================================================
function drawBlochSphere() {
push();
translate(blochCX, blochCY);
// ----- Sphere outline (great circle in screen plane) --------------
noFill();
stroke(STRUCT[0], STRUCT[1], STRUCT[2], 220);
strokeWeight(1.5);
circle(0, 0, blochR * 2);
// ----- Equator (tilted ellipse) -----------------------------------
// Project a circle of radius 1 in the x-y plane (z = 0).
stroke(STRUCT[0], STRUCT[1], STRUCT[2], 140);
strokeWeight(1);
drawProjectedCircle(0, blochR, 'equator');
// ----- Z-axis (B-field axis, vertical) -----------------------------
stroke(COLD[0], COLD[1], COLD[2], 220);
strokeWeight(1.5);
const top = project(0, 0, 1.1);
const bot = project(0, 0, -1.1);
line(top.dx * blochR, top.dy * blochR, bot.dx * blochR, bot.dy * blochR);
drawArrowHead(top.dx * blochR, top.dy * blochR, 0, -1, 7, COLD);
noStroke();
fill(...COLD);
textSize(11);
textAlign(LEFT, BOTTOM);
text('B (+z)', top.dx * blochR + 6, top.dy * blochR + 2);
// ----- X-axis ------------------------------------------------------
stroke(STRUCT[0], STRUCT[1], STRUCT[2], 180);
strokeWeight(1);
const xPos = project( 1.1, 0, 0);
const xNeg = project(-1.1, 0, 0);
line(xPos.dx * blochR, xPos.dy * blochR, xNeg.dx * blochR, xNeg.dy * blochR);
noStroke();
fill(...DIM);
textSize(10);
text('x', xPos.dx * blochR + 4, xPos.dy * blochR + 4);
// ----- Y-axis ------------------------------------------------------
stroke(STRUCT[0], STRUCT[1], STRUCT[2], 180);
strokeWeight(1);
const yPos = project(0, 1.1, 0);
const yNeg = project(0, -1.1, 0);
line(yPos.dx * blochR, yPos.dy * blochR, yNeg.dx * blochR, yNeg.dy * blochR);
fill(...DIM);
text('y', yPos.dx * blochR + 4, yPos.dy * blochR + 4);
// ----- Trail (precession trace) ------------------------------------
// Older points fade out; freshest point is bright TRAJ.
noFill();
beginShape();
strokeWeight(1.5);
for (let i = 0; i < trail.length; i++) {
const t = trail[i];
const p = project(t.x, t.y, t.z);
const a = map(i, 0, trail.length, 30, 240);
stroke(HOT[0], HOT[1], HOT[2], a);
vertex(p.dx * blochR, p.dy * blochR);
}
endShape();
// ----- Spin vector (origin -> tip on sphere) -----------------------
const tip = project(S.x, S.y, S.z);
const tx = tip.dx * blochR;
const ty = tip.dy * blochR;
stroke(HOT[0], HOT[1], HOT[2], 240);
strokeWeight(3);
line(0, 0, tx, ty);
drawArrowHead(tx, ty, tx, ty, 9, HOT);
// ----- Tip dot ----------------------------------------------------
noStroke();
fill(TRAJ[0], TRAJ[1], TRAJ[2], 240);
circle(tx, ty, 9);
// ----- Sphere title ------------------------------------------------
noStroke();
fill(...DIM);
textSize(11);
textAlign(CENTER, TOP);
text('Bloch sphere: single spin |S| = 1', 0, blochR + 10);
pop();
}
function drawProjectedCircle(zFixed, r, _label) {
// Sample a circle of radius 1 in the (x, y) plane at height z = zFixed,
// project each sample, draw a closed polyline.
noFill();
beginShape();
const N = 96;
for (let i = 0; i <= N; i++) {
const a = (i / N) * TWO_PI;
const p = project(Math.cos(a), Math.sin(a), zFixed);
vertex(p.dx * r, p.dy * r);
}
endShape();
}
function drawArrowHead(x, y, dxAxis, dyAxis, size, col) {
// Triangle head pointing in the (dxAxis, dyAxis) direction, anchored at (x, y).
const ang = Math.atan2(dyAxis, dxAxis);
push();
translate(x, y);
rotate(ang);
noStroke();
fill(col[0], col[1], col[2], 240);
triangle(0, 0, -size, -size * 0.5, -size, size * 0.5);
pop();
}
// =====================================================================
// B-field arrows (background, ambient)
// =====================================================================
function drawBField() {
// Faint vertical arrows across the whole canvas to remind the reader
// that B is the static external field along +z.
push();
stroke(COLD[0], COLD[1], COLD[2], 50);
strokeWeight(1);
for (let x = 30; x < width; x += 60) {
line(x, height - 95, x, 90);
// small upward triangle at top
noStroke();
fill(COLD[0], COLD[1], COLD[2], 60);
triangle(x - 3, 92, x + 3, 92, x, 86);
stroke(COLD[0], COLD[1], COLD[2], 50);
}
pop();
}
// =====================================================================
// Ensemble lattice (right half)
// =====================================================================
function drawLattice() {
// 4 columns x 3 rows of small spin cones, plus net-magnetization arrow.
push();
// Compute net magnetization Mx, My, Mz across the ensemble.
let Mx = 0, My = 0, Mz = 0;
for (let i = 0; i < ensemble.length; i++) {
Mx += ensemble[i].x;
My += ensemble[i].y;
Mz += ensemble[i].z;
}
Mx /= ensemble.length;
My /= ensemble.length;
Mz /= ensemble.length;
for (let i = 0; i < ensemble.length; i++) {
const col = i % ENS_COLS;
const row = Math.floor(i / ENS_COLS);
const cx = latX + col * (latW / ENS_COLS) + (latW / ENS_COLS) / 2;
const cy = latY + row * (latH / ENS_ROWS) + (latH / ENS_ROWS) / 2 - 18;
drawCone(cx, cy, ensemble[i]);
}
// Net magnetization arrow centered under the lattice.
const baseX = latX + latW / 2;
const baseY = latY + latH - 8;
drawNetArrow(baseX, baseY, Mx, My, Mz);
// Labels.
noStroke();
fill(...DIM);
textSize(11);
textAlign(CENTER, TOP);
text('ensemble: 12 spins precessing in B', latX + latW / 2, latY - 18);
textSize(10);
fill(...DIM);
text('net M arrow (mean of ensemble)', baseX, baseY + 10);
pop();
}
function drawCone(cx, cy, s) {
// Top-down view: project (x, y, z) but flatten so we always see the
// tip's (x, y) location on a small circle, and color-code by z.
push();
translate(cx, cy);
// Cone outline circle (the equator-projected circle of radius |Sxy|)
const Sxy = Math.sqrt(s.x * s.x + s.y * s.y);
noFill();
stroke(COLDER[0], COLDER[1], COLDER[2], 160);
strokeWeight(1);
ellipse(0, 0, conR * 2 * Sxy, conR * Sxy); // squashed (axonometric)
// Z-axis tick
stroke(STRUCT[0], STRUCT[1], STRUCT[2], 160);
strokeWeight(1);
line(0, -conR * 0.9, 0, conR * 0.9);
// Spin vector: from origin to (x, y) scaled, with z encoded as color.
const tipX = s.x * conR;
const tipY = -s.y * conR * 0.5; // axonometric squash for y
const zFrac = (s.z + 1) / 2; // 0 (down) .. 1 (up)
const r = lerp(COLDER[0], HOT[0], zFrac);
const g = lerp(COLDER[1], HOT[1], zFrac);
const b = lerp(COLDER[2], HOT[2], zFrac);
stroke(r, g, b, 230);
strokeWeight(2);
line(0, 0, tipX, tipY);
noStroke();
fill(r, g, b, 230);
circle(tipX, tipY, 5);
pop();
}
function drawNetArrow(cx, cy, Mx, My, Mz) {
// Small horizontal magnetization-vector visualization. Length encodes
// |M|, color encodes Mz (longitudinal vs transverse magnetization).
push();
translate(cx, cy);
const mag = Math.sqrt(Mx * Mx + My * My + Mz * Mz);
const L = mag * 80; // pixels
// Direction in the x-y plane only (so we see dephasing as shrinking).
const ang = Math.atan2(-My, Mx);
rotate(ang);
stroke(...ACCENT);
strokeWeight(3);
line(-L / 2, 0, L / 2, 0);
// arrowhead
noStroke();
fill(...ACCENT);
triangle(L / 2, 0, L / 2 - 8, -4, L / 2 - 8, 4);
pop();
}
// =====================================================================
// Input handling
// =====================================================================
function keyPressed() {
// 1..4 swap species; r re-seeds the spins to the current tilt.
for (let i = 0; i < SPECIES.length; i++) {
if (key === SPECIES[i].key) {
speciesIdx = i;
seedSpins(thetaSlider.value());
}
}
if (key === 'r' || key === 'R') {
seedSpins(thetaSlider.value());
}
}
// =====================================================================
// HUD
// =====================================================================
function drawHUD() {
const B = bSlider.value();
const sp = SPECIES[speciesIdx];
const omegaHz = Math.abs(sp.gamma2pi * B); // |gamma| * B / (2 pi), in MHz
const T2 = t2Slider.value();
const tilt = thetaSlider.value();
// ----- Top-left: title + Wikitube URL (Betterfire Standard rule 2)
noStroke();
fill(FG);
textAlign(LEFT, TOP);
textSize(22);
text(TITLE, 14, 14);
fill(...DIM);
textSize(12);
text('Wikitube microsim . en.wikitube.io/wiki/Spin_(physics)', 14, 40);
// ----- Top-right: control hints ----------------------------------
textAlign(RIGHT, TOP);
textSize(10);
fill(...DIM);
text('keys 1-4 swap species', width - 14, 14);
text('r = re-seed spins', width - 14, 26);
text('drag the sliders', width - 14, 38);
// ----- Slider labels (left column) -------------------------------
// Sliders sit at y = height - 70, -45, -20 (set in setup).
textAlign(LEFT, CENTER);
textSize(11);
fill(...DIM);
text('B = ' + nf(B, 0, 2) + ' T', 210, height - 70 + 8);
text('theta = ' + nf(tilt, 0, 0) + ' deg', 210, height - 45 + 8);
text('T2 = ' + nf(T2, 0, 1) + ' s', 210, height - 20 + 8);
// ----- Species selector display ---------------------------------
// Display the four species choices with the active one highlighted.
textAlign(LEFT, BOTTOM);
textSize(11);
let sx = 380;
const sy = height - 88;
fill(...DIM);
text('species:', sx, sy);
sx += 50;
for (let i = 0; i < SPECIES.length; i++) {
if (i === speciesIdx) {
fill(...TRAJ);
} else {
fill(...DIM);
}
const label = '[' + SPECIES[i].key + '] ' + SPECIES[i].name;
text(label, sx, sy);
sx += 90;
}
// ----- Live readout (right of sliders) ---------------------------
textAlign(LEFT, BOTTOM);
textSize(11);
fill(...GAUGE);
text('omega_L / 2pi = ' + nf(omegaHz, 0, 2) + ' MHz (real)',
380, height - 60);
// Bloch readout: Sx, Sy, Sz of the hero spin.
text('Sx = ' + nf(S.x, 1, 3) + ' Sy = ' + nf(S.y, 1, 3) +
' Sz = ' + nf(S.z, 1, 3),
380, height - 42);
// Magnitude of transverse magnetization (the order parameter that
// T2 visibly shrinks each frame).
const Sxy = Math.sqrt(S.x * S.x + S.y * S.y);
text('|S_xy| = ' + nf(Sxy, 1, 3) + ' (transverse coherence)',
380, height - 24);
// ----- Bottom-right: canonical equation (Betterfire rule 4) ------
textAlign(RIGHT, BOTTOM);
fill(FG);
textSize(13);
text('omega = gamma * B [Larmor]', width - 14, height - 6);
}
// =====================================================================
// End of Spin_(physics).js -- Wikitube microsim, Helium room, Pattern E.
// =====================================================================
```
## Links (Wikipedia order)
<!-- injected from _registry/childlinks/Spin_(physics).json (2026-07-30T02:09:12Z) -->
`3D_rotation_group` · `Abraham_Pais` · `Albert_Messiah` · `Alfred_Landé` · `Alkali_metal` · `Angular_momentum` · `Angular_momentum_operator` · `Angular_velocity` · `Anomalous_magnetic_dipole_moment` · `Atomic_clock` · `Atomic_nucleus` · `Atomic_number` · `Basis_(linear_algebra)` · `Bell_test` · `Bohr_magneton` · `Born_rule` · `Bose–Einstein_statistics` · [[Boson]] · `Bra–ket_notation` · `C-symmetry` · `CERN` · `Casimir_effect` · `Casimir_element` · `Chirality_(physics)` · `Classical_mechanics` · `Clebsch–Gordan_coefficients` · `Compact_group` · `Complementarity_(physics)` · `Consciousness_causes_collapse` · `Consistent_histories` · `Cooper_pair` · `Copenhagen_interpretation` · `Cosmas_Zachos` · `Creation_and_annihilation_operators` · `D'Alembert_operator` · `David_Fairlie` · `David_J._Griffiths` · `Davisson–Germer_experiment` · `De_Broglie–Bohm_theory` · `Degenerate_energy_levels` · `Degenerate_matter` · `Delayed-choice_quantum_eraser` · `Delta_baryon` · `Density_matrix` · `Detailed_balance` · `Deuterium` · `Dimensionless_quantity` · `Dirac_equation` · `Dirac_spinor` · `Displacement_operator` · `Dot_product` · `Double-slit_experiment` · `Dynamic_nuclear_polarization` · `Ehrenfest_theorem` · `Einstein–Podolsky–Rosen_paradox` · `Electric_charge` · [[Electron]] · `Electron_magnetic_moment` · `Electron_shell` · `Elementary_particle` · `Elitzur–Vaidman_bomb_tester` · `Emission_spectrum` · `Energy_level` · `Energy_operator` · `Ensemble_interpretation` · `Erwin_Schrödinger` · `Euclidean_vector` · `Eugen_Merzbacher` · `Euler_angles` · `Evgeny_Lifshitz` · `Excited_state` · [[Fermion]] · `Fermi–Dirac_statistics` · `Fine-structure_constant` · `Fine-tuning_(physics)` · `Fine_structure` · `Force_carrier` · `Franck–Hertz_experiment` · `Fundamental_representation` · `G-factor_(physics)` · `Gamma_matrices` · `Gamma_ray` · `George_Uhlenbeck` · `Glossary_of_elementary_quantum_mechanics` · `Gluon` · `Graviton` · `Ground_state` · `Group_representation` · `Gyromagnetic_ratio` · `Gyroscope` · `Hadron` · `Half-integer` · `Hamiltonian_(quantum_mechanics)` · `Hanbury_Brown_and_Twiss_effect` · `Heisenberg_picture` · `Helicity_(particle_physics)` · [[Helium-4]] · `Hendrik_Lorentz` · `Hermitian_matrix` · `Hidden-variable_theory` · `Higgs_boson` · `History_of_quantum_field_theory` · `History_of_quantum_mechanics` · `Holstein–Primakoff_transformation` · `Interaction_picture` · `International_System_of_Units` · `Interpretations_of_quantum_mechanics` · `Intrinsic_and_extrinsic_properties` · `Introduction_to_quantum_mechanics` · `Isotopes_of_bismuth` · `Joule` · `Kilogram` · `Kinetic_energy` · `Klein–Gordon_equation` · `Kronecker_product` · `Ladder_operator` · `Landé_g-factor` · `Laser` · `Leiden_University` · `Lev_Pitaevskii` · `Levi-Civita_symbol` · [[Liquid_helium]] · `List_of_particles` · `Local_hidden-variable_theory` · `Lorentz_transformation` · `Mach–Zehnder_interferometer` · `Magnetic_field` · [[Magnetic_resonance_imaging]] · `Magnetism` · `Majorana_equation` · `Many-worlds_interpretation` · `Mathematical_formulation_of_quantum_mechanics` · `Matrix_mechanics` · `Matter` · `Measurement_in_quantum_mechanics` · `Measurement_problem` · `Measurement_uncertainty` · `Metre` · `Michael_Peskin` · `Momentum` · `Momentum_operator` · `Möbius_strip` · `Nanotechnology` · `National_Institute_of_Standards_and_Technology` · `Nature_(journal)` · `Neutrino` · [[Neutron]] · `Newton_(unit)` · `Nobel_Prize` · [[Nuclear_magnetic_resonance]] · `Objective-collapse_theory` · `Old_quantum_theory` · `Operator_(physics)` · `Parity_(physics)` · `Partial_derivative` · `Paul_Dirac` · `Paul_Ehrenfest` · `Pauli_equation` · `Pauli_exclusion_principle` · `Pauli_matrices` · `Pauli–Lubanski_pseudovector` · `Periodic_table` · `Phase-space_formulation` · `Phase_(waves)` · [[Photon]] · `Photon_polarization` · `Physical_Review_Letters` · `Physicist` · `Physics_Letters` · `Physics_Today` · `Planck_constant` · `Poincaré_group` · `Polarization_(waves)` · `Popper's_experiment` · `Position_operator` · `Precession` · `Pressure` · `Princeton,_New_Jersey` · `Princeton_University_Press` · `Projective_representation` · `QED:_The_Strange_Theory_of_Light_and_Matter` · `Quantization_(physics)` · `Quantum_algorithm` · `Quantum_amplifier` · `Quantum_biology` · `Quantum_bus` · `Quantum_cellular_automaton` · `Quantum_channel` · `Quantum_chaos` · `Quantum_chemistry` · `Quantum_circuit` · `Quantum_complexity_theory` · [[Quantum_computing]] · `Quantum_cosmology` · `Quantum_cryptography` · `Quantum_decoherence` · `Quantum_differential_calculus` · `Quantum_dynamics` · `Quantum_electrodynamics` · `Quantum_engineering` · `Quantum_entanglement` · `Quantum_eraser_experiment` · `Quantum_error_correction` · `Quantum_field_theory` · `Quantum_finite_automaton` · `Quantum_fluctuation` · `Quantum_geometry` · `Quantum_gravity` · `Quantum_image_processing` · `Quantum_imaging` · `Quantum_information` · `Quantum_jump` · `Quantum_key_distribution` · `Quantum_logic` · `Quantum_logic_gate` · `Quantum_machine` · `Quantum_machine_learning` · [[Quantum_mechanics]] · `Quantum_metamaterial` · `Quantum_metrology` · `Quantum_mind` · `Quantum_mysticism` · `Quantum_network` · `Quantum_neural_network` · `Quantum_nonlocality` · `Quantum_number` · `Quantum_optics` · `Quantum_programming` · `Quantum_sensor` · `Quantum_simulator` · `Quantum_spacetime` · `Quantum_state` · `Quantum_statistical_mechanics` · `Quantum_stochastic_calculus` · `Quantum_superposition` · `Quantum_teleportation` · `Quantum_tunnelling` · `Rarita–Schwinger_equation` · `Relational_quantum_mechanics` · `Relativistic_quantum_mechanics` · `Representation_theory_of_SU(2)` · `Rest_frame` · `Richard_Feynman` · `Robert_Resnick` · `Rotation_operator_(quantum_mechanics)` · `Rydberg_formula` · `Samuel_Goudsmit` · `Scalar_boson` · `Scattering` · `Schrödinger's_cat` · [[Schrödinger_equation]] · `Schrödinger_picture` · `Second` · `Sic` · `Singlet_state` · [[Sodium]] · `Special_relativity` · `Speed_of_light` · `Spherical_harmonics` · `Spin_angular_momentum_of_light` · `Spin_isomers_of_hydrogen` · `Spin_quantum_number` · `Spin_tensor` · `Spin_transistor` · `Spin_wave` · `Spinor` · `Spintronics` · `Spin–orbit_interaction` · `Spin–statistics_theorem` · `Standard_Model` · `Standard_deviation` · `State_function` · `Stern–Gerlach_experiment` · `Steven_Weinberg` · [[Superconductivity]] · `Superdeterminism` · `SymPy` · `Symmetry_in_quantum_mechanics` · [[Tensor]] · `Theory_of_relativity` · `Thomas_Curtright` · `Thomas_precession` · `Time_evolution` · `Timeline_of_quantum_computing_and_communication` · `Timeline_of_quantum_mechanics` · `Titanium_dioxide` · `Torque` · `Transactional_interpretation` · `Triplet_state` · [[Uncertainty_principle]] · `Universal_wave_function` · `W_and_Z_bosons` · `Wave_function` · `Wave_function_collapse` · `Wave_interference` · `Wave–particle_duality` · [[Wayback_Machine]] · `Werner_Heisenberg` · `Weyl_equation` · `Wheeler's_delayed-choice_experiment` · `Wigner's_friend` · `Wigner_D-matrix` · `Wolfgang_Pauli` · `Yrast` · `Zeeman_effect` · [[Zero-point_energy]] · `Zinc_oxide`
> **Room:** [[Helium]] · **Status:** ✅ shipped
## Overview
Spin is the intrinsic angular momentum carried by elementary particles, composite particles such as nuclei, and atoms. Unlike orbital angular momentum, spin is a relativistic quantum property with no classical analog: a particle of spin s carries a fixed magnitude |S| = hbar*sqrt(s(s+1)), and a measurement of its projection along any chosen axis yields one of 2s+1 discrete values m_s*hbar, with m_s in {-s, -s+1, ..., s}. The 1922 Stern-Gerlach experiment first revealed this quantization, and Pauli, Goudsmit, and Uhlenbeck formalized half-integer spin in 1925, leading to the Pauli exclusion principle and the spin-statistics theorem: particles with half-integer spin are fermions and obey Fermi-Dirac statistics, while integer-spin particles are bosons and obey Bose-Einstein statistics. This division governs the macroscopic identity of helium itself: bosonic He-4 (s = 0) condenses into a superfluid below 2.17 K, while fermionic He-3 (s = 1/2) superfluidizes only via Cooper pairing below 2.5 mK. In a magnetic field B, a spin precesses at the Larmor frequency omega = gamma*B, where gamma is the gyromagnetic ratio; this precession underlies [[Nuclear_magnetic_resonance|nuclear magnetic resonance]] (NMR), [[Magnetic_resonance_imaging|magnetic resonance imaging]] (MRI), and electron paramagnetic resonance (EPR), all of which exploit helium-cooled superconducting magnets. Spin also encodes the quantum bit in trapped-ion, superconducting-transmon, and nitrogen-vacancy quantum computers, every leading platform of which requires sub-Kelvin He-3/He-4 dilution refrigeration. Spin thereby links foundational [[Quantum_mechanics|quantum mechanics]], condensed-matter [[Physics|physics]], medical imaging, and [[Information|information]] technology through a single conserved quantity.
## See also
- Room hub: [[Helium]]
- p5.js Editor conventions: P5 JS EDITOR
- Wiki root: MAIN
---
*Scaffolded by `generative-microsim` from row 142 of the Helium sheet on 2026-05-14T16:51:04Z.*
<!-- CRAFT-LINK:START g12 -->
*Built to the [[WT!P5_js_Microsim_Master_Class|p5.js Master Class]].*
<!-- CRAFT-LINK:END -->
## Wikipedia : Wikitube
**Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Spin_%28physics%29) : [Wikitube](https://en.wikitube.io/wiki/Spin_%28physics%29)
## Previous hub tags
Tree parents: [[Helium-3]] · [[Hydrogen]] · [[Oxygen]] · [[Self-organization]].
Legacy hubs: none.
---
*Sources: 1 legacy note. Minted wave 1, 2026-07-30 (v1.6 order).*