Skip to content

Commit 2672ab9

Browse files
correction bug when zarr dataset has same dimension observation and contours
- correction coherence forward & backward, when time needed is shorted than time available - bug when extracting zarr network which have same number of observation and number of contour
1 parent c434372 commit 2672ab9

File tree

2 files changed

+32
-22
lines changed

2 files changed

+32
-22
lines changed

src/py_eddy_tracker/observations/network.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1495,7 +1495,8 @@ def date2file(julian_day):
14951495

14961496
t_start, t_end = int(self.period[0]), int(self.period[1])
14971497

1498-
dates = arange(t_start, t_start + n_days + 1)
1498+
# dates = arange(t_start, t_start + n_days + 1)
1499+
dates = arange(t_start, min(t_start + n_days + 1, t_end + 1))
14991500
first_files = [date_function(x) for x in dates]
15001501

15011502
c = GridCollection.from_netcdf_list(first_files, dates, **uv_params)
@@ -1575,7 +1576,8 @@ def date2file(julian_day):
15751576
# if end is not None and end < t_end:
15761577
# t_end = end
15771578

1578-
dates = arange(t_start, t_start + n_days + 1)
1579+
dates = arange(t_start, min(t_start + n_days + 1, t_end + 1))
1580+
# print("dates = ", dates)
15791581
first_files = [date_function(x) for x in dates]
15801582

15811583
c = GridCollection.from_netcdf_list(first_files, dates, **uv_params)

src/py_eddy_tracker/observations/observation.py

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -687,10 +687,15 @@ def zarr_dimension(filename):
687687
h = filename
688688
else:
689689
h = zarr.open(filename)
690+
690691
dims = list()
691692
for varname in h:
692-
dims.extend(list(getattr(h, varname).shape))
693-
return set(dims)
693+
shape = getattr(h, varname).shape
694+
if len(shape) > len(dims):
695+
dims = shape
696+
return dims
697+
# dims.extend(list(getattr(h, varname).shape))
698+
# return set(dims)
694699

695700
@classmethod
696701
def load_file(cls, filename, **kwargs):
@@ -754,7 +759,6 @@ def load_from_zarr(
754759
:return type: class
755760
"""
756761
# FIXME
757-
array_dim = -1
758762
if isinstance(filename, zarr.storage.MutableMapping):
759763
h_zarr = filename
760764
else:
@@ -763,11 +767,10 @@ def load_from_zarr(
763767
h_zarr = zarr.open(filename)
764768
var_list = cls.build_var_list(list(h_zarr.keys()), remove_vars, include_vars)
765769

766-
nb_obs = getattr(h_zarr, var_list[0]).shape[0]
767-
dims = list(cls.zarr_dimension(filename))
768-
if len(dims) == 2 and nb_obs in dims:
769-
# FIXME must be investigated, in zarr no dimensions name (or could be add in attr)
770-
array_dim = dims[1] if nb_obs == dims[0] else dims[0]
770+
# FIXME must be investigated, in zarr no dimensions name (or could be add in attr)
771+
# so we assume first dimension is number of observation, second is number of contours
772+
nb_obs, track_array_variables = getattr(h_zarr, var_list[0]).shape
773+
771774
if indexs is not None and "obs" in indexs:
772775
sl = indexs["obs"]
773776
sl = slice(sl.start, min(sl.stop, nb_obs))
@@ -781,28 +784,31 @@ def load_from_zarr(
781784
logger.debug("%d observations will be load", nb_obs)
782785
kwargs = dict()
783786

784-
if array_dim in dims:
785-
kwargs["track_array_variables"] = array_dim
786-
kwargs["array_variables"] = list()
787-
for variable in var_list:
788-
if array_dim in h_zarr[variable].shape:
789-
var_inv = VAR_DESCR_inv[variable]
790-
kwargs["array_variables"].append(var_inv)
791-
array_variables = kwargs.get("array_variables", list())
792-
kwargs["track_extra_variables"] = []
787+
kwargs["track_array_variables"] = h_zarr.attrs.get("track_array_variables", track_array_variables)
788+
789+
array_variables = list()
790+
for variable in var_list:
791+
if len(h_zarr[variable].shape) > 1:
792+
var_inv = VAR_DESCR_inv[variable]
793+
array_variables.append(var_inv)
794+
kwargs["array_variables"] = array_variables
795+
track_extra_variables = []
796+
793797
for variable in var_list:
794798
var_inv = VAR_DESCR_inv[variable]
795799
if var_inv not in cls.ELEMENTS and var_inv not in array_variables:
796-
kwargs["track_extra_variables"].append(var_inv)
800+
track_extra_variables.append(var_inv)
801+
kwargs["track_extra_variables"] = track_extra_variables
797802
kwargs["raw_data"] = raw_data
798803
kwargs["only_variables"] = (
799804
None if include_vars is None else [VAR_DESCR_inv[i] for i in include_vars]
800805
)
801806
kwargs.update(class_kwargs)
802807
eddies = cls(size=nb_obs, **kwargs)
803-
for variable in var_list:
808+
809+
for i_var, variable in enumerate(var_list):
804810
var_inv = VAR_DESCR_inv[variable]
805-
logger.debug("%s will be loaded", variable)
811+
logger.debug("%s will be loaded (%d/%d)", variable, i_var, len(var_list))
806812
# find unit factor
807813
input_unit = h_zarr[variable].attrs.get("unit", None)
808814
if input_unit is None:
@@ -858,6 +864,7 @@ def copy_data_to_zarr(
858864
i_start = 0
859865
if i_stop is None:
860866
i_stop = handler_zarr.shape[0]
867+
861868
for i in range(i_start, i_stop, buffer_size):
862869
sl_in = slice(i, min(i + buffer_size, i_stop))
863870
data = handler_zarr[sl_in]
@@ -868,6 +875,7 @@ def copy_data_to_zarr(
868875
data -= add_offset
869876
if scale_factor is not None:
870877
data /= scale_factor
878+
871879
sl_out = slice(i - i_start, i - i_start + buffer_size)
872880
handler_eddies[sl_out] = data
873881

0 commit comments

Comments
 (0)