Skip to content

Commit edba7eb

Browse files
committed
Added logic to create data collection group and atlas table entries for CLEM workflow
1 parent 09190be commit edba7eb

File tree

1 file changed

+118
-11
lines changed

1 file changed

+118
-11
lines changed

src/murfey/workflows/clem/register_preprocessing_results.py

Lines changed: 118 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import logging
1212
import re
1313
import traceback
14+
from importlib.metadata import entry_points
1415
from pathlib import Path
1516
from typing import Literal, Optional
1617

@@ -164,10 +165,17 @@ def run(message: dict, murfey_db: Session, demo: bool = False) -> dict[str, bool
164165
murfey_db.add_all(clem_tiff_files)
165166
murfey_db.commit()
166167

168+
# Add data type and image search string
169+
clem_img_series.search_string = str(output_file.parent / "*tiff")
170+
clem_img_series.data_type = (
171+
"atlas" if "Overview_" in result.series_name else "grid_square"
172+
)
173+
murfey_db.add(clem_img_series)
174+
murfey_db.commit()
175+
167176
logger.info(
168177
f"CLEM preprocessing results registered for {result.series_name!r} "
169178
)
170-
171179
except Exception:
172180
logger.error(
173181
"Exception encountered when registering CLEM preprocessing result for "
@@ -176,21 +184,120 @@ def run(message: dict, murfey_db: Session, demo: bool = False) -> dict[str, bool
176184
)
177185
return {"success": False, "requeue": False}
178186

179-
# Load instrument name
180187
try:
181-
instrument_name = (
182-
murfey_db.exec(
183-
select(MurfeyDB.Session).where(MurfeyDB.Session.id == session_id)
184-
)
185-
.one()
186-
.instrument_name
188+
# Load current session from database
189+
murfey_session = murfey_db.exec(
190+
select(MurfeyDB.Session).where(MurfeyDB.Session.id == session_id)
191+
).one()
192+
193+
# Determine variables to register data collection group and atlas with
194+
visit_name = murfey_session.visit
195+
proposal_code = "".join(
196+
char for char in visit_name.split("-")[0] if char.isalpha()
187197
)
198+
proposal_number = "".join(
199+
char for char in visit_name.split("-")[0] if char.isdigit()
200+
)
201+
visit_number = visit_name.split("-")[-1]
202+
203+
# Generate name/tag for data colleciton group based on series name
204+
dcg_name = result.series_name.split("--")[0]
205+
if result.series_name.split("--")[1].isdigit():
206+
dcg_name += f"--{result.series_name.split('--')[1]}"
207+
208+
# Determine values for atlas
209+
if "Overview_" in result.series_name: # These are atlas datasets
210+
atlas_name = str(output_file.parent / "*.tiff")
211+
atlas_pixel_size = result.pixel_size
212+
else:
213+
atlas_name = ""
214+
atlas_pixel_size = 0.0
215+
216+
registration_result: dict[str, bool]
217+
if dcg_search := murfey_db.exec(
218+
select(MurfeyDB.DataCollectionGroup)
219+
.where(MurfeyDB.DataCollectionGroup.session_id == session_id)
220+
.where(MurfeyDB.DataCollectionGroup.tag == dcg_name)
221+
).all():
222+
# Update atlas if registering atlas dataset
223+
# and data collection group already exists
224+
dcg_entry = dcg_search[0]
225+
if "Overview_" in result.series_name:
226+
atlas_message = {
227+
"session_id": session_id,
228+
"dcgid": dcg_entry.id,
229+
"atlas_id": dcg_entry.atlas_id,
230+
"atlas": atlas_name,
231+
"atlas_pixel_size": atlas_pixel_size,
232+
"sample": dcg_entry.sample,
233+
}
234+
if entry_point_result := entry_points(
235+
group="murfey.workflows", name="atlas_update"
236+
):
237+
(workflow,) = entry_point_result
238+
registration_result = workflow.load()(
239+
message=atlas_message,
240+
murfey_db=murfey_db,
241+
)
242+
else:
243+
logger.warning("No workflow found for 'atlas_update'")
244+
registration_result = {"success": False, "requeue": False}
245+
else:
246+
registration_result = {"success": True}
247+
else:
248+
# Register data collection group
249+
dcg_message = {
250+
"microscope": murfey_session.instrument_name,
251+
"proposal_code": proposal_code,
252+
"proposal_number": proposal_number,
253+
"visit_number": visit_number,
254+
"session_id": session_id,
255+
"tag": dcg_name,
256+
"experiment_type": "experiment",
257+
"experiment_type_id": None,
258+
"atlas": atlas_name,
259+
"atlas_pixel_size": atlas_pixel_size,
260+
"sample": None,
261+
}
262+
if entry_point_result := entry_points(
263+
group="murfey.workflows", name="data_collection_group"
264+
):
265+
(workflow,) = entry_point_result
266+
# Register grid square
267+
registration_result = workflow.load()(
268+
message=dcg_message,
269+
murfey_db=murfey_db,
270+
)
271+
else:
272+
logger.warning("No workflow found for 'data_collection_group'")
273+
registration_result = {"success": False, "requeue": False}
274+
if registration_result.get("success", False):
275+
logger.info(
276+
"Successfully registered data collection group for CLEM workflow "
277+
f"using{result.series_name!r}"
278+
)
279+
else:
280+
logger.warning(
281+
"Failed to register data collection group for CLEM workflow "
282+
f"using {result.series_name!r}"
283+
)
284+
285+
# Store data collection group id in CLEM image series table
286+
dcg_entry = murfey_db.exec(
287+
select(MurfeyDB.DataCollectionGroup)
288+
.where(MurfeyDB.DataCollectionGroup.session_id == session_id)
289+
.where(MurfeyDB.DataCollectionGroup.tag == dcg_name)
290+
).one()
291+
clem_img_series.dcg_id = dcg_entry.id
292+
clem_img_series.dcg_name = dcg_entry.tag
293+
murfey_db.add(clem_img_series)
294+
murfey_db.commit()
188295
except Exception:
189296
logger.error(
190-
f"Error requesting data from database for {result.series_name!r} series: \n"
297+
"Exception encountered when registering data collection group for CLEM workflow "
298+
f"using {result.series_name!r}: \n"
191299
f"{traceback.format_exc()}"
192300
)
193-
return {"success": False, "requeue": False}
194301

195302
# Construct list of files to use for image alignment and merging steps
196303
image_combos_to_process = [
@@ -218,7 +325,7 @@ def run(message: dict, murfey_db: Session, demo: bool = False) -> dict[str, bool
218325
try:
219326
submit_cluster_request(
220327
session_id=session_id,
221-
instrument_name=instrument_name,
328+
instrument_name=murfey_session.instrument_name,
222329
series_name=result.series_name,
223330
images=image_combo,
224331
metadata=result.metadata,

0 commit comments

Comments
 (0)