|
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