v0.4.2
What's Changed
- Derive the 2dseq affine from VisuCorePosition/VisuCoreOrientation (G1-G4) by @gdevenyi in #156
- Join wrapped JCAMP-DX lines by deleting the break, and stop write() corrupting records (J1, J2) by @gdevenyi in #157
- Parse escaped delimiters and nested structs instead of discarding them (J3, J4, J5) by @gdevenyi in #158
- Make FrameGroupSplitter.write() work and honour add_parameters= (A1, A2) by @gdevenyi in #159
- Read every acquired sample of an EPSI fid (R1) by @gdevenyi in #160
- Read transposed frames in their stored shape and own frame-group metadata by descriptor (D1, D2) by @gdevenyi in #161
- Reach PV360 raw data through Study, and read traj from an archive (A3, R4) by @gdevenyi in #162
- Label the acquisition-object axis for what it is, and keep slice distance a double (R2, R5, R6, D4) by @gdevenyi in #163
- Fix the API surface: metadata groups, reports, CLI options, version gates (A5-A9, D9, D10, R7, R9, J6, J7) by @gdevenyi in #164
- Close the spec paths the corpus never exercises (D3, D5-D8, R3, R8, J8) by @gdevenyi in #165
- Reordering EPI based on reco when supplied by @headmeister in #172
- Slice-package splitting requires VisuCoreSlicePacksSlices, which PV5.… by @headmeister in #173
- ACQ_ScanPipeJobSettings + fix issues found after slicepackage inference changed by @headmeister in #174
- Drop support for EOL Python <3.10, package update, typing info. by @headmeister in #175
Breaking changes
Python 3.8 and 3.9 are no longer supported
This release requires Python 3.10 or later. Python 3.8 and 3.9 environments
can no longer install this version of brukerapi. Upgrade the interpreter
and recreate the virtual environment before upgrading the package.
FID EPI ordering now follows the metadata declaration
FID EPI continuous-train handling and odd-line reversal are now read from
ACQ_scan_size and the selected reconstruction's RECO_inp_order. This
replaces the previous scheme-name-only inference. As a result, the ordered
Dataset.data / Dataset.kspace values of affected EPI acquisitions may
change, particularly for custom or newly introduced pulse-program names.
The conventional first reconstruction is used by default. If an experiment has
multiple reconstructions, select the one that applies to the FID explicitly:
Dataset("path/to/fid", reco_path="path/to/pdata/2/reco")A RuntimeWarning is emitted when the declared metadata disagrees with the
scheme fallback; review these warnings when validating existing pipelines.
Slice-package counts can change for older datasets
PV5.1 2dseq datasets without VisuCoreSlicePacks* metadata now have slice
packages inferred from contiguous frames with a common orientation. Therefore
num_slice_packages, slice_packages, and data returned by
get_slice_packages() can now report multiple packages where they previously
reported one or raised MissingProperty.
Code that assumes a single affine or a single image array should iterate over
dataset.slice_packages (or select a package with affine_of_package(i)).
The inference cannot separate adjacent packages with the same orientation;
explicit PV6+ package descriptors remain authoritative when present.
PV360 discarded raw-data jobs are no longer discovered
Folder and study discovery now omits PV360 jobs marked STORE_discard in
ACQ_ScanPipeJobSettings. These jobs intentionally have no
rawdata.jobN file, so callers must not treat their absence as a failed or
missing acquisition.
For present jobs, array sizing now prefers
ACQ_ScanPipeJobSettings.nStoredScans over ACQ_jobs.nStoredScans, as the
former is the value defined by the file format to describe bytes written. An
aborted or inconsistent acquisition can consequently have a different decoded
shape than in earlier releases. A RuntimeWarning is emitted if the two
records disagree.
Full Changelog: v0.4.1...v0.4.2