Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
539 commits
Select commit Hold shift + click to select a range
e366c1f
Add Show2D paged galleries
bobleesj Jul 7, 2026
ec2bc73
Fix Show3D live panel reorder drag
bobleesj Jul 7, 2026
be1c8aa
Add Show3D reorder drag ghost
bobleesj Jul 7, 2026
3d0aab2
Add Show3D paged galleries
bobleesj Jul 7, 2026
0fc832c
Expand widget browser smoke coverage
bobleesj Jul 7, 2026
2134f50
Add Show4DSTEM compare grid mode
bobleesj Jul 7, 2026
5cb174c
Add Show4DSTEM compare panel curation
bobleesj Jul 7, 2026
d44747c
Add Show4DSTEM compare user story
bobleesj Jul 7, 2026
edffb07
Polish Show4DSTEM compare previews
bobleesj Jul 8, 2026
497bc6b
Recompute Show4DSTEM compare previews offline
bobleesj Jul 8, 2026
81b3324
Tighten Show4DSTEM mobile layouts
bobleesj Jul 8, 2026
19e1046
Add FFT metric performance signoff
bobleesj Jul 8, 2026
d673857
Respect Show4DSTEM mobile compare columns
bobleesj Jul 8, 2026
2b7f71d
Hide Show4DSTEM mobile between-panel text
bobleesj Jul 8, 2026
07ba06a
Add Show1D live review workflows
bobleesj Jul 8, 2026
f311634
Use inset ring for Show4DSTEM compare selection
bobleesj Jul 8, 2026
4b32f4a
Add Show4DSTEM compare grid resize handle
bobleesj Jul 8, 2026
e36b09c
Harden Show4DSTEM memmap and resize handling
bobleesj Jul 8, 2026
7c61cbc
Add Show4DSTEM compare wheel zoom and gap control
bobleesj Jul 8, 2026
55cff16
Remove Show4DSTEM compare status label
bobleesj Jul 8, 2026
b216eb0
Fix Show4DSTEM temporal refresh after compare
bobleesj Jul 8, 2026
7761801
Rename Show4DSTEM view modes to single and multiple
bobleesj Jul 8, 2026
ce85144
Select diffraction panel from Show4DSTEM multiple tiles
bobleesj Jul 8, 2026
eab04f4
Polish widget UI protocols and Show1D docs
bobleesj Jul 8, 2026
7f77c2e
Remove Show4DSTEM controls hide button
bobleesj Jul 8, 2026
33589f1
Add Show1D plot resize handle
bobleesj Jul 8, 2026
9846ade
Fix Show4DSTEM multiple scan cursor drag
bobleesj Jul 8, 2026
46ee924
Polish Show1D panel hide hover
bobleesj Jul 8, 2026
b5889ee
Stabilize Show1D hide hover state
bobleesj Jul 8, 2026
dc444ec
docs: document commit message standard
bobleesj Jul 8, 2026
eead7d7
docs: fix agent commit guidance
bobleesj Jul 8, 2026
9676ee3
Match Show4DSTEM multiple cursor style
bobleesj Jul 8, 2026
7b3a08e
docs: update unreleased changelog
bobleesj Jul 8, 2026
b7c74d4
fix: tighten Show3D mobile playback controls
bobleesj Jul 8, 2026
acddebc
fix: prevent Show3D mobile playback overlap
bobleesj Jul 8, 2026
0c486b8
fix: align mobile control row spacing
bobleesj Jul 8, 2026
c6b0c35
docs: document compact control pairing
bobleesj Jul 8, 2026
9ada155
fix: prevent Show3D exported playback flash
bobleesj Jul 8, 2026
9a032f3
Add Show4DSTEM export visual smoke test
bobleesj Jul 8, 2026
556464f
Add Show4DSTEM multi-panel resize handles
bobleesj Jul 8, 2026
c00281a
fix: smooth Show3D page scrubbing
bobleesj Jul 8, 2026
114a1fa
Match Show4DSTEM compare resize handle style
bobleesj Jul 8, 2026
cd800fd
Show Show4DSTEM compare coordinate label once
bobleesj Jul 8, 2026
34fcd33
Move Show4DSTEM columns control to grid header
bobleesj Jul 8, 2026
254b01f
Redraw Show4DSTEM VI when leaving multiple view
bobleesj Jul 8, 2026
38a6443
fix: persist Show3D paged panel visibility
bobleesj Jul 8, 2026
9432594
feat: add widget debug and performance signoff
bobleesj Jul 8, 2026
9c71a18
harden widget static fallback export
bobleesj Jul 8, 2026
abfb095
migrate live data hub into widget
bobleesj Jul 8, 2026
fb62477
Improve Show1D ptychography dashboard
bobleesj Jul 9, 2026
d01ba43
Add public widget tutorial dataset loaders
bobleesj Jul 9, 2026
74086c5
Organize widget tutorial dataset loaders
bobleesj Jul 9, 2026
c822a1c
feat: improve Show1D reconstruction review
bobleesj Jul 10, 2026
454c1ea
feat: add live folder-backed image viewers
bobleesj Jul 10, 2026
4ed012f
perf: improve Show4DSTEM live paging
bobleesj Jul 10, 2026
00d229d
Add ShowFolder dwell-time metadata
bobleesj Jul 10, 2026
d62d852
Add saved widget regression coverage
bobleesj Jul 10, 2026
6fda62c
Handle non-paged Show4DSTEM dataset wrappers
bobleesj Jul 10, 2026
936a48d
Add paged Show3DSlices comparison workflows
bobleesj Jul 10, 2026
2392121
Unify widget signoff reporting
bobleesj Jul 10, 2026
52f7ce1
Add ShowDiffraction analysis modules and candidate-first phase identi…
henryhng Jul 5, 2026
4f62ce1
update showdiffraction notebook
henryhng Jul 5, 2026
ca87778
remove unused fts in ShowDiffraction
henryhng Jul 6, 2026
2a8dfc1
remove faulty tests
henryhng Jul 6, 2026
b8789bf
Add kernel-side element detection to ShowEDS (#145)
henryhng Jul 10, 2026
2c08060
docs: add PR template mirroring README widget checklist
bobleesj Jul 10, 2026
1b14db5
docs: group PR template into selective sections, cite scikit-package
bobleesj Jul 10, 2026
7006eac
Add ShowDiffraction analysis modules and candidate-first phase identi…
henryhng Jul 5, 2026
ce96d4a
update showdiffraction notebook
henryhng Jul 5, 2026
84b7c80
remove unused fts in ShowDiffraction
henryhng Jul 6, 2026
fe5743b
remove faulty tests
henryhng Jul 6, 2026
c19f89d
correct ShowDiffraction absences, phase matching, profile numerics
henryhng Jul 10, 2026
cdc23c4
consolidate ShowDiffraction tests
henryhng Jul 10, 2026
a3aec81
fold analysis modules into showdiffraction.py
henryhng Jul 10, 2026
2c0ec5c
docs: fix outdated README, CLI, export, and performance docs
bobleesj Jul 10, 2026
573d3fc
docs: adopt scikit-package standards for contributors and agents
bobleesj Jul 10, 2026
1439c9f
ci: execute tutorial notebooks in docs build instead of committing ba…
bobleesj Jul 10, 2026
0ff164f
docs: explain the no-force-push review rule, link ophusgroup/dev
bobleesj Jul 10, 2026
e2ed324
separate tests for showdiffraction
henryhng Jul 10, 2026
e0d5536
docs: add no-committed-widget-state rule to PR checklists and agent g…
bobleesj Jul 10, 2026
f8c70dc
Merge remote-tracking branch 'upstream/main' into showdiffraction-not…
henryhng Jul 10, 2026
a1b6edd
load tutorial data from the hub and strip baked notebook state
henryhng Jul 10, 2026
5ff66ea
docs: add storyboard coverage item to PR checklist
bobleesj Jul 10, 2026
f0753ac
docs: rename Saving and sharing to HTML and file export
bobleesj Jul 10, 2026
90e3f82
reattach pre-rebase history
henryhng Jul 10, 2026
d120076
docs: hide synthetic data cells, add memory management page, fold adv…
bobleesj Jul 10, 2026
a3d722f
Merge remote-tracking branch 'upstream/main' into showdiffraction-not…
henryhng Jul 10, 2026
b4527b0
install tutorial data deps in the signoff CI env
henryhng Jul 10, 2026
9a3fe5d
docs: add data upload protocol to io FAQ and download tutorial
bobleesj Jul 10, 2026
b0685b6
docs: run IO tutorial on real HF data, add watch and reconstruction-c…
bobleesj Jul 10, 2026
f701228
refactor: source all tutorial loaders from widget-tutorials HF tree
bobleesj Jul 10, 2026
557c383
feat: inset selection ring so gallery panels sit flush with zero gap
bobleesj Jul 10, 2026
d090c87
feat: inset focus ring for Show3D and Show3DSlices containers
bobleesj Jul 10, 2026
3bec86d
fix: keep docs pages single-widget, no static fallback duplicate
bobleesj Jul 10, 2026
709c09b
docs: add single-output-per-widget rule for docs builds
bobleesj Jul 10, 2026
986eee8
docs: rename Advanced tutorials to Advanced, move API reference under…
bobleesj Jul 10, 2026
ff4ed63
ci: install tutorial data deps in widget-ci for docs signoff build
bobleesj Jul 11, 2026
1b1720e
fix: read symlinked folder images by their own name, not resolved target
bobleesj Jul 11, 2026
e0e9264
feat: add save_state contract to Show1D, trim snapshot buffers from s…
bobleesj Jul 11, 2026
439ed4e
ci: silence HF unauthenticated-request warning in baked tutorial outputs
bobleesj Jul 11, 2026
804adde
ci: merge duplicate env keys on docs build step
bobleesj Jul 11, 2026
5b804dd
docs: hide Colab bootstrap cells from built tutorial pages
bobleesj Jul 11, 2026
040a4db
docs: fix pytest path, release example versions, install extras
bobleesj Jul 11, 2026
c1daac6
chore(release): widget 0.0.1rc30
bobleesj Jul 11, 2026
c57de45
feat: read EMD, DM, and NPY frames in read_image_stack with carried c…
bobleesj Jul 11, 2026
332a450
feat: add static preview fallback to Show1D, completing the save_stat…
bobleesj Jul 11, 2026
5b3e3bb
ci: guard built docs page sizes and name heavy widget buffers
bobleesj Jul 11, 2026
6941dfa
fix: show only the current page's histograms in paged Show2D galleries
bobleesj Jul 11, 2026
7ae84e8
fix: repack Show3D offline stack in set_image so kernel-less reopen r…
bobleesj Jul 11, 2026
be731aa
docs: make show3d live demo scrubbable on docs pages, widen diffracti…
bobleesj Jul 11, 2026
a12ca38
feat: add display-only filter utility for sparse maps
bobleesj Jul 11, 2026
5fb8aed
feat: add live display-filter controls to Show2D for sparse maps
bobleesj Jul 11, 2026
26df588
feat: mirror display-filter knobs onto Show3D per-frame playback
bobleesj Jul 11, 2026
eaf7283
feat: add HAADF underlay blend and magenta colormap to Show2D
bobleesj Jul 11, 2026
8271c2b
feat: per-panel display filter lists with All/Panel UI scope
bobleesj Jul 11, 2026
9eacf98
feat: add browser display filter port (wgsl compute + cpu reference)
bobleesj Jul 11, 2026
b5dc4b7
feat: ship raw frames when the browser negotiates webgpu filtering
bobleesj Jul 11, 2026
d8371f8
feat: wire show2d frontend to live browser-side filter pipeline
bobleesj Jul 11, 2026
284fa2e
docs: add which-denoise-filter FAQ to Show2D reference
bobleesj Jul 11, 2026
8bee958
refactor: rename filter api to denoise family with three-mode menu
bobleesj Jul 11, 2026
033cc01
feat: gate denoise ui behind show_denoise toggle with canonical modes
bobleesj Jul 11, 2026
d790863
feat: browser-side WebGPU denoise pipeline with explicit denoise API
bobleesj Jul 11, 2026
7f6c1cf
fix: brighten underlay blend with Fig4-matched percentile stretch
bobleesj Jul 11, 2026
20af8d3
feat: advance interactive widget workflows
bobleesj Jul 11, 2026
3beb8cf
Merge remote-tracking branch 'origin/main'
bobleesj Jul 11, 2026
9d23f5f
feat: move denoise scope into the Link group
bobleesj Jul 11, 2026
7b79f5c
feat: add reversible crop-to-view and pad view ops to Show2D
bobleesj Jul 11, 2026
5e26afe
feat: link-group denoise scope and reversible crop/pad view ops
bobleesj Jul 11, 2026
cacd5c1
Merge branch 'main' of https://github.com/bobleesj/quantem.widget
bobleesj Jul 11, 2026
20a5f47
fix: accept RGB stacks in Show3D set_image and cover RGB offline stride
bobleesj Jul 11, 2026
f925443
fix: keep Show3D true color through set_image, export, and raster paths
bobleesj Jul 11, 2026
375bcef
docs: update denoise demo notebook and docs to the denoise API
bobleesj Jul 11, 2026
9c73d6c
feat: warn on deprecated Show2D filter kwargs and document denoise/un…
bobleesj Jul 11, 2026
fbd4c69
docs: update denoise demo notebook and docs to the denoise API
bobleesj Jul 11, 2026
1231a42
fix: guard Show2D pad_ratio on galleries and persist diff_reference
bobleesj Jul 11, 2026
1a3f916
feat: add Show2D set_denoise() setter with explicit panel scope
bobleesj Jul 11, 2026
9436bf3
feat: add Show3D.from_rgb and rgb= for explicit true-color control
bobleesj Jul 11, 2026
0f2d783
feat: Show2D deprecation warnings, pad_ratio guard, set_denoise setter
bobleesj Jul 11, 2026
89470b2
feat: RGB config rotation, Show3D.from_figure_gallery, and export siz…
bobleesj Jul 11, 2026
7207112
test: add underlay repaint regression coverage
bobleesj Jul 11, 2026
c5be87b
docs: add S3D-18/S3D-19 user stories for color gallery and safe export
bobleesj Jul 11, 2026
0228a6a
test: add underlay repaint regression coverage
bobleesj Jul 11, 2026
d8e96ba
feat: add underlay stretch/gamma/dual-composite Fig4 knobs to Show2D
bobleesj Jul 11, 2026
5a05d23
feat: add underlay stretch/gamma/dual-composite Fig4 knobs to Show2D
bobleesj Jul 11, 2026
f881e22
feat: add Show2D More overflow menu and collapse-safe reduction badge
bobleesj Jul 11, 2026
7c277a3
feat: add Show2D More overflow menu and collapse-safe reduction badge
bobleesj Jul 11, 2026
8d81800
feat: tidy Show2D control rows for wrap-safe labels and tooltips
bobleesj Jul 11, 2026
3392220
feat: tidy Show2D control rows for wrap-safe labels and tooltips
bobleesj Jul 11, 2026
d4aa62c
feat: harden folder paging and paint verification
bobleesj Jul 11, 2026
6c537fa
fix: preserve Show2D folder page state
bobleesj Jul 11, 2026
5bb9830
feat: multi-panel Show3D with independent RGB stacks
bobleesj Jul 11, 2026
6c8eb79
feat: GPU-paint Show3D RGB frames and enable moving average for color
bobleesj Jul 11, 2026
66a0c2c
docs: require problem-action handoff context (#150)
bobleesj Jul 11, 2026
ed94dc9
fix: preserve Show2D gallery preview on notebook reopen
bobleesj Jul 12, 2026
801752c
docs: explain bin and Anscombe denoise math in the Show2D info panel
bobleesj Jul 11, 2026
ec99901
docs: make the 128GB dev Mac the default widget test surface
bobleesj Jul 11, 2026
199be01
fix: enabling the Denoise section now denoises (defaults mode to gaus…
bobleesj Jul 11, 2026
5f65d1a
feat: Show3D More menu holding Stats and Denoise (mirrors Show2D)
bobleesj Jul 11, 2026
00bba39
feat: Show3D ships raw frames under _webgpu_filter_ok for browser-sid…
bobleesj Jul 11, 2026
372afa0
feat: Show3D browser-side WGSL denoise with live sigma scrub
bobleesj Jul 11, 2026
f6fe317
fix: per-panel denoise at construction defaults denoise_scope to panel
bobleesj Jul 11, 2026
90b0b14
fix: Show3D offline path ships raw so browser denoise engages (real-t…
bobleesj Jul 12, 2026
886bc5a
feat: Denoise toggle is a master on/off of the effect (raw when off, …
bobleesj Jul 12, 2026
ca79eca
feat: add frequency filter family
bobleesj Jul 12, 2026
16330c8
fix: clarify frequency filter interaction
bobleesj Jul 12, 2026
01516e9
fix: isolate Show2D panel filter FFT caches
bobleesj Jul 12, 2026
4423a28
fix: Show2D denoise editor edits auto-enable the master toggle (inter…
bobleesj Jul 12, 2026
a320fe2
feat: inline on/off toggle in the Denoise and Filter rows (Show2D + S…
bobleesj Jul 12, 2026
37916d1
revert: drop inline denoise/filter row toggles; keep the single maste…
bobleesj Jul 12, 2026
7e84109
style: drop in-row denoise/filter banners; fix-width slider value lab…
bobleesj Jul 12, 2026
f2afc8e
style: align Show3D denoise sigma label width with Show2D (40px)
bobleesj Jul 12, 2026
1957484
fix: remove redundant Filter 'Settings' button in More menu; the Filt…
bobleesj Jul 12, 2026
f9cab98
fix: dragging denoise sigma on a raw panel starts gaussian denoise (s…
bobleesj Jul 12, 2026
654d378
fix: Show3D More menu is one popover (Stats/Denoise/Filter); was two …
bobleesj Jul 12, 2026
22861a3
fix: serialize denoise_enabled in state_dict so export_html/saved sta…
bobleesj Jul 12, 2026
75c3c7d
fix: per-panel denoise/filter edits no longer bleed to other panels (…
bobleesj Jul 12, 2026
8e255d6
fix: Show3D re-applies denoise on frame scrub
bobleesj Jul 12, 2026
acec6f6
fix: offline export repaints canvas with denoised/filtered frames
bobleesj Jul 12, 2026
168db07
fix: sync Show2D denoise editor to selected panel
bobleesj Jul 12, 2026
277efba
docs: record display filtering fixes
bobleesj Jul 12, 2026
8d39b01
feat: add saved view and playback stories
bobleesj Jul 12, 2026
81615fc
feat: add Show3D playback dynamics controls
bobleesj Jul 12, 2026
34373e6
fix: stack Show3D bottom FFT below image
bobleesj Jul 12, 2026
51d86c7
fix: cache Show3D filtered playback frames
bobleesj Jul 12, 2026
99431a0
fix: move Show3D play style to playback row
bobleesj Jul 12, 2026
788548a
fix: prevent Show3D filtered playback repaint races
bobleesj Jul 12, 2026
24e75d2
docs: require organic Show3D playback trials
bobleesj Jul 12, 2026
5b883af
docs: prefer organic widget testing paths
bobleesj Jul 12, 2026
f0dee91
perf: improve Show3D remote scrub transport
bobleesj Jul 12, 2026
7845147
feat: support panel colormaps and GPU movie tools
bobleesj Jul 12, 2026
791b8e7
fix: align widget resize handles
bobleesj Jul 12, 2026
e509caf
feat: add CUDA MP4 movie export
bobleesj Jul 12, 2026
c4b8cec
Merge remote-tracking branch 'upstream/main' into showdiffraction-not…
henryhng Jul 13, 2026
1bb3190
harden ShowDiffraction: calibration, fitting, indexing, stacks, overl…
henryhng Jul 13, 2026
bfe5770
chain EDS element detection into the tutorial phase search
henryhng Jul 13, 2026
1d191ec
fix EDS line-hint cap to keep major lines
henryhng Jul 13, 2026
70950bf
feat: add Show2D inset plot overlays
bobleesj Jul 13, 2026
e004832
docs: add Show2D inset plot tutorial
bobleesj Jul 13, 2026
aec54f5
feat: add rich panel title spans
bobleesj Jul 14, 2026
15c9e09
feat: make Show2D inset charts draggable
bobleesj Jul 14, 2026
bab13a0
fix: clarify Show2D linked color control
bobleesj Jul 14, 2026
0cb4cf7
fix: simplify Show2D linked color row
bobleesj Jul 14, 2026
28052f3
fix: move Show2D contrast preset into More
bobleesj Jul 14, 2026
258aa23
feat: add panel annotations to viewers
bobleesj Jul 14, 2026
decbe4e
fix: remember Show2D individual colormaps
bobleesj Jul 14, 2026
2dc28dc
feat: support math labels in viewers
bobleesj Jul 14, 2026
b0a61a5
fix: clean math label rendering
bobleesj Jul 14, 2026
151022d
docs: clarify advanced math labels
bobleesj Jul 14, 2026
4f9ac52
feat: add viewer panel annotations
bobleesj Jul 14, 2026
eb3a415
feat: show2d svg vector export for paper figures
bobleesj Jul 14, 2026
9d31e87
perf: speed Show3D sidecar display controls
bobleesj Jul 14, 2026
4e388dc
fix: align Show2D color sharing wording
bobleesj Jul 14, 2026
50ebab9
chore: remove local movie benchmark scripts
bobleesj Jul 14, 2026
d8a1b73
feat: improve rich labels and presentation export
bobleesj Jul 14, 2026
85ea9cc
feat: add hdf5 scan-region loader
bobleesj Jul 14, 2026
0604f49
feat: add editable panel overlays
bobleesj Jul 14, 2026
3ac820b
fix: refresh Show3D sidecar transform render
bobleesj Jul 14, 2026
55f5a31
feat: add overlay line styles
bobleesj Jul 14, 2026
dd6a225
feat: route widget hdf5 io through quantem.gpu
bobleesj Jul 14, 2026
f13ebc4
feat: route widget product exports through quantem.gpu
bobleesj Jul 14, 2026
9d62174
feat: route widget mps compute through quantem.gpu
bobleesj Jul 14, 2026
74fec40
feat: route widget mps io through quantem.gpu
bobleesj Jul 14, 2026
7ba8155
refactor: route widget movie export through quantem.gpu
bobleesj Jul 14, 2026
f3542b8
refactor: delegate widget backend code to quantem.gpu
bobleesj Jul 14, 2026
5aa7873
chore: depend on quantem.gpu rc
bobleesj Jul 14, 2026
c6021dc
feat: export Show2D publication layers to SVG
bobleesj Jul 14, 2026
32503ee
chore: require quantem.gpu rc2
bobleesj Jul 14, 2026
ddbad2b
refactor: route widget cuda mp4 through quantem.gpu
bobleesj Jul 14, 2026
2ee0a65
fix: keep Show2D controls reachable in presentation
bobleesj Jul 14, 2026
4cfcfca
feat: add Show2D publication SVG controls
bobleesj Jul 14, 2026
3f16da2
docs: document Show2D publication SVG controls
bobleesj Jul 14, 2026
c243578
docs: embed Show2D publication examples
bobleesj Jul 14, 2026
5ed4410
fix: stabilize Show3D folder sidecar display
bobleesj Jul 14, 2026
a0a5f60
feat: migrate widget io paths to quantem.gpu
bobleesj Jul 14, 2026
7d2dd6c
fix: make Show3D histogram drag reactive
bobleesj Jul 14, 2026
e00d15f
chore: require quantem.gpu rc5 movie backend
bobleesj Jul 14, 2026
bfe693e
Merge remote-tracking branch 'origin/widget-gpu-migration-183' into HEAD
bobleesj Jul 14, 2026
e1ec37d
fix: default Show3D moving average on
bobleesj Jul 14, 2026
e6123e6
Merge remote-tracking branch 'upstream/main' into showdiffraction-not…
henryhng Jul 15, 2026
21693a3
reduce ShowDiffraction duplication with shared helpers
henryhng Jul 15, 2026
da6d59c
clean up ShowDiffraction comment and output style
henryhng Jul 15, 2026
278d05f
add DOIs to ShowDiffraction lattice citations
henryhng Jul 15, 2026
3954575
make the scipy-less ring test behavioral and dedupe run_auto setup
henryhng Jul 15, 2026
7076f6d
loosen search_phases hang-guard bound so CI load does not flake it
henryhng Jul 15, 2026
55270df
Keep Show3D export playback cache silent
bobleesj Aug 3, 2026
d905111
fix Show3D contrast during linked zoom
bobleesj Aug 4, 2026
e04d9dc
test Show3D zoom contrast regression
bobleesj Aug 4, 2026
196b760
add Show3D hover hide and retire sidecar exports
bobleesj Aug 4, 2026
80b115e
Merge remote-tracking branch 'upstream/main' into showdiffraction-nb
henryhng Aug 5, 2026
6e7a972
Merge remote-tracking branch 'upstream/main' into showdiffraction-nb
henryhng Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ new `rcN` heading when that rc is published to TestPyPI.
- Save inside the review persists to the folder: Save writes the phase JPEG plus the aberration state into `saves/` (and downloads the JPEG), so saved states reappear with Load / download / delete on any relaunch - double-click or CLI. The bundled range server accepts writes only under `saves/`.
- SSB reconstruction in the browser is 5.6x faster at full bright field: slider drags use a Fourier-domain BF sum with a single inverse FFT (the same `angle(mean(object))` estimator as the Python reference, corr 0.997), reaching ~50 FPS on a real 512x512x192x192 dataset at all 13137 BF pixels on an Apple-silicon laptop. Release commits keep the exact per-BF path for the loss readout.
- Resident G(q,k) stores the Hermitian half-plane by default (bit-exact, 2x less GPU memory, faster) with an opt-in snorm16 quantized mode (4x), a GPU-memory clamp on the BF count so big scans cannot crash small GPUs, and acceptance of rfft half-plane calibrations from the CUDA backend.
- Fix ShowEDS spectrum line markers so major lines (Fe Ka, Cu Ka, Au La) keep markers across the full energy range.
- Harden ShowDiffraction analysis: calibration assignment and exactness, ring/ellipse/texture fit guards, zone-axis variants, stack frame provenance, per-axis canvas overlays, and hostile-input handling.
- Fix ShowDiffraction systematic absences for spinel, bixbyite, cuprite, rutile-type, and I41/amd phases: new structure-verified rules remove symmetry-forbidden lines (for example Fe3O4 200 and anatase 002) from predicted reflection lists.
- Improve ShowDiffraction phase matching: optimal line assignment replaces the greedy pass, missing-strong counts read n/a when a phase carries no intensities, full-circle radial wedges no longer collapse to zero width, and the ellipse fit's sector weighting is de-biased on noisy patterns.
- ShowDiffraction mobile/touch support: fluid layout at phone widths, pointer-event canvas interactions (tap, drag, two-finger pinch/pan, double-tap reset), and a dual-thumb contrast histogram slider that syncs traits once per gesture.
- ShowDiffraction phase library: pymatgen removed entirely (no more `phaseid` extra or CIF/Structure loaders); built-in lattice constants now carry per-entry source citations (NIST SRM / COD / primary literature).
- Depend on `quantem.gpu[movie]>=0.0.1rc5` for the CUDA/MPS/CPU movie backend, keep migrated HDF5 and movie shims patch-compatible during the transition, and accept 3-axis `Show3DSlices(pixel_size=...)` tuples in release notebooks.
- Keep display filtering consistent throughout review: Show3D reapplies denoise when a user scrubs to another frame, standalone Show2D/Show3D HTML paints denoised and frequency-filtered pixels on first load, and unlinked Show2D galleries show and edit each selected panel's own denoise mode, sigma, and bin without changing neighboring panels.
- Add display-side denoise for sparse maps (EDS, low dose) to Show2D and Show3D: a Denoise menu (`none` / `gaussian` / `anscombe`, the count-respecting Anscombe smoother) with `denoise_sigma` and `denoise_bin` knobs, a `show_denoise` gate that keeps the controls row hidden until needed, and an always-on banner whenever a reduction is active. It is purely a view transform: the stored array, the stats row, and every export of raw data keep the original counts, and `none` is the lossless default. Show2D adds per-panel lists for raw-vs-denoised A/B galleries and runs the filter through a browser-side WebGPU pipeline, so exported HTML denoises without a kernel. Replaces the earlier `display_filter` / `display_sigma` / `spatial_bin` kwargs, which stay accepted as aliases for one release.
Expand Down
63 changes: 55 additions & 8 deletions docs/api/showdiffraction.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,32 @@

Interactive d-spacing analysis for a single 2D diffraction pattern or a 3D
stack (tilt/time series). Find the beam center, pick Bragg spots and rings,
read calibrated d-spacings, and calibrate k-space from a known reflection. For
full 4D-STEM datasets, use [Show4DSTEM](show4dstem). See the
read calibrated d-spacings, and calibrate k-space from a known reflection. See the
[ShowDiffraction tutorial](../tutorials/showdiffraction) for a worked example.

The primary phase workflow is candidate verification: you usually know which
phases to expect, so build them (`library_phase`, `Phase.from_cubic`,
`Phase.from_dspacings`, or custom phases in the Phase menu) and rank only
those with `identify_phase(database)` or the *candidates only* switch.
`search_phases()` against the built-in library is the fallback for when you
have no candidates in mind; narrow it with an element filter.

Reference data sources: every lattice parameter in the built-in phase library
(`PHASE_LIBRARY` in `showdiffraction.py`) is a room-temperature value taken from a
license-clean source cited next to the entry — NIST SRM certificates and NBS
circulars/monographs (US public domain), the Crystallography Open Database
(CC0), or the primary literature. No values come from proprietary compilations
such as the ICDD PDF or Pearson's Handbook.

The lattice-based phase model enumerates d-spacings and geometric systematic
absences. It does not calculate structure-factor intensities, thermal effects,
or dynamical diffraction; use `Phase.from_dspacings` when matching against a
measured or literature line table with intensities.

Calibrated radial axes are reported as `g = 1/d` in `1/Å`; the legacy
`radial_profile(units="q")` spelling is an alias for `units="g"`, not a
`2πg` scattering-vector axis.

## Viewer UI

`ShowDiffraction` supports the shared `ui_mode`, `show_title`,
Expand All @@ -31,19 +53,44 @@ no console error, no NaN frame).
| Colormap dropdown | `dp_colormap` | Pattern recolors to the chosen map |
| Scale mode dropdown | `dp_scale_mode` | Intensity mapped linear / log / sqrt |
| Invert toggle | `dp_invert` | Colormap reversed |
| Contrast min / max sliders | `dp_vmin_pct`, `dp_vmax_pct` | Display clamp changes; histogram markers move |
| Contrast histogram (dual-thumb slider) | `dp_vmin_pct`, `dp_vmax_pct` | Drag either thumb (mouse or touch) for a live preview; traits update once on release |
| Center mode dropdown | `center_mode` | `auto` re-detects the BF disk; `manual` enables click-to-set |
| Click to set center (manual) | `center_row`, `center_col` | Crosshair moves; spot d-spacings recompute |
| Detect spots | `_detect_spots_request`, `spots` | Auto-finds Bragg peaks; d-spacing table fills |
| Detect spots | `_detect_spots_request`, `spots` | Auto-finds every isolated peak with contrast at least 10% of the strongest (`min_relative`); no count cap |
| Add / remove spot (click) | `_spot_add_request`, `_spot_remove_request`, `spots` | Marker placed/removed; d-spacing updates |
| Snap toggle | `snap_enabled`, `snap_radius` | New spots snap to the nearest local maximum |
| Refine toggle | `spot_refine` | Sub-pixel Gaussian fit on/off |
| Detect rings | `_detect_rings_request`, `rings` | Auto-finds Debye–Scherrer rings |
| Move spot (Move + drag) | `_spot_move_request`, `spots` | Re-picks the spot at the drop position; stale hkl clears |
| Spot pick dropdown | `spot_refine`, `snap_enabled`, `snap_radius` | Clicked spots are Gaussian-fitted, snapped to the local maximum, or kept exactly as clicked |
| Detect rings | `_detect_rings_request`, `rings` | Auto-finds all Debye–Scherrer rings above the profile prominence threshold; no count cap |
| Add / remove ring | `_ring_add_request`, `_ring_remove_request`, `rings` | Ring overlay; ring d-spacing updates |
| Calibrate from spot / ring | `_calibrate_from_spot_request`, `_calibrate_from_ring_request`, `k_pixel_size` | Sets k-space pixel size from a known d |
| Auto button | `_auto_request`, `analysis_status` | Runs center, rings, calibration, fit, and indexing in one pass; status reports failed steps only |
| Phase menu | `phase_name`, `custom_phases` | Selects a library or custom phase for calibration and indexing; custom entries take a full lattice (a, b, c, α, β, γ) and absence rule |
| Identify candidates only | `identify_custom_only` | Identify ranks only custom phases, skipping the library |
| Calibrate from phase | `_calibrate_phase_request`, `calibration_rms_px` | Fits k-space sampling from ring-to-reflection assignment |
| Index rings / spots | `_index_rings_request`, `_index_spots_request`, `zone_axis` | Fills hkl labels; spot indexing also solves the zone axis |
| Exclude menu | `mask_regions` | Edits wedge/disk regions excluded from analysis |
| Draw excluded disk / wedge (drag) | `mask_regions` | Drag on the pattern to add an excluded region with live preview |
| Mask view toggle | `show_mask` | Shows or hides excluded-region overlays |
| Fit rings | `_fit_rings_request` | Refines ring radius and width; fwhm column appears |
| Fit ellipse / use correction | `_fit_ellipse_request`, `ellipse_corrected` | Measures distortion; the switch circularizes radii |
| Profile panel | `show_profile`, `profile_log`, `profile_subtract_background`, `_profile_data` | Radial profile with ring markers; click adds a ring |
| Azimuthal panel | `show_azimuthal`, `_azimuthal_data` | Intensity vs azimuth around the outermost ring |
| hkl toggle | `show_hkl` | Shows or hides hkl labels on spots and rings |
| Stats toggle | `show_stats` | Shows or hides the pattern-statistics readout |
| Undo / clear spots and rings | `_spot_undo_request`, `_spot_clear_request`, `_ring_undo_request`, `_ring_clear_request` | Removes the last or all markers (Ctrl+Z also undoes) |
| Center view | view transform | Recenters and zooms the view to the diffraction center |
| Spot / ring CSV and JSON | measurement tables | Downloads the visible measurement table rows |
| Refine method dropdown | `refine_method` | Picks the center-refinement algorithm (auto / symmetry / phase_corr) |
| Refine center | `_refine_center_request`, `center_method` | Refines the center; records the method used |
| Merge frames (3D) | `_merge_request` | Align + merge frames; appends the combined pattern |
| Element filter box | `identify_elements` | Restricts the phase search to these elements (e.g. `Fe,O`) |
| Identify phases | `_identify_request`, `_identify_results` | Ranked candidate phases with per-line match tables |
| Quality panel | `_quality` | Analysis-quality snapshot: center, calibration, ellipse, ring fits, mask coverage |
| Ring click in profile | `selected_ring_id` | Highlights the picked ring marker (0 clears) |
| Frame slider (3D) | `frame_idx` | Scrubs to a different pattern in the stack |
| Pan (drag) / zoom (wheel) | view transform | Pattern translates / zooms about the cursor |
| Export → HTML | `export_request`, `export_payload` | Writes a standalone HTML viewer |
| Touch: two-finger pinch / drag, double-tap | view transform | Pinch zooms about the fingers, two-finger drag pans, double-tap resets the view |
| Export → PNG / HTML | `export_request`, `export_payload` | Saves the current view as a PNG image or a standalone HTML viewer |

```{seealso}
The shared HTML-export contract is documented in [html-export](html-export).
Expand Down
Loading