Coverage for C: \ Users \ peaco \ OneDrive \ Documents \ GitHub \ mth5 \ mth5 \ groups \ filter_groups \ time_delay_filter_group.py: 89%

35 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-01-10 00:01 -0800

1# -*- coding: utf-8 -*- 

2""" 

3Created on Wed Jun 9 09:01:55 2021 

4 

5:copyright: 

6 Jared Peacock (jpeacock@usgs.gov) 

7 

8:license: MIT 

9 

10""" 

11 

12# ============================================================================= 

13# Imports 

14# ============================================================================= 

15from mt_metadata.timeseries.filters import TimeDelayFilter 

16 

17from mth5.groups.base import BaseGroup 

18 

19 

20# ============================================================================= 

21# TimeDelay Group 

22# ============================================================================= 

23 

24 

25class TimeDelayGroup(BaseGroup): 

26 """ 

27 Container for time_delay type filters 

28 

29 """ 

30 

31 def __init__(self, group, **kwargs): 

32 super().__init__(group, **kwargs) 

33 

34 @property 

35 def filter_dict(self): 

36 """ 

37 

38 Dictionary of available time_delay filters 

39 

40 :return: DESCRIPTION 

41 :rtype: TYPE 

42 

43 """ 

44 f_dict = {} 

45 for key in self.hdf5_group.keys(): 

46 time_delay_group = self.hdf5_group[key] 

47 f_dict[key] = { 

48 "type": time_delay_group.attrs["type"], 

49 "hdf5_ref": time_delay_group.ref, 

50 } 

51 

52 return f_dict 

53 

54 def add_filter(self, name, time_delay_metadata): 

55 """ 

56 create an HDF5 group/dataset from information given. 

57 

58 :param name: Nane of the filter 

59 :type name: string 

60 :param poles: poles of the filter as complex numbers 

61 :type poles: np.ndarray(dtype=complex) 

62 :param zeros: zeros of the filter as complex numbers 

63 :type zeros: np.ndarray(dtype=comples) 

64 :param time_delay_metadata: metadata dictionary see 

65 :class:`mt_metadata.timeseries.filters.PoleZeroFilter` for details on entries 

66 :type time_delay_metadata: dictionary 

67 

68 """ 

69 # create a group for the filter by the name 

70 time_delay_filter_group = self.hdf5_group.create_group(name) 

71 

72 # fill in the metadata 

73 time_delay_filter_group.attrs.update(time_delay_metadata) 

74 

75 return time_delay_filter_group 

76 

77 def remove_filter(self): 

78 pass 

79 

80 def get_filter(self, name): 

81 """ 

82 Get a filter from the name 

83 

84 :param name: name of the filter 

85 :type name: string 

86 

87 :return: HDF5 group of the time_delay filter 

88 """ 

89 return self.hdf5_group[name] 

90 

91 def from_object(self, time_delay_object): 

92 """ 

93 make a filter from a :class:`mt_metadata.timeseries.filters.PoleZeroFilter` 

94 

95 :param time_delay_object: MT metadata PoleZeroFilter 

96 :type time_delay_object: :class:`mt_metadata.timeseries.filters.PoleZeroFilter` 

97 

98 """ 

99 

100 if not isinstance(time_delay_object, TimeDelayFilter): 

101 msg = f"Filter must be a TimeDelayFilter not {type(time_delay_object)}" 

102 self.logger.error(msg) 

103 raise TypeError(msg) 

104 

105 input_dict = time_delay_object.to_dict(single=True, required=False) 

106 for k, v in input_dict.items(): 

107 if v is None: 

108 input_dict[k] = str(v) 

109 

110 time_delay_group = self.add_filter( 

111 time_delay_object.name, 

112 input_dict, 

113 ) 

114 return time_delay_group 

115 

116 def to_object(self, name): 

117 """ 

118 make a :class:`mt_metadata.timeseries.filters.pole_zeros_filter` object 

119 

120 :return: DESCRIPTION 

121 :rtype: TYPE 

122 

123 """ 

124 

125 time_delay_group = self.get_filter(name) 

126 

127 time_delay_obj = TimeDelayFilter(**time_delay_group.attrs) 

128 

129 return time_delay_obj