Coverage for nexusLIMS/extractors/plugins/profiles/fei_titan_stem_643.py: 100%
26 statements
« prev ^ index » next coverage.py v7.11.3, created at 2026-03-24 05:23 +0000
« prev ^ index » next coverage.py v7.11.3, created at 2026-03-24 05:23 +0000
1# ruff: noqa: ARG001
2"""Instrument profile for FEI Titan STEM (643 microscope)."""
4from __future__ import annotations
6import logging
7from typing import TYPE_CHECKING, Any
9from nexusLIMS.extractors.base import InstrumentProfile
10from nexusLIMS.extractors.profiles import get_profile_registry
12if TYPE_CHECKING:
13 from nexusLIMS.extractors.base import ExtractionContext
15_logger = logging.getLogger(__name__)
18def add_metadata_warnings(
19 metadata: dict[str, Any],
20 context: ExtractionContext,
21) -> dict[str, Any]:
22 """
23 Add warnings for potentially inaccurate metadata fields.
25 The 643 Titan STEM has known issues with detector, operator, and specimen
26 metadata accuracy.
28 Parameters
29 ----------
30 metadata
31 Metadata dictionary with 'nx_meta' key
32 context
33 Extraction context (unused but required by profile signature)
35 Returns
36 -------
37 dict
38 Modified metadata dictionary with warnings added
39 """
40 warnings = metadata["nx_meta"].get("warnings", [])
42 warning_fields = ["Detector", "Operator", "Specimen"]
43 for field in warning_fields:
44 if field in metadata["nx_meta"]:
45 warnings.append([field])
47 if warnings:
48 metadata["nx_meta"]["warnings"] = warnings
50 return metadata
53def detect_eftem_diffraction(
54 metadata: dict[str, Any],
55 context: ExtractionContext,
56) -> dict[str, Any]:
57 """
58 Detect and flag EFTEM diffraction patterns.
60 When Imaging Mode is "EFTEM DIFFRACTION", change DatasetType to Diffraction.
62 Parameters
63 ----------
64 metadata
65 Metadata dictionary with 'nx_meta' key
66 context
67 Extraction context (unused but required by profile signature)
69 Returns
70 -------
71 dict
72 Modified metadata dictionary with updated dataset type if applicable
73 """
74 imaging_mode = metadata["nx_meta"].get("Imaging Mode", "")
76 if "EFTEM DIFFRACTION" in imaging_mode.upper():
77 _logger.info(
78 'Detected file as Diffraction type based on "Imaging Mode" == "%s"',
79 imaging_mode,
80 )
81 metadata["nx_meta"]["DatasetType"] = "Diffraction"
82 metadata["nx_meta"]["Data Type"] = "TEM_EFTEM_Diffraction"
84 return metadata
87# Register the profile
88fei_titan_stem_643_profile = InstrumentProfile(
89 instrument_id="FEI-Titan-STEM",
90 parsers={
91 "metadata_warnings": add_metadata_warnings,
92 "eftem_diffraction": detect_eftem_diffraction,
93 },
94 transformations={},
95 extension_fields={},
96)
97"""An instrument profile for the FEI Titan STEM"""
99get_profile_registry().register(fei_titan_stem_643_profile)
101_logger.debug("Registered FEI Titan STEM (643) instrument profile")