From c1d537db2b803d6908fe3f21f62c592c9cd2bf70 Mon Sep 17 00:00:00 2001 From: Frank Baker Date: Fri, 22 Dec 2000 15:47:59 -0500 Subject: [svn-r3196] Purpose: Adding Tutorial to development branch (R 1.4) Platforms tested: IE 5 --- doc/html/Tutor/Contents.html | 103 ++++++ doc/html/Tutor/ContentsAdd.html | 106 ++++++ doc/html/Tutor/ContentsAdv.html | 105 ++++++ doc/html/Tutor/ContentsFull.html | 100 ++++++ doc/html/Tutor/ContentsIntro.html | 106 ++++++ doc/html/Tutor/Copyright.html | 80 +++++ doc/html/Tutor/Graphics/AddInfo.gif | Bin 0 -> 274 bytes doc/html/Tutor/Graphics/AdvTopics.gif | Bin 0 -> 240 bytes doc/html/Tutor/Graphics/BLANK.gif | Bin 0 -> 164 bytes doc/html/Tutor/Graphics/ChunkExt.gif | Bin 0 -> 333 bytes doc/html/Tutor/Graphics/CompDTypes.gif | Bin 0 -> 315 bytes doc/html/Tutor/Graphics/Copy.gif | Bin 0 -> 284 bytes doc/html/Tutor/Graphics/CreateAttr.gif | Bin 0 -> 272 bytes doc/html/Tutor/Graphics/CreateDset1.gif | Bin 0 -> 283 bytes doc/html/Tutor/Graphics/CreateDset2.gif | Bin 0 -> 280 bytes doc/html/Tutor/Graphics/CreateFile.gif | Bin 0 -> 269 bytes doc/html/Tutor/Graphics/CreateGrp1.gif | Bin 0 -> 270 bytes doc/html/Tutor/Graphics/CreateGrp2.gif | Bin 0 -> 270 bytes doc/html/Tutor/Graphics/Examples.gif | Bin 0 -> 297 bytes doc/html/Tutor/Graphics/FileOrg.gif | Bin 0 -> 273 bytes doc/html/Tutor/Graphics/FullTOC1.gif | Bin 0 -> 202 bytes doc/html/Tutor/Graphics/FullTOC2.gif | Bin 0 -> 206 bytes doc/html/Tutor/Graphics/Glossary.gif | Bin 0 -> 238 bytes doc/html/Tutor/Graphics/H5API.gif | Bin 0 -> 237 bytes doc/html/Tutor/Graphics/Intro.gif | Bin 0 -> 244 bytes doc/html/Tutor/Graphics/IntroTopics.gif | Bin 0 -> 256 bytes doc/html/Tutor/Graphics/Iterate.gif | Bin 0 -> 270 bytes doc/html/Tutor/Graphics/MountFile.gif | Bin 0 -> 254 bytes doc/html/Tutor/Graphics/Quiz.gif | Bin 0 -> 202 bytes doc/html/Tutor/Graphics/QuizAns.gif | Bin 0 -> 256 bytes doc/html/Tutor/Graphics/RdWrDataset.gif | Bin 0 -> 305 bytes doc/html/Tutor/Graphics/RefObject.gif | Bin 0 -> 292 bytes doc/html/Tutor/Graphics/RefRegion.gif | Bin 0 -> 296 bytes doc/html/Tutor/Graphics/References.gif | Bin 0 -> 240 bytes doc/html/Tutor/Graphics/SelectElemCp.gif | Bin 0 -> 307 bytes doc/html/Tutor/Graphics/SelectHyp.gif | Bin 0 -> 308 bytes doc/html/Tutor/Graphics/TOC.gif | Bin 0 -> 306 bytes doc/html/Tutor/Graphics/TOCFull.gif | Bin 0 -> 204 bytes doc/html/Tutor/Graphics/TOCShort.gif | Bin 0 -> 215 bytes doc/html/Tutor/Graphics/TitlePg.gif | Bin 0 -> 300 bytes doc/html/Tutor/Graphics/Utilities.gif | Bin 0 -> 222 bytes doc/html/Tutor/answers.html | 216 ++++++++++++ doc/html/Tutor/api.html | 140 ++++++++ doc/html/Tutor/bighdf2sp.JPG | Bin 0 -> 8712 bytes doc/html/Tutor/compound.html | 378 +++++++++++++++++++++ doc/html/Tutor/crtatt.html | 267 +++++++++++++++ doc/html/Tutor/crtdat.html | 340 +++++++++++++++++++ doc/html/Tutor/crtfile.html | 224 +++++++++++++ doc/html/Tutor/crtgrp.html | 167 ++++++++++ doc/html/Tutor/crtgrpar.html | 246 ++++++++++++++ doc/html/Tutor/crtgrpd.html | 191 +++++++++++ doc/html/Tutor/examples/h5_compound.c | 153 +++++++++ doc/html/Tutor/examples/h5_copy.c | 148 +++++++++ doc/html/Tutor/examples/h5_crtatt.c | 46 +++ doc/html/Tutor/examples/h5_crtdat.c | 34 ++ doc/html/Tutor/examples/h5_crtfile.c | 19 ++ doc/html/Tutor/examples/h5_crtgrp.c | 24 ++ doc/html/Tutor/examples/h5_crtgrpar.c | 32 ++ doc/html/Tutor/examples/h5_crtgrpd.c | 74 +++++ doc/html/Tutor/examples/h5_extend.c | 141 ++++++++ doc/html/Tutor/examples/h5_hyperslab.c | 192 +++++++++++ doc/html/Tutor/examples/h5_iterate.c | 111 +++++++ doc/html/Tutor/examples/h5_mount.c | 119 +++++++ doc/html/Tutor/examples/h5_rdwt.c | 37 +++ doc/html/Tutor/examples/h5_read.c | 136 ++++++++ doc/html/Tutor/examples/h5_ref2objr.c | 93 ++++++ doc/html/Tutor/examples/h5_ref2objw.c | 120 +++++++ doc/html/Tutor/examples/h5_ref2regr.c | 119 +++++++ doc/html/Tutor/examples/h5_ref2regw.c | 112 +++++++ doc/html/Tutor/examples/h5_reference.c | 146 +++++++++ doc/html/Tutor/extend.html | 314 ++++++++++++++++++ doc/html/Tutor/fileorg.html | 103 ++++++ doc/html/Tutor/glossary.html | 234 +++++++++++++ doc/html/Tutor/img001.gif | Bin 0 -> 635 bytes doc/html/Tutor/img002.gif | Bin 0 -> 954 bytes doc/html/Tutor/img003.gif | Bin 0 -> 928 bytes doc/html/Tutor/img004.gif | Bin 0 -> 1644 bytes doc/html/Tutor/img005.gif | Bin 0 -> 1812 bytes doc/html/Tutor/index.html | 29 ++ doc/html/Tutor/intro.html | 81 +++++ doc/html/Tutor/iterate.html | 303 +++++++++++++++++ doc/html/Tutor/mount.html | 304 +++++++++++++++++ doc/html/Tutor/questions.html | 142 ++++++++ doc/html/Tutor/rdwt.html | 259 +++++++++++++++ doc/html/Tutor/references.html | 65 ++++ doc/html/Tutor/reftoobj.html | 478 +++++++++++++++++++++++++++ doc/html/Tutor/reftoreg.html | 545 +++++++++++++++++++++++++++++++ doc/html/Tutor/select.html | 452 +++++++++++++++++++++++++ doc/html/Tutor/selectc.html | 296 +++++++++++++++++ doc/html/Tutor/title.html | 99 ++++++ doc/html/Tutor/util.html | 89 +++++ 91 files changed, 8418 insertions(+) create mode 100644 doc/html/Tutor/Contents.html create mode 100644 doc/html/Tutor/ContentsAdd.html create mode 100644 doc/html/Tutor/ContentsAdv.html create mode 100644 doc/html/Tutor/ContentsFull.html create mode 100644 doc/html/Tutor/ContentsIntro.html create mode 100644 doc/html/Tutor/Copyright.html create mode 100644 doc/html/Tutor/Graphics/AddInfo.gif create mode 100644 doc/html/Tutor/Graphics/AdvTopics.gif create mode 100644 doc/html/Tutor/Graphics/BLANK.gif create mode 100644 doc/html/Tutor/Graphics/ChunkExt.gif create mode 100644 doc/html/Tutor/Graphics/CompDTypes.gif create mode 100644 doc/html/Tutor/Graphics/Copy.gif create mode 100644 doc/html/Tutor/Graphics/CreateAttr.gif create mode 100644 doc/html/Tutor/Graphics/CreateDset1.gif create mode 100644 doc/html/Tutor/Graphics/CreateDset2.gif create mode 100644 doc/html/Tutor/Graphics/CreateFile.gif create mode 100644 doc/html/Tutor/Graphics/CreateGrp1.gif create mode 100644 doc/html/Tutor/Graphics/CreateGrp2.gif create mode 100644 doc/html/Tutor/Graphics/Examples.gif create mode 100644 doc/html/Tutor/Graphics/FileOrg.gif create mode 100644 doc/html/Tutor/Graphics/FullTOC1.gif create mode 100644 doc/html/Tutor/Graphics/FullTOC2.gif create mode 100644 doc/html/Tutor/Graphics/Glossary.gif create mode 100644 doc/html/Tutor/Graphics/H5API.gif create mode 100644 doc/html/Tutor/Graphics/Intro.gif create mode 100644 doc/html/Tutor/Graphics/IntroTopics.gif create mode 100644 doc/html/Tutor/Graphics/Iterate.gif create mode 100644 doc/html/Tutor/Graphics/MountFile.gif create mode 100644 doc/html/Tutor/Graphics/Quiz.gif create mode 100644 doc/html/Tutor/Graphics/QuizAns.gif create mode 100644 doc/html/Tutor/Graphics/RdWrDataset.gif create mode 100755 doc/html/Tutor/Graphics/RefObject.gif create mode 100755 doc/html/Tutor/Graphics/RefRegion.gif create mode 100644 doc/html/Tutor/Graphics/References.gif create mode 100644 doc/html/Tutor/Graphics/SelectElemCp.gif create mode 100644 doc/html/Tutor/Graphics/SelectHyp.gif create mode 100644 doc/html/Tutor/Graphics/TOC.gif create mode 100644 doc/html/Tutor/Graphics/TOCFull.gif create mode 100644 doc/html/Tutor/Graphics/TOCShort.gif create mode 100644 doc/html/Tutor/Graphics/TitlePg.gif create mode 100644 doc/html/Tutor/Graphics/Utilities.gif create mode 100644 doc/html/Tutor/answers.html create mode 100644 doc/html/Tutor/api.html create mode 100644 doc/html/Tutor/bighdf2sp.JPG create mode 100644 doc/html/Tutor/compound.html create mode 100644 doc/html/Tutor/crtatt.html create mode 100644 doc/html/Tutor/crtdat.html create mode 100644 doc/html/Tutor/crtfile.html create mode 100644 doc/html/Tutor/crtgrp.html create mode 100644 doc/html/Tutor/crtgrpar.html create mode 100644 doc/html/Tutor/crtgrpd.html create mode 100644 doc/html/Tutor/examples/h5_compound.c create mode 100644 doc/html/Tutor/examples/h5_copy.c create mode 100644 doc/html/Tutor/examples/h5_crtatt.c create mode 100644 doc/html/Tutor/examples/h5_crtdat.c create mode 100644 doc/html/Tutor/examples/h5_crtfile.c create mode 100644 doc/html/Tutor/examples/h5_crtgrp.c create mode 100644 doc/html/Tutor/examples/h5_crtgrpar.c create mode 100644 doc/html/Tutor/examples/h5_crtgrpd.c create mode 100644 doc/html/Tutor/examples/h5_extend.c create mode 100644 doc/html/Tutor/examples/h5_hyperslab.c create mode 100644 doc/html/Tutor/examples/h5_iterate.c create mode 100644 doc/html/Tutor/examples/h5_mount.c create mode 100644 doc/html/Tutor/examples/h5_rdwt.c create mode 100644 doc/html/Tutor/examples/h5_read.c create mode 100644 doc/html/Tutor/examples/h5_ref2objr.c create mode 100644 doc/html/Tutor/examples/h5_ref2objw.c create mode 100644 doc/html/Tutor/examples/h5_ref2regr.c create mode 100644 doc/html/Tutor/examples/h5_ref2regw.c create mode 100644 doc/html/Tutor/examples/h5_reference.c create mode 100644 doc/html/Tutor/extend.html create mode 100644 doc/html/Tutor/fileorg.html create mode 100644 doc/html/Tutor/glossary.html create mode 100644 doc/html/Tutor/img001.gif create mode 100644 doc/html/Tutor/img002.gif create mode 100644 doc/html/Tutor/img003.gif create mode 100644 doc/html/Tutor/img004.gif create mode 100644 doc/html/Tutor/img005.gif create mode 100644 doc/html/Tutor/index.html create mode 100644 doc/html/Tutor/intro.html create mode 100644 doc/html/Tutor/iterate.html create mode 100644 doc/html/Tutor/mount.html create mode 100644 doc/html/Tutor/questions.html create mode 100644 doc/html/Tutor/rdwt.html create mode 100644 doc/html/Tutor/references.html create mode 100644 doc/html/Tutor/reftoobj.html create mode 100644 doc/html/Tutor/reftoreg.html create mode 100644 doc/html/Tutor/select.html create mode 100644 doc/html/Tutor/selectc.html create mode 100644 doc/html/Tutor/title.html create mode 100644 doc/html/Tutor/util.html diff --git a/doc/html/Tutor/Contents.html b/doc/html/Tutor/Contents.html new file mode 100644 index 0000000..49c4a32 --- /dev/null +++ b/doc/html/Tutor/Contents.html @@ -0,0 +1,103 @@ + + + + + +
+Return to HDF5 Doc Set +
+ +
+ + + + +Tutorial Title Page +
+ +
+Introductory Topics +
+ + +
+Advanced Topics + + + +
+Additional Information + + + +
+Full TOC +
+ + +
+
+Copyright, Etc.
+ + + + + diff --git a/doc/html/Tutor/ContentsAdd.html b/doc/html/Tutor/ContentsAdd.html new file mode 100644 index 0000000..78a1386 --- /dev/null +++ b/doc/html/Tutor/ContentsAdd.html @@ -0,0 +1,106 @@ + + + + + + +
+Return to HDF5 Doc Set +
+ +
+ + + + +(Short TOC) +
+
+ +Tutorial Title Page +
+ +
+Introductory Topics + + + +
+Advanced Topics + + + +
+Additional Information +
+HDF5 Utilities -- h5ls and h5dump +
+Glossary +
+References +
+Example Programs + + +
+Full TOC +
+ + +
+
+Copyright, Etc.
+ + + + + diff --git a/doc/html/Tutor/ContentsAdv.html b/doc/html/Tutor/ContentsAdv.html new file mode 100644 index 0000000..b2ac014 --- /dev/null +++ b/doc/html/Tutor/ContentsAdv.html @@ -0,0 +1,105 @@ + + + + + + +
+Return to HDF5 Doc Set +
+ +
+ + + +(Short TOC) +
+
+ +Tutorial Title Page +
+ +
+Introductory Topics + + +
+Advanced Topics +
+Compound Data Types +
+Selections Using H5Sselect_hyperslab +
+Selections Using H5Sselect_elements and H5Scopy +
+References to Objects +
+References to Dataset Regions +
+Chunking and Extendible Datasets +
+Mounting Files +
+Group Iteration + + +
+Additional Information + + + +
+Full TOC +
+ + +
+
+Copyright, Etc.
+ + + + + diff --git a/doc/html/Tutor/ContentsFull.html b/doc/html/Tutor/ContentsFull.html new file mode 100644 index 0000000..09cd5b9 --- /dev/null +++ b/doc/html/Tutor/ContentsFull.html @@ -0,0 +1,100 @@ + + + + + + +
+Return to HDF5 Doc Set +
+ +
+ + + + +(Short TOC) +
+
+ +Tutorial Title Page +
+ +
+Introductory Topics +
+Introduction +
+HDF5 File Organization +
+The HDF5 API +
+Creating an HDF5 File +
+Creating a Dataset +
+Reading from and Writing to a Dataset +
+Creating an Attribute +
+Creating a Group +
+Creating Groups Using Absolute and Relative Names +
+Creating Datasets in a Group + +
+
+Quiz Questions +
+Quiz Answers + + +
+Advanced Topics +
+Compound Data Types +
+Selections Using H5Sselect_hyperslab +
+Selections Using H5Sselect_elements and H5Scopy +
+References to Objects +
+References to Dataset Regions +
+Chunking and Extendible Datasets +
+Mounting Files +
+Group Iteration + + +
+Additional Information +
+HDF5 Utilities -- h5ls and h5dump +
+Glossary +
+References +
+Example Programs + +
+(Short TOC) + + +
+
+Copyright, Etc.
+ + + + + diff --git a/doc/html/Tutor/ContentsIntro.html b/doc/html/Tutor/ContentsIntro.html new file mode 100644 index 0000000..5b974d1 --- /dev/null +++ b/doc/html/Tutor/ContentsIntro.html @@ -0,0 +1,106 @@ + + + + + + +
+Return to HDF5 Doc Set +
+ +
+ + + + +(Short TOC) +
+
+ +Tutorial Title Page +
+ +
+Introductory Topics +
+Introduction +
+HDF5 File Organization +
+The HDF5 API +
+Creating an HDF5 File +
+Creating a Dataset +
+Reading from and Writing to a Dataset +
+Creating an Attribute +
+Creating a Group +
+Creating Groups Using Absolute and Relative Names +
+Creating Datasets in a Group + +
+
+Quiz Questions +
+Quiz Answers + + +
+Advanced Topics + + + +
+Additional Information + + + +
+Full TOC +
+ + +
+
+Copyright, Etc.
+ + + + + diff --git a/doc/html/Tutor/Copyright.html b/doc/html/Tutor/Copyright.html new file mode 100644 index 0000000..b22c16c --- /dev/null +++ b/doc/html/Tutor/Copyright.html @@ -0,0 +1,80 @@ + + + + + HDF5 Copyright Notice + + + + + + + +
+ +

Copyright Notice and Statement for +
+NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities

+
+

+ + +NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities +
+Copyright 1998, 1999 by the Board of Trustees of the University of Illinois +
+All rights reserved. +

+ +Contributors: National Center for Supercomputing Applications (NCSA) at +the University of Illinois at Urbana-Champaign (UIUC), Lawrence Livermore +National Laboratory (LLNL), Sandia National Laboratories (SNL), Los Alamos +National Laboratory (LANL), Jean-loup Gailly and Mark Adler (gzip library). +

+ +Redistribution and use in source and binary forms, with or without +modification, are permitted for any purpose (including commercial purposes) +provided that the following conditions are met: +

+ +

    +
  1. Redistributions of source code must retain the above copyright notice, +this list of conditions, and the following disclaimer. + +
  2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions, and the following disclaimer in the +documentation and/or materials provided with the distribution. + +
  3. In addition, redistributions of modified forms of the source or binary +code must carry prominent notices stating that the original code was +changed and the date of the change. + +
  4. All publications or advertising materials mentioning features or use of +this software are asked, but not required, to acknowledge that it was +developed by the National Center for Supercomputing Applications at the +University of Illinois at Urbana-Champaign and to credit the contributors. + +
  5. Neither the name of the University nor the names of the Contributors may +be used to endorse or promote products derived from this software without +specific prior written permission from the University or the Contributors. + +
  6. THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND THE CONTRIBUTORS "AS IS" +WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. In no event +shall the University or the Contributors be liable for any damages suffered +by the users arising out of the use of this software, even if advised of +the possibility of such damage. + +
+ + +
+ +
+HDF Help Desk + +
+Last modified: 13 October 1999 + + + + diff --git a/doc/html/Tutor/Graphics/AddInfo.gif b/doc/html/Tutor/Graphics/AddInfo.gif new file mode 100644 index 0000000..335107f Binary files /dev/null and b/doc/html/Tutor/Graphics/AddInfo.gif differ diff --git a/doc/html/Tutor/Graphics/AdvTopics.gif b/doc/html/Tutor/Graphics/AdvTopics.gif new file mode 100644 index 0000000..9cea247 Binary files /dev/null and b/doc/html/Tutor/Graphics/AdvTopics.gif differ diff --git a/doc/html/Tutor/Graphics/BLANK.gif b/doc/html/Tutor/Graphics/BLANK.gif new file mode 100644 index 0000000..03134e7 Binary files /dev/null and b/doc/html/Tutor/Graphics/BLANK.gif differ diff --git a/doc/html/Tutor/Graphics/ChunkExt.gif b/doc/html/Tutor/Graphics/ChunkExt.gif new file mode 100644 index 0000000..52f9130 Binary files /dev/null and b/doc/html/Tutor/Graphics/ChunkExt.gif differ diff --git a/doc/html/Tutor/Graphics/CompDTypes.gif b/doc/html/Tutor/Graphics/CompDTypes.gif new file mode 100644 index 0000000..0549b32 Binary files /dev/null and b/doc/html/Tutor/Graphics/CompDTypes.gif differ diff --git a/doc/html/Tutor/Graphics/Copy.gif b/doc/html/Tutor/Graphics/Copy.gif new file mode 100644 index 0000000..7df2e6a Binary files /dev/null and b/doc/html/Tutor/Graphics/Copy.gif differ diff --git a/doc/html/Tutor/Graphics/CreateAttr.gif b/doc/html/Tutor/Graphics/CreateAttr.gif new file mode 100644 index 0000000..82c7f72 Binary files /dev/null and b/doc/html/Tutor/Graphics/CreateAttr.gif differ diff --git a/doc/html/Tutor/Graphics/CreateDset1.gif b/doc/html/Tutor/Graphics/CreateDset1.gif new file mode 100644 index 0000000..2641d88 Binary files /dev/null and b/doc/html/Tutor/Graphics/CreateDset1.gif differ diff --git a/doc/html/Tutor/Graphics/CreateDset2.gif b/doc/html/Tutor/Graphics/CreateDset2.gif new file mode 100644 index 0000000..294c0a5 Binary files /dev/null and b/doc/html/Tutor/Graphics/CreateDset2.gif differ diff --git a/doc/html/Tutor/Graphics/CreateFile.gif b/doc/html/Tutor/Graphics/CreateFile.gif new file mode 100644 index 0000000..e07d0aa Binary files /dev/null and b/doc/html/Tutor/Graphics/CreateFile.gif differ diff --git a/doc/html/Tutor/Graphics/CreateGrp1.gif b/doc/html/Tutor/Graphics/CreateGrp1.gif new file mode 100644 index 0000000..66be2fd Binary files /dev/null and b/doc/html/Tutor/Graphics/CreateGrp1.gif differ diff --git a/doc/html/Tutor/Graphics/CreateGrp2.gif b/doc/html/Tutor/Graphics/CreateGrp2.gif new file mode 100644 index 0000000..93a5c87 Binary files /dev/null and b/doc/html/Tutor/Graphics/CreateGrp2.gif differ diff --git a/doc/html/Tutor/Graphics/Examples.gif b/doc/html/Tutor/Graphics/Examples.gif new file mode 100644 index 0000000..d6b3ac6 Binary files /dev/null and b/doc/html/Tutor/Graphics/Examples.gif differ diff --git a/doc/html/Tutor/Graphics/FileOrg.gif b/doc/html/Tutor/Graphics/FileOrg.gif new file mode 100644 index 0000000..a0f812d Binary files /dev/null and b/doc/html/Tutor/Graphics/FileOrg.gif differ diff --git a/doc/html/Tutor/Graphics/FullTOC1.gif b/doc/html/Tutor/Graphics/FullTOC1.gif new file mode 100644 index 0000000..9a7a810 Binary files /dev/null and b/doc/html/Tutor/Graphics/FullTOC1.gif differ diff --git a/doc/html/Tutor/Graphics/FullTOC2.gif b/doc/html/Tutor/Graphics/FullTOC2.gif new file mode 100644 index 0000000..651e0c7 Binary files /dev/null and b/doc/html/Tutor/Graphics/FullTOC2.gif differ diff --git a/doc/html/Tutor/Graphics/Glossary.gif b/doc/html/Tutor/Graphics/Glossary.gif new file mode 100644 index 0000000..157208a Binary files /dev/null and b/doc/html/Tutor/Graphics/Glossary.gif differ diff --git a/doc/html/Tutor/Graphics/H5API.gif b/doc/html/Tutor/Graphics/H5API.gif new file mode 100644 index 0000000..7d5c8a6 Binary files /dev/null and b/doc/html/Tutor/Graphics/H5API.gif differ diff --git a/doc/html/Tutor/Graphics/Intro.gif b/doc/html/Tutor/Graphics/Intro.gif new file mode 100644 index 0000000..a9d299b Binary files /dev/null and b/doc/html/Tutor/Graphics/Intro.gif differ diff --git a/doc/html/Tutor/Graphics/IntroTopics.gif b/doc/html/Tutor/Graphics/IntroTopics.gif new file mode 100644 index 0000000..384d7a7 Binary files /dev/null and b/doc/html/Tutor/Graphics/IntroTopics.gif differ diff --git a/doc/html/Tutor/Graphics/Iterate.gif b/doc/html/Tutor/Graphics/Iterate.gif new file mode 100644 index 0000000..0dc68d5 Binary files /dev/null and b/doc/html/Tutor/Graphics/Iterate.gif differ diff --git a/doc/html/Tutor/Graphics/MountFile.gif b/doc/html/Tutor/Graphics/MountFile.gif new file mode 100644 index 0000000..fb476df Binary files /dev/null and b/doc/html/Tutor/Graphics/MountFile.gif differ diff --git a/doc/html/Tutor/Graphics/Quiz.gif b/doc/html/Tutor/Graphics/Quiz.gif new file mode 100644 index 0000000..5bba11e Binary files /dev/null and b/doc/html/Tutor/Graphics/Quiz.gif differ diff --git a/doc/html/Tutor/Graphics/QuizAns.gif b/doc/html/Tutor/Graphics/QuizAns.gif new file mode 100644 index 0000000..6b73566 Binary files /dev/null and b/doc/html/Tutor/Graphics/QuizAns.gif differ diff --git a/doc/html/Tutor/Graphics/RdWrDataset.gif b/doc/html/Tutor/Graphics/RdWrDataset.gif new file mode 100644 index 0000000..962fed1 Binary files /dev/null and b/doc/html/Tutor/Graphics/RdWrDataset.gif differ diff --git a/doc/html/Tutor/Graphics/RefObject.gif b/doc/html/Tutor/Graphics/RefObject.gif new file mode 100755 index 0000000..ae9dc05 Binary files /dev/null and b/doc/html/Tutor/Graphics/RefObject.gif differ diff --git a/doc/html/Tutor/Graphics/RefRegion.gif b/doc/html/Tutor/Graphics/RefRegion.gif new file mode 100755 index 0000000..250039f Binary files /dev/null and b/doc/html/Tutor/Graphics/RefRegion.gif differ diff --git a/doc/html/Tutor/Graphics/References.gif b/doc/html/Tutor/Graphics/References.gif new file mode 100644 index 0000000..0d94116 Binary files /dev/null and b/doc/html/Tutor/Graphics/References.gif differ diff --git a/doc/html/Tutor/Graphics/SelectElemCp.gif b/doc/html/Tutor/Graphics/SelectElemCp.gif new file mode 100644 index 0000000..ed8e976 Binary files /dev/null and b/doc/html/Tutor/Graphics/SelectElemCp.gif differ diff --git a/doc/html/Tutor/Graphics/SelectHyp.gif b/doc/html/Tutor/Graphics/SelectHyp.gif new file mode 100644 index 0000000..29ac707 Binary files /dev/null and b/doc/html/Tutor/Graphics/SelectHyp.gif differ diff --git a/doc/html/Tutor/Graphics/TOC.gif b/doc/html/Tutor/Graphics/TOC.gif new file mode 100644 index 0000000..0bc3251 Binary files /dev/null and b/doc/html/Tutor/Graphics/TOC.gif differ diff --git a/doc/html/Tutor/Graphics/TOCFull.gif b/doc/html/Tutor/Graphics/TOCFull.gif new file mode 100644 index 0000000..bb1e982 Binary files /dev/null and b/doc/html/Tutor/Graphics/TOCFull.gif differ diff --git a/doc/html/Tutor/Graphics/TOCShort.gif b/doc/html/Tutor/Graphics/TOCShort.gif new file mode 100644 index 0000000..a17aaee Binary files /dev/null and b/doc/html/Tutor/Graphics/TOCShort.gif differ diff --git a/doc/html/Tutor/Graphics/TitlePg.gif b/doc/html/Tutor/Graphics/TitlePg.gif new file mode 100644 index 0000000..5f9a633 Binary files /dev/null and b/doc/html/Tutor/Graphics/TitlePg.gif differ diff --git a/doc/html/Tutor/Graphics/Utilities.gif b/doc/html/Tutor/Graphics/Utilities.gif new file mode 100644 index 0000000..62e1d78 Binary files /dev/null and b/doc/html/Tutor/Graphics/Utilities.gif differ diff --git a/doc/html/Tutor/answers.html b/doc/html/Tutor/answers.html new file mode 100644 index 0000000..6bc239b --- /dev/null +++ b/doc/html/Tutor/answers.html @@ -0,0 +1,216 @@ + +HDF5 Tutorial - Introductory Topics Questions with Answers + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Introductory Topics Questions with +Answers +

+ +
+
+
+
+Section 2: HDF File Organization
+================================
+
+1. Name and describe the two primary objects that can be stored in an HDF5
+   file:
+
+Answer: 
+Group: A grouping structure containing zero or more HDF5 objects, together
+       with supporting metadata.
+
+Dataset: A multidimensional array of data elements, together with
+         supporting metadata.
+
+2. What is an attribute?
+
+Answer: An HDF attribute is a user-defined HDF5 structure that provides extra
+        information about an HDF5 object.
+
+3. Give the path name for an object called "harry" that is a member of a
+   group called "dick," which in turn is a member of the root group.
+
+Answer: /dick/harry
+
+Section 3: The HDF5 API
+=======================
+
+Describe the purpose of each of the following HDF5 APIs:
+
+H5A, H5D, H5E, F5F, H5G, H5T, H5Z
+
+H5A: Attribute access and manipulation routines.
+H5D: Dataset access and manipulation routines.
+H5E: Error handling routines.
+F5F: File access routines.
+H5G: Routines for creating and operating on groups.
+H5T: Routines for creating and manipulating the datatypes of dataset elements.
+H5Z: Data compression routines.
+
+
+Section 4: Creating an HDF File
+===============================
+
+1. What two HDF5 routines must be called in order to create an HDF5 file?
+
+Answer: H5Fcreate and H5Fclose.
+
+2. What include file must be included in any file that uses the HDF5 library.
+
+Answer: hdf5.h must be included because it contains definitions and
+        declarations used by the library.
+
+3. An HDF5 file is never completely empty because as soon as an HDF5 file
+   is created, it automatically contains a certain primary object.  What is
+   that object?
+
+Answer: The root group.
+
+
+Section 5: Creating a Dataset
+=============================
+
+1. Name and describe two major datatype categories.
+
+Answer: atomic datatype - An atomic datatype cannot be decomposed into
+                          smaller units at the API level.
+        compound datatype - A compound datatype is a collection of atomic/  
+                            compound datatypes, or small arrays of such types.
+
+2. List the HDF5 atomic datatypes. Give an example of a predefined datatype.
+
+Answer: There are six HDF5 atomic datatypes: integer, floating point,
+        date and time, character string, bit field, opaque.
+        H5T_IEEE_F32LE - 4-byte little-endian, IEEE floating point,
+        H5T_NATIVE_INT - native integer  
+
+3. What does the dataspace describe? What are the major characteristics of the
+   simple dataspace? 
+
+Answer: The dataspace describes the dimensionality of the dataset. It is 
+        characterized by its rank and dimension sizes.  
+       
+4. What information needs to be passed to the H5Dcreate function, i.e.
+   what information is needed to describe a dataset at creation time?
+
+Answer:  dataset location, name, dataspace, datatype, and creation properties.
+
+
+Section 6: Reading from/Writing to a Dataset
+============================================
+
+1. What are six pieces of information which need to be specified for
+   reading and writing a dataset?
+
+Answer: A dataset, a dataset's datatype and dataspace in memory, the 
+        dataspace in the file, the transfer properties and data buffer.
+
+2. Why are both the memory dataspace and file dataspace needed for 
+   read/write operations, but only the memory datatype is specified for the 
+   datatype?
+
+Answer: A dataset's file datatype is specified at creation time and cannot be 
+        changed. Both file and memory dataspaces are needed for performing
+        subsetting and partial I/O operations.  
+
+3. What does the line DATASPACE { SIMPLE (4 , 6 ) / ( 4 , 6 ) } in Fig 6.1 
+   means?
+
+Answer: It means that the dataset "dset" has a simple dataspace with the 
+        current dimensions (4,6) and the maximum size of the dimensions (4,6).
+
+
+Section 7: Creating an Attribute
+================================
+
+1. What is an attribute?
+
+Answer: An attribute is a dataset attached to an object. It describes the 
+        nature and/or the intended usage of the object.
+
+2. Can partial I/O operations be performed on attributes?
+
+Answer: No
+
+
+Section 8: Creating a Group
+===========================
+
+What are the two primary objects that can be included in
+a group?
+
+Answer:  A group and a dataset
+
+
+Section 9: Creating Groups using Absolute/Relative Names
+========================================================
+
+1. Group names can be specified in two "ways".  What are these
+   two types of group names that you can specify?
+
+Answer: relative and absolute
+
+2. You have a dataset named "moo" in the group "boo", which is 
+   in the group "foo", which in turn, is in the root group.  How would 
+   you specify an absolute name to access this dataset?
+
+Answer: /foo/boo/moo
+
+Section 10: Creating Datasets in Groups
+=======================================
+
+Describe a way to access the dataset "moo" described in the previous section
+(Section 9, question 2), using a relative and absolute pathname.
+
+Answers: 1. Access the group, "/foo", and get the group ID.
+            Access the group "boo" using the group ID obtained in Step 1.
+            Access the dataset "moo" using the group ID in Step 2.
+               gid = H5Gopen (file_id, "/foo", 0);       /* absolute path */
+               gid1 = H5Gopen (gid, "boo", 0);           /* relative path */
+               did = H5Dopen (gid1, "moo");              /* relative path */
+  
+         2. Access the group, "/foo", and get the group ID.
+            Access the dataset "boo/moo", with the group ID just obtained.
+               gid = H5Gopen (file_id, "/foo", 0);       /* absolute path */
+               did = H5Dopen (gid, "boo/moo");           /* relative path */
+             
+         3. Access the dataset with an absolute path.
+               did = H5Dopen (file_id, "/foo/boo/moo");  /* absolute path */
+
+ + +


+ + NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 2, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/api.html b/doc/html/Tutor/api.html new file mode 100644 index 0000000..3ed0a84 --- /dev/null +++ b/doc/html/Tutor/api.html @@ -0,0 +1,140 @@ + +The HDF5 API + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+The HDF5 API +

+ + +
+ + +

+The HDF5 library provides several interfaces, and is currently implemented in +C. The APIs provide routines for accessing HDF5 files and creating and +manipulating HDF5 objects. All C routines in the HDF5 library begin with +a prefix of the form H5*, where * is a single letter indicating the object on +which the operation is to be performed. The APIs are listed below: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
API
+
+
DESCRIPTION
+
+
H5
+
Library Functions: the general-purpose H5 functions.
+
H5A
+
Annotation Interface: attribute access and manipulating routines.
+
H5D
+
Dataset Interface: dataset access and manipulating routines. +
+
H5E
+
Error Interface: error handling routines.
+
H5F
+
File Interface: file access routines.
+
H5G
+
Group Interface: group creating and operating routines.
+
H5I
+
Identifier Interface: identifier routines.
+
H5P
+
Property List Interface: object property list manipulating + routines.
+
H5R
+
Reference Interface: reference routines.
+
H5S
+
Dataspace Interface: routines for defining dataspaces.
+
H5T
+
Data type Interface: routines for creating and manipulating + the data type of dataset elements.
+
H5Z
+
Compression Interface: compression routine(s).
+ + + +


+ + NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: July 30, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/bighdf2sp.JPG b/doc/html/Tutor/bighdf2sp.JPG new file mode 100644 index 0000000..aad590e Binary files /dev/null and b/doc/html/Tutor/bighdf2sp.JPG differ diff --git a/doc/html/Tutor/compound.html b/doc/html/Tutor/compound.html new file mode 100644 index 0000000..7983bf4 --- /dev/null +++ b/doc/html/Tutor/compound.html @@ -0,0 +1,378 @@ + +HDF5 Tutorial - Compound Data Types + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Compound Data Types +

+ +
+ + +

Contents:

+ +
+ +

Creating Compound Data Types

+A compound data type is similar to a struct in C or a common block in +Fortran. It is a collection of one or more atomic types or small arrays of +such types. To create and use a compound data type you need to refer to +various properties of the data compound data type: +
    +
  • It is of class compound. +
  • It has a fixed total size, in bytes. +
  • It consists of zero or more members (defined in any order) with + unique names and which occupy non-overlapping regions within the datum. +
  • Each member has its own data type. +
  • Each member is referenced by an index number between zero and N-1, + where N is the number of members in the compound data type. +
  • Each member has a name which is unique among its siblings in a + compound data type. +
  • Each member has a fixed byte offset, which is the first byte + (smallest byte address) of that member in a compound data type. +
  • Each member can be a small array of up to four dimensions. +
+Properties of members of a compound data type are defined when the +member is added to the compound type and cannot be subsequently modified. +

+Compound data types must be built out of other data types. First, one +creates an empty compound data type and specifies its total size. Then +members are added to the compound data type in any order. + +

Programming Example

+
+

Description

+ +This example shows how to create a compound data type, write an array +to the file which uses the compound data type, and read back subsets of +the members.
+ +[
Download h5_compound.c] +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#include "hdf5.h"
+
+#define FILE          "SDScompound.h5"
+#define DATASETNAME   "ArrayOfStructures"
+#define LENGTH        10
+#define RANK          1
+
+int
+main(void)
+{
+
+    /* First structure  and dataset*/
+    typedef struct s1_t {
+	int    a;
+	float  b;
+	double c; 
+    } s1_t;
+    s1_t       s1[LENGTH];
+    hid_t      s1_tid;     /* File datatype identifier */
+
+    /* Second structure (subset of s1_t)  and dataset*/
+    typedef struct s2_t {
+	double c;
+	int    a;
+    } s2_t;
+    s2_t       s2[LENGTH];
+    hid_t      s2_tid;    /* Memory datatype handle */
+
+    /* Third "structure" ( will be used to read float field of s1) */
+    hid_t      s3_tid;   /* Memory datatype handle */
+    float      s3[LENGTH];
+
+    int        i;
+    hid_t      file, dataset, space; /* Handles */
+    herr_t     status;
+    hsize_t    dim[] = {LENGTH};   /* Dataspace dimensions */
+
+
+    /*
+     * Initialize the data
+     */
+    for (i = 0; i < LENGTH; i++) {
+        s1[i].a = i;
+        s1[i].b = i*i;
+        s1[i].c = 1./(i+1);
+    }
+
+    /*
+     * Create the data space.
+     */
+    space = H5Screate_simple(RANK, dim, NULL);
+
+    /*
+     * Create the file.
+     */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create the memory data type. 
+     */
+    s1_tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+    H5Tinsert(s1_tid, "a_name", HOFFSET(s1_t, a), H5T_NATIVE_INT);
+    H5Tinsert(s1_tid, "c_name", HOFFSET(s1_t, c), H5T_NATIVE_DOUBLE);
+    H5Tinsert(s1_tid, "b_name", HOFFSET(s1_t, b), H5T_NATIVE_FLOAT);
+
+    /* 
+     * Create the dataset.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, s1_tid, space, H5P_DEFAULT);
+
+    /*
+     * Wtite data to the dataset; 
+     */
+    status = H5Dwrite(dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1);
+
+    /*
+     * Release resources
+     */
+    H5Tclose(s1_tid);
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Fclose(file);
+ 
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+ 
+    dataset = H5Dopen(file, DATASETNAME);
+
+    /* 
+     * Create a data type for s2
+     */
+    s2_tid = H5Tcreate(H5T_COMPOUND, sizeof(s2_t));
+
+    H5Tinsert(s2_tid, "c_name", HOFFSET(s2_t, c), H5T_NATIVE_DOUBLE);
+    H5Tinsert(s2_tid, "a_name", HOFFSET(s2_t, a), H5T_NATIVE_INT);
+
+    /*
+     * Read two fields c and a from s1 dataset. Fields in the file
+     * are found by their names "c_name" and "a_name".
+     */
+    status = H5Dread(dataset, s2_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s2);
+
+    /*
+     * Display the fields
+     */
+    printf("\n");
+    printf("Field c : \n");
+    for( i = 0; i < LENGTH; i++) printf("%.4f ", s2[i].c);
+    printf("\n");
+
+    printf("\n");
+    printf("Field a : \n");
+    for( i = 0; i < LENGTH; i++) printf("%d ", s2[i].a);
+    printf("\n");
+
+    /* 
+     * Create a data type for s3.
+     */
+    s3_tid = H5Tcreate(H5T_COMPOUND, sizeof(float));
+
+    status = H5Tinsert(s3_tid, "b_name", 0, H5T_NATIVE_FLOAT);
+
+    /*
+     * Read field b from s1 dataset. Field in the file is found by its name.
+     */
+    status = H5Dread(dataset, s3_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s3);
+
+    /*
+     * Display the field
+     */
+    printf("\n");
+    printf("Field b : \n");
+    for( i = 0; i < LENGTH; i++) printf("%.4f ", s3[i]);
+    printf("\n");
+
+    /*
+     * Release resources
+     */
+    H5Tclose(s2_tid);
+    H5Tclose(s3_tid);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    return 0;
+}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+The program outputs the following: +
+
+Field c : 
+1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 
+
+Field a : 
+0 1 2 3 4 5 6 7 8 9 
+
+Field b : 
+0.0000 1.0000 4.0000 9.0000 16.0000 25.0000 36.0000 49.0000 64.0000 81.0000 
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ + +

Remarks

+
    +
  • H5Tcreate creates a new data type of the specified class with +the specified number of bytes. +
    +    hid_t H5Tcreate ( H5T_class_t class, size_t size ) 
    +
    +
      +
    • The class parameter specifies the data type to create. +Currently only the H5T_COMPOUND data type class is supported with this +function. +
    • The size parameter specifies the number of bytes in the +data type to create. +
    +

    +

  • H5Tinsert adds a member to the compound data type specified by +type_id. +
    +   herr_t H5Tinsert ( hid_t type_id, const char * name, off_t offset, hid_t field_id ) 
    +
    +
      +
    • The type_id parameter is the identifier of the compound data type +to modify. +
    • The name parameter is the name of the field to insert. The new +member name must be unique within a compound data type. +
    • The offset parameter is the offset in the memory structure of +the field to insert. + +The library defines the HOFFSET macro to compute the offset of a member within +a struct: +
      +  HOFFSET ( s, m ) 
      +
      +This macro computes the offset of member m within a struct +variable s. + +
    • The field_id parameter is the data type identifier of the +field to insert. +
    +

    +

  • H5Tclose releases a data type. +
    +   herr_t H5Tclose ( hid_t type_id ) 
    +
    +The type_id parameter is the identifier of the data type to release. +
+
+

File Contents

+ +
+HDF5 "SDScompound.h5" {
+GROUP "/" {
+   DATASET "ArrayOfStructures" {
+      DATATYPE {
+         H5T_STD_I32BE "a_name";
+         H5T_IEEE_F32BE "b_name";
+         H5T_IEEE_F64BE "c_name";
+      }
+      DATASPACE { SIMPLE ( 10 ) / ( 10 ) }
+      DATA {
+         {
+            [ 0 ],
+            [ 0 ],
+            [ 1 ]
+         },
+         {
+            [ 1 ],
+            [ 1 ],
+            [ 0.5 ]
+         },
+         {
+            [ 2 ],
+            [ 4 ],
+            [ 0.333333 ]
+         },
+         {
+            [ 3 ],
+            [ 9 ],
+            [ 0.25 ]
+         },
+         {
+            [ 4 ],
+            [ 16 ],
+            [ 0.2 ]
+         },
+         {
+            [ 5 ],
+            [ 25 ],
+            [ 0.166667 ]
+         },
+         {
+            [ 6 ],
+            [ 36 ],
+            [ 0.142857 ]
+         },
+         {
+            [ 7 ],
+            [ 49 ],
+            [ 0.125 ]
+         },
+         {
+            [ 8 ],
+            [ 64 ],
+            [ 0.111111 ]
+         },
+         {
+            [ 9 ],
+            [ 81 ],
+            [ 0.1 ]
+         }
+      }
+   }
+}
+}
+
+ + + + + +


+ +
NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/crtatt.html b/doc/html/Tutor/crtatt.html new file mode 100644 index 0000000..82de873 --- /dev/null +++ b/doc/html/Tutor/crtatt.html @@ -0,0 +1,267 @@ + +HDF5 Tutorial - Creating an Attribute + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Creating an Attribute +

+ +
+ + +

Contents:

+ +
+ +

What is an Attribute?

+

+Attributes are small datasets that can be used to describe the nature and/or +the intended usage of the object they are attached to. In this section, we +show how to create and read/write an attribute. +

+

+

Creating an attribute

+

+ Creating an attribute is similar to the creation of a dataset. To create an + attribute the application must specify the object which the attribute is + attached to, the data type and space of the attribute data and the creation + properties. +

+ The steps to create an attribute are as follows: +

    +
  1. Obtain the object identifier that the attribute is to be attached to. +
  2. Define the characteristics of the attribute and specify creation + properties. +
      +
    • Define the data type. +
    • Define the dataspace. +
    • Specify the creation properties. +
    +
  3. Create the attribute. +
  4. Close the attribute and data type, dataspace, and creation property + list if necessary. +
+

+ To create an attribute, the calling program must contain the following calls: +

+     attr_id = H5Acreate(loc_id, attr_name, type_id, space_id, create_plist);
+     H5Aclose(attr_id);
+
+ +

Reading/Writing an attribute

+

+ Attributes may only be read/written as an entire object. No partial I/O is + currently supported. Therefore, to perform I/O operations on an attribute, the + application needs only to specify the attribute and the attribute's memory + data type. +

+ The steps to read/write an attribute are as follows. +

    +
  1. Obtain the attribute identifier. +
  2. Specify the attribute's memory data type. +
  3. Perform the desired operation. +
  4. Close the memory data type if necessary. +
+

+To read/write an attribute, the calling program must contain the following + calls: +

+    status = H5Aread(attr_id, mem_type_id, buf);
+
+ or +
+    status = H5Awrite(attr_id, mem_type_id, buf);
+
+

+

Programming Example

+
+

Description

+This example shows how to create and write a dataset attribute. +It opens an existing file 'dset.h5', obtains the id of the dataset "/dset1", +defines the attribute's dataspace, creates the dataset attribute, writes +the attribute, and then closes the attribute's dataspace, attribute, dataset, +and file.
+[
Download h5_crtatt.c ] +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include <hdf5.h>
+#define FILE "dset.h5"
+
+main() {
+
+   hid_t       file_id, dataset_id, 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;
+
+   /* Open an existing file. */
+   file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /* Open an existing dataset. */
+   dataset_id = H5Dopen(file_id, "/dset");
+
+   /* Create the data space for the attribute. */
+   dims = 2;
+   dataspace_id = H5Screate_simple(1, &dims, NULL);
+
+   /* Create a dataset attribute. */
+   attribute_id = H5Acreate(dataset_id, "attr", H5T_STD_I32BE, dataspace_id, 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);
+
+   /* Close to the dataset. */
+   status = H5Dclose(dataset_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ + +

Remarks

+
    +
  • H5Acreate creates an attribute which is attached to the object specified by + the first parameter, and returns an identifier. +
    +  hid_t H5Acreate (hid_t loc_id, const char *name, hid_t type_id, 
    +                   hid_t space_id, hid_t create_plist) 
    +
    +
      +
    • The first parameter is the identifier of the object which the attribute is + attached to. + +
    • The second parameter is the name of the attribute to create. + +
    • The third parameter is the identifier of the attribute's datatype. + +
    • The fourth parameter is the identifier of the attribute's dataspace. + +
    • The last parameter is the identifier of the creation property list. + H5P_DEFAULT specifies the default creation property list. +
    +

    +

  • H5Awrite writes the entire attribute, and returns the status of the write. +
    +  herr_t H5Awrite (hid_t attr_id, hid_t mem_type_id, void *buf) 
    +
    +
      +
    • The first parameter is the identifier of the attribute to write. + +
    • The second parameter is the identifier of the attribute's memory datatype. + +
    • The last parameter is the data buffer. +
    +

    +

  • When an attribute is no longer accessed by a program, H5Aclose must be called + to release the attribute from use. This call is mandatory. +
    +  herr_t H5Aclose (hid_t attr_id) 
    +
    +
+ + + +
+

File Contents

+

+The contents of 'dset.h5' and the attribute definition are given in the +following: +

+Fig. 7.1   'dset.h5' in DDL + +

+
+     HDF5 "dset.h5" {
+      GROUP "/" {
+         DATASET "dset" {
+            DATATYPE { H5T_STD_I32BE }
+            DATASPACE { SIMPLE ( 4, 6 ) / ( 4, 6 ) }
+            DATA {
+               1, 2, 3, 4, 5, 6,
+               7, 8, 9, 10, 11, 12,
+               13, 14, 15, 16, 17, 18,
+               19, 20, 21, 22, 23, 24
+            }
+            ATTRIBUTE "attr" {
+               DATATYPE { H5T_STD_I32BE }
+               DATASPACE { SIMPLE ( 2 ) / ( 2 ) }
+               DATA {
+                  100, 200
+               }
+            }
+         }
+      }
+      }
+
+ + +
+

Attribute Definition in DDL

+Fig. 7.2   HDF5 Attribute Definition +
+
+     <attribute> ::= ATTRIBUTE "<attr_name>" { <datatype>
+                                               <dataspace>
+                                               <data>  }
+
+
+ + + + +


+ +
NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/crtdat.html b/doc/html/Tutor/crtdat.html new file mode 100644 index 0000000..cb07ccd --- /dev/null +++ b/doc/html/Tutor/crtdat.html @@ -0,0 +1,340 @@ + +HDF5 Tutorial - Creating a Dataset + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Creating a Dataset +

+ +
+ + +

Contents:

+ +
+ +

What is a Dataset?

+

+A dataset is a multidimensional array of data elements, together with +supporting metadata. To create a dataset, the application program must specify +the location to create the dataset, the dataset name, the data type and space +of the data array, and the dataset creation properties. +

+

Data Types

+ A data type is a collection of data type properties, all of which can + be stored on disk, and which when taken as a whole, provide complete + information for data conversion to or from that data type. +

+ There are two categories of data types in HDF5: atomic and compound data + types. An atomic type is a type which cannot be decomposed into smaller + units at the API level. A compound data type is a collection of one or more + atomic types or small arrays of such types. +

+ Atomic types include integer, float, date and time, string, bit field, and + opaque. Figure 5.1 shows the HDF5 data types. Some of the HDF5 predefined + atomic data types are listed in Figure 5.2. In this tutorial, we consider + only + HDF5 predefined integers. For information on data types, see the HDF5 + User's Guide. +

+ Fig 5.1   HDF5 data types +

+
+                                          +--  integer
+                                          +--  floating point
+                        +---- atomic  ----+--  date and time
+                        |                 +--  character string
+       HDF5 datatypes --|                 +--  bit field
+                        |                 +--  opaque
+                        |
+                        +---- compound
+
+
+ Fig. 5.2   Examples of HDF5 predefined data types + + + + + + + + + + + + + + + + + + + + + + + + + +
Data TypeDescription
H5T_STD_I32LEFour-byte, little-endian, signed two's complement integer
H5T_STD_U16BETwo-byte, big-endian, unsigned integer
H5T_IEEE_F32BEFour-byte, big-endian, IEEE floating point
H5T_IEEE_F64LEEight-byte, little-endian, IEEE floating point
H5T_C_S1One-byte, null-terminated string of eight-bit characters
+ +

Dataspaces

+ + A dataspace describes the dimensionality of the data array. A dataspace + is either a regular N-dimensional array of data points, called a simple + dataspace, or a more general collection of data points organized in + another manner, called a complex dataspace. Figure 5.3 shows HDF5 dataspaces. + In this tutorial, we only consider simple dataspaces. +

+ Fig 5.3   HDF5 dataspaces +

+
+                         +-- simple
+       HDF5 dataspaces --|
+                         +-- complex
+
+
+ The dimensions of a dataset can be fixed (unchanging), or they may be + unlimited, which means that they are extendible. A dataspace can also + describe portions of a dataset, making it possible to do partial I/O + operations on selections. + +

Dataset creation properties

+ + When creating a dataset, HDF5 allows users to specify how raw data is + organized on disk and how the raw data is compressed. This information is + stored in a dataset creation property list and passed to the dataset + interface. The raw data on disk can be stored contiguously (in the same + linear way that it is organized in memory), partitioned into chunks and + stored externally, etc. In this tutorial, we use the default creation + property list; that is, no compression and + contiguous storage layout is used. For more information about the creation + properties, see the HDF5 User's Guide. + +

+In HDF5, data types and spaces are independent objects, which are created +separately from any dataset that they might be attached to. Because of this the +creation of a dataset requires definitions of data type and dataspace. +In this tutorial, we use HDF5 predefined data types (integer) and consider +only simple dataspaces. Hence, only the creation of dataspace objects is +needed. +

+ +To create an empty dataset (no data written) the following steps need to be +taken: +

    +
  1. Obtain the location id where the dataset is to be created. +
  2. Define the dataset characteristics and creation properties. +
      +
    • define a data type +
    • define a dataspace +
    • specify dataset creation properties +
    +
  3. Create the dataset. +
  4. Close the data type, dataspace, and the property list if necessary. +
  5. Close the dataset. +
+To create a simple dataspace, the calling program must contain the following +calls: +
+   dataspace_id = H5Screate_simple(rank, dims, maxdims);
+   H5Sclose(dataspace_id );
+
+ +To create a dataset, the calling program must contain the following calls: +
+   dataset_id = H5Dcreate(hid_t loc_id, const char *name, hid_t type_id,
+                          hid_t space_id, hid_t create_plist_id);
+   H5Dclose (dataset_id);
+
+ + +

+

Programming Example

+
+

Description

+The following example shows how to create an empty dataset. +It creates a file called 'dset.h5', defines the dataset dataspace, creates a +dataset which is a 4x6 integer array, and then closes the dataspace, +the dataset, and the file.
+[
Download h5_crtdat.c ] +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include <hdf5.h>
+#define FILE "dset.h5"
+
+main() {
+
+   hid_t       file_id, dataset_id, dataspace_id;  /* identifiers */
+   hsize_t     dims[2];
+   herr_t      status;
+
+   /* Create a new file using default properties. */
+   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Create the data 
+                space 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);
+
+   /* End access to the dataset and release resources used by it. */
+   status = H5Dclose(dataset_id);
+
+   /* Terminate access to the data space. */
+   status = H5Sclose(dataspace_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ + +

Remarks

+
    +
  • H5Screate_simple creates a new simple data space and returns a data space + identifier. +
    +  hid_t H5Screate_simple (int rank, const hsize_t * dims, 
    +                          const hsize_t * maxdims)
    +
    +
      +
    • The first parameter specifies the rank of the dataset. + +
    • The second parameter specifies the size of the dataset. + +
    • The third parameter is for the upper limit on the size of the dataset. + If it is NULL, the upper limit is the same as the dimension + sizes specified by the second parameter. +
    +

    +

  • H5Dcreate creates a dataset at the specified location and returns a + dataset identifier. +
    +  hid_t H5Dcreate (hid_t loc_id, const char *name, hid_t type_id, 
    +                   hid_t space_id, hid_t create_plist_id) 
    +
    +
      +
    • The first parameter is the location identifier. + +
    • The second parameter is the name of the dataset to create. + +
    • The third parameter is the data type identifier. H5T_STD_I32BE, a + 32-bit Big Endian integer, is an HDF atomic data type. + +
    • The fourth parameter is the data space identifier. + +
    • The last parameter specifies the dataset creation property list. + H5P_DEFAULT specifies the default dataset creation property list. +
    +

    +

  • H5Dcreate creates an empty array and initializes the data to 0. +

    +

  • When a dataset is no longer accessed by a program, H5Dclose must be +called to release the resource used by the dataset. This call is mandatory. +
    +  hid_t H5Dclose (hid_t dataset_id)
    +
    +
+ +
+

File Contents

+The file contents of 'dset.h5' are shown is Figure 5.4 and Figure 5.5. + + + + + + + + + + +
Figure 5.4   The Contents of 'dset.h5' + Figure 5.5   'dset.h5' in DDL
+
      HDF5 "dset.h5" {
+      GROUP "/" {
+         DATASET "dset" {
+            DATATYPE { H5T_STD_I32BE }
+            DATASPACE { SIMPLE ( 4, 6 ) / ( 4, 6 ) }
+            DATA {
+               0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0
+            }
+         }
+      }
+      }
+
+
+ + + +
+

Dataset Definition in DDL

+The following is the simplified DDL dataset definition: +

+ Fig. 5.6   HDF5 Dataset Definition +

+      <dataset> ::= DATASET "<dataset_name>" { <data type>
+                                               <dataspace>
+                                               <data>
+                                               <dataset_attribute>* }
+
+      <data type> ::= DATATYPE { <atomic_type> }
+
+      <dataspace> ::= DATASPACE { SIMPLE <current_dims> / <max_dims> }
+
+      <dataset_attribute> ::= <attribute>
+
+ + + + +


+ +
NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + diff --git a/doc/html/Tutor/crtfile.html b/doc/html/Tutor/crtfile.html new file mode 100644 index 0000000..8786aab --- /dev/null +++ b/doc/html/Tutor/crtfile.html @@ -0,0 +1,224 @@ + +HDF5 Tutorial - Creating an HDF5 File + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Creating an HDF5 file +

+ +
+ + +

Contents:

+ +
+ +

What is an HDF5 file?

+

+An HDF5 file is a binary file which contains scientific data and supporting +metadata. The two primary objects stored in an HDF5 file are groups and +datasets. Groups and datasets will be discussed in the other sessions. +

+To create a file, the program application must specify a file name, file +access mode, file creation property list, and file access property list. +

+

    +
  • File Creation Property List:
    + The file creation property list is used to control the file metadata. + File metadata contains information about the size of the user-block, the + size of various file data structures used by the HDF5 library, etc. +

    + The user-block is a fixed length block of data located at the beginning + of the file which is ignored by the HDF5 library and may be used to store + any data information found to be useful to applications. +

    + For more details, see the HDF5 documentation. In this tutorial, + the default file metadata is used. +

    +

  • File Access Property List:
    + The file access property list is used to control different methods of + performing I/O on files. See the HDF5 User's Guide for details. The default + file access property is used in this tutorial. +
+

+The steps to create and close an HDF5 file are as follows: +

    +
  1. Specify the file creation and access property lists if necessary. +
  2. Create a file. +
  3. Close the file and close the property lists if necessary. +
+To create an HDF5 file, the calling program must contain the following calls: + +
+   file_id = H5Fcreate(filename, access_mode, create_id, access_id);
+
+   H5Fclose(file_id); 
+
+

+

Programming Example

+
+

Description

+The following example demonstrates how to create and close an HDF5 file. +It creates a file called 'file.h5', and then closes the file.
+[
Download h5_crtfile.c ] +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+#include <hdf5.h>
+#define FILE "file.h5"
+
+main() {
+
+   hid_t       file_id;   /* file identifier */
+   herr_t      status;
+
+   /* Create a new file using default properties. */
+   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Terminate access to the file. */
+   status = H5Fclose(file_id); 
+}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+ +

Remarks

+
    +
  • The include file 'hdf5.h' contains definitions and declarations, and it must + be included in any file that uses the HDF5 library. +

    +

  • H5Fcreate creates an HDF5 file and returns the file identifier. +
    + hid_t H5Fcreate (const char *name, unsigned flags, hid_t create_id, 
    +                  hid_t access_id) 
    +
    +
      +
    • The first parameter specifies the name of the file to be created. +

      +

    • The second parameter specifies the file access mode. H5F_ACC_TRUNC will + truncate a file if it already exists. +

      +

    • The third parameter specifies the file creation property list. + H5P_DEFAULT indicates that the default file creation property list is + used. + +

      +

    • The last parameter of H5Fcreate specifies the file access property list. + H5P_DEFAULT indicates that the default file access property list is used. + +
    +

    +

  • When a file is no longer accessed by a program, H5Fclose must be called to + release the resource used by the file. This call is mandatory. +
    +    herr_t H5Fclose (hid_t file_id) 
    +
    +

    +

  • The root group is automatically created when a file is created. + Every file has a root group and the path name of the root group is '/'. +
+
+

File Contents

+HDF has developed tools to examine the contents of HDF5 files. The tool used +in this tutorial is the HDF5 dumper, h5dump. h5dump is a tool that displays +the file contents in human readable form to an ASCII file in DDL. DDL (Data +Description Language) is a language that describes HDF5 objects in Backus-Naur +Form. To view the file contents, type: +
+   h5dump <filename> 
+
+Figure 4.1 describes the file contents of 'file.h5' using a directed graph. +Each HDF5 object is represented by a rectangle and the arrows indicate +the structure of the contents. In Fig. 4.2, 'file.h5' contains +a group object named '/' (the root group). + +

+Fig. 4.1   Contents of 'file.h5' +

+
+
+Figure 4.2 is the text-description of 'file.h5' generated by h5dump. The HDF5 +file called 'file.h5' contains a group called '/'. +

+ Fig. 4.2   'file.h5' in DDL +

+
+         HDF5 "file.h5" {
+         GROUP "/" {
+         }
+         }
+
+
+
+

File Definition in DDL

+Figure 4.3 is the simplified DDL file definition for creating an HDF5 file. +For simplicity, a simplified DDL is used in this tutorial. A complete and +more rigorous DDL can be found in the HDF5 User's Guide. See the +
References section of this tutorial. +

+ Fig. 4.3   HDF5 File Definition +

+ The explanation of the symbols used in the DDL: +

+
+        ::=               defined as
+        <tname>           a token with the name tname
+        <a> | <b>         one of <a> or <b>
+        <a>*              zero or more occurrences of <a>
+
+ The simplified DDL file definition: +
+        <file> ::= HDF5 "<file_name>" { <root_group> }
+
+        <root_group> ::= GROUP "/" { <group_attribute>* <group_member>* }
+
+        <group_attribute> ::= <attribute>
+
+        <group_member> ::= <group> | <dataset>
+
+ + +


+ + NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/crtgrp.html b/doc/html/Tutor/crtgrp.html new file mode 100644 index 0000000..566fd2c --- /dev/null +++ b/doc/html/Tutor/crtgrp.html @@ -0,0 +1,167 @@ + +HDF5 Tutorial - Creating a Group + + + + + + + +NCSA

+ + + [ HDF5 Tutorial Top ] +

+Creating a Group +

+ +
+ + +

Contents:

+ +
+ +

What is a Group?

+

+An HDF5 group is a structure containing zero or more HDF5 objects. The two +primary HDF5 objects are groups and datasets. To create a group, the calling +program must: +

    +
  1. Obtain the location identifier where the group is to be created. +
  2. Create the group. +
  3. Close the group. +
+To create a group, the calling program must contain the following calls: +
+  group_id = H5Gcreate (loc_id, name, size_hint);
+  H5Gclose (group_id);
+
+ + + + +

+

Programming Example

+
+

Description

+The following example shows how to create and close a group. It creates a file +called 'group.h5', creates a group called MyGroup in the root group, +and then closes the group and file.
+[
Download h5_crtgrp.c ] +
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include <hdf5.h>
+#define FILE "group.h5"
+
+main() {
+
+   hid_t       file_id, group_id;  /* identifiers */
+   herr_t      status;
+
+   /* Create a new file using default properties. */
+   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Create a group named "/MyGroup" in the file. */
+   group_id = H5Gcreate(file_id, "/MyGroup", 0);
+
+   /* Close the group. */
+   status = H5Gclose(group_id);
+
+   /* Terminate access to the file. */
+   status = H5Fclose(file_id);
+}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ +

Remarks

+
    +
  • H5Gcreate creates a new empty group and returns a group identifier. +
    +  hid_t H5Gcreate (hid_t loc_id, const char *name, size_t size_hint) 
    +
    +
      +
    • The first parameter specifies the location to create the group. + +
    • The second parameter specifies the name of the group to be created. + +
    • The third parameter specifies how much file space to reserve to store the + names that will appear in the group. If a non-positive value is supplied, + then a default size is used. Passing a value of zero is usually adequate + since the library is able to dynamically resize the name heap. +
    +

    +

  • H5Gcreate creates a group named MyGroup in the root group of the specified + file. +

    +

  • H5Gclose closes the group. This call is mandatory. +
    +  herr_t H5Gclose (hid_t group_id) 
    +
    +
+ +
+

File Contents

+The contents of 'group.h5' and the definition of the group are given in the +following: +

+ + + + + + + + + + +
Fig. 8.1   The Contents of 'group.h5'. + Fig. 8.2   'group.h5' in DDL
+
       
+HDF5 "group.h5" {
+GROUP "/" {
+   GROUP "MyGroup" {
+   }
+}
+}
+
+
+ + + + +


+ +
NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/crtgrpar.html b/doc/html/Tutor/crtgrpar.html new file mode 100644 index 0000000..d5fbc66 --- /dev/null +++ b/doc/html/Tutor/crtgrpar.html @@ -0,0 +1,246 @@ + +HDF5 Tutorial - Creating Groups using Absolute/Relative Names + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Creating Groups using +Absolute/Relative Names +

+ +
+ + +

Contents:

+ +
+ +

Absolute vs. Relative Names

+

+Recall that to create an HDF5 object, we have to specify the location where the +object is to be created. This location is determined by the identifier of an HDF5 +object and the name of the object to be created. The name of the created +object can be either an absolute name or a name relative to the specified +identifier. +In Example 5, we used the file identifier and the absolute name "/MyGroup" to create a +group. The file identifier and the name "/" specifies the location where the group +"MyGroup" was created. +

+In this section, we discuss HDF5 names and show how to use absolute/relative +names by giving an example of creating groups in a file. + +

Names

+ +HDF5 object names are a slash-separated list of components. There are few +restrictions on names: component names may be any length except zero and may +contain any character except slash ("/") and the null terminator. A full name +may be composed of any number of component names separated by slashes, with any +of the component names being the special name ".". A name which begins with a +slash is an absolute name which is accessed beginning with the root group of the +file while all other relative names are accessed beginning with the specified +group. Multiple consecutive slashes in a full name are treated as single slashes +and trailing slashes are not significant. A special case is the name "/" (or +equivalent) which refers to the root group. +

+Functions which operate on names generally take a location identifier which +is either a file ID or a group ID and perform the lookup with respect to that +location. Some possibilities are: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Location Type Object NameDescription
File ID +
/foo/bar
+
The object bar in group foo in the root group.
Group ID +
/foo/bar
+
The object bar in group foo in the root group of the file containing the + specified group. In other words, the group ID's only purpose is to supply + a file.
File ID +
/
+
The root group of the specified file.
Group ID +
/
+
The root group of the file containing the specified group.
Group ID +
foo/bar
+
The object bar in group foo in the specified group.
File ID +
.
+
The root group of the file.
Group ID +
.
+
The specified group.
Other ID +
.
+
The specified object.
+ + +

+

Programming Example

+
+

Description

+The following example code shows how to create groups using absolute +and relative names. It creates three groups: the first two groups are +created using the file identifier and the group absolute names, and the +third group is created using a group identifier and the name relative +to the specified group.
+[
Download h5_crtgrpar.c ] + +
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include <hdf5.h>
+#define FILE "groups.h5"
+
+main() {
+
+   hid_t       file_id, group1_id, group2_id, group3_id;  /* identifiers */
+   herr_t      status;
+
+   /* Create a new file using default properties. */
+   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Create group "MyGroup" in the root group using absolute name. */
+   group1_id = H5Gcreate(file_id, "/MyGroup", 0);
+
+   /* Create group "Group_A" in group "MyGroup" using absolute name. */
+   group2_id = H5Gcreate(file_id, "/MyGroup/Group_A", 0);
+
+   /* Create group "Group_B" in group "MyGroup" using relative name. */
+   group3_id = H5Gcreate(group1_id, "Group_B", 0);
+
+   /* Close groups. */
+   status = H5Gclose(group1_id);
+   status = H5Gclose(group2_id);
+   status = H5Gclose(group3_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ + + +

Remarks

+
    +
  • H5Gcreate creates a group at the location specified by a location ID and a + name. The location ID can be a file ID or a group ID and the name can be + relative or absolute. + +
  • The first H5Gcreate creates the group 'MyGroup' in the root group of the + specified file. + +
  • The second H5Gcreate creates the group 'Group_A' in the group 'MyGroup' + in the root group of the specified file. Note that the parent group (MyGroup) + already exists. + +
  • The third H5Gcreate creates the group 'Group_B' in the specified group. +
+
+

File Contents

+The file contents are shown below: +

+Fig. 9.1   The Contents of 'groups.h5' +

+ +

+ + + Fig. 9.2   'groups.h5' in DDL +
+
+      HDF5 "groups.h5" {
+      GROUP "/" {
+         GROUP "MyGroup" {
+            GROUP "Group_A" {
+            }
+            GROUP "Group_B" {
+            }
+         }
+      }
+      }
+
+
+ + + +


+ +
NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/crtgrpd.html b/doc/html/Tutor/crtgrpd.html new file mode 100644 index 0000000..e92a101 --- /dev/null +++ b/doc/html/Tutor/crtgrpd.html @@ -0,0 +1,191 @@ + +HDF5 Tutorial - Creating Datasets in Groups + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Creating Datasets in Groups +

+ +
+ + +

Contents:

+ +
+ +

Creating datasets in groups

+We have shown how to create groups, datasets and attributes. In this section, +we show how to create datasets in groups. Recall that H5Dcreate creates a +dataset at the location specified by a location identifier and a name. Similar to +H5Gcreate, the location identifier can be a file identifier or a group identifier and the name can be +relative or absolute. The location identifier and the name together determine the +location where the dataset is to be created. If the location identifier and name +refers to a group, then the dataset is created in that group. + + +

Programming Example

+
+

Description

+This example shows how to create a dataset in a particular group. +It opens the file created in the previous example and creates two datasets.
+[
Download h5_crtgrpd.c ] +
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include <hdf5.h>
+#define FILE "groups.h5"
+
+main() {
+
+   hid_t       file_id, group_id, dataset_id, dataspace_id;  /* identifiers */
+   hsize_t     dims[2];
+   herr_t      status;
+   int         i, j, dset1_data[3][3], dset2_data[2][10];
+
+   /* Initialize the first dataset. */
+   for (i = 0; i < 3; i++)
+      for (j = 0; j < 3; j++)
+         dset1_data[i][j] = j + 1;
+
+   /* Initialize the second dataset. */
+   for (i = 0; i < 2; i++)
+      for (j = 0; j < 10; j++)
+         dset2_data[i][j] = j + 1;
+
+   /* Open an existing file. */
+   file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /* Create the data space for the first dataset. */
+   dims[0] = 3;
+   dims[1] = 3;
+   dataspace_id = H5Screate_simple(2, dims, NULL);
+
+   /* Create a dataset in group "MyGroup". */
+   dataset_id = H5Dcreate(file_id, "/MyGroup/dset1", H5T_STD_I32BE, dataspace_id
+,
+                       H5P_DEFAULT);
+
+   /* Write the first dataset. */
+   status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+                     dset1_data);
+
+   /* Close the data space for the first dataset. */
+   status = H5Sclose(dataspace_id);
+
+   /* Close the first dataset. */
+   status = H5Dclose(dataset_id);
+
+   /* Open an existing group of the specified file. */
+   group_id = H5Gopen(file_id, "/MyGroup/Group_A");
+
+   /* Create the data space for the second dataset. */
+   dims[0] = 2;
+   dims[1] = 10;
+   dataspace_id = H5Screate_simple(2, dims, NULL);
+
+   /* Create the second dataset in group "Group_A". */
+   dataset_id = H5Dcreate(group_id, "dset2", H5T_STD_I32BE, dataspace_id, H5P_DEFAULT);
+
+   /* Write the second dataset. */
+   status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+                     dset2_data);
+
+   /* Close the data space for the second dataset. */
+   status = H5Sclose(dataspace_id);
+
+   /* Close the second dataset */
+   status = H5Dclose(dataset_id);
+
+   /* Close the group. */
+   status = H5Gclose(group_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ + + +

File Contents

+

+Fig. 10.1   The Contents of 'groups.h5' +

+
+ + + + Fig. 10.2   'groups.h5' in DDL +
+
+   HDF5 "groups.h5" {
+      GROUP "/" {
+         GROUP "MyGroup" {
+            GROUP "Group_A" {
+               DATASET "dset2" {
+                  DATATYPE { H5T_STD_I32BE }
+                  DATASPACE { SIMPLE ( 2, 10 ) / ( 2, 10 ) }
+                  DATA {
+                     1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+                     1, 2, 3, 4, 5, 6, 7, 8, 9, 10
+                  }
+               }
+            }
+            GROUP "Group_B" {
+            }
+            DATASET "dset1" {
+               DATATYPE { H5T_STD_I32BE }
+               DATASPACE { SIMPLE ( 3, 3 ) / ( 3, 3 ) }
+               DATA {
+                  1, 2, 3,
+                  1, 2, 3,
+                  1, 2, 3
+               }
+            }
+         }
+      }
+      }
+
+ + + + +


+ +
NCSA
The National Center for Supercomputing Applications

+ University of Illinois at Urbana-Champaign
+ +
+hdfhelp@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/examples/h5_compound.c b/doc/html/Tutor/examples/h5_compound.c new file mode 100644 index 0000000..4bb4ad1 --- /dev/null +++ b/doc/html/Tutor/examples/h5_compound.c @@ -0,0 +1,153 @@ +/* + * This example shows how to create a compound data type, + * write an array which has the compound data type to the file, + * and read back fields' subsets. + */ + +#include "hdf5.h" + +#define FILE "SDScompound.h5" +#define DATASETNAME "ArrayOfStructures" +#define LENGTH 10 +#define RANK 1 + +int +main(void) +{ + + /* First structure and dataset*/ + typedef struct s1_t { + int a; + float b; + double c; + } s1_t; + s1_t s1[LENGTH]; + hid_t s1_tid; /* File datatype identifier */ + + /* Second structure (subset of s1_t) and dataset*/ + typedef struct s2_t { + double c; + int a; + } s2_t; + s2_t s2[LENGTH]; + hid_t s2_tid; /* Memory datatype handle */ + + /* Third "structure" ( will be used to read float field of s1) */ + hid_t s3_tid; /* Memory datatype handle */ + float s3[LENGTH]; + + int i; + hid_t file, dataset, space; /* Handles */ + herr_t status; + hsize_t dim[] = {LENGTH}; /* Dataspace dimensions */ + + + /* + * Initialize the data + */ + for (i = 0; i< LENGTH; i++) { + s1[i].a = i; + s1[i].b = i*i; + s1[i].c = 1./(i+1); + } + + /* + * Create the data space. + */ + space = H5Screate_simple(RANK, dim, NULL); + + /* + * Create the file. + */ + file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* + * Create the memory data type. + */ + s1_tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t)); + H5Tinsert(s1_tid, "a_name", HOFFSET(s1_t, a), H5T_NATIVE_INT); + H5Tinsert(s1_tid, "c_name", HOFFSET(s1_t, c), H5T_NATIVE_DOUBLE); + H5Tinsert(s1_tid, "b_name", HOFFSET(s1_t, b), H5T_NATIVE_FLOAT); + + /* + * Create the dataset. + */ + dataset = H5Dcreate(file, DATASETNAME, s1_tid, space, H5P_DEFAULT); + + /* + * Wtite data to the dataset; + */ + status = H5Dwrite(dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1); + + /* + * Release resources + */ + H5Tclose(s1_tid); + H5Sclose(space); + H5Dclose(dataset); + H5Fclose(file); + + /* + * Open the file and the dataset. + */ + file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT); + + dataset = H5Dopen(file, DATASETNAME); + + /* + * Create a data type for s2 + */ + s2_tid = H5Tcreate(H5T_COMPOUND, sizeof(s2_t)); + + H5Tinsert(s2_tid, "c_name", HOFFSET(s2_t, c), H5T_NATIVE_DOUBLE); + H5Tinsert(s2_tid, "a_name", HOFFSET(s2_t, a), H5T_NATIVE_INT); + + /* + * Read two fields c and a from s1 dataset. Fields in the file + * are found by their names "c_name" and "a_name". + */ + status = H5Dread(dataset, s2_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s2); + + /* + * Display the fields + */ + printf("\n"); + printf("Field c : \n"); + for( i = 0; i < LENGTH; i++) printf("%.4f ", s2[i].c); + printf("\n"); + + printf("\n"); + printf("Field a : \n"); + for( i = 0; i < LENGTH; i++) printf("%d ", s2[i].a); + printf("\n"); + + /* + * Create a data type for s3. + */ + s3_tid = H5Tcreate(H5T_COMPOUND, sizeof(float)); + + status = H5Tinsert(s3_tid, "b_name", 0, H5T_NATIVE_FLOAT); + + /* + * Read field b from s1 dataset. Field in the file is found by its name. + */ + status = H5Dread(dataset, s3_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s3); + + /* + * Display the field + */ + printf("\n"); + printf("Field b : \n"); + for( i = 0; i < LENGTH; i++) printf("%.4f ", s3[i]); + printf("\n"); + + /* + * Release resources + */ + H5Tclose(s2_tid); + H5Tclose(s3_tid); + H5Dclose(dataset); + H5Fclose(file); + + return 0; +} diff --git a/doc/html/Tutor/examples/h5_copy.c b/doc/html/Tutor/examples/h5_copy.c new file mode 100644 index 0000000..b0a5e00 --- /dev/null +++ b/doc/html/Tutor/examples/h5_copy.c @@ -0,0 +1,148 @@ +/***********************************************************************/ +/* */ +/* PROGRAM: h5_copy.c */ +/* PURPOSE: Shows how to use the H5SCOPY function. */ +/* DESCRIPTION: */ +/* This program creates two files, copy1.h5, and copy2.h5. */ +/* In copy1.h5, it creates a 3x4 dataset called 'Copy1', */ +/* and write 0's to this dataset. */ +/* In copy2.h5, it create a 3x4 dataset called 'Copy2', */ +/* and write 1's to this dataset. */ +/* It closes both files, reopens both files, selects two */ +/* points in copy1.h5 and writes values to them. Then it */ +/* does an H5Scopy from the first file to the second, and */ +/* writes the values to copy2.h5. It then closes the */ +/* files, reopens them, and prints the contents of the */ +/* two datasets. */ +/* */ +/***********************************************************************/ + +#include "hdf5.h" +#define FILE1 "copy1.h5" +#define FILE2 "copy2.h5" + +#define RANK 2 +#define DIM1 3 +#define DIM2 4 +#define NUMP 2 + +int main (void) +{ + hid_t file1, file2, dataset1, dataset2; + hid_t mid1, mid2, fid1, fid2; + hsize_t fdim[] = {DIM1, DIM2}; + hsize_t mdim[] = {DIM1, DIM2}; + hsize_t start[2], stride[2], count[2], block[2]; + int buf1[DIM1][DIM2]; + int buf2[DIM1][DIM2]; + int bufnew[DIM1][DIM2]; + int val[] = {53, 59}; + hsize_t marray[] = {2}; + hssize_t coord[NUMP][RANK]; + herr_t ret; + uint i, j; + +/***********************************************************************/ +/* */ +/* Create two files containing identical datasets. Write 0's to one */ +/* and 1's to the other. */ +/* */ +/***********************************************************************/ + + for ( i = 0; i < DIM1; i++ ) + for ( j = 0; j < DIM2; j++ ) + buf1[i][j] = 0; + + for ( i = 0; i < DIM1; i++ ) + for ( j = 0; j < DIM2; j++ ) + buf2[i][j] = 1; + + file1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + file2 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + fid1 = H5Screate_simple (RANK, fdim, NULL); + fid2 = H5Screate_simple (RANK, fdim, NULL); + + dataset1 = H5Dcreate (file1, "Copy1", H5T_NATIVE_INT, fid1, H5P_DEFAULT); + dataset2 = H5Dcreate (file2, "Copy2", H5T_NATIVE_INT, fid2, H5P_DEFAULT); + + ret = H5Dwrite(dataset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1); + ret = H5Dwrite(dataset2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2); + + ret = H5Dclose (dataset1); + ret = H5Dclose (dataset2); + + ret = H5Sclose (fid1); + ret = H5Sclose (fid2); + + ret = H5Fclose (file1); + ret = H5Fclose (file2); + +/***********************************************************************/ +/* */ +/* Open the two files. Select two points in one file, write values to */ +/* those point locations, then do H5Scopy and write the values to the */ +/* other file. Close files. */ +/* */ +/***********************************************************************/ + + file1 = H5Fopen (FILE1, H5F_ACC_RDWR, H5P_DEFAULT); + file2 = H5Fopen (FILE2, H5F_ACC_RDWR, H5P_DEFAULT); + dataset1 = H5Dopen (file1, "Copy1"); + dataset2 = H5Dopen (file2, "Copy2"); + fid1 = H5Dget_space (dataset1); + mid1 = H5Screate_simple(1, marray, NULL); + coord[0][0] = 0; coord[0][1] = 3; + coord[1][0] = 0; coord[1][1] = 1; + + ret = H5Sselect_elements (fid1, H5S_SELECT_SET, NUMP, (const hssize_t **)coord); + + ret = H5Dwrite (dataset1, H5T_NATIVE_INT, mid1, fid1, H5P_DEFAULT, val); + + fid2 = H5Scopy (fid1); + + ret = H5Dwrite (dataset2, H5T_NATIVE_INT, mid1, fid2, H5P_DEFAULT, val); + + ret = H5Dclose (dataset1); + ret = H5Dclose (dataset2); + ret = H5Sclose (fid1); + ret = H5Sclose (fid2); + ret = H5Fclose (file1); + ret = H5Fclose (file2); + ret = H5Sclose (mid1); + +/***********************************************************************/ +/* */ +/* Open both files and print the contents of the datasets. */ +/* */ +/***********************************************************************/ + + file1 = H5Fopen (FILE1, H5F_ACC_RDWR, H5P_DEFAULT); + file2 = H5Fopen (FILE2, H5F_ACC_RDWR, H5P_DEFAULT); + dataset1 = H5Dopen (file1, "Copy1"); + dataset2 = H5Dopen (file2, "Copy2"); + + ret = H5Dread (dataset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, + H5P_DEFAULT, bufnew); + + printf ("\nDataset 'Copy1' in file 'copy1.h5' contains: \n"); + for (i=0;i +#define FILE "dset.h5" + +main() { + + hid_t file_id, dataset_id, 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; + + /* Open an existing file. */ + file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT); + + /* Open an existing dataset. */ + dataset_id = H5Dopen(file_id, "/dset"); + + /* Create the data space for the attribute. */ + dims = 2; + dataspace_id = H5Screate_simple(1, &dims, NULL); + + /* Create a dataset attribute. */ + attribute_id = H5Acreate(dataset_id, "attr", H5T_STD_I32BE, dataspace_id, 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); + + /* Close to the dataset. */ + status = H5Dclose(dataset_id); + + /* Close the file. */ + status = H5Fclose(file_id); +} diff --git a/doc/html/Tutor/examples/h5_crtdat.c b/doc/html/Tutor/examples/h5_crtdat.c new file mode 100644 index 0000000..d704cf1 --- /dev/null +++ b/doc/html/Tutor/examples/h5_crtdat.c @@ -0,0 +1,34 @@ +/* + * Creating and closing a dataset. + */ + +#include +#define FILE "dset.h5" + +main() { + + hid_t file_id, dataset_id, dataspace_id; /* identifiers */ + hsize_t dims[2]; + herr_t status; + + /* Create a new file using default properties. */ + file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* Create the data space 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); + + /* End access to the dataset and release resources used by it. */ + status = H5Dclose(dataset_id); + + /* Terminate access to the data space. */ + status = H5Sclose(dataspace_id); + + /* Close the file. */ + status = H5Fclose(file_id); +} + diff --git a/doc/html/Tutor/examples/h5_crtfile.c b/doc/html/Tutor/examples/h5_crtfile.c new file mode 100644 index 0000000..680cde8 --- /dev/null +++ b/doc/html/Tutor/examples/h5_crtfile.c @@ -0,0 +1,19 @@ +/* + * Creating and closing a file. + */ + +#include +#define FILE "file.h5" + +main() { + + hid_t file_id; /* file identifier */ + herr_t status; + + /* Create a new file using default properties. */ + file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* Terminate access to the file. */ + status = H5Fclose(file_id); +} + diff --git a/doc/html/Tutor/examples/h5_crtgrp.c b/doc/html/Tutor/examples/h5_crtgrp.c new file mode 100644 index 0000000..a6aad93 --- /dev/null +++ b/doc/html/Tutor/examples/h5_crtgrp.c @@ -0,0 +1,24 @@ +/* + * Creating and closing a group. + */ + +#include +#define FILE "group.h5" + +main() { + + hid_t file_id, group_id; /* identifiers */ + herr_t status; + + /* Create a new file using default properties. */ + file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* Create a group named "/MyGroup" in the file. */ + group_id = H5Gcreate(file_id, "/MyGroup", 0); + + /* Close the group. */ + status = H5Gclose(group_id); + + /* Terminate access to the file. */ + status = H5Fclose(file_id); +} diff --git a/doc/html/Tutor/examples/h5_crtgrpar.c b/doc/html/Tutor/examples/h5_crtgrpar.c new file mode 100644 index 0000000..6dcc003 --- /dev/null +++ b/doc/html/Tutor/examples/h5_crtgrpar.c @@ -0,0 +1,32 @@ +/* + * Creating groups using absolute and relative names. + */ + +#include +#define FILE "groups.h5" + +main() { + + hid_t file_id, group1_id, group2_id, group3_id; /* identifiers */ + herr_t status; + + /* Create a new file using default properties. */ + file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* Create group "MyGroup" in the root group using absolute name. */ + group1_id = H5Gcreate(file_id, "/MyGroup", 0); + + /* Create group "Group_A" in group "MyGroup" using absolute name. */ + group2_id = H5Gcreate(file_id, "/MyGroup/Group_A", 0); + + /* Create group "Group_B" in group "MyGroup" using relative name. */ + group3_id = H5Gcreate(group1_id, "Group_B", 0); + + /* Close groups. */ + status = H5Gclose(group1_id); + status = H5Gclose(group2_id); + status = H5Gclose(group3_id); + + /* Close the file. */ + status = H5Fclose(file_id); +} diff --git a/doc/html/Tutor/examples/h5_crtgrpd.c b/doc/html/Tutor/examples/h5_crtgrpd.c new file mode 100644 index 0000000..e497764 --- /dev/null +++ b/doc/html/Tutor/examples/h5_crtgrpd.c @@ -0,0 +1,74 @@ +/* + * Create two datasets within groups. + */ + +#include +#define FILE "groups.h5" + +main() { + + hid_t file_id, group_id, dataset_id, dataspace_id; /* identifiers */ + hsize_t dims[2]; + herr_t status; + int i, j, dset1_data[3][3], dset2_data[2][10]; + + /* Initialize the first dataset. */ + for (i = 0; i < 3; i++) + for (j = 0; j < 3; j++) + dset1_data[i][j] = j + 1; + + /* Initialize the second dataset. */ + for (i = 0; i < 2; i++) + for (j = 0; j < 10; j++) + dset2_data[i][j] = j + 1; + + /* Open an existing file. */ + file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT); + + /* Create the data space for the first dataset. */ + dims[0] = 3; + dims[1] = 3; + dataspace_id = H5Screate_simple(2, dims, NULL); + + /* Create a dataset in group "MyGroup". */ + dataset_id = H5Dcreate(file_id, "/MyGroup/dset1", H5T_STD_I32BE, dataspace_id, + H5P_DEFAULT); + + /* Write the first dataset. */ + status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, + dset1_data); + + /* Close the data space for the first dataset. */ + status = H5Sclose(dataspace_id); + + /* Close the first dataset. */ + status = H5Dclose(dataset_id); + + /* Open an existing group of the specified file. */ + group_id = H5Gopen(file_id, "/MyGroup/Group_A"); + + /* Create the data space for the second dataset. */ + dims[0] = 2; + dims[1] = 10; + dataspace_id = H5Screate_simple(2, dims, NULL); + + /* Create the second dataset in group "Group_A". */ + dataset_id = H5Dcreate(group_id, "dset2", H5T_STD_I32BE, dataspace_id, H5P_DEFAULT); + + /* Write the second dataset. */ + status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, + dset2_data); + + /* Close the data space for the second dataset. */ + status = H5Sclose(dataspace_id); + + /* Close the second dataset */ + status = H5Dclose(dataset_id); + + /* Close the group. */ + status = H5Gclose(group_id); + + /* Close the file. */ + status = H5Fclose(file_id); +} + diff --git a/doc/html/Tutor/examples/h5_extend.c b/doc/html/Tutor/examples/h5_extend.c new file mode 100644 index 0000000..ae26ed6 --- /dev/null +++ b/doc/html/Tutor/examples/h5_extend.c @@ -0,0 +1,141 @@ +/************************************************************** + * + * This example shows how to work with extendible datasets. + * In the current version of the library a dataset MUST be + * chunked in order to be extendible. + * + * This example is derived from the h5_extend_write.c and + * h5_read_chunk.c examples that are in the "Introduction + * to HDF5". + * + *************************************************************/ + +#include "hdf5.h" + +#define FILE "ext.h5" +#define DATASETNAME "ExtendibleArray" +#define RANK 2 + +int +main (void) +{ + hid_t file; /* handles */ + hid_t dataspace, dataset; + hid_t filespace; + hid_t cparms; + hid_t memspace; + + hsize_t dims[2] = { 3, 3}; /* dataset dimensions + at creation time */ + hsize_t dims1[2] = { 3, 3}; /* data1 dimensions */ + hsize_t dims2[2] = { 7, 1}; /* data2 dimensions */ + + hsize_t maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED}; + hsize_t size[2]; + hssize_t offset[2]; + hsize_t i,j; + herr_t status, status_n; + int data1[3][3] = { {1, 1, 1}, /* data to write */ + {1, 1, 1}, + {1, 1, 1} }; + + int data2[7] = { 2, 2, 2, 2, 2, 2, 2}; + + /* Variables used in reading data back */ + hsize_t chunk_dims[2] ={2, 5}; + hsize_t chunk_dimsr[2]; + hsize_t dimsr[2]; + int data_out[10][3]; + int rank, rank_chunk; + + /* Create the data space with unlimited dimensions. */ + dataspace = H5Screate_simple (RANK, dims, maxdims); + + /* Create a new file. If file exists its contents will be overwritten. */ + file = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* Modify dataset creation properties, i.e. enable chunking */ + cparms = H5Pcreate (H5P_DATASET_CREATE); + status = H5Pset_chunk ( cparms, RANK, chunk_dims); + + /* Create a new dataset within the file using cparms + creation properties. */ + dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, dataspace, + cparms); + + /* Extend the dataset. This call assures that dataset is 3 x 3.*/ + size[0] = 3; + size[1] = 3; + status = H5Dextend (dataset, size); + + /* Select a hyperslab */ + filespace = H5Dget_space (dataset); + offset[0] = 0; + offset[1] = 0; + status = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, offset, NULL, + dims1, NULL); + + /* Write the data to the hyperslab */ + status = H5Dwrite (dataset, H5T_NATIVE_INT, dataspace, filespace, + H5P_DEFAULT, data1); + + /* Extend the dataset. Dataset becomes 10 x 3 */ + dims[0] = dims1[0] + dims2[0]; + size[0] = dims[0]; + size[1] = dims[1]; + status = H5Dextend (dataset, size); + + /* Select a hyperslab */ + filespace = H5Dget_space (dataset); + offset[0] = 3; + offset[1] = 0; + status = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, offset, NULL, + dims2, NULL); + + /* Define memory space */ + dataspace = H5Screate_simple (RANK, dims2, NULL); + + /* Write the data to the hyperslab */ + status = H5Dwrite (dataset, H5T_NATIVE_INT, dataspace, filespace, + H5P_DEFAULT, data2); + + /* Close resources */ + status = H5Dclose (dataset); + status = H5Sclose (dataspace); + status = H5Sclose (filespace); + status = H5Fclose (file); + +/**************************************************************** + Read the data back + ***************************************************************/ + + file = H5Fopen (FILE, H5F_ACC_RDONLY, H5P_DEFAULT); + dataset = H5Dopen (file, DATASETNAME); + filespace = H5Dget_space (dataset); + rank = H5Sget_simple_extent_ndims (filespace); + status_n = H5Sget_simple_extent_dims (filespace, dimsr, NULL); + + cparms = H5Dget_create_plist (dataset); + if (H5D_CHUNKED == H5Pget_layout (cparms)) + { + rank_chunk = H5Pget_chunk (cparms, 2, chunk_dimsr); + } + + memspace = H5Screate_simple (rank,dimsr,NULL); + status = H5Dread (dataset, H5T_NATIVE_INT, memspace, filespace, + H5P_DEFAULT, data_out); + printf("\n"); + printf("Dataset: \n"); + for (j = 0; j < dimsr[0]; j++) + { + for (i = 0; i < dimsr[1]; i++) + printf("%d ", data_out[j][i]); + printf("\n"); + } + + status = H5Pclose (cparms); + status = H5Dclose (dataset); + status = H5Sclose (filespace); + status = H5Sclose (memspace); + status = H5Fclose (file); +} diff --git a/doc/html/Tutor/examples/h5_hyperslab.c b/doc/html/Tutor/examples/h5_hyperslab.c new file mode 100644 index 0000000..fc953d5 --- /dev/null +++ b/doc/html/Tutor/examples/h5_hyperslab.c @@ -0,0 +1,192 @@ +/************************************************************ + + This example shows how to write and read a hyperslab. It + is derived from the h5_read.c and h5_write.c examples in + the "Introduction to HDF5". + + ************************************************************/ + +#include "hdf5.h" + +#define FILE "sds.h5" +#define DATASETNAME "IntArray" +#define NX_SUB 3 /* hyperslab dimensions */ +#define NY_SUB 4 +#define NX 7 /* output buffer dimensions */ +#define NY 7 +#define NZ 3 +#define RANK 2 +#define RANK_OUT 3 + +#define X 5 /* dataset dimensions */ +#define Y 6 + +int +main (void) +{ + hsize_t dimsf[2]; /* dataset dimensions */ + int data[X][Y]; /* data to write */ + + /* + * Data and output buffer initialization. + */ + hid_t file, dataset; /* handles */ + hid_t dataspace; + hid_t memspace; + hsize_t dimsm[3]; /* memory space dimensions */ + hsize_t dims_out[2]; /* dataset dimensions */ + herr_t status; + + int data_out[NX][NY][NZ ]; /* output buffer */ + + hsize_t count[2]; /* size of the hyperslab in the file */ + hssize_t offset[2]; /* hyperslab offset in the file */ + hsize_t count_out[3]; /* size of the hyperslab in memory */ + hssize_t offset_out[3]; /* hyperslab offset in memory */ + int i, j, k, status_n, rank; + + + +/********************************************************* + This writes data to the HDF5 file. + *********************************************************/ + + /* + * Data and output buffer initialization. + */ + for (j = 0; j < X; j++) { + for (i = 0; i < Y; i++) + data[j][i] = i + j; + } + /* + * 0 1 2 3 4 5 + * 1 2 3 4 5 6 + * 2 3 4 5 6 7 + * 3 4 5 6 7 8 + * 4 5 6 7 8 9 + */ + + /* + * Create a new file using H5F_ACC_TRUNC access, + * the default file creation properties, and the default file + * access properties. + */ + file = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* + * Describe the size of the array and create the data space for fixed + * size dataset. + */ + dimsf[0] = X; + dimsf[1] = Y; + dataspace = H5Screate_simple (RANK, dimsf, NULL); + + /* + * Create a new dataset within the file using defined dataspace and + * default dataset creation properties. + */ + dataset = H5Dcreate (file, DATASETNAME, H5T_STD_I32BE, dataspace, + H5P_DEFAULT); + + /* + * Write the data to the dataset using default transfer properties. + */ + status = H5Dwrite (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, + H5P_DEFAULT, data); + + /* + * Close/release resources. + */ + H5Sclose (dataspace); + H5Dclose (dataset); + H5Fclose (file); + + +/************************************************************* + + This reads the hyperslab from the sds.h5 file just + created, into a 2-dimensional plane of the 3-dimensional + array. + + ************************************************************/ + + for (j = 0; j < NX; j++) { + for (i = 0; i < NY; i++) { + for (k = 0; k < NZ ; k++) + data_out[j][i][k] = 0; + } + } + + /* + * Open the file and the dataset. + */ + file = H5Fopen (FILE, H5F_ACC_RDONLY, H5P_DEFAULT); + dataset = H5Dopen (file, DATASETNAME); + + dataspace = H5Dget_space (dataset); /* dataspace handle */ + rank = H5Sget_simple_extent_ndims (dataspace); + status_n = H5Sget_simple_extent_dims (dataspace, dims_out, NULL); + printf("\nRank: %d\nDimensions: %lu x %lu \n", rank, + (unsigned long)(dims_out[0]), (unsigned long)(dims_out[1])); + + /* + * Define hyperslab in the dataset. + */ + offset[0] = 1; + offset[1] = 2; + count[0] = NX_SUB; + count[1] = NY_SUB; + status = H5Sselect_hyperslab (dataspace, H5S_SELECT_SET, offset, NULL, + count, NULL); + + /* + * Define the memory dataspace. + */ + dimsm[0] = NX; + dimsm[1] = NY; + dimsm[2] = NZ; + memspace = H5Screate_simple (RANK_OUT, dimsm, NULL); + + /* + * Define memory hyperslab. + */ + offset_out[0] = 3; + offset_out[1] = 0; + offset_out[2] = 0; + count_out[0] = NX_SUB; + count_out[1] = NY_SUB; + count_out[2] = 1; + status = H5Sselect_hyperslab (memspace, H5S_SELECT_SET, offset_out, NULL, + count_out, NULL); + + /* + * Read data from hyperslab in the file into the hyperslab in + * memory and display. + */ + status = H5Dread (dataset, H5T_NATIVE_INT, memspace, dataspace, + H5P_DEFAULT, data_out); + printf ("Data:\n "); + for (j = 0; j < NX; j++) { + for (i = 0; i < NY; i++) printf("%d ", data_out[j][i][0]); + printf("\n "); + } + printf("\n"); + /* + * 0 0 0 0 0 0 0 + * 0 0 0 0 0 0 0 + * 0 0 0 0 0 0 0 + * 3 4 5 6 0 0 0 + * 4 5 6 7 0 0 0 + * 5 6 7 8 0 0 0 + * 0 0 0 0 0 0 0 + */ + + /* + * Close and release resources. + */ + H5Dclose (dataset); + H5Sclose (dataspace); + H5Sclose (memspace); + H5Fclose (file); + +} diff --git a/doc/html/Tutor/examples/h5_iterate.c b/doc/html/Tutor/examples/h5_iterate.c new file mode 100644 index 0000000..db58183 --- /dev/null +++ b/doc/html/Tutor/examples/h5_iterate.c @@ -0,0 +1,111 @@ +#include + +#define FILE "iterate.h5" +#define FALSE 0 + +/* 1-D dataset with fixed dimensions */ +#define SPACE1_NAME "Space1" +#define SPACE1_RANK 1 +#define SPACE1_DIM1 4 + +herr_t file_info(hid_t loc_id, const char *name, void *opdata); + /* Operator function */ +int +main(void) { + hid_t file; /* HDF5 File IDs */ + hid_t dataset; /* Dataset ID */ + hid_t group; /* Group ID */ + hid_t sid; /* Dataspace ID */ + hid_t tid; /* Datatype ID */ + hsize_t dims[] = {SPACE1_DIM1}; + herr_t ret; /* Generic return value */ + +/* Compound datatype */ +typedef struct s1_t { + unsigned int a; + unsigned int b; + float c; +} s1_t; + + /* Create file */ + file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* Create dataspace for datasets */ + sid = H5Screate_simple(SPACE1_RANK, dims, NULL); + + /* Create a group */ + group=H5Gcreate(file,"Group1",-1); + + /* Close a group */ + ret = H5Gclose(group); + + /* Create a dataset */ + dataset=H5Dcreate(file,"Dataset1",H5T_STD_U32LE,sid,H5P_DEFAULT); + + /* Close Dataset */ + ret = H5Dclose(dataset); + + /* Create a datatype */ + tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t)); + + /* Insert fields */ + ret=H5Tinsert (tid, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT); + + ret=H5Tinsert (tid, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT); + + ret=H5Tinsert (tid, "c", HOFFSET(s1_t,c), H5T_NATIVE_FLOAT); + + /* Save datatype for later */ + ret=H5Tcommit (file, "Datatype1", tid); + + /* Close datatype */ + ret = H5Tclose(tid); + + /* Iterate through the file to see members of the root group */ + + printf(" Objects in the root group are:\n"); + printf("\n"); + + H5Giterate(file, "/", NULL, file_info, NULL); + + /* Close file */ + ret = H5Fclose(file); + + return 0; +} + +/* + * Operator function. + */ +herr_t file_info(hid_t loc_id, const char *name, void *opdata) +{ + H5G_stat_t statbuf; + + /* + * Get type of the object and display its name and type. + * The name of the object is passed to this function by + * the Library. Some magic :-) + */ + H5Gget_objinfo(loc_id, name, FALSE, &statbuf); + switch (statbuf.type) { + case H5G_GROUP: + printf(" Object with name %s is a group \n", name); + break; + case H5G_DATASET: + printf(" Object with name %s is a dataset \n", name); + break; + case H5G_TYPE: + printf(" Object with name %s is a named datatype \n", name); + break; + default: + printf(" Unable to identify an object "); + } + return 0; + } + + + + + + + diff --git a/doc/html/Tutor/examples/h5_mount.c b/doc/html/Tutor/examples/h5_mount.c new file mode 100644 index 0000000..452ad6e --- /dev/null +++ b/doc/html/Tutor/examples/h5_mount.c @@ -0,0 +1,119 @@ +/* + * This program shows the concept of "mounting files". + * Program creates one file with group G in it, and another + * file with dataset D. Then second file is mounted in the first one + * under the "mounting point" G. Dataset D is accessed in the first file + * under name /G/D and data is printed out. + */ + +#include + +#define FILE1 "mount1.h5" +#define FILE2 "mount2.h5" + +#define RANK 2 +#define NX 4 +#define NY 5 + +int main(void) +{ + + hid_t fid1, fid2, gid; /* Files and group identifiers */ + hid_t did, tid, sid; /* Dataset and datatype identifiers */ + + herr_t status; + hsize_t dims[] = {NX,NY}; /* Dataset dimensions */ + + int i, j; + int bm[NX][NY], bm_out[NX][NY]; /* Data buffers */ + + /* + * Initialization of buffer matrix "bm" + */ + for(i =0; i +#define FILE "dset.h5" + +main() { + + hid_t file_id, dataset_id; /* identifiers */ + herr_t status; + int i, j, dset_data[4][6]; + + /* Initialize the dataset. */ + for (i = 0; i < 4; i++) + for (j = 0; j < 6; j++) + dset_data[i][j] = i * 6 + j + 1; + + /* Open an existing file. */ + file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT); + + /* Open an existing dataset. */ + dataset_id = H5Dopen(file_id, "/dset"); + + /* Write the dataset. */ + 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); + + /* Close the dataset. */ + status = H5Dclose(dataset_id); + + /* Close the file. */ + status = H5Fclose(file_id); +} diff --git a/doc/html/Tutor/examples/h5_read.c b/doc/html/Tutor/examples/h5_read.c new file mode 100644 index 0000000..31cb882 --- /dev/null +++ b/doc/html/Tutor/examples/h5_read.c @@ -0,0 +1,136 @@ +/* + * This example reads hyperslab from the SDS.h5 file + * created by h5_write.c program into two-dimensional + * plane of the three-dimensional array. + * Information about dataset in the SDS.h5 file is obtained. + */ + +#include "hdf5.h" + +#define FILE "SDS.h5" +#define DATASETNAME "IntArray" +#define NX_SUB 3 /* hyperslab dimensions */ +#define NY_SUB 4 +#define NX 7 /* output buffer dimensions */ +#define NY 7 +#define NZ 3 +#define RANK 2 +#define RANK_OUT 3 + +int +main (void) +{ + hid_t file, dataset; /* handles */ + hid_t datatype, dataspace; + hid_t memspace; + H5T_class_t class; /* data type class */ + H5T_order_t order; /* data order */ + size_t size; /* + * size of the data element + * stored in file + */ + hsize_t dimsm[3]; /* memory space dimensions */ + hsize_t dims_out[2]; /* dataset dimensions */ + herr_t status; + + int data_out[NX][NY][NZ ]; /* output buffer */ + + hsize_t count[2]; /* size of the hyperslab in the file */ + hssize_t offset[2]; /* hyperslab offset in the file */ + hsize_t count_out[3]; /* size of the hyperslab in memory */ + hssize_t offset_out[3]; /* hyperslab offset in memory */ + int i, j, k, status_n, rank; + + for (j = 0; j < NX; j++) { + for (i = 0; i < NY; i++) { + for (k = 0; k < NZ ; k++) + data_out[j][i][k] = 0; + } + } + + /* + * Open the file and the dataset. + */ + file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT); + dataset = H5Dopen(file, DATASETNAME); + + /* + * Get datatype and dataspace handles and then query + * dataset class, order, size, rank and dimensions. + */ + datatype = H5Dget_type(dataset); /* datatype handle */ + class = H5Tget_class(datatype); + if (class == H5T_INTEGER) printf("Data set has INTEGER type \n"); + order = H5Tget_order(datatype); + if (order == H5T_ORDER_LE) printf("Little endian order \n"); + + size = H5Tget_size(datatype); + printf(" Data size is %d \n", size); + + dataspace = H5Dget_space(dataset); /* dataspace handle */ + rank = H5Sget_simple_extent_ndims(dataspace); + status_n = H5Sget_simple_extent_dims(dataspace, dims_out, NULL); + printf("rank %d, dimensions %lu x %lu \n", rank, + (unsigned long)(dims_out[0]), (unsigned long)(dims_out[1])); + + /* + * Define hyperslab in the dataset. + */ + offset[0] = 1; + offset[1] = 2; + count[0] = NX_SUB; + count[1] = NY_SUB; + status = H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, offset, NULL, + count, NULL); + + /* + * Define the memory dataspace. + */ + dimsm[0] = NX; + dimsm[1] = NY; + dimsm[2] = NZ ; + memspace = H5Screate_simple(RANK_OUT,dimsm,NULL); + + /* + * Define memory hyperslab. + */ + offset_out[0] = 3; + offset_out[1] = 0; + offset_out[2] = 0; + count_out[0] = NX_SUB; + count_out[1] = NY_SUB; + count_out[2] = 1; + status = H5Sselect_hyperslab(memspace, H5S_SELECT_SET, offset_out, NULL, + count_out, NULL); + + /* + * Read data from hyperslab in the file into the hyperslab in + * memory and display. + */ + status = H5Dread(dataset, H5T_NATIVE_INT, memspace, dataspace, + H5P_DEFAULT, data_out); + for (j = 0; j < NX; j++) { + for (i = 0; i < NY; i++) printf("%d ", data_out[j][i][0]); + printf("\n"); + } + /* + * 0 0 0 0 0 0 0 + * 0 0 0 0 0 0 0 + * 0 0 0 0 0 0 0 + * 3 4 5 6 0 0 0 + * 4 5 6 7 0 0 0 + * 5 6 7 8 0 0 0 + * 0 0 0 0 0 0 0 + */ + + /* + * Close/release resources. + */ + H5Tclose(datatype); + H5Dclose(dataset); + H5Sclose(dataspace); + H5Sclose(memspace); + H5Fclose(file); + + return 0; +} diff --git a/doc/html/Tutor/examples/h5_ref2objr.c b/doc/html/Tutor/examples/h5_ref2objr.c new file mode 100644 index 0000000..a226778 --- /dev/null +++ b/doc/html/Tutor/examples/h5_ref2objr.c @@ -0,0 +1,93 @@ +#include +#include + +#define FILE1 "trefer1.h5" + +/* dataset with fixed dimensions */ +#define SPACE1_NAME "Space1" +#define SPACE1_RANK 1 +#define SPACE1_DIM1 4 + +int +main(void) +{ + hid_t fid1; /* HDF5 File IDs */ + hid_t dataset, /* Dataset ID */ + dset2; /* Dereferenced dataset ID */ + hid_t group; /* Group ID */ + hid_t sid1; /* Dataspace ID */ + hid_t tid1; /* Datatype ID */ + hobj_ref_t *rbuf; /* buffer to read from disk */ + int *tu32; /* temp. buffer read from disk */ + int i; /* counting variables */ + char read_comment[10]; + herr_t ret; /* Generic return value */ + + /* Allocate read buffers */ + rbuf = malloc(sizeof(hobj_ref_t)*SPACE1_DIM1); + tu32 = malloc(sizeof(int)*SPACE1_DIM1); + + /* Open the file */ + fid1 = H5Fopen(FILE1, H5F_ACC_RDWR, H5P_DEFAULT); + + /* Open the dataset */ + dataset=H5Dopen(fid1,"/Dataset3"); + + /* Read selection from disk */ + ret=H5Dread(dataset,H5T_STD_REF_OBJ,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf); + + /* Open dataset object */ + dset2 = H5Rdereference(dataset,H5R_OBJECT,&rbuf[0]); + + /* Check information in referenced dataset */ + sid1 = H5Dget_space(dset2); + + ret=H5Sget_simple_extent_npoints(sid1); + + /* Read from disk */ + ret=H5Dread(dset2,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,tu32); + printf("Dataset data : \n"); + for (i=0; i < SPACE1_DIM1 ; i++) printf (" %d ", tu32[i]); + printf("\n"); + printf("\n"); + + /* Close dereferenced Dataset */ + ret = H5Dclose(dset2); + + /* Open group object */ + group = H5Rdereference(dataset,H5R_OBJECT,&rbuf[2]); + + /* Get group's comment */ + ret=H5Gget_comment(group,".",10,read_comment); + printf("Group comment is %s \n", read_comment); + printf(" \n"); + /* Close group */ + ret = H5Gclose(group); + + /* Open datatype object */ + tid1 = H5Rdereference(dataset,H5R_OBJECT,&rbuf[3]); + + /* Verify correct datatype */ + { + H5T_class_t tclass; + + tclass= H5Tget_class(tid1); + if ((tclass == H5T_COMPOUND)) + printf ("Number of compound datatype members is %d \n", H5Tget_nmembers(tid1)); + printf(" \n"); + } + + /* Close datatype */ + ret = H5Tclose(tid1); + + /* Close Dataset */ + ret = H5Dclose(dataset); + + /* Close file */ + ret = H5Fclose(fid1); + + /* Free memory buffers */ + free(rbuf); + free(tu32); + return 0; +} diff --git a/doc/html/Tutor/examples/h5_ref2objw.c b/doc/html/Tutor/examples/h5_ref2objw.c new file mode 100644 index 0000000..d499f8e --- /dev/null +++ b/doc/html/Tutor/examples/h5_ref2objw.c @@ -0,0 +1,120 @@ + +#include + +#define FILE1 "trefer1.h5" + +/* 1-D dataset with fixed dimensions */ +#define SPACE1_NAME "Space1" +#define SPACE1_RANK 1 +#define SPACE1_DIM1 4 + +/* 2-D dataset with fixed dimensions */ +#define SPACE2_NAME "Space2" +#define SPACE2_RANK 2 +#define SPACE2_DIM1 10 +#define SPACE2_DIM2 10 + +int +main(void) { + hid_t fid1; /* HDF5 File IDs */ + hid_t dataset; /* Dataset ID */ + hid_t group; /* Group ID */ + hid_t sid1; /* Dataspace ID */ + hid_t tid1; /* Datatype ID */ + hsize_t dims1[] = {SPACE1_DIM1}; + hobj_ref_t *wbuf; /* buffer to write to disk */ + int *tu32; /* Temporary pointer to int data */ + int i; /* counting variables */ + const char *write_comment="Foo!"; /* Comments for group */ + herr_t ret; /* Generic return value */ + +/* Compound datatype */ +typedef struct s1_t { + unsigned int a; + unsigned int b; + float c; +} s1_t; + + /* Allocate write buffers */ + wbuf=(hobj_ref_t *)malloc(sizeof(hobj_ref_t)*SPACE1_DIM1); + tu32=malloc(sizeof(int)*SPACE1_DIM1); + + /* Create file */ + fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* Create dataspace for datasets */ + sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL); + + /* Create a group */ + group=H5Gcreate(fid1,"Group1",-1); + + /* Set group's comment */ + ret=H5Gset_comment(group,".",write_comment); + + /* Create a dataset (inside Group1) */ + dataset=H5Dcreate(group,"Dataset1",H5T_STD_U32LE,sid1,H5P_DEFAULT); + + for(i=0; i +#include + +#define FILE2 "trefer2.h5" +#define NPOINTS 10 + +/* 1-D dataset with fixed dimensions */ +#define SPACE1_NAME "Space1" +#define SPACE1_RANK 1 +#define SPACE1_DIM1 4 + +/* 2-D dataset with fixed dimensions */ +#define SPACE2_NAME "Space2" +#define SPACE2_RANK 2 +#define SPACE2_DIM1 10 +#define SPACE2_DIM2 10 + +int +main(void) +{ + hid_t fid1; /* HDF5 File IDs */ + hid_t dset1, /* Dataset ID */ + dset2; /* Dereferenced dataset ID */ + hid_t sid1, /* Dataspace ID #1 */ + sid2; /* Dataspace ID #2 */ + hsize_t * coords; /* Coordinate buffer */ + hsize_t low[SPACE2_RANK]; /* Selection bounds */ + hsize_t high[SPACE2_RANK]; /* Selection bounds */ + hdset_reg_ref_t *rbuf; /* buffer to to read disk */ + int *drbuf; /* Buffer for reading numeric data from disk */ + int i, j; /* counting variables */ + herr_t ret; /* Generic return value */ + + /* Output message about test being performed */ + + /* Allocate write & read buffers */ + rbuf=malloc(sizeof(hdset_reg_ref_t)*SPACE1_DIM1); + drbuf=calloc(sizeof(int),SPACE2_DIM1*SPACE2_DIM2); + + /* Open the file */ + fid1 = H5Fopen(FILE2, H5F_ACC_RDWR, H5P_DEFAULT); + + /* Open the dataset */ + dset1=H5Dopen(fid1,"/Dataset1"); + + /* Read selection from disk */ + ret=H5Dread(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf); + + /* Try to open objects */ + dset2 = H5Rdereference(dset1,H5R_DATASET_REGION,&rbuf[0]); + + /* Check information in referenced dataset */ + sid1 = H5Dget_space(dset2); + + ret=H5Sget_simple_extent_npoints(sid1); + printf(" Number of elements in the dataset is : %d\n",ret); + + /* Read from disk */ + ret=H5Dread(dset2,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,drbuf); + + for(i=0; i +#include + +#define FILE2 "trefer2.h5" +#define SPACE1_NAME "Space1" +#define SPACE1_RANK 1 +#define SPACE1_DIM1 4 + +/* Dataset with fixed dimensions */ +#define SPACE2_NAME "Space2" +#define SPACE2_RANK 2 +#define SPACE2_DIM1 10 +#define SPACE2_DIM2 10 + +/* Element selection information */ +#define POINT1_NPOINTS 10 + +int +main(void) +{ + hid_t fid1; /* HDF5 File IDs */ + hid_t dset1, /* Dataset ID */ + dset2; /* Dereferenced dataset ID */ + hid_t sid1, /* Dataspace ID #1 */ + sid2; /* Dataspace ID #2 */ + hsize_t dims1[] = {SPACE1_DIM1}, + dims2[] = {SPACE2_DIM1, SPACE2_DIM2}; + hssize_t start[SPACE2_RANK]; /* Starting location of hyperslab */ + hsize_t stride[SPACE2_RANK]; /* Stride of hyperslab */ + hsize_t count[SPACE2_RANK]; /* Element count of hyperslab */ + hsize_t block[SPACE2_RANK]; /* Block size of hyperslab */ + hssize_t coord1[POINT1_NPOINTS][SPACE2_RANK]; + /* Coordinates for point selection */ + hdset_reg_ref_t *wbuf; /* buffer to write to disk */ + int *dwbuf; /* Buffer for writing numeric data to disk */ + int i; /* counting variables */ + herr_t ret; /* Generic return value */ + + + /* Allocate write & read buffers */ + wbuf=calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1); + dwbuf=malloc(sizeof(int)*SPACE2_DIM1*SPACE2_DIM2); + + /* Create file */ + fid1 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* Create dataspace for datasets */ + sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL); + + /* Create a dataset */ + dset2=H5Dcreate(fid1,"Dataset2",H5T_STD_U8LE,sid2,H5P_DEFAULT); + + for(i=0; i + +#define FILE "refere.h5" + +int +main(void) { + hid_t fid; /* File, datasets, datatypes and */ + hid_t did_a, sid_a; /* dataspaces identifiers for three */ + hid_t did_b, tid_b, sid_b; /* datasets. */ + hid_t did_r, tid_r, sid_r; + herr_t status; + + hobj_ref_t *wbuf; /* buffer to write to disk */ + hobj_ref_t *rbuf; /* buffer to read from disk */ + + + hsize_t dim_r[1]; + hsize_t dim_a[1]; + hsize_t dim_b[2]; + + herr_t ret; /* return values */ + + /* + * Create a file using default properties. + */ + fid = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* + * Create dataset "A" in the file. + */ + dim_a[0] = 5; + sid_a = H5Screate_simple(1, dim_a, NULL); + did_a = H5Dcreate(fid, "A", H5T_NATIVE_INT, sid_a, H5P_DEFAULT); + + /* + * Create dataset "B" in the file. + */ + dim_b[0] = 2; + dim_b[1] = 6; + sid_b = H5Screate_simple(2, dim_b, NULL); + did_b = H5Dcreate(fid, "B", H5T_NATIVE_FLOAT, sid_b, H5P_DEFAULT); + + /* + * Create dataset "R" to store references to the datasets "A" and "B". + */ + dim_r[0] = 2; + sid_r = H5Screate_simple(1, dim_r, NULL); + tid_r = H5Tcopy(H5T_STD_REF_OBJ); + did_r = H5Dcreate(fid, "R", tid_r, sid_r, H5P_DEFAULT ); + + /* + * Allocate write and read buffers. + */ + wbuf = malloc(sizeof(hobj_ref_t)*2); + rbuf = malloc(sizeof(hobj_ref_t)*2); + + /* + * Create references to the datasets "A" and "B" + * and store them in the wbuf. + */ + H5Rcreate(&wbuf[0], fid, "A", H5R_OBJECT, -1); + H5Rcreate(&wbuf[1], fid, "B", H5R_OBJECT, -1); + + /* + * Write dataset R using default transfer properties. + */ + status = H5Dwrite(did_r, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, + H5P_DEFAULT, wbuf); + + /* + * Close all objects. + */ + H5Sclose(sid_a); + H5Dclose(did_a); + + H5Sclose(sid_b); + H5Dclose(did_b); + + H5Tclose(tid_r); + H5Sclose(sid_r); + H5Dclose(did_r); + + H5Fclose(fid); + + /* + * Reopen the file. + */ + fid = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT); + + /* + * Open and read dataset "R". + */ + did_r = H5Dopen(fid, "R"); + status = H5Dread(did_r, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, + H5P_DEFAULT, rbuf); + + /* + * Open dataset A using reference to it. + */ + did_a = H5Rdereference(did_r, H5R_OBJECT, &rbuf[0]); + + /* + * Get rank of the dataset "A" + */ + + printf("\n"); + sid_a = H5Dget_space(did_a); + ret = H5Sget_simple_extent_ndims(sid_a); + + if(ret == 1) printf("Rank of A is %d.\n", ret); + printf("\n"); + + /* + * Get datatype of the dataset "B" + */ + did_b = H5Rdereference(did_r, H5R_OBJECT, &rbuf[1]); + tid_b = H5Dget_type(did_b); + if(H5Tequal(tid_b, H5T_NATIVE_FLOAT)) + printf("Datatype of B is H5T_NATIVE_FLOAT.\n"); + printf("\n"); + + /* + * Close all objects. + */ + H5Dclose(did_a); + H5Sclose(sid_a); + H5Dclose(did_b); + H5Tclose(tid_b); + H5Fclose(fid); + + return 0; + + } + + + diff --git a/doc/html/Tutor/extend.html b/doc/html/Tutor/extend.html new file mode 100644 index 0000000..03b5972 --- /dev/null +++ b/doc/html/Tutor/extend.html @@ -0,0 +1,314 @@ + +HDF5 Tutorial - Chunking and Extendible Datasets + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Chunking and Extendible Datasets +

+ +
+ + +

Contents:

+ +
+ +

Creating an Extendible Dataset

+An extendible dataset is one whose dimensions can grow. In HDF5, it is possible to define a dataset to have certain initial dimensions, then later +to increase the size of any of the initial dimensions. +

+HDF5 requires you to use chunking in order to define extendible datasets. Chunking makes it possible to extend datasets efficiently, without +having to reorganize storage excessively. +

+The following operations are required in order to write an extendible dataset: +

    +
  1. Declare the dataspace of the dataset to have unlimited dimensions for all dimensions that might eventually be extended. +
  2. Set dataset creation properties to enable chunking and create a dataset. +
  3. Extend the size of the dataset. +
+

Programming Example

+
+

Description

+This example shows how to create a 3 x 3 extendible dataset, write to that +dataset, extend the dataset to 10x3, and write to the dataset again. +[
Download h5_extend.c] +
+
+/**************************************************************  
+ *
+ *   This example shows how to work with extendible datasets.
+ *   In the current version of the library a dataset MUST be
+ *   chunked in order to be extendible.  
+ *
+ *   This example is derived from the h5_extend_write.c and 
+ *   h5_read_chunk.c examples that are in the "Introduction 
+ *   to HDF5".
+ *   
+ *************************************************************/
+ 
+#include "hdf5.h"
+
+#define FILE        "ext.h5"
+#define DATASETNAME "ExtendibleArray" 
+#define RANK         2
+
+int
+main (void)
+{
+    hid_t       file;                          /* handles */
+    hid_t       dataspace, dataset;  
+    hid_t       filespace;                   
+    hid_t       cparms;                     
+    hid_t       memspace;
+
+    hsize_t      dims[2]  = { 3, 3};           /* dataset dimensions			
+                                                  at creation time */
+    hsize_t      dims1[2] = { 3, 3};           /* data1 dimensions */ 
+    hsize_t      dims2[2] = { 7, 1};           /* data2 dimensions */  
+
+    hsize_t      maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
+    hsize_t      size[2];
+    hssize_t     offset[2];
+    hsize_t      i,j;
+    herr_t       status, status_n;                             
+    int          data1[3][3] = { {1, 1, 1},      /* data to write */
+                                 {1, 1, 1},
+                                 {1, 1, 1} };      
+
+    int          data2[7]    = { 2, 2, 2, 2, 2, 2, 2};
+
+    /* Variables used in reading data back */
+    hsize_t      chunk_dims[2] ={2, 5};
+    hsize_t      chunk_dimsr[2];
+    hsize_t      dimsr[2];
+    int          data_out[10][3];
+    int          rank, rank_chunk;
+
+    /* Create the data space with unlimited dimensions. */
+    dataspace = H5Screate_simple (RANK, dims, maxdims); 
+
+    /* Create a new file. If file exists its contents will be overwritten. */
+    file = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Modify dataset creation properties, i.e. enable chunking  */
+    cparms = H5Pcreate (H5P_DATASET_CREATE);
+    status = H5Pset_chunk ( cparms, RANK, chunk_dims);
+
+    /* Create a new dataset within the file using cparms
+       creation properties.  */
+    dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, dataspace,
+                         cparms);
+
+    /* Extend the dataset. This call assures that dataset is 3 x 3.*/
+    size[0]   = 3; 
+    size[1]   = 3; 
+    status = H5Dextend (dataset, size);
+
+    /* Select a hyperslab  */
+    filespace = H5Dget_space (dataset);
+    offset[0] = 0;
+    offset[1] = 0;
+    status = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, offset, NULL,
+                                  dims1, NULL);  
+
+    /* Write the data to the hyperslab  */
+    status = H5Dwrite (dataset, H5T_NATIVE_INT, dataspace, filespace,
+                       H5P_DEFAULT, data1);
+
+    /* Extend the dataset. Dataset becomes 10 x 3  */
+    dims[0]   = dims1[0] + dims2[0];
+    size[0]   = dims[0];  
+    size[1]   = dims[1]; 
+    status = H5Dextend (dataset, size);
+
+    /* Select a hyperslab  */
+    filespace = H5Dget_space (dataset);
+    offset[0] = 3;
+    offset[1] = 0;
+    status = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, offset, NULL,
+                                  dims2, NULL);  
+
+    /* Define memory space */
+    dataspace = H5Screate_simple (RANK, dims2, NULL); 
+
+    /* Write the data to the hyperslab  */
+    status = H5Dwrite (dataset, H5T_NATIVE_INT, dataspace, filespace,
+                       H5P_DEFAULT, data2);
+
+    /* Close resources */
+    status = H5Dclose (dataset);
+    status = H5Sclose (dataspace);
+    status = H5Sclose (filespace);
+    status = H5Fclose (file);
+
+/****************************************************************
+    Read the data back 
+ ***************************************************************/
+
+    file = H5Fopen (FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    dataset = H5Dopen (file, DATASETNAME);
+    filespace = H5Dget_space (dataset);
+    rank = H5Sget_simple_extent_ndims (filespace);
+    status_n = H5Sget_simple_extent_dims (filespace, dimsr, NULL);
+
+    cparms = H5Dget_create_plist (dataset);
+    if (H5D_CHUNKED == H5Pget_layout (cparms))
+    {
+       rank_chunk = H5Pget_chunk (cparms, 2, chunk_dimsr);
+    }
+
+    memspace = H5Screate_simple (rank,dimsr,NULL);
+    status = H5Dread (dataset, H5T_NATIVE_INT, memspace, filespace,
+                      H5P_DEFAULT, data_out);
+    printf("\n");
+    printf("Dataset: \n");
+    for (j = 0; j < dimsr[0]; j++)
+    {
+       for (i = 0; i < dimsr[1]; i++)
+           printf("%d ", data_out[j][i]);
+       printf("\n");
+    }
+
+    status = H5Pclose (cparms);
+    status = H5Dclose (dataset);
+    status = H5Sclose (filespace);
+    status = H5Sclose (memspace);
+    status = H5Fclose (file);
+}     
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ + +

Remarks

+

+

    +
  • The function H5Pcreate creates a new property as an instance of + a property list. The signature of this function is as follows: +
    +  hid_t H5Pcreate ( H5P_class_t type )
    +
    +
      +
    • The parameter type is the type of property list to create.
      + The class types are: H5P_FILE_CREATE, H5P_FILE_ACCESS, H5P_DATASET_CREATE, + H5P_DATASET_XFER, and H5P_MOUNT +
    +

    +

  • The function H5Pset_chunk sets the size of the chunks used + to store a chunked layout dataset. + The signature of this function is as follows: +
    +  herr_t H5Pset_chunk ( hid_t plist, int ndims, const hsize_t * dim ) 
    +
    +
      +
    • The first parameter, plist, is the identifier for the property + list to query. +
    • The second parameter, ndims, is the number of dimensions of + each chunk. +
    • The third parameter, dim, is an array containing the size of + each chunk. +
    +

    +A non-negative value is returned if successful; otherwise a negative +value is returned. +

    +

  • The function H5Dextend extends a dataset that has an unlimited + dimension. The signature is as follows: +
    +  herr_t H5Dextend ( hid_t dataset_id, const hsize_t * size ) 
    +
    +
      +
    • The first parameter, dataset_id, is the identifier of + the dataset. +
    • The second parater, size, is an array containing the + new magnitude of each dimension. +
    +

    +This function returns a non-negative value if successful; otherwise +it returns a negative value. +

    +

  • The H5Dget_create_plist function returns an identifier for a +copy of the dataset creation property list for a dataset. +

    +

  • The H5Pget_layout function returns the layout of the raw data for a +dataset. Valid types are H5D_COMPACT, H5D_CONTIGUOUS, and H5D_CHUNKED. +

    +

  • The H5Pget_chunk function retrieves the size of chunks for the +raw data of a chunked layout dataset. +The signature of this function is: +
    +  int H5Pget_chunk ( hid_t plist, int max_ndims, hsize_t * dims ) 
    +
    +
      +
    • The first parameter, plist, is the identifier of the + property list to query. +
    • The second parameter, max_ndims, is the size of the dims + array. +
    • The third parameter, dims, is the array to store the chunk + dimensions +
    +

    +

  • The H5Pclose function terminates access to a property list. + The signature of this function is: +
    +  herr_t H5Pclose ( hid_t plist ) 
    +
    +where plist is the identifier of the property list to terminate +access to. +
+ + + + + + + + + + +


+ +
NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/fileorg.html b/doc/html/Tutor/fileorg.html new file mode 100644 index 0000000..03c2c29 --- /dev/null +++ b/doc/html/Tutor/fileorg.html @@ -0,0 +1,103 @@ + +HDF5 File Organization + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+HDF5 File Organization +

+ + +
+ + +

+An HDF5 file is a container for storing a variety of scientific data, and the +two primary HDF5 objects are groups and datasets. +

    +
  • HDF5 group: a grouping structure containing zero or more HDF5 + objects, together with supporting metadata. + +
  • HDF5 dataset: a multidimensional array of data elements, together + with supporting metadata. +
+Any HDF5 group or dataset may have an associated attribute list. An HDF5 +attribute is a user-defined HDF5 structure that provides extra information +about an HDF5 object. +

+Working with groups and group members (datasets for example) 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. +

    + / signifies the root group.
    + /foo signifies a member of the root group called foo. +
    + /foo/zoo signifies a member of the group foo, which in + turn is a member of the root group. +
+

+ +

+ + + +


+ + NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: July 30, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/glossary.html b/doc/html/Tutor/glossary.html new file mode 100644 index 0000000..84a938d --- /dev/null +++ b/doc/html/Tutor/glossary.html @@ -0,0 +1,234 @@ + +HDF5 Tutorial - Glossary + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Glossary +

+ +
+ + +
+
ATTRIBUTE +
An HDF5 attribute is a small dataset that can be used to describe + the nature and/or the intended usage of the object it is attached + to. + +

+

BOOT BLOCK +
HDF5 files are composed of a "boot block" describing information required to portably access files on multiple platforms, followed by information +about the groups in a file and the datasets in the file. The boot block contains information about the size of offsets and lengths of objects, the +number of entries in symbol tables (used to store groups) and additional version information for the file. +

+

DATASET +
An HDF5 dataset is a multi-dimensional array of data elements, + together with supporting metadata. + +

+

DATASPACE +
An HDF5 dataspace is an object that describes the dimensionality + of the data array. A dataspace is either a regular N-dimensional + array of data points, called a simple dataspace, or a more + general collection of data points organized in another + manner, called a complex dataspace. + +

+

DATA TYPE +
An HDF5 Data Type is an object that describes the type of the + element in an HDF5 multi-dimensional array. There are two + categories of datatypes: atomic and compound data types. An + atomic type is a type which cannot be decomposed into smaller + units at the API level. A compound is a collection of one or + more atomic types or small arrays of such types. + +

+

DATASET CREATION PROPERTY LIST +
The Dataset Creation Property List contains information on how + raw data is organized on disk and how the raw data is compressed. + The dataset API partitions these terms by layout, compression, + and external storage: +
    + Layout: +
      +
    • H5D_COMPACT: Data is small and can be stored in object header (not + implemented yet). This eliminates disk seek/read requests. +
    • H5D_CONTIGUOUS: (default) The data is large, non-extendible, + non-compressible, non-sparse, and can be stored + externally. +
    • H5D_CHUNKED: The data is large and can be extended in any dimension. + It is partitioned into chunks so each chunk is the same + logical size. +
    +Compression: (gzip compression)
    +External Storage Properties: The data must be contiguous to be stored + externally. It allows you to store the data + in one or more non-HDF5 files. + +
+ +

+

DATA TRANSFER PROPERTY LIST +
The data transfer property list is used to control various aspects + of the I/O, such as caching hints or collective I/O information. +

+

DDL +
DDL is a Data Description Language that describes HDF5 objects + in Backus-Naur Form. + +

+ +

FILE ACCESS MODES +
The file access modes determine whether an existing file will be +overwritten. All newly created files are opened for both reading and +writing. Possible values are: +
+  H5F_ACC_RDWR:   Allow read and write access to file. 
+  H5F_ACC_RDONLY: Allow read-only access to file. 
+  H5F_ACC_TRUNC:  Truncate file, if it already exists, erasing all data 
+                  previously stored in the file. 
+  H5F_ACC_EXCL:   Fail if file already exists. 
+  H5F_ACC_DEBUG:  Print debug information. 
+  H5P_DEFAULT:    Apply default file access and creation properties. 
+
+

+

FILE ACCESS PROPERTY LIST +
File access property lists are used to control different methods + of performing I/O on files: +
    +Unbuffered I/O: Local permanent files can be accessed with the functions + described in Section 2 of the Posix manual, namely open(), lseek(), read(), + write(), and close().
    +Buffered I/O: Local permanent files can be accessed with the functions + declared in the stdio.h header file, namely fopen(), fseek(), fread(), + fwrite(), and fclose().
    +Memory I/O: Local temporary files can be created and accessed directly from + memory without ever creating permanent storage. The library uses malloc() + and free() to create storage space for the file
    +Parallel Files using MPI I/O: This driver allows parallel access to a file + through the MPI I/O library. The parameters which can be modified are the + MPI communicator, the info object, and the access mode. The communicator + and info object are saved and then passed to MPI_File_open() during file + creation or open. The access_mode controls the kind of parallel access the + application intends.
    +Data Alignment: Sometimes file access is faster if certain things are aligned + on file blocks. This can be controlled by setting alignment properties of + a file access property list with the H5Pset_alignment() function. +
+

+

FILE CREATION PROPERTY LIST +
The file creation property list is used to control the file + metadata. The parameters that can be modified are: +
    + User-Block Size: The "user-block" is a fixed length block of data located + at the beginning of the file which is ignored by the HDF5 library and may + be used to store any data information found to be useful to applications. +
    + Offset and Length Sizes: The number of bytes used to store the offset and + length of objects in the HDF5 file can be controlled with this parameter. + Symbol Table Parameters: The size of symbol table B-trees can be controlled + by setting the 1/2 rank and 1/2 node size parameters of the B-tree. +
    + Indexed Storage Parameters: The size of indexed storage B-trees can be + controlled by setting the 1/2 rank and 1/2 node size parameters of the + B-tree. +
+

+ +

GROUP +
A Group is a structure containing zero or more HDF5 objects, + together with supporting metadata. The two primary HDF5 objects + are datasets and groups. +

+ +

HDF5 +
HDF5 is an abbreviation for Hierarchical Data Format Version 5. + This file format is intended to make it easy to write and read + scientific data +

+

    +
  • by including the information needed to understand the data + within the file +

    +

  • by providing a library of C, FORTRAN, and other language + programs that reduce the work required to provide efficient + writing and reading - even with parallel IO +
+

+ +

HDF5 FILE +
An HDF5 file is a container for storing grouped collections + of multi-dimensional arrays containing scientific data. +

+ +

H5DUMP +
h5dump is an HDF5 tool that describes the HDF5 file contents in DDL. +

+ +

HYPERSLAB +
+A hyperslab is a portion of a dataset. A hyperslab selection can be a +logically contiguous collection of points in a dataspace, or it +can be a regular pattern of points or blocks in a dataspace. +

+

NAMES +
HDF5 object names are a slash-separated list of components. A name + which begins with a slash is an absolute name which is accessed + beginning with the root group of the file while all other relative + names are accessed beginning with the specified group. +

+

PARALLEL I/O (HDF5) +
The parallel I/O version of HDF5 supports parallel file access using +MPI (Message Passing Interface). +

+ +

THREADSAFE (HDF5) +
A "thread-safe" version of HDF-5 (TSHDF5) is one that can be called from any thread of a multi-threaded program. Any calls to HDF +can be made in any order, and each individual HDF call will perform correctly. A calling program does not have to explicitly lock the HDF +library in order to do I/O. Applications programmers may assume that the TSHDF5 guarantees the following: +
    +
  • the HDF-5 library does not create or destroy threads. +
  • the HDF-5 library uses modest amounts of per-thread private memory. +
  • the HDF-5 library only locks/unlocks it's own locks (no locks are passed in or returned from HDF), and the internal locking is guaranteed to be deadlock free. +
+

+These properties mean that the TSHDF5 library will not interfere with an application's use of threads. A TSHDF5 library is the same +library as regular HDF-5 library, with additional code to synchronize access to the HDF-5 library's internal data structures. + +

+ + + +


+ + NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: September 1, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/img001.gif b/doc/html/Tutor/img001.gif new file mode 100644 index 0000000..b79c6d6 Binary files /dev/null and b/doc/html/Tutor/img001.gif differ diff --git a/doc/html/Tutor/img002.gif b/doc/html/Tutor/img002.gif new file mode 100644 index 0000000..67585ef Binary files /dev/null and b/doc/html/Tutor/img002.gif differ diff --git a/doc/html/Tutor/img003.gif b/doc/html/Tutor/img003.gif new file mode 100644 index 0000000..ac1dcf9 Binary files /dev/null and b/doc/html/Tutor/img003.gif differ diff --git a/doc/html/Tutor/img004.gif b/doc/html/Tutor/img004.gif new file mode 100644 index 0000000..d48dbab Binary files /dev/null and b/doc/html/Tutor/img004.gif differ diff --git a/doc/html/Tutor/img005.gif b/doc/html/Tutor/img005.gif new file mode 100644 index 0000000..3383dc6 Binary files /dev/null and b/doc/html/Tutor/img005.gif differ diff --git a/doc/html/Tutor/index.html b/doc/html/Tutor/index.html new file mode 100644 index 0000000..15cfa5b --- /dev/null +++ b/doc/html/Tutor/index.html @@ -0,0 +1,29 @@ + + +HDF5 Tutorial + + + + + + + + + + <b>HDF5 Tutorial</b> + <p> + If you are reading this message, your browser is not capable of + interpreting HTML frames. A no-frames version of the tutorial + is available by viewing the file <a href="title.html">title.html</a>. + <p> + If you owuld like to upgrade to a frames-capable browser, + we suggest upgrading to the most recent version of + Nestscape Communicator, Microsoft Internet Explorer, or + an equivalent browser. + <p> + In the meantime, you can view this tutorial by starting with the + file <a href="title.html">title.html</a>. + + + + diff --git a/doc/html/Tutor/intro.html b/doc/html/Tutor/intro.html new file mode 100644 index 0000000..abf664c --- /dev/null +++ b/doc/html/Tutor/intro.html @@ -0,0 +1,81 @@ + +HDF5 Tutorial - Introduction + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Introduction +

+ +
+ + +Welcome to the HDF5 Tutorial provided by the HDF User Support Group. +

+HDF5 is a file format and library for storing scientific data. +HDF5 was designed and implemented to address the deficiencies of HDF4.x. +It has a more powerful and flexible data model, supports files larger than 2 GB, +supports parallel I/O, and is thread-safe. For a short overview presentation +of the HDF5 data model, library and tools see: +

+   http://hdf.ncsa.uiuc.edu/HDF5/HDF5_overview/index.htm
+
+This tutorial covers the basic HDF5 data objects and file structure, +the HDF5 programming model and the API functions necessary for creating and +modifying data objects. It also introduces the available HDF5 tools to access +HDF5 files. +

+The examples used in this tutorial, along with a Makefile to compile them +can be found in ./examples/. You can also download +a tar +file with the examples and Makefile. In +order to use the Makefile you may have to edit it and update the +compiler and compiler options, as well as the path for the HDF5 +binary distribution. +

+Please check the References for where to find +other examples of HDF5 Programs. +

+We hope that the step-by-step examples and instructions will give you a quick +start with HDF5. +

+Please send your comments and suggestions to hdfhelp@ncsa.uiuc.edu. + + + + + + + +


+ + NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: October 8, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/iterate.html b/doc/html/Tutor/iterate.html new file mode 100644 index 0000000..4cb0475 --- /dev/null +++ b/doc/html/Tutor/iterate.html @@ -0,0 +1,303 @@ + +HDF5 Tutorial - Iterating over Group Members + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Iterating over Group Members +

+ +
+ + +

Contents:

+ +
+ +

How to Iterate Over Group Members

+This section discusses how to find names and object types of HDF5 group +members. +

+The HDF5 Group interface has a function, H5Giterate, to iterate over the +group members. +

+Operations on each group member can be performed during the iteration process. +The operator function and its data are passed to the iterator as parameters. +There are no restrictions on what kind of operations can be performed on +group members during the iteration procedure. +

+The following steps are involved: +

    + +
  1. Write an operator function which will be used during the iteration process. + The HDF5 library defines the operator function signature and return values. +
  2. Open the group to iterate through. +
  3. Use H5Giterate to iterate through the group or just a few members of + the group. +
+

Programming Example

+
+

Description

+In this example we iterate through the members of the root group. The +operator function displays the members' names and their object types. +The object type can be a group, dataset, or named datatype. +[
Download h5_iterate.c ] +
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include <hdf5.h>
+
+#define FILE   "iterate.h5"
+#define  FALSE 0
+
+/* 1-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+herr_t file_info(hid_t loc_id, const char *name, void *opdata);
+                                     /* Operator function */
+int 
+main(void) {
+    hid_t		file;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		group;      /* Group ID             */
+    hid_t		sid;       /* Dataspace ID			*/
+    hid_t		tid;       /* Datatype ID			*/
+    hsize_t		dims[] = {SPACE1_DIM1};
+    herr_t		ret;		/* Generic return value		*/
+
+/* Compound datatype */
+typedef struct s1_t {
+    unsigned int a;
+    unsigned int b;
+    float c;
+} s1_t;
+
+    /* Create file */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid = H5Screate_simple(SPACE1_RANK, dims, NULL);
+
+    /* Create a group */
+    group=H5Gcreate(file,"Group1",-1);
+
+    /* Close a group */
+    ret = H5Gclose(group);
+
+    /* Create a dataset  */
+    dataset=H5Dcreate(file,"Dataset1",H5T_STD_U32LE,sid,H5P_DEFAULT);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+
+    /* Create a datatype */
+    tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+
+    /* Insert fields */
+    ret=H5Tinsert (tid, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT);
+
+    ret=H5Tinsert (tid, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT);
+
+    ret=H5Tinsert (tid, "c", HOFFSET(s1_t,c), H5T_NATIVE_FLOAT);
+
+    /* Save datatype for later */
+    ret=H5Tcommit (file, "Datatype1", tid);
+
+    /* Close datatype */
+    ret = H5Tclose(tid);
+
+    /* Iterate through the file to see members of the root group */
+
+    printf(" Objects in the root group are:\n");
+    printf("\n");
+
+    H5Giterate(file, "/", NULL, file_info, NULL);
+
+    /* Close file */
+    ret = H5Fclose(file);
+
+    return 0;
+}
+
+/*
+ * Operator function.
+ */
+herr_t file_info(hid_t loc_id, const char *name, void *opdata)
+{
+    H5G_stat_t statbuf;
+
+    /*
+     * Get type of the object and display its name and type.
+     * The name of the object is passed to this function by 
+     * the Library. Some magic :-)
+     */
+    H5Gget_objinfo(loc_id, name, FALSE, &statbuf);
+    switch (statbuf.type) {
+    case H5G_GROUP: 
+         printf(" Object with name %s is a group \n", name);
+         break;
+    case H5G_DATASET: 
+         printf(" Object with name %s is a dataset \n", name);
+         break;
+    case H5G_TYPE: 
+         printf(" Object with name %s is a named datatype \n", name);
+         break;
+    default:
+         printf(" Unable to identify an object ");
+    }
+    return 0;
+ }
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+The output of this program is: +
+ Objects in the root group are:
+
+ Object with name Dataset1 is a dataset 
+ Object with name Datatype1 is a named datatype 
+ Object with name Group1 is a group 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ +

Remarks

+

+

    +
  • The operator function in this example is called file_info. + The signature of the operator function is as follows: +
    +  herr_t *(H5G_operator_t) (hid_group_id, const char* name, void *operator_data)
    +
    +
      +
    • The first parameter is a group identifier for the group being iterated + over. It is passed to the operator by the iterator function, H5Giterate. +
    • The second parameter is the name of the current object. The name is + passed to the operator function by the HDF5 library. +
    • The third parameter is the operator data. It is passed to and from + the operator by the iterator, H5Giterate. + + The operator function in this example just prints the name and type + of the current object and then exits. + + This information can also be used to open the object and perform + different operations or queries. For example a named datatype object's + name can be used to open the datatype and query its properties. +
    +

    + The operator return value defines the behavior of the iterator. +

      +
    • A zero return value causes the iterator to continue, returning + zero when all group members have been processed. +
    • A positive value causes the iterator to immediately return that + value, indicating a short-circuit success. The iterator can be restarted + at the next group member. +
    • A negative value causes the iterator to immediately return that value, + indicating failure. The iterator can be restarted at the next group + member. +
    +

    + In this example the operator function returns 0, which causes the iterator + to continue and go through all group members. +

    +

  • The function H5Gget_objinfo is used to determine the type of the object. + It also returns the modification time, number of hard links, and some + other information. +

    + The signature of this function is as follows: +

    +     herr_t H5Gget_objinfo(hid_t loc_id, const char * name, hbool_t follow_link,
    +                            H5G_stat_t *statbuf)
    +
    +
      +
    • The first two arguments specify the object by its location and name. + This example uses the group identifier and name relative to the group + to specify the object. +
    • The third argument is a flag which indicates whether a + symbolic link should be followed or not. A zero value indicates + that information should be returned for the link itself, but not + about the object it points to. + The root group in this example does not have objects that are + links, so this flag is not important for our example. +
    • The fourth argument is a buffer to return information in. + Type information is returned into the field "type" of the + H5G_stat_t data structure (statbuf.type). Possible values are: + H5G_GROUP, H5G_DATASET, H5G_TYPE, and H5G_LINK. +
    +

    +

  • The H5Giterate function has the following signature: +
    +   int H5Giterate(hid_t loc_id, const char *name , idx,
    +                  H5G_operator_t operator, void * operator_data) 
    +
    +
      +
    • The first parameter is the group for the group being iterated over. +
    • The second parameter is the group name. +
    • The third parameter specifies that iteration begins with the + idx object in the group and the next element to be processed + is returned in the idx parameter. In our example NULL is + used to start at the first group member. Since no stopping point + is returned in this case, the iterator cannot be restarted if one + of the calls to its operator returns a non-zero value. +
    • The fourth parameter is an operator function. +
    • The fifth argument is the operator data. We used NULL since no + data was passed to and from the operator. +
    +
+ + + + + + + + + +


+ +
NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/mount.html b/doc/html/Tutor/mount.html new file mode 100644 index 0000000..9d0e494 --- /dev/null +++ b/doc/html/Tutor/mount.html @@ -0,0 +1,304 @@ + +HDF5 Tutorial - Mounting Files + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Mounting Files +

+ +
+ + +

Contents:

+ +
+ +

Mounting Files

+ +HDF5 allows you to combine two or more HDF5 files in a manner similar to mounting +files in UNIX. The group structure and metadata from one file appear as though +they exist in another file. The following steps are involved: +
    +
  1. Open the files. + +
  2. Choose the "mount point" in the first file (parent). The "mount point" in + HDF5 is a group ( it can also be the root group ). + +
  3. Use the HDF5 API function H5Fmount to mount the second file (child) in + the first one. + +
  4. Work with the objects in the second file as if they were members of + the "mount point" group in the first file. The previous contents of + the "mount point" group are temporarily hidden. + +
  5. Unmount the second file using the H5Funmount function when the work is done. +
+ +

Programming Example

+
+

Description

+ +In the following example we create one file with a group in it, and another +file with a dataset. Mounting is used to access the dataset from the second +file as a member of a group in the first file. The following picture +illustrates this concept. +
+
+    'FILE1'                                 'FILE2'
+  
+--------------------                   --------------------
+!                  !                   !                  !
+!      /           !                   !       /          !
+!       |          !                   !        |         !
+!       |          !                   !        |         !
+!       V          !                   !        V         !
+!     --------     !                   !     ----------   !
+!     ! Group !    !                   !     ! Dataset!   !
+!     ---------    !                   !     ----------   !
+!------------------!                   !------------------! 
+
+After mounting the second file, 'FILE2', under the group in the file, 'FILE1', +the parent has the following structure: +
+ 
+                                'FILE1'                                 
+  
+                           --------------------                   
+                           !                  !                  
+                           !      /           !               
+                           !       |          !            
+                           !       |          !         
+                           !       V          !    
+                           !     --------     !              
+                           !     ! Group !    !            
+                           !     ---------    !           
+                           !         |        !
+                           !         |        !
+                           !         V        !
+                           !    -----------   !
+                           !    ! Dataset !   !
+                           !    !----------   !
+                           !                  !
+                           !------------------!                    
+
+
+[
Download h5_mount.c ] +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include<hdf5.h>
+
+#define FILE1 "mount1.h5"
+#define FILE2 "mount2.h5"
+
+#define RANK 2
+#define NX 4
+#define NY 5
+
+int main(void) 
+{
+
+   hid_t fid1, fid2, gid;  /* Files and group identifiers */
+   hid_t did, tid, sid;    /* Dataset and datatype identifiers */ 
+
+   herr_t status;
+   hsize_t dims[] = {NX,NY}; /* Dataset dimensions */
+
+   int i, j;
+   int bm[NX][NY], bm_out[NX][NY]; /* Data buffers */
+
+   /*
+    * Initialization of buffer matrix "bm" 
+    */
+   for(i =0; i < NX; i++) {
+    for(j = 0; j < NY; j++)
+      bm[i][j] = i + j;
+   }
+
+   /* 
+    * Create first file and a group in it.
+    */
+   fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+   gid = H5Gcreate(fid1, "/G", 0);
+
+   /* 
+    * Close group and file 
+    */
+   H5Gclose(gid);
+   H5Fclose(fid1);
+
+   /* 
+    * Create second file and dataset "D" in it.
+    */
+   fid2 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+   dims[0] = NX;
+   dims[1] = NY;
+   sid = H5Screate_simple(RANK, dims, NULL);
+   did = H5Dcreate(fid2, "D", H5T_NATIVE_INT, sid, H5P_DEFAULT);
+  
+   /*
+    * Write data to the dataset.
+    */
+   status = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, bm);
+
+   /* 
+    * Close all identifiers.
+    */
+   H5Sclose(sid);
+   H5Dclose(did);
+   H5Fclose(fid2);
+
+   /* 
+    * Reopen both files
+    */
+   fid1 = H5Fopen(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
+   fid2 = H5Fopen(FILE2, H5F_ACC_RDONLY, H5P_DEFAULT);
+  
+   /* 
+    * Mount second file under G in the first file.
+    */
+   H5Fmount(fid1, "/G", fid2, H5P_DEFAULT);
+
+   /* 
+    * Access dataset D in the first file under /G/D name.
+    */
+   did = H5Dopen(fid1,"/G/D");
+   tid = H5Dget_type(did);
+   status = H5Dread(did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, bm_out);
+
+   /*
+    * Print out the data.
+    */
+   for(i=0; i < NX; i++){
+    for(j=0; j < NY; j++)
+        printf("  %d", bm_out[i][j]);
+	printf("\n");
+   }
+
+   /* 
+    * Close all identifers
+    */
+   H5Tclose(tid);
+   H5Dclose(did);
+	
+   /* 
+    * Unmounting second file
+    */
+   H5Funmount(fid1, "/G");
+
+   /*
+    * Close both files
+    */
+   H5Fclose(fid1);
+   H5Fclose(fid2);
+
+   return 0;
+}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ +

Remarks

+
    +
  • The first part of the program creates a group in one file and creates + and writes a dataset to another file. +

    +

  • Both files are reopened with the H5F_ACC_RDONLY access flag since no + objects will be modified. The child should be opened with H5F_ACC_RDWR if + the dataset is to be modified. +

    +

  • The second file is mounted in the first using the H5Fmount function. +
    +  herr_t  H5Fmount(hid_t loc_id, const char *name, hid_t file_id, hid_t plist_id)  
    +
    +
      +
    • The first two arguments specify the location of the "mount point" + ( a group ). In this example the "mount point" is a group "/G" in the + file specified by its handle fid1. Since group G is in the root + group of the first file, one can also use just "G" to identify it. +

      + Below is a description of another scenario:
      + Suppose group G was a member of group D in the first file (fid1). + Then mounting point G can be specified in two different ways: +

      +

        +
      • loc_id is fid1
        + name is "D/G" +

        +

      • loc_id is an identifier of the group "D"
        + name is just "G" +
      +

      +

    • The third argument is an identifier of the file which will be mounted. + Only one file can be mounted per "mount point". +

      +

    • The fourth argument is an identifier of the property list to be used. + Currently, only the default property list, H5P_DEFAULT, can be used. +
    +

    +

  • In this example we just read data from the dataset D. One can modify + data also. If the dataset is modified while the file is mounted, it becomes + modified in the original file too after the file is unmounted. +

    +

  • The file is unmounted with the H5Funmount function: +
    +  herr_t H5Funmount(hid_t loc_id, const char *name)
    +
    + Arguments to this function specify the location of the "mount point". + In our example loc_id is an identifier of the first file, and + name is the name of group G, "/G". One could also use "G" + instead of "/G" since G is a member of the root group in the file + fid1. Notice that H5Funmount does not close files. They are closed + with the respective calls to the H5Fclose function. Closing the parent + automatically unmounts the child. +

    +

  • The h5dump utility cannot display files in memory, therefore no output + of FILE1 after FILE2 was mounted is provided. +
+ + + + + +


+ +
NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/questions.html b/doc/html/Tutor/questions.html new file mode 100644 index 0000000..26153f3 --- /dev/null +++ b/doc/html/Tutor/questions.html @@ -0,0 +1,142 @@ + +HDF5 Tutorial - Introductory Topics Questions + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Introductory Topics Questions +

+ +
+
+
+
+Section 2: HDF File Organization
+================================
+
+1. Name and describe the two primary objects that can be stored in an HDF5
+   file:
+
+2. What is an attribute?
+
+3. Give the path name for an object called "harry" that is a member of a
+   group called "dick," which in turn is a member of the root group.
+
+
+Section 3: The HDF5 API
+=======================
+
+Describe the purpose of each of the following HDF5 APIs:
+
+H5A, H5D, H5E, F5F, H5G, H5T, H5Z
+
+
+
+Section 4: Creating an HDF File
+===============================
+
+1. What two HDF5 routines must be called in order to create an HDF5 file?
+
+2. What include file must be included in any file that uses the HDF5 library.
+
+3. An HDF5 file is never completely empty because as soon as an HDF5 file
+   is created, it automatically contains a certain primary object.  What is
+   that object?
+
+
+
+Section 5: Creating a Dataset
+=============================
+
+1. Name and describe two major datatype categories.
+
+2. List the HDF5 atomic datatypes. Give an example of a predefined datatype.
+
+3. What does the dataspace describe? What are the major characteristics of the
+   simple dataspace? 
+
+4. What information needs to be passed to the H5Dcreate function, i.e.
+   what information is needed to describe a dataset at creation time?
+
+
+Section 6: Reading from/Writing to a Dataset
+============================================
+
+1. What are six pieces of information which need to be specified for
+   reading and writing a dataset?
+
+2. Why are both the memory dataspace and file dataspace needed for 
+   read/write operations, but only the memory datatype is specified for the 
+   datatype?
+
+3. What does the line DATASPACE { SIMPLE (4 , 6 ) / ( 4 , 6 ) } in Fig 6.1 
+   means?
+
+
+Section 7: Creating an Attribute
+================================
+
+1. What is an attribute?
+
+2. Can partial I/O operations be performed on attributes?
+
+
+Section 8: Creating a Group
+===========================
+
+What are the two primary objects that can be included in
+a group?
+
+
+Section 9: Creating Groups using Absolute/Relative Names
+========================================================
+
+1. Group names can be specified in two "ways".  What are these
+   two types of group names that you can specify?
+
+2. You have a dataset named "moo" in the group "boo", which is 
+   in the group "foo", which in turn, is in the root group.  How would 
+   you specify an absolute name to access this dataset?
+
+
+Section 10: Creating Datasets in Groups
+=======================================
+
+Describe a way to access the dataset "moo" described in the previous section
+(Section 9, question 2), using a relative and absolute pathname.
+
+
+ + +


+ + NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 2, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/rdwt.html b/doc/html/Tutor/rdwt.html new file mode 100644 index 0000000..1eb1a84 --- /dev/null +++ b/doc/html/Tutor/rdwt.html @@ -0,0 +1,259 @@ + +HDF5 Tutorial - Reading to/Writing from a Dataset + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Reading to/Writing from a Dataset +

+ +
+ + +

Contents:

+ +
+ +

Reading to/Writing from a Dataset

+

+During a dataset I/O operation, the library transfers raw data between memory +and the file. The memory can have a data type different than the file data type +and can also be a different size (memory is a subset of the dataset elements, +or vice versa). Therefore, to perform read or write operations, the application +program must specify: +

    +
  • The dataset + +
  • The dataset's data type in memory + +
  • The dataset's dataspace in memory + +
  • The dataset's dataspace in the file + +
  • The transfer properties (The data transfer properties control various + aspects of the I/O operations like the number of processes participating + in a collective I/O request or hints to the library to control caching of + raw data. In this tutorial, we use the default transfer properties.) + +
  • The data buffer +
+ + +

+The steps to read to/write from a dataset are +as follows: +

    +
  1. Obtain the dataset identifier. +
  2. Specify the memory data type. +
  3. Specify the memory dataspace. +
  4. Specify the file dataspace. +
  5. Specify the transfer properties. +
  6. Perform the desired operation on the dataset. +
  7. Close the dataset. +
  8. Close the dataspace/data type, and property list if necessary. +
+ +To read to/write from a dataset, the calling program must contain the following call: +
+   H5Dread(dataset_id, mem_type_id, mem_space_id, file_space_id,
+           xfer_plist_id, buf );
+
+ or +
+   H5Dwrite(dataset_id, mem_type_id, mem_space_id, file_space_id,
+            xfer_plist_id, buf);
+
+ + +

+

Programming Example

+
+

Description

+The following example shows how to read and write an existing dataset. +It opens the file created in the previous example, obtains the dataset +identifier, +/dset, writes the dataset to the file, then reads the dataset back from +memory. It then closes the dataset and file.
+[
Download h5_rdwt.c ] + +
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include <hdf5.h>
+#define FILE "dset.h5"
+
+main() {
+
+   hid_t       file_id, dataset_id;  /* identifiers */
+   herr_t      status;
+   int         i, j, dset_data[4][6];
+
+   /* Initialize the dataset. */
+   for (i = 0; i < 4; i++)
+      for (j = 0; j < 6; j++)
+         dset_data[i][j] = i * 6 + j + 1;
+
+   /* Open an existing file. */
+   file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /* Open an existing dataset. */
+
+   dataset_id = H5Dopen(file_id, "/dset");
+
+   /* Write the dataset. */
+   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);
+
+   /* Close the dataset. */
+   status = H5Dclose(dataset_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ +

Remarks

+
+ +

+ + + + + + + + + +


+ +
NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/selectc.html b/doc/html/Tutor/selectc.html new file mode 100644 index 0000000..e01d9db --- /dev/null +++ b/doc/html/Tutor/selectc.html @@ -0,0 +1,296 @@ + +HDF5 Tutorial - Selections using H5Sselect_elements and H5Scopy + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Selections using H5Sselect_elements and H5SCopy +

+ +
+ + +

Contents:

+ +
+ +

Selecting Independent Points and Copying a Dataspace

+You can select independent points to read or write to in a +dataspace by use of the H5Sselect_elements function. +

+The H5Scopy function allows you to make an exact copy of a dataspace, +which can help cut down on the number of function calls needed when +selecting a dataspace. +

+

Programming Example

+
+

Description

+This example shows you how to use H5Sselect_elements to select individual +points in a dataset and how to use H5Scopy to make a copy of a dataspace. + +[
Download h5_copy.c ] +
+/***********************************************************************/
+/*                                                                     */
+/*  PROGRAM:   h5_copy.c                                               */
+/*  PURPOSE:   Shows how to use the H5SCOPY function.                  */
+/*  DESCRIPTION:                                                       */
+/*             This program creates two files, copy1.h5, and copy2.h5. */
+/*             In copy1.h5, it creates a 3x4 dataset called 'Copy1',   */
+/*             and write 0's to this dataset.                          */
+/*             In copy2.h5, it create a 3x4 dataset called 'Copy2',    */
+/*             and write 1's to this dataset.                          */
+/*             It closes both files, reopens both files, selects two   */
+/*             points in copy1.h5 and writes values to them.  Then it  */
+/*             does an H5Scopy from the first file to the second, and  */
+/*             writes the values to copy2.h5.  It then closes the      */
+/*             files, reopens them, and prints the contents of the     */
+/*             two datasets.                                           */
+/*                                                                     */
+/***********************************************************************/
+ 
+#include "hdf5.h"
+#define FILE1 "copy1.h5"
+#define FILE2 "copy2.h5"
+
+#define RANK  2
+#define DIM1  3
+#define DIM2  4
+#define NUMP  2 
+
+int main (void)
+{
+     hid_t   file1, file2, dataset1, dataset2;
+     hid_t   mid1, mid2, fid1, fid2;
+     hsize_t fdim[] = {DIM1, DIM2};
+     hsize_t mdim[] = {DIM1, DIM2};
+     hsize_t start[2], stride[2], count[2], block[2];
+     int buf1[DIM1][DIM2];
+     int buf2[DIM1][DIM2];
+     int bufnew[DIM1][DIM2];
+     int val[] = {53, 59};
+     hsize_t marray[] = {2};
+     hssize_t coord[NUMP][RANK];
+     herr_t ret;
+     uint  i, j;
+
+/***********************************************************************/
+/*                                                                     */
+/* Create two files containing identical datasets. Write 0's to one    */
+/* and 1's to the other.                                               */
+/*                                                                     */
+/***********************************************************************/
+
+     for ( i = 0; i < DIM1; i++ ) 
+         for ( j = 0; j < DIM2; j++ )
+             buf1[i][j] = 0;
+
+     for ( i = 0; i < DIM1; i++ ) 
+         for ( j = 0; j < DIM2; j++ )
+             buf2[i][j] = 1;
+
+     file1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+     file2 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+     fid1 = H5Screate_simple (RANK, fdim, NULL);
+     fid2 = H5Screate_simple (RANK, fdim, NULL);
+
+     dataset1 = H5Dcreate (file1, "Copy1", H5T_NATIVE_INT, fid1, H5P_DEFAULT);
+     dataset2 = H5Dcreate (file2, "Copy2", H5T_NATIVE_INT, fid2, H5P_DEFAULT);
+
+     ret = H5Dwrite(dataset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1);
+     ret = H5Dwrite(dataset2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2);
+
+     ret = H5Dclose (dataset1);
+     ret = H5Dclose (dataset2);
+
+     ret = H5Sclose (fid1);
+     ret = H5Sclose (fid2);
+
+     ret = H5Fclose (file1);
+     ret = H5Fclose (file2);
+
+/***********************************************************************/
+/*                                                                     */
+/* Open the two files.  Select two points in one file, write values to */
+/* those point locations, then do H5Scopy and write the values to the  */
+/* other file.  Close files.                                           */
+/*                                                                     */
+/***********************************************************************/
+ 
+     file1 = H5Fopen (FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
+     file2 = H5Fopen (FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
+     dataset1 = H5Dopen (file1, "Copy1");
+     dataset2 = H5Dopen (file2, "Copy2");
+     fid1 = H5Dget_space (dataset1);
+     mid1 = H5Screate_simple(1, marray, NULL); 
+     coord[0][0] = 0; coord[0][1] = 3;
+     coord[1][0] = 0; coord[1][1] = 1;
+
+     ret = H5Sselect_elements (fid1, H5S_SELECT_SET, NUMP, (const hssize_t **)coord);
+
+     ret = H5Dwrite (dataset1, H5T_NATIVE_INT, mid1, fid1, H5P_DEFAULT, val); 
+
+     fid2 = H5Scopy (fid1);
+
+     ret = H5Dwrite (dataset2, H5T_NATIVE_INT, mid1, fid2, H5P_DEFAULT, val); 
+
+     ret = H5Dclose (dataset1);
+     ret = H5Dclose (dataset2);
+     ret = H5Sclose (fid1);
+     ret = H5Sclose (fid2);
+     ret = H5Fclose (file1);
+     ret = H5Fclose (file2);
+     ret = H5Sclose (mid1);
+
+/***********************************************************************/
+/*                                                                     */
+/* Open both files and print the contents of the datasets.             */
+/*                                                                     */
+/***********************************************************************/
+
+     file1 = H5Fopen (FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
+     file2 = H5Fopen (FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
+     dataset1 = H5Dopen (file1, "Copy1");
+     dataset2 = H5Dopen (file2, "Copy2");
+
+     ret = H5Dread (dataset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                    H5P_DEFAULT, bufnew);
+     
+     printf ("\nDataset 'Copy1' in file 'copy1.h5' contains: \n");
+     for (i=0;i<DIM1; i++) {
+        for (j=0;j<DIM2;j++) printf ("%3d  ", bufnew[i][j]);
+        printf("\n");
+     }
+
+     printf ("\nDataset 'Copy2' in file 'copy2.h5' contains: \n");
+
+     ret = H5Dread (dataset2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                    H5P_DEFAULT, bufnew);
+
+     for (i=0;i<DIM1; i++) {
+        for (j=0;j<DIM2;j++) printf ("%3d  ", bufnew[i][j]);
+        printf("\n");
+     }
+     ret = H5Dclose (dataset1);
+     ret = H5Dclose (dataset2);
+     ret = H5Fclose (file1);
+     ret = H5Fclose (file2);
+
+}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ + +

Remarks

+
    +
  • H5Sselect_elements selects array elements to be included in the +selection for a dataspace: +
    +   herr_t H5Sselect_elements (hid_t space_id, H5S_seloper_t op, 
    +                              size_t num_elem, const hssize_t **coord ) 
    +
    +
      +
    • The space_id parameter is the dataspace identifier.
      +
    • The op parameter currently can only be set to H5S_SELECT_SET and +specifies to replace the existing selection with the parameters from this +call. +
    • The coord array is a two-dimensional array of size 'dataspace rank' +by the number of elements to be selected, num_elem.
      +
    +

    +

  • H5Scopy creates an exact copy of a dataspace: +
    +   hid_t H5Scopy(hid_t space_id ) 
    +
    +
      +
    • The space_id parameter is the dataspace identifier to copy. +
    +
+ +

+ + +

File Contents

+ +Following is the DDL for copy1.h5 and copy2.h5, as viewed with +the commands "h5dump copy1.h5" and "h5dump copy2.h5". +

+Fig. S.1   'copy1.h5' in DDL +

+HDF5 "copy1.h5" {
+GROUP "/" {
+   DATASET "Copy1" {
+      DATATYPE { H5T_STD_I32BE }
+      DATASPACE { SIMPLE ( 3, 4 ) / ( 3, 4 ) }
+      DATA {
+         0, 59, 0, 53,
+         0, 0, 0, 0,
+         0, 0, 0, 0
+      }
+   }
+}
+}
+
+Fig. S.2   'copy2.h5' in DDL +
+HDF5 "copy2.h5" {
+GROUP "/" {
+   DATASET "Copy2" {
+      DATATYPE { H5T_STD_I32BE }
+      DATASPACE { SIMPLE ( 3, 4 ) / ( 3, 4 ) }
+      DATA {
+         1, 59, 1, 53,
+         1, 1, 1, 1,
+         1, 1, 1, 1
+      }
+   }
+}
+}
+
+
+ + + + + +


+ +
NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: August 27, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/title.html b/doc/html/Tutor/title.html new file mode 100644 index 0000000..35283b7 --- /dev/null +++ b/doc/html/Tutor/title.html @@ -0,0 +1,99 @@ + +HDF5 Tutorial + + + + + + + +NCSA

+ +

+What is HDF5? + HDF5 Tutorial +

+ + + +
+ + + +

Contents:

+

Introductory Topics

+
    +
  1. Introduction +
  2. HDF5 File Organization +
  3. The HDF5 API +
  4. Creating an HDF5 File +
  5. Creating a Dataset +
  6. Reading from/Writing to a Dataset +
  7. Creating an Attribute +
  8. Creating a Group +
  9. Creating Groups using Absolute/Relative +Names +
  10. Creating Datasets in Groups +
+ +

Advanced Topics

+ +

+HDF5 Utilities - h5ls/h5dump
+Glossary
+References
+Example Programs from this Tutorial
+ + + + + +


+ + NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: October 8, 1999

+ +
+
+ + + + + + + diff --git a/doc/html/Tutor/util.html b/doc/html/Tutor/util.html new file mode 100644 index 0000000..79dbf28 --- /dev/null +++ b/doc/html/Tutor/util.html @@ -0,0 +1,89 @@ + +HDF5 Tutorial - Utilities (h5dump, h5ls) + + + + + + + +NCSA

+ + [ HDF5 Tutorial Top ] +

+Utilities (h5dump, h5ls) +

+ +
+ +The h5dump and h5ls utilities can be used to examine the contents of an +hdf5 file. +

+ +

h5dump

+
+h5dump [-h] [-bb] [-header] [-a ] [-d <names>] [-g <names>]
+       [-l <names>] [-t <names>] <file>
+
+  -h            Print information on this command.
+  -bb           Display the content of the boot block. The default is not to display.
+  -header       Display header only; no data is displayed.
+  -a <names>    Display the specified attribute(s).
+  -d <names>    Display the specified dataset(s).
+  -g <names>    Display the specified group(s) and all the members.
+  -l <names>    Displays the value(s) of the specified soft link(s).
+  -t <names>    Display the specified named data type(s).
+  
+  <names> is one or more appropriate object names.
+
+
+

h5ls

+
+h5ls [OPTIONS] FILE [OBJECTS...]
+
+   OPTIONS
+      -h, -?, --help   Print a usage message and exit
+      -d, --dump       Print the values of datasets
+      -f, --full       Print full path names instead of base names
+      -l, --label      Label members of compound datasets
+      -r, --recursive  List all groups recursively, avoiding cycles
+      -s, --string     Print 1-byte integer datasets as ASCII
+      -wN, --width=N   Set the number of columns of output
+      -v, --verbose    Generate more verbose output
+      -V, --version    Print version number and exit
+   FILE
+      The file name may include a printf(3C) integer format such as
+      "%05d" to open a file family.
+   OBJECTS
+      The names of zero or more objects about which information should be
+      displayed.  If a group is mentioned then information about each of its
+      members is displayed.  If no object names are specified then
+      information about all of the objects in the root group is displayed.
+
+ + +


+ +
NCSA
+ The National Center for Supercomputing Applications

+ University of Illinois + at Urbana-Champaign
+
+ + +hdfhelp@ncsa.uiuc.edu +
Last Modified: July 30, 1999

+ +
+
+ + + + + + + -- cgit v0.12