Skip to content

Commit 23a5cca

Browse files
committed
Change how to normalize longitude after tracking
1 parent 977236f commit 23a5cca

File tree

3 files changed

+33
-10
lines changed

3 files changed

+33
-10
lines changed

CHANGELOG.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ and this project adheres to `Semantic Versioning <https://semver.org/spec/v2.0.0
99
[Unreleased]
1010
------------
1111

12+
Changed
13+
^^^^^^^
14+
- `TrackEddiesObservations.filled_by_interpolation` method stop to normalize longitude, to continue to have same
15+
beahviour you must call before `TrackEddiesObservations.normalize_longitude`
16+
1217
Fixed
1318
^^^^^
1419
- Use `safe_load` for yaml load

src/py_eddy_tracker/appli/eddies.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,8 +359,10 @@ def track(
359359
# We flag obs
360360
if c.virtual:
361361
long_track["virtual"][:] = long_track["time"] == 0
362+
long_track.normalize_longitude()
362363
long_track.filled_by_interpolation(long_track["virtual"] == 1)
363364
short_track["virtual"][:] = short_track["time"] == 0
365+
short_track.normalize_longitude()
364366
short_track.filled_by_interpolation(short_track["virtual"] == 1)
365367

366368
logger.info("Longer track saved have %d obs", c.nb_obs_by_tracks.max())

src/py_eddy_tracker/observations/tracking.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
radians,
2424
sin,
2525
unique,
26-
where,
2726
zeros,
2827
)
2928

@@ -167,19 +166,36 @@ def filled_by_interpolation(self, mask):
167166
or var in self.array_variables
168167
):
169168
continue
170-
# to normalize longitude before interpolation
171-
if var == "lon":
172-
lon = self.lon
173-
first = where(self.n == 0)[0]
174-
nb_obs = empty(first.shape, dtype="u4")
175-
nb_obs[:-1] = first[1:] - first[:-1]
176-
nb_obs[-1] = lon.shape[0] - first[-1]
177-
lon0 = (lon[first] - 180).repeat(nb_obs)
178-
self.lon[:] = (lon - lon0) % 360 + lon0
179169
self.obs[var][mask] = interp(
180170
index[mask], index[~mask], self.obs[var][~mask]
181171
)
182172

173+
def normalize_longitude(self):
174+
"""Normalize all longitude
175+
176+
Normalize longitude field and in the same range :
177+
- longitude_max
178+
- contour_lon_e (how to do if in raw)
179+
- contour_lon_s (how to do if in raw)
180+
"""
181+
lon0 = (self.lon[self.index_from_track] - 180).repeat(self.nb_obs_by_track)
182+
logger.debug("Normalize longitude")
183+
self.lon[:] = (self.lon - lon0) % 360 + lon0
184+
if "lon_max" in self.obs.dtype.names:
185+
logger.debug("Normalize longitude_max")
186+
self.lon_max[:] = (self.lon_max - self.lon + 180) % 360 + self.lon - 180
187+
if not self.raw_data:
188+
if "contour_lon_e" in self.obs.dtype.names:
189+
logger.debug("Normalize effective contour longitude")
190+
self.contour_lon_e[:] = (
191+
(self.contour_lon_e.T - self.lon + 180) % 360 + self.lon - 180
192+
).T
193+
if "contour_lon_s" in self.obs.dtype.names:
194+
logger.debug("Normalize speed contour longitude")
195+
self.contour_lon_s[:] = (
196+
(self.contour_lon_s.T - self.lon + 180) % 360 + self.lon - 180
197+
).T
198+
183199
def extract_longer_eddies(self, nb_min, nb_obs, compress_id=True):
184200
"""Select the trajectories longer than nb_min"""
185201
mask = nb_obs >= nb_min

0 commit comments

Comments
 (0)