Skip to content

Commit d1fece5

Browse files
authored
Fixes for gridsquare registration in SmartEM (#783)
1 parent 1010f5e commit d1fece5

3 files changed

Lines changed: 71 additions & 37 deletions

File tree

src/murfey/client/contexts/spa_metadata.py

Lines changed: 42 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def __init__(
8484
super().__init__("SPAMetadataContext", acquisition_software, token)
8585
self._basepath = basepath
8686
self._machine_config = machine_config
87+
self._registered_squares: set[int] = set()
8788

8889
def post_transfer(
8990
self,
@@ -243,39 +244,44 @@ def post_transfer(
243244
},
244245
)
245246

246-
for fh, fh_data in fh_positions.items():
247-
capture_post(
248-
base_url=str(environment.url.geturl()),
249-
router_name="session_control.spa_router",
250-
function_name="register_foil_hole",
251-
token=self._token,
252-
instrument_name=environment.instrument_name,
253-
session_id=environment.murfey_session,
254-
gs_name=gs_name,
255-
data={
256-
"name": fh,
257-
"x_location": fh_data.x_location,
258-
"y_location": fh_data.y_location,
259-
"x_stage_position": fh_data.x_stage_position,
260-
"y_stage_position": fh_data.y_stage_position,
261-
"readout_area_x": fh_data.readout_area_x,
262-
"readout_area_y": fh_data.readout_area_y,
263-
"thumbnail_size_x": fh_data.thumbnail_size_x,
264-
"thumbnail_size_y": fh_data.thumbnail_size_y,
265-
"pixel_size": fh_data.pixel_size,
266-
"diameter": fh_data.diameter,
267-
"tag": visitless_source,
268-
"image": fh_data.image,
269-
},
270-
)
271-
if fh_positions:
272-
capture_post(
273-
base_url=str(environment.url.geturl()),
274-
router_name="session_control.spa_router",
275-
function_name="register_square",
276-
token=self._token,
277-
instrument_name=environment.instrument_name,
278-
session_id=environment.murfey_session,
279-
gsid=gs_name,
280-
data={"tag": visitless_source},
281-
)
247+
if gs_name not in self._registered_squares:
248+
for fh, fh_data in fh_positions.items():
249+
capture_post(
250+
base_url=str(environment.url.geturl()),
251+
router_name="session_control.spa_router",
252+
function_name="register_foil_hole",
253+
token=self._token,
254+
instrument_name=environment.instrument_name,
255+
session_id=environment.murfey_session,
256+
gs_name=gs_name,
257+
data={
258+
"name": fh,
259+
"x_location": fh_data.x_location,
260+
"y_location": fh_data.y_location,
261+
"x_stage_position": fh_data.x_stage_position,
262+
"y_stage_position": fh_data.y_stage_position,
263+
"readout_area_x": fh_data.readout_area_x,
264+
"readout_area_y": fh_data.readout_area_y,
265+
"thumbnail_size_x": fh_data.thumbnail_size_x,
266+
"thumbnail_size_y": fh_data.thumbnail_size_y,
267+
"pixel_size": fh_data.pixel_size,
268+
"diameter": fh_data.diameter,
269+
"tag": visitless_source,
270+
"image": fh_data.image,
271+
},
272+
)
273+
if fh_positions:
274+
capture_post(
275+
base_url=str(environment.url.geturl()),
276+
router_name="session_control.spa_router",
277+
function_name="register_square",
278+
token=self._token,
279+
instrument_name=environment.instrument_name,
280+
session_id=environment.murfey_session,
281+
gsid=gs_name,
282+
data={
283+
"tag": visitless_source,
284+
"count": len(self._registered_squares) + 1,
285+
},
286+
)
287+
self._registered_squares.add(gs_name)

src/murfey/server/api/session_control.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,7 @@ def register_atlas(
417417

418418
class SquareRegistration(BaseModel):
419419
tag: str
420+
count: int | None = None
420421

421422

422423
@spa_router.post("/sessions/{session_id}/register_square/{gsid}")
@@ -442,7 +443,9 @@ def register_square(
442443
smartem_client = SmartEMAPIClient(
443444
base_url=machine_config.smartem_api_url, logger=logger
444445
)
445-
smartem_client.gridsquare_registered(gs.smartem_uuid)
446+
smartem_client.gridsquare_registered(
447+
gs.smartem_uuid, count=square_registration_data.count
448+
)
446449
else:
447450
logger.info("smartem deactivated so did not register square")
448451

src/murfey/workflows/spa/flush_spa_preprocess.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from smartem_common.schemas import (
1212
FoilHoleData as SmartEMFoilHoleData,
1313
GridSquareData as SmartEMGridSquareData,
14+
GridSquareMetadata as SmartEMGridSquareMetadata,
1415
)
1516

1617
SMARTEM_ACTIVE = True
@@ -154,6 +155,21 @@ def register_grid_square(
154155
.where(DataCollectionGroup.tag == grid_square_params.tag)
155156
).one_or_none()
156157
if dcg and dcg.smartem_grid_uuid:
158+
secured_grid_square_image_path_full_res: Path | None = None
159+
if grid_square_params.image:
160+
secured_grid_square_image_path_full_res = secure_path(
161+
Path(grid_square_params.image)
162+
)
163+
if secured_grid_square_image_path_full_res.with_suffix(
164+
".tiff"
165+
).is_file():
166+
secured_grid_square_image_path_full_res = (
167+
secured_grid_square_image_path_full_res.with_suffix(".tiff")
168+
)
169+
else:
170+
secured_grid_square_image_path_full_res = (
171+
secured_grid_square_image_path_full_res.with_suffix(".mrc")
172+
)
157173
smartem_client = SmartEMAPIClient(
158174
base_url=machine_config.smartem_api_url, logger=logger
159175
)
@@ -177,6 +193,15 @@ def register_grid_square(
177193
if grid_square.smartem_uuid
178194
else {}
179195
),
196+
metadata=SmartEMGridSquareMetadata(
197+
atlas_node_id=0,
198+
stage_position=None,
199+
state=None,
200+
rotation=None,
201+
image_path=secured_grid_square_image_path_full_res,
202+
selected=False,
203+
unusable=False,
204+
),
180205
)
181206
if grid_square.smartem_uuid:
182207
smartem_client.update_gridsquare(gs_data)

0 commit comments

Comments
 (0)