Skip to content

Commit 4817ddb

Browse files
committed
Migrate parameters from environment to context
1 parent f4fc46b commit 4817ddb

File tree

7 files changed

+73
-183
lines changed

7 files changed

+73
-183
lines changed

src/murfey/client/context.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class Context:
3939
def __init__(self, name: str, acquisition_software: str):
4040
self._acquisition_software = acquisition_software
4141
self.name = name
42+
self.data_collection_parameters: dict = {}
4243

4344
def post_transfer(
4445
self,

src/murfey/client/contexts/spa.py

Lines changed: 22 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations
22

33
import logging
4-
from datetime import datetime
54
from itertools import count
65
from pathlib import Path
76
from typing import Any, Dict, List, Optional, OrderedDict, Tuple
@@ -164,7 +163,6 @@ def gather_metadata(
164163
return OrderedDict({})
165164
data = xmltodict.parse(for_parsing)
166165
magnification = 0
167-
num_fractions = 1
168166
metadata: OrderedDict = OrderedDict({})
169167
metadata["experiment_type"] = "SPA"
170168
if data.get("Acquisition"):
@@ -217,14 +215,6 @@ def gather_metadata(
217215
) # convert e / m^2 to e / A^2
218216
except ValueError:
219217
metadata["total_exposed_dose"] = 1
220-
try:
221-
num_fractions = int(
222-
data["MicroscopeImage"]["microscopeData"]["acquisition"]["camera"][
223-
"CameraSpecificInput"
224-
]["a:KeyValueOfstringanyType"][2]["a:Value"]["b:NumberOffractions"]
225-
)
226-
except (KeyError, IndexError):
227-
pass
228218
c2_index = 3
229219
for i, el in enumerate(
230220
data["MicroscopeImage"]["CustomData"]["a:KeyValueOfstringanyType"]
@@ -293,85 +283,29 @@ def gather_metadata(
293283
metadata["image_size_x"] = str(int(metadata["image_size_x"]) * binning_factor)
294284
metadata["image_size_y"] = str(int(metadata["image_size_y"]) * binning_factor)
295285
metadata["motion_corr_binning"] = 1 if binning_factor_xml == 2 else 2
296-
if environment:
297-
metadata["gain_ref"] = (
298-
environment.data_collection_parameters.get("gain_ref")
299-
if environment
300-
and environment.data_collection_parameters.get("gain_ref")
301-
not in (None, "None")
302-
else f"{datetime.now().year}/{environment.visit}/processing/gain.mrc"
303-
)
304-
metadata["gain_ref_superres"] = (
305-
environment.data_collection_parameters.get("gain_ref_superres")
306-
if environment
307-
and environment.data_collection_parameters.get("gain_ref_superres")
308-
not in (None, "None")
309-
else f"{datetime.now().year}/{environment.visit}/processing/gain_superres.mrc"
310-
)
311-
else:
312-
metadata["gain_ref"] = None
313-
metadata["gain_ref_superres"] = None
314-
if metadata.get("total_exposed_dose"):
315-
metadata["dose_per_frame"] = (
316-
environment.data_collection_parameters.get("dose_per_frame")
317-
if environment
318-
and environment.data_collection_parameters.get("dose_per_frame")
319-
not in (None, "None")
320-
else round(metadata["total_exposed_dose"] / num_fractions, 3)
321-
)
322-
else:
323-
metadata["dose_per_frame"] = (
324-
environment.data_collection_parameters.get("dose_per_frame")
325-
if environment
326-
else None
327-
)
328286

329287
metadata["use_cryolo"] = (
330-
environment.data_collection_parameters.get("use_cryolo")
331-
if environment
332-
else None
333-
) or True
334-
metadata["symmetry"] = (
335-
environment.data_collection_parameters.get("symmetry")
336-
if environment
337-
else None
338-
) or "C1"
288+
self.data_collection_parameters.get("use_cryolo") or True
289+
)
290+
metadata["symmetry"] = self.data_collection_parameters.get("symmetry") or "C1"
339291
metadata["mask_diameter"] = (
340-
environment.data_collection_parameters.get("mask_diameter")
341-
if environment
342-
else None
343-
) or 190
344-
metadata["boxsize"] = (
345-
environment.data_collection_parameters.get("boxsize")
346-
if environment
347-
else None
348-
) or 256
349-
metadata["downscale"] = (
350-
environment.data_collection_parameters.get("downscale")
351-
if environment
352-
else None
353-
) or True
292+
self.data_collection_parameters.get("mask_diameter") or 190
293+
)
294+
metadata["boxsize"] = self.data_collection_parameters.get("boxsize") or 256
295+
metadata["downscale"] = self.data_collection_parameters.get("downscale") or True
354296
metadata["small_boxsize"] = (
355-
environment.data_collection_parameters.get("small_boxsize")
356-
if environment
357-
else None
358-
) or 128
297+
self.data_collection_parameters.get("small_boxsize") or 128
298+
)
359299
metadata["eer_fractionation"] = (
360-
environment.data_collection_parameters.get("eer_fractionation")
361-
if environment
362-
else None
363-
) or 20
300+
self.data_collection_parameters.get("eer_fractionation") or 20
301+
)
364302
metadata["source"] = str(self._basepath)
365303
metadata["particle_diameter"] = (
366-
environment.data_collection_parameters.get("particle_diameter")
367-
if environment
368-
else None
369-
) or 0
304+
self.data_collection_parameters.get("particle_diameter") or 0
305+
)
370306
metadata["estimate_particle_diameter"] = (
371-
environment.data_collection_parameters.get("estimate_particle_diameter")
372-
if environment
373-
else None
374-
) or True
307+
self.data_collection_parameters.get("estimate_particle_diameter") or True
308+
)
375309
return metadata
376310

377311
def _position_analysis(
@@ -584,10 +518,10 @@ def post_transfer(
584518
f"{str(environment.url.geturl())}{url_path_for('file_io_instrument.router', 'write_eer_fractionation_file', visit_name=environment.visit, session_id=environment.murfey_session)}",
585519
json={
586520
"eer_path": str(file_transferred_to),
587-
"fractionation": environment.data_collection_parameters[
521+
"fractionation": self.data_collection_parameters[
588522
"eer_fractionation"
589523
],
590-
"dose_per_frame": environment.data_collection_parameters[
524+
"dose_per_frame": self.data_collection_parameters[
591525
"dose_per_frame"
592526
],
593527
"fractionation_file_name": "eer_fractionation_spa.txt",
@@ -619,20 +553,16 @@ def post_transfer(
619553
"image_number": environment.movies[
620554
file_transferred_to
621555
].movie_number,
622-
"pixel_size": environment.data_collection_parameters.get(
556+
"pixel_size": self.data_collection_parameters.get(
623557
"pixel_size_on_image"
624558
),
625559
"autoproc_program_id": None,
626-
"dose_per_frame": environment.data_collection_parameters.get(
627-
"dose_per_frame"
628-
),
629-
"mc_binning": environment.data_collection_parameters.get(
560+
"dose_per_frame": environment.dose_per_frame,
561+
"mc_binning": self.data_collection_parameters.get(
630562
"motion_corr_binning", 1
631563
),
632-
"gain_ref": environment.data_collection_parameters.get(
633-
"gain_ref"
634-
),
635-
"extract_downscale": environment.data_collection_parameters.get(
564+
"gain_ref": environment.gain_ref,
565+
"extract_downscale": self.data_collection_parameters.get(
636566
"downscale", True
637567
),
638568
"eer_fractionation_file": eer_fractionation_file,

src/murfey/client/contexts/tomo.py

Lines changed: 20 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations
22

33
import logging
4-
from datetime import datetime
54
from pathlib import Path
65
from threading import RLock
76
from typing import Callable, Dict, List, OrderedDict
@@ -133,25 +132,23 @@ def register_tomography_data_collections(
133132
"tag": tilt_series,
134133
}
135134
if (
136-
environment.data_collection_parameters
137-
and environment.data_collection_parameters.get("voltage")
135+
self.data_collection_parameters
136+
and self.data_collection_parameters.get("voltage")
138137
):
139138
# Once mdoc parameters are known register processing jobs
140139
dc_data.update(
141140
{
142-
"voltage": environment.data_collection_parameters[
143-
"voltage"
144-
],
145-
"pixel_size_on_image": environment.data_collection_parameters[
141+
"voltage": self.data_collection_parameters["voltage"],
142+
"pixel_size_on_image": self.data_collection_parameters[
146143
"pixel_size_on_image"
147144
],
148-
"image_size_x": environment.data_collection_parameters[
145+
"image_size_x": self.data_collection_parameters[
149146
"image_size_x"
150147
],
151-
"image_size_y": environment.data_collection_parameters[
148+
"image_size_y": self.data_collection_parameters[
152149
"image_size_y"
153150
],
154-
"magnification": environment.data_collection_parameters[
151+
"magnification": self.data_collection_parameters[
155152
"magnification"
156153
],
157154
}
@@ -176,7 +173,7 @@ def register_tomography_data_collections(
176173
)
177174

178175
except Exception as e:
179-
logger.error(f"ERROR {e}, {environment.data_collection_parameters}")
176+
logger.error(f"ERROR {e}, {self.data_collection_parameters}")
180177

181178
def _file_transferred_to(
182179
self, environment: MurfeyInstanceEnvironment, source: Path, file_path: Path
@@ -315,19 +312,15 @@ def _add_tilt(
315312
capture_post(tilt_url, json=tilt_data)
316313

317314
eer_fractionation_file = None
318-
if environment.data_collection_parameters.get("num_eer_frames"):
315+
if self.data_collection_parameters.get("num_eer_frames"):
319316
response = requests.post(
320317
f"{str(environment.url.geturl())}{url_path_for('file_io_instrument.router', 'write_eer_fractionation_file', visit_name=environment.visit, session_id=environment.murfey_session)}",
321318
json={
322-
"num_frames": environment.data_collection_parameters[
323-
"num_eer_frames"
324-
],
325-
"fractionation": environment.data_collection_parameters[
319+
"num_frames": self.data_collection_parameters["num_eer_frames"],
320+
"fractionation": self.data_collection_parameters[
326321
"eer_fractionation"
327322
],
328-
"dose_per_frame": environment.data_collection_parameters[
329-
"dose_per_frame"
330-
],
323+
"dose_per_frame": environment.dose_per_frame or 0,
331324
"fractionation_file_name": "eer_fractionation_tomo.txt",
332325
},
333326
)
@@ -337,23 +330,17 @@ def _add_tilt(
337330
"path": str(file_transferred_to),
338331
"description": "",
339332
"image_number": environment.movies[file_transferred_to].movie_number,
340-
"pixel_size": environment.data_collection_parameters.get(
333+
"pixel_size": self.data_collection_parameters.get(
341334
"pixel_size_on_image", 0
342335
),
343-
"dose_per_frame": environment.data_collection_parameters.get(
344-
"dose_per_frame", 0
345-
),
346-
"frame_count": environment.data_collection_parameters.get(
347-
"frame_count", 0
348-
),
349-
"tilt_axis": environment.data_collection_parameters.get(
350-
"tilt_axis", 85
351-
),
352-
"mc_binning": environment.data_collection_parameters.get(
336+
"dose_per_frame": environment.dose_per_frame or 0,
337+
"frame_count": self.data_collection_parameters.get("frame_count", 0),
338+
"tilt_axis": self.data_collection_parameters.get("tilt_axis", 85),
339+
"mc_binning": self.data_collection_parameters.get(
353340
"motion_corr_binning", 1
354341
),
355-
"gain_ref": environment.data_collection_parameters.get("gain_ref"),
356-
"voltage": environment.data_collection_parameters.get("voltage", 300),
342+
"gain_ref": environment.gain_ref,
343+
"voltage": self.data_collection_parameters.get("voltage", 300),
357344
"eer_fractionation_file": eer_fractionation_file,
358345
"tag": tilt_series,
359346
"group_tag": str(self._basepath),
@@ -565,9 +552,7 @@ def gather_metadata(
565552
metadata["motion_corr_binning"] = 1
566553
metadata["gain_ref"] = None
567554
metadata["dose_per_frame"] = (
568-
environment.data_collection_parameters.get("dose_per_frame")
569-
if environment
570-
else None
555+
environment.dose_per_frame if environment else None
571556
)
572557
metadata["source"] = str(self._basepath)
573558
except KeyError:
@@ -615,20 +600,6 @@ def gather_metadata(
615600
float(mdoc_data["PixelSpacing"]) * 1e-10
616601
)
617602
mdoc_metadata["motion_corr_binning"] = binning_factor
618-
if environment:
619-
mdoc_metadata["gain_ref"] = (
620-
environment.data_collection_parameters.get("gain_ref")
621-
if environment.data_collection_parameters.get("gain_ref")
622-
not in (None, "None")
623-
else f"{datetime.now().year}/{environment.visit}/processing/gain.mrc"
624-
)
625-
else:
626-
mdoc_metadata["gain_ref"] = None
627-
mdoc_metadata["dose_per_frame"] = (
628-
environment.data_collection_parameters.get("dose_per_frame")
629-
if environment
630-
else None
631-
)
632603
mdoc_metadata["source"] = str(self._basepath)
633604
mdoc_metadata["tag"] = str(self._basepath)
634605
mdoc_metadata["tilt_series_tag"] = metadata_file.stem
@@ -639,11 +610,6 @@ def gather_metadata(
639610
mdoc_metadata["file_extension"] = (
640611
f".{mdoc_data_block['SubFramePath'].split('.')[-1]}"
641612
)
642-
mdoc_metadata["eer_fractionation"] = (
643-
environment.data_collection_parameters.get("eer_fractionation")
644-
if environment
645-
else None
646-
) or 20
647613

648614
data_file = mdoc_data_block["SubFramePath"].split("\\")[-1]
649615
if data_file.split(".")[-1] == "eer":

src/murfey/client/instance_environment.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,15 @@ class MurfeyInstanceEnvironment(BaseModel):
4141
destination_registry: Dict[str, str] = {}
4242
watchers: Dict[Path, DirWatcher] = {}
4343
demo: bool = False
44-
data_collection_parameters: dict = {}
4544
movies: Dict[Path, MovieTracker] = {}
4645
movie_tilt_pair: Dict[Path, str] = {}
4746
tilt_angles: Dict[str, List[List[str]]] = {}
4847
movie_counters: Dict[str, itertools.count] = {}
4948
visit: str = ""
5049
processing_only_mode: bool = False
50+
dose_per_frame: Optional[float] = None
5151
gain_ref: Optional[Path] = None
52+
symmetry: Optional[str] = None
5253
superres: bool = False
5354
murfey_session: Optional[int] = None
5455
samples: Dict[Path, SampleInfo] = {}
@@ -64,9 +65,10 @@ def clear(self):
6465
for w in self.watchers.values():
6566
w.stop()
6667
self.watchers = {}
67-
self.data_collection_parameters = {}
6868
self.movies = {}
6969
self.movie_tilt_pair = {}
7070
self.tilt_angles = {}
7171
self.visit = ""
72+
self.dose_per_frame = None
7273
self.gain_ref = None
74+
self.symmetry = None

0 commit comments

Comments
 (0)