Skip to content

Commit 8a5ceb9

Browse files
committed
_get_direction_unit and convert right way
1 parent 8a75443 commit 8a5ceb9

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

mikeio/dfsu/_spectral.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
import numpy as np
66
import pandas as pd
77
from mikecore.DfsuFile import DfsuFile, DfsuFileType
8+
from mikecore.DfsFileFactory import DfsFileFactory
89
from tqdm import trange
910

1011
from ..dataset import DataArray, Dataset
11-
from ..eum import ItemInfo
12+
from ..eum import ItemInfo, EUMUnit
1213
from ..dfs._dfs import _get_item_info, _valid_item_numbers, _valid_timesteps
1314
from .._spectral import calc_m0_from_spectrum
1415
from ._dfsu import (
@@ -134,8 +135,12 @@ def _read_geometry(
134135
dfs = DfsuFile.Open(filename)
135136
dfsu_type = DfsuFileType(dfs.DfsuFileType)
136137

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+
139144
frequencies = dfs.Frequencies
140145

141146
# geometry
@@ -177,6 +182,19 @@ def _read_geometry(
177182
dfs.Close()
178183
return geometry
179184

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+
180198
@property
181199
def n_frequencies(self) -> int | None:
182200
"""Number of frequencies"""

0 commit comments

Comments
 (0)