matlab: some fixes and updates handling hdf5 files

pull/1/head
Thorsten Liebig 2012-07-30 11:13:36 +02:00
parent f20a36863c
commit cb78878604
2 changed files with 21 additions and 45 deletions

View File

@ -8,8 +8,7 @@ function hdf_fielddata = ReadHDF5FieldData(file)
% hdf_fielddata.TD.values
%
% % frequency domain data (if exist)
% hdf_fielddata.FD.time
% hdf_fielddata.FD.names
% hdf_fielddata.FD.frequency
% hdf_fielddata.FD.values
%
% example: values of timestep 12:
@ -32,7 +31,6 @@ end
info = hdf5info(file);
TD.names = {};
FD.names = {};
hdf_fielddata = [];
for n=1:numel(info.GroupHierarchy.Groups)
@ -49,16 +47,6 @@ for n=1:numel(info.GroupHierarchy.Groups)
end
end
end
%search and read FD data
if strcmp(info.GroupHierarchy.Groups(n).Groups(nGroup).Name,'/FieldData/FD')
for m=1:numel(info.GroupHierarchy.Groups(n).Groups(nGroup).Datasets)
FD.names{m} = info.GroupHierarchy.Groups(n).Groups(nGroup).Datasets(m).Name;
for a = 1:numel(info.GroupHierarchy.Groups(n).Groups(nGroup).Datasets(m).Attributes)
str = regexp(info.GroupHierarchy.Groups(n).Groups(nGroup).Datasets(m).Attributes(a).Name,'\w/*\w*','match');
FD.(str{end})(m) = double(info.GroupHierarchy.Groups(n).Groups(nGroup).Datasets(m).Attributes(a).Value);
end
end
end
end
end
@ -71,24 +59,15 @@ if (numel(TD.names)>0)
end
end
if (numel(FD.names)>0)
hdf_fielddata.FD=FD;
Nr_freq = numel(FD.names);
for n=1:Nr_freq
name = ['/FieldData/FD/f' int2str(n-1) '_real'];
ind = find(strcmp(FD.names,name));
if isempty(ind)
ind = find(strcmp(FD.names,['/FieldData/FD/f' int2str(n-1)]));
if ~isempty(ind)
hdf_fielddata.FD.values{n} = double(hdf5read(file,FD.names{ind}));
end
else
hdf_fielddata.FD.values{n} = double(hdf5read(file,FD.names{ind}));
name = ['/FieldData/FD/f' int2str(n-1) '_imag'];
ind = find(strcmp(FD.names,name));
hdf_fielddata.FD.values{n} = hdf_fielddata.FD.values{n} + 1j*double(hdf5read(file,FD.names{ind}));
end
end
% extract FD data
try
hdf_fielddata.FD.frequency = double(hdf5read(file,'/FieldData/FD','frequency'));
catch err
disp(err)
return
end
for n=1:numel(hdf_fielddata.FD.frequency)
hdf_fielddata.FD.values{n} = double(hdf5read(file,['/FieldData/FD/f' int2str(n-1) '_real']) + 1i*hdf5read(file,['/FieldData/FD/f' int2str(n-1) '_imag']));
end
function hdf_fielddata = ReadHDF5FieldData_octave(file)
@ -107,10 +86,8 @@ if isfield(hdf.FieldData,'TD')
end
if isfield(hdf.FieldData,'FD')
%read FD data
hdf_fielddata_names = fieldnames(hdf.FieldData.FD);
for n=1:numel(hdf_fielddata_names)/2
hdf_fielddata.FD.values{n} = hdf.FieldData.FD.(hdf_fielddata_names{2*n}) + 1j*hdf.FieldData.FD.(hdf_fielddata_names{2*n-1});
hdf_fielddata.FD.names{n} = ['/FieldData/FD/' hdf_fielddata_names{2*n-1}(1:end-5)];
hdf_fielddata.FD.frequencies(n) = h5readatt_octave(file,['/FieldData/FD/' hdf_fielddata_names{2*n}],'frequency');
hdf_fielddata.FD.frequency = h5readatt_octave(file,'/FieldData/FD/','frequency');
for n=1:numel(hdf_fielddata.FD.frequency)
hdf_fielddata.FD.values{n} = double(hdf.FieldData.FD.(['f' int2str(n-1) '_real']) +1i*hdf.FieldData.FD.(['f' int2str(n-1) '_imag']) );
end
end

View File

@ -38,26 +38,25 @@ if isfield( hdf_fielddata, 'TD' )
end
if isfield( hdf_fielddata, 'FD' )
% this is a frequency domain data set
freq = hdf_fielddata.FD.freq;
freq = hdf_fielddata.FD.frequency;
for n=1:numel(freq)
name = ['/FieldData/FD/f' int2str(n-1) '_real'];
[details.Location, details.Name] = fileparts(name);
attribute_details.AttachedTo = name;
attribute_details.AttachType = 'dataset';
attribute_details.Name = 'freq';
hdf5write( filename, details, real(hdf_fielddata.FD.values{n}), ...
attribute_details, freq(n), ...
'WriteMode', writemode );
name = ['/FieldData/FD/f' int2str(n-1) '_imag'];
[details.Location, details.Name] = fileparts(name);
attribute_details.AttachedTo = name;
attribute_details.AttachType = 'dataset';
attribute_details.Name = 'freq';
hdf5write( filename, details, imag(hdf_fielddata.FD.values{n}), ...
attribute_details, freq(n), ...
'WriteMode', 'append' );
writemode = 'append';
end
name = '/FieldData/FD';
[details.Location, details.Name] = fileparts(name);
attribute_details.AttachedTo = name;
attribute_details.AttachType = 'group';
attribute_details.Name = 'frequency';
hdf5write( filename, attribute_details, freq, ...
'WriteMode', 'append' );
end
names = hdf_mesh.names; % names is a cell array