%% Write MATLAB Data to HDF4 File
% This example shows how to write MATLAB® arrays to a Scientific Data Set in an HDF4 file.
%% Add Package to Import List
% Add the matlab.io.hdf4.* path to the import list.

import matlab.io.hdf4.*

% Prefix subsequent calls to functions in the matlat.io.hdf4.sd package with sd, rather than the entire package path.
%
%% Create HDF4 File
% Create a new HDF4 file using the matlab.io.hdf4.sd.start function. This function corresponds to the SD API routine, SDstart.

sdID = sd.start('mydata.hdf','create');

% sd.start creates the file and returns a file identifier named sdID.
% To open an existing file instead of creating a new one, call sd.start with 'write' access instead of 'create'.
%
%% Create HDF4 Data Set
% Create a data set in the file for each MATLAB array you want to export. If you are writing to an existing data set, you can skip ahead to the next step. In this example, create one data set for the array of sample data, A, using the matlab.io.hdf4.sd.create function. This function corresponds to the SD API routine, SDcreate. The ds_type argument is a character vector specifying the MATLAB data type of the data set.

A = [1 2 3 4 5 ; 6 7 8 9 10 ; 11 12 13 14 15]; 
ds_name = 'A';
ds_type = 'double';
ds_dims = size(A);
sdsID = sd.create(sdID,ds_name,ds_type,ds_dims);

% sd.create returns an HDF4 SD data set identifier, sdsID.
%
%% Write MATLAB Data to HDF4 File
% Write data in A to the data set in the file using the matlab.io.hdf4.sd.writedata function. This function corresponds to the SD API routine, SDwritedata. The start argument specifies the zero-based starting index.

start = [0 0];
sd.writeData(sdsID,start,A);

% sd.writeData queues the write operation. Queued operations execute when you close the HDF4 file.
%
%% Write MATLAB Data to Portion of Data Set
% Replace the second row of the data set with the vector B. Use a start input value of [1 0] to begin writing at the second row, first column. start uses zero-based indexing.

B = [9 9 9 9 9];
start = [1 0];
sd.writeData(sdsID,start,B);

%
%% Write Metadata to HDF4 File
% Create a global attribute named creation_date, with a value that is the current date and time. Use the matlab.io.hdf4.sd.setAttr function, which corresponds to the SD API routine, SDsetattr.

sd.setAttr(sdID,'creation_date',datestr(now));

% sd.Attr creates a file attribute, also called a global attribute, associated with the HDF4 file identified by sdID.
%
% Associate a predefined attribute, cordsys, to the data set identified by sdsID. Possible values of this attribute include the text strings 'cartesian', 'polar', and 'spherical'.

attr_name = 'cordsys';
attr_value = 'polar';
sd.setAttr(sdsID,attr_name,attr_value);

%
%% Close HDF4 Data Set
% Close access to the data set, using the matlab.io.hdf4.sd.endAccess function. This function corresponds to the SD API routine, SDendaccess. You must close access to all the data sets in and HDF4 file before closing the file.

sd.endAccess(sdsID);

%
%% Close HDF4 File
% Close the HDF4 file using the matlab.io.hdf4.sd.close function. This function corresponds to the SD API routine, SDend.

sd.close(sdID);

% Closing an HDF4 file executes all the write operations that have been queued using SDwritedata.
% Copyright 2012 The MathWorks, Inc.