pulserver 0.2.2__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pulserver-0.3.0/.github/DISCUSSION_TEMPLATE/ideas.yml +19 -0
- pulserver-0.3.0/.github/DISCUSSION_TEMPLATE/q-a.yml +24 -0
- pulserver-0.3.0/.github/ISSUE_TEMPLATE/documentation.yml +24 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/AGENTS.md +0 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/PKG-INFO +1 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/api/host.md +2 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/api/index.md +9 -9
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/api/proxy.md +1 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/documentation.md +1 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/index.md +7 -7
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/internals/index.md +6 -6
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/terminology.md +2 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/examples/course.md +6 -6
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/examples/index.md +12 -12
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/examples/tours.md +4 -5
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/explanations/architecture.md +15 -8
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/explanations/index.md +13 -15
- pulserver-0.3.0/docs/misc/index.md +15 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/user-guide/index.md +5 -5
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/user-guide/reconstruction-client.md +3 -2
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/user-guide/running.md +29 -24
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/user-guide/virtual-scanner.md +12 -6
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/01-course/04_reconstruction_plugin.py +4 -3
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/01-course/05_recon_plugin.py +6 -3
- pulserver-0.3.0/gallery/02-tours/_gallery_header.md +1 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/host/__init__.py +2 -2
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/host/_command.py +17 -9
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/host/_push.py +3 -2
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/host/_server.py +4 -3
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/host/_service.py +9 -7
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/host/_store.py +126 -52
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/__init__.py +2 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/__main__.py +1 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/_designs.py +26 -12
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/_intake.py +26 -23
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/_local.py +1 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/_proxy.py +21 -15
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_runtime/exam.py +25 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/plugin.py +4 -3
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_client.py +14 -7
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_command.py +18 -8
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_console.py +35 -9
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_app.py +13 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_console.py +8 -6
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_console_sequences.py +3 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_design_push.py +50 -28
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_design_server.py +5 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_design_service.py +93 -55
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_exam_sharing.py +21 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_limits.py +6 -6
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_plugin_options.py +2 -2
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_protocol.py +1 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_proxy.py +30 -21
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_rf_layout.py +3 -3
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_scan_command.py +6 -2
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_virtual.py +4 -2
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_zoo_wave.py +2 -2
- pulserver-0.2.2/CLAUDE.md +0 -1
- pulserver-0.2.2/GEMINI.md +0 -1
- pulserver-0.2.2/docs/misc/index.md +0 -15
- pulserver-0.2.2/gallery/02-tours/_gallery_header.md +0 -1
- {pulserver-0.2.2 → pulserver-0.3.0}/.claude/skills/build-and-test/SKILL.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.claude/skills/write-documentation/SKILL.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.dockerignore +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.gitattributes +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/dependabot.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/workflows/codeql.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/workflows/console.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/workflows/docs.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/workflows/fields.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/workflows/image.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/workflows/koma.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/workflows/style.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/workflows/tags-release.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/workflows/test-ci.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.github/workflows/wheels.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.gitignore +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/.pre-commit-config.yaml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/CMakeLists.txt +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/CODE_OF_CONDUCT.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/CONTRIBUTING.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/LICENSE +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/LICENSES/gadgetron-python-MIT.txt +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/LICENSES/python-ismrmrd-server-MIT.txt +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/NEXT.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/README.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/SECURITY.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/SKILLS.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/codecov.yml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docker/Dockerfile +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docker/compose.yaml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docker/entrypoint.sh +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docker/limits/limits.txt +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docker/smoke.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/architecture-dark.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/architecture.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/capabilities.js +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/context-dark.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/context.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/pulseg-dark.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/pulseg.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/pulserver-logo-dark.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/pulserver-logo.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/pulserver-mark-dark.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/pulserver-mark.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/pulserver.css +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/repetition-dark.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/repetition.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/safety-dark.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/safety.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/session-dark.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/session.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/virtual-dark.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_static/virtual.svg +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_templates/autosummary/base.rst +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_templates/autosummary/class.rst +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_templates/autosummary/enum.rst +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/_templates/autosummary/function.rst +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/api/design.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/api/ir.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/api/mrd.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/api/protocol.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/api/recon.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/api/validate.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/api/virtual.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/api_objects.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/colab.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/conf.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/installation.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/internals/calibration.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/internals/ir-cache.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/internals/protocol-wire.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/internals/reconstruction-proxy.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/internals/sar-ratios.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/internals/virtual-scanner.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/releases.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/style.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/developer-guide/workflow.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/explanations/protocol.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/explanations/raw-data.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/explanations/reconstruction-session.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/explanations/reconstruction.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/explanations/safety-checks.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/explanations/scanner-representation.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/explanations/virtual-scanner.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/figure_style.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/index.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/misc/contributors.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/misc/license.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/misc/related.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/user-guide/reconstruction-plugins.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/docs/user-guide/scanner-sequences.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/01-course/01_protocol_to_image.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/01-course/02_sequence_plugin.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/01-course/03_scanner_representation.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/01-course/06_testing_on_the_virtual_scanner.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/01-course/README.rst +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/01-course/_gallery_header.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/02-tours/01_protocol_resolution.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/02-tours/02_segmentation.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/02-tours/03_fov_offset_enrichment.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/02-tours/README.rst +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/README.rst +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/gallery/_gallery_header.md +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/pyproject.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/scripts/build_docs.sh +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/scripts/check_throughput.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/scripts/format_and_lint.sh +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/scripts/make_artwork.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/scripts/publish_docs.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/setup.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/CMakeLists.txt +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/cache/pulseg_cache.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/core/pulseg_core.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/core/pulseg_error.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/core/pulseg_math.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseg/pulseg.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseg/pulseg_cache.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseg/pulseg_collection.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseg/pulseg_config.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseg/pulseg_errors.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseg/pulseg_io.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseg/pulseg_playout.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseg/pulseg_protocol.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseg/pulseg_types.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseq/pulseq.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseq/pulseq_config.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/include/pulseq/pulseq_types.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/io/pulseg_opts.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/io/pulseg_protocol.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/playout/pulseg_playout.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/pulseg_internal.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/pulseq/pulseq_internal.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/pulseq/pulseq_shape.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/structure/pulseg_descriptor.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/structure/pulseg_getters.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/structure/pulseg_repetition.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/c/structure/pulseg_waves.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/fourier/bindings.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/fourier/bindings.hpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/fourier/parallel.hpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/fourier/timeline.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/fourier/timeline.hpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/ir/collection.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/ir/dedup.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/ir/from_libraries.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/ir/from_libraries.hpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/ir/pulseg_convert.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/ir/pulseq_file.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/ir/pulseq_file.h +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/ir/repetition.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/ir/structure.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/ir/wave_plan.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/ir/waves.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/module.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/native.hpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/playout.cpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/cpp/playout.hpp +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/__init__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_accelerators.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_cli.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_labels.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_logs.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_memory.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_plugins.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/__init__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/_evaluation.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/_inversion.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/_pmc.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/_saturation.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/_slab.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/_user.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/bssfp2d/retrospective.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/fse3d/dual_region.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/fse3d/navigator.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/fse3d/optimized.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/fse3d/shuffling.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/fse3d/wave.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/gre3d/full_plane.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/gre3d/wave.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/gre_multiecho2d/bipolar.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/gre_multiecho3d/bipolar.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/gre_multiecho3d/full_plane.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/gre_multiecho3d/wave.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/gre_spiral2d/variable_density.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/gre_stack_of_spirals3d/variable_density.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/mprage3d/navigator.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/mprage3d/shuffling.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/mprage3d/wave.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/mprage_stack_of_spirals3d/variable_density.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/se3d/full_plane.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/se_spiral2d/variable_density.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/se_stack_of_spirals3d/variable_density.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/parameters/zte3d/meridian.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/recon/epi.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/recon/nufft.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/recon/nufft_train.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/recon/pics.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/recon/pics_train.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/recon/pmc.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/bssfp2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/bssfp3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/epi2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/epi3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/fse3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/gre2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/gre3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/gre_multiecho2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/gre_multiecho3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/gre_propeller2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/gre_radial2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/gre_spiral2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/gre_stack_of_blades3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/gre_stack_of_spirals3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/gre_stack_of_stars3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/mprage3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/mprage_stack_of_spirals3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/mprage_stack_of_stars3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/se2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/se3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/se_epi_propeller2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/se_propeller2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/se_radial2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/se_spiral2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/se_stack_of_blades3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/se_stack_of_spirals3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/se_stack_of_stars3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/_zoo/sequences/zte3d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/design/__init__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/design/_entries.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/design/_options.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/design/_plugin.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/design/_rf.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/host/__main__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/host/_blocks.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/host/_limits.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/ir/__init__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/ir/_checks.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/ir/_convert.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/ir/_playout.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/ir/_source.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/ir/_vendor.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/ir/_waves.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/mrd/__init__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/mrd/_acquisitions.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/mrd/_header.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/mrd/_images.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/mrd/_metadata.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/mrd/_sequence.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/protocol/__init__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/protocol/_keys.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/protocol/_prescription.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/protocol/_schema.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/protocol/_wire.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/_enrich.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/_held.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/_motion.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/_queue.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/_seqdesc.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/proxy/_workers.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/__init__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/__main__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_buffers.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_calibration.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_correct.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_exam_image.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_loader.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_runtime/__init__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_runtime/application.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_runtime/concurrency.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_runtime/connection.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_runtime/constants.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_runtime/mrd2dicom.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_runtime/offline.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_runtime/readers.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_runtime/writers.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/_units.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/gadgets.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/handlers/__init__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/handlers/epi.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/handlers/nufft.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/handlers/nufft_train.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/handlers/pics.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/handlers/pics_train.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/recon/handlers/pmc.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/validate/__init__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/validate/_command.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/validate/_compare.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/validate/_validate.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/validate/_xml.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/__init__.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_brainweb.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_coils.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_export.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_fourier.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_girf.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_localizer.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_motion.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_phantom.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_stream.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_timeline.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/src/pulserver/virtual/_tissue.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/_analytic.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/_host.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/_seqtext.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/_synthetic.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/_virtual.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/_zoo.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/conftest.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/bloch/bssfp.npy +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/bloch/epi_2d_main.npy +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/bloch/gre_2d_3sl.npy +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/bloch/steady_dess_hard_0hz.npy +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/bloch/steady_dess_hard_30hz.npy +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/bloch/steady_echo_hard_0hz.npy +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/bloch/steady_echo_hard_30hz.npy +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/bloch/steady_echo_selective_0hz.npy +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/bloch/steady_fid_hard_0hz.npy +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/sequences/dedup_gre_pair.seq +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/sequences/dedup_gre_pair_b.seq +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/sequences/epi_2d_main.seq +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/sequences/gre_2d_3sl.seq +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/sequences/mprage_stack_of_spirals_3d.seq +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/fixtures/sequences/zte_3d.seq +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/koma/Project.toml +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/koma/simulate.jl +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/native/check_initializers.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/native/print_wave_samples.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/native/read_cache_summary.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/native/read_rf_definitions.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/native/replay_an_instance.c +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/plugins/crash.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/plugins/gre2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/plugins/gre2d_raw.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/plugins/rf_train.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/plugins/stall.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/plugins/strong.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/plugins/tiny.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/plugins/typed.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_buffers.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_calibration.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_coil_compression.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_connection.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_correct.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_epi.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_exam_image.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_flags.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_gadgets.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_handlers.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_images.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_loader.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_mrd2dicom.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_nufft.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_pics.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_pmc.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_prewhiten.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_readers_writers.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_slots.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon/test_units.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon_plugins/children.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon_plugins/crash.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon_plugins/device.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon_plugins/exam.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon_plugins/gre2d.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/recon_plugins/pose.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_docs.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_docstring_defaults.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_docstrings.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_enrich.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_exam_artifacts.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_exam_calibration.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_host_slots.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_image.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_checks.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_designed.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_extensions.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_grouping.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_groups.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_labels.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_playout.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_profile.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_repetition.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_repetition_gradients.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_rf.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_segments.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_source.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_steady_excitation.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_vendor.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_ir_waves.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_keys.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_koma.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_logs.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_memory.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_motion.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_mrd_images.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_mrd_sequence.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_plugins.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_publish_docs.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_resolution.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_seqdesc.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_sequence_plugin.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_smoke.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_validate.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_virtual_brainweb.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_virtual_clock.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_virtual_coils.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_virtual_export.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_virtual_fourier.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_virtual_localizer.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_virtual_sequences.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_wire.py +0 -0
- {pulserver-0.2.2 → pulserver-0.3.0}/tests/test_zoo_evaluation.py +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
labels: ["idea"]
|
|
2
|
+
body:
|
|
3
|
+
- type: textarea
|
|
4
|
+
id: idea
|
|
5
|
+
attributes:
|
|
6
|
+
label: The idea
|
|
7
|
+
description: |
|
|
8
|
+
A capability, an interface or a direction you think pulserver should take,
|
|
9
|
+
before it is concrete enough to be a feature request.
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: context
|
|
15
|
+
attributes:
|
|
16
|
+
label: Where it comes from
|
|
17
|
+
description: |
|
|
18
|
+
The experiment that prompted it, and any paper or implementation that
|
|
19
|
+
already does something like it.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
labels: ["question"]
|
|
2
|
+
body:
|
|
3
|
+
- type: textarea
|
|
4
|
+
id: question
|
|
5
|
+
attributes:
|
|
6
|
+
label: What you are trying to do
|
|
7
|
+
description: |
|
|
8
|
+
The sequence plugin, reconstruction or scanner workflow, and where you got stuck. If a result looks wrong, say what you
|
|
9
|
+
expected and why.
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: code
|
|
15
|
+
attributes:
|
|
16
|
+
label: What you have so far
|
|
17
|
+
description: The call you are making, if there is one.
|
|
18
|
+
render: python
|
|
19
|
+
|
|
20
|
+
- type: input
|
|
21
|
+
id: version
|
|
22
|
+
attributes:
|
|
23
|
+
label: pulserver version
|
|
24
|
+
placeholder: "0.0.x, or the commit you are on"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: Documentation
|
|
2
|
+
description: An error, an omission, or an unanswered question in the documentation.
|
|
3
|
+
labels: ["documentation"]
|
|
4
|
+
body:
|
|
5
|
+
- type: input
|
|
6
|
+
id: page
|
|
7
|
+
attributes:
|
|
8
|
+
label: Page
|
|
9
|
+
description: URL of the page, or the docstring's object name.
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: problem
|
|
14
|
+
attributes:
|
|
15
|
+
label: Problem
|
|
16
|
+
description: >-
|
|
17
|
+
The passage that is wrong, unclear or missing, and what the implementation,
|
|
18
|
+
a test, pypulseqpp, the ISMRMRD specification or the literature says instead.
|
|
19
|
+
validations:
|
|
20
|
+
required: true
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: proposal
|
|
23
|
+
attributes:
|
|
24
|
+
label: Proposed wording
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# pulserver — agent instructions
|
|
2
2
|
|
|
3
|
-
`CLAUDE.md` and `GEMINI.md` import this file. Edit this file only.
|
|
4
3
|
`SKILLS.md` indexes the skills under `.claude/skills/`: the procedures for
|
|
5
4
|
building and testing the package and for writing documentation. This page
|
|
6
5
|
states the rules; a skill states how a recurring task is carried out under
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pulserver
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Orchestrator for MR acquisitions: sequence design, scanner preparation and reconstruction.
|
|
5
5
|
Keywords: mri,pulseq,mrd,ismrmrd,reconstruction,scanner
|
|
6
6
|
Author-Email: Matteo Cencini <matteo.cencini@gmail.com>
|
|
@@ -23,6 +23,7 @@ described in {doc}`../user-guide/running`, and the identity of a design in
|
|
|
23
23
|
|
|
24
24
|
| Object | Description |
|
|
25
25
|
| --- | --- |
|
|
26
|
-
| {obj}`~pulserver.host.DesignStore` | The designs
|
|
26
|
+
| {obj}`~pulserver.host.DesignStore` | The designs of one scan, each in `<root>/<scan>/<id>/` and immutable once written. |
|
|
27
|
+
| {obj}`~pulserver.host.prune` | Remove scan directories of a store root, least recently used first. |
|
|
27
28
|
| {obj}`~pulserver.host.design_identity` | SHA-256 of what a design depends on: plugin, limits, resolved protocol and source. |
|
|
28
29
|
| {obj}`~pulserver.host.design_id` | Identifier of a design: the first 18 hexadecimal digits of its identity. |
|
|
@@ -5,15 +5,15 @@ Conceptual background is in {doc}`../explanations/index` and procedures in the
|
|
|
5
5
|
|
|
6
6
|
| Page | Module | Contents |
|
|
7
7
|
| --- | --- | --- |
|
|
8
|
-
| {doc}`protocol` | `pulserver.protocol` | Protocol entries, presets and the protocol text blocks
|
|
9
|
-
| {doc}`design` | `pulserver.design` | {class}`~pulserver.design.SequencePlugin` and its UI entries
|
|
10
|
-
| {doc}`host` | `pulserver.host` | Design calls and the design store
|
|
11
|
-
| {doc}`ir` | `pulserver.ir` | Segmentation into the IR cache, and its playout
|
|
12
|
-
| {doc}`proxy` | `pulserver.proxy` | Reconstruction proxy, design lookup and MRD enrichment
|
|
13
|
-
| {doc}`recon` | `pulserver.recon` | {class}`~pulserver.recon.ReconPlugin`, its context, buffers and results
|
|
14
|
-
| {doc}`mrd` | `pulserver.mrd` | MRD acquisitions, header entries, images and sequence definitions
|
|
15
|
-
| {doc}`validate` | `pulserver.validate` | Playout validation against a recording or the IR cache
|
|
16
|
-
| {doc}`virtual` | `pulserver.virtual` | Phantoms, the Fourier engine, the scan clock and the reconstruction client
|
|
8
|
+
| {doc}`protocol` | `pulserver.protocol` | Protocol entries, presets and the protocol text blocks |
|
|
9
|
+
| {doc}`design` | `pulserver.design` | {class}`~pulserver.design.SequencePlugin` and its UI entries |
|
|
10
|
+
| {doc}`host` | `pulserver.host` | Design calls and the design store |
|
|
11
|
+
| {doc}`ir` | `pulserver.ir` | Segmentation into the IR cache, and its playout |
|
|
12
|
+
| {doc}`proxy` | `pulserver.proxy` | Reconstruction proxy, design lookup and MRD enrichment |
|
|
13
|
+
| {doc}`recon` | `pulserver.recon` | {class}`~pulserver.recon.ReconPlugin`, its context, buffers and results |
|
|
14
|
+
| {doc}`mrd` | `pulserver.mrd` | MRD acquisitions, header entries, images and sequence definitions |
|
|
15
|
+
| {doc}`validate` | `pulserver.validate` | Playout validation against a recording or the IR cache |
|
|
16
|
+
| {doc}`virtual` | `pulserver.virtual` | Phantoms, the Fourier engine, the scan clock and the reconstruction client |
|
|
17
17
|
|
|
18
18
|
The C library a scanner interpreter links is documented in its public headers,
|
|
19
19
|
[`src/c/include/pulseg/`](https://github.com/pulserver/pulserver/tree/main/src/c/include/pulseg),
|
|
@@ -43,6 +43,7 @@ and fields of a series in {doc}`../user-guide/reconstruction-client`.
|
|
|
43
43
|
| --- | --- |
|
|
44
44
|
| {obj}`~pulserver.proxy.DesignCache` | The designs of a store, the most recently read kept tabulated. |
|
|
45
45
|
| {obj}`~pulserver.proxy.Design` | A stored design as the reconstruction side reads it. |
|
|
46
|
+
| {obj}`~pulserver.proxy.SCAN_PARAMETER` | Header user parameter naming the scan a series was played in. |
|
|
46
47
|
| {obj}`~pulserver.proxy.DESIGN_PARAMETER` | Header user parameter naming the design a series was played from. |
|
|
47
48
|
| {obj}`~pulserver.proxy.DesignIntake` | HTTP endpoint receiving pushed designs into the store the proxy reads. |
|
|
48
49
|
|
|
@@ -333,7 +333,7 @@ A separate example is justified when it studies something across objects, or goe
|
|
|
333
333
|
|
|
334
334
|
The examples landing page carries a **Course** table and a **Tours** table. When examples fall into categories, each category gets a landing page the documentation owns, carrying one or two factual sentences and a table of what is below it. A table is preferred to a wall of thumbnails once a category holds more than a handful of examples, because a reader looking for one sequence or one module reads names rather than pictures.
|
|
335
335
|
|
|
336
|
-
Every landing table, in every section, has two columns or, on the API landing page, three: the linked page (and its module), then **Contents**. A Contents cell is a short technical noun phrase naming what the page holds (*Single-shot EPI: blurring along the echo train and Nyquist ghosting from gradient delays
|
|
336
|
+
Every landing table, in every section, has two columns or, on the API landing page, three: the linked page (and its module), then **Contents**. A Contents cell is a short technical noun phrase naming what the page holds (*Single-shot EPI: blurring along the echo train and Nyquist ghosting from gradient delays*), with no closing period, never a question, an instruction or a narrative sentence.
|
|
337
337
|
|
|
338
338
|
Global navigation carries the gallery and its categories, to the depth at which a category is still something a reader would look for on its own. Below that depth, an example is reached from the table on its category's page and from cross-references, not from the navigation tree.
|
|
339
339
|
|
|
@@ -5,13 +5,13 @@ conventions, and the implementation design behind the explanations.
|
|
|
5
5
|
|
|
6
6
|
| Page | Contents |
|
|
7
7
|
| --- | --- |
|
|
8
|
-
| {doc}`installation` | Prerequisites, the editable installation, pre-commit hooks and the documentation build
|
|
9
|
-
| {doc}`workflow` | Forks, branches, pull requests, continuous integration and the code of conduct
|
|
10
|
-
| {doc}`style` | Ruff, tests, C89 and code conventions
|
|
11
|
-
| {doc}`documentation` | Documentation types and scientific writing
|
|
12
|
-
| {doc}`terminology` | Scanner, protocol, Pulseq and MRD terminology, units and layers
|
|
13
|
-
| {doc}`internals/index` |
|
|
14
|
-
| {doc}`releases` | Versioning, wheels, PyPI and the published documentation
|
|
8
|
+
| {doc}`installation` | Prerequisites, the editable installation, pre-commit hooks and the documentation build |
|
|
9
|
+
| {doc}`workflow` | Forks, branches, pull requests, continuous integration and the code of conduct |
|
|
10
|
+
| {doc}`style` | Ruff, tests, C89 and code conventions; KomaMRI simulation |
|
|
11
|
+
| {doc}`documentation` | Documentation types and scientific writing |
|
|
12
|
+
| {doc}`terminology` | Scanner, protocol, Pulseq and MRD terminology, units and layers |
|
|
13
|
+
| {doc}`internals/index` | IR cache, protocol text blocks, reconstruction proxy, calibration, SAR ratios, virtual scanner |
|
|
14
|
+
| {doc}`releases` | Versioning, wheels, PyPI and the published documentation |
|
|
15
15
|
|
|
16
16
|
```{toctree}
|
|
17
17
|
:hidden:
|
|
@@ -6,12 +6,12 @@ authors.
|
|
|
6
6
|
|
|
7
7
|
| Page | Contents |
|
|
8
8
|
| --- | --- |
|
|
9
|
-
| {doc}`calibration` | Prewhitening, coil compression, sensitivity maps and the reuse of stored maps
|
|
10
|
-
| {doc}`ir-cache` | Conversion passes, waves, playout stages, the heaviest repetition, the cache file and the C89 library
|
|
11
|
-
| {doc}`protocol-wire` | RF layout, protocol keys and values, and the protocol text blocks
|
|
12
|
-
| {doc}`reconstruction-proxy` | Reconstruction units, image headers, enrichment and trajectory rules, readout placement and workers
|
|
13
|
-
| {doc}`sar-ratios` | pTx SAR ratios from VOPs against a reference pulse
|
|
14
|
-
| {doc}`virtual-scanner` | Played trajectory, signal model, coils, Fourier engine, export, test coverage and scan clock
|
|
9
|
+
| {doc}`calibration` | Prewhitening, coil compression, sensitivity maps and the reuse of stored maps |
|
|
10
|
+
| {doc}`ir-cache` | Conversion passes, waves, playout stages, the heaviest repetition, the cache file and the C89 library |
|
|
11
|
+
| {doc}`protocol-wire` | RF layout, protocol keys and values, and the protocol text blocks |
|
|
12
|
+
| {doc}`reconstruction-proxy` | Reconstruction units, image headers, enrichment and trajectory rules, readout placement and workers |
|
|
13
|
+
| {doc}`sar-ratios` | pTx SAR ratios from VOPs against a reference pulse |
|
|
14
|
+
| {doc}`virtual-scanner` | Played trajectory, signal model, coils, Fourier engine, export, test coverage and scan clock |
|
|
15
15
|
|
|
16
16
|
```{toctree}
|
|
17
17
|
:hidden:
|
|
@@ -70,7 +70,8 @@ estimate; the design the interpreter plays is the stored one.
|
|
|
70
70
|
**Storage.** A *design* is one generated or imported chain with its IR cache,
|
|
71
71
|
immutable once written. Its *identity* is the hash of what it depends on; its
|
|
72
72
|
*identifier* is the first 18 hexadecimal digits of the identity. The *design
|
|
73
|
-
store* is the directory holding
|
|
73
|
+
store* is the directory holding one directory per *scan*, named by whatever
|
|
74
|
+
plays it, and a scan's directory holds the design the scan plays. A *design call* is one `list`,
|
|
74
75
|
`validate`, `generate` or `import` of an interpreter host process; no call
|
|
75
76
|
keeps state beyond the designs it stores. A design is *pushed* to the *design intake*, the
|
|
76
77
|
proxy's HTTP endpoint writing its store, as a *bundle* of the files of its
|
|
@@ -10,12 +10,12 @@ everything you see is computed by the code on the page.
|
|
|
10
10
|
|
|
11
11
|
| Lesson | Contents |
|
|
12
12
|
| --- | --- |
|
|
13
|
-
| {doc}`1. Your first scan </generated/gallery/01-course/01_protocol_to_image>` |
|
|
14
|
-
| {doc}`2. Your sequence in the scanner UI </generated/gallery/01-course/02_sequence_plugin>` | Sequence plugin, protocol entries and `evaluate
|
|
15
|
-
| {doc}`3. What the scanner plays </generated/gallery/01-course/03_scanner_representation>` | Safety checks, repetition, virtual segments and segment instances
|
|
16
|
-
| {doc}`4. What your recon receives </generated/gallery/01-course/04_reconstruction_plugin>` | MRD enrichment: counters, flags, encoding spaces and trajectory
|
|
17
|
-
| {doc}`5. Your recon plugin </generated/gallery/01-course/05_recon_plugin>` | Reconstruction units, inverse FFT and `pics
|
|
18
|
-
| {doc}`6. Test your pair on the virtual scanner </generated/gallery/01-course/06_testing_on_the_virtual_scanner>` | Flip-angle series against the closed-form signal
|
|
13
|
+
| {doc}`1. Your first scan </generated/gallery/01-course/01_protocol_to_image>` | Acquisition on the virtual scanner, from protocol to image |
|
|
14
|
+
| {doc}`2. Your sequence in the scanner UI </generated/gallery/01-course/02_sequence_plugin>` | Sequence plugin, protocol entries and `evaluate` |
|
|
15
|
+
| {doc}`3. What the scanner plays </generated/gallery/01-course/03_scanner_representation>` | Safety checks, repetition, virtual segments and segment instances |
|
|
16
|
+
| {doc}`4. What your recon receives </generated/gallery/01-course/04_reconstruction_plugin>` | MRD enrichment: counters, flags, encoding spaces and trajectory |
|
|
17
|
+
| {doc}`5. Your recon plugin </generated/gallery/01-course/05_recon_plugin>` | Reconstruction units, inverse FFT and `pics` |
|
|
18
|
+
| {doc}`6. Test your pair on the virtual scanner </generated/gallery/01-course/06_testing_on_the_virtual_scanner>` | Flip-angle series against the closed-form signal |
|
|
19
19
|
|
|
20
20
|
By the end you have two files, a sequence plugin and a recon plugin, that run
|
|
21
21
|
unchanged on a real scanner through its interpreter
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Examples
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
Executed when the documentation is built: every figure and number comes from
|
|
4
|
+
the code on the page.
|
|
5
5
|
|
|
6
6
|
The concepts these pages rely on are in {doc}`/explanations/index`, and the
|
|
7
7
|
interfaces they call are documented in {doc}`/api/index`.
|
|
@@ -12,22 +12,22 @@ The shortest path from a protocol to a reconstructed image, read in order.
|
|
|
12
12
|
|
|
13
13
|
| Lesson | Contents |
|
|
14
14
|
| --- | --- |
|
|
15
|
-
| {doc}`/generated/gallery/01-course/01_protocol_to_image` |
|
|
16
|
-
| {doc}`/generated/gallery/01-course/02_sequence_plugin` | Sequence plugin, protocol entries and `evaluate
|
|
17
|
-
| {doc}`/generated/gallery/01-course/03_scanner_representation` | Safety checks, repetition, virtual segments and segment instances
|
|
18
|
-
| {doc}`/generated/gallery/01-course/04_reconstruction_plugin` | MRD enrichment: counters, flags, encoding spaces and trajectory
|
|
19
|
-
| {doc}`/generated/gallery/01-course/05_recon_plugin` | Reconstruction units, inverse FFT and `pics
|
|
20
|
-
| {doc}`/generated/gallery/01-course/06_testing_on_the_virtual_scanner` | Flip-angle series against the closed-form signal
|
|
15
|
+
| {doc}`/generated/gallery/01-course/01_protocol_to_image` | Acquisition on the virtual scanner, from protocol to image |
|
|
16
|
+
| {doc}`/generated/gallery/01-course/02_sequence_plugin` | Sequence plugin, protocol entries and `evaluate` |
|
|
17
|
+
| {doc}`/generated/gallery/01-course/03_scanner_representation` | Safety checks, repetition, virtual segments and segment instances |
|
|
18
|
+
| {doc}`/generated/gallery/01-course/04_reconstruction_plugin` | MRD enrichment: counters, flags, encoding spaces and trajectory |
|
|
19
|
+
| {doc}`/generated/gallery/01-course/05_recon_plugin` | Reconstruction units, inverse FFT and `pics` |
|
|
20
|
+
| {doc}`/generated/gallery/01-course/06_testing_on_the_virtual_scanner` | Flip-angle series against the closed-form signal |
|
|
21
21
|
|
|
22
22
|
## Tours
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Standalone examples beyond the Course; each names the lessons it assumes.
|
|
25
25
|
|
|
26
26
|
| Tour | Contents |
|
|
27
27
|
| --- | --- |
|
|
28
|
-
| {doc}`/generated/gallery/02-tours/01_protocol_resolution` | Bandwidth quantization and minimum echo time
|
|
29
|
-
| {doc}`/generated/gallery/02-tours/02_segmentation` | Repetition, virtual segments and subsequences; segment count against scan length
|
|
30
|
-
| {doc}`/generated/gallery/02-tours/03_fov_offset_enrichment` | Field-of-view offset in the IR cache and its phase in MRD enrichment
|
|
28
|
+
| {doc}`/generated/gallery/02-tours/01_protocol_resolution` | Bandwidth quantization and minimum echo time |
|
|
29
|
+
| {doc}`/generated/gallery/02-tours/02_segmentation` | Repetition, virtual segments and subsequences; segment count against scan length |
|
|
30
|
+
| {doc}`/generated/gallery/02-tours/03_fov_offset_enrichment` | Field-of-view offset in the IR cache and its phase in MRD enrichment |
|
|
31
31
|
|
|
32
32
|
```{toctree}
|
|
33
33
|
:hidden:
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
# Tours
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
alone and states the lessons of the {doc}`course` it assumes.
|
|
3
|
+
Standalone examples beyond the {doc}`course`. Each names the lessons it assumes.
|
|
5
4
|
|
|
6
5
|
| Tour | Contents |
|
|
7
6
|
| --- | --- |
|
|
8
|
-
| {doc}`/generated/gallery/02-tours/01_protocol_resolution` | Bandwidth quantization and minimum echo time
|
|
9
|
-
| {doc}`/generated/gallery/02-tours/02_segmentation` | Repetition, virtual segments and subsequences; segment count against scan length
|
|
10
|
-
| {doc}`/generated/gallery/02-tours/03_fov_offset_enrichment` | Field-of-view offset in the IR cache and its phase in MRD enrichment
|
|
7
|
+
| {doc}`/generated/gallery/02-tours/01_protocol_resolution` | Bandwidth quantization and minimum echo time |
|
|
8
|
+
| {doc}`/generated/gallery/02-tours/02_segmentation` | Repetition, virtual segments and subsequences; segment count against scan length |
|
|
9
|
+
| {doc}`/generated/gallery/02-tours/03_fov_offset_enrichment` | Field-of-view offset in the IR cache and its phase in MRD enrichment |
|
|
11
10
|
|
|
12
11
|
```{toctree}
|
|
13
12
|
:hidden:
|
|
@@ -36,9 +36,9 @@ both on the virtual scanner.
|
|
|
36
36
|
- **Writes a design whole or not at all, once, and never modifies it.**
|
|
37
37
|
|
|
38
38
|
Code: {mod}`pulserver.host`. Tests: *a design being written is invisible until it is whole*; *two processes designing one protocol at once store it once*; *a stored design holds the files its manifest records and no other* (`test_design_service.py`).
|
|
39
|
-
- **
|
|
39
|
+
- **Keeps one design per scan, and prunes whole scans least recently used first.**
|
|
40
40
|
|
|
41
|
-
Code:
|
|
41
|
+
Code: {class}`~pulserver.host.DesignStore`, {func}`~pulserver.host.prune`. Tests: *a design committed to a scan replaces the scan's previous design*; *pruning removes the scans unused for longest first*; *a scan whose design is found again is used again*; *pruning keeps a scan used within the day whatever the limits* (`test_design_service.py`).
|
|
42
42
|
- **Pushes each design to a proxy on another computer, which stores it only if every file matches the manifest.**
|
|
43
43
|
|
|
44
44
|
Code: {class}`~pulserver.proxy.DesignIntake`. Tests: *a generation pushes the design it replies*; *the intake refuses a tampered bundle with the reason* (`test_design_push.py`).
|
|
@@ -90,16 +90,23 @@ below $2^{24}$ exactly.
|
|
|
90
90
|
|
|
91
91
|
```text
|
|
92
92
|
designs/
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
93
|
+
29258/ one scan, named by whatever plays it
|
|
94
|
+
3f9c0a1b2c3d4e5f60/ the scan's design
|
|
95
|
+
sequence.seq first file of the NextSequence chain, binary Pulseq
|
|
96
|
+
sequence_main.seq the remaining files, when there are prescans
|
|
97
|
+
sequence.pseg IR cache
|
|
98
|
+
resolved.protocol
|
|
99
|
+
manifest.json identity and identifier, limits, package versions,
|
|
99
100
|
creation time, plugin and source, scan time,
|
|
100
101
|
field-of-view offset, SHA-256 of every file
|
|
102
|
+
motion.buf the poses of a scan corrected for motion
|
|
101
103
|
```
|
|
102
104
|
|
|
105
|
+
A design is reused while its scan holds it; a design call that resolves to
|
|
106
|
+
another design stores it in place of the scan's previous one. The scanner's
|
|
107
|
+
reconstruction client names the scan and the design in the MRD header, and the
|
|
108
|
+
proxy reads the design from `<store>/<scan>/<id>/`.
|
|
109
|
+
|
|
103
110
|
The proxy reads the Pulseq files, not the cache: the cache is derived for
|
|
104
111
|
playout, and the Pulseq files are the design of record.
|
|
105
112
|
|
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
# Explanations
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
rest of the documentation assumes.
|
|
3
|
+
The concepts behind pulserver, one page each, in the order of a scan.
|
|
4
|
+
Interfaces are in the {doc}`API reference <../api/index>`, procedures in the
|
|
5
|
+
{doc}`user guide <../user-guide/index>`.
|
|
7
6
|
|
|
8
7
|
| Page | Contents |
|
|
9
8
|
| --- | --- |
|
|
10
|
-
| {doc}`architecture` | Design calls, reconstruction proxy and the design store
|
|
11
|
-
| {doc}`protocol` | Prescription, resolved protocol, units and wire precision
|
|
12
|
-
| {doc}`safety-checks` | Checks run before a design is stored, and those computed by the vendor's routines
|
|
13
|
-
| {doc}`scanner-representation` | Base blocks, virtual segments, segment instances and the execution stream
|
|
14
|
-
| {doc}`raw-data` | Counters, flags, encoding spaces, trajectory and field-of-view phase
|
|
15
|
-
| {doc}`reconstruction-session` | MRD streaming, design lookup, workers and slots, forwarding and DICOM
|
|
16
|
-
| {doc}`reconstruction` | Reconstruction units, results and the exam's calibration context
|
|
17
|
-
| {doc}`virtual-scanner` | Virtual interpreter, Fourier engine and reconstruction client
|
|
9
|
+
| {doc}`architecture` | Design calls, reconstruction proxy and the design store |
|
|
10
|
+
| {doc}`protocol` | Prescription, resolved protocol, units and wire precision |
|
|
11
|
+
| {doc}`safety-checks` | Checks run before a design is stored, and those computed by the vendor's routines |
|
|
12
|
+
| {doc}`scanner-representation` | Base blocks, virtual segments, segment instances and the execution stream |
|
|
13
|
+
| {doc}`raw-data` | Counters, flags, encoding spaces, trajectory and field-of-view phase |
|
|
14
|
+
| {doc}`reconstruction-session` | MRD streaming, design lookup, workers and slots, forwarding and DICOM |
|
|
15
|
+
| {doc}`reconstruction` | Reconstruction units, results and the exam's calibration context |
|
|
16
|
+
| {doc}`virtual-scanner` | Virtual interpreter, Fourier engine and reconstruction client |
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
{doc}`../developer-guide/internals/index`.
|
|
18
|
+
Layouts, wire formats and numerical methods are in the
|
|
19
|
+
{doc}`internals <../developer-guide/internals/index>`.
|
|
22
20
|
|
|
23
21
|
```{toctree}
|
|
24
22
|
:hidden:
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Miscellaneous
|
|
2
|
+
|
|
3
|
+
| Page | Contents |
|
|
4
|
+
| --- | --- |
|
|
5
|
+
| {doc}`license` | MIT licence; notices for adapted code, BrainWeb data and artwork |
|
|
6
|
+
| {doc}`related` | Related projects |
|
|
7
|
+
| {doc}`contributors` | Maintainers and contributors |
|
|
8
|
+
|
|
9
|
+
```{toctree}
|
|
10
|
+
:hidden:
|
|
11
|
+
|
|
12
|
+
license
|
|
13
|
+
related
|
|
14
|
+
contributors
|
|
15
|
+
```
|
|
@@ -6,11 +6,11 @@ interfaces, units and defaults in {doc}`../api/index`.
|
|
|
6
6
|
|
|
7
7
|
| Page | Contents |
|
|
8
8
|
| --- | --- |
|
|
9
|
-
| {doc}`running` | Design calls, design server, reconstruction proxy and server, playout validation
|
|
10
|
-
| {doc}`scanner-sequences` | Sequence plugins, protocol entries and evaluation
|
|
11
|
-
| {doc}`reconstruction-plugins` | Reconstruction plugins and offline reconstruction
|
|
12
|
-
| {doc}`reconstruction-client` | Messages and header of a reconstruction client
|
|
13
|
-
| {doc}`virtual-scanner` | Phantom scans through a stored design, the proxy and a plugin
|
|
9
|
+
| {doc}`running` | Design calls, design server, reconstruction proxy and server, playout validation |
|
|
10
|
+
| {doc}`scanner-sequences` | Sequence plugins, protocol entries and evaluation |
|
|
11
|
+
| {doc}`reconstruction-plugins` | Reconstruction plugins and offline reconstruction |
|
|
12
|
+
| {doc}`reconstruction-client` | Messages and header of a reconstruction client |
|
|
13
|
+
| {doc}`virtual-scanner` | Phantom scans through a stored design, the proxy and a plugin |
|
|
14
14
|
|
|
15
15
|
```{toctree}
|
|
16
16
|
:hidden:
|
|
@@ -42,6 +42,7 @@ connection, so the client can finish sending and read the reason.
|
|
|
42
42
|
|
|
43
43
|
| Element | Requirement | Use |
|
|
44
44
|
| --- | --- | --- |
|
|
45
|
+
| `pulserver_scan`, a `userParameterString` | Required | The scan the design is stored for: the `--scan` of the design call, one directory name of the design store |
|
|
45
46
|
| `pulserver_design`, a `userParameterString` | Required | The identifier of the design the interpreter plays, from the `GENERATED` or `IMPORTED` reply: 18 hexadecimal digits, which are three 24-bit integers of six digits each |
|
|
46
47
|
| `experimentalConditions.H1resonanceFrequency_Hz` | Required by the MRD schema | DICOM `ImagingFrequency` |
|
|
47
48
|
| `acquisitionSystemInformation.receiverChannels` | Optional | The coil count of a reconstruction buffer laid out before its first acquisition |
|
|
@@ -52,8 +53,8 @@ connection, so the client can finish sending and read the reason.
|
|
|
52
53
|
| `encoding` | Optional | Replaced by one encoding space per subsequence, and one more for the navigator readouts of a subsequence that has them. The reconstruction space is the sequence's matrix size and field of view, one slice deep for a stack of 2D slices; the encoded space of a Cartesian space has the readout widened to the full echo, oversampling included, and its field of view in proportion. The encoding limits are the extremes of the counters the readouts reach, centred on the k-space centre line and partition the sequence defines. A matrix size or field of view the sequence does not define is kept from the client's encoding at the same index |
|
|
53
54
|
| `sequenceParameters` | Optional | TR, TE, TI and flip angles replaced by those the sequence defines; TR and TE it does not define are measured by pypulseqpp's `test_report_dict`, flip angles it does not define are the distinct values of `rf_flip_angles` |
|
|
54
55
|
|
|
55
|
-
A header that the ISMRMRD schema does not accept, or that names no design
|
|
56
|
-
|
|
56
|
+
A header that the ISMRMRD schema does not accept, or that names no design the
|
|
57
|
+
store holds for its scan, is refused before any acquisition is read.
|
|
57
58
|
|
|
58
59
|
## Acquisitions
|
|
59
60
|
|
|
@@ -19,9 +19,9 @@ store are described in {doc}`../explanations/architecture`.
|
|
|
19
19
|
```bash
|
|
20
20
|
pulserver design list --plugins DIR --plugin NAME [--limits FILE --rf-definitions] [--socket PATH]
|
|
21
21
|
pulserver design validate --plugins DIR --plugin NAME --limits FILE [--rf-layout] [--exam DIR] [--socket PATH] < VALUES
|
|
22
|
-
pulserver design generate --plugins DIR --plugin NAME --limits FILE --store DIR [--exam DIR] [--push URL] [--socket PATH] < VALUES
|
|
23
|
-
pulserver design import --limits FILE --store DIR [--push URL] [--socket PATH] < IMPORT
|
|
24
|
-
pulserver design push --store DIR --to URL ID...
|
|
22
|
+
pulserver design generate --plugins DIR --plugin NAME --limits FILE --store DIR --scan NAME [--exam DIR] [--push URL] [--socket PATH] < VALUES
|
|
23
|
+
pulserver design import --limits FILE --store DIR --scan NAME [--push URL] [--socket PATH] < IMPORT
|
|
24
|
+
pulserver design push --store DIR --scan NAME --to URL ID...
|
|
25
25
|
pulserver design prune --store DIR [--max-age-days D] [--max-bytes B]
|
|
26
26
|
```
|
|
27
27
|
|
|
@@ -31,16 +31,17 @@ arguments. `--plugins` is a directory of scanner-sequence plugin files,
|
|
|
31
31
|
`<plugin>.py`, and may be repeated: a plugin is the file of the first directory
|
|
32
32
|
that holds it, and the shipped plugins are searched last
|
|
33
33
|
({ref}`shipped-sequences`). `--store` is the design store, created when
|
|
34
|
-
missing
|
|
34
|
+
missing, and `--scan` the name of the scan the design is stored for: one
|
|
35
|
+
directory name, not starting with `.`.
|
|
35
36
|
|
|
36
37
|
| Call | Reply |
|
|
37
38
|
| --- | --- |
|
|
38
39
|
| `list` | `PROTOCOL` and the plugin's listing block; with `--rf-definitions`, the `[RfDefinitions]` block |
|
|
39
40
|
| `validate` | `VALID <seconds>` or `INVALID`, an `INFO` line and the value block of the resolved protocol; with `--rf-layout`, a valid reply ends with the `[RfLayout]` block |
|
|
40
|
-
| `generate` | `GENERATED <id>`, the identifier of the design in the
|
|
41
|
+
| `generate` | `GENERATED <id>`, the identifier of the design in the scan's directory |
|
|
41
42
|
| `import` | `IMPORTED <id>` |
|
|
42
43
|
| `push` | `PUSHED <count>`: the designs sent, not counting those the intake already holds |
|
|
43
|
-
| `prune` | `PRUNED <count
|
|
44
|
+
| `prune` | `PRUNED <count>`: the scans removed |
|
|
44
45
|
|
|
45
46
|
A failed call replies `ERROR <message>` and exits with status 1; a plugin that
|
|
46
47
|
ends its process ends the call without a reply and with a nonzero exit status.
|
|
@@ -188,20 +189,24 @@ block = "[Protocol]\nTE: 5000\nnx: 96\n[Protocol End]\n"
|
|
|
188
189
|
status, reply = call("validate", plugins="sequences", plugin="gre2d",
|
|
189
190
|
limits=limits, block=block)
|
|
190
191
|
status, reply = call("generate", plugins="sequences", plugin="gre2d",
|
|
191
|
-
limits=limits, block=block,
|
|
192
|
+
limits=limits, block=block,
|
|
193
|
+
store=DesignStore("designs", "scan"))
|
|
192
194
|
```
|
|
193
195
|
|
|
194
196
|
A plugin file is imported again when its modification time changes.
|
|
195
197
|
|
|
196
198
|
### Design store
|
|
197
199
|
|
|
198
|
-
The store holds one directory per
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
200
|
+
The store holds one directory per scan, `<store>/<scan>/`, and a scan's
|
|
201
|
+
directory holds its design, `<store>/<scan>/<id>/`, laid out as
|
|
202
|
+
{doc}`../explanations/architecture` shows. A design is reused while its scan
|
|
203
|
+
holds it: a call that resolves to the same design replies with it, and one
|
|
204
|
+
that resolves to another stores the new design in place of the scan's
|
|
205
|
+
previous one. `prune` removes whole scans, least recently used first: those
|
|
206
|
+
unused for longer than `--max-age-days`, then others until the store holds at
|
|
207
|
+
most `--max-bytes`. A scan used within the last day is kept whatever the
|
|
208
|
+
limits, since it may still be playing or reconstructing. A store that receives
|
|
209
|
+
pushed designs is pruned the same way, on the reconstruction computer.
|
|
205
210
|
|
|
206
211
|
### Design push
|
|
207
212
|
|
|
@@ -258,13 +263,13 @@ pulserver proxy --store DIR --port N --forward HOST:PORT [--forward-config NAME]
|
|
|
258
263
|
|
|
259
264
|
| Option | Meaning |
|
|
260
265
|
| --- | --- |
|
|
261
|
-
| `--store` | The design store the proxy reads: the one the design calls write, or the one the intake writes |
|
|
266
|
+
| `--store` | The design store the proxy reads: the one the design calls write, or the one the intake writes. It also holds each scan's pose file, `<store>/<scan>/motion.buf`, for a scan corrected for motion |
|
|
262
267
|
| `--port` | TCP port the scanner's reconstruction client connects to |
|
|
263
268
|
| `--host` | Address to listen on; the loopback interface when unset, `0.0.0.0` for every interface |
|
|
264
269
|
| `--intake-port` | TCP port of the design intake, on the `--host` address; no intake when unset |
|
|
265
270
|
| `--plugins` | Directory of reconstruction plugin files, `<plugin>.py`, repeatable, searched in order before the shipped ones; required unless `--forward` is given |
|
|
266
271
|
| `--queue` | Directory the series waiting for a slot are written to; a temporary directory, removed when the proxy stops, when unset |
|
|
267
|
-
| `--exams` | Directory in which the proxies of this host share the caches of an exam
|
|
272
|
+
| `--exams` | Directory in which the proxies of this host share the caches of an exam, one directory per exam named by its identity: `exam-<ExamID>` for a header carrying `ExamID`. Created readable by the proxy's user alone; one that exists is used with the permissions the site gave it, so design calls running as another user can read the exam's maps. A location under the system temporary directory, private to the proxy's user, when unset |
|
|
268
273
|
| `--slots` | Series reconstructed at once; derived from available memory and the GPUs when unset |
|
|
269
274
|
| `--gpu-slots` | Series reconstructed at once on each GPU when `--slots` is unset; 1 by default |
|
|
270
275
|
| `--spares` | Worker processes started ahead of a series; 1 by default |
|
|
@@ -283,9 +288,9 @@ fields the client sends in {doc}`reconstruction-client`.
|
|
|
283
288
|
|
|
284
289
|
### Series routing
|
|
285
290
|
|
|
286
|
-
The MRD header of each series names the
|
|
287
|
-
|
|
288
|
-
names no stored
|
|
291
|
+
The MRD header of each series names the scan in the `pulserver_scan` user
|
|
292
|
+
parameter and the design it was played from in `pulserver_design`, and the
|
|
293
|
+
proxy refuses a series whose header names no design stored for that scan. The client's config names the reconstruction plugin, as
|
|
289
294
|
a bare plugin name or the path of its file, or as either under
|
|
290
295
|
`parameters.config`; the design names none. A series whose config names none
|
|
291
296
|
is refused unless the proxy forwards with `--forward-config`.
|
|
@@ -351,11 +356,11 @@ relayed back to the client.
|
|
|
351
356
|
|
|
352
357
|
With `--intake-port`, the proxy runs a design intake beside it
|
|
353
358
|
({class}`~pulserver.proxy.DesignIntake`), an HTTP endpoint that writes the
|
|
354
|
-
designs pushed to it into `--store`. `HEAD /designs/<id>` answers 200
|
|
355
|
-
|
|
356
|
-
and answers 201, 200 for a design already
|
|
357
|
-
bundle that is not the design its path
|
|
358
|
-
marks
|
|
359
|
+
designs pushed to it into `--store`. `HEAD /designs/<scan>/<id>` answers 200
|
|
360
|
+
when the scan holds the design and 404 otherwise; `PUT /designs/<scan>/<id>`
|
|
361
|
+
stores a bundle as the scan's design and answers 201, 200 for a design already
|
|
362
|
+
stored, or 400 with the reason for a bundle that is not the design its path
|
|
363
|
+
names. A `HEAD` for a stored design marks its scan as used for `prune`.
|
|
359
364
|
|
|
360
365
|
### Network exposure
|
|
361
366
|
|
|
@@ -17,10 +17,12 @@ field-of-view offset in the protocol block, under the limits file `system.txt`
|
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
19
|
printf '[Protocol]\nTE: 5000\nnx: 64\nny: 64\nfov_offset_x: 20.0\n[Protocol End]\n' \
|
|
20
|
-
| pulserver design generate --plugins sequences --plugin gre2d --limits system.txt
|
|
20
|
+
| pulserver design generate --plugins sequences --plugin gre2d --limits system.txt \
|
|
21
|
+
--store designs --scan scan1
|
|
21
22
|
```
|
|
22
23
|
|
|
23
|
-
The reply is `GENERATED <id
|
|
24
|
+
The reply is `GENERATED <id>`, and the design is stored for the scan `scan1`.
|
|
25
|
+
Start a reconstruction proxy on the same store
|
|
24
26
|
({doc}`running`):
|
|
25
27
|
|
|
26
28
|
```bash
|
|
@@ -33,7 +35,7 @@ pulserver proxy --store designs --port 9002 --plugins recon
|
|
|
33
35
|
from pulserver import virtual
|
|
34
36
|
|
|
35
37
|
design = "..." # the identifier the generation replied
|
|
36
|
-
sequence = f"designs/{design}/sequence.seq"
|
|
38
|
+
sequence = f"designs/scan1/{design}/sequence.seq"
|
|
37
39
|
phantom = virtual.Phantom(
|
|
38
40
|
[
|
|
39
41
|
virtual.Ellipse((0.02, 0.0, 0.0), (0.08, 0.06), t1=0.9, t2=0.07),
|
|
@@ -44,6 +46,7 @@ phantom = virtual.Phantom(
|
|
|
44
46
|
readouts = virtual.simulate(sequence, phantom.tissue(1e-3))
|
|
45
47
|
received = virtual.send(
|
|
46
48
|
("127.0.0.1", 9002),
|
|
49
|
+
"scan1",
|
|
47
50
|
design,
|
|
48
51
|
readouts,
|
|
49
52
|
position_mm=(20.0, 0.0, 0.0),
|
|
@@ -123,7 +126,9 @@ with wave.open("scan.wav", "wb") as audio:
|
|
|
123
126
|
audio.writeframes(np.round(32767 * chunk.sound.T).astype("<i2").tobytes())
|
|
124
127
|
yield from chunk.readouts
|
|
125
128
|
|
|
126
|
-
received = virtual.send(
|
|
129
|
+
received = virtual.send(
|
|
130
|
+
("127.0.0.1", 9002), "scan1", design, acquired(), config="pics"
|
|
131
|
+
)
|
|
127
132
|
```
|
|
128
133
|
|
|
129
134
|
The scan is simulated in a thread of its own, ahead of the clock. At
|
|
@@ -158,6 +163,7 @@ phantom = virtual.Phantom(
|
|
|
158
163
|
readouts = virtual.simulate(sequence, phantom.tissue(1e-3), rotation=rotation)
|
|
159
164
|
received = virtual.send(
|
|
160
165
|
("127.0.0.1", 9002),
|
|
166
|
+
"scan1",
|
|
161
167
|
design,
|
|
162
168
|
readouts,
|
|
163
169
|
position_mm=1e3 * centre,
|
|
@@ -192,8 +198,8 @@ line, is written to standard output, and the scan clock to standard error.
|
|
|
192
198
|
- `--limits` is the `[Limits]` block of {ref}`scanner-limits`; the phantom's
|
|
193
199
|
chemical shifts are resolved at its `B0`. `--protocol` holds a protocol
|
|
194
200
|
block, as `pulserver design generate` reads it on standard input; without
|
|
195
|
-
it, the plugin's defaults are designed.
|
|
196
|
-
|
|
201
|
+
it, the plugin's defaults are designed. The design is stored for a new scan,
|
|
202
|
+
named after the time; without `--store`, in a temporary directory.
|
|
197
203
|
- `--orientation` names the rotation from logical to physical axes by the
|
|
198
204
|
physical direction of each logical axis:
|
|
199
205
|
|