Skip to content

Commit 324531b

Browse files
committed
Added endpoint to enable manual triggering of 'align-and-merge' step of CLEM workflow for a given image series
1 parent 5147daf commit 324531b

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

src/murfey/server/api/clem.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,3 +694,70 @@ def process_raw_tiffs(
694694
messenger=_transport_object,
695695
)
696696
return True
697+
698+
699+
class AlignAndMergeParams(BaseModel):
700+
# Processing parameters
701+
series_name: str
702+
images: list[Path]
703+
metadata: Path
704+
# Optional processing parameters
705+
align_self: Optional[str] = None
706+
flatten: Optional[Literal["min", "max", "mean"]] = "mean"
707+
align_across: Optional[str] = None
708+
709+
@validator(
710+
"images",
711+
pre=True,
712+
)
713+
def parse_stringified_list(cls, value):
714+
if isinstance(value, str):
715+
try:
716+
eval_result = literal_eval(value)
717+
if isinstance(eval_result, list):
718+
parent_tiffs = [Path(p) for p in eval_result]
719+
return parent_tiffs
720+
except (SyntaxError, ValueError):
721+
raise ValueError("Unable to parse input")
722+
# Return value as-is; if it fails, it fails
723+
return value
724+
725+
726+
@router.post("/sessions/{session_id}/clem/preprocessing/align_and_merge_stacks")
727+
def align_and_merge_stacks(
728+
session_id: int,
729+
align_and_merge_params: AlignAndMergeParams,
730+
db: Session = murfey_db,
731+
):
732+
try:
733+
# Try and load relevant Murfey workflow
734+
workflow: EntryPoint = list(
735+
entry_points().select(group="murfey.workflows", name="clem.align_and_merge")
736+
)[0]
737+
except IndexError:
738+
raise RuntimeError("The relevant Murfey workflow was not found")
739+
740+
# Get instrument name from the database to load the correct config file
741+
session_row: MurfeySession = db.exec(
742+
select(MurfeySession).where(MurfeySession.id == session_id)
743+
).one()
744+
instrument_name = session_row.instrument_name
745+
746+
# Pass arguments to correct workflow
747+
workflow.load()(
748+
# Match the arguments found in murfey.workflows.clem.align_and_merge
749+
# Session parameters
750+
session_id=session_id,
751+
instrument_name=instrument_name,
752+
# Processing parameters
753+
series_name=align_and_merge_params.series_name,
754+
images=align_and_merge_params.images,
755+
metadata=align_and_merge_params.metadata,
756+
# Optional processing parameters
757+
align_self=align_and_merge_params.align_self,
758+
flatten=align_and_merge_params.flatten,
759+
align_across=align_and_merge_params.align_across,
760+
# Optional session parameters
761+
messenger=_transport_object,
762+
)
763+
return True

0 commit comments

Comments
 (0)