|
5 | 5 | import numpy as np
|
6 | 6 | import pandas as pd
|
7 | 7 | from mikecore.DfsuFile import DfsuFile, DfsuFileType
|
| 8 | +from mikecore.DfsFileFactory import DfsFileFactory |
8 | 9 | from tqdm import trange
|
9 | 10 |
|
10 | 11 | from ..dataset import DataArray, Dataset
|
11 |
| -from ..eum import ItemInfo |
| 12 | +from ..eum import ItemInfo, EUMUnit |
12 | 13 | from ..dfs._dfs import _get_item_info, _valid_item_numbers, _valid_timesteps
|
13 | 14 | from .._spectral import calc_m0_from_spectrum
|
14 | 15 | from ._dfsu import (
|
@@ -134,8 +135,12 @@ def _read_geometry(
|
134 | 135 | dfs = DfsuFile.Open(filename)
|
135 | 136 | dfsu_type = DfsuFileType(dfs.DfsuFileType)
|
136 | 137 |
|
137 |
| - dir = dfs.Directions |
138 |
| - directions = None if dir is None else dir * (180 / np.pi) |
| 138 | + directions = dfs.Directions |
| 139 | + if directions is not None: |
| 140 | + dir_unit = DfsuSpectral._get_direction_unit(filename) |
| 141 | + dir_conversion = 180.0 / np.pi if dir_unit == int(EUMUnit.radian) else 1.0 |
| 142 | + directions = directions * dir_conversion |
| 143 | + |
139 | 144 | frequencies = dfs.Frequencies
|
140 | 145 |
|
141 | 146 | # geometry
|
@@ -177,6 +182,19 @@ def _read_geometry(
|
177 | 182 | dfs.Close()
|
178 | 183 | return geometry
|
179 | 184 |
|
| 185 | + @staticmethod |
| 186 | + def _get_direction_unit(filename: str) -> int: |
| 187 | + """Determine if the directional axis is in degrees or radians""" |
| 188 | + source = DfsFileFactory.DfsGenericOpen(filename) |
| 189 | + try: |
| 190 | + for static_item in iter(source.ReadStaticItemNext, None): |
| 191 | + if static_item.Name == "Direction": |
| 192 | + return static_item.Quantity.Unit.value |
| 193 | + finally: |
| 194 | + source.Close() |
| 195 | + |
| 196 | + raise ValueError("Direction static item not found in the file.") |
| 197 | + |
180 | 198 | @property
|
181 | 199 | def n_frequencies(self) -> int | None:
|
182 | 200 | """Number of frequencies"""
|
|
0 commit comments