44from datetime import datetime
55from pathlib import Path
66from threading import RLock
7- from typing import Callable , Dict , List , Optional , OrderedDict
7+ from typing import Callable , Dict , List , OrderedDict
88
99import requests
1010import xmltodict
@@ -38,7 +38,7 @@ def _get_tilt_angle_v5_11(p: Path) -> str:
3838
3939def _find_angle_index (split_name : List [str ]) -> int :
4040 for i , part in enumerate (split_name ):
41- if "." in part and part [0 ].isnumeric ():
41+ if "." in part and part [- 1 ].isnumeric ():
4242 return i
4343 return - 1
4444
@@ -110,8 +110,6 @@ def __init__(self, acquisition_software: str, basepath: Path):
110110 self ._tilt_series_sizes : Dict [str , int ] = {}
111111 self ._completed_tilt_series : List [str ] = []
112112 self ._aligned_tilt_series : List [str ] = []
113- self ._motion_corrected_tilt_series : Dict [str , List [Path ]] = {}
114- self ._last_transferred_file : Path | None = None
115113 self ._data_collection_stash : list = []
116114 self ._processing_job_stash : dict = {}
117115 self ._preprocessing_triggers : dict = {}
@@ -156,57 +154,6 @@ def _flush_preprocess(self, tag: str, app_id: int):
156154 capture_post (tr [0 ], json = process_file )
157155 self ._preprocessing_triggers .pop (tag )
158156
159- def _check_for_alignment (
160- self ,
161- movie_path : Path ,
162- motion_corrected_path : Path ,
163- url : str ,
164- dcid : int ,
165- pjid : int ,
166- appid : int ,
167- mvid : int ,
168- tilt_angles : List ,
169- manual_tilt_offset : Optional [float ],
170- pixel_size : Optional [float ],
171- ):
172- tilt_series = _construct_tilt_series_name (movie_path )
173-
174- if self ._motion_corrected_tilt_series .get (
175- tilt_series
176- ) and motion_corrected_path not in self ._motion_corrected_tilt_series .get (
177- tilt_series , {}
178- ):
179- self ._motion_corrected_tilt_series [tilt_series ].append (
180- motion_corrected_path
181- )
182- else :
183- self ._motion_corrected_tilt_series [tilt_series ] = [motion_corrected_path ]
184- if tilt_series in self ._completed_tilt_series :
185- if (
186- len (self ._motion_corrected_tilt_series [tilt_series ])
187- == len (self ._tilt_series [tilt_series ])
188- and len (self ._motion_corrected_tilt_series [tilt_series ]) > 1
189- and tilt_series not in self ._aligned_tilt_series
190- ):
191- try :
192-
193- series_data : dict = {
194- "name" : tilt_series ,
195- "file_tilt_list" : str (tilt_angles ),
196- "dcid" : dcid ,
197- "processing_job" : pjid ,
198- "autoproc_program_id" : appid ,
199- "motion_corrected_path" : str (motion_corrected_path ),
200- "movie_id" : mvid ,
201- "manual_tilt_offset" : manual_tilt_offset ,
202- "pixel_size" : pixel_size ,
203- }
204- capture_post (url , json = series_data )
205- with self ._lock :
206- self ._aligned_tilt_series .append (tilt_series )
207- except Exception as e :
208- logger .warning (f"Data error { e } " )
209-
210157 def _complete_process_file (
211158 self ,
212159 incomplete_process_file : ProcessFileIncomplete ,
@@ -302,7 +249,6 @@ def _add_tilt(
302249 file_path : Path ,
303250 extract_tilt_angle : Callable [[Path ], str ],
304251 environment : MurfeyInstanceEnvironment | None = None ,
305- required_position_files : List [Path ] | None = None ,
306252 required_strings : List [str ] | None = None ,
307253 ) -> List [str ]:
308254 if not environment :
@@ -312,7 +258,6 @@ def _add_tilt(
312258 if not source :
313259 logger .warning (f"No source found for file { file_path } " )
314260 return []
315- # required_position_files = required_position_files or []
316261 required_strings = (
317262 ["fractions" ] if required_strings is None else required_strings
318263 )
@@ -472,24 +417,6 @@ def _add_tilt(
472417 else :
473418 self ._tilt_series [tilt_series ].append (file_path )
474419
475- res = []
476- if self ._last_transferred_file :
477- last_tilt_series = _construct_tilt_series_name (self ._last_transferred_file )
478-
479- last_tilt_angle = extract_tilt_angle (self ._last_transferred_file )
480- self ._last_transferred_file = file_path
481- if (
482- last_tilt_series != tilt_series
483- and last_tilt_angle != tilt_angle
484- or self ._tilt_series_sizes .get (tilt_series )
485- ) or self ._completed_tilt_series :
486- res = self ._check_tilt_series (
487- tilt_series ,
488- required_position_files or [],
489- file_transferred_to ,
490- environment = environment ,
491- )
492-
493420 if environment :
494421 tilt_url = f"{ str (environment .url .geturl ())} /visits/{ environment .visit } /{ environment .murfey_session } /tilt"
495422 tilt_data = {
@@ -543,99 +470,28 @@ def _add_tilt(
543470 }
544471 capture_post (preproc_url , json = preproc_data )
545472
546- self ._last_transferred_file = file_path
547- return res
473+ return self ._check_tilt_series (tilt_series )
548474
549475 def _check_tilt_series (
550476 self ,
551477 tilt_series : str ,
552- required_position_files : List [Path ],
553- file_transferred_to : Path | None ,
554- environment : MurfeyInstanceEnvironment | None = None ,
555478 ) -> List [str ]:
556479 newly_completed_series : List [str ] = []
557- if not self ._tilt_series :
480+ mdoc_tilt_series_size = self ._tilt_series_sizes .get (tilt_series , 0 )
481+ if not self ._tilt_series or not mdoc_tilt_series_size :
558482 return newly_completed_series
559- this_tilt_series_size = len (self ._tilt_series .get (tilt_series , []))
560- tilt_series_size_check = (
561- (this_tilt_series_size == self ._tilt_series_sizes .get (tilt_series ))
562- if self ._tilt_series_sizes .get (tilt_series )
563- else False
564- )
565- if tilt_series_size_check and not required_position_files :
566- if tilt_series not in self ._completed_tilt_series :
567- self ._completed_tilt_series .append (tilt_series )
568- newly_completed_series .append (tilt_series )
569- for ts , ta in self ._tilt_series .items ():
570- required_position_files_check = (
571- all (_f .is_file () for _f in required_position_files )
572- if required_position_files
573- else True
574- )
575- if self ._tilt_series_sizes .get (ts ):
576- completion_test = len (ta ) >= self ._tilt_series_sizes [ts ]
577- if completion_test :
578- completion_test = required_position_files_check
579- else :
580- completion_test = False
581- if ts not in self ._completed_tilt_series and completion_test :
582- newly_completed_series .append (ts )
583- self ._completed_tilt_series .append (ts )
584- if environment and file_transferred_to :
585- file_tilt_list = []
586- movie : str
587- angle : str
588- for movie , angle in environment .tilt_angles [ts ]:
589- if environment .motion_corrected_movies .get (Path (movie )):
590- file_tilt_list .append (
591- [
592- str (
593- environment .motion_corrected_movies [
594- Path (movie )
595- ][0 ]
596- ),
597- angle ,
598- str (
599- environment .motion_corrected_movies [
600- Path (movie )
601- ][1 ]
602- ),
603- ]
604- )
605- if environment .motion_corrected_movies .get (file_transferred_to ):
606- self ._check_for_alignment (
607- file_transferred_to ,
608- Path (
609- environment .motion_corrected_movies [ # key error PosixPath
610- file_transferred_to
611- ][
612- 0
613- ]
614- ),
615- environment .url .geturl (),
616- environment .data_collection_ids [ts ],
617- environment .processing_job_ids [ts ]["em-tomo-align" ],
618- environment .autoproc_program_ids [ts ]["em-tomo-align" ],
619- int (
620- environment .motion_corrected_movies [
621- file_transferred_to
622- ][1 ]
623- ),
624- file_tilt_list ,
625- environment .data_collection_parameters .get (
626- "manual_tilt_offset"
627- ),
628- environment .data_collection_parameters .get (
629- "pixel_size_on_image"
630- ),
631- )
483+
484+ counted_tilts = len (self ._tilt_series .get (tilt_series , []))
485+ tilt_series_size_check = counted_tilts >= mdoc_tilt_series_size
486+ if tilt_series_size_check and tilt_series not in self ._completed_tilt_series :
487+ self ._completed_tilt_series .append (tilt_series )
488+ newly_completed_series .append (tilt_series )
632489 return newly_completed_series
633490
634491 def _add_tomo_tilt (
635492 self ,
636493 file_path : Path ,
637494 environment : MurfeyInstanceEnvironment | None = None ,
638- required_position_files : List [Path ] | None = None ,
639495 required_strings : List [str ] | None = None ,
640496 ) -> List [str ]:
641497 required_strings = (
@@ -654,16 +510,10 @@ def _add_tomo_tilt(
654510 tilt_info_extraction = tomo_tilt_info ["5.7" ]
655511 else :
656512 tilt_info_extraction = tomo_tilt_info ["5.7" ]
657- tilt_series = _construct_tilt_series_name (file_path )
658513 return self ._add_tilt (
659514 file_path ,
660515 tilt_info_extraction ,
661516 environment = environment ,
662- required_position_files = (
663- required_position_files
664- if required_position_files is not None
665- else [file_path .parent / (tilt_series + ".mdoc" )]
666- ),
667517 required_strings = required_strings ,
668518 )
669519
@@ -729,7 +579,6 @@ def post_transfer(
729579 completed_tilts = self ._add_tomo_tilt (
730580 transferred_file ,
731581 environment = environment ,
732- required_position_files = kwargs .get ("required_position_files" ),
733582 required_strings = kwargs .get ("required_strings" )
734583 or required_strings ,
735584 )
@@ -744,14 +593,7 @@ def post_transfer(
744593 if environment :
745594 source = self ._get_source (transferred_file , environment )
746595 if source :
747- completed_tilts = self ._check_tilt_series (
748- tilt_series ,
749- kwargs .get ("required_position_files" ) or [],
750- self ._file_transferred_to (
751- environment , source , transferred_file
752- ),
753- environment = environment ,
754- )
596+ completed_tilts = self ._check_tilt_series (tilt_series )
755597
756598 # Always update the tilt series length in the database after an mdoc
757599 if environment .murfey_session is not None :
0 commit comments