diff --git a/src/pulserver/__init__.py b/src/pulserver/__init__.py index 9b6f668..0188619 100644 --- a/src/pulserver/__init__.py +++ b/src/pulserver/__init__.py @@ -5,6 +5,7 @@ from pypulseq import Opts # noqa from . import blocks # noqa +from . import parsing # noqa from . import plan # noqa from . import sequences # noqa @@ -12,7 +13,6 @@ from ._core import Sequence # noqa from ._opts import get_opts # noqa -from ._parsing import ParamsParser # noqa __all__.extend(["Opts", "get_opts"]) __all__.extend(["Sequence", "ParamsParser"]) diff --git a/src/pulserver/_server/_server.py b/src/pulserver/_server/_server.py index f79c10b..b195bd5 100644 --- a/src/pulserver/_server/_server.py +++ b/src/pulserver/_server/_server.py @@ -11,7 +11,7 @@ from datetime import datetime -from .._parsing import ParamsParser +from ..parsing import ParamsParser # Location of home HOME_DIR = pathlib.Path.home() diff --git a/src/pulserver/_parsing/__init__.py b/src/pulserver/parsing/__init__.py similarity index 100% rename from src/pulserver/_parsing/__init__.py rename to src/pulserver/parsing/__init__.py diff --git a/src/pulserver/_parsing/_base.py b/src/pulserver/parsing/_base.py similarity index 89% rename from src/pulserver/_parsing/_base.py rename to src/pulserver/parsing/_base.py index 3fa0fa9..6c5f45b 100644 --- a/src/pulserver/_parsing/_base.py +++ b/src/pulserver/parsing/_base.py @@ -55,7 +55,7 @@ def __init__( self.opts = get_opts(_opts_dict) - def asdict(self): + def asdict(self): # noqa return vars(self) @@ -188,8 +188,29 @@ class ParamsParser: rf_ringdown_time: float | None = None adc_dead_time: float | None = None + def __post_init__(self): # noqa + + # rounding + if self.psd_rf_wait is not None: + self.psd_rf_wait *= 1e-6 + self.psd_rf_wait = round(self.psd_rf_wait * 1e6) / 1e6 + if self.psd_grd_wait is not None: + self.psd_grd_wait *= 1e-6 + self.psd_grd_wait = round(self.psd_grd_wait * 1e6) / 1e6 + if self.raster is not None: + self.raster = round(self.raster * 1e6) / 1e6 + if self.dwell is not None: + # self.dwell = round(self.dwell * 1e6) / 1e6 + self.dwell = 4e-6 + if self.rf_dead_time is not None: + self.rf_dead_time = round(self.rf_dead_time * 1e6) / 1e6 + if self.rf_ringdown_time is not None: + self.rf_ringdown_time = round(self.rf_ringdown_time * 1e6) / 1e6 + if self.adc_dead_time is not None: + self.adc_dead_time = round(self.adc_dead_time * 1e6) / 1e6 + @classmethod - def from_file(cls, filename: str) -> "ParamsParser": + def from_file(cls, filename: str) -> "ParamsParser": # noqa with open(filename, "rb") as file: return ParamsParser.from_bytes(file.read()) diff --git a/src/pulserver/_parsing/_cartesian_params.py b/src/pulserver/parsing/_cartesian_params.py similarity index 90% rename from src/pulserver/_parsing/_cartesian_params.py rename to src/pulserver/parsing/_cartesian_params.py index a41e0ac..98710fa 100644 --- a/src/pulserver/_parsing/_cartesian_params.py +++ b/src/pulserver/parsing/_cartesian_params.py @@ -23,8 +23,8 @@ def __init__( Nslices: int | None = None, slice_thickness: float | None = None, slice_spacing: float | None = 0.0, - Rplane: float | None = 1, - PFplane: float | None = 1.0, + R: float | None = 1, + PF: float | None = 1.0, TE: float | None = 0.0, TR: float | None = 0.0, flip: float | None = None, @@ -73,12 +73,12 @@ def __init__( self.flip_angle = flip # TE / TR - self.TE = TE - self.TR = TR + self.TE = TE * 1e-3 + self.TR = TR * 1e-3 # Accelerations - self.R = Rplane - self.PF = PFplane + self.R = R + self.PF = PF # Build opts super().__init__( @@ -111,9 +111,11 @@ def __init__( Ny: int | None = None, Nslices: int | None = None, slice_thickness: float | None = None, + R: float | None = 1, Rplane: float | None = 1, - Rplane2: float | None = 1, - PFslice: float | None = 1.0, + Rslice: float | None = 1, + Rshift: float | None = 0, + PF: float | None = 1.0, TE: float | None = 0.0, TR: float | None = 0.0, flip: float | None = None, @@ -159,13 +161,16 @@ def __init__( self.flip_angle = flip # TE / TR - self.TE = TE - self.TR = TR + self.TE = TE * 1e-3 + self.TR = TR * 1e-3 # Accelerations - self.Rpi = Rplane - self.Rcs = Rplane2 - self.PF = PFslice + self.R = R + self.Rplane = Rplane + self.Rplane = Rplane + self.Rslice = Rslice + self.Rshift = Rshift + self.PF = PF # Build opts super().__init__( diff --git a/tests/_server/test_server.py b/tests/_server/test_server.py index d168106..4b16cea 100644 --- a/tests/_server/test_server.py +++ b/tests/_server/test_server.py @@ -10,7 +10,7 @@ from unittest.mock import MagicMock from unittest.mock import patch -from pulserver._parsing import ParamsParser +from pulserver.parsing import ParamsParser from pulserver._server._server import load_plugins from pulserver._server._server import parse_request from pulserver._server._server import setup_function_logger diff --git a/tests/_parsing/test_paramsparser.py b/tests/parsing/test_paramsparser.py similarity index 97% rename from tests/_parsing/test_paramsparser.py rename to tests/parsing/test_paramsparser.py index 00c5f9e..454ebf4 100644 --- a/tests/_parsing/test_paramsparser.py +++ b/tests/parsing/test_paramsparser.py @@ -1,6 +1,6 @@ """Test SequenceParams structure.""" -from pulserver._parsing import ParamsParser +from pulserver.parsing import ParamsParser # Test case to verify correct creation and attribute assignment in ParamsParser