Coverage for C: \ Users \ peaco \ OneDrive \ Documents \ GitHub \ mt_metadata \ mt_metadata \ processing \ fourier_coefficients \ fc_channel.py: 80%
25 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-10 00:11 -0800
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-10 00:11 -0800
1# =====================================================
2# Imports
3# =====================================================
4from typing import Annotated
6from pydantic import Field, field_validator
8from mt_metadata.base import MetadataBase
9from mt_metadata.common import TimePeriod
10from mt_metadata.common.units import get_unit_object
13# =====================================================
14class FCChannel(MetadataBase):
15 component: Annotated[
16 str,
17 Field(
18 default="",
19 description="Name of channel",
20 alias=None,
21 json_schema_extra={
22 "units": None,
23 "required": True,
24 "examples": ["ex"],
25 },
26 ),
27 ]
29 frequency_max: Annotated[
30 float,
31 Field(
32 default=0.0,
33 description="Highest frequency present in the sprectrogam data.",
34 alias=None,
35 json_schema_extra={
36 "units": "samples per second",
37 "required": True,
38 "examples": [77.0],
39 },
40 ),
41 ]
43 frequency_min: Annotated[
44 float,
45 Field(
46 default=0.0,
47 description="Lowest frequency present in the sprectrogam data.",
48 alias=None,
49 json_schema_extra={
50 "units": "samples per second",
51 "required": True,
52 "examples": [99.0],
53 },
54 ),
55 ]
57 sample_rate_decimation_level: Annotated[
58 float,
59 Field(
60 default=1.0,
61 description="Sample rate of the time series that was Fourier transformed to generate the FC decimation level.",
62 alias=None,
63 json_schema_extra={
64 "units": "samples per second",
65 "required": True,
66 "examples": [60],
67 },
68 ),
69 ]
71 sample_rate_window_step: Annotated[
72 float,
73 Field(
74 default=1.0,
75 description="Sample rate of the windows.",
76 alias=None,
77 json_schema_extra={
78 "units": "samples per second",
79 "required": True,
80 "examples": [4],
81 },
82 ),
83 ]
85 units: Annotated[
86 str,
87 Field(
88 default="counts",
89 description="Units of the channel",
90 alias=None,
91 json_schema_extra={
92 "units": None,
93 "required": True,
94 "examples": ["millivolts"],
95 },
96 ),
97 ]
99 time_period: Annotated[
100 TimePeriod,
101 Field(
102 default_factory=TimePeriod, # type: ignore
103 description="Time period of the channel",
104 alias=None,
105 json_schema_extra={
106 "units": None,
107 "required": True,
108 "examples": [TimePeriod(start="2020-01-01", end="2020-01-02")],
109 },
110 ),
111 ]
113 @field_validator("units", mode="before")
114 @classmethod
115 def validate_units(cls, value: str) -> str:
116 if value in [None, ""]:
117 return ""
118 try:
119 unit_object = get_unit_object(value)
120 return unit_object.name
121 except ValueError as error:
122 raise KeyError(error)
123 except KeyError as error:
124 raise KeyError(error)