initial commit

This commit is contained in:
2026-08-07 15:56:42 +09:00
commit 91ad25aca9
1012 changed files with 159314 additions and 0 deletions
+130
View File
@@ -0,0 +1,130 @@
% 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