Hi Nicholas,
Sorry to be bothering you with these issues, which most of the time are due to my lack of experience with Icthyop and in Python.
This time, I am trying to use the compute_connectivity function from ichthyop.connectivity
I read my .nc output file using ichhtyop.read.extract_dataset and then I tried to use compute_connectivity like so:
import ichthyop.read as ichread
import ichthyop.connectivity as ichconnectivity
data = ichread.extract_dataset("mercator3d_ichthyop-run202508041513.nc")
connect = ichconnectivity.compute_connectivity(data)
When I run the last line I get this big error, which as much as I understand means that there is not release_zone variable
KeyError Traceback (most recent call last)
~/miniforge3/envs/ichthyop/lib/python3.13/site-packages/xarray/core/dataset.py in ?(self, name)
1153 variable = self._variables[name]
1154 except KeyError:
-> 1155 _, name, variable = _get_virtual_variable(self._variables, name, self.sizes)
1156
KeyError: 'release_zone'
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
File ~/miniforge3/envs/ichthyop/lib/python3.13/site-packages/xarray/core/dataset.py:1252, in Dataset.__getitem__(self, key)
1251 try:
-> 1252 return self._construct_dataarray(key)
1253 except KeyError as e:
File ~/miniforge3/envs/ichthyop/lib/python3.13/site-packages/xarray/core/dataset.py:1155, in Dataset._construct_dataarray(self, name)
1154 except KeyError:
-> 1155 _, name, variable = _get_virtual_variable(self._variables, name, self.sizes)
1157 needed_dims = set(variable.dims)
File ~/miniforge3/envs/ichthyop/lib/python3.13/site-packages/xarray/core/dataset_utils.py:79, in _get_virtual_variable(variables, key, dim_sizes)
78 if len(split_key) != 2:
---> 79 raise KeyError(key)
81 ref_name, var_name = split_key
KeyError: 'release_zone'
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
<ipython-input-6-6f91ac6cb2a0> in ?()
----> 1 connect = ichconnectivity.compute_connectivity(data)
~/miniforge3/envs/ichthyop/lib/python3.13/site-packages/ichthyop/connectivity.py in ?(data, retention)
33
34 ntime = data.dims['time']
35 ndrifter = data.dims['drifter']
36
---> 37 release_zones = process_release_zones(data)
38 release_names = [zone.name for zone in release_zones]
39 nrel_zones = len(release_zones)
40 zone = data['release_zone'].values
~/miniforge3/envs/ichthyop/lib/python3.13/site-packages/ichthyop/connectivity.py in ?(data)
11 def process_release_zones(data):
12
---> 13 release_zones = data['release_zone']
14 attrs = [v for v in release_zones.attrs if v.startswith('release_zone_')]
15
16 zone_names = []
~/miniforge3/envs/ichthyop/lib/python3.13/site-packages/xarray/core/dataset.py in ?(self, key)
1261
1262 # If someone attempts `ds['foo' , 'bar']` instead of `ds[['foo', 'bar']]`
1263 if isinstance(key, tuple):
1264 message += f"\nHint: use a list to select multiple variables, for example `ds[{list(key)}]`"
-> 1265 raise KeyError(message) from e
1266
1267 if utils.iterable_of_hashable(key):
1268 return self._copy_listed(key)
KeyError: "No variable named 'release_zone'. Did you mean one of ('recruited_zone',)?"
And actually, if I use ncdump -h on my output file, there is no variable named release_zone.
Below is the description of my output file:
netcdf mercator3d_ichthyop-run202508041513 {
dimensions:
time = UNLIMITED ; // (7261 currently)
drifter = 33000 ;
type_zone = 3 ;
recruitment_zone = 2 ;
edge = 1224 ;
latlon = 2 ;
zone0 = 1 ;
geozone0 = 5 ;
zone1 = 745 ;
geozone1 = 5 ;
zone2 = 23 ;
geozone2 = 5 ;
variables:
double time(time) ;
time:calendar = "gregorian" ;
time:units = "seconds since 1900-01-01 00:00" ;
float lon(time, drifter) ;
lon:long_name = "particle longitude" ;
lon:unit = "degree east" ;
float lat(time, drifter) ;
lat:long_name = "particle latitude" ;
lat:unit = "degree north" ;
int mortality(time, drifter) ;
mortality:long_name = "particle cause of mortality" ;
mortality:unit = "death cause" ;
mortality:alive = 0 ;
mortality:dead_cold = 1 ;
mortality:out_of_domain = 2 ;
mortality:old = 3 ;
mortality:beached = 4 ;
mortality:starvation = 5 ;
mortality:dead_hot = 6 ;
mortality:dead_fresh = 7 ;
mortality:dead_saline = 8 ;
float depth(time, drifter) ;
depth:long_name = "particle depth" ;
depth:unit = "meter" ;
int zone(time, drifter, type_zone) ;
zone:long_name = "In which zones is the particle ?" ;
zone:unit = "the index of the zone" ;
zone:type_zone_0 = "release" ;
zone:release_zone_0 = "Emed release 1" ;
zone:type_zone_1 = "recruitment" ;
zone:recruitment_zone_0 = "Emed recruitment 1" ;
zone:recruitment_zone_1 = "Emed recruitment 2" ;
zone:type_zone_2 = "target" ;
zone:target_zone = "none for this run" ;
zone:not_released_yet = -99 ;
zone:out_of_zone = -1 ;
int recruited_zone(time, drifter, recruitment_zone) ;
recruited_zone:long_name = "Is particle recruited in zone ?" ;
recruited_zone:unit = "0:false 1:true" ;
recruited_zone:recruitment_zone_0 = "Emed recruitment 1" ;
recruited_zone:recruitment_zone_1 = "Emed recruitment 2" ;
float region_edge(edge, latlon) ;
region_edge:long_name = "geoposition of region edge" ;
region_edge:unit = "lat degree north lon degree east" ;
int drifter(drifter) ;
drifter:long_name = "drifter index" ;
drifter:unit = "" ;
float coord_zone0(zone0, latlon) ;
coord_zone0:long_name = "Emed release 1" ;
coord_zone0:unit = "x and y coordinates of the center of the cells in the zone" ;
coord_zone0:type = "release" ;
coord_zone0:color = "[r=255,g=0,b=255]" ;
float coord_geo_zone0(geozone0, latlon) ;
float coord_zone1(zone1, latlon) ;
coord_zone1:long_name = "Emed recruitment 1" ;
coord_zone1:unit = "x and y coordinates of the center of the cells in the zone" ;
coord_zone1:type = "recruitment" ;
coord_zone1:color = "[r=102,g=255,b=102]" ;
float coord_geo_zone1(geozone1, latlon) ;
float coord_zone2(zone2, latlon) ;
coord_zone2:long_name = "Emed recruitment 2" ;
coord_zone2:unit = "x and y coordinates of the center of the cells in the zone" ;
coord_zone2:type = "recruitment" ;
coord_zone2:color = "[r=255,g=153,b=0]" ;
float coord_geo_zone2(geozone2, latlon) ;
// global attributes:
:transport_dimension = "3d" ;
:release.schedule.is_enabled = "true" ;
:release.schedule.events = "\"year 2013 month 06 day 01 at 12:00\" \"year 2013 month 06 day 03 at 12:00\" \"year 2013 month 06 day 06 at 12:00\" \"year 2013 month 06 day 09 at 12:00\" \"year 2013 month 06 day 12 at 12:00\" \"year 2013 month 06 day 15 at 12:00\" \"year 2013 month 06 day 18 at 12:00\" \"year 2013 month 06 day 21 at 12:00\" \"year 2013 month 06 day 24 at 12:00\" \"year 2013 month 06 day 27 at 12:00\" \"year 2013 month 06 day 30 at 12:00\" \"year 2013 month 07 day 03 at 12:00\" \"year 2013 month 07 day 06 at 12:00\" \"year 2013 month 07 day 09 at 12:00\" \"year 2013 month 07 day 12 at 12:00\" \"year 2013 month 07 day 15 at 12:00\" \"year 2013 month 07 day 18 at 12:00\" \"year 2013 month 07 day 21 at 12:00\" \"year 2013 month 07 day 24 at 12:00\" \"year 2013 month 07 day 27 at 12:00\" \"year 2013 month 07 day 30 at 12:00\" \"year 2013 month 08 day 02 at 12:00\" \"year 2013 month 08 day 15 at 12:00\" \"year 2013 month 08 day 30 at 12:00\" \"year 2013 month 09 day 01 at 12:00\" \"year 2013 month 09 day 15 at 12:00\" \"year 2013 month 09 day 30 at 12:00\" \"year 2013 month 10 day 01 at 12:00\" \"year 2013 month 10 day 15 at 12:00\" \"year 2013 month 10 day 31 at 12:00\" \"year 2013 month 11 day 01 at 12:00\" \"year 2013 month 11 day 15 at 12:00\" \"year 2013 month 11 day 30 at 12:00\"" ;
:app.time.initial_time = "year 2013 month 01 day 01 at 12:00" ;
:app.time.transport_duration = "0030 day(s) 00 hour(s) 00 minute(s)" ;
:app.time.time_step = "360" ;
:app.output.netcdf_output_format = "netcdf3" ;
:app.output.file_prefix = "mercator3d" ;
:app.output.output_path = "/home/yotam/Documents/oceanographic_processes_biological_implications/output/" ;
:app.output.record_frequency = "12" ;
:app.particle_length.initial_length = "0.89" ;
:app.particle_length.hatch_length = "2.09" ;
:app.particle_length.yolk2feeding_length = "2.6" ;
:app.transport.coastline_behavior = "Standstill" ;
:action.recruitment.stain.enabled = "false" ;
:action.lethal_temp.enabled = "false" ;
:action.recruitment.zone.enabled = "true" ;
:action.recruitment.zone.criterion = "Age criterion" ;
:action.recruitment.zone.limit_age = "12.0" ;
:action.recruitment.zone.limit_length = "6.0" ;
:action.recruitment.zone.duration_min = "2.0" ;
:action.recruitment.zone.stop_moving = "true" ;
:action.recruitment.zone.zone_file = "/home/yotam/Downloads/cfg/east_med_zones.xml" ;
:action.advection.enabled = "true" ;
:action.advection.scheme = "Runge Kutta 4" ;
:action.swimming.enabled = "false" ;
:action.growth.enabled = "false" ;
:action.hdisp.enabled = "true" ;
:action.hdisp.epsilon = "1E-9" ;
:action.wind.enabled = "false" ;
:release.txtfile.enabled = "false" ;
:release.ncfile.enabled = "false" ;
:release.zone.enabled = "false" ;
:release.patches.enabled = "true" ;
:release.patches.number_patches = "10" ;
:release.patches.number_agregated = "100" ;
:release.patches.radius_patch = "2000.0" ;
:release.patches.thickness_patch = "2.0" ;
:release.patches.zone_file = "/home/yotam/Downloads/cfg/east_med_zones.xml" ;
:release.stain.enabled = "false" ;
:dataset.mercator3d.enabled = "true" ;
:dataset.mercator3d.input_path = "/home/yotam/Documents/oceanographic_processes_biological_implications/bashscripts/bashscripts_all/copernicusdata/" ;
:dataset.mercator3d.hgr_pattern = "MED-MFC_006_004_coordinates_cropped.nc" ;
:dataset.mercator3d.zgr_pattern = "MED-MFC_006_004_coordinates_cropped.nc" ;
:dataset.mercator3d.byte_mask_pattern = "MED-MFC_006_004_mask_bathy_cropped.nc" ;
:dataset.mercator3d.gridu_pattern = "*stks_data_*.nc" ;
:dataset.mercator3d.gridv_pattern = "*stks_data_*.nc" ;
:dataset.mercator3d.gridt_pattern = "*stks_data_*.nc" ;
:dataset.mercator3d.field_dim_x = "longitude" ;
:dataset.mercator3d.field_dim_y = "latitude" ;
:dataset.mercator3d.field_dim_z = "depth" ;
:dataset.mercator3d.field_dim_time = "time" ;
:dataset.mercator3d.field_var_lon = "longitude" ;
:dataset.mercator3d.field_var_lat = "latitude" ;
:dataset.mercator3d.field_var_mask = "mask" ;
:dataset.mercator3d.field_var_u = "uo" ;
:dataset.mercator3d.field_var_v = "vo" ;
:dataset.mercator3d.field_var_time = "time" ;
:dataset.mercator3d.field_var_e3t = "e3t" ;
:dataset.mercator3d.field_var_e2t = "e2t" ;
:dataset.mercator3d.field_var_e1t = "e1t" ;
:xml_file = "/home/yotam/Downloads/cfg/cfg-mercator3d-phd_1.xml" ;
:nb_zones = 3 ;
}
Any help would be appreciated, and again I apologize for all these questions
Thank you
Hi Nicholas,
Sorry to be bothering you with these issues, which most of the time are due to my lack of experience with Icthyop and in Python.
This time, I am trying to use the compute_connectivity function from ichthyop.connectivity
I read my .nc output file using ichhtyop.read.extract_dataset and then I tried to use compute_connectivity like so:
import ichthyop.read as ichreadimport ichthyop.connectivity as ichconnectivitydata = ichread.extract_dataset("mercator3d_ichthyop-run202508041513.nc")connect = ichconnectivity.compute_connectivity(data)When I run the last line I get this big error, which as much as I understand means that there is not release_zone variable
And actually, if I use ncdump -h on my output file, there is no variable named release_zone.
Below is the description of my output file:
Any help would be appreciated, and again I apologize for all these questions
Thank you