Features
Features in cerbere implement specific data structures tied to observation
patterns shared by many Earth observation data, following the Climate and
Forecast conventions (complemented by other conventions or rules). They check
and harmonize their dimensions and coordinates so that observations acquired in
the same or sharing common spatial and temporal properties are structured and
named in the same way.
Feature classes inherit from the main CBaseFeature base class which
itself is a wrapper for a Xarray Dataset (and derives from it by
composition). They can be created from any Dataset object meeting
the expected properties of a given feature. CBaseFeature is an abstract base
class and only objects from other classes in feature package can be
instantiated. Examples of feature classes include Point, Profile,
TimeSeries and many more.
A feature object can therefore be created from any Xarray Dataset object,
but it has to match the expected requirements on dimensions and coordinates
of the instantiated feature class. cerbere may do some guesses to try
to cast the Dataset object into the expected feature class properties,
therefore possibly renaming or reorganizing its dimensions and variables.
Reading a feature from a file
Knowing the feature type of an object stored in a file, and the reader class (if not an Xarray engine) corresponding to the file format, one can directly load the content of this file into a fully formed feature object.
In the following example, let’s open a GHRSST L2P file, which
is a Swath feature, for which there is a special GHRSST reader class in
cerberecontrib-sst contrib package.
In [1]: import cerbere
In [2]: print(cerbere._feature)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[2], line 1
----> 1 print(cerbere._feature)
AttributeError: module 'cerbere' has no attribute '_feature'
# detects it is a GHRSST file, fetches the correct reader and returns a
# CF/Cerbere compliant Swath feature object.
In [3]: swath = cerbere.open_feature(
...: './samples/20190719000110-MAR-L2P_GHRSST-SSTskin-SLSTRA-20190719021531-v02.0-fv01.0.nc',
...: 'Swath')
...: print(swath)
...:
Cell In[3], line 4
print(swath)
^
IndentationError: unexpected indent
Creating a feature from or like a xarray Dataset object
Features can be created from a xarray xarray.Dataset object. The
definition of the xarray.Dataset object must match the
requirements of the feature to be instantiated, in terms of dimensions and
coordinate variables.
For instance to create a CylindricalGrid feature from a
xarray.Dataset object, the later must have:
lat,lon,timedimensions.timedimension must have a length equal to 1.a
latcoordinate variable with dimensionlat.a
loncoordinate variable with dimensionlon.a
timecoordinate variable with dimensiontime.data variables with spatial dimensions (
lat,lon,). Extra dimensions are allowed (excepttime).
from cerbere.feature.cgrid import CylindricalGrid
# create an xarray Dataset with the structure of a cylindrical grid
lat = xr.DataArray(data=np.arange(-80, 80, 1), dims=['lat'])
lon = xr.DataArray(data=np.arange(-180, 180, 1), dims=['lon'])
time = xr.DataArray([datetime(2018, 1, 1)], dims='time')
var = xr.DataArray(
data=np.ones(shape=(160, 360)),
dims=['lat', 'lon'],
attrs={'myattr': 'test_attr_val'}
)
xrdataset = xr.Dataset(
coords={'lat': lat, 'lon': lon, 'time': time},
data_vars={'myvar': var},
attrs={'gattr1': 'gattr1_val', 'gattr2': 'gattr2_val'}
)
# create the cylindrical grid feature from the xarray dataset object
grid = CylindricalGrid(xrdataset)
grid
Harmonization
When creating a feature from a xarray.Dataset object or file
content, cerbere performs some checks to verify the object meets the
expected feature properties and rename its coordinates and dimensions if
necessary.
Available features
The main features currently managed include :
Grid
Swath
Image
GridTimeSeries
Trajectory
PointTimeSeries
Point
Profile
TimeSeries
TimeSeriesProfile
TrajectoryProfile
The classes provided in feature modules and listed above
correspond to the main sampling patterns usually used for Earth Observation
data. Whenever possible, they follow the recommendations of Climate and
Forecast (CF) convention.
The following table describes the dimensions and spatio-temporal
coordinate (geolocation) fields associated with each feature in
feature:
Feature |
Dims [size] |
Coords [dims] |
Vars [dims] |
|---|---|---|---|
|
row (y)cell (x) |
time (row, cell)lat (row, cell)lon (row, cell) |
|
|
time (1)row (y)cell (x) |
time (time)lat (row, cell)lon (row, cell) |
|
|
time (1)y (y)x (x) |
time (time)lat (y, x)lon (y, x) |
|
|
time (t)y (y)x (x) |
time (time)lat (y, x)lon (y, x) |
|
|
|
time (obs)lat (obs)lon (obs)depth/alt (obs) [opt] |
|
|
|
time (time)lat (time)lon (time)depth/alt (time) [opt] |
|
|
profile ()z (z) |
time ()lat ()lon ()alt/depth (z) |
|
|
station (1)time (t) |
time (time)lat (time)lon (time)depth/alt (time) [opt] |
|
|
profile (n)z (z) |
time (profile)lat (profile)lon (profile)alt/depth (profile, z) |
|
|
profile (n)z (z) |
time (profile)lat ()lon ()alt/depth (profile, z) |
|
CF references
Special features
Additional types of features, representing particular cases of the main features above, are also available. They follow the CF rules defined for these particular cases, when applicable.
Feature |
Dims [size] |
Coords [dims] |
Vars [dims] |
|---|---|---|---|
|
profile (n)z (z) |
time (profile)lat (profile)lon (profile)depth/alt (z) |
|
|
time (1)lat (y)lon (x) |
time (time)lat (lat, lon)lon (lat, lon) |
|
CF references
CF TrajectoryProfile featureType where all the profiles have the same set of vertical coordinates
Collection features
Additional types of features include collection : these are special features
that consist in grouping features of the same type into one single dataset along
an extra axis, the name of which depends on the grouped feature’s type.
They are described in CF convention and include:
orthogonal multidimensional collection of features (
OMDCollection)incomplete multidimensional collection of features (
IMDCollection)contiguous ragged array collection of features (
CRACollection)