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
« 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
5:copyright:
6 Jared Peacock (jpeacock@usgs.gov)
8:license: MIT
10"""
12# =============================================================================
13# Imports
14# =============================================================================
15from mt_metadata.timeseries.filters import TimeDelayFilter
17from mth5.groups.base import BaseGroup
20# =============================================================================
21# TimeDelay Group
22# =============================================================================
25class TimeDelayGroup(BaseGroup):
26 """
27 Container for time_delay type filters
29 """
31 def __init__(self, group, **kwargs):
32 super().__init__(group, **kwargs)
34 @property
35 def filter_dict(self):
36 """
38 Dictionary of available time_delay filters
40 :return: DESCRIPTION
41 :rtype: TYPE
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 }
52 return f_dict
54 def add_filter(self, name, time_delay_metadata):
55 """
56 create an HDF5 group/dataset from information given.
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
68 """
69 # create a group for the filter by the name
70 time_delay_filter_group = self.hdf5_group.create_group(name)
72 # fill in the metadata
73 time_delay_filter_group.attrs.update(time_delay_metadata)
75 return time_delay_filter_group
77 def remove_filter(self):
78 pass
80 def get_filter(self, name):
81 """
82 Get a filter from the name
84 :param name: name of the filter
85 :type name: string
87 :return: HDF5 group of the time_delay filter
88 """
89 return self.hdf5_group[name]
91 def from_object(self, time_delay_object):
92 """
93 make a filter from a :class:`mt_metadata.timeseries.filters.PoleZeroFilter`
95 :param time_delay_object: MT metadata PoleZeroFilter
96 :type time_delay_object: :class:`mt_metadata.timeseries.filters.PoleZeroFilter`
98 """
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)
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)
110 time_delay_group = self.add_filter(
111 time_delay_object.name,
112 input_dict,
113 )
114 return time_delay_group
116 def to_object(self, name):
117 """
118 make a :class:`mt_metadata.timeseries.filters.pole_zeros_filter` object
120 :return: DESCRIPTION
121 :rtype: TYPE
123 """
125 time_delay_group = self.get_filter(name)
127 time_delay_obj = TimeDelayFilter(**time_delay_group.attrs)
129 return time_delay_obj