# 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).*