Skip to main content

Tests codecov Ruff Docs: stable Docs: latest Virtual scanner: try it

PyPI Python Wheels License: MIT Source

pulserver

pulserver orchestrates MR acquisitions with Pulseq sequences on clinical scanners: sequence design, scanner preparation and reconstruction. It resolves the protocol an operator edits in the scanner UI against a pypulseqpp sequence function, converts the design into the segmented representation a scanner interpreter plays, and routes the raw data of each series, enriched from the sequence that acquired it, to a reconstruction, normally bartorch. Vendor-specific playout belongs to the scanner interpreters, which call pulserver's services. Passing the checks pypulseqpp provides does not establish scanner or patient safety.

Try the virtual scanner in your browser: https://pulserver.github.io/MaRGE/.

Features

  • Protocol resolution: the echo time, repetition time and bandwidth a design achieves, the scan time, and the design error for an infeasible prescription.
  • Stateless design calls for every interpreter host process of a scanner, one command per call or through a warm server, and a store of immutable designs named by their content.
  • Segmentation of a NextSequence chain into a binary IR cache, read by an ANSI C library linked into the interpreter, with the prescribed field-of-view offset applied to the logical-frame design as RF and ADC frequency and phase.
  • MRD enrichment: encoding counters, flags, encoding spaces and trajectories from the sequence.
  • Reconstruction plugins run in isolated worker processes, over a live MRD stream, an ISMRMRD file or an assembled acquisition bucket.

pulserver architecture

Quick start

pip install pulserver bartorch

A sequence plugin binds a pypulseqpp sequence function, a function that returns the designed sequences, to the scanner protocol, and a reconstruction plugin reconstructs the series it acquires. The client of a scan chooses the reconstruction, independently of the sequence. The plugin below evaluates a protocol by designing the sequence, which states the scan time and refuses a prescription the design cannot realize:

# sequences/gre.py
from pypulseqpp import sequences
from pypulseqpp.sequences.sequence.gre2D_sequence import gre2d
from pulserver.design import Evaluation, SequencePlugin, TimeParam, UIParam


class Gre(SequencePlugin):
    app = gre2d
    protocol = {UIParam.TE: TimeParam("te", range_min=3000, range_max=20000)}  # µs

    def evaluate(self, system, protocol):
        scan = self.app(system, **protocol.arguments)
        return Evaluation(protocol, sequences.duration(scan))
# recon/gre.py
import torch
import bartorch.tools as bt
from bartorch import apps, priors
from pulserver import recon


class Pics(recon.ReconPlugin):
    def recon(self, context, branch, data):
        kspace = torch.from_numpy(data.data.kspace)  # (coils, y, x)
        maps = bt.ecalib(kspace, maps=1)
        image = apps.pics(kspace, maps, regularizers=priors.Wavelet((-1, -2), 0.005))
        return recon.ReconResult(image.abs().numpy())


PLUGIN = Pics()

Scan a phantom on the virtual scanner and reconstruct it:

printf '[Limits]\nB0: 3.0\n[Limits End]\n' > limits.txt
pulserver proxy --store designs --port 9002 --plugins recon &
pulserver scan --plugins sequences --plugin gre --reconstruction gre \
  --limits limits.txt --store designs --recon 127.0.0.1:9002 --output images

The shipped sequences and reconstructions are found by name after the given directories, so --plugin gre_radial2d or --reconstruction pics needs no file of its own. A scan of a shipped sequence that names no reconstruction uses the shipped reconstruction paired with it. On a scanner, the interpreter makes the same design calls, and the reconstruction client streams to the same proxy and names its reconstruction in its config.

Documentation

The user guide covers installation and support, running the two services, and writing scanner-sequence and reconstruction plugins. The explanations describe the architecture, protocol resolution, the design store, the scanner representation, the virtual scanner and raw-data enrichment, and the examples are a course from a protocol to a reconstructed image, followed by Tours of specialised workflows, each executed when the documentation is built. Every version of the documentation is published at https://pulserver.github.io/pulserver/.

Citation

pulserver has no project publication. Cite the formats it is built on in work that uses it:

@article{layton2017pulseq,
  title   = {Pulseq: a rapid and hardware-independent pulse sequence prototyping framework},
  author  = {Layton, Kelvin J and Kroboth, Stefan and Jia, Feng and Littin, Sebastian
             and Yu, Huijun and Leupold, Jochen and Nielsen, Jon-Fredrik
             and St{\"o}cker, Tony and Zaitsev, Maxim},
  journal = {Magnetic Resonance in Medicine},
  volume  = {77},
  number  = {4},
  pages   = {1544--1552},
  year    = {2017},
  doi     = {10.1002/mrm.26235}
}

@article{inati2017ismrmrd,
  title   = {{ISMRM} Raw data format: A proposed standard for {MRI} raw datasets},
  author  = {Inati, Souheil J and Naegele, Joseph D and Zwart, Nicholas R
             and Roopchansingh, Vinai and Lizak, Martin J and Hansen, David C
             and Liu, Chia-Ying and Atkinson, David and Kellman, Peter
             and Kozerke, Sebastian and Xue, Hui and Campbell-Washburn, Adrienne E
             and S{\o}rensen, Thomas S and Hansen, Michael S},
  journal = {Magnetic Resonance in Medicine},
  volume  = {77},
  number  = {1},
  pages   = {411--421},
  year    = {2017},
  doi     = {10.1002/mrm.26089}
}

License

MIT. See License and notices.

Metadata

Release files for pulserver 0.2.1

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

Source distribution (sdist)

Source distribution for pulserver 0.2.1
File Size Uploaded
pulserver-0.2.1.tar.gz 1.1 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for pulserver 0.2.1
File
pulserver-0.2.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.26+ x86-64, Linux glibc 2.28+ x86-64 Details
pulserver-0.2.1-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
pulserver-0.2.1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.26+ x86-64, Linux glibc 2.28+ x86-64 Details
pulserver-0.2.1-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
pulserver-0.2.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.26+ x86-64 Details
pulserver-0.2.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
pulserver-0.2.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.26+ x86-64, Linux glibc 2.28+ x86-64 Details
pulserver-0.2.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
pulserver-0.2.1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.26+ x86-64 Details
pulserver-0.2.1-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 10.4 MB

Release files / pulserver-0.2.1.tar.gz

Download URL pulserver-0.2.1.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
0de02a02e301dfbdc3399d3a5e76a270935843a988b6032533416abe723ec86c
BLAKE2b-256 checksum
How to use checksums
e7c8cee8f1789358f2ea5799714653eeb132ebf462d8bc57a262e3055facfc50
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 8, 2026.

Transparency log

Release files / pulserver-0.2.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl

Download URL pulserver-0.2.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.14 Linux glibc 2.26+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
40d845614d102da7038e68861a58944706a5d7dd873c8a93ce9c3d89d7929ba0
BLAKE2b-256 checksum
How to use checksums
c013c016b2b6eb03837705cdd023b416dbfb81ec5a2877f1b0112465dee24d6c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 8, 2026.

Transparency log

Release files / pulserver-0.2.1-cp314-cp314-macosx_11_0_arm64.whl

Download URL pulserver-0.2.1-cp314-cp314-macosx_11_0_arm64.whl
Size 667.6 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d5093f6366d3c228167961aae4eb9be8385c436ea05b01f11bed36f276e666b2
BLAKE2b-256 checksum
How to use checksums
4ea1717f87c0b8f188ec0f21fef535c108bff17fe30911d945494cb6fb962fb5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 8, 2026.

Transparency log

Release files / pulserver-0.2.1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl

Download URL pulserver-0.2.1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.13 Linux glibc 2.26+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
27b340127ea95ba6f97575cd74d2c8c0903693a81bf716e24e726095558f4bf6
BLAKE2b-256 checksum
How to use checksums
76d6d9830834b8f76f4b8102a38e5748d08bd064bfaf609380a65f5bb57464cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 8, 2026.

Transparency log

Release files / pulserver-0.2.1-cp313-cp313-macosx_11_0_arm64.whl

Download URL pulserver-0.2.1-cp313-cp313-macosx_11_0_arm64.whl
Size 666.8 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4ef90db0d8599b64a44f407f44ab9927a12d24885b4fd3c091ba9ea7935e0dcc
BLAKE2b-256 checksum
How to use checksums
0d458ebf9635a45af2e13d858829c4d8f1e3e92e59f61cdcf4ac1b5988e2f386
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 8, 2026.

Transparency log

Release files / pulserver-0.2.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl

Download URL pulserver-0.2.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.12 Linux glibc 2.26+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3ef2b40f853e1419ae57d3060d1972766b720eaef0e332541a19913fc2b14492
BLAKE2b-256 checksum
How to use checksums
63431a5984ad752d11dcfd7767a43adde961051690deef897cd2b4a199868f94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 8, 2026.

Transparency log

Release files / pulserver-0.2.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL pulserver-0.2.1-cp312-cp312-macosx_11_0_arm64.whl
Size 666.8 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a96093551306927c9dbb3880ea51e4e632f9062912e7ab4c320ebee680aaade0
BLAKE2b-256 checksum
How to use checksums
e559df21decfef3d69f04f4fc1205c330bcf3181db1b2e8220bb800dd06b2fcb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 8, 2026.

Transparency log

Release files / pulserver-0.2.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl

Download URL pulserver-0.2.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.26+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0c513e406d18d6340d050f1277748c97c9f8f9da1115a3bdfb2d10cb72b41342
BLAKE2b-256 checksum
How to use checksums
e689dc050c8e93b289ae109ed1e2f57a507377c66e1f5dfafc14dfd91d45a079
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 8, 2026.

Transparency log

Release files / pulserver-0.2.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL pulserver-0.2.1-cp311-cp311-macosx_11_0_arm64.whl
Size 664.6 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
196faca042400a63f068897128c44be1701331b09b0847da601794e906adf3f3
BLAKE2b-256 checksum
How to use checksums
41801174629b03f25767dd7467d08efa33698df2278804cd3bcbaf0f32bfc3e1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 8, 2026.

Transparency log

Release files / pulserver-0.2.1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl

Download URL pulserver-0.2.1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.10 Linux glibc 2.26+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
787bdb885ae81469e9ff391a4b8f681c2b2c9ec87af427fb388b954f1bf883f1
BLAKE2b-256 checksum
How to use checksums
4af79fbd5c231664d26b2b832000601de0798b905e4fb62d62cf1195ccb10bc9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 8, 2026.

Transparency log

Release files / pulserver-0.2.1-cp310-cp310-macosx_11_0_arm64.whl

Download URL pulserver-0.2.1-cp310-cp310-macosx_11_0_arm64.whl
Size 663.5 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
30c5f3975779f2b7e005c6cca08e6e411eb9b7497b8cc1db2fa68b0ed27ec724
BLAKE2b-256 checksum
How to use checksums
aa9d180b585c523ed8ade859a9810a4c10cca8d0aa0da6ca58c0d8b3e2bcaf4a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

11 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.2

11 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