From 652a2c2a2cebbddc0b5ef5b8a21d608e225f723a Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Mon, 17 Feb 2025 09:00:56 +0000 Subject: [PATCH] Restore code to register tomo data collections post mdoc --- src/murfey/client/contexts/tomo.py | 152 ++++++++++++++----------- src/murfey/client/multigrid_control.py | 6 + src/murfey/client/tui/app.py | 6 + 3 files changed, 100 insertions(+), 64 deletions(-) diff --git a/src/murfey/client/contexts/tomo.py b/src/murfey/client/contexts/tomo.py index 98bfb5f38..7d3722d0f 100644 --- a/src/murfey/client/contexts/tomo.py +++ b/src/murfey/client/contexts/tomo.py @@ -93,6 +93,84 @@ def __init__(self, acquisition_software: str, basepath: Path): self._processing_job_stash: dict = {} self._lock: RLock = RLock() + def register_tomography_data_collections( + self, + file_extension: str, + image_directory: str, + environment: MurfeyInstanceEnvironment | None = None, + ): + if not environment: + logger.error( + "No environment passed to register tomography data collections" + ) + return + try: + dcg_url = f"{str(environment.url.geturl())}/visits/{str(environment.visit)}/{environment.murfey_session}/register_data_collection_group" + dcg_data = { + "experiment_type": "tomo", + "experiment_type_id": 36, + "tag": str(self._basepath), + "atlas": "", + "sample": None, + } + capture_post(dcg_url, json=dcg_data) + + for tilt_series in self._tilt_series.keys(): + dc_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/start_data_collection" + dc_data = { + "experiment_type": "tomography", + "file_extension": file_extension, + "acquisition_software": self._acquisition_software, + "image_directory": image_directory, + "data_collection_tag": tilt_series, + "source": str(self._basepath), + "tag": tilt_series, + } + if ( + environment.data_collection_parameters + and environment.data_collection_parameters.get("voltage") + ): + # Once mdoc parameters are known register processing jobs + dc_data.update( + { + "voltage": environment.data_collection_parameters[ + "voltage" + ], + "pixel_size_on_image": environment.data_collection_parameters[ + "pixel_size_on_image" + ], + "image_size_x": environment.data_collection_parameters[ + "image_size_x" + ], + "image_size_y": environment.data_collection_parameters[ + "image_size_y" + ], + "magnification": environment.data_collection_parameters[ + "magnification" + ], + } + ) + capture_post(dc_url, json=dc_data) + + proc_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/register_processing_job" + for recipe in ("em-tomo-preprocess", "em-tomo-align"): + capture_post( + proc_url, + json={ + "tag": tilt_series, + "source": str(self._basepath), + "recipe": recipe, + "experiment_type": "tomography", + }, + ) + else: + logger.info( + "Cannot register data collection yet as no values from mdoc" + ) + + except Exception as e: + logger.error(f"ERROR {e}, {environment.data_collection_parameters}") + def _file_transferred_to( self, environment: MurfeyInstanceEnvironment, source: Path, file_path: Path ): @@ -201,71 +279,17 @@ def _add_tilt( capture_post(ts_url, json=ts_data) if not self._tilt_series_sizes.get(tilt_series): self._tilt_series_sizes[tilt_series] = 0 - try: - if environment: - dcg_url = f"{str(environment.url.geturl())}/visits/{str(environment.visit)}/{environment.murfey_session}/register_data_collection_group" - dcg_data = { - "experiment_type": "tomo", - "experiment_type_id": 36, - "tag": str(self._basepath), - "atlas": "", - "sample": None, - } - capture_post(dcg_url, json=dcg_data) - - dc_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/start_data_collection" - dc_data = { - "experiment_type": "tomography", - "file_extension": file_path.suffix, - "acquisition_software": self._acquisition_software, - "image_directory": str( - environment.default_destinations.get( - file_path.parent, file_path.parent - ) - ), - "data_collection_tag": tilt_series, - "source": str(self._basepath), - "tag": tilt_series, - } - if ( - environment.data_collection_parameters - and environment.data_collection_parameters.get("voltage") - ): - dc_data.update( - { - "voltage": environment.data_collection_parameters[ - "voltage" - ], - "pixel_size_on_image": environment.data_collection_parameters[ - "pixel_size_on_image" - ], - "image_size_x": environment.data_collection_parameters[ - "image_size_x" - ], - "image_size_y": environment.data_collection_parameters[ - "image_size_y" - ], - "magnification": environment.data_collection_parameters[ - "magnification" - ], - } - ) - capture_post(dc_url, json=dc_data) - - proc_url = f"{str(environment.url.geturl())}/visits/{environment.visit}/{environment.murfey_session}/register_processing_job" - for recipe in ("em-tomo-preprocess", "em-tomo-align"): - capture_post( - proc_url, - json={ - "tag": tilt_series, - "source": str(self._basepath), - "recipe": recipe, - "experiment_type": "tomography", - }, - ) - except Exception as e: - logger.error(f"ERROR {e}, {environment.data_collection_parameters}") + # Will register processing jobs for all tilt series except the first one + self.register_tomography_data_collections( + file_extension=file_path.suffix, + image_directory=str( + environment.default_destinations.get( + file_path.parent, file_path.parent + ) + ), + environment=environment, + ) else: if file_path not in self._tilt_series[tilt_series]: for p in self._tilt_series[tilt_series]: diff --git a/src/murfey/client/multigrid_control.py b/src/murfey/client/multigrid_control.py index 4e5a96c61..4a720de74 100644 --- a/src/murfey/client/multigrid_control.py +++ b/src/murfey/client/multigrid_control.py @@ -377,6 +377,12 @@ def _start_dc(self, json, from_form: bool = False): ) source = Path(json["source"]) + context.register_tomography_data_collections( + file_extension=json["file_extension"], + image_directory=str(self._environment.default_destinations[source]), + environment=self._environment, + ) + log.info("Registering tomography processing parameters") if self._environment.data_collection_parameters.get("num_eer_frames"): eer_response = requests.post( diff --git a/src/murfey/client/tui/app.py b/src/murfey/client/tui/app.py index 012368721..9bf229008 100644 --- a/src/murfey/client/tui/app.py +++ b/src/murfey/client/tui/app.py @@ -478,6 +478,12 @@ def _start_dc(self, json, from_form: bool = False): context = self.analysers[source]._context if isinstance(context, TomographyContext): source = Path(json["source"]) + context.register_tomography_data_collections( + file_extension=json["file_extension"], + image_directory=str(self._environment.default_destinations[source]), + environment=self._environment, + ) + log.info("Registering tomography processing parameters") if self.app._environment.data_collection_parameters.get("num_eer_frames"): eer_response = requests.post(