Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ API reference
py_eddy_tracker.observations.network
py_eddy_tracker.observations.observation
py_eddy_tracker.observations.tracking
py_eddy_tracker.observations.groups
py_eddy_tracker.eddy_feature
py_eddy_tracker.generic
py_eddy_tracker.gui
Expand Down
31 changes: 26 additions & 5 deletions src/py_eddy_tracker/observations/groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ def filled_by_interpolation(self, mask):
)

def insert_virtual(self):
"""insert virtual observation on segments where observations were not found"""

dt_theorical = median(self.time[1:] - self.time[:-1])
indices = self.get_missing_indices(dt_theorical)
Expand All @@ -118,14 +119,34 @@ def insert_virtual(self):
mask = zeros(size_obs_corrected, dtype=bool)
mask[indices_corrected] = 1

# time2 = np.empty(n.time.size+indices.size, dtype=n.time.dtype)
# time2[mask] = -1
# time2[~mask] = n.time

# new_TEO = TrackEddiesObservations.new_like(n, size_obs_corrected)
new_TEO = self.new_like(self, size_obs_corrected)
new_TEO.obs[~mask] = self.obs
new_TEO.filled_by_interpolation(mask)
new_TEO.virtual[:] = mask
new_TEO.fix_next_previous_obs()
return new_TEO

def keep_tracks_by_date(self, date, nb_days):
"""
find tracks which exist at date `date` and lasted at least `nb_days` after.

if nb_days is negative, it search a tracks which exist at the date,
but existed at least `nb_days` before the date


:param int,float date : date where the tracks must exist
:param int,float nb_days: number of time where the tracks must exist. Can be negative

"""

time = self.time

mask = zeros(time.shape, dtype=bool)

for i, b0, b1 in self.iter_on(self.tracks):
_time = time[i]

if date in _time and (date + nb_days) in _time:
mask[i] = True

return self.extract_with_mask(mask)
23 changes: 16 additions & 7 deletions src/py_eddy_tracker/observations/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -838,7 +838,7 @@ def merging_event(self, triplet=False, only_index=False):
else:
return self.extract_event(idx_m1)

def spliting_event(self, triplet=False):
def spliting_event(self, triplet=False, only_index=False):
"""Return observation before a splitting event.

If `triplet=True` return the eddy before a splitting event, the eddy after the splitting event,
Expand All @@ -859,14 +859,23 @@ def spliting_event(self, triplet=False):
idx_s1_start.append(i.start)
idx_s1.append(next_obs[i_p])
idx_s0.append(i_p)

if triplet:
return (
self.extract_event(list(idx_s0)),
self.extract_event(list(idx_s1)),
self.extract_event(list(idx_s1_start)),
)
if only_index:
return (idx_s0, idx_s1, idx_s1_start)
else:
return (
self.extract_event(list(idx_s0)),
self.extract_event(list(idx_s1)),
self.extract_event(list(idx_s1_start)),
)

else:
return self.extract_event(list(set(idx_s0)))
idx_s0 = list(set(idx_s0))
if only_index:
return idx_s0
else:
return self.extract_event(idx_s0)

def dissociate_network(self):
"""
Expand Down