Skip to content
Merged

Fixs #121

Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
adding parameters to bash tools
- expose underlying parameters to users (min_overlapp, minimal_area)
- correction of some docstrings
  • Loading branch information
ludwigVonKoopa committed Dec 8, 2021
commit bc7254e229f4770ec40c289c8c219a1157d7617f
22 changes: 20 additions & 2 deletions src/py_eddy_tracker/appli/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,16 @@ def build_network():
parser.add_argument(
"--window", "-w", type=int, help="Half time window to search eddy", default=1
)

parser.add_argument(
"--min-overlap", "-p", type=float, help="minimum overlap area to associate observations", default=0.2
)
parser.add_argument(
"--minimal-area",
action="store_true",
help="If True, use intersection/little polygon, else intersection/union",
)

parser.contour_intern_arg()

parser.memory_arg()
Expand All @@ -32,7 +42,7 @@ def build_network():
intern=args.intern,
memory=args.memory,
)
group = n.group_observations(minimal_area=True)
group = n.group_observations(min_overlap=args.min_overlap, minimal_area=args.minimal_area)
n.build_dataset(group).write_file(filename=args.out)


Expand All @@ -44,6 +54,14 @@ def divide_network():
parser.add_argument(
"--window", "-w", type=int, help="Half time window to search eddy", default=1
)
parser.add_argument(
"--min-overlap", "-p", type=float, help="minimum overlap area to associate observations", default=0.2
)
parser.add_argument(
"--minimal-area",
action="store_true",
help="If True, use intersection/little polygon, else intersection/union",
)
args = parser.parse_args()
contour_name = TrackEddiesObservations.intern(args.intern, public_label=True)
e = TrackEddiesObservations.load_file(
Expand All @@ -52,7 +70,7 @@ def divide_network():
)
n = NetworkObservations.from_split_network(
TrackEddiesObservations.load_file(args.input, raw_data=True),
e.split_network(intern=args.intern, window=args.window),
e.split_network(intern=args.intern, window=args.window, min_overlap=args.min_overlap, minimal_area=args.minimal_area),
)
n.write_file(filename=args.out)

Expand Down
20 changes: 18 additions & 2 deletions src/py_eddy_tracker/observations/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -1701,7 +1701,23 @@ def group_translator(nb, duos):
apply_replace(translate, gr_i, gr_j)
return translate

def group_observations(self, **kwargs):
def group_observations(self, min_overlap=0.2, minimal_area=False):
"""Store every interaction between identifications

Parameters
----------
minimal_area : bool, optional
If True, function will compute intersection/little polygon, else intersection/union, by default False

min_overlap : float, optional
minimum overlap area to associate observations, by default 0.2

Returns
-------
TrackEddiesObservations
netcdf with interactions
"""

results, nb_obs = list(), list()
# To display print only in INFO
display_iteration = logger.getEffectiveLevel() == logging.INFO
Expand All @@ -1715,7 +1731,7 @@ def group_observations(self, **kwargs):
for j in range(i + 1, min(self.window + i + 1, self.nb_input)):
xj, yj = self.buffer.load_contour(self.filenames[j])
ii, ij = bbox_intersection(xi, yi, xj, yj)
m = vertice_overlap(xi[ii], yi[ii], xj[ij], yj[ij], **kwargs) > 0.2
m = vertice_overlap(xi[ii], yi[ii], xj[ij], yj[ij], minimal_area=minimal_area) > min_overlap
results.append((i, j, ii[m], ij[m]))
if display_iteration:
print()
Expand Down
16 changes: 8 additions & 8 deletions src/py_eddy_tracker/observations/tracking.py
Original file line number Diff line number Diff line change
Expand Up @@ -656,12 +656,12 @@ def split_network(self, intern=True, **kwargs):

def set_tracks(self, x, y, ids, window, **kwargs):
"""
Will split one group (network) in segments
Split one group (network) in segments

:param array x: coordinates of group
:param array y: coordinates of group
:param ndarray ids: several fields like time, group, ...
:param int windows: number of days where observations could missed
:param int window: number of days where observations could missed
"""
time_index = build_index((ids["time"]).astype("i4"))
nb = x.shape[0]
Expand Down Expand Up @@ -713,8 +713,8 @@ def get_previous_obs(
time_e,
time_ref,
window,
min_overlap=0.01,
**kwargs,
min_overlap=0.2,
minimal_area=False,
):
"""Backward association of observations to the segments"""
time_cur = int_(ids["time"][i_current])
Expand All @@ -730,7 +730,7 @@ def get_previous_obs(
if len(ii) == 0:
continue
c = zeros(len(xj))
c[ij] = vertice_overlap(xi[ii], yi[ii], xj[ij], yj[ij], **kwargs)
c[ij] = vertice_overlap(xi[ii], yi[ii], xj[ij], yj[ij], minimal_area=minimal_area)
# We remove low overlap
c[c < min_overlap] = 0
# We get index of maximal overlap
Expand All @@ -753,8 +753,8 @@ def get_next_obs(
time_e,
time_ref,
window,
min_overlap=0.01,
**kwargs,
min_overlap=0.2,
minimal_area=False,
):
"""Forward association of observations to the segments"""
time_max = time_e.shape[0] - 1
Expand All @@ -773,7 +773,7 @@ def get_next_obs(
if len(ii) == 0:
continue
c = zeros(len(xj))
c[ij] = vertice_overlap(xi[ii], yi[ii], xj[ij], yj[ij], **kwargs)
c[ij] = vertice_overlap(xi[ii], yi[ii], xj[ij], yj[ij], minimal_area=minimal_area)
# We remove low overlap
c[c < min_overlap] = 0
# We get index of maximal overlap
Expand Down