Add h5 files and correct h5scan script
This commit is contained in:
@@ -1,102 +1,61 @@
|
||||
function [cntrs,tp] = h5scan(pth,smp,ds,sn,varargin)
|
||||
% function [cntrs,tp] = h5scan(pth,smp,ds,sn,varargin)
|
||||
function [cntrs,tp] = h5scan(ds,sn)
|
||||
if ~isstr(ds), ds = sprintf('%.4d',ds); end;
|
||||
|
||||
i = cellfun(@(x) isa(x,'detector'),varargin);
|
||||
if any(i), det = varargin{i}; varargin = varargin(~i); else, det = []; end;
|
||||
if ~isstr(ds), ds = sprintf('%.4d',ds); end;
|
||||
f = sprintf('%s.h5',ds);
|
||||
h = h5info(f,sprintf('/%d.1/measurement',sn));
|
||||
fid = H5F.open(f);
|
||||
for i = 1:length(h.Links)
|
||||
nm = h.Links(i).Name;
|
||||
try
|
||||
id = H5D.open(fid,h.Links(i).Value{1});
|
||||
cntrs.(nm) = H5D.read(id);
|
||||
H5D.close(id);
|
||||
if ~isempty(det) & strcmp(nm,det.name), cntrs.(nm) = integrate(det,double(cntrs.(nm))); end;
|
||||
end
|
||||
[~,tp.(nm)] = fileparts(h.Links(i).Value{1});
|
||||
end
|
||||
try
|
||||
h = h5info(f,sprintf('/%d.2/measurement',sn));
|
||||
catch
|
||||
h = [];
|
||||
end
|
||||
if ~isempty(h)
|
||||
for i = 1:length(h.Links)
|
||||
nm = h.Links(i).Name;
|
||||
try
|
||||
id = H5D.open(fid,h.Links(i).Value{1});
|
||||
cntrs.part2.(nm) = H5D.read(id);
|
||||
H5D.close(id);
|
||||
end
|
||||
[~,tp.part2.(nm)] = fileparts(h.Links(i).Value{1});
|
||||
end
|
||||
end
|
||||
|
||||
f = sprintf('%s/%s/%s_%s/%s_%s.h5',pth,smp,smp,ds,smp,ds);
|
||||
h = h5info(f,sprintf('/%d.1/measurement',sn));
|
||||
fid = H5F.open(f);
|
||||
for i = 1:length(h.Links),
|
||||
nm = h.Links(i).Name;
|
||||
try,
|
||||
id = H5D.open(fid,h.Links(i).Value{1});
|
||||
cntrs.(nm) = H5D.read(id);
|
||||
H5D.close(id);
|
||||
if ~isempty(det) & strcmp(nm,det.name), cntrs.(nm) = integrate(det,double(cntrs.(nm))); end;
|
||||
catch,
|
||||
warning('solving problem with %s\n',nm);
|
||||
cntrs.(nm) = vrtlds(sprintf('%s/%s/%s_%s/scan%.4d/',pth,smp,smp,ds,sn),nm,det);
|
||||
end;
|
||||
[~,tp.(nm)] = fileparts(h.Links(i).Value{1});
|
||||
end;
|
||||
try,
|
||||
h = h5info(f,sprintf('/%d.2/measurement',sn));
|
||||
catch,
|
||||
h = [];
|
||||
end;
|
||||
if ~isempty(h),
|
||||
for i = 1:length(h.Links),
|
||||
nm = h.Links(i).Name;
|
||||
try,
|
||||
id = H5D.open(fid,h.Links(i).Value{1});
|
||||
cntrs.part2.(nm) = H5D.read(id);
|
||||
H5D.close(id);
|
||||
catch,
|
||||
warning('solving problem with %s\n',nm);
|
||||
cntrs.part2.(nm) = vrtlds(sprintf('%s/%s/%s_%s/scan%.4d/',pth,smp,smp,ds,sn),nm,det);
|
||||
end;
|
||||
[~,tp.part2.(nm)] = fileparts(h.Links(i).Value{1});
|
||||
end;
|
||||
end;
|
||||
if length(varargin),
|
||||
fn = sprintf('/%d.1/instrument/positioners/',sn);
|
||||
h = h5info(f,fn);
|
||||
[~,k,m] = intersect({h.Datasets.Name},varargin,'stable');
|
||||
h.Datasets = h.Datasets(k);
|
||||
for i = 1:length(h.Datasets),
|
||||
id = H5D.open(fid,[fn h.Datasets(i).Name]);
|
||||
cntrs.(h.Datasets(i).Name) = H5D.read(id);
|
||||
H5D.close(id);
|
||||
end;
|
||||
end;
|
||||
H5F.close(fid);
|
||||
|
||||
H5F.close(fid);
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
function A = vrtlds(f,nm,det)
|
||||
n = 0; A = [];
|
||||
fn = sprintf('%s/%s_%.4d.h5',f,nm,n);
|
||||
|
||||
function A = vrtlds(f,nm,det)
|
||||
%try,
|
||||
n = 0; A = [];
|
||||
fn = sprintf('%s/%s_%.4d.h5',f,nm,n);
|
||||
while exist(fn) == 2,
|
||||
fid = H5F.open(fn); n = n+1;
|
||||
id = H5D.open(fid,sprintf('/entry_0000/ESRF-ID31/%s/data',nm));
|
||||
if 2 < nargin & strcmp(nm,'p3') & ~isempty(det),
|
||||
fprintf('integrating %s\n',fn);
|
||||
if isempty(A),
|
||||
A = integrate(det,double(H5D.read(id)),1);
|
||||
else,
|
||||
tmp = integrate(det,double(H5D.read(id)),1); A.y = cat(2,A.y,tmp.y); A.y0 = cat(2,A.y0,tmp.y0);
|
||||
end;
|
||||
else,
|
||||
fprintf('loading %s\n',fn);
|
||||
A = cat(3,A,H5D.read(id));
|
||||
end;
|
||||
H5D.close(id); H5F.close(fid);
|
||||
fn = sprintf('%s/%s_%.4d.h5',f,nm,n);
|
||||
end;
|
||||
%catch,
|
||||
% A = [];
|
||||
%end;
|
||||
|
||||
% fid = H5F.open...
|
||||
% id = H5D.open...
|
||||
% sid = H5D.get_space(id);
|
||||
% [ndims,h5_dims]=H5S.get_simple_extent_dims(sid)
|
||||
|
||||
% Read a 2x3 hyperslab of data from a dataset, starting in the 4th row and 5th column of the example dataset.
|
||||
% Create a property list identifier, then open the HDF5 file and the dataset /g1/g1.1/dset1.1.1.
|
||||
|
||||
% fid = H5F.open('example.h5');
|
||||
% id = H5D.open(fid,'/g1/g1.1/dset1.1.1');
|
||||
|
||||
% dims = ([500 1679 1475];
|
||||
% msid = H5S.create_simple(3,dims,[]);
|
||||
% sid = H5D.get_space(id);
|
||||
% offset = [n*500 0 0];
|
||||
% block = dims; % d1: 500 or min(d1tot-n*500,500)
|
||||
% H5S.select_hyperslab(sid,'H5S_SELECT_SET',offset,[],[],block);
|
||||
% data = H5D.read(id,'H5ML_DEFAULT',msid,sid,'H5P_DEFAULT');
|
||||
% H5D.close(id);
|
||||
% H5F.close(fid);
|
||||
while exist(fn) == 2
|
||||
fid = H5F.open(fn); n = n+1;
|
||||
id = H5D.open(fid,sprintf('/entry_0000/ESRF-ID31/%s/data',nm));
|
||||
if 2 < nargin & strcmp(nm,'p3') & ~isempty(det)
|
||||
fprintf('integrating %s\n',fn);
|
||||
if isempty(A)
|
||||
A = integrate(det,double(H5D.read(id)),1);
|
||||
else
|
||||
tmp = integrate(det,double(H5D.read(id)),1); A.y = cat(2,A.y,tmp.y); A.y0 = cat(2,A.y0,tmp.y0);
|
||||
end
|
||||
else
|
||||
fprintf('loading %s\n',fn);
|
||||
A = cat(3,A,H5D.read(id));
|
||||
end
|
||||
H5D.close(id); H5F.close(fid);
|
||||
fn = sprintf('%s/%s_%.4d.h5',f,nm,n);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user