Teaching module: a reconstruction you can check
A 60–90 minute graduate lab session. Students reconstruct one hologram, then check that someone else's result is the same run. No accounts, no installs beyond Python.
Learning objectives
By the end, students can:
- Name the four settings a hologram reconstruction needs and their units.
- Run a reconstruction from a browser and from Python.
- Read a quality report and say what a
failband does and does not mean. - Rerun a reconstruction and decide, from its IDs and its arrays, what two results do and do not have in common.
- State what a provenance record does not establish.
Materials
- The sample hologram: https://api.apertureapi.com/static/samples/inline-sample-512.png
- The reproducibility bundle: https://api.apertureapi.com/static/samples/reproducibility-bundle.zip (the sample, its settings,
run.pyand a reference output from the live service) - Python 3 with
requestsandnumpy
Lesson plan
| Time | Activity |
|---|---|
| 0–10 min | Introduction: what a hologram records; why "how was this made?" matters in a paper |
| 10–25 min | Browser run: upload the sample at https://api.apertureapi.com/ with wavelength 0.635 µm, pixel pitch 1.85 µm, mode inline, focus range 0.5–3.0 mm |
| 25–45 min | Python run: run.py from the bundle; open reconstruction_data.npz and plot the phase |
| 45–70 min | Provenance check: compare your provenance.json and evidence.json against the bundle's reference output (see RECOMPUTE.md) |
| 70–90 min | Worksheet and discussion |
The public path allows 5 runs per IP address per hour. A class sharing one network address should run the browser step in pairs, or let the instructor run it once and share the ZIP.
Worksheet
- Which setting is in micrometres, and what goes wrong if you enter 635 instead of 0.635?
- Where did autofocus land (
pdhm_metadata.json)? How close is that to the 1.5 mm the sample was made at? - What is
overallinquality_report.json? Which metric set it? - Is your
provenance_idthe same as the reference's? What three things does it commit to? - Is your
evidence_report_idthe same? Comparebuild_idtoo. Then loadreconstruction_data.npzfrom both ZIPs and compare the phase arrays withnumpy.array_equal. What does a matching provenance ID tell you, and what does it not? - Find the section of
evidence.jsonthat lists what isnot-yet-established. Name two items. - Write the methods sentence you would put in a paper for this run.
Instructor notes
- Matching IDs show the same input, settings and software were used. They say nothing about whether the result is correct.
- Expect
provenance_idto match andevidence_report_idand the arrays to differ. On 2026-10-12 two runs of this sample on the same build gave the same provenance ID but different output arrays and quality metrics. The provenance ID commits to the input, settings and software, not to the outputs. This is the lesson's best discussion point: identity of a run is not reproducibility of its result. - A
failband on the in-line sample is expected and is a good discussion point: the service reports image problems instead of hiding them. - The sample is simulated. Its 1.5 mm distance is known by construction, which is why it works for checking autofocus.
What not to conclude
- Not that the reconstruction is accurate. Accuracy and repeatability are not established for any physical setup, and the service says so in every report.
- Not that matching provenance IDs mean matching results. They show the same input, settings and software were used, nothing more.
- Not that results on the simulated sample carry over to a real instrument.
Next step
Instructors who want the session on their own lab's frames can write to system@apertureapi.com. See also Reproducibility bundle and Methods supplement.