Skip to content

Commit c069878

Browse files
committed
Add method to get period information for each network
1 parent 0a4ed70 commit c069878

File tree

1 file changed

+28
-6
lines changed

1 file changed

+28
-6
lines changed

src/py_eddy_tracker/observations/network.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import netCDF4
1010
from numba import njit, types as nb_types
1111
from numba.typed import List
12+
import numpy as np
1213
from numpy import (
1314
arange,
1415
array,
@@ -124,7 +125,7 @@ def __repr__(self):
124125
f"Atlas with {self.nb_network} networks ({self.nb_network / period:0.0f} networks/year),"
125126
f" {self.nb_segment} segments ({self.nb_segment / period:0.0f} segments/year), {len(self)} observations ({len(self) / period:0.0f} observations/year)",
126127
f" {m_event.size} merging ({m_event.size / period:0.0f} merging/year), {s_event.size} splitting ({s_event.size / period:0.0f} splitting/year)",
127-
f" with {(nb_by_network > big).sum()} network with more than {big} obs and the biggest have {nb_by_network.max()} observations ({nb_by_network[nb_by_network> big].sum()} observations cumulate)",
128+
f" with {(nb_by_network > big).sum()} network with more than {big} obs and the biggest have {nb_by_network.max()} observations ({nb_by_network[nb_by_network > big].sum()} observations cumulate)",
128129
f" {nb_trash} observations in trash",
129130
]
130131
return "\n".join(infos)
@@ -225,6 +226,12 @@ def network_size(self, id_networks=None):
225226
i = id_networks - self.index_network[2]
226227
return self.index_network[1][i] - self.index_network[0][i]
227228

229+
def networks_period(self):
230+
"""
231+
Return period for each network
232+
"""
233+
return get_period_with_index(self.time, *self.index_network[:2])
234+
228235
def unique_segment_to_id(self, id_unique):
229236
"""Return id network and id segment for a unique id
230237
@@ -1788,8 +1795,8 @@ def date2file(julian_day):
17881795
)
17891796
logger.info(
17901797
(
1791-
f"coherence {_t} / {range_end-1} ({(_t - range_start) / (range_end - range_start-1):.1%})"
1792-
f" : {time.time()-_timestamp:5.2f}s"
1798+
f"coherence {_t} / {range_end - 1} ({(_t - range_start) / (range_end - range_start - 1):.1%})"
1799+
f" : {time.time() - _timestamp:5.2f}s"
17931800
)
17941801
)
17951802

@@ -1865,8 +1872,8 @@ def date2file(julian_day):
18651872
)
18661873
logger.info(
18671874
(
1868-
f"coherence {_t} / {range_end-1} ({(_t - range_start) / (range_end - range_start-1):.1%})"
1869-
f" : {time.time()-_timestamp:5.2f}s"
1875+
f"coherence {_t} / {range_end - 1} ({(_t - range_start) / (range_end - range_start - 1):.1%})"
1876+
f" : {time.time() - _timestamp:5.2f}s"
18701877
)
18711878
)
18721879
return itf_final, ptf_final
@@ -2065,7 +2072,7 @@ def group_observations(self, min_overlap=0.2, minimal_area=False, **kwargs):
20652072
nb_alone, nb_obs, nb_gr = (gr == self.NOGROUP).sum(), len(gr), len(unique(gr))
20662073
logger.info(
20672074
f"{nb_alone} alone / {nb_obs} obs, {nb_gr} groups, "
2068-
f"{nb_alone *100./nb_obs:.2f} % alone, {(nb_obs - nb_alone) / (nb_gr - 1):.1f} obs/group"
2075+
f"{nb_alone * 100. / nb_obs:.2f} % alone, {(nb_obs - nb_alone) / (nb_gr - 1):.1f} obs/group"
20692076
)
20702077
return gr
20712078

@@ -2316,3 +2323,18 @@ def mask_follow_obs(m, next_obs, time, indexs, dt=3):
23162323
m[i_next] = True
23172324
i_next = next_obs[i_next]
23182325
dt_ = abs(time[i_next] - t0)
2326+
2327+
2328+
@njit(cache=True)
2329+
def get_period_with_index(t, i0, i1):
2330+
"""Return peek to peek cover by each slice define by i0 and i1
2331+
2332+
:param array t: array which contain values to estimate spread
2333+
:param array i0: index which determine start of slice
2334+
:param array i1: index which determine end of slice
2335+
:return array: Peek to peek of t
2336+
"""
2337+
periods = np.empty(i0.size, t.dtype)
2338+
for i in range(i0.size):
2339+
periods[i] = t[i0[i] : i1[i]].ptp()
2340+
return periods

0 commit comments

Comments
 (0)