Skip to content

Commit 499c1f1

Browse files
committed
Add foil hole registration with ISPyB
1 parent f060982 commit 499c1f1

File tree

4 files changed

+51
-2
lines changed

4 files changed

+51
-2
lines changed

src/murfey/client/contexts/spa.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class FoilHole(NamedTuple):
4141
thumbnail_size_y: Optional[int] = None
4242
pixel_size: Optional[float] = None
4343
image: str = ""
44+
diameter: Optional[float] = None
4445

4546

4647
class GridSquare(NamedTuple):
@@ -246,6 +247,7 @@ def _foil_hole_data(
246247
for fh_block in serialization_array[required_key]:
247248
pix = fh_block["b:value"]["PixelCenter"]
248249
stage = fh_block["b:value"]["StagePosition"]
250+
diameter = fh_block["b:value"]["PixelWidthHeight"]["c:width"]
249251
if int(fh_block["b:key"]) == foil_hole:
250252
return FoilHole(
251253
id=foil_hole,
@@ -261,6 +263,7 @@ def _foil_hole_data(
261263
thumbnail_size_y=None,
262264
pixel_size=float(pixel_size) if image_path else None,
263265
image=str(image_path),
266+
diameter=diameter,
264267
)
265268
logger.warning(
266269
f"Foil hole positions could not be determined from metadata file {xml_path} for foil hole {foil_hole}"
@@ -682,6 +685,7 @@ def _position_analysis(
682685
"thumbnail_size_x": fh.thumbnail_size_x,
683686
"thumbnail_size_y": fh.thumbnail_size_y,
684687
"pixel_size": fh.pixel_size,
688+
"diameter": fh.diameter,
685689
"tag": str(source),
686690
"image": str(image_path),
687691
},

src/murfey/server/api/__init__.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,12 @@ def register_grid_square(
497497
.where(DataCollectionGroup.session_id == session_id)
498498
.where(DataCollectionGroup.tag == grid_square_params.tag)
499499
).one()
500-
_transport_object.do_insert_grid_square(dcg.atlas_id, gsid, grid_square_params)
500+
gs_ispyb_response = _transport_object.do_insert_grid_square(
501+
dcg.atlas_id, gsid, grid_square_params
502+
)
503+
else:
504+
# mock up response so that below still works
505+
gs_ispyb_response = {"success": False, "return_value": None}
501506
try:
502507
grid_square = db.exec(
503508
select(GridSquare)
@@ -519,6 +524,11 @@ def register_grid_square(
519524
else:
520525
jpeg_size = (0, 0)
521526
grid_square = GridSquare(
527+
id=(
528+
gs_ispyb_response["return_value"]
529+
if gs_ispyb_response["success"]
530+
else None
531+
),
522532
name=gsid,
523533
session_id=session_id,
524534
tag=grid_square_params.tag,
@@ -569,6 +579,8 @@ def register_foil_hole(
569579
.one()
570580
.id
571581
)
582+
if _transport_object:
583+
_transport_object.do_insert_foil_hole(gsid.id, foil_hole_params)
572584
except NoResultFound:
573585
log.debug(
574586
f"Foil hole {sanitise(str(foil_hole_params.name))} could not be registered as grid square {sanitise(str(gs_name))} was not found"

src/murfey/server/ispyb.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
BLSubSample,
2323
DataCollection,
2424
DataCollectionGroup,
25+
FoilHole,
2526
GridSquare,
2627
ProcessingJob,
2728
ProcessingJobParameter,
@@ -30,7 +31,7 @@
3031
url,
3132
)
3233

33-
from murfey.util.models import GridSquareParameters, Sample, Visit
34+
from murfey.util.models import FoilHoleParameters, GridSquareParameters, Sample, Visit
3435

3536
log = logging.getLogger("murfey.server.ispyb")
3637

@@ -134,6 +135,7 @@ def do_insert_grid_square(
134135
grid_square_id: int,
135136
grid_square_parameters: GridSquareParameters,
136137
):
138+
# need to correct height and weight by pixel ratio !!!!!
137139
record = GridSquare(
138140
atlasId=atlas_id,
139141
gridSquareLabel=grid_square_id,
@@ -161,6 +163,36 @@ def do_insert_grid_square(
161163
)
162164
return {"success": False, "return_value": None}
163165

166+
def do_insert_foil_hole(
167+
self,
168+
grid_square_id: int,
169+
foil_hole_parameters: FoilHoleParameters,
170+
):
171+
record = FoilHole(
172+
gridSquareId=grid_square_id,
173+
foilHoleLabel=foil_hole_parameters.name,
174+
foilHoleImage=foil_hole_parameters.image,
175+
pixelLocationX=foil_hole_parameters.x_location,
176+
pixelLocationY=foil_hole_parameters.y_location,
177+
diameter=foil_hole_parameters.diameter,
178+
stageLocationX=foil_hole_parameters.x_stage_position,
179+
stageLocationY=foil_hole_parameters.y_stage_position,
180+
pixelSize=foil_hole_parameters.pixel_size,
181+
)
182+
try:
183+
with Session() as db:
184+
db.add(record)
185+
db.commit()
186+
log.info(f"Created FoilHole {record.gridSquareId}")
187+
return {"success": True, "return_value": record.foilHoleId}
188+
except ispyb.ISPyBException as e:
189+
log.error(
190+
"Inserting FoilHole entry caused exception '%s'.",
191+
e,
192+
exc_info=True,
193+
)
194+
return {"success": False, "return_value": None}
195+
164196
def send(self, queue: str, message: dict, new_connection: bool = False):
165197
if self.transport:
166198
if not self.transport.is_connected():

src/murfey/util/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ class FoilHoleParameters(BaseModel):
293293
thumbnail_size_y: Optional[int] = None
294294
pixel_size: Optional[float] = None
295295
image: str = ""
296+
diameter: Optional[float] = None
296297

297298

298299
class PostInfo(BaseModel):

0 commit comments

Comments
 (0)