135 lines
8.5 KiB
Matlab
135 lines
8.5 KiB
Matlab
%% Develpment of hdf export and import
|
|
%
|
|
% from table to our instrument hdf structure
|
|
%% Todo
|
|
%
|
|
% * ensure logging of processing in NEXAFS and XPS to select data, make it
|
|
% usfull for string operations (no cells)
|
|
% * How to include units and definitions
|
|
% * Next, make this work for averageded files
|
|
%%
|
|
clc
|
|
% % add some SES data
|
|
%tmpFileImport = load('../beamtimes/20220828BeamTimeIceNappIss/FileList.mat');
|
|
% FileList = outerjoinRowToTable(FileList, tmpFileImport.FileList);
|
|
clearvars tmp*
|
|
% select only data that has been used,
|
|
[tmpn1, ~] = cellfun(@size,FileList.spectrum_counts); % spectra have been generated
|
|
[tmpn2, ~] = cellfun(@size,FileList.spectrum_countsNorm);
|
|
[tmpn3, ~] = cellfun(@size,FileList.spectrum_countsPerSecond);
|
|
tmpDataSelection = contains(FileList.sample,lettersPattern) ... % we have added sample notes, so this is data
|
|
& ~contains(FileList.sample, '(bad data)') & ~contains(FileList.sample, '(no notes)') ...
|
|
& (tmpn1 > 1 | tmpn2 > 1 | tmpn3 > 1); % has actually been proceesed.
|
|
|
|
|
|
|
|
tmpUserName = 'ThorstenBR';
|
|
tmpFileList = FileList(tmpDataSelection,:);
|
|
% get table variables that are data
|
|
tmpMissingVariable = ~ismember(tmpFileList.Properties.VariableNames,...
|
|
[{'image'}; {'spectrum_counts'}; {'spectrum_countsPerSecond'}; {'spectrum_countsNorm'}; {'xRayEkin_eV'}; {'scientaEkin_eV'}; {'imageRoh'}; {'spectrum_countsPerSecondRoh'};{'beamlineInt'}]);
|
|
tmpVariablesToBeAdded = tmpFileList.Properties.VariableNames(tmpMissingVariable);
|
|
|
|
for ij = 1:size(tmpFileList,1)
|
|
% get file name and "instruement" name
|
|
tmpPathParts = split(tmpFileList(ij,:).folder,"/");
|
|
tmpFileName = [tmpPathParts{end-1} tmpUserName '.h5'];
|
|
tmpTopGroupName = tmpPathParts{end};
|
|
% write data
|
|
h5create(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/image'],...
|
|
size(tmpFileList(ij,:).image{:}));
|
|
h5write(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/image'],...
|
|
tmpFileList(ij,:).image{:})
|
|
if %XPS
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/image'],'label','electron emission intensity');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/image'],'units','XPS (y,x): counts per second vs. electron volt; NEXAFS (y,x,z): counts vs. X-ray photon kinetic energy vs. electron kinetic energy');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/image'],'definition','X-ray excited electron emission');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/image'],'comment','XPS: intensity vs. electron kinetic energy for each sequence iteration; NEXAFS: intensity vs. x-ray photon kinetic energy (non-linear scaling) vs. electron kinetic energy');
|
|
else %NEXAFS
|
|
|
|
end
|
|
|
|
try
|
|
h5create(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_counts'],...
|
|
size(tmpFileList(ij,:).spectrum_counts{:}));
|
|
h5write(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_counts'],...
|
|
tmpFileList(ij,:).spectrum_counts{:})
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_counts'],'label','electron emission intensity');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_counts'],'units','arb. unit');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_counts'],'definition','X-ray excited electron emission');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_counts'],'comment',' ');
|
|
catch
|
|
end
|
|
try
|
|
h5create(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsPerSecond'],...
|
|
size(tmpFileList(ij,:).spectrum_countsPerSecond{:}));
|
|
h5write(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsPerSecond'],...
|
|
tmpFileList(ij,:).spectrum_countsPerSecond{:})
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsPerSecond'],'label',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsPerSecond'],'units',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsPerSecond'],'definition',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsPerSecond'],'comment',' ');
|
|
catch
|
|
end
|
|
try
|
|
h5create(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsNorm'],...
|
|
size(tmpFileList(ij,:).spectrum_countsNorm{:}));
|
|
h5write(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsNorm'],...
|
|
tmpFileList(ij,:).spectrum_countsNorm{:})
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsNorm'],'label',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsNorm'],'units',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsNorm'],'definition',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/spectrum_countsNorm'],'comment',' ');
|
|
catch
|
|
end
|
|
try
|
|
h5create(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/beamlineInt'],...
|
|
size(tmpFileList(ij,:).beamlineInt{:}));
|
|
h5write(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/beamlineInt'],...
|
|
tmpFileList(ij,:).beamlineInt{:})
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/beamlineInt'],'label',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/beamlineInt'],'units',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/beamlineInt'],'definition',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/beamlineInt'],'comment',' ');
|
|
catch
|
|
end
|
|
h5create(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/xRayEkin_eV'],...
|
|
size(tmpFileList(ij,:).xRayEkin_eV{:}));
|
|
h5write(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/xRayEkin_eV'],...
|
|
tmpFileList(ij,:).xRayEkin_eV{:})
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/xRayEkin_eV'],'label',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/xRayEkin_eV'],'units',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/xRayEkin_eV'],'definition',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/xRayEkin_eV'],'comment',' ');
|
|
|
|
h5create(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/scientaEkin_eV'],...
|
|
size(tmpFileList(ij,:).scientaEkin_eV{:}));
|
|
h5write(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/scientaEkin_eV'],...
|
|
tmpFileList(ij,:).scientaEkin_eV{:})
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/scientaEkin_eV'],'label',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/scientaEkin_eV'],'units',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/scientaEkin_eV'],'definition',' ');
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:} '/scientaEkin_eV'],'comment',' ');
|
|
% add attributes
|
|
tmpCells= []; % create empty array
|
|
for ii = 1:size(tmpVariablesToBeAdded,2)
|
|
|
|
if matches(class(tmpFileList.(tmpVariablesToBeAdded{ii})),'cell')
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:}],tmpVariablesToBeAdded{ii},tmpFileList(ij,:).(tmpVariablesToBeAdded{ii}){:});
|
|
tmpCells = [tmpCells,', ' tmpVariablesToBeAdded{ii}];
|
|
else
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:}],tmpVariablesToBeAdded{ii},tmpFileList(ij,:).(tmpVariablesToBeAdded{ii}));
|
|
end
|
|
% write variables that were cells to a list; so upon import the
|
|
% variable type can be set again.
|
|
h5writeatt(tmpFileName,['/' tmpTopGroupName '/' tmpFileList(ij,:).name{:}],'matlabVariablesThatAreCells',tmpCells);
|
|
|
|
end
|
|
clearvars tmpCells
|
|
|
|
|
|
end
|
|
disp('*************************************************')
|
|
disp('* Voila: HDF file(s) written *')
|
|
disp('*************************************************')
|