py-eddy-tracker icon indicating copy to clipboard operation
py-eddy-tracker copied to clipboard

The question about the data

Open SomnusQue opened this issue 2 years ago • 5 comments

SomnusQue avatar Sep 20 '23 04:09 SomnusQue

Dear authors, I am wondering the data structure about this project. Now, I got a SLA.nc file which could not run the pet_sla_and_adt.py, the reason why that was Coordinates in RegularGridDataset must be strictly increasing. I have been sort the longitude and latitude about this data, should I make sure the data is arithmetic progression? Best wishes.

SomnusQue avatar Sep 20 '23 04:09 SomnusQue

could you share ncdump -h of your file?

AntSimi avatar Sep 20 '23 07:09 AntSimi

Of course, this is our file. Now, the new error that was Cannot convert from 'dimensionless' (dimensionless) to 'meter' ([length])..I'm sorry to trouble you again. Would you please see what the problem is? By the way, our file don't contains adt data. We just want to detect eddy by SLA.. Best wishes pred_mra5_20190101_zos.nc.zip

SomnusQue avatar Sep 21 '23 02:09 SomnusQue

This is the code which we changed.

"""
Eddy detection on SLA
=============================

"""
from datetime import datetime

from matplotlib import pyplot as plt

from py_eddy_tracker import data
from py_eddy_tracker.dataset.grid import RegularGridDataset



def start_axes(title):
    fig = plt.figure(figsize=(13, 5))
    ax = fig.add_axes([0.03, 0.03, 0.90, 0.94])
    # ax.set_xlim(-6, 36.5), ax.set_ylim(30, 46)
    ax.set_aspect("equal")
    ax.set_title(title)
    return ax


def update_axes(ax, mappable=None):
    ax.grid()
    if mappable:
        plt.colorbar(mappable, cax=ax.figure.add_axes([0.95, 0.05, 0.01, 0.9]))


g = RegularGridDataset(
    data.get_demo_path("/Users/Maybe/Desktop/pred_mra5_20190101_zos.nc"),
    "longitude",
    "latitude",
)

g.add_uv("prediction", "ugosa", "vgosa")
wavelength = 400
print('here')
g.copy("prediction", "sla_raw")

g.bessel_high_filter("prediction", wavelength)
date = datetime(2019, 1, 1)

kwargs_a_sla = dict(
    lw=0.5, label="Anticyclonic SLA ({nb_obs} eddies)", ref=-10, color="g"
)
kwargs_c_sla = dict(lw=0.5, label="Cyclonic SLA ({nb_obs} eddies)", ref=-10, color="b")

a_sla, c_sla = g.eddy_identification("prediction", "ugosa", "vgosa", date, 0.002)

ax = start_axes(f"SLA (m) filtered ({wavelength}km)" + str(date.date()))
m = g.display(ax, "sla", vmin=-0.15, vmax=0.15)
a_sla.display(ax, **kwargs_a_sla), c_sla.display(ax, **kwargs_c_sla)
ax.legend(), update_axes(ax, m)

ax = start_axes("SLA (m)")
m = g.display(ax, "sla_raw", vmin=-0.15, vmax=0.15)
a_sla.display(ax, **kwargs_a_sla), c_sla.display(ax, **kwargs_c_sla)
ax.legend(), update_axes(ax, m)

ax = start_axes("Eddies detected")
a_sla.display(ax, **kwargs_a_sla)
c_sla.display(ax, **kwargs_c_sla)
ax.legend()
update_axes(ax)
plt.show()

SomnusQue avatar Sep 21 '23 02:09 SomnusQue

First data.get_demo_path method is only to get demonstration sample, you don't need it for your own data. You need to specify height and speed unit in eddy_identification method if there is no attribute unit in your netcdf.

AntSimi avatar Sep 27 '23 10:09 AntSimi