@@ -73,6 +73,23 @@ def _foil_hole_positions(xml_path: Path, grid_square: int) -> Dict[str, FoilHole
7373 return foil_holes
7474
7575
76+ def _get_visitless_source (source : Path , environment : MurfeyInstanceEnvironment ) -> str :
77+ visitless_source_search_dir = "/" .join (
78+ [part for part in source .parts if part != environment .visit ]
79+ ).replace ("//" , "/" )
80+ visitless_source_images_dirs = sorted (
81+ Path (visitless_source_search_dir ).glob ("Images-Disc*" ),
82+ key = lambda x : x .stat ().st_ctime ,
83+ )
84+ if not visitless_source_images_dirs :
85+ logger .warning (f"Cannot find Images-Disc* in { visitless_source_search_dir } " )
86+ visitless_source_images_dirs = [
87+ Path (visitless_source_search_dir ) / "Images-Disc1"
88+ ]
89+ visitless_source = str (visitless_source_images_dirs [- 1 ])
90+ return visitless_source
91+
92+
7693class SPAMetadataContext (Context ):
7794 def __init__ (
7895 self ,
@@ -85,6 +102,7 @@ def __init__(
85102 self ._basepath = basepath
86103 self ._machine_config = machine_config
87104 self ._registered_squares : set [int ] = set ()
105+ self ._registered_squares_serialem : set [str ] = set ()
88106
89107 def post_transfer (
90108 self ,
@@ -97,6 +115,49 @@ def post_transfer(
97115 environment = environment ,
98116 ** kwargs ,
99117 )
118+ if self ._acquisition_software == "serialem" :
119+ self .post_transfer_serialem (
120+ transferred_file , environment = environment , ** kwargs
121+ )
122+ else :
123+ self .post_transfer_epu (transferred_file , environment = environment , ** kwargs )
124+
125+ def post_transfer_serialem (
126+ self ,
127+ transferred_file : Path ,
128+ environment : Optional [MurfeyInstanceEnvironment ] = None ,
129+ ** kwargs ,
130+ ):
131+ if environment and transferred_file .suffix == ".mrc" :
132+ source = _get_source (transferred_file , environment )
133+ if source :
134+ visitless_source = _get_visitless_source (source , environment )
135+ capture_post (
136+ base_url = str (environment .url .geturl ()),
137+ router_name = "session_control.spa_router" ,
138+ function_name = "register_square" ,
139+ token = self ._token ,
140+ instrument_name = environment .instrument_name ,
141+ session_id = environment .murfey_session ,
142+ gsid = transferred_file .stem ,
143+ data = {
144+ "tag" : visitless_source ,
145+ "count" : len (self ._registered_squares_serialem ) + 1 ,
146+ },
147+ )
148+ self ._registered_squares_serialem .add (transferred_file .stem )
149+
150+ def post_transfer_epu (
151+ self ,
152+ transferred_file : Path ,
153+ environment : Optional [MurfeyInstanceEnvironment ] = None ,
154+ ** kwargs ,
155+ ):
156+ super ().post_transfer (
157+ transferred_file = transferred_file ,
158+ environment = environment ,
159+ ** kwargs ,
160+ )
100161
101162 if transferred_file .name == "EpuSession.dm" and environment :
102163 logger .info ("EPU session metadata found" )
@@ -194,21 +255,7 @@ def post_transfer(
194255 f"Collecting foil hole positions for { str (transferred_file )} and grid square { gs_name } "
195256 )
196257 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 ])
258+ visitless_source = _get_visitless_source (source , environment )
212259
213260 if fh_positions :
214261 gs_info = grid_square_data (
0 commit comments