Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ TomographyMetadataContext = "murfey.client.contexts.tomo_metadata:TomographyMeta
"experiment_type_update" = "murfey.workflows.register_experiment_type_update:run"
"fib.make_milling_gif" = "murfey.workflows.fib.make_milling_gif:run"
"fib.register_atlas" = "murfey.workflows.fib.register_atlas:run"
"fib.register_lamella_evaluation_image" = "murfey.workflows.fib.register_lamella_evaluation_image:run"
"fib.register_milling_progress" = "murfey.workflows.fib.register_milling_progress:run"
"pato" = "murfey.workflows.notifications:notification_setup"
"picked_particles" = "murfey.workflows.spa.picking:particles_picked"
Expand Down
91 changes: 72 additions & 19 deletions src/murfey/client/contexts/fib.py
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,15 @@ def post_transfer(
):
self._make_drift_correction_gif(transferred_file, environment)
return None
# Register lamella evaluation images
elif (
"LamellaEvaluationImages" in transferred_file.parts
and transferred_file.suffix == ".png"
):
self._register_lamella_evaluation_image(
transferred_file, environment
)
return None

# -----------------------------------------------------------------------------
# Maps
Expand All @@ -300,19 +309,8 @@ def post_transfer(
"Electron Snapshot" in transferred_file.name
and transferred_file.suffix in (".tif", ".tiff")
):
source = _get_source(transferred_file, environment)
if source is None:
logger.warning(f"No source found for file {transferred_file}")
return None
destination_file = _file_transferred_to(
environment=environment,
source=source,
file_path=transferred_file,
rsync_basepath=Path(self._machine_config.get("rsync_basepath", "")),
)

# Register image in database
self._register_atlas(destination_file, environment)
self._register_atlas(transferred_file, environment)
return None

# -----------------------------------------------------------------------------
Expand Down Expand Up @@ -651,25 +649,80 @@ def _make_gif(
logger.error(f"Could not submit GIF for site {lamella_number}")
return False

def _register_atlas(self, file: Path, environment: MurfeyInstanceEnvironment):
def _register_lamella_evaluation_image(
self,
transferred_file: Path,
environment: MurfeyInstanceEnvironment,
):
"""
Helper function to construct and submit a POST request to the backend register
a lamella evaluation image with.
"""
source = _get_source(transferred_file, environment)
if source is None:
logger.warning(f"No source found for file {transferred_file}")
return None
destination_file = _file_transferred_to(
environment=environment,
source=source,
file_path=transferred_file,
rsync_basepath=Path(self._machine_config.get("rsync_basepath", "")),
)
try:
capture_post(
base_url=str(environment.url.geturl()),
router_name="workflow_fib.router",
function_name="register_lamella_evaluation_image",
token=self._token,
instrument_name=environment.instrument_name,
data={"file": str(destination_file)},
# Endpoint kwargs
session_id=environment.murfey_session,
)
logger.info(
f"Registering lamella evaluation image {transferred_file.name!r}"
)
return None
except Exception as e:
logger.error(
f"Error encountered registering lamella evaluation image {transferred_file.name}:\n{e}"
)
return None

def _register_atlas(
self,
transferred_file: Path,
environment: MurfeyInstanceEnvironment,
):
"""
Constructs the URL and dictionary to be posted to the server, which then triggers
the processing of the electron snapshot image.
"""

source = _get_source(transferred_file, environment)
if source is None:
logger.warning(f"No source found for file {transferred_file}")
return None
destination_file = _file_transferred_to(
environment=environment,
source=source,
file_path=transferred_file,
rsync_basepath=Path(self._machine_config.get("rsync_basepath", "")),
)
try:
capture_post(
base_url=str(environment.url.geturl()),
router_name="workflow_fib.router",
function_name="register_fib_atlas",
token=self._token,
instrument_name=environment.instrument_name,
data={"file": str(file)},
data={"file": str(destination_file)},
# Endpoint kwargs
session_id=environment.murfey_session,
)
logger.info(f"Registering atlas image {file.name!r}")
return True
logger.info(f"Registering atlas image {transferred_file.name!r}")
return None
except Exception as e:
logger.error(f"Error encountered registering atlas image {file.name}:\n{e}")
return False
logger.error(
f"Error encountered registering atlas image {transferred_file.name}:\n{e}"
)
return None
22 changes: 20 additions & 2 deletions src/murfey/server/api/workflow_fib.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@
)


class FIBAtlasFile(BaseModel):
class File(BaseModel):
file: Path


@router.post("/sessions/{session_id}/register_atlas")
def register_fib_atlas(
session_id: int,
fib_atlas: FIBAtlasFile,
fib_atlas: File,
):
if _transport_object is None:
logger.error("No TransportManager object was set up")
Expand All @@ -39,6 +39,24 @@ def register_fib_atlas(
)


@router.post("/sessions/{session_id}/register_lamella_evaluation_image")
def register_lamella_evaluation_image(
session_id: int,
lamella_image: File,
):
if _transport_object is None:
logger.error("No TransportManager object was set up")
return None
_transport_object.send(
_transport_object.feedback_queue,
{
"register": "fib.register_lamella_evaluation_image",
"session_id": session_id,
"lamella_image_file": str(lamella_image.file),
},
)


@router.post("/sessions/{session_id}/register_milling_progress")
def register_fib_milling_progress(
session_id: int,
Expand Down
7 changes: 7 additions & 0 deletions src/murfey/util/route_manifest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1431,6 +1431,13 @@ murfey.server.api.workflow_fib.router:
type: int
methods:
- POST
- path: /workflow/fib/sessions/{session_id}/register_lamella_evaluation_image
function: register_lamella_evaluation_image
path_params:
- name: session_id
type: int
methods:
- POST
- path: /workflow/fib/sessions/{session_id}/register_milling_progress
function: register_fib_milling_progress
path_params:
Expand Down
17 changes: 17 additions & 0 deletions src/murfey/workflows/fib/register_lamella_evaluation_image.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import json
import logging
from typing import Any

from sqlmodel import Session

logger = logging.getLogger(__name__)


def run(
message: dict[str, Any],
murfey_db: Session,
):
logger.debug(
"Received message containing the following:\n"
f"{json.dumps(message, indent=2, default=str)}"
)
Loading