From 10aa4213fa27f554529ba46b38c15173001b0772 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 2 Nov 2026 12:50:30 +0000 Subject: [PATCH] docs: mac4DSTEM 5.1.1 and macTEM 1.1.1, macOS 26 The app pages give the new versions and DMG sizes (17.7 MB, 17.9 MB) and the macOS 26 requirement; the suite pages follow the latest kit tags. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01VkKZEWLQDNR7GTJSa5geSZ --- index.html | 18 +++++++++--------- mactem/index.html | 12 ++++++------ suite/benchmarks.html | 10 +++++----- suite/index.html | 2 +- suite/releases.html | 2 +- support.html | 2 +- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/index.html b/index.html index 21546fb..49473e7 100644 --- a/index.html +++ b/index.html @@ -130,7 +130,7 @@
-

Version 5.0.1 — available now

+

Version 5.1.1 — available now

@@ -148,11 +148,11 @@

mac4DSTEM

Download for macOS -

Version 5.0.1 · 11.6 MB · signed and notarized

+

Version 5.1.1 · 17.7 MB · signed and notarized

    -
  • macOS 27+
  • +
  • macOS 26+
  • Apple silicon
  • Metal & Neural Engine
  • GPL-3.0
  • @@ -357,12 +357,12 @@
    1. -

      Version 5.0.1 complete

      +

      Version 5.1 complete

      The analysis workflow is finished and covered by automated tests, including parity harnesses measured against py4DSTEM on experimental data.

    2. Download

      -

      Version 5.0.1 is available as a signed, notarized disk image. Open it and drag mac4DSTEM to your Applications folder — it launches without a security warning, and needs nothing else installed.

      +

      Version 5.1.1 is available as a signed, notarized disk image. Open it and drag mac4DSTEM to your Applications folder — it launches without a security warning, and needs nothing else installed.

    3. Source release

      @@ -375,7 +375,7 @@

      Distribution

    - Requires macOS 27 or later on Apple silicon (for macOS 14–26, version 3.0.0 remains available). No external runtime, toolchain, or library + Requires macOS 26 or later on Apple silicon (for macOS 14–25, version 3.0.0 remains available). No external runtime, toolchain, or library installation is needed — all dependencies are contained within the application. The Merlin MIB and EMPAD RAW readers are preview-grade pending further vendor data.

    @@ -417,10 +417,10 @@

    Enquiries, issue reports, and collaboration

    "name": "mac4DSTEM", "url": "https://mac4dstem.com/", "applicationCategory": "ScientificApplication", - "operatingSystem": "macOS 27 or later, Apple silicon", - "softwareVersion": "5.0.1", + "operatingSystem": "macOS 26 or later, Apple silicon", + "softwareVersion": "5.1.1", "downloadUrl": "https://github.com/mac4DSTEM/mac4DSTEM/releases/latest/download/mac4DSTEM.dmg", - "fileSize": "11.6 MB", + "fileSize": "17.7 MB", "license": "https://www.gnu.org/licenses/gpl-3.0.html", "description": "A free, native macOS application for interactive 4D-STEM analysis: virtual imaging, Bragg disk detection, strain and orientation mapping, and phase reconstruction, computed natively on Apple silicon.", "screenshot": "https://mac4dstem.com/assets/workspace.png", diff --git a/mactem/index.html b/mactem/index.html index 5f4c91d..9927d25 100644 --- a/mactem/index.html +++ b/mactem/index.html @@ -48,7 +48,7 @@
    -

    Version 1.0.0 · part of the macEM suite, beside mac4DSTEM

    +

    Version 1.1.1 · part of the macEM suite, beside mac4DSTEM

    macTEM

    @@ -65,7 +65,7 @@

    macTEM

    Download for macOS -

    Version 1.0.0 · 19.7 MB · signed and notarized · macOS 27+ on Apple silicon

    +

    Version 1.1.1 · 17.9 MB · signed and notarized · macOS 26+ on Apple silicon

      @@ -155,7 +155,7 @@
    -
    Requires
    macOS 27, Apple silicon
    +
    Requires
    macOS 26, Apple silicon
    Built on
    FormatoKit, ImagoKit, DiffractoKit, SpectroKit
    Runtime
    Self-contained
    Licence
    GPL-3.0
    @@ -195,10 +195,10 @@

    Questions, issues, collaboration

    "name": "macTEM", "url": "https://mac4dstem.com/mactem/", "applicationCategory": "ScientificApplication", - "operatingSystem": "macOS 27 or later, Apple silicon", - "softwareVersion": "1.0.0", + "operatingSystem": "macOS 26 or later, Apple silicon", + "softwareVersion": "1.1.1", "downloadUrl": "https://github.com/mac4DSTEM/macTEM/releases/latest/download/macTEM.dmg", - "fileSize": "19.7 MB", + "fileSize": "17.9 MB", "license": "https://www.gnu.org/licenses/gpl-3.0.html", "description": "A native macOS application for TEM: calibrated images and FFTs, EDS and EELS spectrum images with quantification, and electron diffraction, computed natively on Apple silicon.", "offers": { diff --git a/suite/benchmarks.html b/suite/benchmarks.html index 82a696b..cbddb5a 100644 --- a/suite/benchmarks.html +++ b/suite/benchmarks.html @@ -68,10 +68,10 @@

    FFT work of 2026-10-22 (real-input transform, mixed radix): before and after

    Backend decision per function

    Today every function above is CPU (Accelerate, Float64 reference plus Float32 where it exists). No function has a Metal path, so no Metal break-even has been measured; the column says what the CPU table implies and what a large-size run must measure. A guess is not recorded as a measurement.

    functionbackend todaydecision
    fft2 Float32/Float64CPUCPU only at 128² to 512² (0.02 to 2 ms: a Metal dispatch cannot win). Float64 lengths of prime factors 2, 3, 5, 7 run on the mixed-radix plan. Work item: a Metal Float32 FFT prototype, break-even not measured yet (2048², 4096², 8192²)
    rfft2, irfft2, butterworth, masked registrationCPUCPU; real-input transform since 2026-10-22 (0.7 ms Float64 at 512², 1.1 times NumPy); a Metal path would have to beat 0.4 to 0.7 ms at 512², which a dispatch cannot, so the break-even is again a question for 2048² and up, not measured yet
    gaussian_filter, uniform_filter, difference_of_gaussiansCPUCPU only at 128² to 512² (1 to 4 ms, memory bound). Metal candidate above 2048² for large sigma; not measured yet
    shift order 1CPUCPU only: 0.65 ms at 512²
    shift order 3 (prefilter plus taps)CPUCPU; the prefilter is sequential along lines, the tap sum is the Metal-friendly part: candidate above 2048², not measured
    phase_cross_correlationCPUCPU; FFT-bound, follows fft2
    profile_lineCPUCPU: small arrays stay on the CPU
    labelCPUCPU: union-find is not a Metal workload
    peak_local_maxCPUCPU; the window maximum is a Metal candidate only above 4096²
    -

    DiffractoKit 0.11.0

    -

    Full file and method

    +

    DiffractoKit 0.12.0

    +

    Full file and method

    Measured 2026-10-21. Small and typical sizes only; the large rows are not measured yet (they run with DIFFRACTO_BENCH_LARGE=1). Best of five after one warm-up: the median is the figure, the spread (min-max) is in brackets. Same inputs on both sides (tools/benchmarks/gen_inputs.py writes them), Float64 unless the function is Float32 by design (ACOM, ellipse pattern pixels).

    -
    MachineApple M5 Pro, 64 GB, macOS 27.0.1 (Darwin 27.0.0)
    ToolchainApple Swift 6.4, swift build -c release (separate package tools/benchmarks)
    Python3.12.14, NumPy 2.5.4, SciPy 1.18.1, in two virtual environments: py4DSTEM 0.14.19 in one; pymatgen-core 2026.10.16 (the code; its pymatgen metapackage dist-info reads 2026.9.24), orix 0.15.0 and spglib 2.8.0 in the other
    Load10.5 on a 12-core machine while other builds ran (uptime 17:39): every figure carries that noise, the single-core rows least. Re-run when the machine is quiet before quoting a ratio.
    Pin noteThe orix environment runs pymatgen-core 2026.10.16 under a pymatgen 2026.9.24 metapackage; the fixtures record pymatgen 2026.9.24 and, except cif-symmetry-pins.json (generated 2026-10-21 on this install, byte-identical on regeneration), pymatgen-core 2026.9.23. Nothing here compares numbers, only time
    0.9.1The symmetry_detection and cif_import rows above are the 2026-10-21 measurement of 0.9.0. 0.9.1 replaced the closure check that took 95 % of them (see docs/open-items.md); measured in-process on the same al_super2.cif (machine load 3.6): cif_import typical median 67 ms (min 67, max 77), against 297 ms (one run at load 9) before the change and the table's 351 ms. Not yet re-run through run.sh
    +
    MachineApple M5 Pro, 64 GB, macOS 27.0.1 (Darwin 27.0.0)
    ToolchainApple Swift 6.4, swift build -c release (separate package tools/benchmarks)
    Python3.12.14, NumPy 2.5.4, SciPy 1.18.1, in two virtual environments: py4DSTEM 0.14.19 in one; pymatgen-core 2026.10.16 (the code; its pymatgen metapackage dist-info reads 2026.9.24), orix 0.15.0 and spglib 2.8.0 in the other
    Load10.5 on a 12-core machine while other builds ran (uptime 17:39): every figure carries that noise, the single-core rows least. Re-run when the machine is quiet before quoting a ratio.
    Pin noteThe pymatgen environment runs pymatgen-core 2026.10.16 under a pymatgen 2026.9.24 metapackage, and every fixture that records pymatgen-core records 2026.10.16 (tools/pins/requirements/pymatgen.txt). Nothing here compares numbers, only time
    0.9.1The symmetry_detection and cif_import rows above are the 2026-10-21 measurement of 0.9.0. 0.9.1 replaced the closure check that took 95 % of them (see docs/parity.md, known limits); measured in-process on the same al_super2.cif (machine load 3.6): cif_import typical median 67 ms (min 67, max 77), against 297 ms (one run at load 9) before the change and the table's 351 ms. Not yet re-run through run.sh

    Re-run from a fresh clone of the kit, on a quiet Mac: gen_inputs.py writes the shared inputs, run.sh builds the benchmark package (tools/benchmarks, release) and prints the kit's JSON lines, bench_python.py prints the Python lines, and merge.py turns them into the table below. Add DIFFRACTO_BENCH_LARGE=1 to run.sh and bench_python.py for the large rows.

    The raw lines of the run below are tools/benchmarks/results/2026-10-21.jsonl.

    Per-function table (ms per call; acom_match_scan is ms per pattern)

    @@ -84,7 +84,7 @@

    What the rows compare, and what they do not

    kinematic_reflections: the kit's kinematicReflections(kMax:retainingAll:false) against py4DSTEM's

    Crystal.calculate_structure_factors on the same C2/m cell; the kit is 1.8 to 4.5 times faster. Both use the Lobato-Van Dyck table.

    symmetry_detection and cif_import: the kit's CIFImport.read always detects the symmetry of the cell it reads;

    -

    pymatgen's CifParser only parses and SpacegroupAnalyzer is spglib in C. On a 32-atom P1 cell (an fcc supercell with 1 536 operations) the kit took 361 ms against 13 ms, 28 times slower; on a four-atom cell they are level. The cause was the closure check, not the symmetry search (docs/open-items.md); 0.9.1 made the check about five times faster, the rest stays listed there.

    +

    pymatgen's CifParser only parses and SpacegroupAnalyzer is spglib in C. On a 32-atom P1 cell (an fcc supercell with 1 536 operations) the kit took 361 ms against 13 ms, 28 times slower; on a four-atom cell they are level. The cause was the closure check, not the symmetry search (docs/parity.md, known limits); 0.9.1 made the check about five times faster, the rest stays listed there.

    orientation_reduce: the kit reduces one matrix at a time (24 proper operators); orix reduces a vectorised batch

    (Orientation.from_matrix + map_into_symmetry_reduced_zone). The kit is 2.5 to 12 times faster at these sizes.

    ellipse_fit_1d: level with py4DSTEM's fit_ellipse_1D (0.94 and 1.1).

    @@ -93,7 +93,7 @@

    What the rows compare, and what they do not

    acom_match_scan: the kit's matchAll over the whole scan against py4DSTEM's match_single_pattern per pattern (one

    core; Python's per-pattern time includes its own refinements, so this is a time, not a like-for-like algorithm). Per pattern the kit on one core is 14 times (8 x 8 scan) and 9 times (32 x 32) faster than py4DSTEM on one core, and on all cores 105 and 81 times.

    Backend decision per function

    -
    FunctionBackendWhy / break-even
    niggli_reduce, reflections, kinematic_reflections, symmetry_detection, cif_importCPU onlysmall arrays, branchy integer logic, readers; the kit is already faster than Python except where docs/open-items.md lists it
    orientation_reduceCPU only24 small matrix products per rotation; the batch (100 000 in 0.2 s) is bound by memory traffic, a GPU would pay the transfer for no gain at these sizes
    ellipse_fit_1dCPU onlyone 1D least-squares fit per pattern; level with Python
    acom_libraryCPU onlybuilt once per phase (60 ms for 600 axes), not per pattern
    acom_match_scanCPU all cores; Metal not above any measured NMetal 0.294 ms per pattern at 64 patterns, 0.236 at 1 024, against 0.245 and 0.216 on all CPU cores: the break-even is not reached up to 1 024 patterns (the Metal path is 7 to 22 % slower); the 128 x 128 row (16 384 patterns) is not measured yet, and the Metal path stays an option (ACOMBackend.metal), not the default. A larger library (2 400 axes) is the other axis still to measure
    +
    FunctionBackendWhy / break-even
    niggli_reduce, reflections, kinematic_reflections, symmetry_detection, cif_importCPU onlysmall arrays, branchy integer logic, readers; the kit is already faster than Python except where docs/parity.md (known limits) lists it
    orientation_reduceCPU only24 small matrix products per rotation; the batch (100 000 in 0.2 s) is bound by memory traffic, a GPU would pay the transfer for no gain at these sizes
    ellipse_fit_1dCPU onlyone 1D least-squares fit per pattern; level with Python
    acom_libraryCPU onlybuilt once per phase (60 ms for 600 axes), not per pattern
    acom_match_scanCPU all cores; Metal not above any measured NMetal 0.294 ms per pattern at 64 patterns, 0.236 at 1 024, against 0.245 and 0.216 on all CPU cores: the break-even is not reached up to 1 024 patterns (the Metal path is 7 to 22 % slower); the 128 x 128 row (16 384 patterns) is not measured yet, and the Metal path stays an option (ACOMBackend.metal), not the default. A larger library (2 400 axes) is the other axis still to measure

    Numbers in docs/parity.md are untouched by this table (time only).

    SpectroKit 0.13.2

    Full file and method

    diff --git a/suite/index.html b/suite/index.html index 85ab82e..f92f717 100644 --- a/suite/index.html +++ b/suite/index.html @@ -38,7 +38,7 @@

    The macEM suite

    - + diff --git a/suite/releases.html b/suite/releases.html index 636d680..cf80129 100644 --- a/suite/releases.html +++ b/suite/releases.html @@ -38,7 +38,7 @@

    Releases

    KitWhat it doesReferenceVersionParity: present of rowsDocs
    FormatoKitFile formats for electron microscopy: Velox EMD, DM3/DM4, HDF5/EMD, MRC, TIFF, MIB, EMPAD.RosettaSciIO0.12.12 of 38API
    ImagoKitImage numerics: FFT, profiles, filters, alignment, measurement, segmentation.NumPy, SciPy, scikit-image0.9.136 of 93API
    DiffractoKitCrystallography, diffraction geometry, ring and ellipse fits, indexing, orientation and ACOM.pymatgen, py4DSTEM, orix0.11.022 of 148API
    DiffractoKitCrystallography, diffraction geometry, ring and ellipse fits, indexing, orientation and ACOM.pymatgen, py4DSTEM, orix0.12.022 of 148API
    SpectroKitEDX quantification and EELS thickness, background and edges.HyperSpy, exSpy0.13.258 of 100API
    CuboKitThe 4D-STEM library: virtual imaging, centre of mass, DPC, strain, Bragg disks, parallax, ptychography.py4DSTEM0.10.0135 of 215API
    SimulatoKitMultislice TEM/STEM simulation: potentials, frozen phonons, scans, detectors, CTF.abTEM0.5.038 of 129API
    - + diff --git a/support.html b/support.html index 1038aca..5c43e4e 100644 --- a/support.html +++ b/support.html @@ -58,7 +58,7 @@

    Support

    Requirements

      -
    • macOS 27 or later for mac4DSTEM 5 and macTEM 1. For macOS 14–26, mac4DSTEM 3.0.0 remains available.
    • +
    • macOS 26 or later for mac4DSTEM 5.1 and macTEM 1.1. For macOS 14–25, mac4DSTEM 3.0.0 remains available.
    • Apple silicon — M-series Macs. Intel Macs are not supported.
    • No external runtime, toolchain, Python environment, or library installation. Every dependency ships inside the application bundle.
    • Enough free disk space for your datasets and any exported products. Memory needs scale with the size of the scan, detector, image or spectrum image.
    PackageVersionDateTagChanges
    FormatoKit0.12.12026-11-01tagchangelog
    ImagoKit0.9.12026-11-01tagchangelog
    DiffractoKit0.11.02026-10-30tagchangelog
    DiffractoKit0.12.02026-11-01tagchangelog
    SpectroKit0.13.22026-11-01tagchangelog
    CuboKit0.10.02026-11-01tagchangelog
    SimulatoKit0.5.02026-10-31tagchangelog