diff options
author | Allen Byrne <50328838+byrnHDF@users.noreply.github.com> | 2022-09-09 01:33:47 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-09 01:33:47 (GMT) |
commit | c28fb80cf600c0cb84f78ab75f51515d916091f7 (patch) | |
tree | 4aa78f3d0575a4e1c68705f269c1a5b47df07faa /doxygen | |
parent | 32a0ed93dc75fb9cfe6f2e4d59233f4c600d746f (diff) | |
download | hdf5-c28fb80cf600c0cb84f78ab75f51515d916091f7.zip hdf5-c28fb80cf600c0cb84f78ab75f51515d916091f7.tar.gz hdf5-c28fb80cf600c0cb84f78ab75f51515d916091f7.tar.bz2 |
Main Getting Started page and the three HDF Resources have pages. (#2092)
HDFView is still under construction, but mostly there.
Merge the Fortran doxygen changes from develop PR, updated RM index.
Adjusted references to UG and created some TODOs for missing UG modules
Some may just need a reference back to a section of the user guide. Made
some Fortran doxygen changes for overall consistency.
Diffstat (limited to 'doxygen')
47 files changed, 1256 insertions, 26 deletions
diff --git a/doxygen/CMakeLists.txt b/doxygen/CMakeLists.txt index 17d8da7..472c4dc 100644 --- a/doxygen/CMakeLists.txt +++ b/doxygen/CMakeLists.txt @@ -29,7 +29,7 @@ if (DOXYGEN_FOUND) set (DOXYGEN_SEARCHENGINE_URL) set (DOXYGEN_STRIP_FROM_PATH ${HDF5_SOURCE_DIR}) set (DOXYGEN_STRIP_FROM_INC_PATH ${HDF5_SOURCE_DIR}) - set (DOXYGEN_PREDEFINED "H5_HAVE_DIRECT H5_HAVE_LIBHDFS H5_HAVE_MAP_API H5_HAVE_PARALLEL H5_HAVE_ROS3_VFD") + set (DOXYGEN_PREDEFINED "H5_HAVE_DIRECT H5_HAVE_LIBHDFS H5_HAVE_MAP_API H5_HAVE_PARALLEL H5_HAVE_ROS3_VFD H5_DOXYGEN_FORTRAN") # This configure and individual custom targets work together # Replace variables inside @@ with the current values diff --git a/doxygen/Doxyfile.in b/doxygen/Doxyfile.in index 297c7b2..0197870 100644 --- a/doxygen/Doxyfile.in +++ b/doxygen/Doxyfile.in @@ -280,13 +280,13 @@ OPTIMIZE_OUTPUT_FOR_C = YES # qualified scopes will look different, etc. # The default value is: NO. -OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_OUTPUT_JAVA = YES # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. -OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_FOR_FORTRAN = YES # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. diff --git a/doxygen/aliases b/doxygen/aliases index 71a5488..38a5a40 100644 --- a/doxygen/aliases +++ b/doxygen/aliases @@ -328,3 +328,11 @@ ALIASES += storage_type="<table><tr><td>#H5G_STORAGE_TYPE_COMPACT</td><td>Compac ALIASES += str_pad_type="<table><tr><td>#H5T_STR_NULLTERM</td><td>0</td><td>Null terminate (as C does)</td></tr><tr><td>#H5T_STR_NULLPAD</td><td>1</td><td>Pad with zeros</td></tr><tr><td>#H5T_STR_SPACEPAD</td><td>2</td><td>Pad with spaces (as FORTRAN does)</td></tr></table>" ALIASES += see_virtual=" \see Supporting Functions: H5Pget_layout(), H5Pset_layout(), H5Sget_regular_hyperslab(), H5Sis_regular_hyperslab(), H5Sselect_hyperslab() \see VDS Functions: H5Pget_virtual_count(), H5Pget_virtual_dsetname(), H5Pget_virtual_filename(), H5Pget_virtual_prefix(), H5Pget_virtual_printf_gap(), H5Pget_virtual_srcspace(), H5Pget_virtual_view(), H5Pget_virtual_vspace(), H5Pset_virtual(), H5Pset_virtual_prefix(), H5Pset_virtual_printf_gap(), H5Pset_virtual_view()" ALIASES += obj_info_fields="<table><tr><th>Flag</th><th>Purpose</th></tr><tr><td>#H5O_INFO_BASIC</td><td>Fill in the fileno, addr, type, and rc fields</td></tr><tr> <td>#H5O_INFO_TIME</td><td>Fill in the atime, mtime, ctime, and btime fields</td></tr><tr> <td>#H5O_INFO_NUM_ATTRS</td> <td>Fill in the num_attrs field</td></tr><tr><td>#H5O_INFO_HDR</td><td>Fill in the num_attrs field</td></tr><tr><td>#H5O_INFO_META_SIZE</td><td>Fill in the meta_size field</td></tr><tr><td>#H5O_INFO_ALL</td><td>#H5O_INFO_BASIC | #H5O_INFO_TIME | #H5O_INFO_NUM_ATTRS | #H5O_INFO_HDR | #H5O_INFO_META_SIZE</td></tr></table>" + +################################################################################ +# FORTRAN +################################################################################ + +ALIASES += fortran_error="Returns 0 if successful and -1 if it fails." +ALIASES += fortran_approved="The preferred API, Fortran 2003 version." +ALIASES += fortran_obsolete="Obsolete API, use the Fortran 2003 version instead." diff --git a/doxygen/dox/GettingStarted.dox b/doxygen/dox/GettingStarted.dox index 880491d..e36d0ee 100644 --- a/doxygen/dox/GettingStarted.dox +++ b/doxygen/dox/GettingStarted.dox @@ -1,3 +1,95 @@ -/** \page GettingStarted \Code{Hello, HDF5!} +/** @page GettingStarted Getting Started with HDF5 - */
\ No newline at end of file +\section sec_learn Learning HDF5 +There are several resources for learning about HDF5. The HDF Group provides an on-line HDF5 tutorial, +documentation, examples, and videos. There are also tutorials provided by other organizations that are very useful for learning about HDF5. + +\subsection subsec_learn_intro The HDF Group Resources +For a quick introduction to HDF5 see the following: +<table> +<tr> +<td style="background-color:#F5F5F5"> +@ref IntroHDF5 +</td> +<td> +A very brief introduction to HDF5 and the HDF5 programming model and APIs +</td> +</tr> +<tr> +<td style="background-color:#F5F5F5"> +@ref LearnHDFView +</td> +<td> +A tutorial for learning how to use HDFView. NO programming involved! +</td> +</tr> +<tr> +<td style="background-color:#F5F5F5"> +@ref LearnBasics +</td> +<td> +Step by step instructions for learning HDF5 that include programming examples +</td> +</tr> +</table> + +\subsection subsec_learn_tutor The HDF Group Tutorials and Examples +These tutorials and examples are available for learning about the HDF5 High Level APIs, tools, +Parallel HDF5, and the HDF5-1.10 VDS and SWMR new features: +<table> +<tr> +<td style="background-color:#F5F5F5"> +<a href="https://portal.hdfgroup.org/display/HDF5/Introduction+to+the+HDF5+High+Level+APIs">Using the High Level APIs</a> +</td> +<td> +H5LT (Lite) H5IM (Image) H5TB (Table) H5PT (Packet Table) H5DS (Dimension Scale) +</td> +</tr> +<tr> +<td style="background-color:#F5F5F5"> +<a href="https://portal.hdfgroup.org/display/HDF5/Introduction+to+Parallel+HDF5">Introduction to Parallel HDF5</a> +</td> +<td> +A brief introduction to Parallel HDF5. If you are new to HDF5 please see the @ref LearnBasics topic first. +</td> +</tr> +<tr> +<td style="background-color:#F5F5F5"> +<a href="https://portal.hdfgroup.org/display/HDF5/Tools+for+Viewing+and+Editing+HDF5+Files">Tools for Viewing and Editing HDF5 Files</a> +</td> +<td> +\li @ref LearnHDFView +\li <a href="https://portal.hdfgroup.org/display/HDF5/Using+the+HDF5+Command-line+Tools">Using the HDF5 Command-line Tools</a> +\li <a href="https://portal.hdfgroup.org/display/HDF5/USE+CASE%3A+Examining+a+JPSS+NPP+File+with+HDF5+tools">Use Case - JPSS NPP Files</a> +</td> +</tr> +<tr> +<td style="background-color:#F5F5F5"> +HDF5-1.10 New Features +</td> +<td> +\li <a href="https://portal.hdfgroup.org/display/HDF5/Introduction+to+the+Virtual+Dataset++-+VDS">Introduction to the Virtual Dataset - VDS</a> +\li <a href="https://portal.hdfgroup.org/pages/viewpage.action?pageId=48812567">Introduction to Single-Writer/Multiple-Reader (SWMR)</a> +</td> +</tr> +<tr> +<td style="background-color:#F5F5F5"> +<a href="https://portal.hdfgroup.org/display/HDF5/HDF5+Examples">Example Programs</a> +</td> +<td> +Example Programs +</td> +</tr> +<tr> +<td style="background-color:#F5F5F5"> +Videos +</td> +<td> +\li <a href="https://www.youtube.com/watch?v=BAjsCldRMMc">Introduction to HDF5</a> +\li <a href="https://www.youtube.com/watch?v=qrI27pI0P1E">Parallel HDF5</a> +</td> +</tr> +</table> + +@subpage IntroHDF5 +*/ diff --git a/doxygen/dox/IntroHDF5.dox b/doxygen/dox/IntroHDF5.dox new file mode 100644 index 0000000..cd192a3 --- /dev/null +++ b/doxygen/dox/IntroHDF5.dox @@ -0,0 +1,595 @@ +/** @page IntroHDF5 Introduction to HDF5 + +\section sec_intro_desc HDF5 Description +HDF5 consists of a file format for storing HDF5 data, a data model for logically organizing and accessing +HDF5 data from an application, and the software (libraries, language interfaces, and tools) for working with this format. + +\subsection subsec_intro_desc_file File Format +HDF5 consists of a file format for storing HDF5 data, a data model for logically organizing and accessing HDF5 data from an application, +and the software (libraries, language interfaces, and tools) for working with this format. + +\subsection subsec_intro_desc_dm Data Model +The HDF5 Data Model, also known as the HDF5 Abstract (or Logical) Data Model consists of +the building blocks for data organization and specification in HDF5. + +An HDF5 file (an object in itself) can be thought of as a container (or group) that holds +a variety of heterogeneous data objects (or datasets). The datasets can be images, tables, +graphs, and even documents, such as PDF or Excel: + +<table> +<tr> +<td> +\image html fileobj.png +</td> +</tr> +</table> + +The two primary objects in the HDF5 Data Model are groups and datasets. + +There are also a variety of other objects in the HDF5 Data Model that support groups and datasets, +including datatypes, dataspaces, properties and attributes. + +\subsubsection subsec_intro_desc_dm_group Groups +HDF5 groups (and links) organize data objects. Every HDF5 file contains a root group that can +contain other groups or be linked to objects in other files. + +<table> +<caption>There are two groups in the HDF5 file depicted above: Viz and SimOut. +Under the Viz group are a variety of images and a table that is shared with the SimOut group. +The SimOut group contains a 3-dimensional array, a 2-dimensional array and a link to a 2-dimensional +array in another HDF5 file.</caption> +<tr> +<td> +\image html group.png +</td> +</tr> +</table> + +Working with groups and group members is similar in many ways to working with directories and files +in UNIX. As with UNIX directories and files, objects in an HDF5 file are often described by giving +their full (or absolute) path names. +\li / signifies the root group. +\li /foo signifies a member of the root group called foo. +\li /foo/zoo signifies a member of the group foo, which in turn is a member of the root group. + +\subsubsection subsec_intro_desc_dm_dset Datasets +HDF5 datasets organize and contain the “raw” data values. A dataset consists of metadata +that describes the data, in addition to the data itself: + +<table> +<caption>In this picture, the data is stored as a three dimensional dataset of size 4 x 5 x 6 with an integer datatype. +It contains attributes, Time and Pressure, and the dataset is chunked and compressed.</caption> +<tr> +<td> +\image html dataset.png +</td> +</tr> +</table> + +Datatypes, dataspaces, properties and (optional) attributes are HDF5 objects that describe a dataset. +The datatype describes the individual data elements. + +\subsection subsec_intro_desc_props Datatypes, Dataspaces, Properties and Attributes + +\subsubsection subsec_intro_desc_prop_dtype Datatypes +The datatype describes the individual data elements in a dataset. It provides complete information for +data conversion to or from that datatype. + +<table> +<caption>In the dataset depicted, each element of the dataset is a 32-bit integer.</caption> +<tr> +<td> +\image html datatype.png +</td> +</tr> +</table> + +Datatypes in HDF5 can be grouped into: +<ul> +<li> +<b>Pre-Defined Datatypes</b>: These are datatypes that are created by HDF5. They are actually opened (and closed) +by HDF5 and can have different values from one HDF5 session to the next. There are two types of pre-defined datatypes: +<ul> +<li> +Standard datatypes are the same on all platforms and are what you see in an HDF5 file. Their names are of the form +H5T_ARCH_BASE where ARCH is an architecture name and BASE is a programming type name. For example, #H5T_IEEE_F32BE +indicates a standard Big Endian floating point type. +</li> +<li> +Native datatypes are used to simplify memory operations (reading, writing) and are NOT the same on different platforms. +For example, #H5T_NATIVE_INT indicates an int (C). +</li> +</ul> +</li> +<li> +<b>Derived Datatypes</b>: These are datatypes that are created or derived from the pre-defined datatypes. +An example of a commonly used derived datatype is a string of more than one character. Compound datatypes +are also derived types. A compound datatype can be used to create a simple table, and can also be nested, +in which it includes one more other compound datatypes. +<table> +<caption>This is an example of a dataset with a compound datatype. Each element in the dataset consists +of a 16-bit integer, a character, a 32-bit integer, and a 2x3x2 array of 32-bit floats (the datatype). +It is a 2-dimensional 5 x 3 array (the dataspace). The datatype should not be confused with the dataspace. +</caption> +<tr> +<td> +\image html cmpnddtype.png +</td> +</tr> +</table> +</li> +</ul> + +\subsubsection subsec_intro_desc_prop_dspace Dataspaces +A dataspace describes the layout of a dataset’s data elements. It can consist of no elements (NULL), +a single element (scalar), or a simple array. + +<table> +<caption>This image illustrates a dataspace that is an array with dimensions of 5 x 3 and a rank (number of dimensions) of 2.</caption> +<tr> +<td> +\image html dataspace1.png +</td> +</tr> +</table> + +A dataspace can have dimensions that are fixed (unchanging) or unlimited, which means they can grow +in size (i.e. they are extendible). + +There are two roles of a dataspace: +\li It contains the spatial information (logical layout) of a dataset stored in a file. This includes the rank and dimensions of a dataset, which are a permanent part of the dataset definition. +\li It describes an application’s data buffers and data elements participating in I/O. In other words, it can be used to select a portion or subset of a dataset. + +<table> +<caption>The dataspace is used to describe both the logical layout of a dataset and a subset of a dataset.</caption> +<tr> +<td> +\image html dataspace.png +</td> +</tr> +</table> + +\subsubsection subsec_intro_desc_prop_property Properties +A property is a characteristic or feature of an HDF5 object. There are default properties which +handle the most common needs. These default properties can be modified using the HDF5 Property +List API to take advantage of more powerful or unusual features of HDF5 objects. + +<table> +<tr> +<td> +\image html properties.png +</td> +</tr> +</table> + +For example, the data storage layout property of a dataset is contiguous by default. For better +performance, the layout can be modified to be chunked or chunked and compressed: + +\subsubsection subsec_intro_desc_prop_attr Attributes +Attributes can optionally be associated with HDF5 objects. They have two parts: a name and a value. +Attributes are accessed by opening the object that they are attached to so are not independent objects. +Typically an attribute is small in size and contains user metadata about the object that it is attached to. + +Attributes look similar to HDF5 datasets in that they have a datatype and dataspace. However, they +do not support partial I/O operations, and they cannot be compressed or extended. + +\subsection subsec_intro_desc_soft HDF5 Software +The HDF5 software is written in C and includes optional wrappers for C++, FORTRAN (90 and F2003), +and Java. The HDF5 binary distribution consists of the HDF5 libraries, include files, command-line +utilities, scripts for compiling applications, and example programs. + +\subsubsection subsec_intro_desc_soft_apis HDF5 APIs and Libraries +There are APIs for each type of object in HDF5. For example, all C routines in the HDF5 library +begin with a prefix of the form H5*, where * is one or two uppercase letters indicating the type +of object on which the function operates: +\li @ref H5A <b>A</b>ttribute Interface +\li @ref H5D <b>D</b>ataset Interface +\li @ref H5F <b>F</b>ile Interface + +The HDF5 High Level APIs simplify many of the steps required to create and access objects, as well +as providing templates for storing objects. Following is a list of the High Level APIs: +\li HDF5 @ref H5LT (H5LT) – simplifies steps in creating datasets and attributes +\li HDF5 @ref H5IM (H5IM) – defines a standard for storing images in HDF5 +\li HDF5 @ref H5TB (H5TB) – condenses the steps required to create tables +\li HDF5 @ref H5DS (H5DS) – provides a standard for dimension scale storage +\li HDF5 @ref H5PT (H5PT) – provides a standard for storing packet data + +\subsubsection subsec_intro_desc_soft_tools Tools +Useful tools for working with HDF5 files include: +\li h5dump: A utility to dump or display the contents of an HDF5 File +\li h5cc, h5c++, h5fc: Unix scripts for compiling applications +\li HDFView: A java browser to view HDF (HDF4 and HDF5) files + +<h4>h5dump</h4> +The h5dump utility displays the contents of an HDF5 file in Data Description Language (\ref DDLBNF110). +Below is an example of h5dump output for an HDF5 file that contains no objects: +\code +$ h5dump file.h5 + HDF5 "file.h5" { + GROUP "/" { + } + } +\endcode + +With large files and datasets the output from h5dump can be overwhelming. +There are options that can be used to examine specific parts of an HDF5 file. +Some useful h5dump options are included below: +\code + -H, --header Display header information only (no data) + -d <name> Display a dataset with a specified path and name + -p Display properties + -n Display the contents of the file +\endcode + +<h4>h5cc, h5fc, h5c++</h4> +The built HDF5 binaries include the h5cc, h5fc, h5c++ compile scripts for compiling applications. +When using these scripts there is no need to specify the HDF5 libraries and include files. +Compiler options can be passed to the scripts. + +<h4>HDFView</h4> +The HDFView tool allows browsing of data in HDF (HDF4 and HDF5) files. + +\section sec_intro_pm Introduction to the HDF5 Programming Model and APIs +The HDF5 Application Programming Interface is extensive, but a few functions do most of the work. + +To introduce the programming model, examples in Python and C are included below. The Python examples +use the HDF5 Python APIs (h5py). See the Examples from "Learning the Basics" page for complete examples +that can be downloaded and run for C, FORTRAN, C++, Java and Python. + +The general paradigm for working with objects in HDF5 is to: +\li Open the object. +\li Access the object. +\li Close the object. + +The library imposes an order on the operations by argument dependencies. For example, a file must be +opened before a dataset because the dataset open call requires a file handle as an argument. Objects +can be closed in any order. However, once an object is closed it no longer can be accessed. + +Keep the following in mind when looking at the example programs included in this section: +<ul> +<li> +<ul> +<li> +C routines begin with the prefix “H5*” where * is a single letter indicating the object on which the +operation is to be performed. +</li> +<li> +FORTRAN routines are similar; they begin with “h5*” and end with “_f”. +</li> +<li> +Java routines are similar; they begin with “H5*” and begin with “H5.” as the class. Constants are +in the HDF5Constants class and begin with "HDF5Constants.". The function arguments +are usually similar, @see @ref HDF5LIB +</li> +</ul> +For example: +<ul> +<li> +File Interface:<ul><li>#H5Fopen (C)</li><li>h5fopen_f (FORTRAN)</li><li>H5.H5Fopen (Java)</li></ul> +</li> +<li> +Dataset Interface:<ul><li>#H5Dopen (C)</li><li>h5dopen_f (FORTRAN)</li><li>H5.H5Dopen (Java)</li></ul> +</li> +<li> +Dataspace interface:<ul><li>#H5Sclose (C)</li><li>h5sclose_f (FORTRAN)</li><li>H5.H5Sclose (Java)</li></ul> +</li> +</ul> +The HDF5 Python APIs use methods associated with specific objects. +</li> +<li> +For portability, the HDF5 library has its own defined types. Some common types that you will see +in the example code are: +<ul> +<li> +#hid_t is used for object handles +</li> +<li> +hsize_t is used for dimensions +</li> +<li> +#herr_t is used for many return values +</li> +</ul> +</li> +<li> +Language specific files must be included in applications: +<ul> +<li> +Python: Add <code>"import h5py / import numpy"</code> +</li> +<li> +C: Add <code>"#include hdf5.h"</code> +</li> +<li> +FORTRAN: Add <code>"USE HDF5"</code> and call h5open_f and h5close_f to initialize and close the HDF5 FORTRAN interface +</li> +<li> +Java: Add <code>"import hdf.hdf5lib.H5; + import hdf.hdf5lib.HDF5Constants;"</code> +</li> +</ul> +</li> +</ul> + +\subsection subsec_intro_pm_file Steps to create a file +To create an HDF5 file you must: +\li Specify property lists (or use the defaults). +\li Create the file. +\li Close the file (and property lists if needed). + +Example: +<table> +<caption>The following Python and C examples create a file, file.h5, and then close it. +The resulting HDF5 file will only contain a root group:</caption> +<tr> +<td> +\image html crtf-pic.png +</td> +</tr> +</table> + +Calling h5py.File with ‘w’ for the file access flag will create a new HDF5 file and overwrite +an existing file with the same name. “file” is the file handle returned from opening the file. +When finished with the file, it must be closed. When not specifying property lists, the default +property lists are used: + +<table> +<tr> +<td> +<em>Python</em> +\code + import h5py + file = h5py.File (‘file.h5’, ‘w’) + file.close () +\endcode +</td> +</tr> +</table> + +The H5Fcreate function creates an HDF5 file. #H5F_ACC_TRUNC is the file access flag to create a new +file and overwrite an existing file with the same name, and #H5P_DEFAULT is the value specified to +use a default property list. + +<table> +<tr> +<td> +<em>C</em> +\code + #include “hdf5.h” + + int main() { + hid_t file_id; + herr_t status; + + file_id = H5Fcreate ("file.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + status = H5Fclose (file_id); + } +\endcode +</td> +</tr> +</table> + +\subsection subsec_intro_pm_dataset Steps to create a dataset +As described previously, an HDF5 dataset consists of the raw data, as well as the metadata that +describes the data (datatype, spatial information, and properties). To create a dataset you must: +\li Define the dataset characteristics (datatype, dataspace, properties). +\li Decide which group to attach the dataset to. +\li Create the dataset. +\li Close the dataset handle from step 3. + +Example: +<table> +<caption>The code excerpts below show the calls that need to be made to create a 4 x 6 integer dataset dset +in a file dset.h5. The dataset will be located in the root group:</caption> +<tr> +<td> +\image html crtdset.png +</td> +</tr> +</table> + +With Python, the creation of the dataspace is included as a parameter in the dataset creation method. +Just one call will create a 4 x 6 integer dataset dset. A pre-defined Big Endian 32-bit integer datatype +is specified. The create_dataset method creates the dataset in the root group (the file object). +The dataset is close by the Python interface. + +<table> +<tr> +<td> +<em>Python</em> +\code + dataset = file.create_dataset("dset",(4, 6), h5py.h5t.STD_I32BE) +\endcode +</td> +</tr> +</table> + +To create the same dataset in C, you must specify the dataspace with the #H5Screate_simple function, +create the dataset by calling #H5Dcreate, and then close the dataspace and dataset with calls to #H5Dclose +and #H5Sclose. #H5P_DEFAULT is specified to use a default property list. Note that the file identifier +(file_id) is passed in as the first parameter to #H5Dcreate, which creates the dataset in the root group. + +<table> +<tr> +<td> +<em>C</em> +\code + // Create the dataspace for the dataset. + dims[0] = 4; + dims[1] = 6; + + dataspace_id = H5Screate_simple(2, dims, NULL); + + // Create the dataset. + dataset_id = H5Dcreate (file_id, "/dset", H5T_STD_I32BE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + + // Close the dataset and dataspace + status = H5Dclose(dataset_id); + status = H5Sclose(dataspace_id); +\endcode +</td> +</tr> +</table> + +\subsection subsec_intro_pm_write Writing to or reading from a dataset +Once you have created or opened a dataset you can write to it: + +<table> +<tr> +<td> +<em>Python</em> +\code + data = np.zeros((4,6)) + for i in range(4): + for j in range(6): + data[i][j]= i*6+j+1 + + dataset[...] = data <-- Write data to dataset + data_read = dataset[...] <-- Read data from dataset +\endcode +</td> +</tr> +</table> + +#H5S_ALL is passed in for the memory and file dataspace parameters to indicate that the entire dataspace +of the dataset is specified. These two parameters can be modified to allow subsetting of a dataset. +The native predefined datatype, #H5T_NATIVE_INT, is used for reading and writing so that HDF5 will do +any necessary integer conversions: + +<table> +<tr> +<td> +<em>C</em> +\code + status = H5Dwrite (dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset_data); + status = H5Dread (dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset_data); +\endcode +</td> +</tr> +</table> + +\subsection subsec_intro_pm_group Steps to create a group +An HDF5 group is a structure containing zero or more HDF5 objects. Before you can create a group you must +obtain the location identifier of where the group is to be created. Following are the steps that are required: +\li Decide where to put the group – in the “root group” (or file identifier) or in another group. Open the group if it is not already open. +\li Define properties or use the default. +\li Create the group. +\li Close the group. + +<table> +<caption>Creates attributes that are attached to the dataset dset</caption> +<tr> +<td> +\image html crtgrp.png +</td> +</tr> +</table> + +The code below opens the dataset dset.h5 with read/write permission and creates a group MyGroup in the root group. +Properties are not specified so the defaults are used: + +<table> +<tr> +<td> +<em>Python</em> +\code + import h5py + file = h5py.File('dset.h5', 'r+') + group = file.create_group ('MyGroup') + file.close() +\endcode +</td> +</tr> +</table> + +To create the group MyGroup in the root group, you must call #H5Gcreate, passing in the file identifier returned +from opening or creating the file. The default property lists are specified with #H5P_DEFAULT. The group is then +closed: + +<table> +<tr> +<td> +<em>C</em> +\code + group_id = H5Gcreate (file_id, "MyGroup", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + status = H5Gclose (group_id); +\endcode +</td> +</tr> +</table> + +\subsection subsec_intro_pm_attr Steps to create and write to an attribute +To create an attribute you must open the object that you wish to attach the attribute to. Then you can create, +access, and close the attribute as needed: +\li Open the object that you wish to add an attribute to. +\li Create the attribute +\li Write to the attribute +\li Close the attribute and the object it is attached to. + +<table> +<caption>Creates attributes that are attached to the dataset dset</caption> +<tr> +<td> +\image html crtatt.png +</td> +</tr> +</table> + +The dataspace, datatype, and data are specified in the call to create an attribute in Python: + +<table> +<tr> +<td> +<em>Python</em> +\code + dataset.attrs["Units"] = “Meters per second” <-- Create string + attr_data = np.zeros((2,)) + attr_data[0] = 100 + attr_data[1] = 200 + dataset.attrs.create("Speed", attr_data, (2,), “i”) <-- Create Integer +\endcode +</td> +</tr> +</table> + +To create an integer attribute in C, you must create the dataspace, create the attribute, write +to it and then close it in separate steps: + +<table> +<tr> +<td> +<em>C</em> +\code + hid_t attribute_id, dataspace_id; // identifiers + hsize_t dims; + int attr_data[2]; + herr_t status; + + ... + + // Initialize the attribute data. + attr_data[0] = 100; + attr_data[1] = 200; + + // Create the data space for the attribute. + dims = 2; + dataspace_id = H5Screate_simple(1, &dims, NULL); + + // Create a dataset attribute. + attribute_id = H5Acreate2 (dataset_id, "Units", H5T_STD_I32BE, + dataspace_id, H5P_DEFAULT, H5P_DEFAULT); + + // Write the attribute data. + status = H5Awrite(attribute_id, H5T_NATIVE_INT, attr_data); + + // Close the attribute. + status = H5Aclose(attribute_id); + + // Close the dataspace. + status = H5Sclose(dataspace_id); +\endcode +</td> +</tr> +</table> + +*/ diff --git a/doxygen/dox/LearnBasics.dox b/doxygen/dox/LearnBasics.dox new file mode 100644 index 0000000..a4f5cc6 --- /dev/null +++ b/doxygen/dox/LearnBasics.dox @@ -0,0 +1,30 @@ +/** @page LearnBasics Learning the Basics +The following topics cover the basic features in HDF5. The topics build on each other and are +intended to be completed in order. Some sections use files created in earlier sections. The +examples used can also be found on the <a href="https://portal.hdfgroup.org/display/HDF5/Examples+from+Learning+the+Basics">Examples from Learning the Basics</a> +page and in the HDF5 source code (C, C++, Fortran). +<ul><li><a href="https://portal.hdfgroup.org/display/HDF5/HDF5+File+Organization">HDF5 File Organization</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/The+HDF5+API">The HDF5 API</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Programming+Issues">Programming Issues</a></li> +<li><a href="/https://portal.hdfgroup.orgdisplay/HDF5/Creating+an+HDF5+File">Creating an HDF5 File</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Creating+a+Dataset">Creating a Dataset</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Reading+From+and+Writing+To+a+Dataset">Reading From and Writing To a Dataset</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Creating+an+Attribute">Creating an Attribute</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Creating+a+Group">Creating a Group</a></li> +<li> <a href="https://portal.hdfgroup.org/display/HDF5/Creating+Groups+using+Absolute+and+Relative+Names">Creating Groups using Absolute and Relative Names</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Creating+Datasets+in+Groups">Creating Datasets in Groups</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Reading+From+or+Writing+To+a+Subset+of+a+Dataset">Reading From or Writing To a Subset of a Dataset</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Datatype+Basics">Datatype Basics</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Property+Lists+Basics">Property Lists Basics</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Dataset+Storage+Layout">Dataset Storage Layout</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Extendible+Datasets">Extendible Datasets</a></li> +<li> <a href="https://portal.hdfgroup.org/display/HDF5/Compressed+Datasets">Compressed Datasets</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Discovering+the+Contents+of+an+HDF5+File">Discovering the Contents of an HDF5 File</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Learning+the+basics+QUIZ">Learning the basics QUIZ</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Learning+the+basics+QUIZ+with+ANSWERS">Learning the basics QUIZ with ANSWERS</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Compiling+HDF5+Applications">Compiling HDF5 Applications</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Training+Videos">Training Videos</a></li> +<li><a href="https://portal.hdfgroup.org/display/HDF5/Learning+the+Basics+in+PDF">Learning the Basics in PDF</a></li> +</ul> + +*/ diff --git a/doxygen/dox/LearnHDFView.dox b/doxygen/dox/LearnHDFView.dox new file mode 100644 index 0000000..e62eb2f --- /dev/null +++ b/doxygen/dox/LearnHDFView.dox @@ -0,0 +1,493 @@ +/** @page LearnHDFView Learning HDF5 with HDFView +This tutorial enables you to get a feel for HDF5 by using the HDFView browser. It does NOT require +any programming experience. + +\section sec_learn_hv_install HDFView Installation +\li Download and install HDFView. It can be downloaded from the <a href="https://portal.hdfgroup.org/display/support/Download+HDFView">Download HDFView</a> page. +\li Obtain the <a href="https://support.hdfgroup.org/ftp/HDF5/examples/files/tutorial/storm1.txt">storm1.txt</a> text file, used in the tutorial. + +\section sec_learn_hv_begin Begin Tutorial +Once you have HDFView installed, bring it up and you are ready to begin the tutorial. + +<table style="background-color:#FAFAD2"> +<caption> +Unable to complete tutorial because fields are greyed out? +</caption> +<tr> +<td> +This tutorial requires that the default HDFView File Access Mode be Read / Write. If fields are greyed out so that you cannot select them, then the File Access Mode is Read Only. + +To change the File Access Mode follow these steps: +<ul> +<li>Bring up HDFView</li> +<li>Left-mouse click on the Tools pull-down menu and select User Options.</li> +<li>A Preferences window pops up with the General Settings tab selected. +About half-way down you will see Default File Access Mode. +Select Read / Write.</li> +<li>Click on Apply and Close at the bottom of the window.</li> +<li>Close down HDFView.</li> +<li>Bring HDFView back up and try the tutorial again.</li> +PLEASE BE AWARE that selecting a File Access Mode of Read / Write can result in changes to the timestamp of HDF files that are viewed with HDFView. In general, a File Access Mode +of Read Only should be used to ensure that this does not occur. +</ul> +</td> +</tr> +</table> + +\subsection subsec_learn_hv_begin_topics Topics Covered +Following are the topics covered in the tutorial. The first topic creates the file that is used in +the subsequent topics. +<ul> +<li>@ref subsec_learn_hv_topics_file</li> +<li>@ref subsec_learn_hv_topics_image</li> +<li>@ref subsec_learn_hv_topics_attr</li> +<li>@ref subsec_learn_hv_topics_compress</li> +<li>@ref subsec_learn_hv_topics_subset</li> +<li>@ref subsec_learn_hv_topics_table</li> +</ul> + +\section sec_learn_hv_topics Topics + +\subsection subsec_learn_hv_topics_file Creating a New HDF5 File with a Contiguous Dataset +The steps below describe how to create a file (storm.h5), group (/Data), and a contiguous dataset +(/Data/Storm) using HDFView. A group is an HDF5 object that allows objects to be collected together. +A dataset is an array of data values. A contiguous dataset is one that is stored as a single block +in the HDF5 file. +<ul> +<li>Select the <em>File</em> pull-down menu at the top left, and then select <em>New -> HDF5</em>.</li> +<li>Specify a location and type in <em>storm.h5</em> for the name of your file, and click on the <em>Save</em> button. +You will see the <em>storm.h5</em> file in the TableView: +<table> +<tr> +<td> +\image html storm.png +</td> +</tr> +</table> +</li> +<li>Right click on <em>storm.h5</em>, and select <em>New -> Group</em>.</li> +<li>Enter <em>Data</em> for the name of the group and then click the <em>Ok</em> button. You will see the group <em>Data</em> in the TableView. +<table> +<tr> +<td> +\image html DataGroup.png +</td> +</tr> +</table> +</li> +<li>Right click on the group <em>Data</em> and select <em>New -> Dataset</em>.</li> +<li>A window pops up on the right. Fill in the information as follows, and then click <em>Ok</em> (leave the +Datatype information as is): +<table> +<tr> +<th>Dataset Name +</th> +<td><em>Storm</em> +</td> +</tr> +<tr> +<th>Under Dataspace, Current size +</th> +<td>57x57 +</td> +</tr> +<tr> +<th>Under Dataspace, Maximum Size +</th> +<td>57x57 +</td> +<tr> +<th>Layout +</th> +<td><em>Contiguous</em> (default) +</td> +</tr> +</table> +</li> +<li>Left click on the <em>Data</em> group in the tree view to see the <em>Storm</em> dataset in the TableView: +<table> +<tr> +<td> +\image html StormDataset.png +</td> +</tr> +</table> +</li> +<li>Double left click on the <em>Storm</em> dataset in the tree view. A window with an empty spreadsheet pops open.</li> +<li>Copy the data from the <a href="https://support.hdfgroup.org/ftp/HDF5/examples/files/tutorial/storm1.txt">storm1.txt</a> file into the dataset. + +If you downloaded <a href="https://support.hdfgroup.org/ftp/HDF5/examples/files/tutorial/storm1.txt">storm1.txt</a>, +then right click on the <em>Table</em> menu and select <em>Import Data from Text File</em>. +Specify a location, select <a href="https://support.hdfgroup.org/ftp/HDF5/examples/files/tutorial/storm1.txt">storm1.txt</a> +and click on the <em>Open</em> button. Answer <em>Yes</em> in the dialog box that +pops up (which asks if you wish to paste the selected data). + +Alternately, you can copy/paste directly. Select and copy the data in a separate window. Position your +cursor at (0,0) in your table, and select <em>Paste</em> from the <em>Table</em> menu. + +The values will be entered into the spreadsheet. +<table> +<tr> +<td> +\image html datasetwdata.png +</td> +</tr> +</table> +</li> +<li>Close the dataset, and save the data.</li> +</ul> + +\subsection subsec_learn_hv_topics_image Displaying a Dataset as an Image +Any dataset can be viewed as an image in HDFView. Below are the steps that demonstrate this. +<ul> +<li>Right click on <em>Storm</em> in the tree view, and select <em>Open As</em>.</li> +<li>Select the <em>Image</em> button under <em>Display As</em> (near the top) in the Dataset Selection window that pops +up. Then click <em>OK</em> at the bottom of the window to display the image. +<table> +<tr> +<td> +\image html showasimage.png +</td> +</tr> +</table> +</li> +<li>The rainbow icon brings you to the Image Palette window. Click on that to play with the palette +(GrayWave probably is the best choice). Close.</li> +</ul> + +\subsection subsec_learn_hv_topics_attr Creating Attributes +Additional information to describe an object can be stored in attributes. An attribute can be +added to a group or dataset with HDFView. + +The following illustrates how to add an attribute to the group <em>/Data</em>: +<ul> +<li>Click on the <em>/Data</em> folder in the tree view. You will see two tabs, <em>Object Attribute Info</em> and +<em>General Object Info</em>, in the pane on the right site of the HDFView window. +<table> +<tr> +<td> +\image html noattrs.png +</td> +</tr> +</table> +</li> +<li>With the left mouse button, select the <em>Add Attribute</em> button.</li> +<li>Select the <em>Add Attribute</em> button to add an attribute with these values:</li> +<table> +<tr> +<th>Name +</th> +<td><em>BatchID</em> +</td> +</tr> +<tr> +<th>Type +</th> +<td>INTEGER +</td> +</tr> +<tr> +<th>Size (bits) +</th> +<td>32 +</td> +<tr> +<th>Value +</th> +<td>3343 +</td> +</tr> +</table> +<li>Select the <em>Ok</em> button. The attribute will show up in the <em>Properties</em> window.</li> +<li>Close the Properties window.</li> +</ul> +Adding an attribute to a dataset is very similar to adding an attribute to a group. For example, +the following adds an attribute to the <em>/Storm</em> dataset: +<ul> +<li>Left mouse click on the <em>/Storm</em> dataset in the tree view. You will see the <em>Object Attribute +Info</em> and <em>General Object Info</em> tabs on the right</li> +<li>In the <em>Object Attribute Info</em> pane select the <em>Add Attribute</em> button and enter an attribute with +these values. (Be sure to add a <em>String Length</em> or the string will be truncated to one character!):</li> +<table> +<tr> +<th>Name +</th> +<td><em>Units</em> +</td> +</tr> +<tr> +<th>Type +</th> +<td>STRING +</td> +</tr> +<tr> +<th>String Length +</th> +<td>3 +</td> +<tr> +<th>Value +</th> +<td><em>m/s</em> +</td> +</tr> +</table> +<li>Select the <em>Ok</em> button. The attribute will be displayed in the window.</li> +<li>Close the Properties window. +<table> +<tr> +<td> +\image html scarletletter.png +</td> +</tr> +</table> +</li> +</ul> + +\subsection subsec_learn_hv_topics_compress Creating a Compressed and Chunked Dataset +A chunked and compressed dataset can be created using HDFView. A compressed dataset is a dataset +whose size has been compressed to take up less space. In order to compress an HDF5 dataset, the +dataset must be stored with a chunked dataset layout (as multiple <em>chunks</em> that are stored separately +in the file). + +Please note that the chunk sizes used in this topic are for demonstration purposes only. For +information on chunking and specifying an appropriate chunk size, see the +<a href="/display/HDF5/Chunking+in+HDF5">Chunking in HDF5</a> documentation. + +Also see the HDF5 Tutorial topic on <a href="https://portal.hdfgroup.org/display/HDF5/Compressed+Datasets">Creating a Compressed Dataset</a>. +<ul> +<li>Right click on storm.h5. Select <em>New -> Group</em>.</li> +<li>Enter <em>Image</em> for the name of the group, and click the <em>OK</em> button to create the group. +<table> +<tr> +<td> +\image html newgroupimage.png +</td> +</tr> +</table> +</li> +<li>Right click on the <em>Image</em> group, and select <em>New -> Dataset</em>.</li> +<li>Enter the following information for the dataset. Leave the <em>Datatype</em> as is (INTEGER): +<table> +<tr> +<th>Dataset name +</th> +<td><em>Another Storm</em> +</td> +</tr> +<tr> +<th>Under Dataspace, Current size +</th> +<td>57x57 +</td> +</tr> +<tr> +<th>Under Dataspace, Set Max Size +</th> +<td>57x57 +</td> +</tr> +<tr> +<th>Storage Layout +</th> +<td>Chunked +</td> +</tr> +<tr> +<th>Chunk Size +</th> +<td>20x20 +</td> +</tr> +<tr> +<th>Compression +</th> +<td>gzip +</td> +</tr> +<tr> +<th>Compression Level +</th> +<td>9 +</td> +</table> +You will see the <em>Another Storm</em> dataset in the <em>Image</em> group: +<table> +<tr> +<td> +\image html hdfview-anthrstrm.png +</td> +</tr> +</table> +</li> +<li>Double left-mouse click on the <em>Another Storm</em> dataset to display the spredsheet: +<table> +<tr> +<td> +\image html hdfview-anthrstrm-sprdsht.png +</td> +</tr> +</table> +</li> +<li>Copy the data from the <a href="https://support.hdfgroup.org/ftp/HDF5/examples/files/tutorial/storm1.txt">storm1.txt</a> file into the dataset. (See the previous topic for copying +<a href="https://support.hdfgroup.org/ftp/HDF5/examples/files/tutorial/storm1.txt">storm1.txt</a> into a dataset.)</li> +<li>Close the table, and save the data.</li> +<li>Right click on <em>Another Storm</em>, and select <em>Open As</em>.</li> +<li>Select the <em>Image</em> button in the Dataset Selection window that pops up. Click the <em>Ok</em> button at the +bottom of the window to view the dataset as an image. +<table> +<tr> +<td> +\image html hdfview-anthrstrm-img.png +</td> +</tr> +</table> +</li> +</ul> + +\subsection subsec_learn_hv_topics_subset Creating an Image and a Subset +A previous topic demonstrated how to view any dataset as an image in HDFView. With HDFView you can also +create an image to begin with, as is shown below. +<ul> +<li>Right click on the <em>Data</em> group and select <em>New -> Image</em>.</li> +<li>A window pops up on the right. Enter the following and then click <em>Ok</em>:</li> +<table> +<tr> +<th>Image name +</th> +<td><em>Storm Image</em> +</td> +</tr> +<tr> +<th>Height +</th> +<td>57 +</td> +</tr> +<tr> +<th>Width +</th> +<td>57 +</td> +</table> + +<li>Close the dataset.</li> +<li>Double left-mouse click on the <em>Data</em> group to see its contents. You will see the <em>Storm Image</em> dataset. +<table> +<tr> +<td> +\image html hdfview-imgicon.png +</td> +</tr> +</table> +</li> +<li> +Add data to the <em>Storm Image</em> dataset as was shown previously: +<ul> +<li>Right click on <em>Storm Image</em>, and select <em>Open As</em> to open the Dataset Selection window.</li> +<li>Click on the <em>Spreadsheet</em> button at the top left of the Dataset Selection window to view the image +as a spreadsheet.</li> +<li>Copy the data from the <a href="https://support.hdfgroup.org/ftp/HDF5/examples/files/tutorial/storm1.txt">storm1.txt</a> file into the dataset.</li> +<li>Close the dataset and save the data.</li> +</ul> +</li> +<li>Left double click on <em>Storm Image</em> to see the image. Close the dataset.</li> +<li>Right click on <em>Storm Image</em> and select <em>Show Properties</em> from the pop-up menu, to open the Properties +window. Select the <em>Attributes</em> tab to see the attributes: +<table> +<tr> +<td> +\image html hdfview-imgprop.png +</td> +</tr> +</table> +</li> +<li>Close the Properties window.</li> +<li>Right click on <em>Storm Image</em> and select <em>Open As</em> to bring up the Data Selection window.</li> +<li>Select a subset by clicking the left mouse on the image in the window and dragging the mouse. +Notice that the Height and Width values change. Select to display it as an image. Click <em>Ok</em>. +<table> +<tr> +<td> +\image html hdfview-imgsubset.png +</td> +</tr> +</table> +</li> +<li>Position the cursor in the middle of the image. Press Shift+Left Mouse button and hold, and then +drag the mouse to select another subset.</li> +<li>Select <em>Image->Write Selection to Image</em>. Enter <em>Subset</em> for the new image name. Click <em>Ok</em>. The <em>Subset</em> +image will appear in the tree view on the left.</li> +<li>Left double click on the image <em>Subset</em> to bring it up on the right. +<table> +<tr> +<td> +\image html hdfview-newimgsubset.png +</td> +</tr> +</table> +</li> +<li>Close the <em>Subset</em> image.</li> +</ul> + +\subsection subsec_learn_hv_topics_table Creating a Table (Compound Dataset) +A dataset with a compound datatype contains data elements that consist of multiple fields. If the +dataspace for the compound dataset is one-dimensional, then the dataset can be viewed as a table in +HDFView, as is shown below. +<ul> +<li>Right button click on the group <em>Data</em>. Select <em>New -> Compound DS</em>.</li> +<li>A window pops up on the right side of the screen. Only fill in the following fields: +<table> +<tr> +<th>Dataset name +</th> +<td>Table +</td> +</tr> +<tr> +<th>Dataspace (Current size only) +</th> +<td>4 +</td> +</tr> +<tr> +<th>Compound Datatype Properties: +<br />Number of Members +</th> +<td>3 +</td> +</tr> +<tr> +<th>Compound Datatype Properties: +<br /><em>Name</em> / Datatype / Size +</th> +<td><em>Description</em> / string / 4 +<br /><em>Temperature</em> / float / 1 +<br /><em>Pressure</em> / double / 1 +</td> +</tr> +</table> + +<table> +<tr> +<td> +\image html hdfview-newcmpd.png +</td> +</tr> +</table> +</li> +<li>Click Ok at the bottom.</li> +<li>Open the Data group (if it is not open) and double left click on the Table object. +<table> +<tr> +<td> +\image html hdfview-table.png +</td> +</tr> +</table> +</li> +<li>Close the dataset.</li> +</ul> + +*/ diff --git a/doxygen/dox/rm-template.dox b/doxygen/dox/rm-template.dox index ebf8aed..1e9f2d7 100644 --- a/doxygen/dox/rm-template.dox +++ b/doxygen/dox/rm-template.dox @@ -46,7 +46,7 @@ the <a href="https://www.oreilly.com/library/view/97-things-every/9780596809515/ 4. Preconditions - A set of preconditions that must be met. \verbatim - * \pre The argmument supplied in parameter \p name2 must be even. + * \pre The argument supplied in parameter \p name2 must be even. \endverbatim 5. Invariants - A set of invariants. @@ -96,4 +96,4 @@ the <a href="https://www.oreilly.com/library/view/97-things-every/9780596809515/ * \version 1.MAJOR.MINOR Function was deprecated in this release \endverbatim -*/
\ No newline at end of file +*/ diff --git a/doxygen/examples/Filters.html b/doxygen/examples/Filters.html index 7054a3b..9f34be5 100644 --- a/doxygen/examples/Filters.html +++ b/doxygen/examples/Filters.html @@ -408,7 +408,7 @@ Since elapsed time is subject to system load the bandwidth numbers cannot always be trusted. Furthermore, the bandwidth includes bytes attributed to - errors which may significanly taint the value if the + errors which may significantly taint the value if the function is able to detect errors without much expense.</td> </tr> diff --git a/doxygen/examples/fortran_menu.md b/doxygen/examples/fortran_menu.md index 335a21a..8ef4ead 100644 --- a/doxygen/examples/fortran_menu.md +++ b/doxygen/examples/fortran_menu.md @@ -1,61 +1,73 @@ <b>Fortran Library</b> -- H5A "Attributes (H5A)" +- @ref FH5A "Attributes (H5A)" <br /> HDF5 attribute is a small metadata object describing the nature and/or intended usage of a primary data object. -- H5D "Datasets (H5D)" +- @ref FH5D "Datasets (H5D)" <br /> Manage HDF5 datasets, including the transfer of data between memory and disk and the description of dataset properties. -- H5S "Dataspaces (H5S)" +- @ref FH5S "Dataspaces (H5S)" <br /> HDF5 dataspaces describe the shape of datasets in memory or in HDF5 files. -- H5T "Datatypes (H5T)" +- @ref FH5T "Datatypes (H5T)" <br /> HDF5 datatypes describe the element type of HDF5 datasets and attributes. -- H5E "Error Handling (H5E)" +- @ref FH5E "Error Handling (H5E)" <br /> HDF5 library error reporting. -- H5F "Files (H5F)" +- @ref FH5F "Files (H5F)" <br /> Manage HDF5 files. -- H5Z "Filters (H5Z)" +- @ref FH5Z "Filters (H5Z)" <br /> Manage HDF5 user-defined filters -- H5G "Groups (H5G)" +- @ref FH5G "Groups (H5G)" <br /> Manage HDF5 groups. -- H5I "Identifiers (H5I)" +- @ref FH5I "Identifiers (H5I)" <br /> Manage identifiers defined by the HDF5 library. -- H5 "Library General (H5)" +- @ref FH5 "Library General (H5)" <br /> Manage the life cycle of HDF5 library instances. -- H5L "Links (H5L)" +- @ref FH5L "Links (H5L)" <br /> Manage HDF5 links and link types. -- H5O "Objects (H5O)" +- @ref FH5O "Objects (H5O)" <br /> Manage HDF5 objects (groups, datasets, datatype objects). -- H5P "Property Lists (H5P)" +- @ref FH5P "Property Lists (H5P)" <br /> HDF5 property lists are the main vehicle to configure the behavior of HDF5 API functions. -- H5PL "Dynamically-loaded Plugins (H5PL)" +- @ref FH5R "References (H5R)" <br /> -Manage the loading behavior of HDF5 plugins. +Manage HDF5 references (HDF5 objects, attributes, and selections on datasets a.k.a. dataset regions). -- H5R "References (H5R)" +- @ref FH5LT "High Level Lite (H5LT)" <br /> -Manage HDF5 references (HDF5 objects, attributes, and selections on datasets a.k.a. dataset regions). +Functions to simplify creating and manipulating datasets, attributes and other features + +- @ref FH5IM "High Level Image (H5IM)" +<br /> +Creating and manipulating HDF5 datasets intended to be interpreted as images + +- @ref FH5TB "High Level Table (H5TB)" +<br /> +Creating and manipulating HDF5 datasets intended to be interpreted as tables + +- @ref FH5DS "High Level Dimension Scale (H5DS)" +<br /> +Creating and manipulating HDF5 datasets that are associated with the dimension of another HDF5 dataset diff --git a/doxygen/hdf5doxy_layout.xml b/doxygen/hdf5doxy_layout.xml index 20e0123..f7c47bf 100644 --- a/doxygen/hdf5doxy_layout.xml +++ b/doxygen/hdf5doxy_layout.xml @@ -3,7 +3,7 @@ <!-- Navigation index tabs for HTML output --> <navindex> <tab type="user" url="index.html" title="Overview" /> - <tab type="user" url="https://portal.hdfgroup.org/display/HDF5/Learning+HDF5" title="Getting started" /> + <tab type="user" url="@ref GettingStarted" title="Getting started" /> <tab type="user" url="@ref Cookbook" title="Cookbook" /> <tab type="user" url="@ref UG" title="User Guide" /> <tab type="user" url="https://portal.hdfgroup.org/display/HDF5/HDF5+User+Guides" title="User Guides" /> diff --git a/doxygen/img/DataGroup.png b/doxygen/img/DataGroup.png Binary files differnew file mode 100644 index 0000000..4edeba3 --- /dev/null +++ b/doxygen/img/DataGroup.png diff --git a/doxygen/img/StormDataset.png b/doxygen/img/StormDataset.png Binary files differnew file mode 100644 index 0000000..da44335 --- /dev/null +++ b/doxygen/img/StormDataset.png diff --git a/doxygen/img/cmpnddtype.png b/doxygen/img/cmpnddtype.png Binary files differnew file mode 100644 index 0000000..53b4afd --- /dev/null +++ b/doxygen/img/cmpnddtype.png diff --git a/doxygen/img/crtatt.png b/doxygen/img/crtatt.png Binary files differnew file mode 100644 index 0000000..93ac36c --- /dev/null +++ b/doxygen/img/crtatt.png diff --git a/doxygen/img/crtdset.png b/doxygen/img/crtdset.png Binary files differnew file mode 100644 index 0000000..9cc3085 --- /dev/null +++ b/doxygen/img/crtdset.png diff --git a/doxygen/img/crtf-pic.png b/doxygen/img/crtf-pic.png Binary files differnew file mode 100644 index 0000000..f7c49b8 --- /dev/null +++ b/doxygen/img/crtf-pic.png diff --git a/doxygen/img/crtgrp.png b/doxygen/img/crtgrp.png Binary files differnew file mode 100644 index 0000000..506bc68 --- /dev/null +++ b/doxygen/img/crtgrp.png diff --git a/doxygen/img/dataset.png b/doxygen/img/dataset.png Binary files differnew file mode 100644 index 0000000..1524417 --- /dev/null +++ b/doxygen/img/dataset.png diff --git a/doxygen/img/datasetwdata.png b/doxygen/img/datasetwdata.png Binary files differnew file mode 100644 index 0000000..5f03827 --- /dev/null +++ b/doxygen/img/datasetwdata.png diff --git a/doxygen/img/dataspace.png b/doxygen/img/dataspace.png Binary files differnew file mode 100644 index 0000000..95e0b7d --- /dev/null +++ b/doxygen/img/dataspace.png diff --git a/doxygen/img/dataspace1.png b/doxygen/img/dataspace1.png Binary files differnew file mode 100644 index 0000000..f21a5f5 --- /dev/null +++ b/doxygen/img/dataspace1.png diff --git a/doxygen/img/datatype.png b/doxygen/img/datatype.png Binary files differnew file mode 100644 index 0000000..6ea5732 --- /dev/null +++ b/doxygen/img/datatype.png diff --git a/doxygen/img/fileobj.png b/doxygen/img/fileobj.png Binary files differnew file mode 100644 index 0000000..ae5212d --- /dev/null +++ b/doxygen/img/fileobj.png diff --git a/doxygen/img/group.png b/doxygen/img/group.png Binary files differnew file mode 100644 index 0000000..7fec7fc --- /dev/null +++ b/doxygen/img/group.png diff --git a/doxygen/img/hdfview-anthrstrm-img.png b/doxygen/img/hdfview-anthrstrm-img.png Binary files differnew file mode 100644 index 0000000..add4e48 --- /dev/null +++ b/doxygen/img/hdfview-anthrstrm-img.png diff --git a/doxygen/img/hdfview-anthrstrm-sprdsht.png b/doxygen/img/hdfview-anthrstrm-sprdsht.png Binary files differnew file mode 100644 index 0000000..4584fd5 --- /dev/null +++ b/doxygen/img/hdfview-anthrstrm-sprdsht.png diff --git a/doxygen/img/hdfview-anthrstrm.png b/doxygen/img/hdfview-anthrstrm.png Binary files differnew file mode 100644 index 0000000..afc2de3 --- /dev/null +++ b/doxygen/img/hdfview-anthrstrm.png diff --git a/doxygen/img/hdfview-imgicon.png b/doxygen/img/hdfview-imgicon.png Binary files differnew file mode 100644 index 0000000..f189080 --- /dev/null +++ b/doxygen/img/hdfview-imgicon.png diff --git a/doxygen/img/hdfview-imgprop.png b/doxygen/img/hdfview-imgprop.png Binary files differnew file mode 100644 index 0000000..717727b --- /dev/null +++ b/doxygen/img/hdfview-imgprop.png diff --git a/doxygen/img/hdfview-imgsubset.png b/doxygen/img/hdfview-imgsubset.png Binary files differnew file mode 100644 index 0000000..19cec57 --- /dev/null +++ b/doxygen/img/hdfview-imgsubset.png diff --git a/doxygen/img/hdfview-newcmpd.png b/doxygen/img/hdfview-newcmpd.png Binary files differnew file mode 100644 index 0000000..b07b5f8 --- /dev/null +++ b/doxygen/img/hdfview-newcmpd.png diff --git a/doxygen/img/hdfview-newimgsubset.png b/doxygen/img/hdfview-newimgsubset.png Binary files differnew file mode 100644 index 0000000..fd16b23 --- /dev/null +++ b/doxygen/img/hdfview-newimgsubset.png diff --git a/doxygen/img/hdfview-prop.png b/doxygen/img/hdfview-prop.png Binary files differnew file mode 100644 index 0000000..16c0904 --- /dev/null +++ b/doxygen/img/hdfview-prop.png diff --git a/doxygen/img/hdfview-qf.png b/doxygen/img/hdfview-qf.png Binary files differnew file mode 100644 index 0000000..edc371f --- /dev/null +++ b/doxygen/img/hdfview-qf.png diff --git a/doxygen/img/hdfview-regref.png b/doxygen/img/hdfview-regref.png Binary files differnew file mode 100644 index 0000000..7f2b02a --- /dev/null +++ b/doxygen/img/hdfview-regref.png diff --git a/doxygen/img/hdfview-regref1.png b/doxygen/img/hdfview-regref1.png Binary files differnew file mode 100644 index 0000000..f754931 --- /dev/null +++ b/doxygen/img/hdfview-regref1.png diff --git a/doxygen/img/hdfview-regref2.png b/doxygen/img/hdfview-regref2.png Binary files differnew file mode 100644 index 0000000..5a73c01 --- /dev/null +++ b/doxygen/img/hdfview-regref2.png diff --git a/doxygen/img/hdfview-regrefval.png b/doxygen/img/hdfview-regrefval.png Binary files differnew file mode 100644 index 0000000..e0a666b --- /dev/null +++ b/doxygen/img/hdfview-regrefval.png diff --git a/doxygen/img/hdfview-table.png b/doxygen/img/hdfview-table.png Binary files differnew file mode 100644 index 0000000..69301bc --- /dev/null +++ b/doxygen/img/hdfview-table.png diff --git a/doxygen/img/hdfview-tree.png b/doxygen/img/hdfview-tree.png Binary files differnew file mode 100644 index 0000000..8ba2621 --- /dev/null +++ b/doxygen/img/hdfview-tree.png diff --git a/doxygen/img/newgroupimage.png b/doxygen/img/newgroupimage.png Binary files differnew file mode 100644 index 0000000..7bc4c90 --- /dev/null +++ b/doxygen/img/newgroupimage.png diff --git a/doxygen/img/noattrs.png b/doxygen/img/noattrs.png Binary files differnew file mode 100644 index 0000000..13abcc5 --- /dev/null +++ b/doxygen/img/noattrs.png diff --git a/doxygen/img/properties.png b/doxygen/img/properties.png Binary files differnew file mode 100644 index 0000000..083dc14 --- /dev/null +++ b/doxygen/img/properties.png diff --git a/doxygen/img/scarletletter.png b/doxygen/img/scarletletter.png Binary files differnew file mode 100644 index 0000000..7c5d2e6 --- /dev/null +++ b/doxygen/img/scarletletter.png diff --git a/doxygen/img/showasimage.png b/doxygen/img/showasimage.png Binary files differnew file mode 100644 index 0000000..8377292 --- /dev/null +++ b/doxygen/img/showasimage.png diff --git a/doxygen/img/storm.png b/doxygen/img/storm.png Binary files differnew file mode 100644 index 0000000..769b037 --- /dev/null +++ b/doxygen/img/storm.png |