Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Struggling with write_file() function #257

Open
rba27 opened this issue Dec 24, 2024 · 1 comment
Open

Struggling with write_file() function #257

rba27 opened this issue Dec 24, 2024 · 1 comment

Comments

@rba27
Copy link

rba27 commented Dec 24, 2024

Hello! Thank you so much for this lovely Python package. It has been very useful in my biological oceanography research.

I am having a problem saving my Eddies Observations object to a usable file. When I try to save the object to a NetCDF file, I get the following error:

Traceback (most recent call last):
[...]
TypeError: illegal data type for attribute b'rotation_type', must be one of dict_keys(['S1', 'i1', 'u1', 'i2', 'u2', 'i4', 'u4', 'i8', 'u8', 'f4', 'f8']), got O

I am able to save the file to zarr format, but when I then attempt to open it again in a different script using load_from_zarr(), I get this error:

"/Users/miniconda3/envs/eddy_tracker/lib/python3.10/site-packages/py_eddy_tracker/observations/observation.py", line 819, in load_from_zarr
   track_array_variables = h_zarr.attrs["track_array_variables"]
 File "/Users/miniconda3/envs/eddy_tracker/lib/python3.10/site-packages/zarr/attrs.py", line 72, in __getitem__
   return self.asdict()[item]
KeyError: 'track_array_variables' 

Here is the code I am using to produce the Eddy Observations:

from datetime import datetime
import numpy as np
import pandas as pd
from py_eddy_tracker import data
from py_eddy_tracker.dataset.grid import RegularGridDataset
from py_eddy_tracker.observations.observation import EddiesObservations
from netCDF4 import Dataset
from py_eddy_tracker.eddy_feature import Contours
from matplotlib import pyplot as plt

def start_axes(title):
   fig = plt.figure(figsize=(13, 8))
   ax = fig.add_axes([0.03, 0.03, 0.90, 0.94])
   ax.set_xlim(279, 304), ax.set_ylim(29, 44)
   ax.set_aspect("equal")
   ax.set_title(title, weight="bold")
   return ax


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

file_path = "/Users/Desktop/EddyTracking/new_adt_22_23_360.nc"

output_path = "./Eddies_GS/"
output_file = "gs_eddies_observations.nc"
nc_file = Dataset(file_path, 'r')
time_var = nc_file.variables['time']
time_values = time_var[:] 
nc_file.close()

base_date = datetime(2022, 1, 11)

a_eddy_observations = EddiesObservations()
c_eddy_observations = EddiesObservations()

for t, time in enumerate(time_values):
   print(f"starting analysis for time {t}")
   grid = RegularGridDataset(
       file_path,
       "longitude",
       "latitude",
       indexs=dict(
           time = t
       ),
   )

   grid.bessel_high_filter("adt", 700)

   date = base_date + pd.Timedelta(days=t) 
   a, c = grid.eddy_identification(
       "adt",  
       "ugos", "vgos",  
       date,
       0.002,
       shape_error=55
   )

   a_eddy_observations = a_eddy_observations.merge(a)
   c_eddy_observations = c_eddy_observations.merge(c)

a_eddy_observations.write_file(
   output_path,
   "a_test_eddies_observations.nc",
   zarr_flag=False

)

c_eddy_observations.write_file(
   output_path,
   "c_test_eddies_observations.nc",
   zarr_flag=False

)

print("All eddy observations have been processed and saved.")

Do you know what may be causing this issue? Thank you so much for your help!

@AntSimi
Copy link
Owner

AntSimi commented Jan 7, 2025

Which version of netCDF4/numba and numpy did you use? with which python?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants