@@ -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
0 commit comments