Bad-Channel Detective
Mark the bad channels in five 30-second segments, then open the metric panels and compare your call with an objective detector.
2 claims on this page are unverified. TODO(confirm) marks a specific statement the author has not yet checked against a
primary source. Everything else on this page has been reviewed. Treat a marked claim as
provisional and go to the cited source rather than quoting the sentence.
Modes: default — the widget below runs in default. Use Share state to put the exact view in the URL.
What it does
Five 30-second multichannel segments are shown one at a time, with nothing but the traces. You mark the channels you would exclude. Then you reveal the metric panels — flatness, robust amplitude deviation, neighbour correlation, RANSAC predictability, high-frequency noise ratio and dropout fraction — and compare your call with the flags an objective detector produced. Every metric and every threshold is precomputed and shipped with the segments, so the panels are the detector’s actual numbers, not a re-implementation in the browser.
The point of the two-pass design is that the eye and the metrics fail differently. A channel with brief intermittent dropouts is easy for a detector and easy to scroll past; a channel that is clean but recording the wrong thing is easy for a reader and invisible to every criterion in the table.
Controls
| Control | What it sets |
|---|---|
| Segment | Which of the five 30-second segments is shown |
| Mark bad / good | Toggle a channel’s flag (click the trace or its label; keyboard-operable) |
| Metric panel | Which criterion’s per-channel values are displayed, with its threshold line |
| Reveal | Show the reference flags and which criterion fired for each |
| Scale, time window | Display sensitivity and page length, as in the raw scroller |
What to look for
default
- A flat channel is obvious in the metric panel and easy to miss on screen at a scale set by the rest of the montage.
- The criteria disagree with each other, and the disagreement is informative: a channel flagged by one criterion in one window is a different problem from a channel flagged by four throughout.
- Low neighbour correlation catches a channel recording something the rest of the head is not; it can never catch a bridged pair, whose correlation is higher than average.
- Interpolation quality depends on the neighbourhood: a bad channel in the middle of the cap is well surrounded, one at the montage edge or inside a cluster of other bad channels is not.
- The count of bad channels is less informative than their arrangement — look at where they are before deciding whether the recording is usable.
Used in
- L2.2 Channel locations and bad channels (
default)
Data provenance
Five 30-second segments from public research-cap recordings — ds-eegbci (EEG Motor Movement/Imagery Dataset, 64 channels, 160 Hz, no hardware filters; ODC-By 1.0 on PhysioNet, CC0 on the OpenNeuro mirror) and ds-dortmund (Dortmund Vital Study resting EEG, 64 channels, CC0). At least one segment contains a genuinely bad channel; one contains a planted flat channel and is therefore a labelled synthetic derivative, carrying synthetic: true, derived_from and a modifications list in its sidecar (§4.5), which the frame’s provenance line shows.
The per-channel metrics, thresholds and reference flags are computed in Python and shipped in segments.json; the widget only reads them. The flags carry label_source: algorithmic until the author reviews them, and the JSON records the detector that produced them.
TODO(confirm): the exact subjects, runs and segment start times, and the basenames of the five binary assets, are read from data/manifest.json once data/scripts/extract_p2_widgets.py has run; the frame’s provenance line is the authority.
Open the code
site/src/components/widgets/w-bad-channel-detective/ — Widget.svelte, index.ts, README.md. Repository link: TODO(confirm) (GitHub org/repo, §13 item 3).