Skip to content

Commit 0067b6d

Browse files
committed
Appended align-and-merge job processing request to file registration functions for LIF and TIFF files
1 parent 7729927 commit 0067b6d

File tree

1 file changed

+225
-103
lines changed

1 file changed

+225
-103
lines changed

src/murfey/workflows/clem/register_preprocessing_results.py

Lines changed: 225 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from sqlalchemy.exc import NoResultFound
1818
from sqlmodel import Session, select
1919

20+
from murfey.server import _transport_object
2021
from murfey.util.config import get_machine_config
2122
from murfey.util.db import (
2223
CLEMImageMetadata,
@@ -27,6 +28,7 @@
2728
)
2829
from murfey.util.db import Session as MurfeySession
2930
from murfey.util.models import LIFPreprocessingResult, TIFFPreprocessingResult
31+
from murfey.workflows.clem.align_and_merge import submit_cluster_request
3032

3133
logger = logging.getLogger("murfey.workflows.clem.register_results")
3234

@@ -232,70 +234,130 @@ def register_lif_preprocessing_result(
232234
)
233235
return False
234236

235-
# Register items in database if not already present
237+
# Outer try-finally block for tidying up database-related section of function
236238
try:
237-
clem_img_stk: CLEMImageStack = get_db_entry(
238-
db=db,
239-
table=CLEMImageStack,
240-
session_id=session_id,
241-
file_path=result.image_stack,
242-
)
239+
# Register items in database if not already present
240+
try:
241+
clem_img_stk: CLEMImageStack = get_db_entry(
242+
db=db,
243+
table=CLEMImageStack,
244+
session_id=session_id,
245+
file_path=result.image_stack,
246+
)
243247

244-
clem_img_series: CLEMImageSeries = get_db_entry(
245-
db=db,
246-
table=CLEMImageSeries,
247-
session_id=session_id,
248-
series_name=result.series_name,
249-
)
248+
clem_img_series: CLEMImageSeries = get_db_entry(
249+
db=db,
250+
table=CLEMImageSeries,
251+
session_id=session_id,
252+
series_name=result.series_name,
253+
)
250254

251-
clem_metadata: CLEMImageMetadata = get_db_entry(
252-
db=db,
253-
table=CLEMImageMetadata,
254-
session_id=session_id,
255-
file_path=result.metadata,
256-
)
255+
clem_metadata: CLEMImageMetadata = get_db_entry(
256+
db=db,
257+
table=CLEMImageMetadata,
258+
session_id=session_id,
259+
file_path=result.metadata,
260+
)
257261

258-
clem_lif_file: CLEMLIFFile = get_db_entry(
259-
db=db,
260-
table=CLEMLIFFile,
261-
session_id=session_id,
262-
file_path=result.parent_lif,
263-
)
262+
clem_lif_file: CLEMLIFFile = get_db_entry(
263+
db=db,
264+
table=CLEMLIFFile,
265+
session_id=session_id,
266+
file_path=result.parent_lif,
267+
)
264268

265-
# Link tables to one another and populate fields
266-
clem_img_stk.associated_metadata = clem_metadata
267-
clem_img_stk.parent_lif = clem_lif_file
268-
clem_img_stk.parent_series = clem_img_series
269-
clem_img_stk.channel_name = result.channel
270-
clem_img_stk.stack_created = True
271-
db.add(clem_img_stk)
272-
db.commit()
273-
db.refresh(clem_img_stk)
269+
# Link tables to one another and populate fields
270+
clem_img_stk.associated_metadata = clem_metadata
271+
clem_img_stk.parent_lif = clem_lif_file
272+
clem_img_stk.parent_series = clem_img_series
273+
clem_img_stk.channel_name = result.channel
274+
clem_img_stk.stack_created = True
275+
db.add(clem_img_stk)
276+
db.commit()
277+
db.refresh(clem_img_stk)
274278

275-
clem_img_series.associated_metadata = clem_metadata
276-
clem_img_series.parent_lif = clem_lif_file
277-
clem_img_series.number_of_members = result.number_of_members
278-
db.add(clem_img_series)
279-
db.commit()
280-
db.refresh(clem_img_series)
279+
clem_img_series.associated_metadata = clem_metadata
280+
clem_img_series.parent_lif = clem_lif_file
281+
clem_img_series.number_of_members = result.number_of_members
282+
db.add(clem_img_series)
283+
db.commit()
284+
db.refresh(clem_img_series)
281285

282-
clem_metadata.parent_lif = clem_lif_file
283-
db.add(clem_metadata)
284-
db.commit()
285-
db.refresh(clem_metadata)
286+
clem_metadata.parent_lif = clem_lif_file
287+
db.add(clem_metadata)
288+
db.commit()
289+
db.refresh(clem_metadata)
286290

291+
logger.info(
292+
f"LIF preprocessing results registered for {result.series_name!r} "
293+
f"{result.channel!r} image stack"
294+
)
295+
296+
except Exception:
297+
logger.error(traceback.format_exc())
298+
logger.error(
299+
"Exception encountered when registering LIF preprocessing result for "
300+
f"{result.series_name!r} {result.channel!r} image stack"
301+
)
302+
return False
303+
304+
# Load all image stacks associated with current series from database
305+
try:
306+
image_stacks = [
307+
Path(row)
308+
for row in db.exec(
309+
select(CLEMImageStack.file_path).where(
310+
CLEMImageStack.series_id == clem_img_series.id
311+
)
312+
).all()
313+
]
314+
logger.debug(
315+
f"Found the following images: {[str(file) for file in image_stacks]}"
316+
)
317+
instrument_name = (
318+
db.exec(select(MurfeySession).where(MurfeySession.id == session_id))
319+
.one()
320+
.instrument_name
321+
)
322+
except Exception:
323+
logger.error(traceback.format_exc())
324+
logger.error(
325+
f"Error requesting data from database for {result.series_name!r} series"
326+
)
327+
return False
328+
329+
# Check if all image stacks for this series are accounted for
330+
if not len(image_stacks) == clem_img_series.number_of_members:
331+
logger.info(
332+
f"Members of the series {result.series_name!r} are still missing; "
333+
"the next stage of processing will not be triggered yet"
334+
)
335+
return True
336+
337+
# Request for next stage of processing if all members are present
338+
cluster_response = submit_cluster_request(
339+
session_id=session_id,
340+
instrument_name=instrument_name,
341+
series_name=result.series_name,
342+
images=image_stacks,
343+
metadata=result.metadata,
344+
align_self=None,
345+
flatten="mean",
346+
align_across=None,
347+
messenger=_transport_object,
348+
)
349+
if cluster_response is False:
350+
logger.error(
351+
"Error requesting align-and-merge processing job for "
352+
f"{result.series_name!r} series"
353+
)
354+
return False
287355
logger.info(
288-
f"LIF preprocessing results registered for {result.series_name!r} {result.channel!r} image stack"
356+
"Successfully requested align-and-merge processing job for "
357+
f"{result.series_name!r} series"
289358
)
290359
return True
291360

292-
except Exception:
293-
logger.error(traceback.format_exc())
294-
logger.error(
295-
f"Exception encountered when registering LIF preprocessing result for {result.series_name!r} {result.channel!r} image stack"
296-
)
297-
return False
298-
299361
finally:
300362
db.close()
301363

@@ -330,68 +392,128 @@ def register_tiff_preprocessing_result(
330392
)
331393
return False
332394

333-
# Register items in database if not already present
395+
# Outer try-finally block for tidying up database-related section of function
334396
try:
335-
clem_img_stk: CLEMImageStack = get_db_entry(
336-
db=db,
337-
table=CLEMImageStack,
338-
session_id=session_id,
339-
file_path=result.image_stack,
340-
)
341-
clem_img_series: CLEMImageSeries = get_db_entry(
342-
db=db,
343-
table=CLEMImageSeries,
344-
session_id=session_id,
345-
series_name=result.series_name,
346-
)
347-
clem_metadata: CLEMImageMetadata = get_db_entry(
348-
db=db,
349-
table=CLEMImageMetadata,
350-
session_id=session_id,
351-
file_path=result.metadata,
352-
)
353-
354-
# Link tables to one another and populate fields
355-
# Register TIFF files and populate them iteratively first
356-
for file in result.parent_tiffs:
357-
clem_tiff_file: CLEMTIFFFile = get_db_entry(
397+
# Register items in database if not already present
398+
try:
399+
clem_img_stk: CLEMImageStack = get_db_entry(
400+
db=db,
401+
table=CLEMImageStack,
402+
session_id=session_id,
403+
file_path=result.image_stack,
404+
)
405+
clem_img_series: CLEMImageSeries = get_db_entry(
406+
db=db,
407+
table=CLEMImageSeries,
408+
session_id=session_id,
409+
series_name=result.series_name,
410+
)
411+
clem_metadata: CLEMImageMetadata = get_db_entry(
358412
db=db,
359-
table=CLEMTIFFFile,
413+
table=CLEMImageMetadata,
360414
session_id=session_id,
361-
file_path=file,
415+
file_path=result.metadata,
362416
)
363-
clem_tiff_file.associated_metadata = clem_metadata
364-
clem_tiff_file.child_series = clem_img_series
365-
clem_tiff_file.child_stack = clem_img_stk
366-
db.add(clem_tiff_file)
417+
418+
# Link tables to one another and populate fields
419+
# Register TIFF files and populate them iteratively first
420+
for file in result.parent_tiffs:
421+
clem_tiff_file: CLEMTIFFFile = get_db_entry(
422+
db=db,
423+
table=CLEMTIFFFile,
424+
session_id=session_id,
425+
file_path=file,
426+
)
427+
clem_tiff_file.associated_metadata = clem_metadata
428+
clem_tiff_file.child_series = clem_img_series
429+
clem_tiff_file.child_stack = clem_img_stk
430+
db.add(clem_tiff_file)
431+
db.commit()
432+
db.refresh(clem_tiff_file)
433+
434+
clem_img_stk.associated_metadata = clem_metadata
435+
clem_img_stk.parent_series = clem_img_series
436+
clem_img_stk.channel_name = result.channel
437+
clem_img_stk.stack_created = True
438+
db.add(clem_img_stk)
367439
db.commit()
368-
db.refresh(clem_tiff_file)
440+
db.refresh(clem_img_stk)
369441

370-
clem_img_stk.associated_metadata = clem_metadata
371-
clem_img_stk.parent_series = clem_img_series
372-
clem_img_stk.channel_name = result.channel
373-
clem_img_stk.stack_created = True
374-
db.add(clem_img_stk)
375-
db.commit()
376-
db.refresh(clem_img_stk)
442+
clem_img_series.associated_metadata = clem_metadata
443+
clem_img_series.number_of_members = result.number_of_members
444+
db.add(clem_img_series)
445+
db.commit()
446+
db.refresh(clem_img_series)
377447

378-
clem_img_series.associated_metadata = clem_metadata
379-
clem_img_series.number_of_members = result.number_of_members
380-
db.add(clem_img_series)
381-
db.commit()
382-
db.refresh(clem_img_series)
448+
logger.info(
449+
f"TIFF preprocessing results registered for {result.series_name!r} "
450+
f"{result.channel!r} image stack"
451+
)
383452

453+
except Exception:
454+
logger.error(traceback.format_exc())
455+
logger.error(
456+
"Exception encountered when registering TIFF preprocessing result for "
457+
f"{result.series_name!r} {result.channel!r} image stack"
458+
)
459+
return False
460+
461+
# Load all image stacks associated with current series from database
462+
try:
463+
image_stacks = [
464+
Path(row)
465+
for row in db.exec(
466+
select(CLEMImageStack.file_path).where(
467+
CLEMImageStack.series_id == clem_img_series.id
468+
)
469+
).all()
470+
]
471+
logger.debug(
472+
f"Found the following images: {[str(file) for file in image_stacks]}"
473+
)
474+
instrument_name = (
475+
db.exec(select(MurfeySession).where(MurfeySession.id == session_id))
476+
.one()
477+
.instrument_name
478+
)
479+
except Exception:
480+
logger.error(traceback.format_exc())
481+
logger.error(
482+
f"Error requesting data from database for {result.series_name!r} series"
483+
)
484+
return False
485+
486+
# Check if all image stacks for this series are accounted for
487+
if not len(image_stacks) == clem_img_series.number_of_members:
488+
logger.info(
489+
f"Members of the series {result.series_name!r} are still missing; "
490+
"the next stage of processing will not be triggered yet"
491+
)
492+
return True
493+
494+
# Request for next stage of processing if all members are present
495+
cluster_response = submit_cluster_request(
496+
session_id=session_id,
497+
instrument_name=instrument_name,
498+
series_name=result.series_name,
499+
images=image_stacks,
500+
metadata=result.metadata,
501+
align_self=None,
502+
flatten="mean",
503+
align_across=None,
504+
messenger=_transport_object,
505+
)
506+
if cluster_response is False:
507+
logger.error(
508+
"Error requesting align-and-merge processing job for "
509+
f"{result.series_name!r} series"
510+
)
511+
return False
384512
logger.info(
385-
f"TIFF preprocessing results registered for {result.series_name!r} {result.channel!r} image stack"
513+
"Successfully requested align-and-merge processing job for "
514+
f"{result.series_name!r} series"
386515
)
387516
return True
388517

389-
except Exception:
390-
logger.error(traceback.format_exc())
391-
logger.error(
392-
f"Exception encountered when registering TIFF preprocessing result for {result.series_name!r} {result.channel!r} image stack"
393-
)
394-
return False
395-
396518
finally:
397519
db.close()

0 commit comments

Comments
 (0)