From f5e0c7cde8dd420def0dd6870cddf5a6b45ac9ec Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Tue, 21 Oct 2025 11:43:08 +0100 Subject: [PATCH 1/2] Add an option to turn off 3D classification into Session parameters --- src/murfey/server/api/instrument.py | 2 ++ src/murfey/server/api/processing_parameters.py | 4 ++++ src/murfey/server/feedback.py | 11 ++++++++++- src/murfey/util/db.py | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/murfey/server/api/instrument.py b/src/murfey/server/api/instrument.py index 018e62490..5c54b1f92 100644 --- a/src/murfey/server/api/instrument.py +++ b/src/murfey/server/api/instrument.py @@ -233,6 +233,7 @@ class ProvidedProcessingParameters(BaseModel): particle_diameter: Optional[float] = None symmetry: str = "C1" eer_fractionation: int = 20 + run_class3d: bool = True @router.post("/sessions/{session_id}/provided_processing_parameters") @@ -247,6 +248,7 @@ async def pass_proc_params_to_instrument_server( gain_ref=session.current_gain_ref, symmetry=proc_params.symmetry, eer_fractionation=proc_params.eer_fractionation, + run_class3d=proc_params.run_class3d, ) db.add(session_processing_parameters) db.commit() diff --git a/src/murfey/server/api/processing_parameters.py b/src/murfey/server/api/processing_parameters.py index bbc7ab4cc..523c6be21 100644 --- a/src/murfey/server/api/processing_parameters.py +++ b/src/murfey/server/api/processing_parameters.py @@ -27,6 +27,7 @@ class EditableSessionProcessingParameters(BaseModel): dose_per_frame: Optional[float] = None eer_fractionation_file: str = "" symmetry: str = "" + run_class3d: Optional[bool] = None @router.get("/sessions/{session_id}/session_processing_parameters") @@ -46,6 +47,7 @@ def get_session_processing_parameters( dose_per_frame=proc_params.dose_per_frame, eer_fractionation_file=proc_params.eer_fractionation_file, symmetry=proc_params.symmetry, + run_class3d=proc_params.run_class3d, ) @@ -68,6 +70,8 @@ def set_session_processing_parameters( edited_parameters.eer_fractionation_file or proc_params.eer_fractionation_file ) proc_params.symmetry = edited_parameters.symmetry or proc_params.symmetry + if edited_parameters.run_class3d is not None: + proc_params.run_class3d = edited_parameters.run_class3d db.add(proc_params) db.commit() db.close() diff --git a/src/murfey/server/feedback.py b/src/murfey/server/feedback.py index d91f54a80..e09f0acde 100644 --- a/src/murfey/server/feedback.py +++ b/src/murfey/server/feedback.py @@ -2400,7 +2400,16 @@ def feedback_callback(header: dict, message: dict, _db=murfey_db) -> None: murfey.server._transport_object.transport.ack(header) return None elif message["register"] == "run_class3d": - _register_3d_batch(message, _db) + session_processing_parameters = _db.exec( + select(db.SessionProcessingParameters).where( + db.SessionProcessingParameters.session_id == message["session_id"] + ) + ).all() + if ( + not session_processing_parameters + or session_processing_parameters[0].run_class3d + ): + _register_3d_batch(message, _db) if murfey.server._transport_object: murfey.server._transport_object.transport.ack(header) return None diff --git a/src/murfey/util/db.py b/src/murfey/util/db.py index ef1606130..d9c01cc0c 100644 --- a/src/murfey/util/db.py +++ b/src/murfey/util/db.py @@ -341,6 +341,7 @@ class SessionProcessingParameters(SQLModel, table=True): # type: ignore eer_fractionation: int = 20 eer_fractionation_file: str = "" symmetry: str = "C1" + run_class3d: bool = True session: Optional[Session] = Relationship( back_populates="session_processing_parameters" ) From 6e22dd3114061bf917950187e3fe5b4396ada545 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Wed, 22 Oct 2025 11:25:57 +0100 Subject: [PATCH 2/2] Need to check if proc params exist and update if so --- src/murfey/server/api/instrument.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/murfey/server/api/instrument.py b/src/murfey/server/api/instrument.py index 5c54b1f92..73ad8efdf 100644 --- a/src/murfey/server/api/instrument.py +++ b/src/murfey/server/api/instrument.py @@ -242,14 +242,26 @@ async def pass_proc_params_to_instrument_server( ): session = db.exec(select(Session).where(Session.id == session_id)).one() - session_processing_parameters = SessionProcessingParameters( - session_id=session_id, - dose_per_frame=proc_params.dose_per_frame, - gain_ref=session.current_gain_ref, - symmetry=proc_params.symmetry, - eer_fractionation=proc_params.eer_fractionation, - run_class3d=proc_params.run_class3d, - ) + existing_parameters = db.exec( + select(SessionProcessingParameters).where( + SessionProcessingParameters.session_id == session_id + ) + ).all() + if not existing_parameters: + session_processing_parameters = SessionProcessingParameters( + session_id=session_id, + dose_per_frame=proc_params.dose_per_frame, + gain_ref=session.current_gain_ref, + symmetry=proc_params.symmetry, + eer_fractionation=proc_params.eer_fractionation, + run_class3d=proc_params.run_class3d, + ) + else: + session_processing_parameters = existing_parameters[0] + session_processing_parameters.dose_per_frame = proc_params.dose_per_frame + session_processing_parameters.eer_fractionation = proc_params.eer_fractionation + session_processing_parameters.symmetry = proc_params.symmetry + session_processing_parameters.run_class3d = proc_params.run_class3d db.add(session_processing_parameters) db.commit()