Skip to content

Commit 8774ecc

Browse files
committed
Fixed broken logic when registering align-and-merge processing results
1 parent 1dca9b5 commit 8774ecc

1 file changed

Lines changed: 50 additions & 18 deletions

File tree

src/murfey/workflows/clem/register_align_and_merge_results.py

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
import logging
55
import traceback
66
from ast import literal_eval
7+
from functools import cached_property
78
from pathlib import Path
89
from typing import Optional
910

10-
from pydantic import BaseModel, field_validator
11+
from pydantic import BaseModel, computed_field, field_validator
1112
from sqlmodel import Session, select
1213

1314
from murfey.util.db import ImagingSite
@@ -25,6 +26,27 @@ class AlignAndMergeResult(BaseModel):
2526
thumbnail: Optional[Path] = None
2627
thumbnail_size: Optional[tuple[int, int]] = None
2728

29+
# Valid Pydantic decorator not supported by MyPy
30+
@computed_field # type: ignore
31+
@cached_property
32+
def is_denoised(self) -> bool:
33+
"""
34+
The "_Lng_LVCC" suffix appended to a CLEM dataset's position name indicates
35+
that it's a denoised image set of the same position. These results should
36+
override or supersede the original ones once they're available.
37+
"""
38+
return "_Lng_LVCC" in self.series_name
39+
40+
# Valid Pydantic decorator not supported by MyPy
41+
@computed_field # type: ignore
42+
@cached_property
43+
def site_name(self) -> str:
44+
"""
45+
Extract just the name of the site by removing the "_Lng_LVCC" suffix from
46+
the series name.
47+
"""
48+
return self.series_name.replace("_Lng_LVCC", "")
49+
2850
@field_validator("image_stacks", mode="before")
2951
@classmethod
3052
def parse_stringified_list(cls, value):
@@ -78,26 +100,36 @@ def run(message: dict, murfey_db: Session) -> dict[str, bool]:
78100

79101
# Outer try-finally block for tidying up database-related section of function
80102
try:
81-
# Register items in database if not already present
82103
try:
83-
if not (
84-
clem_img_series := murfey_db.exec(
85-
select(ImagingSite)
86-
.where(ImagingSite.session_id == session_id)
87-
.where(ImagingSite.site_name == result.series_name)
88-
).one_or_none()
89-
):
90-
clem_img_series = ImagingSite(
91-
session_id=session_id, series_name=result.series_name
104+
clem_img_site = murfey_db.exec(
105+
select(ImagingSite)
106+
.where(ImagingSite.session_id == session_id)
107+
.where(ImagingSite.site_name == result.site_name)
108+
).one()
109+
110+
# Update the stored entry only if the incoming one matches it
111+
if clem_img_site.image_path is not None and (
112+
# Denoised dataset results should be registered regardless
113+
result.is_denoised
114+
or (
115+
# Raw dataset result should only be considered
116+
# If the current entry is also a raw dataset
117+
not result.is_denoised
118+
and "_Lng_LVCC" not in clem_img_site.image_path
92119
)
93-
clem_img_series.composite_created = True
94-
murfey_db.add(clem_img_series)
95-
murfey_db.commit()
120+
):
121+
clem_img_site.composite_created = True
122+
murfey_db.add(clem_img_site)
123+
murfey_db.commit()
96124

97-
logger.info(
98-
"Align-and-merge processing result registered for "
99-
f"{result.series_name!r} series"
100-
)
125+
logger.info(
126+
"Align-and-merge processing result registered for "
127+
f"{result.series_name!r} series"
128+
)
129+
else:
130+
logger.info(
131+
"Skipping database registration as incoming result doesn't match stored entry"
132+
)
101133

102134
except Exception:
103135
logger.error(

0 commit comments

Comments
 (0)