Skip to content

Commit 3613f6a

Browse files
Smartem grid square registration fixes (#818)
Changes to make grid square registration work for serialem
1 parent fa18f21 commit 3613f6a

4 files changed

Lines changed: 42 additions & 13 deletions

File tree

src/murfey/client/analyser.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,11 +243,15 @@ def _find_context(self, file_path: Path) -> bool:
243243
)
244244
return True
245245

246-
if "Metadata" in file_path.parts or file_path.name == "EpuSession.dm":
246+
if (
247+
"Metadata" in file_path.parts
248+
or "gridsquares" in file_path.parts
249+
or file_path.name == "EpuSession.dm"
250+
):
247251
if (context := _get_context("SPAMetadataContext")) is None:
248252
return False
249253
self._context = context.load()(
250-
"epu",
254+
"serialem" if self._serialem else "epu",
251255
self._basepath,
252256
self._murfey_config,
253257
self._token,
@@ -357,12 +361,13 @@ def _analyse(self, transferred_file: Path):
357361
if self._limited:
358362
if (
359363
"Metadata" in transferred_file.parts
364+
or "gridsquares" in transferred_file.parts
360365
or transferred_file.name == "EpuSession.dm"
361366
) and not self._context:
362367
if not (context := _get_context("SPAMetadataContext")):
363368
return None
364369
self._context = context.load()(
365-
"epu",
370+
"serialem" if self._serialem else "epu",
366371
self._basepath,
367372
self._murfey_config,
368373
self._token,

src/murfey/client/contexts/spa_metadata.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,12 @@ def post_transfer_serialem(
138138
visitless_source = _get_visitless_source(
139139
source, environment, skip_search=True
140140
)
141+
destination_file = _file_transferred_to(
142+
environment,
143+
source,
144+
transferred_file,
145+
Path(self._machine_config.get("rsync_basepath", "")),
146+
)
141147
capture_post(
142148
base_url=str(environment.url.geturl()),
143149
router_name="session_control.spa_router",
@@ -148,7 +154,9 @@ def post_transfer_serialem(
148154
gsid=transferred_file.stem,
149155
data={
150156
"tag": visitless_source,
157+
"image_path": str(destination_file),
151158
"count": len(self._registered_squares_serialem) + 1,
159+
"serialem": self._acquisition_software == "serialem",
152160
},
153161
)
154162
self._registered_squares_serialem.add(transferred_file.stem)

src/murfey/server/api/session_control.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from pathlib import Path
44
from typing import Dict, List, Optional
55

6+
import requests
67
from fastapi import APIRouter, Depends
78
from fastapi.responses import FileResponse
89
from ispyb.sqlalchemy import AutoProcProgram as ISPyBAutoProcProgram
@@ -417,24 +418,31 @@ def register_atlas(
417418

418419
class SquareRegistration(BaseModel):
419420
tag: str
421+
image_path: str | None = None
420422
count: int | None = None
423+
serialem: bool = False
421424

422425

423426
@spa_router.post("/sessions/{session_id}/register_square/{gsid}")
424427
def register_square(
425428
session_id: MurfeySessionID,
426-
gsid: int,
429+
gsid: int | str,
427430
square_registration_data: SquareRegistration,
428431
db=murfey_db,
429432
):
430433
if SMARTEM_ACTIVE:
431-
gs = db.exec(
432-
select(GridSquare)
433-
.where(GridSquare.name == gsid)
434-
.where(GridSquare.tag == square_registration_data.tag)
435-
.where(GridSquare.session_id == session_id)
436-
).one_or_none()
437-
if gs and gs.smartem_uuid:
434+
logger.info(f"smartem active for square {sanitise(str(gsid))}")
435+
if square_registration_data.serialem:
436+
smartem_uuid: int | str | None = gsid
437+
else:
438+
gs = db.exec(
439+
select(GridSquare)
440+
.where(GridSquare.name == gsid)
441+
.where(GridSquare.tag == square_registration_data.tag)
442+
.where(GridSquare.session_id == session_id)
443+
).one_or_none()
444+
smartem_uuid = gs.smartem_uuid if gs else None
445+
if smartem_uuid is not None:
438446
session = db.exec(select(Session).where(Session.id == session_id)).one()
439447
machine_config = get_machine_config(session.instrument_name)[
440448
session.instrument_name
@@ -444,8 +452,16 @@ def register_square(
444452
base_url=machine_config.smartem_api_url, logger=logger
445453
)
446454
smartem_client.gridsquare_registered(
447-
gs.smartem_uuid, count=square_registration_data.count
455+
smartem_uuid, count=square_registration_data.count
456+
)
457+
result = requests.put(
458+
f"{machine_config.smartem_api_url}/gridsquares/{smartem_uuid}",
459+
json={"image_path": square_registration_data.image_path},
448460
)
461+
if not result.status_code == 200:
462+
logger.warning(
463+
f"Post to smartem gridsquares returned {result.status_code}"
464+
)
449465
else:
450466
logger.info("smartem deactivated so did not register square")
451467

src/murfey/util/route_manifest.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -920,7 +920,7 @@ murfey.server.api.session_control.spa_router:
920920
function: register_square
921921
path_params:
922922
- name: gsid
923-
type: int
923+
type: int | str
924924
- name: session_id
925925
type: int
926926
methods:

0 commit comments

Comments
 (0)