Skip to content

Commit 0138690

Browse files
Save parameters from instrument server and reuse them from the murfey database (#522)
Restarting the instrument server causes parameters to be lost, and the gain reference is not set correctly in messages from the instrument server. This save these into a new table, and uses them in preference to values from the client/instrument
1 parent 7601cb4 commit 0138690

File tree

10 files changed

+110
-12
lines changed

10 files changed

+110
-12
lines changed

src/murfey/cli/spa_ispyb_messages.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,12 +223,12 @@ def run():
223223
metadata["image_size_y"] = str(int(metadata["image_size_y"]) * binning_factor)
224224
metadata["motion_corr_binning"] = 1 if binning_factor_xml == 2 else 2
225225
metadata["gain_ref"] = (
226-
f"data/{datetime.now().year}/{args.visit}/processing/gain.mrc"
226+
f"{datetime.now().year}/{args.visit}/processing/gain.mrc"
227227
if args.gain_ref is None
228228
else args.gain_ref
229229
)
230230
metadata["gain_ref_superres"] = (
231-
f"data/{datetime.now().year}/{args.visit}/processing/gain_superres.mrc"
231+
f"{datetime.now().year}/{args.visit}/processing/gain_superres.mrc"
232232
if args.gain_ref_superres is None
233233
else args.gain_ref_superres
234234
)

src/murfey/client/contexts/spa.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,14 +298,14 @@ def gather_metadata(
298298
if environment
299299
and environment.data_collection_parameters.get("gain_ref")
300300
not in (None, "None")
301-
else f"data/{datetime.now().year}/{environment.visit}/processing/gain.mrc"
301+
else f"{datetime.now().year}/{environment.visit}/processing/gain.mrc"
302302
)
303303
metadata["gain_ref_superres"] = (
304304
environment.data_collection_parameters.get("gain_ref_superres")
305305
if environment
306306
and environment.data_collection_parameters.get("gain_ref_superres")
307307
not in (None, "None")
308-
else f"data/{datetime.now().year}/{environment.visit}/processing/gain_superres.mrc"
308+
else f"{datetime.now().year}/{environment.visit}/processing/gain_superres.mrc"
309309
)
310310
else:
311311
metadata["gain_ref"] = None

src/murfey/client/contexts/tomo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ def gather_metadata(
618618
environment.data_collection_parameters.get("gain_ref")
619619
if environment.data_collection_parameters.get("gain_ref")
620620
not in (None, "None")
621-
else f"data/{datetime.now().year}/{environment.visit}/processing/gain.mrc"
621+
else f"{datetime.now().year}/{environment.visit}/processing/gain.mrc"
622622
)
623623
else:
624624
mdoc_metadata["gain_ref"] = None

src/murfey/instrument_server/api.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ def restart_rsyncer(session_id: MurfeySessionID, rsyncer_source: RsyncerSource):
220220

221221

222222
class ProcessingParameters(BaseModel):
223+
gain_ref: str
223224
dose_per_frame: Optional[float] = None
224225
extract_downscale: bool = True
225226
particle_diameter: Optional[float] = None
@@ -238,7 +239,8 @@ def register_processing_parameters(
238239
):
239240
data_collection_parameters[proc_param_block.label] = {}
240241
for k, v in proc_param_block.params.dict().items():
241-
data_collection_parameters[proc_param_block.label][k] = v
242+
if v is not None:
243+
data_collection_parameters[proc_param_block.label][k] = v
242244
return {"success": True}
243245

244246

src/murfey/server/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2490,7 +2490,7 @@ def feedback_callback(header: dict, message: dict) -> None:
24902490
),
24912491
voltage=message["voltage"],
24922492
motion_corr_binning=message["motion_corr_binning"],
2493-
eer_grouping=message["eer_fractionation"],
2493+
eer_fractionation_file=message["eer_fractionation_file"],
24942494
symmetry=message["symmetry"],
24952495
particle_diameter=message["particle_diameter"],
24962496
downscale=message["downscale"],

src/murfey/server/api/__init__.py

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
ProcessingJob,
6666
RsyncInstance,
6767
Session,
68+
SessionProcessingParameters,
6869
SPAFeedbackParameters,
6970
SPARelionParameters,
7071
Tilt,
@@ -477,6 +478,19 @@ def _parse(ps, i, dcg_id):
477478
def register_spa_proc_params(
478479
session_id: MurfeySessionID, proc_params: ProcessingParametersSPA, db=murfey_db
479480
):
481+
session_processing_parameters = db.exec(
482+
select(SessionProcessingParameters).where(
483+
SessionProcessingParameters.session_id == session_id
484+
)
485+
).all()
486+
if session_processing_parameters:
487+
proc_params.gain_ref = session_processing_parameters[0].gain_ref
488+
proc_params.dose_per_frame = session_processing_parameters[0].dose_per_frame
489+
proc_params.eer_fractionation_file = session_processing_parameters[
490+
0
491+
].eer_fractionation_file
492+
proc_params.symmetry = session_processing_parameters[0].symmetry
493+
480494
zocalo_message = {
481495
"register": "spa_processing_parameters",
482496
**dict(proc_params),
@@ -605,6 +619,18 @@ def post_foil_hole(
605619
def register_tomo_preproc_params(
606620
session_id: MurfeySessionID, proc_params: PreprocessingParametersTomo, db=murfey_db
607621
):
622+
session_processing_parameters = db.exec(
623+
select(SessionProcessingParameters).where(
624+
SessionProcessingParameters.session_id == session_id
625+
)
626+
).all()
627+
if session_processing_parameters:
628+
proc_params.gain_ref = session_processing_parameters[0].gain_ref
629+
proc_params.dose_per_frame = session_processing_parameters[0].dose_per_frame
630+
proc_params.eer_fractionation_file = session_processing_parameters[
631+
0
632+
].eer_fractionation_file
633+
608634
zocalo_message = {
609635
"register": "tomography_processing_parameters",
610636
**dict(proc_params),
@@ -1142,7 +1168,11 @@ async def request_spa_preprocessing(
11421168
"picker_uuid": murfey_ids[1],
11431169
"session_id": session_id,
11441170
"particle_diameter": proc_params["particle_diameter"] or 0,
1145-
"fm_int_file": proc_file.eer_fractionation_file,
1171+
"fm_int_file": (
1172+
proc_params["eer_fractionation_file"]
1173+
if proc_params["eer_fractionation_file"]
1174+
else proc_file.eer_fractionation_file
1175+
),
11461176
"do_icebreaker_jobs": default_spa_parameters.do_icebreaker_jobs,
11471177
"cryolo_model_weights": str(
11481178
_cryolo_model_path(visit_name, instrument_name)
@@ -1229,6 +1259,20 @@ async def request_tomography_preprocessing(
12291259
murfey_ids = _murfey_id(appid, db, number=1, close=False)
12301260
if not mrc_out.parent.exists():
12311261
mrc_out.parent.mkdir(parents=True, exist_ok=True)
1262+
1263+
processing_job_parameters = db.exec(
1264+
select(TomographyProcessingParameters).where(
1265+
TomographyProcessingParameters.processing_job_id
1266+
== data_collection[2].id
1267+
)
1268+
).all()
1269+
if processing_job_parameters:
1270+
proc_file.gain_ref = processing_job_parameters[0].gain_ref
1271+
proc_file.dose_per_frame = processing_job_parameters[0].dose_per_frame
1272+
proc_file.eer_fractionation_file = processing_job_parameters[
1273+
0
1274+
].eer_fractionation_file
1275+
12321276
zocalo_message: dict = {
12331277
"recipes": [recipe_name],
12341278
"parameters": {
@@ -1514,6 +1558,24 @@ def register_proc(
15141558
},
15151559
}
15161560

1561+
session_processing_parameters = db.exec(
1562+
select(SessionProcessingParameters).where(
1563+
SessionProcessingParameters.session_id == session_id
1564+
)
1565+
).all()
1566+
1567+
if session_processing_parameters:
1568+
proc_params["job_parameters"].update(
1569+
{
1570+
"gain_ref": session_processing_parameters[0].gain_ref,
1571+
"dose_per_frame": session_processing_parameters[0].dose_per_frame,
1572+
"eer_fractionation_file": session_processing_parameters[
1573+
0
1574+
].eer_fractionation_file,
1575+
"symmetry": session_processing_parameters[0].symmetry,
1576+
}
1577+
)
1578+
15171579
if _transport_object:
15181580
_transport_object.send(
15191581
_transport_object.feedback_queue,
@@ -1654,6 +1716,17 @@ async def write_eer_fractionation_file(
16541716
/ machine_config.gain_directory_name
16551717
/ secure_filename(fractionation_params.fractionation_file_name)
16561718
)
1719+
1720+
session_parameters = db.exec(
1721+
select(SessionProcessingParameters).where(
1722+
SessionProcessingParameters.session_id == session_id
1723+
)
1724+
).all()
1725+
if session_parameters:
1726+
session_parameters[0].eer_fractionation_file = str(file_path)
1727+
db.add(session_parameters)
1728+
db.commit()
1729+
16571730
if file_path.is_file():
16581731
return {"eer_fractionation_file": str(file_path)}
16591732

src/murfey/server/api/instrument.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from murfey.server.murfey_db import murfey_db
2424
from murfey.util import secure_path
2525
from murfey.util.config import get_machine_config
26-
from murfey.util.db import Session
26+
from murfey.util.db import Session, SessionProcessingParameters
2727
from murfey.util.models import File, MultigridWatcherSetup
2828

2929
# Create APIRouter class object
@@ -151,6 +151,16 @@ class ProvidedProcessingParameters(BaseModel):
151151
async def pass_proc_params_to_instrument_server(
152152
session_id: MurfeySessionID, proc_params: ProvidedProcessingParameters, db=murfey_db
153153
):
154+
session = db.exec(select(Session).where(Session.id == session_id)).one()
155+
156+
session_processing_parameters = SessionProcessingParameters(
157+
dose_per_frame=proc_params.dose_per_frame,
158+
gain_ref=session.current_gain_ref,
159+
symmetry=proc_params.symmetry,
160+
)
161+
db.add(session_processing_parameters)
162+
db.commit()
163+
154164
data = {}
155165
instrument_name = (
156166
db.exec(select(Session).where(Session.id == session_id)).one().instrument_name
@@ -171,6 +181,7 @@ async def pass_proc_params_to_instrument_server(
171181
"particle_diameter": proc_params.particle_diameter,
172182
"symmetry": proc_params.symmetry,
173183
"eer_fractionation": proc_params.eer_fractionation,
184+
"gain_ref": session.current_gain_ref,
174185
},
175186
},
176187
headers={

src/murfey/util/db.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,14 @@ class CLEMImageStack(SQLModel, table=True): # type: ignore
326326
"""
327327

328328

329+
class SessionProcessingParameters(SQLModel, table=True): # type: ignore
330+
session_id: int = Field(foreign_key="session.id", primary_key=True)
331+
gain_ref: str
332+
dose_per_frame: float
333+
eer_fractionation_file: str = ""
334+
symmetry: str = "C1"
335+
336+
329337
class TiltSeries(SQLModel, table=True): # type: ignore
330338
id: int = Field(primary_key=True)
331339
tag: str
@@ -641,7 +649,7 @@ class SPARelionParameters(SQLModel, table=True): # type: ignore
641649
gain_ref: Optional[str]
642650
voltage: int
643651
motion_corr_binning: int
644-
eer_grouping: int
652+
eer_fractionation_file: str = ""
645653
symmetry: str
646654
particle_diameter: Optional[float]
647655
downscale: bool

src/murfey/util/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ class ProcessingParametersSPA(BaseModel):
226226
boxsize: Optional[int]
227227
downscale: bool
228228
small_boxsize: Optional[int]
229-
eer_fractionation: int
229+
eer_fractionation_file: str = ""
230230
particle_diameter: Optional[float]
231231
magnification: Optional[int] = None
232232
total_exposed_dose: Optional[float] = None

src/murfey/workflows/spa/flush_spa_preprocess.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,11 @@ def flush_spa_preprocess(message: dict, murfey_db: Session, demo: bool = False)
417417
"picker_uuid": murfey_ids[2 * i + 1],
418418
"session_id": session_id,
419419
"particle_diameter": proc_params.particle_diameter or 0,
420-
"fm_int_file": f.eer_fractionation_file,
420+
"fm_int_file": (
421+
proc_params.eer_fractionation_file
422+
if proc_params.eer_fractionation_file
423+
else f.eer_fractionation_file
424+
),
421425
"do_icebreaker_jobs": default_spa_parameters.do_icebreaker_jobs,
422426
"foil_hole_id": foil_hole_id,
423427
},

0 commit comments

Comments
 (0)