Skip to content

VitalDB metrology atlas

Work in progress

Pre-release, open for review (v0.1.0, October 2026). This first public version accompanies a preprint and is released for review by the community and the dataset's custodians ahead of a peer-reviewed journal version. Comments are welcome as issues or discussions on GitHub.

Studies are still being added and revised, some numbers rest on small runs, and many questions are open. Every page says how its numbers are known. If you find something wrong, or can settle an open question, please contribute: corrections, better models and new studies are all welcome.

The studies, code and pages were developed with substantial assistance from an AI assistant (Claude, by Anthropic), under the author's direction and review. Mistakes may remain; how this atlas was made says more.

Every recorded value in the VitalDB open dataset (6,388 surgical cases, PhysioNet release 1.0.0) as a probability distribution over when it happened and what it was, with the studies that measured each part.

A record in VitalDB is a pair: a recorded time and a recorded value. In the language of metrology, each record is an indication of two measurands: when the thing it describes happened, and what its value was. Neither is recorded exactly. The time comes from one of a dozen clocks that drift and are corrected in jumps, and often describes a window that ended earlier; the value was rounded, sometimes heaped by hand, and measured by an instrument with its own error.

For every variable, this atlas states the measurand, the measurement model that links it to the recorded pair, and what is known about the measurand given a record, as a joint probability distribution over its true time and true value (the multivariate case of the GUM, Supplement 2). Every part of the model carries its evidence: the study it came from and how it was evaluated (measured from the data, or estimated and assumed). With the distributions known, uncertainty can be propagated through any calculation on the data (the GUM, Supplement 1). Aim and terms states this aim in full and maps the atlas onto the international vocabulary.

It is a metrology of recorded data: the measurements were made long ago, so each part of the model is reconstructed from the records themselves.

All clock rates are relative. Each is measured against another clock that also drifts, and the page says which. Every clock is linked, directly or through others, to the recorder PC (Recorder PC clock); its link to UTC cannot be observed in the release and is assumed, so no time here is metrologically traceable to UTC: the chain is broken at its first link.

System overview

VitalDB records each operating room with one PC running Vital Recorder. Every device sends its data to that PC, which stamps each record. The waveforms that matter most for timing come through SNUADC, a 500 Hz converter that samples the patient monitor's analogue outputs (ECG, arterial pressure, plethysmogram, CVP); the BIS monitor, the Primus anaesthesia machine and a handful of haemodynamic monitors send their own waveforms and numbers, each on its own clock. The patient monitor's numbers (heart rate, pressures, SpO₂) arrive as single values that describe a window of signal which ended seconds before their stamp.

So a time in VitalDB can be off in two ways: the clock that made it drifts and is corrected in jumps, and the value it is attached to describes an earlier interval. The chart below places every kind of time stamp on both axes.

A tree with UTC at the top, the recorder PC clock below it, a row of device clocks (Primus, CardioQ, SNUADC, BIS, hospital records) below that, and the clocks measured against the SNUADC (pulse oximeter frames, monitor output, pacemaker, Solar8000) at the bottom; each line labelled with a drift and a correction interval.
The timing graph: every clock in the atlas, placed one row below the clock it is measured against, with each link's drift and correction interval. Generated from the atlas's clock, link and parameter pages on every build, so it shows what the atlas currently holds; every box and label links to its page. All device rates are relative to the recorder PC, whose own link to UTC is assumed.
The links in the timing graph
# Link Clock Against Drift Corrected every Correction size Status
1 Recorder PC against UTC Recorder PC clock UTC 0.1–10 ppm (assumed) 8–24 h (assumed) — assumed
2 Primus against the recorder PC Primus clock Recorder PC clock +104 ppm about 7,230 s (2.0 h; p90 twice that) -0.016 s (whole 16 ms samples either way; median −16 ms (one sample back), p10–p90 −144 to +144 ms) measured
3 CardioQ against the recorder PC CardioQ clock Recorder PC clock — at most about 300 s; about 40 re-anchors per case — measured
4 CardioQ against SNUADC CardioQ clock SNUADC sample clock — — 0.4–4.4 s (p5–p95); matched-beat MAD 0.24 s (24 cases) measured
5 SNUADC (frequent-correction mode) against the recorder PC SNUADC sample clock Recorder PC clock -0.954 ppm — +5 to +15 ms (median +10), about one an hour (median 1.1 per hour per recording) measured
5 SNUADC (step mode) against the recorder PC SNUADC sample clock Recorder PC clock -63 ppm 2.08 h about 0.498 s true (paced: 0.4981–0.4988 s); −0.480 s on the stamps measured
6 BIS against the recorder PC BIS clock Recorder PC clock +25 ppm 8,192 s (2 h 16.5 min), ± 20 s in 95% of intervals 0.17 s median measured
7 BIS against SNUADC BIS clock SNUADC sample clock -72 ppm — — measured
8 Hospital records clock against the recorder PC Hospital records clock Recorder PC clock — — — assumed
9 Oximeter frames against SNUADC Pulse oximeter frame clock SNUADC sample clock +7 to +92 ppm by setup (medians over 42 PC keys); within 3 ppm of its setup's median in 89% of recordings — — measured
9 PPG content against the oximeter frames (the sawtooth) Pulse oximeter frame clock SNUADC sample clock 18–52 ppm by setup — 32.3 ms measured
10 Monitor output clock against SNUADC Monitor analogue output clock SNUADC sample clock −25.4 to −28.7 ppm (6 cases) — — estimated
11 Pacemaker against SNUADC Pacemaker clock SNUADC sample clock — — — measured
12 Solar8000 numerics against SNUADC Solar8000 clock SNUADC sample clock 0 s/h median (p10–p90 about ±0.5 s/h) — — measured

Measurement space: two axes, two kinds of error

Every variable is described on two axes, time and value, and on each by its accuracy (how far the record is from the truth: bias, drift, delay, instrument error) and its resolution (how finely it was recorded: sampling, rounding, heaping). Each variable page draws the four together.

Accuracy Resolution
Time 11 clocks and 14 links between them; 8 variables with a written chain from UTC, 25 with timing against the working reference the interval each value describes, the stamp grids (chart below)
Value Not yet described for any variable: it needs the instruments’ calibration records (why) 86 variables, 11 with fitted rounding models (Value)

Every time stamp: accuracy and resolution

Each kind of time stamp in the dataset, placed by how far it lies after the end of the interval its value describes, against the working reference (across), and by how wide that interval is (up). Drawn from the atlas data each time the site is built, so it follows every update; the same data drives the synchronisation planner.

The working reference

The working reference is SNUADC stamp-model time: the SNUADC sample clock, placed on the recorder PC's timeline by the stamp model (drift and corrections fitted, the signal lost at each correction added back). Every delay in the planner is measured against it. Its own error against the PC is a few milliseconds where the SNUADC's corrections are seen; in recordings that make no SNUADC correction it rests on the port's typical rate and can drift by about ±0.1 s per hour (Long SNUADC recordings with no correction at all). The PC's error against UTC is assumed.

What synchronising the clocks does

Six panels over 9 hours. Left column: sawtooth lines for SNUADC and BIS and a rising line for the Primus spanning about 3.5 seconds; burst lags ramping between minus 0.6 and minus 1.2 seconds; breath lags rising from minus 2 to plus 2 seconds. Right column: the same quantities flat near zero.
One recording (case 1216, 8.7 hours), before synchronisation (left) and after (right), on the same scales. Top: each clock's time minus the synchronised time. The SNUADC's stamps drift and are pulled back by half a second about every two hours; the BIS's stamps sit about 0.8 s off and are pushed forward every 8,192 s; the Primus drifts about 4 s over the recording and steps at its airway-pressure pauses (dotted lines). After synchronisation the typical error left is about 3 ms (SNUADC), 42 ms (BIS) and 55 ms (Primus, whole-release medians; bands). Middle: the same electrocautery and muscle bursts seen in the ECG and the EEG, as recorded and on the synchronised times, a check independent of the correction. Bottom: the airway-to-central-venous pressure lag of the breath cycle, as recorded and, after, as the error left when each 10-minute window is predicted from all the others.

Across the whole release, for every link a shared signal can check:

Three histograms on a log time axis. In each the grey "as recorded" distribution sits to the right, at hundreds of milliseconds to seconds, and the blue "synchronised" distribution sits to the left, at tens of milliseconds for BIS and the Primus against SNUADC, and a few hundred milliseconds for the Primus against the PC.
Timing error per window across the whole release, as recorded (grey) and after synchronisation (blue), on a log scale; dashed lines mark the medians. Each link is checked by a signal both clocks record, which never enters the correction it tests. BIS against SNUADC, by electrocautery and muscle bursts in the ECG and the EEG: median 794 ms to 42 ms (2,737 recordings, 10-minute windows). Primus against SNUADC, by the breath cycle in airway pressure and CVP: 378 ms to 55 ms (1,067 recordings; each window predicted from all the others, a line per stretch between AWP pauses). Primus against the PC, by PC-stamped PIP values: 450 ms to 238 ms (172 recordings, 30-minute blocks). The "before" for both Primus links has each recording's own offset removed, so it understates the raw error.

Citing

If you use the atlas, please also cite the data:

  • Lee H-C, Park Y, Yoon SB, Yang SM, Park D, Jung C-W. VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients. Sci Data. 2022;9:279. doi:10.1038/s41597-022-01411-5
  • Lee H-C, Jung C-W. VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients (version 1.0.0). PhysioNet. 2022. doi:10.13026/czw8-9p62
  • Pollard T, Moody BE, Lehman L, Gow B, Fernandes C, Xie C, Johnson A, Mark RG, Heldt T. PhysioNet as a global platform for biomedical research. Nature Health. 2026. doi:10.1038/s44360-026-00096-z

The data's licence, what the atlas contains and how the atlas may be reused are on Data and licence.

Key numbers

Parameter Value Status From
BIS drift against the recorder PC 25 ppm (p10–p90 12 to 50; 5th–95th 7.3–51.1 ppm; census fit of 4,728 recordings median 21.1 ppm) measured The stamp sawtooth model for SNUADC and BIS
Solar8000 HR delay, late group 4.2 s (± 0.65 SD; 64% of classified cases) measured Two heart-rate delay groups, one poll apart
PPG sawtooth rate 18–52 ppm by setup measured The PPG sawtooth and its correction
Primus drift against the recorder PC, from breath matching 104 ppm (p10–p90 28 to 184; 178 recordings; whole-recording lines give +87 ppm median in 1,060 (p10–p90 −49 to +229)) measured The Primus ventilator against SNUADC, by breaths
Signal lost at a SNUADC step-mode correction 17.7 ms (range 17.2 to 18.2; n = 3; 3 corrections in 2 paced cases; ECG–EEG bursts give 13.0 ± 1.7 ms) measured Paced ECG as an independent clock
SNUADC step-mode correction interval 2.08 h (5th–95th 1.65–3.57 h between resets; per-recording means p10–p90 1.68–3.07 h) measured The stamp sawtooth model for SNUADC and BIS
SNUADC step-mode drift −63 ppm (p10–p90 −79 to −44; 5th–95th −80.3 to −36.9 ppm; medians of −46 to −74 ppm by serial port) measured The stamp sawtooth model for SNUADC and BIS
EEG–ECG timing error after the stamp model 42 ms median, p90 150 ms (17 ms and 79 ms with the recording's own bursts) measured The stamp sawtooth model for SNUADC and BIS

Plan a multi-signal analysis

The synchronisation planner takes the variables an analysis uses and reports how well their times line up, how we know, and what window sizes keep cross-modal features meaningful.

What is in the atlas

Clocks 11 Anything that keeps time: a crystal, a computer clock, a frame clock, a pacemaker.
Devices 14 Hardware or software that produces signals.
Variables 136 Every recorded quantity: a waveform, a numeric, an event, a clinical field, a lab result. Each is described on two axes, time and value, each with its accuracy and its resolution.
Clock links 14 How one clock relates to another: drift and correction. Every rate is relative to against.
Parameters 49 One number the atlas relies on, with its uncertainty and where it came from.
Studies 69 One piece of work that produced insight: a mini report.
Observations 54 A general fact about the dataset's timing or recording, with its evidence and what it means.
Methods 9 A methodology group: studies that get at timing the same way.
Techniques 12 A reusable building block that studies share.
Worked examples 14 Common analyses worked through with and without the atlas's corrections, with code to reproduce them: where clock alignment or rounding changes the answer.
Software 8 The code behind the studies, importers and tools. Code paths in studies link into these repositories.

The whole atlas is also one machine-readable file: vitaldb.metrology.json. Every number carries its status (measured, derived, estimated or assumed), its spread and the study it came from.