diff --git a/src/murfey/client/contexts/tomo.py b/src/murfey/client/contexts/tomo.py index e9bcd2aaf..f09dad951 100644 --- a/src/murfey/client/contexts/tomo.py +++ b/src/murfey/client/contexts/tomo.py @@ -21,6 +21,7 @@ ) from murfey.util import authorised_requests, capture_post, get_machine_config_client from murfey.util.mdoc import get_block, get_global_data, get_num_blocks +from murfey.util.tomo import midpoint logger = logging.getLogger("murfey.client.contexts.tomo") @@ -64,20 +65,6 @@ def _construct_tilt_series_name(file_path: Path) -> str: return "_".join(split_name[:-5]) -def _midpoint(angles: List[float]) -> int: - if not angles: - return 0 - if len(angles) <= 2: - return round(angles[0]) - sorted_angles = sorted(angles) - return round( - sorted_angles[len(sorted_angles) // 2] - if sorted_angles[len(sorted_angles) // 2] - and sorted_angles[len(sorted_angles) // 2 + 1] - else 0 - ) - - class ProcessFileIncomplete(BaseModel): dest: Path source: Path @@ -738,7 +725,7 @@ def gather_metadata( if environment else None ) - mdoc_metadata["manual_tilt_offset"] = -_midpoint( + mdoc_metadata["manual_tilt_offset"] = -midpoint( [float(b["TiltAngle"]) for b in blocks] ) mdoc_metadata["source"] = str(self._basepath) diff --git a/src/murfey/server/__init__.py b/src/murfey/server/__init__.py index 823df3063..57b10dcc7 100644 --- a/src/murfey/server/__init__.py +++ b/src/murfey/server/__init__.py @@ -48,7 +48,6 @@ import murfey.server.prometheus as prom import murfey.server.websocket import murfey.util.db as db -from murfey.client.contexts.tomo import _midpoint from murfey.server.murfey_db import url # murfey_db from murfey.util import LogFilter from murfey.util.config import ( @@ -60,6 +59,7 @@ ) from murfey.util.processing_params import default_spa_parameters from murfey.util.state import global_state +from murfey.util.tomo import midpoint try: from murfey.server.ispyb import TransportManager # Session @@ -2576,7 +2576,7 @@ def feedback_callback(header: dict, message: dict) -> None: ) if not stack_file.parent.exists(): stack_file.parent.mkdir(parents=True) - tilt_offset = _midpoint([float(get_angle(t)) for t in tilts]) + tilt_offset = midpoint([float(get_angle(t)) for t in tilts]) zocalo_message = { "recipes": ["em-tomo-align"], "parameters": { diff --git a/src/murfey/server/api/__init__.py b/src/murfey/server/api/__init__.py index 6f5d411e9..d6232f9ac 100644 --- a/src/murfey/server/api/__init__.py +++ b/src/murfey/server/api/__init__.py @@ -33,7 +33,6 @@ import murfey.server.websocket as ws import murfey.util.eer from murfey.server import ( - _midpoint, _murfey_id, _transport_object, check_tilt_series_mc, @@ -108,6 +107,7 @@ ) from murfey.util.processing_params import default_spa_parameters from murfey.util.state import global_state +from murfey.util.tomo import midpoint log = logging.getLogger("murfey.server.api") @@ -840,7 +840,7 @@ def register_completed_tilt_series( ) if not stack_file.parent.exists(): stack_file.parent.mkdir(parents=True) - tilt_offset = _midpoint([float(get_angle(t)) for t in tilts]) + tilt_offset = midpoint([float(get_angle(t)) for t in tilts]) zocalo_message = { "recipes": ["em-tomo-align"], "parameters": { diff --git a/src/murfey/util/tomo.py b/src/murfey/util/tomo.py new file mode 100644 index 000000000..dc7314ec1 --- /dev/null +++ b/src/murfey/util/tomo.py @@ -0,0 +1,16 @@ +def midpoint(angles: list[float]) -> int: + """ + Utility function to calculate the midpoint of the angles used in a tilt series. + Used primarily in the tomography workflow. + """ + if not angles: + return 0 + if len(angles) <= 2: + return round(angles[0]) + sorted_angles = sorted(angles) + return round( + sorted_angles[len(sorted_angles) // 2] + if sorted_angles[len(sorted_angles) // 2] + and sorted_angles[len(sorted_angles) // 2 + 1] + else 0 + )