Case study, page T-0059
Held for retake, version 2Normal ECG
PTB-XL record 20671, a woman aged 66. A public research ECG from Germany, printed on A4, photographed by TraceRead's photo simulator and read end to end. Below is the AI first read, next to the original recording and what the dataset's cardiologists recorded.
0.01
median match with the original recording
0.14 after lining up by up to a tenth of a second
0 of 2
cardiologists' statements that TraceRead AI also flagged
12
extra patterns flagged for the doctor to keep or remove
78
heart rate from the photo, beats a minute
62 on the original recording
Hold rule version 2 holds this photo for a retake. No first read is given.
- The flattened page is stretched by a factor of 2.20 along one side, which suggests the page was read a quarter turn wrong.
- The trace was found along only 31 percent of the length of a typical lead.
Version 1 of the rule let this photo through. The first read it produced is kept below, marked as withdrawn, so you can see what went wrong.
This page was read wrongly
T-0059 was read wrongly (median correlation 0.015, 0.139 with a shift) but was not held for retake: the layout match score was 0.926 (held below 0.888), the AI's own uncertainty was 0.479 (held above 0.497) and 0 of 12 calibration pulses were read.
Withdrawn: what version 1 produced
The first read version 1 gave, now withdrawn
Hover a lead to see how closely the red rebuilt line follows the original recording. Untick the box to see the page without it.

Numbers under each lead: how closely the rebuilt line follows the original recording, where 1.00 is a perfect match. Median for this page: 0.01.
No first read is given for this photo. What follows is what version 1 produced, kept so you can see what went wrong.
PTB-XL record 20671, a woman aged 66. A4 paper, 12 rows of one lead, pulses read 0 of 12.
Measures
| Measure | From the photo | Original recording | Reference program |
|---|---|---|---|
| Heart rate (beats a minute) | 78 | 62 | |
| PR interval (ms) | 198 | 134 | |
| QRS width (ms) | 195 | 94 | |
| QT interval (ms) | 404 | 400 | |
| QTc, corrected for heart rate (ms) | 441 | 405 | |
| Heart axis (degrees) | 59 | 73 |
Patterns flagged, with TraceRead AI's score
First degree AV block
the signal takes a little longer than usual to pass from the upper chambers to the lower chambers
20Atrial fibrillation
an irregular rhythm where the upper heart chambers quiver
16Anteroseptal infarct pattern
a pattern linked to damage to the front wall of the heart muscle and the wall between the lower chambers
10Unspecific ST changes
small changes in the middle part of the beat that do not point to one cause
8Incomplete right bundle branch block
a milder delay of the signal on its way to the right lower chamber
8Unspecific wide QRS
the signal spreads slowly inside the lower chambers, so the main spike is wide
8Left atrial enlargement
the upper left chamber may be larger or under more strain than usual
5Pacemaker rhythm
the heartbeat is set by an artificial pacemaker that is working as expected
4Sinus arrhythmia
the heart rate speeds up and slows down a little, often with breathing, which is often normal
3Anterolateral infarct pattern
a pattern linked to damage to the front and side wall of the heart muscle
3Inferolateral infarct pattern
a pattern linked to damage to the bottom and side wall of the heart muscle
2Q waves present
a small downward dip at the start of the main spike, which can be normal or can follow damage to the heart muscle
2
Also checked, below the flag line: Sinus rhythm (35), Abnormal QRS (14), Early beats from the lower chambers (11).
What the dataset's cardiologists recorded for this ECG
- Normal ECG
- Sinus rhythm
Against the cardiologists
TraceRead AI and the dataset's cardiologists, side by side
TraceRead AI flagged 12 patterns. 0 of them are also among the dataset's statements. Not in the dataset's statements: First degree AV block, Atrial fibrillation, Anteroseptal infarct pattern, Unspecific ST changes and 8 more. In the dataset but not flagged: Normal ECG and Sinus rhythm.
Found by both 0
None of the cardiologists' statements was flagged.
Recorded by the cardiologists only 2
Normal ECG
A heartbeat pattern that looks normal.
Sinus rhythm
The usual rhythm, started by the heart's natural pacemaker.
35
Flagged by TraceRead AI only 12
First degree AV block
The signal takes a little longer than usual to pass from the upper chambers to the lower chambers.
20Atrial fibrillation
An irregular rhythm where the upper heart chambers quiver.
16Anteroseptal infarct pattern
A pattern linked to damage to the front wall of the heart muscle and the wall between the lower chambers.
10Unspecific ST changes
Small changes in the middle part of the beat that do not point to one cause.
8Incomplete right bundle branch block
A milder delay of the signal on its way to the right lower chamber.
8Unspecific wide QRS
The signal spreads slowly inside the lower chambers, so the main spike is wide.
8Left atrial enlargement
The upper left chamber may be larger or under more strain than usual.
5Pacemaker rhythm
The heartbeat is set by an artificial pacemaker that is working as expected.
4Sinus arrhythmia
The heart rate speeds up and slows down a little, often with breathing, which is often normal.
3Anterolateral infarct pattern
A pattern linked to damage to the front and side wall of the heart muscle.
3Inferolateral infarct pattern
A pattern linked to damage to the bottom and side wall of the heart muscle.
2Q waves present
A small downward dip at the start of the main spike, which can be normal or can follow damage to the heart muscle.
2
The doctor's review
What the reading doctor would check here
Worked out from this run's own numbers: where the rebuilt line strays, which measures moved, and which flags to keep or remove.
- 1The rebuilt line strays from the original recording in V6 (0.06), V5 (0.01), V4 (-0.03), V3 (0.08) and V2 (-0.00) and 7 more. Compare those leads with the paper first.
- 2Heart rate: 78 from the photo against 62 on the original recording (beats a minute).
- 3PR interval: 198 from the photo against 134 on the original recording (ms).
- 4QRS width: 195 from the photo against 94 on the original recording (ms).
- 5QTc, corrected for heart rate: 441 from the photo against 405 on the original recording (ms).
- 6The cardiologists recorded normal ECG and sinus rhythm, which TraceRead AI did not flag.
- 7TraceRead AI flagged 12 patterns the cardiologists did not record: first degree AV block, atrial fibrillation, anteroseptal infarct pattern, unspecific ST changes, incomplete right bundle branch block, unspecific wide QRS, left atrial enlargement, pacemaker rhythm, sinus arrhythmia, anterolateral infarct pattern, inferolateral infarct pattern and Q waves present. The doctor keeps or removes each one.
- 8TraceRead decided that the page is turned by 1 quarter turn and read it that way.
- 9No calibration pulse could be read, so the height scale is assumed to be the usual 10 millimetres for each millivolt.
- 10Only 0 of 12 calibration pulses could be read.
- 11The trace was found along less than nine tenths of its length in I (39%), II (37%), III (36%), aVR (41%) and 8 more.
- 12Hold rule version 2 holds this photo for a retake, so there is no first read to review. Version 1 let it through.
An AI first read is not the last word.
- A qualified doctor reviews every AI first read. Nothing reaches a patient until a doctor signs it.
- Do not rely on TraceRead alone in an emergency.
- A normal AI first read does not rule out heart disease.
- For adults, 18 and over.
Stage by stage
How TraceRead read this page
Every step of this run, with what went in and what came out.
Step 1: the photo
On the phoneWhat went in: one photo of a printed ECG
PTB-XL record 20671, a public research ECG from Germany, was printed as page T-0059 on A4 at 25 mm a second and 10 mm per millivolt. TraceRead's photo simulator then took a photo of it: tilted, lit unevenly, slightly blurred, with sensor noise and JPEG compression, the way a phone camera would.
This record was in PTB-XL's test set, so TraceRead AI never saw it during training. The person was a woman aged 66. Age and sex are all TraceRead keeps.

Step 2: page finder
TraceRead AIFind the paper and how it is turned
TraceRead AI looks at the whole photo and marks the four corners of the page, and which way up it is. Fixed code then measures the printed millimetre grid to correct the scale and the tilt, and makes the page flat.
- Page found
- yes
- Turned
- 90 degrees
- Paper
- A4

Step 3: layout reader
TraceRead AIWork out where each lead sits
Every row of a printout starts with a calibration pulse, a small square step that is 10 mm tall for 1 millivolt. TraceRead AI finds the pulses, and fixed code matches them against 14 known page layouts to work out where each of the 12 leads sits and how long it runs.
- Layout
- 12 rows of one lead
- Calibration pulses read
- 0 of 12
- Height of 1 millivolt
- 10 mm
- Paper speed used
- 25 mm a second
- Layout match
- 0.926
Warnings this step raised
- TraceRead decided that the page is turned by 1 quarter turn and read it that way.
- No calibration pulse could be read, so the height scale is assumed to be the usual 10 millimetres for each millivolt.
- Only 0 of 12 calibration pulses could be read.
- The trace was found along less than nine tenths of its length in I (39%), II (37%), III (36%), aVR (41%) and 8 more.
Step 4: trace rebuild
TraceRead AIRebuild every lead as a digital signal
TraceRead AI marks which pixels are trace ink. Fixed code then follows the ink of each lead, column by column, and turns it into millivolts, 500 points a second. The rebuilt line is drawn back over the paper so a doctor can see at a glance if a lead was misread.
Because this ECG is public, we can check the rebuilt signal against the original recording. 1.00 would be a perfect match; the second number allows the two to be lined up by up to a tenth of a second.
| Lead | Seconds shown | Ink found | Match | Lined up |
|---|---|---|---|---|
| V6 | 0 to 10 | 28% | 0.06 | 0.12 |
| V5 | 0 to 10 | 19% | 0.01 | 0.05 |
| V4 | 0 to 10 | 16% | -0.03 | 0.09 |
| V3 | 0 to 10 | 15% | 0.08 | 0.09 |
| V2 | 0 to 10 | 18% | -0.00 | 0.03 |
| V1 | 0 to 10 | 23% | 0.01 | 0.07 |
| aVF | 0 to 10 | 35% | -0.05 | 0.03 |
| aVL | 0 to 10 | 34% | -0.02 | -0.02 |
| aVR | 0 to 10 | 41% | -0.07 | 0.02 |
| III | 0 to 10 | 36% | -0.01 | 0.08 |
| II | 0 to 10 | 37% | -0.01 | 0.03 |
| I | 0 to 10 | 39% | -0.08 | 0.01 |
Median match for this page: 0.01.

Step 5: coverage map
Fixed codeMark which seconds the paper shows
A 3x4 printout shows each lead for only 2.5 of the 10 seconds the machine recorded. The coverage map tells the pattern finder exactly which seconds of each lead it has, so a part that is not on the paper is never read as a flat line.
Step 6: hold for retake
Fixed codeDecide whether the photo can be read
Before any pattern is read, a fixed hold rule decides whether the rebuild can be trusted. Version 1 looked only at how well the page matched a known layout and how unsure the AI was about the five main groups. Version 2 also checks the calibration, the page shape, how much trace was found, whether the overlapping lead II pieces agree, and clipped or flat parts. If the rebuilt trace looks unreliable, it asks for a new photo instead of giving a first read. Both versions' decisions for this page are shown below.
The layout match score was 0.926 (a photo is held back when the score is below 0.888) and 0 of 12 calibration pulses were read. The AI's own uncertainty about the five main heart groups was 0.479 (a photo is held back above 0.497). Neither check fired, so the photo is used.
- The flattened page is stretched by a factor of 2.20 along one side, which suggests the page was read a quarter turn wrong.
- The trace was found along only 31 percent of the length of a typical lead.
| Check | Value | Limit | Result |
|---|---|---|---|
| page_found | passed | ||
| gain_standard | none | 0.05 | passed |
| paper_speed | none | 2434 | passed |
| layout_match | 0.926 | 0.889 | passed |
| page_shape | 2.203 | 1.7 | failed |
| ink_median | 0.311 | 0.9 | failed |
| coverage | 1 | 1 | passed |
| lead_ii_agree | none | 0.49 | passed |
| lead_ii_amplitude | none | 0.5 | passed |
| goldberger | 0.891 | 1.45 | passed |
| edge_clipping | 0.023 | 0.027 | passed |
| flat_run | 0.132 | 0.34 | passed |
| lead_ii_raw | none | 0.2 | passed |
Step 7: measures
Fixed codeMeasure the heartbeat
Fixed code finds every beat, lines the leads up and measures them together. The same code run on the original recording shows how much the photo changed each number, and a reference ECG program from the PTB-XL+ dataset gives a second opinion.
| Measure | From the photo | Original recording | Reference program |
|---|---|---|---|
| Heart rate (beats a minute) | 78 | 62 | 62 |
| PR interval (ms) | 198 | 134 | 122 |
| QRS width (ms) | 195 | 94 | 96 |
| QT interval (ms) | 404 | 400 | 412 |
| QTc, corrected for heart rate (ms) | 441 | 405 | 416 |
| Heart axis (degrees) | 59 | 73 | 81 |
Step 8: pattern finder
TraceRead AIScore 71 patterns and flag the ones that pass their line
TraceRead AI reads the 12 rebuilt leads and the coverage map together and scores 71 patterns of rhythm, conduction, thickened heart muscle and ST and T changes. A pattern is flagged when its score passes a line set in advance on other ECGs, never on this one. The lines are set so that patterns are not missed, which is why a pattern can be flagged with a low score, and why some flags are wrong: the doctor decides.
What the dataset's cardiologists recorded for this ECG
- Normal ECG
- Sinus rhythm
TraceRead AI flagged 12 patterns. 0 of them are also among the dataset's statements. Not in the dataset's statements: First degree AV block, Atrial fibrillation, Anteroseptal infarct pattern, Unspecific ST changes and 8 more. In the dataset but not flagged: Normal ECG and Sinus rhythm.
TraceRead AI's score for each pattern, from 0 to 100. The thin line is where that pattern gets flagged.
Sinus rhythm
below the linethe usual rhythm, started by the heart's natural pacemaker
35First degree AV block
flaggedthe signal takes a little longer than usual to pass from the upper chambers to the lower chambers
20Atrial fibrillation
flaggedan irregular rhythm where the upper heart chambers quiver
16Abnormal QRS
below the linethe main spike of each beat has an unusual shape or width
14Early beats from the lower chambers
below the lineextra beats that start early in the lower chambers
11Anteroseptal infarct pattern
flaggeda pattern linked to damage to the front wall of the heart muscle and the wall between the lower chambers
10Unspecific ST changes
flaggedsmall changes in the middle part of the beat that do not point to one cause
8Incomplete right bundle branch block
flaggeda milder delay of the signal on its way to the right lower chamber
8Unspecific wide QRS
flaggedthe signal spreads slowly inside the lower chambers, so the main spike is wide
8Left atrial enlargement
flaggedthe upper left chamber may be larger or under more strain than usual
5Pacemaker rhythm
flaggedthe heartbeat is set by an artificial pacemaker that is working as expected
4Sinus arrhythmia
flaggedthe heart rate speeds up and slows down a little, often with breathing, which is often normal
3Anterolateral infarct pattern
flaggeda pattern linked to damage to the front and side wall of the heart muscle
3Inferolateral infarct pattern
flaggeda pattern linked to damage to the bottom and side wall of the heart muscle
2Q waves present
flaggeda small downward dip at the start of the main spike, which can be normal or can follow damage to the heart muscle
2
See TraceRead read a paper ECG
We show you TraceRead reading public research ECGs, step by step, and talk through how your team prints, photographs and reads ECGs today.