SlideShare a Scribd company logo
www.hdfgroup.org
The HDF Group
1
Adding CF Attributes to an
HDF5 File
Isayah Reed
The HDF Group
www.hdfgroup.org
Climate and Forecast Conventions
• Metadata conventions for earth science data
• Included in same file as data
• Description of what the data represents
• Uses values of universal attribute
• Extension of COARDS* conventions
• Allows comparison of data from different
sources
*Cooperative Ocean/Atmosphere Research Data Service
URL: http://cf-pcmdi.llnl.gov/documents/cf-conventions/1.5/cf-conventions.pdf
www.hdfgroup.org
Overview
• Programming examples that add CF attributes
to an HDF5 file
• HDF5
• C, FORTRAN90, Python
• netCDF4
• C, FORTRAN90
• HDF5-EOS5
• C, FORTRAN77
• HDFView to add CF attributes
3
www.hdfgroup.org
Problem Set
Examples are based on a simple application
4
Field Description
temp
Temperature
180x360 array
lat
Latitude
1-D array, size 180
lon
Longitude
1-D array, size 360
www.hdfgroup.org
CF attributes added
Attribute Description
long_name A long descriptive name for the data.
units The quantity of measurement.
coordinates
A list of the associated coordinate variable
names of the variable.
_FillValue A missing or undefined value.
www.hdfgroup.org
HDF5-C Example
Create the HDF5 file:
file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT,
H5P_DEFAULT);
6
Create temperature dataset:
dimsa[0] = 180;
dimsa[1] = 360;
dataset= H5Dcreate(file, “temp”, H5T_NATIVE_FLOAT,
H5Screate_simple(2, dimsa, NULL), H5P_DEFAULT);
Write temperature dataset:
H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL,
H5P_DEFAULT, temp_array);
Add the _FillValue:
H5Acreate(dataset, “_FillValue”, H5T_NATIVE_FLOAT,
H5Screate(H5S_SCALAR), H5P_DEFAULT);
H5Awrite(attr, H5T_NATIVE_FLOAT,&value);
www.hdfgroup.org
HDF5-C Example
Add the units attribute:
H5Tset_size(stringType, (hsize_t)strlen(“kelvin”));
attr= H5Acreate(dataset, “units”, stringType, H5S_SCALAR,
H5P_DEFAULT);
H5Awrite(attr, stringType, ”kelvin”);
7
Add the long_name attribute:
H5Tset_size(stringType, (hsize_t) strlen("temperature"));
attr= H5Acreate(dataset, “long_name”, stringType, stringSpace,
H5P_DEFAULT, H5P_DEFAULT);
H5Awrite(attr, stringType, "temperature");
Add the coordinates attribute:
arraySpace = H5Screate_simple(1, &dimsa[0], NULL);
H5Tset_size(arrayType, H5T_VARIABLE);
attr= H5Acreate(dataset, “coordinates”, arrayType, arraySpace,
H5P_DEFAULT);
H5Awrite(attr, arrayType, coorlist);
www.hdfgroup.org
FORTRAN90 Example
Initialize FORTRAN interface and create the HDF5 file:
CALL h5open_f(hdferr)
CALL h5fcreate_f(FILENAME, H5F_ACC_TRUNC_F, file, hdferr)
8
Create temperature dataset:
CALL h5screate_simple_f(2, temp_dims, space, status)
!! temp_dims = (360, 180)
CALL h5dcreate_f(file, TEMPERATURE, h5t_ieee_f32le, space, dset, status)
Write temperature dataset:
CALL h5dwrite_f(dset, H5T_NATIVE_DOUBLE, temp_data, &
temp_dims, status)
Add the _FillValue:
CALL h5screate_f(H5S_SCALAR_F, space, status)
CALL h5tcopy_f(h5t_ieee_f32le, atype_id, status)
CALL h5acreate_f(dset, FILLVALUE, atype_id, space, &
attr_id, status)
CALL h5awrite_f(attr_id, H5T_NATIVE_DOUBLE, -999, 1, status)
www.hdfgroup.org
FORTRAN90 Example
Add the units attribute:
CALL h5screate_f(H5S_SCALAR_F, space, status)
CALL h5tcopy_f(H5T_NATIVE_CHARACTER, atype_id, status)
CALL h5tset_size_f(atype_id, 6, status)
CALL h5acreate_f(dset, UNITS, atype_id, space, attr_id, status)
CALL h5awrite_f(attr_id, atype_id, "kelvin", dimsf, status)
9
Add the long_name attribute:
CALL h5tset_size_f(atype_id, strlen, status)
CALL h5acreate_f(dset, “long_name”, atype_id, space, &
attr_id, status)
CALL h5awrite_f(attr_id, atype_id, “temperature”, 1, status)
Add the coordinates attribute:
CALL h5screate_simple_f(1, 2, space, status)
CALL h5tset_size_f(atype_id, strlen, status)
CALL h5acreate_f(dset, “coordinates”, atype_id, space, &
attr_id, status)
CALL h5awrite_f(attr_id, atype_id, coorlist, 2, status)
www.hdfgroup.org
H5PY
• A Python interface to the HDF5 library
• Supports nearly all HDF5-C features
• Combines advantages of Python and C
• Shorter and simpler function calls
• Powerful computational abilities
• Requires numpy and scipy
URL: http://code.google.com/p/h5py
www.hdfgroup.org
H5PY Example
Create an HDF5 file:
file = h5py.File ("cf_example.h5", 'w')
Create/write dataset:
temp_dset = file.create_dataset ('temp', data=temp_array)
Add the _FIllValue:
temp_dset.attrs.create ('_FillValue', data=-999.0, dtype ='f')
www.hdfgroup.org
H5PY Example
Add the units attribute:
temp_dset.attrs["units"] = "kelvin”
Add the long_name attribute:
temp_dset.attrs["long_name"] = "temperature”
Add the coordinates attribute:
vlen = h5py.special_dtype (vlen = str)
temp_dset.attrs.create ('coordinates', data = ['lat', 'lon'],
dtype=vlen)
www.hdfgroup.org
netCDF-4
• Extends netCDF3
• Built on the HDF5 library
• Uses HDF5 for storage and performance
• Chunking and compression
• C and FORTRAN libraries
• Simple function calls
URL: http://www.unidata.ucar.edu/software/netcdf/docs/netcdf
www.hdfgroup.org
C Example
Create a netCDF4 file:
nc_create(FILE_NAME, NC_NETCDF4|NC_CLOBBER, &ncid)
Define the temperature variable:
nc_def_var(ncid, “temp”, NC_FLOAT, 2,dimsa, &varid);
Add the _FillValue:
nc_def_var_fill(ncid, varid, 0, &fillvalue);
Write the temperature data:
nc_put_var_float(ncid, varid, &temp_array[0][0]));
14
www.hdfgroup.org
C Example
Add the units attribute:
nc_put_att_text(ncid, varid, “units”, strlen(“kelvin”), “kelvin”);
Add the long_name attribute:
nc_put_att_text(ncid, varid, “long_name”, strlen(“temperature”),
“temperature”);
Add the coordinates attribute:
char *coorlist[2]= {"lat", "lon"};
nc_put_att_string(ncid, varid, “coordinates”, 2, (const char**)&coorlist);
15
www.hdfgroup.org
FORTRAN90 Example
Create the netCDF4 file:
nf90_create(path=filename, cmode=IOR(NF90_CLOBBER,NF90_HDF5),
ncid=ncid)
Define the temperature variable:
nf90_def_var(ncid, “temp”, NF90_FLOAT, (/180,360/), varid)
Add the _FillValue:
nf90_def_var_fill(ncid, varid, 0, -999)
Write the temperature data:
nf90_put_var(ncid, varid, temp_data)
16
www.hdfgroup.org
FORTRAN90 Example
Add the units attribute:
nf90_put_att(ncid, varid, “units, "kelvin")
Add the long_name attribute:
nf90_put_att(ncid, varid, “long_name”, "temperature")
Add the coordinates attribute:
nf90_put_att(ncid, varid, “coordinates”, “latitude”)
nf90_put_att(ncid, varid, “coordinates”, “longitude”)
17
www.hdfgroup.org
HDF-EOS5
• Built on HDF5
• extends HDF5
• uses HDF5 library calls as a foundation
• Associates geolocation data to scientific data
• Additional definitions
• points, swaths, grids
URL: http://newsroom.gsfc.nasa.gov/sdptoolkit/docs/HDF-EOS_UG.pdf
18
www.hdfgroup.org
C Example
Create a swath:
HE5_SWcreate(file, "Swath 1");
Define dimensions:
HE5_SWdefdim(swid, "GeoXtrack", 180);
HE5_SWdefdim(swid, "GeoTrack", 360);
Define temperature data field:
HE5_SWdefdatafield(swid, “temp”, "GeoTrack,GeoXtrack", NULL,
H5T_NATIVE_FLOAT, 0);
Set _FillValue:
HE5_SWsetfillvalue(swid, “temp”, H5T_NATIVE_FLOAT, &value);
Write the temperature data:
HE5_SWwritefield(swid, “temp”, NULL, NULL, NULL, temp_array);
19
www.hdfgroup.org
C Example
Add units attribute:
size= strlen("Kelvin");
HE5_SWwritelocattr(swid, TEMP, UNITS, H5T_C_S1,
&size[0], (void*)kelvin);
Add long_name:
size= strlen("temperature");
HE5_SWwritelocattr(swid, “temp”, “long_name”, H5T_C_S1,
&size, (void*)temperature);
Add coordinates:
size= 2;
dtype= H5Tcopy(H5T_C_S1);
H5Tset_size(dtype, H5T_VARIABLE);
HE5_SWwritelocattr(swid, “temp”, “coordinates”, dtype,
&size, coorlist);
20
www.hdfgroup.org
FORTRAN77 Example
Create a swath:
swid = he5_swcreate(swfid, "Swath1")
Define the dimensions:
he5_swdefdim(swid, "GeoXtrack", 180)
he5_swdefdim(swid, "GeoTrack", 360)
Add the _FillValue:
he5_swsetfill(swid, "temp", HE5T_NATIVE_FLOAT, value)
Define the datafield:
he5_swdefdfld(swid, "temp", "GeoTrack,GeoXtrack", " ",
HE5T_NATIVE_FLOAT, 0)
21
www.hdfgroup.org
FORTRAN77 Example
Write the temperature data:
start= 0
stride= 1
edge(1)= 360
edge(2)= 180
he5_swwrfld(swid, "temp", start, stride, edge, temp_data)
Add the units attribute attribute:
he5_swwrlattr(swid,"temp","units", HE5T_NATIVE_CHAR, 6, "kelvin")
Add the long_name attribute:
he5_swwrlattr(swid, “temp”, “long_name”, HE5T_NATIVE_CHAR, 11,
"temperature”)
Add the coordinates attribute:
he5_swwrlattr(swid, “temp”, “coordinates”, HE5T_NATIVE_CHAR, 3, "lat")
he5_swwrlattr(swid, “temp”, “coordinates”, HE5T_NATIVE_CHAR, 3, "lon")
22
www.hdfgroup.org
HDFView
• A java tool used to browse and modify HDF4
and HDF5 files
• Easy-to-use GUI for fast editing
23
www.hdfgroup.org
HDFView
Step 1: Select an existing dataset
24
Step 2: Open the dataset attributes
Step 3: Add the attribute
www.hdfgroup.org
URLs
25
www.hdfgroup.org
Future Work
• h5edit to add CF attributes
26
www.hdfgroup.org
The HDF Group
Thank You!
27
www.hdfgroup.org
Acknowledgements
This work was supported by cooperative agreement
number NNX08AO77A from the National
Aeronautics and Space Administration (NASA).
Any opinions, findings, conclusions, or
recommendations expressed in this material are
those of the author[s] and do not necessarily reflect
the views of the National Aeronautics and Space
Administration.
28
www.hdfgroup.org
The HDF Group
Questions/comments?
29
www.hdfgroup.org
Dimension Scales
• API included with HDF5
• HDF5 datasets with additional metadata
• shows relationship to a dataset
• independent of a dataset
URL: http://www.hdfgroup.org/HDF5/doc/HL/RM_H5DS.html
30
www.hdfgroup.org
Programming Example
Uses same code as HDF5 example
Declare datasets as a dimension scale:
hid_t dataset[3];
// declare latitude and longitude datasets as a dimension scale
H5DSset_scale(dataset[1], “lat”);
H5DSset_scale(dataset[2], LON);
Attach the dimension scale:
// attach latitude to the temperature dataset
H5Dsattach_scale(dataset[0], dataset[1], 0);
// attach longitude to the temperature dataset
H5Dsattach_scale(dataset[0], dataset[2], 1);
31

More Related Content

What's hot

HDF5 Tools
HDF5 ToolsHDF5 Tools
Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11
corehard_by
 
An Overview of Hadoop
An Overview of HadoopAn Overview of Hadoop
An Overview of Hadoop
Asif Ali
 
Take advantage of C++ from Python
Take advantage of C++ from PythonTake advantage of C++ from Python
Take advantage of C++ from Python
Yung-Yu Chen
 
Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020
Yung-Yu Chen
 
PyHEP 2019: Python 3.8
PyHEP 2019: Python 3.8PyHEP 2019: Python 3.8
PyHEP 2019: Python 3.8
Henry Schreiner
 
Time Series Analysis Sample Code
Time Series Analysis Sample CodeTime Series Analysis Sample Code
Time Series Analysis Sample Code
Aiden Wu, FRM
 
HDF5 Advanced Topics: Selections, Object's Properties, Storage Methods and Fi...
HDF5 Advanced Topics: Selections, Object's Properties, Storage Methods and Fi...HDF5 Advanced Topics: Selections, Object's Properties, Storage Methods and Fi...
HDF5 Advanced Topics: Selections, Object's Properties, Storage Methods and Fi...
The HDF-EOS Tools and Information Center
 
Overview of Parallel HDF5 and Performance Tuning in HDF5 Library
Overview of Parallel HDF5 and Performance Tuning in HDF5 LibraryOverview of Parallel HDF5 and Performance Tuning in HDF5 Library
Overview of Parallel HDF5 and Performance Tuning in HDF5 Library
The HDF-EOS Tools and Information Center
 
Visualization Lifecycle
Visualization LifecycleVisualization Lifecycle
Visualization LifecycleRaffael Marty
 
Threads and Callbacks for Embedded Python
Threads and Callbacks for Embedded PythonThreads and Callbacks for Embedded Python
Threads and Callbacks for Embedded Python
Yi-Lung Tsai
 
AfterGlow
AfterGlowAfterGlow
AfterGlow
Raffael Marty
 
Debugger Principle Overview & GDB Tricks
Debugger Principle Overview & GDB TricksDebugger Principle Overview & GDB Tricks
Debugger Principle Overview & GDB Tricksdutor
 
PyHEP 2019: Python Histogramming Packages
PyHEP 2019: Python Histogramming PackagesPyHEP 2019: Python Histogramming Packages
PyHEP 2019: Python Histogramming Packages
Henry Schreiner
 
Boost.Python - domesticating the snake
Boost.Python - domesticating the snakeBoost.Python - domesticating the snake
Boost.Python - domesticating the snake
Sławomir Zborowski
 
ACAT 2017: GooFit 2.0
ACAT 2017: GooFit 2.0ACAT 2017: GooFit 2.0
ACAT 2017: GooFit 2.0
Henry Schreiner
 
Reproducible Computational Research in R
Reproducible Computational Research in RReproducible Computational Research in R
Reproducible Computational Research in R
Samuel Bosch
 
DIANA: Recent developments in GooFit
DIANA: Recent developments in GooFitDIANA: Recent developments in GooFit
DIANA: Recent developments in GooFit
Henry Schreiner
 
Hadoop Pig
Hadoop PigHadoop Pig
Hadoop Pig
Madhur Nawandar
 
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy
Dong-hee Na
 

What's hot (20)

HDF5 Tools
HDF5 ToolsHDF5 Tools
HDF5 Tools
 
Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11
 
An Overview of Hadoop
An Overview of HadoopAn Overview of Hadoop
An Overview of Hadoop
 
Take advantage of C++ from Python
Take advantage of C++ from PythonTake advantage of C++ from Python
Take advantage of C++ from Python
 
Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020
 
PyHEP 2019: Python 3.8
PyHEP 2019: Python 3.8PyHEP 2019: Python 3.8
PyHEP 2019: Python 3.8
 
Time Series Analysis Sample Code
Time Series Analysis Sample CodeTime Series Analysis Sample Code
Time Series Analysis Sample Code
 
HDF5 Advanced Topics: Selections, Object's Properties, Storage Methods and Fi...
HDF5 Advanced Topics: Selections, Object's Properties, Storage Methods and Fi...HDF5 Advanced Topics: Selections, Object's Properties, Storage Methods and Fi...
HDF5 Advanced Topics: Selections, Object's Properties, Storage Methods and Fi...
 
Overview of Parallel HDF5 and Performance Tuning in HDF5 Library
Overview of Parallel HDF5 and Performance Tuning in HDF5 LibraryOverview of Parallel HDF5 and Performance Tuning in HDF5 Library
Overview of Parallel HDF5 and Performance Tuning in HDF5 Library
 
Visualization Lifecycle
Visualization LifecycleVisualization Lifecycle
Visualization Lifecycle
 
Threads and Callbacks for Embedded Python
Threads and Callbacks for Embedded PythonThreads and Callbacks for Embedded Python
Threads and Callbacks for Embedded Python
 
AfterGlow
AfterGlowAfterGlow
AfterGlow
 
Debugger Principle Overview & GDB Tricks
Debugger Principle Overview & GDB TricksDebugger Principle Overview & GDB Tricks
Debugger Principle Overview & GDB Tricks
 
PyHEP 2019: Python Histogramming Packages
PyHEP 2019: Python Histogramming PackagesPyHEP 2019: Python Histogramming Packages
PyHEP 2019: Python Histogramming Packages
 
Boost.Python - domesticating the snake
Boost.Python - domesticating the snakeBoost.Python - domesticating the snake
Boost.Python - domesticating the snake
 
ACAT 2017: GooFit 2.0
ACAT 2017: GooFit 2.0ACAT 2017: GooFit 2.0
ACAT 2017: GooFit 2.0
 
Reproducible Computational Research in R
Reproducible Computational Research in RReproducible Computational Research in R
Reproducible Computational Research in R
 
DIANA: Recent developments in GooFit
DIANA: Recent developments in GooFitDIANA: Recent developments in GooFit
DIANA: Recent developments in GooFit
 
Hadoop Pig
Hadoop PigHadoop Pig
Hadoop Pig
 
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy
 

Similar to Adding CF Attributes to an HDF5 File

Overview of Parallel HDF5 and Performance Tuning in HDF5 Library
Overview of Parallel HDF5 and Performance Tuning in HDF5 LibraryOverview of Parallel HDF5 and Performance Tuning in HDF5 Library
Overview of Parallel HDF5 and Performance Tuning in HDF5 Library
The HDF-EOS Tools and Information Center
 
Overview of Parallel HDF5
Overview of Parallel HDF5Overview of Parallel HDF5
Overview of Parallel HDF5
The HDF-EOS Tools and Information Center
 
Parallel HDF5 Introductory Tutorial
Parallel HDF5 Introductory TutorialParallel HDF5 Introductory Tutorial
Parallel HDF5 Introductory Tutorial
The HDF-EOS Tools and Information Center
 
Introduction to HDF5 for HDF4 Users
Introduction to HDF5 for HDF4 UsersIntroduction to HDF5 for HDF4 Users
Introduction to HDF5 for HDF4 Users
The HDF-EOS Tools and Information Center
 
Introduction to HDF5 Data Model, Programming Model and Library APIs
Introduction to HDF5 Data Model, Programming Model and Library APIsIntroduction to HDF5 Data Model, Programming Model and Library APIs
Introduction to HDF5 Data Model, Programming Model and Library APIs
The HDF-EOS Tools and Information Center
 
PyModESt: A Python Framework for Staging of Geo-referenced Data on the Coll...
PyModESt: A Python Framework for Staging of Geo-referenced Data on the Coll...PyModESt: A Python Framework for Staging of Geo-referenced Data on the Coll...
PyModESt: A Python Framework for Staging of Geo-referenced Data on the Coll...
Andreas Schreiber
 
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, Datatypes
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, DatatypesHDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, Datatypes
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, Datatypes
The HDF-EOS Tools and Information Center
 
NetCDF and HDF5
NetCDF and HDF5NetCDF and HDF5
Interoperability with netCDF-4 - Experience with NPP and HDF-EOS5 products
Interoperability with netCDF-4 - Experience with NPP and HDF-EOS5 productsInteroperability with netCDF-4 - Experience with NPP and HDF-EOS5 products
Interoperability with netCDF-4 - Experience with NPP and HDF-EOS5 productsThe HDF-EOS Tools and Information Center
 
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
Codemotion
 
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
Codemotion
 
Reusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesReusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modules
Yevgeniy Brikman
 
20090701 Climate Data Staging
20090701 Climate Data Staging20090701 Climate Data Staging
20090701 Climate Data Staging
Henning Bergmeyer
 
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...
Athens Big Data
 
Apache Hive
Apache HiveApache Hive
Apache Hive
Ajit Koti
 
HDF5 Advanced Topics
HDF5 Advanced TopicsHDF5 Advanced Topics
Cloning Oracle EBS R12: A Step by Step Procedure
Cloning Oracle EBS R12: A Step by Step ProcedureCloning Oracle EBS R12: A Step by Step Procedure
Cloning Oracle EBS R12: A Step by Step Procedure
Orazer Technologies
 
H2O World - Intro to R, Python, and Flow - Amy Wang
H2O World - Intro to R, Python, and Flow - Amy WangH2O World - Intro to R, Python, and Flow - Amy Wang
H2O World - Intro to R, Python, and Flow - Amy Wang
Sri Ambati
 

Similar to Adding CF Attributes to an HDF5 File (20)

Overview of Parallel HDF5 and Performance Tuning in HDF5 Library
Overview of Parallel HDF5 and Performance Tuning in HDF5 LibraryOverview of Parallel HDF5 and Performance Tuning in HDF5 Library
Overview of Parallel HDF5 and Performance Tuning in HDF5 Library
 
Overview of Parallel HDF5
Overview of Parallel HDF5Overview of Parallel HDF5
Overview of Parallel HDF5
 
Parallel HDF5 Introductory Tutorial
Parallel HDF5 Introductory TutorialParallel HDF5 Introductory Tutorial
Parallel HDF5 Introductory Tutorial
 
Using HDF5 and Python: The H5py module
Using HDF5 and Python: The H5py moduleUsing HDF5 and Python: The H5py module
Using HDF5 and Python: The H5py module
 
Connecting HDF with ISO Metadata Standards
Connecting HDF with ISO Metadata StandardsConnecting HDF with ISO Metadata Standards
Connecting HDF with ISO Metadata Standards
 
Introduction to HDF5 for HDF4 Users
Introduction to HDF5 for HDF4 UsersIntroduction to HDF5 for HDF4 Users
Introduction to HDF5 for HDF4 Users
 
Introduction to HDF5 Data Model, Programming Model and Library APIs
Introduction to HDF5 Data Model, Programming Model and Library APIsIntroduction to HDF5 Data Model, Programming Model and Library APIs
Introduction to HDF5 Data Model, Programming Model and Library APIs
 
PyModESt: A Python Framework for Staging of Geo-referenced Data on the Coll...
PyModESt: A Python Framework for Staging of Geo-referenced Data on the Coll...PyModESt: A Python Framework for Staging of Geo-referenced Data on the Coll...
PyModESt: A Python Framework for Staging of Geo-referenced Data on the Coll...
 
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, Datatypes
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, DatatypesHDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, Datatypes
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, Datatypes
 
NetCDF and HDF5
NetCDF and HDF5NetCDF and HDF5
NetCDF and HDF5
 
Interoperability with netCDF-4 - Experience with NPP and HDF-EOS5 products
Interoperability with netCDF-4 - Experience with NPP and HDF-EOS5 productsInteroperability with netCDF-4 - Experience with NPP and HDF-EOS5 products
Interoperability with netCDF-4 - Experience with NPP and HDF-EOS5 products
 
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
 
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
Jörg Schad - Hybrid Cloud (Kubernetes, Spark, HDFS, …)-as-a-Service - Codemot...
 
Reusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesReusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modules
 
20090701 Climate Data Staging
20090701 Climate Data Staging20090701 Climate Data Staging
20090701 Climate Data Staging
 
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...
 
Apache Hive
Apache HiveApache Hive
Apache Hive
 
HDF5 Advanced Topics
HDF5 Advanced TopicsHDF5 Advanced Topics
HDF5 Advanced Topics
 
Cloning Oracle EBS R12: A Step by Step Procedure
Cloning Oracle EBS R12: A Step by Step ProcedureCloning Oracle EBS R12: A Step by Step Procedure
Cloning Oracle EBS R12: A Step by Step Procedure
 
H2O World - Intro to R, Python, and Flow - Amy Wang
H2O World - Intro to R, Python, and Flow - Amy WangH2O World - Intro to R, Python, and Flow - Amy Wang
H2O World - Intro to R, Python, and Flow - Amy Wang
 

More from The HDF-EOS Tools and Information Center

Cloud-Optimized HDF5 Files
Cloud-Optimized HDF5 FilesCloud-Optimized HDF5 Files
Cloud-Optimized HDF5 Files
The HDF-EOS Tools and Information Center
 
Accessing HDF5 data in the cloud with HSDS
Accessing HDF5 data in the cloud with HSDSAccessing HDF5 data in the cloud with HSDS
Accessing HDF5 data in the cloud with HSDS
The HDF-EOS Tools and Information Center
 
The State of HDF
The State of HDFThe State of HDF
Highly Scalable Data Service (HSDS) Performance Features
Highly Scalable Data Service (HSDS) Performance FeaturesHighly Scalable Data Service (HSDS) Performance Features
Highly Scalable Data Service (HSDS) Performance Features
The HDF-EOS Tools and Information Center
 
Creating Cloud-Optimized HDF5 Files
Creating Cloud-Optimized HDF5 FilesCreating Cloud-Optimized HDF5 Files
Creating Cloud-Optimized HDF5 Files
The HDF-EOS Tools and Information Center
 
HDF5 OPeNDAP Handler Updates, and Performance Discussion
HDF5 OPeNDAP Handler Updates, and Performance DiscussionHDF5 OPeNDAP Handler Updates, and Performance Discussion
HDF5 OPeNDAP Handler Updates, and Performance Discussion
The HDF-EOS Tools and Information Center
 
Hyrax: Serving Data from S3
Hyrax: Serving Data from S3Hyrax: Serving Data from S3
Hyrax: Serving Data from S3
The HDF-EOS Tools and Information Center
 
Accessing Cloud Data and Services Using EDL, Pydap, MATLAB
Accessing Cloud Data and Services Using EDL, Pydap, MATLABAccessing Cloud Data and Services Using EDL, Pydap, MATLAB
Accessing Cloud Data and Services Using EDL, Pydap, MATLAB
The HDF-EOS Tools and Information Center
 
HDF - Current status and Future Directions
HDF - Current status and Future DirectionsHDF - Current status and Future Directions
HDF - Current status and Future Directions
The HDF-EOS Tools and Information Center
 
HDFEOS.org User Analsys, Updates, and Future
HDFEOS.org User Analsys, Updates, and FutureHDFEOS.org User Analsys, Updates, and Future
HDFEOS.org User Analsys, Updates, and Future
The HDF-EOS Tools and Information Center
 
HDF - Current status and Future Directions
HDF - Current status and Future Directions HDF - Current status and Future Directions
HDF - Current status and Future Directions
The HDF-EOS Tools and Information Center
 
H5Coro: The Cloud-Optimized Read-Only Library
H5Coro: The Cloud-Optimized Read-Only LibraryH5Coro: The Cloud-Optimized Read-Only Library
H5Coro: The Cloud-Optimized Read-Only Library
The HDF-EOS Tools and Information Center
 
MATLAB Modernization on HDF5 1.10
MATLAB Modernization on HDF5 1.10MATLAB Modernization on HDF5 1.10
MATLAB Modernization on HDF5 1.10
The HDF-EOS Tools and Information Center
 
HDF for the Cloud - Serverless HDF
HDF for the Cloud - Serverless HDFHDF for the Cloud - Serverless HDF
HDF for the Cloud - Serverless HDF
The HDF-EOS Tools and Information Center
 
HDF5 <-> Zarr
HDF5 <-> ZarrHDF5 <-> Zarr
HDF for the Cloud - New HDF Server Features
HDF for the Cloud - New HDF Server FeaturesHDF for the Cloud - New HDF Server Features
HDF for the Cloud - New HDF Server Features
The HDF-EOS Tools and Information Center
 
Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3
Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3
Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3
The HDF-EOS Tools and Information Center
 
STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...
STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...
STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...
The HDF-EOS Tools and Information Center
 
HDF5 and Ecosystem: What Is New?
HDF5 and Ecosystem: What Is New?HDF5 and Ecosystem: What Is New?
HDF5 and Ecosystem: What Is New?
The HDF-EOS Tools and Information Center
 
HDF5 Roadmap 2019-2020
HDF5 Roadmap 2019-2020HDF5 Roadmap 2019-2020

More from The HDF-EOS Tools and Information Center (20)

Cloud-Optimized HDF5 Files
Cloud-Optimized HDF5 FilesCloud-Optimized HDF5 Files
Cloud-Optimized HDF5 Files
 
Accessing HDF5 data in the cloud with HSDS
Accessing HDF5 data in the cloud with HSDSAccessing HDF5 data in the cloud with HSDS
Accessing HDF5 data in the cloud with HSDS
 
The State of HDF
The State of HDFThe State of HDF
The State of HDF
 
Highly Scalable Data Service (HSDS) Performance Features
Highly Scalable Data Service (HSDS) Performance FeaturesHighly Scalable Data Service (HSDS) Performance Features
Highly Scalable Data Service (HSDS) Performance Features
 
Creating Cloud-Optimized HDF5 Files
Creating Cloud-Optimized HDF5 FilesCreating Cloud-Optimized HDF5 Files
Creating Cloud-Optimized HDF5 Files
 
HDF5 OPeNDAP Handler Updates, and Performance Discussion
HDF5 OPeNDAP Handler Updates, and Performance DiscussionHDF5 OPeNDAP Handler Updates, and Performance Discussion
HDF5 OPeNDAP Handler Updates, and Performance Discussion
 
Hyrax: Serving Data from S3
Hyrax: Serving Data from S3Hyrax: Serving Data from S3
Hyrax: Serving Data from S3
 
Accessing Cloud Data and Services Using EDL, Pydap, MATLAB
Accessing Cloud Data and Services Using EDL, Pydap, MATLABAccessing Cloud Data and Services Using EDL, Pydap, MATLAB
Accessing Cloud Data and Services Using EDL, Pydap, MATLAB
 
HDF - Current status and Future Directions
HDF - Current status and Future DirectionsHDF - Current status and Future Directions
HDF - Current status and Future Directions
 
HDFEOS.org User Analsys, Updates, and Future
HDFEOS.org User Analsys, Updates, and FutureHDFEOS.org User Analsys, Updates, and Future
HDFEOS.org User Analsys, Updates, and Future
 
HDF - Current status and Future Directions
HDF - Current status and Future Directions HDF - Current status and Future Directions
HDF - Current status and Future Directions
 
H5Coro: The Cloud-Optimized Read-Only Library
H5Coro: The Cloud-Optimized Read-Only LibraryH5Coro: The Cloud-Optimized Read-Only Library
H5Coro: The Cloud-Optimized Read-Only Library
 
MATLAB Modernization on HDF5 1.10
MATLAB Modernization on HDF5 1.10MATLAB Modernization on HDF5 1.10
MATLAB Modernization on HDF5 1.10
 
HDF for the Cloud - Serverless HDF
HDF for the Cloud - Serverless HDFHDF for the Cloud - Serverless HDF
HDF for the Cloud - Serverless HDF
 
HDF5 <-> Zarr
HDF5 <-> ZarrHDF5 <-> Zarr
HDF5 <-> Zarr
 
HDF for the Cloud - New HDF Server Features
HDF for the Cloud - New HDF Server FeaturesHDF for the Cloud - New HDF Server Features
HDF for the Cloud - New HDF Server Features
 
Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3
Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3
Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3
 
STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...
STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...
STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...
 
HDF5 and Ecosystem: What Is New?
HDF5 and Ecosystem: What Is New?HDF5 and Ecosystem: What Is New?
HDF5 and Ecosystem: What Is New?
 
HDF5 Roadmap 2019-2020
HDF5 Roadmap 2019-2020HDF5 Roadmap 2019-2020
HDF5 Roadmap 2019-2020
 

Recently uploaded

AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 

Recently uploaded (20)

AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 

Adding CF Attributes to an HDF5 File

  • 1. www.hdfgroup.org The HDF Group 1 Adding CF Attributes to an HDF5 File Isayah Reed The HDF Group
  • 2. www.hdfgroup.org Climate and Forecast Conventions • Metadata conventions for earth science data • Included in same file as data • Description of what the data represents • Uses values of universal attribute • Extension of COARDS* conventions • Allows comparison of data from different sources *Cooperative Ocean/Atmosphere Research Data Service URL: http://cf-pcmdi.llnl.gov/documents/cf-conventions/1.5/cf-conventions.pdf
  • 3. www.hdfgroup.org Overview • Programming examples that add CF attributes to an HDF5 file • HDF5 • C, FORTRAN90, Python • netCDF4 • C, FORTRAN90 • HDF5-EOS5 • C, FORTRAN77 • HDFView to add CF attributes 3
  • 4. www.hdfgroup.org Problem Set Examples are based on a simple application 4 Field Description temp Temperature 180x360 array lat Latitude 1-D array, size 180 lon Longitude 1-D array, size 360
  • 5. www.hdfgroup.org CF attributes added Attribute Description long_name A long descriptive name for the data. units The quantity of measurement. coordinates A list of the associated coordinate variable names of the variable. _FillValue A missing or undefined value.
  • 6. www.hdfgroup.org HDF5-C Example Create the HDF5 file: file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); 6 Create temperature dataset: dimsa[0] = 180; dimsa[1] = 360; dataset= H5Dcreate(file, “temp”, H5T_NATIVE_FLOAT, H5Screate_simple(2, dimsa, NULL), H5P_DEFAULT); Write temperature dataset: H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, temp_array); Add the _FillValue: H5Acreate(dataset, “_FillValue”, H5T_NATIVE_FLOAT, H5Screate(H5S_SCALAR), H5P_DEFAULT); H5Awrite(attr, H5T_NATIVE_FLOAT,&value);
  • 7. www.hdfgroup.org HDF5-C Example Add the units attribute: H5Tset_size(stringType, (hsize_t)strlen(“kelvin”)); attr= H5Acreate(dataset, “units”, stringType, H5S_SCALAR, H5P_DEFAULT); H5Awrite(attr, stringType, ”kelvin”); 7 Add the long_name attribute: H5Tset_size(stringType, (hsize_t) strlen("temperature")); attr= H5Acreate(dataset, “long_name”, stringType, stringSpace, H5P_DEFAULT, H5P_DEFAULT); H5Awrite(attr, stringType, "temperature"); Add the coordinates attribute: arraySpace = H5Screate_simple(1, &dimsa[0], NULL); H5Tset_size(arrayType, H5T_VARIABLE); attr= H5Acreate(dataset, “coordinates”, arrayType, arraySpace, H5P_DEFAULT); H5Awrite(attr, arrayType, coorlist);
  • 8. www.hdfgroup.org FORTRAN90 Example Initialize FORTRAN interface and create the HDF5 file: CALL h5open_f(hdferr) CALL h5fcreate_f(FILENAME, H5F_ACC_TRUNC_F, file, hdferr) 8 Create temperature dataset: CALL h5screate_simple_f(2, temp_dims, space, status) !! temp_dims = (360, 180) CALL h5dcreate_f(file, TEMPERATURE, h5t_ieee_f32le, space, dset, status) Write temperature dataset: CALL h5dwrite_f(dset, H5T_NATIVE_DOUBLE, temp_data, & temp_dims, status) Add the _FillValue: CALL h5screate_f(H5S_SCALAR_F, space, status) CALL h5tcopy_f(h5t_ieee_f32le, atype_id, status) CALL h5acreate_f(dset, FILLVALUE, atype_id, space, & attr_id, status) CALL h5awrite_f(attr_id, H5T_NATIVE_DOUBLE, -999, 1, status)
  • 9. www.hdfgroup.org FORTRAN90 Example Add the units attribute: CALL h5screate_f(H5S_SCALAR_F, space, status) CALL h5tcopy_f(H5T_NATIVE_CHARACTER, atype_id, status) CALL h5tset_size_f(atype_id, 6, status) CALL h5acreate_f(dset, UNITS, atype_id, space, attr_id, status) CALL h5awrite_f(attr_id, atype_id, "kelvin", dimsf, status) 9 Add the long_name attribute: CALL h5tset_size_f(atype_id, strlen, status) CALL h5acreate_f(dset, “long_name”, atype_id, space, & attr_id, status) CALL h5awrite_f(attr_id, atype_id, “temperature”, 1, status) Add the coordinates attribute: CALL h5screate_simple_f(1, 2, space, status) CALL h5tset_size_f(atype_id, strlen, status) CALL h5acreate_f(dset, “coordinates”, atype_id, space, & attr_id, status) CALL h5awrite_f(attr_id, atype_id, coorlist, 2, status)
  • 10. www.hdfgroup.org H5PY • A Python interface to the HDF5 library • Supports nearly all HDF5-C features • Combines advantages of Python and C • Shorter and simpler function calls • Powerful computational abilities • Requires numpy and scipy URL: http://code.google.com/p/h5py
  • 11. www.hdfgroup.org H5PY Example Create an HDF5 file: file = h5py.File ("cf_example.h5", 'w') Create/write dataset: temp_dset = file.create_dataset ('temp', data=temp_array) Add the _FIllValue: temp_dset.attrs.create ('_FillValue', data=-999.0, dtype ='f')
  • 12. www.hdfgroup.org H5PY Example Add the units attribute: temp_dset.attrs["units"] = "kelvin” Add the long_name attribute: temp_dset.attrs["long_name"] = "temperature” Add the coordinates attribute: vlen = h5py.special_dtype (vlen = str) temp_dset.attrs.create ('coordinates', data = ['lat', 'lon'], dtype=vlen)
  • 13. www.hdfgroup.org netCDF-4 • Extends netCDF3 • Built on the HDF5 library • Uses HDF5 for storage and performance • Chunking and compression • C and FORTRAN libraries • Simple function calls URL: http://www.unidata.ucar.edu/software/netcdf/docs/netcdf
  • 14. www.hdfgroup.org C Example Create a netCDF4 file: nc_create(FILE_NAME, NC_NETCDF4|NC_CLOBBER, &ncid) Define the temperature variable: nc_def_var(ncid, “temp”, NC_FLOAT, 2,dimsa, &varid); Add the _FillValue: nc_def_var_fill(ncid, varid, 0, &fillvalue); Write the temperature data: nc_put_var_float(ncid, varid, &temp_array[0][0])); 14
  • 15. www.hdfgroup.org C Example Add the units attribute: nc_put_att_text(ncid, varid, “units”, strlen(“kelvin”), “kelvin”); Add the long_name attribute: nc_put_att_text(ncid, varid, “long_name”, strlen(“temperature”), “temperature”); Add the coordinates attribute: char *coorlist[2]= {"lat", "lon"}; nc_put_att_string(ncid, varid, “coordinates”, 2, (const char**)&coorlist); 15
  • 16. www.hdfgroup.org FORTRAN90 Example Create the netCDF4 file: nf90_create(path=filename, cmode=IOR(NF90_CLOBBER,NF90_HDF5), ncid=ncid) Define the temperature variable: nf90_def_var(ncid, “temp”, NF90_FLOAT, (/180,360/), varid) Add the _FillValue: nf90_def_var_fill(ncid, varid, 0, -999) Write the temperature data: nf90_put_var(ncid, varid, temp_data) 16
  • 17. www.hdfgroup.org FORTRAN90 Example Add the units attribute: nf90_put_att(ncid, varid, “units, "kelvin") Add the long_name attribute: nf90_put_att(ncid, varid, “long_name”, "temperature") Add the coordinates attribute: nf90_put_att(ncid, varid, “coordinates”, “latitude”) nf90_put_att(ncid, varid, “coordinates”, “longitude”) 17
  • 18. www.hdfgroup.org HDF-EOS5 • Built on HDF5 • extends HDF5 • uses HDF5 library calls as a foundation • Associates geolocation data to scientific data • Additional definitions • points, swaths, grids URL: http://newsroom.gsfc.nasa.gov/sdptoolkit/docs/HDF-EOS_UG.pdf 18
  • 19. www.hdfgroup.org C Example Create a swath: HE5_SWcreate(file, "Swath 1"); Define dimensions: HE5_SWdefdim(swid, "GeoXtrack", 180); HE5_SWdefdim(swid, "GeoTrack", 360); Define temperature data field: HE5_SWdefdatafield(swid, “temp”, "GeoTrack,GeoXtrack", NULL, H5T_NATIVE_FLOAT, 0); Set _FillValue: HE5_SWsetfillvalue(swid, “temp”, H5T_NATIVE_FLOAT, &value); Write the temperature data: HE5_SWwritefield(swid, “temp”, NULL, NULL, NULL, temp_array); 19
  • 20. www.hdfgroup.org C Example Add units attribute: size= strlen("Kelvin"); HE5_SWwritelocattr(swid, TEMP, UNITS, H5T_C_S1, &size[0], (void*)kelvin); Add long_name: size= strlen("temperature"); HE5_SWwritelocattr(swid, “temp”, “long_name”, H5T_C_S1, &size, (void*)temperature); Add coordinates: size= 2; dtype= H5Tcopy(H5T_C_S1); H5Tset_size(dtype, H5T_VARIABLE); HE5_SWwritelocattr(swid, “temp”, “coordinates”, dtype, &size, coorlist); 20
  • 21. www.hdfgroup.org FORTRAN77 Example Create a swath: swid = he5_swcreate(swfid, "Swath1") Define the dimensions: he5_swdefdim(swid, "GeoXtrack", 180) he5_swdefdim(swid, "GeoTrack", 360) Add the _FillValue: he5_swsetfill(swid, "temp", HE5T_NATIVE_FLOAT, value) Define the datafield: he5_swdefdfld(swid, "temp", "GeoTrack,GeoXtrack", " ", HE5T_NATIVE_FLOAT, 0) 21
  • 22. www.hdfgroup.org FORTRAN77 Example Write the temperature data: start= 0 stride= 1 edge(1)= 360 edge(2)= 180 he5_swwrfld(swid, "temp", start, stride, edge, temp_data) Add the units attribute attribute: he5_swwrlattr(swid,"temp","units", HE5T_NATIVE_CHAR, 6, "kelvin") Add the long_name attribute: he5_swwrlattr(swid, “temp”, “long_name”, HE5T_NATIVE_CHAR, 11, "temperature”) Add the coordinates attribute: he5_swwrlattr(swid, “temp”, “coordinates”, HE5T_NATIVE_CHAR, 3, "lat") he5_swwrlattr(swid, “temp”, “coordinates”, HE5T_NATIVE_CHAR, 3, "lon") 22
  • 23. www.hdfgroup.org HDFView • A java tool used to browse and modify HDF4 and HDF5 files • Easy-to-use GUI for fast editing 23
  • 24. www.hdfgroup.org HDFView Step 1: Select an existing dataset 24 Step 2: Open the dataset attributes Step 3: Add the attribute
  • 26. www.hdfgroup.org Future Work • h5edit to add CF attributes 26
  • 28. www.hdfgroup.org Acknowledgements This work was supported by cooperative agreement number NNX08AO77A from the National Aeronautics and Space Administration (NASA). Any opinions, findings, conclusions, or recommendations expressed in this material are those of the author[s] and do not necessarily reflect the views of the National Aeronautics and Space Administration. 28
  • 30. www.hdfgroup.org Dimension Scales • API included with HDF5 • HDF5 datasets with additional metadata • shows relationship to a dataset • independent of a dataset URL: http://www.hdfgroup.org/HDF5/doc/HL/RM_H5DS.html 30
  • 31. www.hdfgroup.org Programming Example Uses same code as HDF5 example Declare datasets as a dimension scale: hid_t dataset[3]; // declare latitude and longitude datasets as a dimension scale H5DSset_scale(dataset[1], “lat”); H5DSset_scale(dataset[2], LON); Attach the dimension scale: // attach latitude to the temperature dataset H5Dsattach_scale(dataset[0], dataset[1], 0); // attach longitude to the temperature dataset H5Dsattach_scale(dataset[0], dataset[2], 1); 31