@@ -73,6 +73,27 @@ def _foil_hole_positions(xml_path: Path, grid_square: int) -> Dict[str, FoilHole
7373 return foil_holes
7474
7575
76+ def _get_visitless_source (
77+ source : Path , environment : MurfeyInstanceEnvironment , skip_search : bool = False
78+ ) -> str :
79+ visitless_source_search_dir = "/" .join (
80+ [part for part in source .parts if part != environment .visit ]
81+ ).replace ("//" , "/" )
82+ if skip_search :
83+ return visitless_source_search_dir
84+ visitless_source_images_dirs = sorted (
85+ Path (visitless_source_search_dir ).glob ("Images-Disc*" ),
86+ key = lambda x : x .stat ().st_ctime ,
87+ )
88+ if not visitless_source_images_dirs :
89+ logger .warning (f"Cannot find Images-Disc* in { visitless_source_search_dir } " )
90+ visitless_source_images_dirs = [
91+ Path (visitless_source_search_dir ) / "Images-Disc1"
92+ ]
93+ visitless_source = str (visitless_source_images_dirs [- 1 ])
94+ return visitless_source
95+
96+
7697class SPAMetadataContext (Context ):
7798 def __init__ (
7899 self ,
@@ -85,6 +106,7 @@ def __init__(
85106 self ._basepath = basepath
86107 self ._machine_config = machine_config
87108 self ._registered_squares : set [int ] = set ()
109+ self ._registered_squares_serialem : set [str ] = set ()
88110
89111 def post_transfer (
90112 self ,
@@ -97,6 +119,51 @@ def post_transfer(
97119 environment = environment ,
98120 ** kwargs ,
99121 )
122+ if self ._acquisition_software == "serialem" :
123+ self .post_transfer_serialem (
124+ transferred_file , environment = environment , ** kwargs
125+ )
126+ else :
127+ self .post_transfer_epu (transferred_file , environment = environment , ** kwargs )
128+
129+ def post_transfer_serialem (
130+ self ,
131+ transferred_file : Path ,
132+ environment : Optional [MurfeyInstanceEnvironment ] = None ,
133+ ** kwargs ,
134+ ):
135+ if environment and transferred_file .suffix == ".mrc" :
136+ source = _get_source (transferred_file , environment )
137+ if source :
138+ visitless_source = _get_visitless_source (
139+ source , environment , skip_search = True
140+ )
141+ capture_post (
142+ base_url = str (environment .url .geturl ()),
143+ router_name = "session_control.spa_router" ,
144+ function_name = "register_square" ,
145+ token = self ._token ,
146+ instrument_name = environment .instrument_name ,
147+ session_id = environment .murfey_session ,
148+ gsid = transferred_file .stem ,
149+ data = {
150+ "tag" : visitless_source ,
151+ "count" : len (self ._registered_squares_serialem ) + 1 ,
152+ },
153+ )
154+ self ._registered_squares_serialem .add (transferred_file .stem )
155+
156+ def post_transfer_epu (
157+ self ,
158+ transferred_file : Path ,
159+ environment : Optional [MurfeyInstanceEnvironment ] = None ,
160+ ** kwargs ,
161+ ):
162+ super ().post_transfer (
163+ transferred_file = transferred_file ,
164+ environment = environment ,
165+ ** kwargs ,
166+ )
100167
101168 if transferred_file .name == "EpuSession.dm" and environment :
102169 logger .info ("EPU session metadata found" )
@@ -194,21 +261,7 @@ def post_transfer(
194261 f"Collecting foil hole positions for { str (transferred_file )} and grid square { gs_name } "
195262 )
196263 fh_positions = _foil_hole_positions (transferred_file , gs_name )
197- visitless_source_search_dir = "/" .join (
198- [part for part in source .parts if part != environment .visit ]
199- ).replace ("//" , "/" )
200- visitless_source_images_dirs = sorted (
201- Path (visitless_source_search_dir ).glob ("Images-Disc*" ),
202- key = lambda x : x .stat ().st_ctime ,
203- )
204- if not visitless_source_images_dirs :
205- logger .warning (
206- f"Cannot find Images-Disc* in { visitless_source_search_dir } "
207- )
208- visitless_source_images_dirs = [
209- Path (visitless_source_search_dir ) / "Images-Disc1"
210- ]
211- visitless_source = str (visitless_source_images_dirs [- 1 ])
264+ visitless_source = _get_visitless_source (source , environment )
212265
213266 if fh_positions :
214267 gs_info = grid_square_data (
0 commit comments