From 93146b660af88506e1cbb3ed8c4e8fb71932951c Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Wed, 11 Feb 2026 11:49:36 +0000 Subject: [PATCH 1/3] Do not update scaup for atlases if two dcgs exist --- src/murfey/server/api/workflow.py | 1 + src/murfey/workflows/register_atlas_update.py | 21 +++++++++++++ .../register_data_collection_group.py | 30 +++++++++++++++---- 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/murfey/server/api/workflow.py b/src/murfey/server/api/workflow.py index 33a0b40b..762e1bc9 100644 --- a/src/murfey/server/api/workflow.py +++ b/src/murfey/server/api/workflow.py @@ -138,6 +138,7 @@ def register_dc_group( _transport_object.feedback_queue, { "register": "atlas_update", + "tag": dcg_params.tag, "atlas_id": dcg_instance.atlas_id, "atlas": dcg_params.atlas, "sample": dcg_params.sample, diff --git a/src/murfey/workflows/register_atlas_update.py b/src/murfey/workflows/register_atlas_update.py index 6ff68cc4..5e14f401 100644 --- a/src/murfey/workflows/register_atlas_update.py +++ b/src/murfey/workflows/register_atlas_update.py @@ -1,9 +1,12 @@ import logging from importlib.metadata import entry_points +from pathlib import Path +from sqlmodel import select from sqlmodel.orm.session import Session as SQLModelSession from murfey.server import _transport_object +from murfey.util.db import DataCollectionGroup logger = logging.getLogger("murfey.workflows.register_atlas_update") @@ -24,6 +27,24 @@ def run( message["atlas_pixel_size"], message["sample"], ) + + # Find out how many dcgs we have with this atlas + if ( + message.get("atlas") + and message.get("sample") + and "atlas" in Path(message.get("tag", "/")).parts + ): + dcgs_atlas = murfey_db.exec( + select(DataCollectionGroup) + .where(DataCollectionGroup.session_id == message["session_id"]) + .where(DataCollectionGroup.atlas == message["atlas"]) + .where(DataCollectionGroup.sample == message["sample"]) + ).all() + if len(dcgs_atlas) > 1: + # Skip hooks if this is an atlas and there is a processing dcg present + logger.info(f"Skipping data collection group hooks for {message['tag']}") + return {"success": True} + if dcg_hooks := entry_points(group="murfey.hooks", name="data_collection_group"): try: for hook in dcg_hooks: diff --git a/src/murfey/workflows/register_data_collection_group.py b/src/murfey/workflows/register_data_collection_group.py index a225936f..73adfeb6 100644 --- a/src/murfey/workflows/register_data_collection_group.py +++ b/src/murfey/workflows/register_data_collection_group.py @@ -1,14 +1,15 @@ import logging import time from importlib.metadata import entry_points +from pathlib import Path import ispyb.sqlalchemy._auto_db_schema as ISPyBDB from sqlmodel import select from sqlmodel.orm.session import Session as SQLModelSession -import murfey.util.db as MurfeyDB from murfey.server import _transport_object from murfey.server.ispyb import ISPyBSession, get_session_id +from murfey.util.db import DataCollectionGroup logger = logging.getLogger("murfey.workflows.register_data_collection_group") @@ -30,14 +31,14 @@ def run(message: dict, murfey_db: SQLModelSession) -> dict[str, bool]: ) if dcg_murfey := murfey_db.exec( - select(MurfeyDB.DataCollectionGroup) - .where(MurfeyDB.DataCollectionGroup.session_id == message["session_id"]) - .where(MurfeyDB.DataCollectionGroup.tag == message.get("tag")) + select(DataCollectionGroup) + .where(DataCollectionGroup.session_id == message["session_id"]) + .where(DataCollectionGroup.tag == message.get("tag")) ).all(): dcgid = dcg_murfey[0].id else: if ispyb_session_id is None: - murfey_dcg = MurfeyDB.DataCollectionGroup( + murfey_dcg = DataCollectionGroup( session_id=message["session_id"], tag=message.get("tag"), ) @@ -71,7 +72,7 @@ def run(message: dict, murfey_db: SQLModelSession) -> dict[str, bool]: "return_value", None ) - murfey_dcg = MurfeyDB.DataCollectionGroup( + murfey_dcg = DataCollectionGroup( id=dcgid, atlas_id=atlas_id, atlas=message.get("atlas", ""), @@ -84,6 +85,23 @@ def run(message: dict, murfey_db: SQLModelSession) -> dict[str, bool]: murfey_db.commit() murfey_db.close() + # Find out how many dcgs we have with this atlas + if ( + message.get("atlas") + and message.get("sample") + and "atlas" in Path(message.get("tag", "/")).parts + ): + dcgs_atlas = murfey_db.exec( + select(DataCollectionGroup) + .where(DataCollectionGroup.session_id == message["session_id"]) + .where(DataCollectionGroup.atlas == message["atlas"]) + .where(DataCollectionGroup.sample == message["sample"]) + ).all() + if len(dcgs_atlas) > 1: + # Skip hooks if this is an atlas and there is a processing dcg present + logger.info(f"Skipping data collection group hooks for {message['tag']}") + return {"success": True} + if dcg_hooks := entry_points(group="murfey.hooks", name="data_collection_group"): try: for hook in dcg_hooks: From 8d08a9279130cf76e74f8c1cc85eb46ff45f42e5 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Wed, 11 Feb 2026 13:02:58 +0000 Subject: [PATCH 2/3] update workflow test --- tests/server/api/test_workflow.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/server/api/test_workflow.py b/tests/server/api/test_workflow.py index afbbbbcd..4baf6ced 100644 --- a/tests/server/api/test_workflow.py +++ b/tests/server/api/test_workflow.py @@ -177,6 +177,7 @@ def test_register_dc_group_processing_to_atlas( "atlas_pixel_size": 1e-4, "dcgid": 1, "session_id": ExampleVisit.murfey_session_id, + "tag": "processing_tag", }, ) mock_transport.send.assert_any_call( @@ -189,6 +190,7 @@ def test_register_dc_group_processing_to_atlas( "atlas_pixel_size": 1e-4, "dcgid": 2, "session_id": ExampleVisit.murfey_session_id, + "tag": "second_processing_tag", }, ) @@ -395,6 +397,7 @@ def test_register_dc_group_new_atlas_with_searchmaps( "atlas_pixel_size": 1e-4, "dcgid": 1, "session_id": ExampleVisit.murfey_session_id, + "tag": "processing_tag", }, ) From 6e374f1a2455c275fbfc7822c826e55b915d48b4 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Wed, 11 Feb 2026 13:11:07 +0000 Subject: [PATCH 3/3] Think the wrong tag was sent --- src/murfey/server/api/workflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/murfey/server/api/workflow.py b/src/murfey/server/api/workflow.py index 762e1bc9..c180db52 100644 --- a/src/murfey/server/api/workflow.py +++ b/src/murfey/server/api/workflow.py @@ -138,7 +138,7 @@ def register_dc_group( _transport_object.feedback_queue, { "register": "atlas_update", - "tag": dcg_params.tag, + "tag": dcg_instance.tag, "atlas_id": dcg_instance.atlas_id, "atlas": dcg_params.atlas, "sample": dcg_params.sample,