Skip to content

Commit a1515bd

Browse files
committed
Add a low pass filter option to remove noisy data to answer at AntSimi#42
1 parent 5cbc116 commit a1515bd

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

CHANGELOG.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@ and this project adheres to `Semantic Versioning <https://semver.org/spec/v2.0.0
99
[Unreleased]
1010
------------
1111

12+
Fixed
13+
^^^^^
14+
- Use `safe_load` for yaml load
15+
16+
Added
17+
^^^^^
18+
- Identification file could be load in memory before to be read with netcdf library to get speed up in case of slow disk
19+
- Add a filter option in EddyId to be able to remove fine scale (like noise) with same filter order than high scale
20+
filter
21+
1222
[3.3.0] - 2020-12-03
1323
--------------------
1424
Added

src/py_eddy_tracker/appli/grid.py

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,21 @@ def eddy_id(args=None):
6969
parser.add_argument("longitude")
7070
parser.add_argument("latitude")
7171
parser.add_argument("path_out")
72-
help = "Wavelength for mesoscale filter in km"
73-
parser.add_argument("--cut_wavelength", default=500, type=float, help=help)
72+
help = (
73+
"Wavelength for mesoscale filter in km to remove low scale if 2 args is given first one will be"
74+
"used to remove high scale and second value to remove low scale"
75+
)
76+
parser.add_argument(
77+
"--cut_wavelength", default=[500], type=float, help=help, nargs="+"
78+
)
7479
parser.add_argument("--filter_order", default=3, type=int)
7580
help = "Step between 2 isoline in m"
7681
parser.add_argument("--isoline_step", default=0.002, type=float, help=help)
7782
help = "Error max accepted to fit circle in percent"
7883
parser.add_argument("--fit_errmax", default=55, type=float, help=help)
84+
parser.add_argument(
85+
"--lat_max", default=85, type=float, help="Maximal latitude filtered"
86+
)
7987
parser.add_argument("--height_unit", default=None, help="Force height unit")
8088
parser.add_argument("--speed_unit", default=None, help="Force speed unit")
8189
parser.add_argument("--unregular", action="store_true", help="if grid is unregular")
@@ -102,14 +110,25 @@ def eddy_id(args=None):
102110
action=DictAction,
103111
)
104112
args = parser.parse_args(args) if args else parser.parse_args()
113+
114+
cut_wavelength = args.cut_wavelength
115+
nb_cw = len(cut_wavelength)
116+
if nb_cw > 2 or nb_cw == 0:
117+
raise Exception("You must specify 1 or 2 values for cut wavelength.")
118+
elif nb_cw == 1:
119+
cut_wavelength = [0, *cut_wavelength]
120+
inf_bnds, upper_bnds = cut_wavelength
121+
105122
date = datetime.strptime(args.datetime, "%Y%m%d")
106123
kwargs = dict(
107124
step=args.isoline_step,
108125
shape_error=args.fit_errmax,
109126
pixel_limit=(5, 2000),
110127
force_height_unit=args.height_unit,
111128
force_speed_unit=args.speed_unit,
129+
nb_step_to_be_mle=0,
112130
)
131+
113132
a, c = identification(
114133
args.filename,
115134
args.longitude,
@@ -119,7 +138,9 @@ def eddy_id(args=None):
119138
args.u,
120139
args.v,
121140
unregular=args.unregular,
122-
cut_wavelength=args.cut_wavelength,
141+
cut_wavelength=upper_bnds,
142+
cut_highwavelength=inf_bnds,
143+
lat_max=args.lat_max,
123144
filter_order=args.filter_order,
124145
indexs=args.indexs,
125146
sampling=args.sampling,
@@ -141,6 +162,8 @@ def identification(
141162
v="None",
142163
unregular=False,
143164
cut_wavelength=500,
165+
cut_highwavelength=0,
166+
lat_max=85,
144167
filter_order=1,
145168
indexs=None,
146169
**kwargs
@@ -150,6 +173,9 @@ def identification(
150173
if u == "None" and v == "None":
151174
grid.add_uv(h)
152175
u, v = "u", "v"
176+
kw_filter = dict(order=filter_order, lat_max=lat_max)
177+
if cut_highwavelength != 0:
178+
grid.bessel_low_filter(h, cut_highwavelength, **kw_filter)
153179
if cut_wavelength != 0:
154-
grid.bessel_high_filter(h, cut_wavelength, order=filter_order)
180+
grid.bessel_high_filter(h, cut_wavelength, **kw_filter)
155181
return grid.eddy_identification(h, u, v, date, **kwargs)

0 commit comments

Comments
 (0)