#H5G_STORAGE_TYPE_COMPACT | Compac
ALIASES += str_pad_type="#H5T_STR_NULLTERM | 0 | Null terminate (as C does) | #H5T_STR_NULLPAD | 1 | Pad with zeros | #H5T_STR_SPACEPAD | 2 | Pad with spaces (as FORTRAN does) | "
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="Flag | Purpose |
---|
#H5O_INFO_BASIC | Fill in the fileno, addr, type, and rc fields | #H5O_INFO_TIME | Fill in the atime, mtime, ctime, and btime fields | #H5O_INFO_NUM_ATTRS | Fill in the num_attrs field | #H5O_INFO_HDR | Fill in the num_attrs field | #H5O_INFO_META_SIZE | Fill in the meta_size field | #H5O_INFO_ALL | #H5O_INFO_BASIC | #H5O_INFO_TIME | #H5O_INFO_NUM_ATTRS | #H5O_INFO_HDR | #H5O_INFO_META_SIZE | "
+
+################################################################################
+# 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:
+
+
+
+@ref IntroHDF5
+ |
+
+A very brief introduction to HDF5 and the HDF5 programming model and APIs
+ |
+
+
+
+@ref LearnHDFView
+ |
+
+A tutorial for learning how to use HDFView. NO programming involved!
+ |
+
+
+
+@ref LearnBasics
+ |
+
+Step by step instructions for learning HDF5 that include programming examples
+ |
+
+
+
+\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:
+
+
+@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:
+
+
+
+
+\image html fileobj.png
+ |
+
+
+
+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.
+
+
+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.
+
+
+\image html group.png
+ |
+
+
+
+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:
+
+
+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.
+
+
+\image html dataset.png
+ |
+
+
+
+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.
+
+
+In the dataset depicted, each element of the dataset is a 32-bit integer.
+
+
+\image html datatype.png
+ |
+
+
+
+Datatypes in HDF5 can be grouped into:
+
+-
+Pre-Defined Datatypes: 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:
+
+-
+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.
+
+-
+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).
+
+
+
+-
+Derived Datatypes: 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.
+
+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.
+
+
+
+\image html cmpnddtype.png
+ |
+
+
+
+
+
+\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.
+
+
+This image illustrates a dataspace that is an array with dimensions of 5 x 3 and a rank (number of dimensions) of 2.
+
+
+\image html dataspace1.png
+ |
+
+
+
+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.
+
+
+The dataspace is used to describe both the logical layout of a dataset and a subset of a dataset.
+
+
+\image html dataspace.png
+ |
+
+
+
+\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.
+
+
+
+
+\image html properties.png
+ |
+
+
+
+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 Attribute Interface
+\li @ref H5D Dataset Interface
+\li @ref H5F File 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
+
+h5dump
+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 Display a dataset with a specified path and name
+ -p Display properties
+ -n Display the contents of the file
+\endcode
+
+h5cc, h5fc, h5c++
+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.
+
+HDFView
+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:
+
+-
+
+-
+C routines begin with the prefix “H5*” where * is a single letter indicating the object on which the
+operation is to be performed.
+
+-
+FORTRAN routines are similar; they begin with “h5*” and end with “_f”.
+
+-
+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
+
+
+For example:
+
+-
+File Interface:
- #H5Fopen (C)
- h5fopen_f (FORTRAN)
- H5.H5Fopen (Java)
+
+-
+Dataset Interface:
- #H5Dopen (C)
- h5dopen_f (FORTRAN)
- H5.H5Dopen (Java)
+
+-
+Dataspace interface:
- #H5Sclose (C)
- h5sclose_f (FORTRAN)
- H5.H5Sclose (Java)
+
+
+The HDF5 Python APIs use methods associated with specific objects.
+
+-
+For portability, the HDF5 library has its own defined types. Some common types that you will see
+in the example code are:
+
+-
+#hid_t is used for object handles
+
+-
+hsize_t is used for dimensions
+
+-
+#herr_t is used for many return values
+
+
+
+-
+Language specific files must be included in applications:
+
+-
+Python: Add
"import h5py / import numpy"
+
+-
+C: Add
"#include hdf5.h"
+
+-
+FORTRAN: Add
"USE HDF5" and call h5open_f and h5close_f to initialize and close the HDF5 FORTRAN interface
+
+-
+Java: Add
"import hdf.hdf5lib.H5;
+ import hdf.hdf5lib.HDF5Constants;"
+
+
+
+
+
+\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:
+
+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:
+
+
+\image html crtf-pic.png
+ |
+
+
+
+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:
+
+
+
+
+Python
+\code
+ import h5py
+ file = h5py.File (‘file.h5’, ‘w’)
+ file.close ()
+\endcode
+ |
+
+
+
+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.
+
+
+
+
+C
+\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
+ |
+
+
+
+\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:
+
+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:
+
+
+\image html crtdset.png
+ |
+
+
+
+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.
+
+
+
+
+Python
+\code
+ dataset = file.create_dataset("dset",(4, 6), h5py.h5t.STD_I32BE)
+\endcode
+ |
+
+
+
+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.
+
+
+
+
+C
+\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
+ |
+
+
+
+\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:
+
+
+
+
+Python
+\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
+ |
+
+
+
+#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:
+
+
+
+
+C
+\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
+ |
+
+
+
+\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.
+
+
+Creates attributes that are attached to the dataset dset
+
+
+\image html crtgrp.png
+ |
+
+
+
+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:
+
+
+
+
+Python
+\code
+ import h5py
+ file = h5py.File('dset.h5', 'r+')
+ group = file.create_group ('MyGroup')
+ file.close()
+\endcode
+ |
+
+
+
+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:
+
+
+
+
+C
+\code
+ group_id = H5Gcreate (file_id, "MyGroup", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ status = H5Gclose (group_id);
+\endcode
+ |
+
+
+
+\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.
+
+
+Creates attributes that are attached to the dataset dset
+
+
+\image html crtatt.png
+ |
+
+
+
+The dataspace, datatype, and data are specified in the call to create an attribute in Python:
+
+
+
+
+Python
+\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
+ |
+
+
+
+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:
+
+
+
+
+C
+\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
+ |
+
+
+
+*/
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 Examples from Learning the Basics
+page and in the HDF5 source code (C, C++, Fortran).
+
+
+*/
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 Download HDFView page.
+\li Obtain the storm1.txt 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.
+
+
+
+Unable to complete tutorial because fields are greyed out?
+
+
+
+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:
+
+- Bring up HDFView
+- Left-mouse click on the Tools pull-down menu and select User Options.
+- 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.
+- Click on Apply and Close at the bottom of the window.
+- Close down HDFView.
+- Bring HDFView back up and try the tutorial again.
+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.
+
+ |
+
+
+
+\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.
+
+- @ref subsec_learn_hv_topics_file
+- @ref subsec_learn_hv_topics_image
+- @ref subsec_learn_hv_topics_attr
+- @ref subsec_learn_hv_topics_compress
+- @ref subsec_learn_hv_topics_subset
+- @ref subsec_learn_hv_topics_table
+
+
+\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.
+
+- Select the File pull-down menu at the top left, and then select New -> HDF5.
+- Specify a location and type in storm.h5 for the name of your file, and click on the Save button.
+You will see the storm.h5 file in the TableView:
+
+
+
+\image html storm.png
+ |
+
+
+
+- Right click on storm.h5, and select New -> Group.
+- Enter Data for the name of the group and then click the Ok button. You will see the group Data in the TableView.
+
+
+
+\image html DataGroup.png
+ |
+
+
+
+- Right click on the group Data and select New -> Dataset.
+- A window pops up on the right. Fill in the information as follows, and then click Ok (leave the
+Datatype information as is):
+
+
+Dataset Name
+ |
+Storm
+ |
+
+
+Under Dataspace, Current size
+ |
+57x57
+ |
+
+
+Under Dataspace, Maximum Size
+ |
+57x57
+ |
+
+Layout
+ |
+Contiguous (default)
+ |
+
+
+
+- Left click on the Data group in the tree view to see the Storm dataset in the TableView:
+
+
+
+\image html StormDataset.png
+ |
+
+
+
+- Double left click on the Storm dataset in the tree view. A window with an empty spreadsheet pops open.
+- Copy the data from the storm1.txt file into the dataset.
+
+If you downloaded storm1.txt,
+then right click on the Table menu and select Import Data from Text File.
+Specify a location, select storm1.txt
+and click on the Open button. Answer Yes 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 Paste from the Table menu.
+
+The values will be entered into the spreadsheet.
+
+
+
+\image html datasetwdata.png
+ |
+
+
+
+- Close the dataset, and save the data.
+
+
+\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.
+
+- Right click on Storm in the tree view, and select Open As.
+- Select the Image button under Display As (near the top) in the Dataset Selection window that pops
+up. Then click OK at the bottom of the window to display the image.
+
+
+
+\image html showasimage.png
+ |
+
+
+
+- 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.
+
+
+\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 /Data:
+
+- Click on the /Data folder in the tree view. You will see two tabs, Object Attribute Info and
+General Object Info, in the pane on the right site of the HDFView window.
+
+
+
+\image html noattrs.png
+ |
+
+
+
+- With the left mouse button, select the Add Attribute button.
+- Select the Add Attribute button to add an attribute with these values:
+
+
+Name
+ |
+BatchID
+ |
+
+
+Type
+ |
+INTEGER
+ |
+
+
+Size (bits)
+ |
+32
+ |
+
+Value
+ |
+3343
+ |
+
+
+- Select the Ok button. The attribute will show up in the Properties window.
+- Close the Properties window.
+
+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 /Storm dataset:
+
+- Left mouse click on the /Storm dataset in the tree view. You will see the Object Attribute
+Info and General Object Info tabs on the right
+- In the Object Attribute Info pane select the Add Attribute button and enter an attribute with
+these values. (Be sure to add a String Length or the string will be truncated to one character!):
+
+
+Name
+ |
+Units
+ |
+
+
+Type
+ |
+STRING
+ |
+
+
+String Length
+ |
+3
+ |
+
+Value
+ |
+m/s
+ |
+
+
+- Select the Ok button. The attribute will be displayed in the window.
+- Close the Properties window.
+
+
+
+\image html scarletletter.png
+ |
+
+
+
+
+
+\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 chunks 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
+Chunking in HDF5 documentation.
+
+Also see the HDF5 Tutorial topic on Creating a Compressed Dataset.
+
+- Right click on storm.h5. Select New -> Group.
+- Enter Image for the name of the group, and click the OK button to create the group.
+
+
+
+\image html newgroupimage.png
+ |
+
+
+
+- Right click on the Image group, and select New -> Dataset.
+- Enter the following information for the dataset. Leave the Datatype as is (INTEGER):
+
+
+Dataset name
+ |
+Another Storm
+ |
+
+
+Under Dataspace, Current size
+ |
+57x57
+ |
+
+
+Under Dataspace, Set Max Size
+ |
+57x57
+ |
+
+
+Storage Layout
+ |
+Chunked
+ |
+
+
+Chunk Size
+ |
+20x20
+ |
+
+
+Compression
+ |
+gzip
+ |
+
+
+Compression Level
+ |
+9
+ |
+
+You will see the Another Storm dataset in the Image group:
+
+
+
+\image html hdfview-anthrstrm.png
+ |
+
+
+
+- Double left-mouse click on the Another Storm dataset to display the spredsheet:
+
+
+
+\image html hdfview-anthrstrm-sprdsht.png
+ |
+
+
+
+- Copy the data from the storm1.txt file into the dataset. (See the previous topic for copying
+storm1.txt into a dataset.)
+- Close the table, and save the data.
+- Right click on Another Storm, and select Open As.
+- Select the Image button in the Dataset Selection window that pops up. Click the Ok button at the
+bottom of the window to view the dataset as an image.
+
+
+
+\image html hdfview-anthrstrm-img.png
+ |
+
+
+
+
+
+\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.
+
+- Right click on the Data group and select New -> Image.
+- A window pops up on the right. Enter the following and then click Ok:
+
+
+Image name
+ |
+Storm Image
+ |
+
+
+Height
+ |
+57
+ |
+
+
+Width
+ |
+57
+ |
+
+
+- Close the dataset.
+- Double left-mouse click on the Data group to see its contents. You will see the Storm Image dataset.
+
+
+
+\image html hdfview-imgicon.png
+ |
+
+
+
+-
+Add data to the Storm Image dataset as was shown previously:
+
+- Right click on Storm Image, and select Open As to open the Dataset Selection window.
+- Click on the Spreadsheet button at the top left of the Dataset Selection window to view the image
+as a spreadsheet.
+- Copy the data from the storm1.txt file into the dataset.
+- Close the dataset and save the data.
+
+
+- Left double click on Storm Image to see the image. Close the dataset.
+- Right click on Storm Image and select Show Properties from the pop-up menu, to open the Properties
+window. Select the Attributes tab to see the attributes:
+
+
+
+\image html hdfview-imgprop.png
+ |
+
+
+
+- Close the Properties window.
+- Right click on Storm Image and select Open As to bring up the Data Selection window.
+- 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 Ok.
+
+
+
+\image html hdfview-imgsubset.png
+ |
+
+
+
+- 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.
+- Select Image->Write Selection to Image. Enter Subset for the new image name. Click Ok. The Subset
+image will appear in the tree view on the left.
+- Left double click on the image Subset to bring it up on the right.
+
+
+
+\image html hdfview-newimgsubset.png
+ |
+
+
+
+- Close the Subset image.
+
+
+\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.
+
+- Right button click on the group Data. Select New -> Compound DS.
+- A window pops up on the right side of the screen. Only fill in the following fields:
+
+
+Dataset name
+ |
+Table
+ |
+
+
+Dataspace (Current size only)
+ |
+4
+ |
+
+
+Compound Datatype Properties:
+ Number of Members
+ |
+3
+ |
+
+
+Compound Datatype Properties:
+ Name / Datatype / Size
+ |
+Description / string / 4
+ Temperature / float / 1
+ Pressure / double / 1
+ |
+
+
+
+
+
+
+\image html hdfview-newcmpd.png
+ |
+
+
+
+- Click Ok at the bottom.
+- Open the Data group (if it is not open) and double left click on the Table object.
+
+
+
+\image html hdfview-table.png
+ |
+
+
+
+- Close the dataset.
+
+
+*/
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
|
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 @@