📎 This supplementary article is a companion to §1.4 (The second — time standard). If you haven't read that section yet, read it first — the SI definition of the second and the rationale for choosing Cs-133 live there.

NIST-F1 cesium fountain atomic clock at NIST Boulder, Colorado
NIST-F1 cesium fountain at NIST Boulder — the primary US time and frequency standard. Right: schematic of the six cooling lasers, microwave cavity, and fluorescence detector.

Why cesium?

Each Cs-133 atom has one valence electron in its outer shell. The interaction of this electron with the nuclear spin splits the atomic ground state into two hyperfine sublevels. The energy gap between these sublevels corresponds exactly to a frequency of 9,192,631,770 Hz.

6²S₁/₂ (before splitting) F = 4 F = 3 Δν = 9,192,631,770 Hz (≈ 9.19 GHz microwave) Hyperfine splitting of the Cs-133 ground state

Since 1967, this number has been the official SI definition of the second: one second = this many oscillation cycles of the radiation emitted in the transition between the two hyperfine sublevels.

The key insight: an atomic clock creates time rather than measures it. What it really does is servo-lock a regular quartz oscillator to stay in phase with the atomic transition. If the quartz drifts slightly, the feedback loop corrects it. The result is a stream of one-second ticks that are locked to the atomic transition.

Overview before the details

Complete schematic of NIST-7 atomic clock showing cesium source, laser A/B, microwave cavity, detector, servomechanism, and frequency divider
Full schematic of the NIST-7 atomic clock (predecessor of NIST-F1). Bottom-left inset: Cs-133 atom close-up showing the electron / microwave interaction. NIST-7 did not yet use laser cooling — atoms moved as a thermal beam. NIST-F1 and F2 replaced this with the fountain design described below.

The atom's path, left to right: cesium source → Laser A (drops atoms to the lowest energy state) → microwave cavity (if the frequency is exactly right, atoms transition to the excited state) → Laser B (forces excited atoms to emit light) → detector (reads the emitted light) → servomechanism (corrects the microwave frequency) → frequency divider (turns 9.2 GHz into one-second ticks).

Now let's walk through each stage.

Step 1: Laser cooling

Schematic of a cesium fountain atomic clock
Schematic of a cesium fountain: six cooling lasers (bottom), microwave cavity (middle), fluorescence detector (top), and probe laser. Next to it, the actual NIST-F1 tower.

In modern cesium clocks like NIST-F2, cesium gas enters a vacuum chamber. Six infrared laser beams are aimed from six mutually orthogonal directions toward the center.

Each laser is tuned slightly below the atomic transition frequency (Doppler cooling). In each photon-atom collision, the laser transfers momentum opposite to the atom's motion. The result: the thermal motion of the atoms slows until their temperature drops to near absolute zero — a few microkelvin, around \( 0.5\ \mu\text{K} \).

The technique, called laser cooling or optical molasses, produces a small cloud of millions of nearly stationary atoms at the center of the chamber.

Step 2: Launching the fountain

By briefly and asymmetrically switching off the two vertical lasers, the cloud is gently launched upward — like water from a fountain. Launch velocity is a few meters per second.

Then all lasers switch off and the atoms move under gravity alone: they rise, hang for an instant, and fall back. Round-trip path length is about 1 m and total time of flight is about 1 s.

This fountain motion is what gives the design its name: cesium fountain.

Step 3: Quantum state selection

Before the atoms enter the measurement region, they must all be in the same magnetic sublevel (typically \( |F=3, m_F=0\rangle \)), otherwise the final signal will be contaminated by transitions of no interest.

This is done inside a magnetically shielded cavity: a short microwave pulse or a non-uniform magnetic field pushes atoms in the wrong state out of the beam, or transfers them to the target state.

Step 4: Excitation in the Ramsey cavity

This is the heart of the clock.

On the way up, atoms pass through a microwave resonant cavity; on the way down, they pass through it again. So they interact with the microwave field twice. This scheme is called Ramsey interferometry, or separated oscillatory fields.

The time delay between the two interactions (about 1 s, thanks to the up-and-down trajectory) makes the resonance line extremely narrow. The longer this interrogation time, the higher the final frequency precision — one of Norman Ramsey's clever inventions that earned him the 1989 Nobel Prize in Physics.

If the injected microwave frequency exactly equals 9,192,631,770 Hz, the maximum fraction of atoms transitions from \( |F=3\rangle \) to \( |F=4\rangle \). If the frequency is slightly off, only a fraction transitions. This gap is the correction signal.

Step 5: Fluorescence detection

After leaving the Ramsey cavity, atoms enter the detection region, passing through a probe laser tuned to an optical transition of the \( |F=4\rangle \) state.

Atoms that transitioned into this state in the Ramsey cavity absorb the probe light and re-emit it as fluorescence (scattered light). An optical detector — a photodiode or a photomultiplier tube — records the fluorescence intensity.

The more fluorescence, the more atoms transitioned — meaning the microwave frequency was closer to the true atomic transition frequency.

Step 6: Feedback loop and frequency lock

The photodiode signal feeds a feedback control loop. The system slightly dithers the microwave frequency to one side, then the other, of the resonance peak (the Ramsey fringe), and compares the fluorescence signal.

From this comparison, an error signal is generated and used to continuously correct the frequency of a quartz oscillator (or a digital synthesizer). The result: a quartz oscillator that stays locked to the atomic transition, and from which one-second ticks are derived.

Why is it so precise?

NIST engineers working on NIST-F2 wearing laser safety goggles
NIST engineers adjusting NIST-F2 — the safety goggles protect against the infrared cooling and probe lasers.

The reported uncertainty of NIST-F2 is around \( 5 \times 10^{-16} \) — meaning it would lose or gain about one second over 300 million years.

Most of this precision comes from two factors:

  1. Long interrogation time thanks to the fountain motion (which narrows the Ramsey fringe). In the previous generation (thermal beam clocks), this time was a few milliseconds; in the fountain design it's about 1 s.
  2. Cryogenic cooling of the microwave cavity with liquid nitrogen to about \( -193\ °\text{C} \), minimizing the error from blackbody radiation shift (the atomic transition energy shifts slightly due to thermal radiation from the environment).
NIST-F2 in operation with purple glow from laser cooling region
NIST-F2 in operation. The purple glow comes from the cooling lasers in the magneto-optical trap (MOT) region.

From the atomic clock to your computer — NTP

You might think all this precision is only useful to a physicist. But your own computer is using these atomic clocks right now.

The NTP (Network Time Protocol) is a hierarchy:

Result: your laptop's clock is ultimately tied to the precision of a cesium atomic clock — through a few intermediate hops.

A Python clock that keeps itself accurate via NTP

"""Self-syncing clock — pulls from time.nist.gov every 60 seconds.

Install:
    pip install ntplib
"""
import ntplib
import time
from datetime import datetime, timedelta, timezone

NTP_SERVERS = [
    'time.nist.gov',      # NIST — Stratum 1, backed by NIST-F2
    'ptbtime1.ptb.de',    # PTB (Germany) — Stratum 1
    'tick.usno.navy.mil', # US Naval Observatory — Stratum 1
]

def get_ntp_offset(server):
    """Return offset (seconds) between local clock and NTP server."""
    client = ntplib.NTPClient()
    resp = client.request(server, version=3, timeout=5)
    return resp.offset, resp.stratum, resp.delay

class AtomicSyncedClock:
    def __init__(self, resync_interval=60):
        self.offset = 0.0
        self.stratum = None
        self.last_sync = None
        self.resync_interval = resync_interval

    def sync(self):
        for server in NTP_SERVERS:
            try:
                offset, stratum, delay = get_ntp_offset(server)
                self.offset = offset
                self.stratum = stratum
                self.last_sync = time.time()
                print(f"[sync] {server}: offset={offset*1000:+.2f} ms, "
                      f"stratum={stratum}, rtt={delay*1000:.1f} ms")
                return True
            except Exception as e:
                print(f"[sync] {server} failed: {e}")
        return False

    def now(self):
        """UTC datetime with NTP offset applied."""
        return datetime.now(timezone.utc) + timedelta(seconds=self.offset)

    def run(self):
        self.sync()
        while True:
            if time.time() - (self.last_sync or 0) > self.resync_interval:
                self.sync()
            print(f"UTC: {self.now().isoformat(timespec='milliseconds')} "
                  f"(stratum {self.stratum})", end='\r', flush=True)
            time.sleep(0.05)

if __name__ == '__main__':
    AtomicSyncedClock(resync_interval=60).run()

Sample output:

[sync] time.nist.gov: offset=+3.42 ms, stratum=1, rtt=68.2 ms
UTC: 2026-07-03T10:34:52.148 (stratum 1)

offset says how far your laptop's clock drifts from the atomic clock. stratum=1 means we read from the primary source directly. rtt (round-trip-time) — smaller is better for precision.

See it live — a clock kept in sync via NTP

UTC — synced via timeapi.io (NTP)
00:00:00.000
Local drift: Last sync:

This widget re-syncs with timeapi.io (backed by NTP servers) every 60 seconds, and interpolates with your browser's timer between syncs. The Local drift value is the offset between your browser clock and the NTP-synced time — usually a few milliseconds, but can grow to seconds if your laptop hasn't synced for a while.

What you should be able to do

After this article you should be able to:

References

Have a question? 🤔

If something isn't clear or you have a question, ask it here. The answer will be published on this page.