% Writes a simple NeXus HDF5 file with links % according to the example from Figure 2.1 in the Design chapter filename = 'writer_2_1.hdf5'; % read input data A = load('input.dat'); two_theta = A(:,1); counts = int32(A(:,2)); % clear out old file, if it exists delete(filename); % store x h5create(filename,'/entry/instrument/detector/two_theta',[length(two_theta)]); h5write(filename,'/entry/instrument/detector/two_theta',two_theta); h5writeatt(filename,'/entry/instrument/detector/two_theta','units','degrees'); % store y h5create(filename,'/entry/instrument/detector/counts',[length(counts)],'DataType','int32'); h5write(filename,'/entry/instrument/detector/counts',counts); h5writeatt(filename,'/entry/instrument/detector/counts','units','counts'); % create group NXdata with links to detector % note: requires the additional file h5link.m h5link(filename,'/entry/instrument/detector/two_theta','/entry/data/two_theta'); h5link(filename,'/entry/instrument/detector/counts','/entry/data/counts'); % indicate that we are plotting y vs. x h5writeatt(filename,'/','default','entry'); h5writeatt(filename,'/entry','default','data'); h5writeatt(filename,'/entry/data','signal','counts'); h5writeatt(filename,'/entry/data','axes','two_theta'); h5writeatt(filename,'/entry/data','two_theta_indices',int32(0)); % add NeXus metadata h5writeatt(filename,'/','file_name',filename); h5writeatt(filename,'/','file_time',timestamp); h5writeatt(filename,'/','instrument','APS USAXS at 32ID-B'); h5writeatt(filename,'/','creator','writer_2_1.m'); h5writeatt(filename,'/','NeXus_version','4.3.0'); h5writeatt(filename,'/','HDF5_Version','1.6'); % no 1.8 features used in this example h5writeatt(filename,'/entry','NX_class','NXentry'); h5writeatt(filename,'/entry/instrument','NX_class','NXinstrument'); h5writeatt(filename,'/entry/instrument/detector','NX_class','NXdetector'); h5writeatt(filename,'/entry/data','NX_class','NXdata'); % show structure of the file that was created h5disp(filename);