Skip to content

Commit 3819ca7

Browse files
committed
add network functions and clean some file/share
1 parent 31e1bf2 commit 3819ca7

File tree

17 files changed

+403
-440
lines changed

17 files changed

+403
-440
lines changed

examples/08_tracking_manipulation/pet_track_anim.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
77
"""
88
from py_eddy_tracker.observations.tracking import TrackEddiesObservations
9-
from py_eddy_tracker.appli import Anim
9+
from py_eddy_tracker.appli.gui import Anim
1010
import py_eddy_tracker_sample
1111

1212
# %%

notebooks/python_module/08_tracking_manipulation/pet_track_anim.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
},
2727
"outputs": [],
2828
"source": [
29-
"from py_eddy_tracker.observations.tracking import TrackEddiesObservations\nfrom py_eddy_tracker.appli import Anim\nimport py_eddy_tracker_sample"
29+
"from py_eddy_tracker.observations.tracking import TrackEddiesObservations\nfrom py_eddy_tracker.appli.gui import Anim\nimport py_eddy_tracker_sample"
3030
]
3131
},
3232
{

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,11 @@
2020
"Programming Language :: Python",
2121
],
2222
keywords="eddy science, eddy tracking, eddy tracker",
23-
author="emason",
23+
author="emason & adelepoulle",
2424
author_email="[email protected]",
2525
packages=find_packages("src"),
2626
package_dir={"": "src"},
2727
scripts=[
28-
"src/scripts/EddyId",
2928
"src/scripts/EddySubSetter",
3029
"src/scripts/EddyTranslate",
3130
"src/scripts/EddyTracking",
@@ -38,6 +37,7 @@
3837
console_scripts=[
3938
# grid
4039
"GridFiltering = py_eddy_tracker.appli.grid:grid_filtering",
40+
"EddyId = py_eddy_tracker.appli.grid:eddy_id",
4141
# eddies
4242
"MergeEddies = py_eddy_tracker.appli.eddies:merge_eddies",
4343
# network

share/eddy_identification.yaml

Lines changed: 0 additions & 98 deletions
This file was deleted.

src/py_eddy_tracker/__init__.py

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,13 @@ def start_logger():
3131
FORMAT_LOG = (
3232
"%(levelname)-8s %(asctime)s %(module)s.%(funcName)s :\n\t\t\t\t\t%(message)s"
3333
)
34-
# set up logging to CONSOLE
35-
console = logging.StreamHandler()
36-
console.setFormatter(ColoredFormatter(FORMAT_LOG))
3734
logger = logging.getLogger("pet")
38-
# add the handler to the root logger
39-
logger.addHandler(console)
35+
if len(logger.handlers) == 0:
36+
# set up logging to CONSOLE
37+
console = logging.StreamHandler()
38+
console.setFormatter(ColoredFormatter(FORMAT_LOG))
39+
# add the handler to the root logger
40+
logger.addHandler(console)
4041
return logger
4142

4243

@@ -50,7 +51,7 @@ class ColoredFormatter(logging.Formatter):
5051
)
5152

5253
def __init__(self, message):
53-
super(ColoredFormatter, self).__init__(message)
54+
super().__init__(message)
5455

5556
def format(self, record):
5657
color = self.COLOR_LEVEL.get(record.levelname, "")
@@ -60,15 +61,15 @@ def format(self, record):
6061
record.funcName = model % record.funcName
6162
record.module = model % record.module
6263
record.levelname = model % record.levelname
63-
return super(ColoredFormatter, self).format(record)
64+
return super().format(record)
6465

6566

6667
class EddyParser(ArgumentParser):
6768
"""General parser for applications
6869
"""
6970

7071
def __init__(self, *args, **kwargs):
71-
super(EddyParser, self).__init__(*args, **kwargs)
72+
super().__init__(*args, **kwargs)
7273
self.add_base_argument()
7374

7475
def add_base_argument(self):
@@ -85,7 +86,7 @@ def add_base_argument(self):
8586
def parse_args(self, *args, **kwargs):
8687
logger = start_logger()
8788
# Parsing
88-
opts = super(EddyParser, self).parse_args(*args, **kwargs)
89+
opts = super().parse_args(*args, **kwargs)
8990
# set current level
9091
logger.setLevel(getattr(logging, opts.logging_level.upper()))
9192
return opts
@@ -395,6 +396,17 @@ def parse_args(self, *args, **kwargs):
395396
axis="X",
396397
),
397398
),
399+
num_point_e=dict(
400+
attr_name=None,
401+
nc_name="num_point_e",
402+
nc_type="u2",
403+
nc_dims=("obs",),
404+
nc_attr=dict(
405+
longname="number of point for effective contour",
406+
units="ordinal",
407+
description="Number of point for effective contour, if greater than NbSample, there is a resampling",
408+
),
409+
),
398410
contour_lon_s=dict(
399411
attr_name=None,
400412
nc_name="speed_contour_longitude",
@@ -428,6 +440,17 @@ def parse_args(self, *args, **kwargs):
428440
axis="X",
429441
),
430442
),
443+
num_point_s=dict(
444+
attr_name=None,
445+
nc_name="num_point_s",
446+
nc_type="u2",
447+
nc_dims=("obs",),
448+
nc_attr=dict(
449+
longname="number of point for speed contour",
450+
units="ordinal",
451+
description="Number of point for speed contour, if greater than NbSample, there is a resampling",
452+
),
453+
),
431454
shape_error_e=dict(
432455
attr_name=None,
433456
nc_name="effective_contour_shape_error",
@@ -590,5 +613,6 @@ def parse_args(self, *args, **kwargs):
590613
VAR_DESCR_inv[key_old] = key
591614

592615
from ._version import get_versions
593-
__version__ = get_versions()['version']
616+
617+
__version__ = get_versions()["version"]
594618
del get_versions

src/py_eddy_tracker/appli/grid.py

Lines changed: 77 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@
2020
2121
===========================================================================
2222
"""
23+
from datetime import datetime
2324
from .. import EddyParser
24-
from ..dataset.grid import RegularGridDataset
25+
from ..dataset.grid import RegularGridDataset, UnRegularGridDataset
2526

2627

27-
def grid_parser():
28+
def filtering_parser():
2829
parser = EddyParser("Grid filtering")
2930
parser.add_argument("filename")
3031
parser.add_argument("grid")
@@ -49,7 +50,7 @@ def grid_parser():
4950

5051

5152
def grid_filtering():
52-
args = grid_parser().parse_args()
53+
args = filtering_parser().parse_args()
5354

5455
h = RegularGridDataset(args.filename, args.longitude, args.latitude)
5556
if args.low:
@@ -61,3 +62,76 @@ def grid_filtering():
6162
args.grid, args.cut_wavelength, order=args.filter_order, extend=args.extend
6263
)
6364
h.write(args.filename_out)
65+
66+
67+
def eddy_id(args=None):
68+
parser = EddyParser("Eddy Identification")
69+
parser.add_argument("filename")
70+
parser.add_argument("datetime")
71+
parser.add_argument("h")
72+
parser.add_argument("u", help="If it s None, it will be deduce from h")
73+
parser.add_argument("v", help="If it s None, it will be deduce from h")
74+
parser.add_argument("longitude")
75+
parser.add_argument("latitude")
76+
parser.add_argument("path_out")
77+
help = "Wavelength for mesoscale filter in km"
78+
parser.add_argument("--cut_wavelength", default=500, type=float, help=help)
79+
parser.add_argument("--filter_order", default=3, type=int)
80+
help = "Step between 2 isoline in m"
81+
parser.add_argument("--isoline_step", default=0.002, type=float, help=help)
82+
help = "Error max accepted to fit circle in percent"
83+
parser.add_argument("--fit_errmax", default=55, type=float, help=help)
84+
parser.add_argument("--height_unit", default=None, help="Force height unit")
85+
parser.add_argument("--speed_unit", default=None, help="Force speed unit")
86+
parser.add_argument("--unregular", action="store_true", help="if grid is unregular")
87+
help = "Output will be wrote in zarr"
88+
parser.add_argument("--zarr", action="store_true", help=help)
89+
args = parser.parse_args(args) if args else parser.parse_args()
90+
91+
date = datetime.strptime(args.datetime, "%Y%m%d")
92+
kwargs = dict(
93+
step=args.isoline_step,
94+
shape_error=args.fit_errmax,
95+
pixel_limit=(5, 2000),
96+
force_height_unit=args.height_unit,
97+
force_speed_unit=args.speed_unit,
98+
)
99+
a, c = identification(
100+
args.filename,
101+
args.longitude,
102+
args.latitude,
103+
date,
104+
args.h,
105+
args.u,
106+
args.v,
107+
unregular=args.unregular,
108+
cut_wavelength=args.cut_wavelength,
109+
filter_order=args.filter_order,
110+
**kwargs
111+
)
112+
out_name = date.strftime("%(path)s/%(sign_type)s_%Y%m%d.nc")
113+
a.write_file(path=args.path_out, filename=out_name, zarr_flag=args.zarr)
114+
c.write_file(path=args.path_out, filename=out_name, zarr_flag=args.zarr)
115+
116+
117+
def identification(
118+
filename,
119+
lon,
120+
lat,
121+
date,
122+
h,
123+
u="None",
124+
v="None",
125+
unregular=False,
126+
cut_wavelength=500,
127+
filter_order=1,
128+
**kwargs
129+
):
130+
grid_class = UnRegularGridDataset if unregular else RegularGridDataset
131+
grid = grid_class(filename, lon, lat)
132+
if u == "None" and v == "None":
133+
grid.add_uv(h)
134+
u, v = "u", "v"
135+
if cut_wavelength != 0:
136+
grid.bessel_high_filter(h, cut_wavelength, order=filter_order)
137+
return grid.eddy_identification(h, u, v, date, **kwargs)

0 commit comments

Comments
 (0)