Skip to content

Commit 40a8dfd

Browse files
Add further refinement uuids for the symmetrised run (#404)
Will need a recipe update to take effect
1 parent 5f40177 commit 40a8dfd

File tree

2 files changed

+73
-8
lines changed

2 files changed

+73
-8
lines changed

src/murfey/server/__init__.py

Lines changed: 71 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -460,9 +460,10 @@ def _murfey_class3ds(murfey_ids: List[int], particles_file: str, app_id: int, _d
460460
_db.close()
461461

462462

463-
def _murfey_refine(murfey_id: int, refine_dir: str, app_id: int, _db):
463+
def _murfey_refine(murfey_id: int, refine_dir: str, tag: str, app_id: int, _db):
464464
pj_id = _pj_id(app_id, _db, recipe="em-spa-refine")
465465
refine3d = db.Refine3D(
466+
tag=tag,
466467
refine_dir=refine_dir,
467468
pj_id=pj_id,
468469
murfey_id=murfey_id,
@@ -501,7 +502,7 @@ def _3d_class_murfey_ids(particles_file: str, app_id: int, _db) -> Dict[str, int
501502
return {str(cl.class_number): cl.murfey_id for cl in classes}
502503

503504

504-
def _refine_murfey_id(refine_dir: str, app_id: int, _db) -> Dict[str, int]:
505+
def _refine_murfey_id(refine_dir: str, tag: str, app_id: int, _db) -> Dict[str, int]:
505506
pj_id = (
506507
_db.exec(select(db.AutoProcProgram).where(db.AutoProcProgram.id == app_id))
507508
.one()
@@ -511,6 +512,7 @@ def _refine_murfey_id(refine_dir: str, app_id: int, _db) -> Dict[str, int]:
511512
select(db.Refine3D)
512513
.where(db.Refine3D.refine_dir == refine_dir)
513514
.where(db.Refine3D.pj_id == pj_id)
515+
.where(db.Refine3D.tag == tag)
514516
).one()
515517
return refined_class.murfey_id
516518

@@ -1028,7 +1030,14 @@ def _release_refine_hold(message: dict, _db=murfey_db):
10281030
)
10291031
).one()
10301032
refine_params = _db.exec(
1031-
select(db.RefineParameters).where(db.RefineParameters.pj_id == pj_id)
1033+
select(db.RefineParameters)
1034+
.where(db.RefineParameters.pj_id == pj_id)
1035+
.where(db.RefineParameters.tag == "first")
1036+
).one()
1037+
symmetry_refine_params = _db.exec(
1038+
select(db.RefineParameters)
1039+
.where(db.RefineParameters.pj_id == pj_id)
1040+
.where(db.RefineParameters.tag == "symmetry")
10321041
).one()
10331042
if refine_params.run:
10341043
instrument_name = (
@@ -1052,9 +1061,19 @@ def _release_refine_hold(message: dict, _db=murfey_db):
10521061
"nr_iter": default_spa_parameters.nr_iter_3d,
10531062
"picker_id": feedback_params.picker_ispyb_id,
10541063
"refined_class_uuid": _refine_murfey_id(
1055-
refine_params.refine_dir, _app_id(pj_id, _db), _db
1064+
refine_dir=refine_params.refine_dir,
1065+
tag=refine_params.tag,
1066+
app_id=_app_id(pj_id, _db),
1067+
_db=_db,
10561068
),
10571069
"refined_grp_uuid": refine_params.murfey_id,
1070+
"symmetry_refined_class_uuid": _refine_murfey_id(
1071+
refine_dir=symmetry_refine_params.refine_dir,
1072+
tag=symmetry_refine_params.tag,
1073+
app_id=_app_id(pj_id, _db),
1074+
_db=_db,
1075+
),
1076+
"symmetry_refined_grp_uuid": symmetry_refine_params.murfey_id,
10581077
"session_id": message["session_id"],
10591078
"autoproc_program_id": _app_id(
10601079
_pj_id(message["program_id"], _db, recipe="em-spa-refine"), _db
@@ -2186,7 +2205,9 @@ def _register_refinement(message: dict, _db=murfey_db, demo: bool = False):
21862205
if feedback_params.hold_refine:
21872206
# If waiting then save the message
21882207
refine_params = _db.exec(
2189-
select(db.RefineParameters).where(db.RefineParameters.pj_id == pj_id)
2208+
select(db.RefineParameters)
2209+
.where(db.RefineParameters.pj_id == pj_id)
2210+
.where(db.RefineParameters.tag == "first")
21902211
).one()
21912212
# refine_params.refine_dir is not set as it will be the same as before
21922213
refine_params.run = True
@@ -2199,24 +2220,56 @@ def _register_refinement(message: dict, _db=murfey_db, demo: bool = False):
21992220
# Send all other messages on to a container
22002221
try:
22012222
refine_params = _db.exec(
2202-
select(db.RefineParameters).where(db.RefineParameters.pj_id == pj_id)
2223+
select(db.RefineParameters)
2224+
.where(db.RefineParameters.pj_id == pj_id)
2225+
.where(db.RefineParameters.tag == "first")
2226+
).one()
2227+
symmetry_refine_params = _db.exec(
2228+
select(db.RefineParameters)
2229+
.where(db.RefineParameters.pj_id == pj_id)
2230+
.where(db.RefineParameters.tag == "symmetry")
22032231
).one()
22042232
except SQLAlchemyError:
22052233
next_job = feedback_params.next_job
22062234
refine_dir = f"{message['refine_dir']}{(feedback_params.next_job + 2):03}"
22072235
refined_grp_uuid = _murfey_id(message["program_id"], _db)[0]
22082236
refined_class_uuid = _murfey_id(message["program_id"], _db)[0]
2237+
symmetry_refined_grp_uuid = _murfey_id(message["program_id"], _db)[0]
2238+
symmetry_refined_class_uuid = _murfey_id(message["program_id"], _db)[0]
22092239

22102240
refine_params = db.RefineParameters(
2241+
tag="first",
22112242
pj_id=pj_id,
22122243
murfey_id=refined_grp_uuid,
22132244
refine_dir=refine_dir,
22142245
class3d_dir=message["class3d_dir"],
22152246
class_number=message["best_class"],
22162247
)
2248+
symmetry_refine_params = db.RefineParameters(
2249+
tag="symmetry",
2250+
pj_id=pj_id,
2251+
murfey_id=symmetry_refined_grp_uuid,
2252+
refine_dir=refine_dir,
2253+
class3d_dir=message["class3d_dir"],
2254+
class_number=message["best_class"],
2255+
)
22172256
_db.add(refine_params)
2257+
_db.add(symmetry_refine_params)
22182258
_db.commit()
2219-
_murfey_refine(refined_class_uuid, refine_dir, message["program_id"], _db)
2259+
_murfey_refine(
2260+
murfey_id=refined_class_uuid,
2261+
refine_dir=refine_dir,
2262+
tag="first",
2263+
app_id=message["program_id"],
2264+
_db=_db,
2265+
)
2266+
_murfey_refine(
2267+
murfey_id=symmetry_refined_class_uuid,
2268+
refine_dir=refine_dir,
2269+
tag="symmetry",
2270+
app_id=message["program_id"],
2271+
_db=_db,
2272+
)
22202273

22212274
if relion_options["symmetry"] == "C1":
22222275
# Extra Refine, Mask, PostProcess beyond for determined symmetry
@@ -2239,9 +2292,19 @@ def _register_refinement(message: dict, _db=murfey_db, demo: bool = False):
22392292
"nr_iter": default_spa_parameters.nr_iter_3d,
22402293
"picker_id": other_options["picker_ispyb_id"],
22412294
"refined_class_uuid": _refine_murfey_id(
2242-
refine_params.refine_dir, _app_id(pj_id, _db), _db
2295+
refine_dir=refine_params.refine_dir,
2296+
tag=refine_params.tag,
2297+
app_id=_app_id(pj_id, _db),
2298+
_db=_db,
22432299
),
22442300
"refined_grp_uuid": refine_params.murfey_id,
2301+
"symmetry_refined_class_uuid": _refine_murfey_id(
2302+
refine_dir=symmetry_refine_params.refine_dir,
2303+
tag=symmetry_refine_params.tag,
2304+
app_id=_app_id(pj_id, _db),
2305+
_db=_db,
2306+
),
2307+
"symmetry_refined_grp_uuid": symmetry_refine_params.murfey_id,
22452308
"session_id": message["session_id"],
22462309
"autoproc_program_id": _app_id(
22472310
_pj_id(message["program_id"], _db, recipe="em-spa-refine"), _db

src/murfey/util/db.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,7 @@ class Class3D(SQLModel, table=True): # type: ignore
707707

708708

709709
class RefineParameters(SQLModel, table=True): # type: ignore
710+
tag: str = Field(primary_key=True)
710711
refine_dir: str = Field(primary_key=True)
711712
pj_id: int = Field(primary_key=True, foreign_key="processingjob.id")
712713
murfey_id: int = Field(foreign_key="murfeyledger.id")
@@ -722,6 +723,7 @@ class RefineParameters(SQLModel, table=True): # type: ignore
722723

723724

724725
class Refine3D(SQLModel, table=True): # type: ignore
726+
tag: str = Field(primary_key=True)
725727
refine_dir: str = Field(primary_key=True)
726728
pj_id: int = Field(primary_key=True, foreign_key="processingjob.id")
727729
murfey_id: int = Field(foreign_key="murfeyledger.id")

0 commit comments

Comments
 (0)