Note
Go to the end to download the full example code.
Detect eddies from different files and merge tracking#
Initialisations#
Import needed stuff.
import tempfile
import time
import xarray as xr
from shoot.eddies.eddies2d import EvolEddies2D
from shoot.eddies.track import track_eddies
from shoot.samples import get_sample_file
xr.set_options(display_style="text")
Read data
path = get_sample_file("OBS/SATELLITE/jan2024_ionian_sea_duacs.nc")
out_dir = tempfile.mkdtemp()
# partition into 2 dataset continuous in time
ds1 = xr.open_dataset(path).isel(time=slice(0, 10))
ds2 = xr.open_dataset(path).isel(time=slice(10, 20))
Detect eddies#
Parameters#
Window size in km to compute the LNAM and find eddy centers : Lb
window_center = 50 # 20 # 100#50
Window size in km to fit SSH and make other diagnostics like contours : 10Rd suggested
window_fit = 120 # 100 # 120
Minimal radius of an eddy to retain it
min_radius = 20
Ellipse error
ellipse_error = 0.05
Detection#
start = time.time()
eddies1 = EvolEddies2D.detect_eddies(
ds1,
window_center,
window_fit,
min_radius,
ssh="adt",
ellipse_error=ellipse_error,
)
eddies2 = EvolEddies2D.detect_eddies(
ds2,
window_center,
window_fit,
min_radius,
ssh="adt",
ellipse_error=ellipse_error,
)
end = time.time()
time_detect = end - start
print(f"nb days {len(eddies1.eddies)} in {time_detect / 60:.1f} min")
Tracking#
tracks1.to_netcdf(out_dir + "/eddies_med_test1.nc")
tracks2.to_netcdf(out_dir + "/eddies_med_test2.nc")
ds1 = xr.open_dataset(out_dir + "/eddies_med_test1.nc")
ds2 = xr.open_dataset(out_dir + "/eddies_med_test2.nc")
eddies = EvolEddies2D.merge_ds([ds1, ds2])
eddies
print(len(eddies.eddies))
tracks = track_eddies(eddies, 10)
tracks.to_netcdf(out_dir + "/eddies_mest_test_merged.nc")
ds_merged = xr.open_dataset(out_dir + "/eddies_mest_test_merged.nc")