mirror of
https://github.com/c-sooyoung/fold_slice.git
synced 2026-09-17 19:39:08 +09:00
131 lines
5.7 KiB
Matlab
131 lines
5.7 KiB
Matlab
% read_omny_angles( OMNY_angles_file, scannums, tomo_id )
|
||
% OMNY_angles_file - File with Scan number, angle target, angle readout
|
||
% scannums - Array of scan numbers
|
||
% tomo_id - integer or list of integers, only if the scannums is empty
|
||
%
|
||
% out - Contains fields with scan, target_angle, readout_angle
|
||
% errorflag - = 1 if at least one scan was not found
|
||
|
||
%*-----------------------------------------------------------------------*
|
||
%| |
|
||
%| Except where otherwise noted, this work is licensed under a |
|
||
%| Creative Commons Attribution-NonCommercial-ShareAlike 4.0 |
|
||
%| International (CC BY-NC-SA 4.0) license. |
|
||
%| |
|
||
%| Copyright (c) 2017 by Paul Scherrer Institute (http://www.psi.ch) |
|
||
%| |
|
||
%| Author: CXS group, PSI |
|
||
%*-----------------------------------------------------------------------*
|
||
% You may use this code with the following provisions:
|
||
%
|
||
% If the code is fully or partially redistributed, or rewritten in another
|
||
% computing language this notice should be included in the redistribution.
|
||
%
|
||
% If this code, or subfunctions or parts of it, is used for research in a
|
||
% publication or if it is fully or partially rewritten for another
|
||
% computing language the authors and institution should be acknowledged
|
||
% in written form in the publication: “Data processing was carried out
|
||
% using the “cSAXS matlab package” developed by the CXS group,
|
||
% Paul Scherrer Institut, Switzerland.”
|
||
% Variations on the latter text can be incorporated upon discussion with
|
||
% the CXS group if needed to more specifically reflect the use of the package
|
||
% for the published work.
|
||
%
|
||
% A publication that focuses on describing features, or parameters, that
|
||
% are already existing in the code should be first discussed with the
|
||
% authors.
|
||
%
|
||
% This code and subroutines are part of a continuous development, they
|
||
% are provided “as they are” without guarantees or liability on part
|
||
% of PSI or the authors. It is the user responsibility to ensure its
|
||
% proper use and the correctness of the results.
|
||
|
||
function [ out errorflag ] = read_omny_angles( OMNY_angles_file, scannums, tomo_id )
|
||
|
||
if ~exist(OMNY_angles_file, 'file')
|
||
error('Missing OMNY file: %s', OMNY_angles_file)
|
||
end
|
||
|
||
if ~exist('tomo_id')
|
||
tomo_id = [];
|
||
end
|
||
|
||
if (~isempty(scannums))&&(~isempty(tomo_id))
|
||
error('You have provided both scannums and tomo_id, please provide just either scannums OR tomo_id. One of them should be empty ( =[] ).')
|
||
end
|
||
if (isempty(scannums))&&(isempty(tomo_id))
|
||
error('You have not provided scannums or tomo_id, please provide either scannums OR tomo_id. One of them should be empty ( =[] ).')
|
||
end
|
||
fid = fopen(OMNY_angles_file);
|
||
|
||
% check omny file type
|
||
ln = fgetl(fid);
|
||
switch numel(strsplit(ln, ' '))
|
||
case {3,6}
|
||
outmat = textscan(fid,'%f %f %f %f %f %s');
|
||
fclose(fid);
|
||
out = [];
|
||
errorflag = 0;
|
||
counter = 1;
|
||
|
||
for ii = 1:numel(scannums)
|
||
ind = find(outmat{1}==scannums(ii),1,'last');
|
||
if isempty(ind)
|
||
fprintf('Did not find Scan %d in %s\n',scannums(ii),OMNY_angles_file);
|
||
errorflag = 1;
|
||
else
|
||
out.scan(counter) = outmat{1}(ind);
|
||
out.target_angle(counter) = outmat{2}(ind);
|
||
out.readout_angle(counter) = outmat{3}(ind);
|
||
out.subtomo_num(counter) = outmat{4}(ind);
|
||
out.detpos_num(counter) = outmat{5}(ind);
|
||
out.sample_name(counter) = outmat{6}(ind);
|
||
counter = counter+1;
|
||
end
|
||
end
|
||
case 7
|
||
outmat = textscan(fid,'%f %f %f %f %f %f %s');
|
||
fclose(fid);
|
||
out = [];
|
||
errorflag = 0;
|
||
counter = 1;
|
||
if ~isempty(scannums)
|
||
for ii = 1:numel(scannums)
|
||
ind = find(outmat{1}==scannums(ii),1,'last');
|
||
if isempty(ind)
|
||
fprintf('Did not find Scan %d in %s\n',scannums(ii),OMNY_angles_file);
|
||
errorflag = 1;
|
||
else
|
||
out.scan(counter) = outmat{1}(ind);
|
||
out.target_angle(counter) = outmat{2}(ind);
|
||
out.readout_angle(counter) = outmat{3}(ind);
|
||
out.tomo_id(counter) = outmat{4}(ind);
|
||
out.subtomo_num(counter) = outmat{5}(ind);
|
||
out.detpos_num(counter) = outmat{6}(ind);
|
||
out.sample_name(counter) = outmat{7}(ind);
|
||
counter = counter+1;
|
||
end
|
||
end
|
||
elseif ~isempty(tomo_id)
|
||
ind = find(ismember(outmat{4},tomo_id));
|
||
if isempty(ind)
|
||
fprintf(['Did not find tomo_id ',repmat('%i ',1,length(tomo_id)),' in %s\n'],tomo_id,OMNY_angles_file);
|
||
errorflag = 1;
|
||
end
|
||
out.scan = outmat{1}(ind);
|
||
out.target_angle = outmat{2}(ind);
|
||
out.readout_angle = outmat{3}(ind);
|
||
out.tomo_id = outmat{4}(ind);
|
||
out.subtomo_num = outmat{5}(ind);
|
||
out.detpos_num = outmat{6}(ind);
|
||
out.sample_name = outmat{7}(ind);
|
||
end
|
||
otherwise
|
||
error('Unknown OMNY file format.')
|
||
end
|
||
|
||
|
||
return
|
||
end
|
||
|