Skip to content

Commit d6f954a

Browse files
committed
Add an entry to produce grid of frequency
1 parent 837fa1a commit d6f954a

File tree

5 files changed

+43
-3
lines changed

5 files changed

+43
-3
lines changed

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"EddyId = py_eddy_tracker.appli.grid:eddy_id",
4141
# eddies
4242
"MergeEddies = py_eddy_tracker.appli.eddies:merge_eddies",
43+
"EddyFrequency = py_eddy_tracker.appli.eddies:get_frequency_grid",
4344
"EddyInfos = py_eddy_tracker.appli.eddies:display_infos",
4445
# network
4546
"EddyNetworkGroup = py_eddy_tracker.appli.network:build_network",

src/py_eddy_tracker/appli/eddies.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,37 @@ def merge_eddies():
5757
obs.write_file(filename=args.out)
5858

5959

60+
def get_frequency_grid():
61+
parser = EddyParser("Compute eddy frequency")
62+
parser.add_argument("observations", help="Input observations to compute frequency")
63+
parser.add_argument("out", help="Grid output file")
64+
parser.add_argument(
65+
"--intern",
66+
help="Use speed contour instead of effective contour",
67+
action="store_true",
68+
)
69+
parser.add_argument(
70+
"--xrange", nargs="+", type=float, help="Horizontal range : START,STOP,STEP"
71+
)
72+
parser.add_argument(
73+
"--yrange", nargs="+", type=float, help="Vertical range : START,STOP,STEP"
74+
)
75+
args = parser.parse_args()
76+
77+
if (args.xrange is None or len(args.xrange) not in (3,)) or (
78+
args.yrange is None or len(args.yrange) not in (3,)
79+
):
80+
raise Exception("Use START/STOP/STEP for --xrange and --yrange")
81+
82+
var_to_load = ["longitude"]
83+
var_to_load.extend(EddiesObservations.intern(args.intern, public_label=True))
84+
e = EddiesObservations.load_file(args.observations, include_vars=var_to_load)
85+
86+
bins = args.xrange, args.yrange
87+
g = e.grid_count(bins, intern=args.intern)
88+
g.write(args.out)
89+
90+
6091
def display_infos():
6192
parser = EddyParser("Display General inforamtion")
6293
parser.add_argument("observations", nargs='+', help="Input observations to compute frequency")

src/py_eddy_tracker/appli/gui.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def prev(self):
109109
return self.draw_contour()
110110

111111
def draw_contour(self):
112-
t0, t1 = self.period
112+
# t0, t1 = self.period
113113
# select contour for this time step
114114
m = self.t == self.now
115115
self.ax.figure.canvas.restore_region(self.bg_cache)

src/py_eddy_tracker/dataset/grid.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,8 @@ def eddy_identification(
584584
:param float,int step: Height between two layers in m
585585
:param float,int shape_error: Maximal error allow for outter contour in %
586586
:param int sampling: Sampling of contour and speed profile
587-
:param (int,int),None pixel_limit: Min and max of pixel which must be inside inner and outer contour to be considered like an eddy
587+
:param (int,int),None pixel_limit:
588+
Min and max of pixel which must be inside inner and outer contour to be considered like an eddy
588589
:param float,None precision: Truncate value at the defined precision in m
589590
:param str force_height_unit: Unit to used for height unit
590591
:param str force_speed_unit: Unit to used for speed unit

src/py_eddy_tracker/observations/observation.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
histogram2d,
5050
linspace,
5151
sin,
52+
histogram,
5253
)
5354
from netCDF4 import Dataset
5455
from datetime import datetime
@@ -1359,16 +1360,22 @@ def grid_count(self, bins, intern=False, center=False):
13591360
),
13601361
centered=True,
13611362
)
1363+
debug_active = logger.getEffectiveLevel() == logging.DEBUG
13621364
if center:
13631365
x, y = (self.longitude - x0) % 360 + x0, self.latitude
13641366
grid[:] = histogram2d(x, y, (x_bins, y_bins))[0]
13651367
grid.mask = grid.data == 0
13661368
else:
13671369
x_ref = ((self.longitude - x0) % 360 + x0 - 180).reshape(-1, 1)
13681370
x, y = (self[x_name] - x_ref) % 360 + x_ref, self[y_name]
1369-
for x_, y_ in zip(x, y):
1371+
nb = x_ref.shape[0]
1372+
for i_, (x_, y_) in enumerate(zip(x, y)):
1373+
if debug_active and i_ % 10000 == 0:
1374+
print(f"{i_}/{nb}", end="\r")
13701375
i, j = BasePath(create_vertice(x_, y_)).pixels_in(regular_grid)
13711376
grid_count_(grid, i, j)
1377+
if debug_active:
1378+
print()
13721379
grid.mask = grid == 0
13731380
return regular_grid
13741381

0 commit comments

Comments
 (0)