Skip to content

Commit 694a0a4

Browse files
committed
Save processing parameters in a new table to override client values
1 parent 476a56b commit 694a0a4

File tree

6 files changed

+78
-8
lines changed

6 files changed

+78
-8
lines changed

src/murfey/instrument_server/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,12 +220,12 @@ 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
226227
symmetry: str = "C1"
227228
eer_fractionation: int = 20
228-
gain_ref: Optional[str] = None
229229

230230

231231
class ProcessingParameterBlock(BaseModel):

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: 50 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,
@@ -1142,7 +1143,11 @@ async def request_spa_preprocessing(
11421143
"picker_uuid": murfey_ids[1],
11431144
"session_id": session_id,
11441145
"particle_diameter": proc_params["particle_diameter"] or 0,
1145-
"fm_int_file": proc_file.eer_fractionation_file,
1146+
"fm_int_file": (
1147+
proc_params["eer_fractionation_file"]
1148+
if proc_params["eer_fractionation_file"]
1149+
else proc_file.eer_fractionation_file
1150+
),
11461151
"do_icebreaker_jobs": default_spa_parameters.do_icebreaker_jobs,
11471152
"cryolo_model_weights": str(
11481153
_cryolo_model_path(visit_name, instrument_name)
@@ -1229,6 +1234,21 @@ async def request_tomography_preprocessing(
12291234
murfey_ids = _murfey_id(appid, db, number=1, close=False)
12301235
if not mrc_out.parent.exists():
12311236
mrc_out.parent.mkdir(parents=True, exist_ok=True)
1237+
1238+
processing_job_parameters = db.exec(
1239+
select(TomographyProcessingParameters).where(
1240+
TomographyProcessingParameters.processing_job_id
1241+
== data_collection[2].id
1242+
)
1243+
).all()
1244+
if processing_job_parameters:
1245+
proc_file.gain_ref = processing_job_parameters[0].gain_ref
1246+
proc_file.dose_per_frame = processing_job_parameters[0].dose_per_frame
1247+
proc_file.eer_fractionation_file = processing_job_parameters[
1248+
0
1249+
].eer_fractionation_file
1250+
proc_file.mc_binning = processing_job_parameters[0].motion_corr_binning
1251+
12321252
zocalo_message: dict = {
12331253
"recipes": [recipe_name],
12341254
"parameters": {
@@ -1514,6 +1534,24 @@ def register_proc(
15141534
},
15151535
}
15161536

1537+
session_processing_parameters = db.exec(
1538+
select(SessionProcessingParameters).where(
1539+
SessionProcessingParameters.session_id == session_id
1540+
)
1541+
).all()
1542+
1543+
if session_processing_parameters:
1544+
proc_params["job_parameters"].update(
1545+
{
1546+
"gain_ref": session_processing_parameters[0].gain_ref,
1547+
"dose_per_frame": session_processing_parameters[0].dose_per_frame,
1548+
"eer_fractionation_file": session_processing_parameters[
1549+
0
1550+
].eer_fractionation_file,
1551+
"symmetry": session_processing_parameters[0].symmetry,
1552+
}
1553+
)
1554+
15171555
if _transport_object:
15181556
_transport_object.send(
15191557
_transport_object.feedback_queue,
@@ -1654,6 +1692,17 @@ async def write_eer_fractionation_file(
16541692
/ machine_config.gain_directory_name
16551693
/ secure_filename(fractionation_params.fractionation_file_name)
16561694
)
1695+
1696+
session_parameters = db.exec(
1697+
select(SessionProcessingParameters).where(
1698+
SessionProcessingParameters.session_id == session_id
1699+
)
1700+
).all()
1701+
if session_parameters:
1702+
session_parameters[0].eer_fractionation_file = str(file_path)
1703+
db.add(session_parameters)
1704+
db.commit()
1705+
16571706
if file_path.is_file():
16581707
return {"eer_fractionation_file": str(file_path)}
16591708

src/murfey/server/api/instrument.py

Lines changed: 12 additions & 3 deletions
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
@@ -145,13 +145,22 @@ class ProvidedProcessingParameters(BaseModel):
145145
particle_diameter: Optional[float] = None
146146
symmetry: str = "C1"
147147
eer_fractionation: int = 20
148-
gain_ref: Optional[str] = None
149148

150149

151150
@router.post("/sessions/{session_id}/provided_processing_parameters")
152151
async def pass_proc_params_to_instrument_server(
153152
session_id: MurfeySessionID, proc_params: ProvidedProcessingParameters, db=murfey_db
154153
):
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+
155164
data = {}
156165
instrument_name = (
157166
db.exec(select(Session).where(Session.id == session_id)).one().instrument_name
@@ -172,7 +181,7 @@ async def pass_proc_params_to_instrument_server(
172181
"particle_diameter": proc_params.particle_diameter,
173182
"symmetry": proc_params.symmetry,
174183
"eer_fractionation": proc_params.eer_fractionation,
175-
"gain_ref": proc_params.gain_ref,
184+
"gain_ref": session.current_gain_ref,
176185
},
177186
},
178187
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/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)