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
14 changes: 14 additions & 0 deletions src/murfey/client/contexts/tomo_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,19 @@ def post_transfer(
else ""
)

# Read the session dm to find out if this is a lamella search map or not
lamella = None
if source and (source / "Session.dm").is_file():
with open(source / "Session.dm") as xml:
session_xml = xmltodict.parse(xml.read())
lamella_workflow = session_xml.get("TomographySession", {}).get(
"LamellaWorkflow", None
)
if lamella_workflow:
lamella = lamella_workflow == "true"
else:
logger.warning("Cannot find tomography Session.dm file")

capture_post(
base_url=str(environment.url.geturl()),
router_name="session_control.tomo_router",
Expand All @@ -168,6 +181,7 @@ def post_transfer(
"reference_matrix": ref_matrix,
"stage_correction": stage_matrix,
"image_shift_correction": image_matrix,
"lamella": lamella,
},
)

Expand Down
57 changes: 29 additions & 28 deletions src/murfey/util/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -556,41 +556,42 @@ class SearchMap(SQLModel, table=True): # type: ignore
session_id: int = Field(foreign_key="session.id")
name: str
tag: str
x_location: Optional[float] = None
y_location: Optional[float] = None
x_stage_position: Optional[float] = None
y_stage_position: Optional[float] = None
pixel_size: Optional[float] = None
lamella: bool | None = None
x_location: float | None = None
y_location: float | None = None
x_stage_position: float | None = None
y_stage_position: float | None = None
pixel_size: float | None = None
image: str = ""
binning: Optional[float] = None
reference_matrix_m11: Optional[float] = None
reference_matrix_m12: Optional[float] = None
reference_matrix_m21: Optional[float] = None
reference_matrix_m22: Optional[float] = None
stage_correction_m11: Optional[float] = None
stage_correction_m12: Optional[float] = None
stage_correction_m21: Optional[float] = None
stage_correction_m22: Optional[float] = None
image_shift_correction_m11: Optional[float] = None
image_shift_correction_m12: Optional[float] = None
image_shift_correction_m21: Optional[float] = None
image_shift_correction_m22: Optional[float] = None
width: Optional[int] = None
height: Optional[int] = None
binning: float | None = None
reference_matrix_m11: float | None = None
reference_matrix_m12: float | None = None
reference_matrix_m21: float | None = None
reference_matrix_m22: float | None = None
stage_correction_m11: float | None = None
stage_correction_m12: float | None = None
stage_correction_m21: float | None = None
stage_correction_m22: float | None = None
image_shift_correction_m11: float | None = None
image_shift_correction_m12: float | None = None
image_shift_correction_m21: float | None = None
image_shift_correction_m22: float | None = None
width: int | None = None
height: int | None = None
session: Optional[Session] = Relationship(back_populates="search_maps")
tilt_series: List["TiltSeries"] = Relationship(
back_populates="search_map", sa_relationship_kwargs={"cascade": "delete"}
)
atlas_id: Optional[int] = Field(
atlas_id: int | None = Field(
foreign_key="datacollectiongroup.dataCollectionGroupId"
)
scaled_pixel_size: Optional[float] = None
pixel_location_x: Optional[int] = None
pixel_location_y: Optional[int] = None
scaled_height: Optional[int] = None
scaled_width: Optional[int] = None
angle: Optional[float] = None
quality_indicator: Optional[float] = None
scaled_pixel_size: float | None = None
pixel_location_x: int | None = None
pixel_location_y: int | None = None
scaled_height: int | None = None
scaled_width: int | None = None
angle: float | None = None
quality_indicator: float | None = None
data_collection_group: Optional["DataCollectionGroup"] = Relationship(
back_populates="search_maps"
)
Expand Down
23 changes: 12 additions & 11 deletions src/murfey/util/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,20 +317,21 @@ class FoilHoleParameters(BaseModel):

class SearchMapParameters(BaseModel):
tag: str
x_location: Optional[float] = None
y_location: Optional[float] = None
x_stage_position: Optional[float] = None
y_stage_position: Optional[float] = None
pixel_size: Optional[float] = None
image: Optional[str] = None
binning: Optional[float] = None
x_location: float | None = None
y_location: float | None = None
x_stage_position: float | None = None
y_stage_position: float | None = None
pixel_size: float | None = None
image: str | None = None
binning: float | None = None
reference_matrix: Dict[str, float] = {}
stage_correction: Dict[str, float] = {}
image_shift_correction: Dict[str, float] = {}
height: Optional[int] = None
width: Optional[int] = None
height_on_atlas: Optional[int] = None
width_on_atlas: Optional[int] = None
height: int | None = None
width: int | None = None
height_on_atlas: int | None = None
width_on_atlas: int | None = None
lamella: bool | None = None


class BatchPositionParameters(BaseModel):
Expand Down
15 changes: 15 additions & 0 deletions src/murfey/workflows/tomo/tomo_metadata.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import logging
from importlib.metadata import entry_points

import numpy as np
from sqlmodel import Session, select
Expand Down Expand Up @@ -40,6 +41,7 @@ def register_search_map_in_database(
if search_map_query:
# See if there is already a search map with this name and update if so
search_map = search_map_query[0]
search_map.lamella = search_map_params.lamella or search_map.lamella
search_map.x_stage_position = (
search_map_params.x_stage_position or search_map.x_stage_position
)
Expand Down Expand Up @@ -120,6 +122,7 @@ def register_search_map_in_database(
name=search_map_name,
session_id=session_id,
tag=search_map_params.tag,
lamella=search_map_params.lamella,
x_stage_position=search_map_params.x_stage_position,
y_stage_position=search_map_params.y_stage_position,
pixel_size=search_map_params.pixel_size,
Expand Down Expand Up @@ -243,6 +246,18 @@ def register_search_map_in_database(
if close_db:
murfey_db.close()

if search_map_hooks := entry_points(group="murfey.hooks", name="search_map"):
try:
for hook in search_map_hooks:
hook.load()(
ispyb_id=search_map.id,
image=search_map_params.image,
pixel_size=search_map_params.pixel_size,
lamella=search_map_params.lamella,
)
except Exception as e:
logger.error(f"Call to search map hook failed with {e}", exc_info=True)


def register_batch_position_in_database(
session_id: MurfeySessionID,
Expand Down