@@ -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