Computing extreme index using compute_extreme_index


I'm trying to compute number of frost days from era5 daily data. However i'm getting  following error message. Has anyone managed to use compute_extreme_index function, and how it should be used

Traceback (most recent call last):
  File "/opt/cdstoolbox/cdscompute/cdscompute/cdshandlers/services/handler.py", line 55, in handle_request
    result = cached(context.method, proc, context, context.args, context.kwargs)
  File "/opt/cdstoolbox/cdscompute/cdscompute/caching.py", line 108, in cached
    result = proc(context, *context.args, **context.kwargs)
  File "/opt/cdstoolbox/cdscompute/cdscompute/services.py", line 118, in __call__
    return p(*args, **kwargs)
  File "/opt/cdstoolbox/cdscompute/cdscompute/services.py", line 59, in __call__
    return self.proc(context, *args, **kwargs)
  File "/home/cds/cdsservices/services/python_service.py", line 38, in execute
    raise exceptions.InternalError(logging + traceback, '')
cdsclient.exceptions.InternalError: Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/cfgrib/messages.py", line 239, in __iter__
    yield self.message_from_file(file, errors=self.errors)
  File "/usr/local/lib/python3.6/site-packages/cfgrib/messages.py", line 255, in message_from_file
    return self.message_class.from_file(file, offset, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/cfgrib/messages.py", line 102, in from_file
    raise EOFError("End of file: %r" % file)
EOFError: End of file: <_io.BufferedReader name='/cache/tmp/data-76ec3c2d-0841-49e0-9911-703b1a6017cd.nc'>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/opt/cdstoolbox/jsonrequest/jsonrequest/requests.py”, line 71, in jsonrequestcall
resp = coding.encode(req.callable(*req.args, **req.kwargs), register=encoders, **context)
File “/opt/cdstoolbox/cdscdo/cdscdo/cdo.py”, line 499, in _compute_extreme_index
paths = gridded.make_compliant(output_path)
File “/opt/cdstoolbox/cdscdm/cdscdm/gridded.py”, line 881, in make_compliant
datasets = open_dataset(netcdf, product, strict=strict, **kwargs)
File “/opt/cdstoolbox/cdscdm/cdscdm/gridded.py”, line 732, in open_dataset
read_attributes=retrieve_kwargs.get(‘read_attributes’, ),
File “/opt/cdstoolbox/cdscdm/cdscdm/gridded.py”, line 91, in update_xarray_backend_kwargs
time_dims = xarray_backend_time_dims(wpath, product, time_dimensions, default_backend_kwargs.get(‘time_dims’, ))
File “/opt/cdstoolbox/cdscdm/cdscdm/gridded.py”, line 67, in xarray_backend_time_dims
if check_lagged_starts(path):
File “/opt/cdstoolbox/cdscdm/cdscdm/gridded.py”, line 54, in check_lagged_starts
msg0 = cfgrib.FileStream(path).first()
File “/usr/local/lib/python3.6/site-packages/cfgrib/messages.py”, line 258, in first
for message in self:
File “/usr/local/lib/python3.6/site-packages/cfgrib/messages.py”, line 243, in iter
raise EOFError(“No valid message found in file: %r” % self.path)
EOFError: No valid message found in file: ‘/cache/tmp/data-76ec3c2d-0841-49e0-9911-703b1a6017cd.nc’


import cdstoolbox as ct

layout = {
‘output_align’: ‘bottom’
}

@ct.application(title=‘Use CDO functions’, layout=layout)
@ct.input.dropdown(‘year’, label=‘Year’, values=range(2010, 2020))
@ct.output.figure()
@ct.output.figure()
def csu_app(year):
“”"
Application main steps:

- retrieve a variable over a defined time range
- compute the daily mean
- compute the "Consecutive Summer Days" indexes (the number of consecutive days and the number
  of summer periods of more than 5 days)
- show the result on a map

"""

data = ct.catalogue.retrieve(
    'reanalysis-era5-single-levels',
    {
        'variable': '2m_temperature',
        'grid': ['3', '3'],
        'product_type': 'reanalysis',
        'year': str(year),
        'month': [
            '01', '02', '03', '04', '05', '06',
            '07', '08', '09', '10', '11', '12'
        ],
        'day': [
            '01', '02', '03', '04', '05', '06',
            '07', '08', '09', '10', '11', '12',
            '13', '14', '15', '16', '17', '18',
            '19', '20', '21', '22', '23', '24',
            '25', '26', '27', '28', '29', '30',
            '31'
        ],
        'time': ['00:00', '06:00', '12:00', '18:00'],
    }
)

data_daily = ct.climate.daily_min(data)
data_daily = ct.cube.select(data_daily, time=year)
print(data_daily)
map_data = ct.climate.compute_extreme_index(data_daily, 'eca_fd')
print(map)
title = 'test'

# Plot retrieved data on a map
fig = ct.map.plot(map_data, title=title)

return fig


Hi Kalle,

I have the same problem and I wonder if you figure it out?

Xie