Skip to content

Commit 3ff6039

Browse files
committed
Deal with updating foil hole ISPyB entries
1 parent 3905bb8 commit 3ff6039

File tree

2 files changed

+105
-23
lines changed

2 files changed

+105
-23
lines changed

src/murfey/server/api/__init__.py

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,8 @@ def register_grid_square(
502502
grid_square.y_location = grid_square_params.y_location
503503
grid_square.x_stage_position = grid_square_params.x_stage_position
504504
grid_square.y_stage_position = grid_square_params.y_stage_position
505-
# need to update ISPyB grid square here !!!!
505+
if _transport_object:
506+
_transport_object.do_update_grid_square(grid_square.id, grid_square_params)
506507
except Exception:
507508
if _transport_object:
508509
dcg = db.exec(
@@ -569,6 +570,7 @@ def register_foil_hole(
569570
foil_hole_params: FoilHoleParameters,
570571
db=murfey_db,
571572
):
573+
# need to sort out foil hole update in ISPyB !!!
572574
try:
573575
gsid = (
574576
db.exec(
@@ -580,12 +582,6 @@ def register_foil_hole(
580582
.one()
581583
.id
582584
)
583-
if _transport_object:
584-
fh_ispyb_response = _transport_object.do_insert_foil_hole(
585-
gsid.id, foil_hole_params
586-
)
587-
else:
588-
fh_ispyb_response = {"success": False, "return_value": None}
589585
except NoResultFound:
590586
log.debug(
591587
f"Foil hole {sanitise(str(foil_hole_params.name))} could not be registered as grid square {sanitise(str(gs_name))} was not found"
@@ -596,22 +592,51 @@ def register_foil_hole(
596592
jpeg_size = Image.open(secured_foil_hole_image_path).size
597593
else:
598594
jpeg_size = (0, 0)
599-
foil_hole = FoilHole(
600-
id=fh_ispyb_response["return_value"] if fh_ispyb_response["success"] else None,
601-
name=foil_hole_params.name,
602-
session_id=session_id,
603-
grid_square_id=gsid,
604-
x_location=foil_hole_params.x_location,
605-
y_location=foil_hole_params.y_location,
606-
x_stage_position=foil_hole_params.x_stage_position,
607-
y_stage_position=foil_hole_params.y_stage_position,
608-
readout_area_x=foil_hole_params.readout_area_x,
609-
readout_area_y=foil_hole_params.readout_area_y,
610-
thumbnail_size_x=foil_hole_params.thumbnail_size_x or jpeg_size[0],
611-
thumbnail_size_y=foil_hole_params.thumbnail_size_y or jpeg_size[1],
612-
pixel_size=foil_hole_params.pixel_size,
613-
image=secured_foil_hole_image_path,
614-
)
595+
try:
596+
foil_hole = db.exec(
597+
select(FoilHole)
598+
.where(FoilHole.name == foil_hole_params.name)
599+
.where(FoilHole.grid_square_id == gsid)
600+
.where(FoilHole.session_id == session_id)
601+
).one()
602+
foil_hole.x_location = foil_hole_params.x_location
603+
foil_hole.y_location = foil_hole_params.y_location
604+
foil_hole.x_stage_position = foil_hole_params.x_stage_position
605+
foil_hole.y_stage_position = foil_hole_params.y_stage_position
606+
foil_hole.readout_area_x = foil_hole_params.readout_area_x
607+
foil_hole.readout_area_y = foil_hole_params.readout_area_y
608+
foil_hole.thumbnail_size_x = foil_hole_params.thumbnail_size_x or jpeg_size[0]
609+
foil_hole.thumbnail_size_y = foil_hole_params.thumbnail_size_y or jpeg_size[1]
610+
foil_hole.pixel_size = foil_hole_params.pixel_size
611+
if _transport_object:
612+
_transport_object.do_update_foil_hole(foil_hole.id, foil_hole_params)
613+
except Exception:
614+
if _transport_object:
615+
fh_ispyb_response = _transport_object.do_insert_foil_hole(
616+
gsid.id, foil_hole_params
617+
)
618+
else:
619+
fh_ispyb_response = {"success": False, "return_value": None}
620+
foil_hole = FoilHole(
621+
id=(
622+
fh_ispyb_response["return_value"]
623+
if fh_ispyb_response["success"]
624+
else None
625+
),
626+
name=foil_hole_params.name,
627+
session_id=session_id,
628+
grid_square_id=gsid,
629+
x_location=foil_hole_params.x_location,
630+
y_location=foil_hole_params.y_location,
631+
x_stage_position=foil_hole_params.x_stage_position,
632+
y_stage_position=foil_hole_params.y_stage_position,
633+
readout_area_x=foil_hole_params.readout_area_x,
634+
readout_area_y=foil_hole_params.readout_area_y,
635+
thumbnail_size_x=foil_hole_params.thumbnail_size_x or jpeg_size[0],
636+
thumbnail_size_y=foil_hole_params.thumbnail_size_y or jpeg_size[1],
637+
pixel_size=foil_hole_params.pixel_size,
638+
image=secured_foil_hole_image_path,
639+
)
615640
db.add(foil_hole)
616641
db.commit()
617642
db.close()

src/murfey/server/ispyb.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ def do_insert_grid_square(
135135
grid_square_id: int,
136136
grid_square_parameters: GridSquareParameters,
137137
):
138+
# most of this is for mypy
138139
if (
139140
grid_square_parameters.height is not None
140141
and grid_square_parameters.width is not None
@@ -190,6 +191,36 @@ def do_insert_grid_square(
190191
)
191192
return {"success": False, "return_value": None}
192193

194+
def do_update_grid_square(
195+
self, grid_square_id: int, grid_square_parameters: GridSquareParameters
196+
):
197+
try:
198+
with Session() as db:
199+
grid_square = (
200+
db.query(GridSquare)
201+
.filter(GridSquare.gridSquareId == grid_square_id)
202+
.one()
203+
)
204+
grid_square.gridSquareImage = grid_square_parameters.image
205+
grid_square.pixelLocationX = grid_square_parameters.x_location
206+
grid_square.pixelLocationY = grid_square_parameters.y_location
207+
grid_square.height = grid_square_parameters.height
208+
grid_square.width = grid_square_parameters.width
209+
grid_square.angle = grid_square_parameters.angle
210+
grid_square.stageLocationX = grid_square_parameters.x_stage_position
211+
grid_square.stageLocationY = grid_square_parameters.y_stage_position
212+
grid_square.pixelSize = grid_square_parameters.pixel_size
213+
db.add(grid_square)
214+
db.commit()
215+
return {"success": True, "return_value": grid_square.gridSquareId}
216+
except ispyb.ISPyBException as e:
217+
log.error(
218+
"Updating GridSquare entry caused exception '%s'.",
219+
e,
220+
exc_info=True,
221+
)
222+
return {"success": False, "return_value": None}
223+
193224
def do_insert_foil_hole(
194225
self,
195226
grid_square_id: int,
@@ -237,6 +268,32 @@ def do_insert_foil_hole(
237268
)
238269
return {"success": False, "return_value": None}
239270

271+
def do_update_foil_hole(
272+
self, foil_hole_id: int, foil_hole_parameters: FoilHoleParameters
273+
):
274+
try:
275+
with Session() as db:
276+
foil_hole = (
277+
db.query(FoilHole).filter(FoilHole.foilHoleId == foil_hole_id).one()
278+
)
279+
foil_hole.foilHoleImage = foil_hole_parameters.image
280+
foil_hole.pixelLocationX = foil_hole_parameters.x_location
281+
foil_hole.pixelLocationY = foil_hole_parameters.y_location
282+
foil_hole.diameter = foil_hole_parameters.diameter
283+
foil_hole.stageLocationX = foil_hole_parameters.x_stage_position
284+
foil_hole.stageLocationY = foil_hole_parameters.y_stage_position
285+
foil_hole.pixelSize = foil_hole_parameters.pixel_size
286+
db.add(foil_hole)
287+
db.commit()
288+
return {"success": True, "return_value": foil_hole.foilHoleId}
289+
except ispyb.ISPyBException as e:
290+
log.error(
291+
"Updating FoilHole entry caused exception '%s'.",
292+
e,
293+
exc_info=True,
294+
)
295+
return {"success": False, "return_value": None}
296+
240297
def send(self, queue: str, message: dict, new_connection: bool = False):
241298
if self.transport:
242299
if not self.transport.is_connected():

0 commit comments

Comments
 (0)