Skip to main content

fUSer

fUSer is a Python package for analyzing functional ultrasound (fUS) imaging data, including preprocessing, registration, and statistical analysis. It supports direct loading and processing of raw scan data from Iconeus systems.

This is an early-stage release. APIs may change.

Why a dedicated fUS library?

fMRI tooling (e.g., nilearn) is already mature and well-developed, so building a new library for fUS may initially seem like reinventing the wheel. However, fUS data differ fundamentally in how they are acquired and structured, which means existing fMRI pipelines rely on implicit assumptions that do not strictly hold for fUS data and therefore require substantial adaptation.

Source: Brunner et al., Nature Protocols, 2021, Fig. 3c

fUS acquires one imaging plane at a time because ultrasound signals only encode depth along the beam direction, while lateral dimensions are reconstructed within a 2D slice. There is no mechanism to encode the third spatial dimension in a single acquisition, so a 3D volume must be built by sweeping the probe. In contrast, fMRI encodes spatial information directly in the signal using magnetic field gradients, allowing full 3D volumes to be acquired without mechanical motion.

In fMRI, data are naturally represented as a 4D array (time, x, y, z), where spatial and temporal dimensions are separable. In fUS, however, data are acquired as (scan, pose, x, y, z). In typical fUS acquisitions with a linear probe, y is 1, as each acquisition produces a 2D slice. This dimension is retained to support array-based probes where y > 1, although it typically remains much smaller than the other spatial dimensions. Time is given by the combination of (scan, pose), and space is given by (pose, x, y, z). The probe sweep dimension (pose) therefore couples space and time: each spatial slice is acquired at a different time point within a sweep. Treating these slices as if they were acquired simultaneously (e.g., by using scan as time) introduces a temporal misalignment, whose impact depends on the signal timescale and analysis type. In timing-sensitive analyses (e.g., GLM, event alignment, latency estimation), this can lead to systematic bias. As a result, fUS data are not strictly separable into independent time and space dimensions and cannot be represented as a standard 4D (time, x, y, z) array without approximation.

pose-time

The figure illustrates probe pose as a function of time. Here, pose denotes the probe affine transform (a 4×4 matrix), typically dominated by translation but potentially including rotation. In this plot, pose is shown as a discrete index. The red points and connecting lines indicate the probe trajectory over time. Note that pose indices are not necessarily spatially ordered. In this example they follow a permuted sequence (e.g., 0 → 2 → 1 → 3), reflecting that probe positions may be sampled in a non-contiguous order. Each repetition of this sequence corresponds to a scan, with repeated scans separated by the red dashed lines.

The black dots indicate missing time points for individual poses. These can be filled via per-pose interpolation (see interpolate_pose) to obtain a complete 4D representation. However, interpolation introduces synthesized data and may affect downstream statistical analysis. For this reason, most components in this library are designed to operate directly on the original, non-uniformly sampled data.

Metadata

Release files for fuser-lib 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fuser-lib 0.1.0
File Size Uploaded
fuser_lib-0.1.0.tar.gz 242.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fuser-lib 0.1.0
File Interpreter ABI Platform
fuser_lib-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 260.3 kB

Release files / fuser_lib-0.1.0.tar.gz

Download URL fuser_lib-0.1.0.tar.gz
Size 242.9 kB
Tags Source
SHA-256 checksum
How to use checksums
2678e99e056904a9e90dad813c0febda1d8b65d8d5e0ece568b1f795ada959d9
BLAKE2b-256 checksum
How to use checksums
1359e0dd13f44f06e482e5f8995db718563cbbbb5b1e9512c44241aff8b572b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 6, 2026.

Transparency log

Release files / fuser_lib-0.1.0-py3-none-any.whl

Download URL fuser_lib-0.1.0-py3-none-any.whl
Size 17.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9c00dc2c24eb733af720284a28d18c6e5862f9621fec65d3ef7d6a3c00d09a18
BLAKE2b-256 checksum
How to use checksums
09ea0361b7dda8224ef004c15b33b95933bcd10647153ea76a62cb551ad07216
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page