|
9 | 9 | import netCDF4
|
10 | 10 | from numba import njit, types as nb_types
|
11 | 11 | from numba.typed import List
|
| 12 | +import numpy as np |
12 | 13 | from numpy import (
|
13 | 14 | arange,
|
14 | 15 | array,
|
@@ -124,7 +125,7 @@ def __repr__(self):
|
124 | 125 | f"Atlas with {self.nb_network} networks ({self.nb_network / period:0.0f} networks/year),"
|
125 | 126 | f" {self.nb_segment} segments ({self.nb_segment / period:0.0f} segments/year), {len(self)} observations ({len(self) / period:0.0f} observations/year)",
|
126 | 127 | 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)", |
128 | 129 | f" {nb_trash} observations in trash",
|
129 | 130 | ]
|
130 | 131 | return "\n".join(infos)
|
@@ -225,6 +226,12 @@ def network_size(self, id_networks=None):
|
225 | 226 | i = id_networks - self.index_network[2]
|
226 | 227 | return self.index_network[1][i] - self.index_network[0][i]
|
227 | 228 |
|
| 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 | + |
228 | 235 | def unique_segment_to_id(self, id_unique):
|
229 | 236 | """Return id network and id segment for a unique id
|
230 | 237 |
|
@@ -1788,8 +1795,8 @@ def date2file(julian_day):
|
1788 | 1795 | )
|
1789 | 1796 | logger.info(
|
1790 | 1797 | (
|
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" |
1793 | 1800 | )
|
1794 | 1801 | )
|
1795 | 1802 |
|
@@ -1865,8 +1872,8 @@ def date2file(julian_day):
|
1865 | 1872 | )
|
1866 | 1873 | logger.info(
|
1867 | 1874 | (
|
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" |
1870 | 1877 | )
|
1871 | 1878 | )
|
1872 | 1879 | return itf_final, ptf_final
|
@@ -2065,7 +2072,7 @@ def group_observations(self, min_overlap=0.2, minimal_area=False, **kwargs):
|
2065 | 2072 | nb_alone, nb_obs, nb_gr = (gr == self.NOGROUP).sum(), len(gr), len(unique(gr))
|
2066 | 2073 | logger.info(
|
2067 | 2074 | 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" |
2069 | 2076 | )
|
2070 | 2077 | return gr
|
2071 | 2078 |
|
@@ -2316,3 +2323,18 @@ def mask_follow_obs(m, next_obs, time, indexs, dt=3):
|
2316 | 2323 | m[i_next] = True
|
2317 | 2324 | i_next = next_obs[i_next]
|
2318 | 2325 | 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