Skip to content

Commit 6fff023

Browse files
Removal of redundant tomography context code (#381)
1 parent df3e5b6 commit 6fff023

File tree

3 files changed

+14
-186
lines changed

3 files changed

+14
-186
lines changed

src/murfey/client/contexts/tomo.py

Lines changed: 12 additions & 170 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from datetime import datetime
55
from pathlib import Path
66
from threading import RLock
7-
from typing import Callable, Dict, List, Optional, OrderedDict
7+
from typing import Callable, Dict, List, OrderedDict
88

99
import requests
1010
import xmltodict
@@ -38,7 +38,7 @@ def _get_tilt_angle_v5_11(p: Path) -> str:
3838

3939
def _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:

src/murfey/client/instance_environment.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ class MurfeyInstanceEnvironment(BaseModel):
5353
}
5454
data_collection_parameters: dict = {}
5555
movies: Dict[Path, MovieTracker] = {}
56-
motion_corrected_movies: Dict[Path, List[str]] = {}
5756
listeners: Dict[str, Set[Callable]] = {}
5857
movie_tilt_pair: Dict[Path, str] = {}
5958
tilt_angles: Dict[str, List[List[str]]] = {}
@@ -118,7 +117,6 @@ def clear(self):
118117
self.autoproc_program_ids = {}
119118
self.data_collection_parameters = {}
120119
self.movies = {}
121-
self.motion_corrected_movies = {}
122120
self.listeners = {}
123121
self.movie_tilt_pair = {}
124122
self.tilt_angles = {}

tests/client/test_context.py

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
def test_tomography_context_initialisation_for_tomo(tmp_path):
1212
context = TomographyContext("tomo", tmp_path)
13-
assert not context._last_transferred_file
13+
assert not context._completed_tilt_series
1414
assert context._acquisition_software == "tomo"
1515

1616

@@ -38,10 +38,6 @@ def test_tomography_context_add_tomo_tilt(mock_post, mock_get, tmp_path):
3838
assert context._tilt_series == {
3939
"Position_1": [tmp_path / "Position_1_001_[30.0]_date_time_fractions.tiff"]
4040
}
41-
assert (
42-
context._last_transferred_file
43-
== tmp_path / "Position_1_001_[30.0]_date_time_fractions.tiff"
44-
)
4541
(tmp_path / "Position_1_002_[-30.0]_date_time_fractions.tiff").touch()
4642
context.post_transfer(
4743
tmp_path / "Position_1_002_[-30.0]_date_time_fractions.tiff",
@@ -101,10 +97,6 @@ def test_tomography_context_add_tomo_tilt_out_of_order(mock_post, mock_get, tmp_
10197
assert context._tilt_series == {
10298
"Position_1": [tmp_path / "Position_1_001_[30.0]_date_time_fractions.tiff"]
10399
}
104-
assert (
105-
context._last_transferred_file
106-
== tmp_path / "Position_1_001_[30.0]_date_time_fractions.tiff"
107-
)
108100
(tmp_path / "Position_1_002_[-30.0]_date_time_fractions.tiff").touch()
109101
context.post_transfer(
110102
tmp_path / "Position_1_002_[-30.0]_date_time_fractions.tiff",
@@ -195,10 +187,6 @@ def test_tomography_context_add_tomo_tilt_delayed_tilt(mock_post, mock_get, tmp_
195187
assert context._tilt_series == {
196188
"Position_1": [tmp_path / "Position_1_001_[30.0]_date_time_fractions.tiff"]
197189
}
198-
assert (
199-
context._last_transferred_file
200-
== tmp_path / "Position_1_001_[30.0]_date_time_fractions.tiff"
201-
)
202190
(tmp_path / "Position_1_002_[-30.0]_date_time_fractions.tiff").touch()
203191
context.post_transfer(
204192
tmp_path / "Position_1_002_[-30.0]_date_time_fractions.tiff",
@@ -236,7 +224,7 @@ def test_tomography_context_add_tomo_tilt_delayed_tilt(mock_post, mock_get, tmp_
236224

237225
def test_tomography_context_initialisation_for_serialem(tmp_path):
238226
context = TomographyContext("serialem", tmp_path)
239-
assert not context._last_transferred_file
227+
assert not context._completed_tilt_series
240228
assert context._acquisition_software == "serialem"
241229

242230

0 commit comments

Comments
 (0)