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

1# ruff: noqa: ARG001 

2"""Instrument profile for FEI Titan STEM (643 microscope).""" 

3 

4from __future__ import annotations 

5 

6import logging 

7from typing import TYPE_CHECKING, Any 

8 

9from nexusLIMS.extractors.base import InstrumentProfile 

10from nexusLIMS.extractors.profiles import get_profile_registry 

11 

12if TYPE_CHECKING: 

13 from nexusLIMS.extractors.base import ExtractionContext 

14 

15_logger = logging.getLogger(__name__) 

16 

17 

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. 

24 

25 The 643 Titan STEM has known issues with detector, operator, and specimen 

26 metadata accuracy. 

27 

28 Parameters 

29 ---------- 

30 metadata 

31 Metadata dictionary with 'nx_meta' key 

32 context 

33 Extraction context (unused but required by profile signature) 

34 

35 Returns 

36 ------- 

37 dict 

38 Modified metadata dictionary with warnings added 

39 """ 

40 warnings = metadata["nx_meta"].get("warnings", []) 

41 

42 warning_fields = ["Detector", "Operator", "Specimen"] 

43 for field in warning_fields: 

44 if field in metadata["nx_meta"]: 

45 warnings.append([field]) 

46 

47 if warnings: 

48 metadata["nx_meta"]["warnings"] = warnings 

49 

50 return metadata 

51 

52 

53def detect_eftem_diffraction( 

54 metadata: dict[str, Any], 

55 context: ExtractionContext, 

56) -> dict[str, Any]: 

57 """ 

58 Detect and flag EFTEM diffraction patterns. 

59 

60 When Imaging Mode is "EFTEM DIFFRACTION", change DatasetType to Diffraction. 

61 

62 Parameters 

63 ---------- 

64 metadata 

65 Metadata dictionary with 'nx_meta' key 

66 context 

67 Extraction context (unused but required by profile signature) 

68 

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", "") 

75 

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" 

83 

84 return metadata 

85 

86 

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""" 

98 

99get_profile_registry().register(fei_titan_stem_643_profile) 

100 

101_logger.debug("Registered FEI Titan STEM (643) instrument profile")