Skip to content

v0.12.0

Choose a tag to compare

@macem-release macem-release released this 01 Nov 09:52
352e81c

0.12.0 (2026-10-31)

⚠ BREAKING CHANGES

  • Sample.elements, metadata groups and segment times of Velox single spectra (#44)

Features

  • beam energy and angles of a Velox EELS spectrum image (#43) (326bb5c)
  • camera pixel pitch from a GMS TIFF tag 65027 stream (#56) (ef7ad05)
  • camera pixel pitch of a DM image object (AcquisitionMetadata.cameraPixelPitch) (#48) (9db1d9e)
  • deprecate internal-only public helpers, drop dead code, split VeloxEMDReader.swift (#34) (6930401)
  • Sample.elements, metadata groups and segment times of Velox single spectra (#44) (d941fad)
  • TIFF series the reader cannot place are refused by name (TIFFError.unsupportedSeries) (#62) (1978c85)
  • TIFF vendor pixel sizes for Zeiss SEM, TVIPS and JEOL SightX (TIFFVendorBranches.readWithVendorAxes) (#63) (9ea6acc)
  • Velox spectrum images map Sample.elements as RosettaSciIO and HyperSpy do (#57) (9d8c1d7)

Bug Fixes

  • bound the total Velox metadata bytes the per-frame reads walk (#40) (59f99d3)
  • cap the Velox frame counts read from the file (#38) (90a1bc0)
  • DM4Datacube reads a scan-shaped rank-3 object as 4D; more than four dimensions and DM3 length 0 refused by name (#46) (455872f)
  • EMPAD scan extents come from the mode acquire scan_parameters block wherever it sits (#51) (25810ce)
  • HDF5 scratch files are written without a file lock, so a read right after a write no longer fails with errno 35 (#58) (5c1a7cd)
  • libhdf5 xcframework zips without AppleDouble entries, checked with codesign --strict (ad07f24)
  • MIB app convention reads a header without, or against, its detector shape by the assembly (#50) (b3107cc)
  • tools: byte-reproducible fixture generators (fixed emdfile UUID, fixed day for Velox zone names) and correct refuter-pins generator credits (fd3fc47)

Performance Improvements

  • tile the DM4 scan-fastest gather (whole scan 420 ms to 68 ms) (#70) (185bda2)

Fixtures and tests

  • acquire block first and last, default and preferScanResolution, read 2 x 3 equal to the raw bytes (red before: the search block 9 x 9 failed the length check); series_count from the last block. Gate green; also compiled and run with Xcode 26.6. (25810ce)
  • data-dependent tests show as skipped; the real-data Peek check moves to the parity target (#42) (85142dc)
  • EMD version attributes are int64 as py4DSTEM writes them, and int32 files are read (#52) (16eb9dc)
  • fixtures: regenerate 4d/float32.h5 (fixed UUID) (fd3fc47)
  • fixtures: regenerate 4d/pins.json (h5py 3.16.0, NumPy 2.5.4, emdfile 0.0.16) (fd3fc47)
  • fixtures: regenerate 4d/singleton.h5 (fixed UUID) (fd3fc47)
  • fixtures: regenerate 4d/uint16.h5 (fixed UUID) (fd3fc47)
  • fixtures: regenerate bragg/basic.h5 (fixed UUID) (fd3fc47)
  • fixtures: regenerate bragg/check-result.json (h5py 3.16.0) (fd3fc47)
  • fixtures: regenerate bragg/empty.h5 (fixed UUID) (fd3fc47)
  • fixtures: regenerate bragg/pins.json (h5py 3.16.0, NumPy 2.5.4, emdfile 0.0.16) (fd3fc47)
  • fixtures: regenerate dm-velox-pins.json (sparse installed: spectrum_stream_not_read false; generator name) (fd3fc47)
  • fixtures: regenerate emd-bundle/check-result.json (h5py 3.16.0) (fd3fc47)
  • fixtures: regenerate planted-truth.json (generator name) (fd3fc47)
  • fixtures: regenerate the Core refuter-pins.json (generator name) (fd3fc47)
  • fixtures: regenerate the TIFF refuter-pins.json (generator name) (fd3fc47)
  • fixtures: regenerate tiff-pins.json (generator name) (fd3fc47)
  • fixtures: regenerate units-pins.json (generator name) (fd3fc47)
  • fixtures: regenerate velox-spectrum-image-pins.json (generator name) (fd3fc47)
  • fixtures: regenerate velox-spectrum-image-refuter-pins.json (generator name) (fd3fc47)
  • fixtures: regenerate velox-titles-pins.json (sparse installed; generator name) (fd3fc47)
  • fixtures: regenerate velox-titles-refuter-pins.json (sparse installed; generator name) (fd3fc47)
  • no child process copies an HDF5 write lock, so write-then-read tests stop flaking (#54) (47e44f7), closes #49
  • one generated fixture index, one Python environment and one References path for the generators (#64) (bb79a72)
  • planted copies of the five app fixtures with blank and disagreeing width and height read equal to the pinned bytes (red before: Invalid detector shape). Gate green; also compiled and run with Xcode 26.6. (b3107cc)
  • step-1-pins.json is now dm-velox-pins.json (the DM and Velox reader pins; a name, no number changes) (3e581d7)
  • step-2-pins.json is now tiff-pins.json (the TIFF reader pins; a name, no number changes) (3e581d7)
  • step-3-pins.json is now velox-titles-pins.json (the Velox title pins; a name, no number changes) (3e581d7)
  • step-3-refuter-pins.json is now velox-titles-refuter-pins.json (a name, no number changes) (3e581d7)
  • step-4-pins.json is now velox-spectrum-image-pins.json (the Velox spectrum-image pins; a name, no number changes) (3e581d7)
  • step-4-refuter-pins.json is now velox-spectrum-image-refuter-pins.json (a name, no number changes) (3e581d7)
  • the refuter-step3 fixture folder is now velox-titles-refuter (the Velox title review files; a name, no number changes) (3e581d7)
  • the step4 fixture folder is now velox-spectrum-image (the Velox spectrum-image fixtures; a name, no number changes) (3e581d7)