Skip to content
Snippets Groups Projects
Commit 749b76c6 authored by Nicola Vigano's avatar Nicola Vigano
Browse files

parameters: simplified build_list and build_structure


build_list is now less error-prone

Signed-off-by: default avatarNicola Vigano <nicola.vigano@esrf.fr>
parent cc0a450b
No related branches found
No related tags found
No related merge requests found
...@@ -44,168 +44,119 @@ function list = build_list_v2() ...@@ -44,168 +44,119 @@ function list = build_list_v2()
% index__strategy__m__beg % index__strategy__m__beg
% index__strategy__m__end % index__strategy__m__end
list = []; list = [];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Version number of parameters file % Version number of parameters file
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.version{1,1} = 'number'; list.version{1,2} = 'Version number of this parameters structure'; list.version(1, :) = {'number', ...
list.version{1,3} = 'double'; % scalar 'Version number of this parameters structure', 'double', 0};
list.version{1,4} = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Acquisition parameters % Acquisition parameters
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.acq = []; list.acq = cell(0, 4);
list.acq{end+1,1} = 'collection_dir'; list.acq{end,2} = 'Collection directory'; list.acq(end+1, :) = {'collection_dir', ...
list.acq{end,3} = 'char'; 'Collection directory', 'char', 1};
list.acq{end,4} = 1; list.acq(end+1, :) = {'name', ...
list.acq{end+1,1} = 'name'; list.acq{end,2} = 'Name of the dataset'; 'Name of the dataset', 'char', 1};
list.acq{end,3} = 'char'; list.acq(end+1, :) = {'dir', ...
list.acq{end,4} = 1; 'Directory in which to analyse the data', 'char', 1};
list.acq{end+1,1} = 'dir'; list.acq{end,2} = 'Directory in which to analyse the data'; list.acq(end+1, :) = {'date', ...
list.acq{end,3} = 'char'; 'Date of acquisition', 'char', 0};
list.acq{end,4} = 1; list.acq(end+1, :) = {'xdet', ...
list.acq{end+1,1} = 'date'; list.acq{end,2} = 'Date of acquisition'; 'Detector ROI size X or U (raw image size in pixels)', 'double', 1};
list.acq{end,3} = 'char'; list.acq(end+1, :) = {'ydet', ...
list.acq{end,4} = 0; 'Detector ROI size Y or V (raw image size in pixels)', 'double', 1};
list.acq{end+1,1} = 'xdet'; list.acq{end,2} = 'Detector ROI size X or U (raw image size in pixels)'; list.acq(end+1, :) = {'nproj', ...
list.acq{end,3} = 'double'; % scalar 'Number of images in *180 DEGREES* of scan', 'double', 1};
list.acq{end,4} = 1; list.acq(end+1, :) = {'refon', ...
list.acq{end+1,1} = 'ydet'; list.acq{end,2} = 'Detector ROI size Y or V (raw image size in pixels)'; 'References after how many images', 'double', 2};
list.acq{end,3} = 'double'; % scalar list.acq(end+1, :) = {'nref', ...
list.acq{end,4} = 1; 'How many reference images in a group', 'double', 2};
list.acq{end+1,1} = 'nproj'; list.acq{end,2} = 'Number of images in *180 DEGREES* of scan'; list.acq(end+1, :) = {'ndark', ...
list.acq{end,3} = 'double'; % scalar 'How many dark images taken', 'double', 2};
list.acq{end,4} = 1; list.acq(end+1, :) = {'pixelsize', ...
list.acq{end+1,1} = 'refon'; list.acq{end,2} = 'References after how many images'; 'Detector pixelsize (mm/pixel)', 'double', 1};
list.acq{end,3} = 'double'; % scalar list.acq(end+1, :) = {'count_time', ...
list.acq{end,4} = 2; 'Image integration time (s)', 'double', 1};
list.acq{end+1,1} = 'nref'; list.acq{end,2} = 'How many reference images in a group'; list.acq(end+1, :) = {'energy', ...
list.acq{end,3} = 'double'; % scalar 'Beam energy (keV)', 'double', 1};
list.acq{end,4} = 2; list.acq(end+1, :) = {'dist', ...
list.acq{end+1,1} = 'ndark'; list.acq{end,2} = 'How many dark images taken'; 'Sample-detector distance (mm) [computed]', 'double', 1};
list.acq{end,3} = 'double'; % scalar list.acq(end+1, :) = {'sensortype', ...
list.acq{end,4} = 2; 'Camera type (''frelon''/''kodak4mv1'')', 'char', 1};
list.acq{end+1,1} = 'pixelsize'; list.acq{end,2} = 'Detector pixelsize (mm/pixel)'; list.acq(end+1, :) = {'type', ...
list.acq{end,3} = 'double'; % scalar 'DCT scan type (''360degree'',''180degree'', etc)', 'char', 1};
list.acq{end,4} = 1; list.acq(end+1, :) = {'interlaced_turns', ...
list.acq{end+1,1} = 'count_time'; list.acq{end,2} = 'Image integration time (s)'; 'Interlaced scan? 0 for normal scan, 1 for one extra turn, etc', 'double', 1};
list.acq{end,3} = 'double'; % scalar list.acq(end+1, :) = {'mono_tune', ...
list.acq{end,4} = 1; 'Monochromator was tuned after N reference groups, or 0 for not tuned', 'double', 1};
list.acq{end+1,1} = 'energy'; list.acq{end,2} = 'Beam energy (keV)'; list.acq(end+1, :) = {'rotation_axis', ...
list.acq{end,3} = 'double'; % scalar 'Rotation axis orientation (''vertical''/''horizontal'')', 'char', 1};
list.acq{end,4} = 1; list.acq(end+1, :) = {'distortion', ...
list.acq{end+1,1} = 'dist'; list.acq{end,2} = 'Sample-detector distance (mm) [computed]'; 'Distortion correction file with path (or ''none'')', 'char', 1};
list.acq{end,3} = 'double'; % scalar list.acq(end+1, :) = {'beamchroma', ...
list.acq{end,4} = 1; 'Beam chromaticity (''mono''/''poly'')', 'char', 2};
list.acq{end+1,1} = 'sensortype'; list.acq{end,2} = 'Camera type (''frelon''/''kodak4mv1'')'; list.acq(end+1, :) = {'no_direct_beam', ...
list.acq{end,3} = 'char'; 'Special scan with no direct beam (taper frelon, offset detector)?', 'logical', 1};
list.acq{end,4} = 1; list.acq(end+1, :) = {'rotation_direction', ...
list.acq{end+1,1} = 'type'; list.acq{end,2} = 'DCT scan type (''360degree'',''180degree'', etc)'; 'Horizontal axis scan - rotate images (''clockwise''/''counterclockwise'')', 'char', 2};
list.acq{end,3} = 'char'; list.acq(end+1, :) = {'detector_definition', ...
list.acq{end,4} = 1; 'Definition of the detector type (''inline''/''vertical'')', 'char', 1};
list.acq{end+1,1} = 'interlaced_turns'; list.acq{end,2} = 'Interlaced scan? 0 for normal scan, 1 for one extra turn, etc'; list.acq(end+1, :) = {'collection_dir_old', ...
list.acq{end,3} = 'double'; % scalar '[Computed] Old collection directory', 'char', 0};
list.acq{end,4} = 1; list.acq(end+1, :) = {'rotu', ...
list.acq{end+1,1} = 'mono_tune'; list.acq{end,2} = 'Monochromator was tuned after N reference groups, or 0 for not tuned'; 'U coordinate of rotation axis projection in image [computed] ??? equals to rotx ???', 'double', 0};
list.acq{end,3} = 'double'; % scalar list.acq(end+1, :) = {'rotx', ...
list.acq{end,4} = 1; 'V coordinate of rotation axis projection in image [computed] ??? equals to rotu ???', 'double', 0};
list.acq{end+1,1} = 'rotation_axis'; list.acq{end,2} = 'Rotation axis orientation (''vertical''/''horizontal'')'; list.acq(end+1, :) = {'bb', ...
list.acq{end,3} = 'char'; 'Sample bbox symm. around rot. axis [umin vmin usize vsize]}; reconstructed sample volume has size [bb(3) bb(3) bb(4)]', 'double', 0};
list.acq{end,4} = 1; list.acq(end+1, :) = {'bbdir', ...
list.acq{end+1,1} = 'distortion'; list.acq{end,2} = 'Distortion correction file with path (or ''none'')'; 'Direct beam bounding box [umin vmin usize vsize]', 'double', 0};
list.acq{end,3} = 'char'; list.acq(end+1, :) = {'nof_phases', ...
list.acq{end,4} = 1; 'Number of phases in sample to be analysed', 'double', 1};
list.acq{end+1,1} = 'beamchroma'; list.acq{end,2} = 'Beam chromaticity (''mono''/''poly'')'; list.acq(end+1, :) = {'true_detsizeu', ...
list.acq{end,3} = 'char'; 'True detector X or U size before cropping (pixels)', 'double', 2};
list.acq{end,4} = 2; list.acq(end+1, :) = {'true_detsizev', ...
list.acq{end+1,1} = 'no_direct_beam'; list.acq{end,2} = 'Special scan with no direct beam (taper frelon, offset detector)?'; 'True detector Y or V size before cropping (pixels)', 'double', 2};
list.acq{end,3} = 'logical'; list.acq(end+1, :) = {'detroi_u_off', ...
list.acq{end,4} = 1; 'X or U offset of cropped detector ROI (the corner pixel)', 'double', 2};
list.acq{end+1,1} = 'rotation_direction'; list.acq{end,2} = 'Horizontal axis scan - rotate images (''clockwise''/''counterclockwise'')'; list.acq(end+1, :) = {'detroi_v_off', ...
list.acq{end,3} = 'char'; 'Y or V offset of cropped detector ROI (the corner pixel)', 'double', 2};
list.acq{end,4} = 2; list.acq(end+1, :) = {'pair_tablename', ...
list.acq{end+1,1} = 'detector_definition'; list.acq{end,2} = 'Definition of the detector type (''inline''/''vertical'')'; 'Table name for spot pairs', 'char', 0};
list.acq{end,3} = 'char'; list.acq(end+1, :) = {'calib_tablename', ...
list.acq{end,4} = 1; '[not used] Table name for calibration of spot pairs matching', 'char', 0};
list.acq{end+1,1} = 'collection_dir_old'; list.acq{end,2} = '[Computed] Old collection directory'; list.acq(end+1, :) = {'flip_images', ...
list.acq{end,3} = 'char'; 'Do you want to flip the images left-right for some reason?', 'logical', 1};
list.acq{end,4} = 0; list.acq(end+1, :) = {'maxradius', ...
list.acq{end+1,1} = 'rotu'; list.acq{end,2} = 'U coordinate of rotation axis projection in image [computed] ??? equals to rotx ???'; '[Computed] Maximum active radius of the detector, for example in case of vignetting', 'double', 0};
list.acq{end,3} = 'double'; % scalar list.acq(end+1, :) = {'online', ...
list.acq{end,4} = 0; 'Is the analysis online?', 'logical', 1};
list.acq{end+1,1} = 'rotx'; list.acq{end,2} = 'V coordinate of rotation axis projection in image [computed] ??? equals to rotu ???';
list.acq{end,3} = 'double'; % scalar
list.acq{end,4} = 0;
list.acq{end+1,1} = 'bb'; list.acq{end,2} = 'Sample bbox symm. around rot. axis [umin vmin usize vsize]; reconstructed sample volume has size [bb(3) bb(3) bb(4)]';
list.acq{end,3} = 'double'; % scalar
list.acq{end,4} = 0;
list.acq{end+1,1} = 'bbdir'; list.acq{end,2} = 'Direct beam bounding box [umin vmin usize vsize]';
list.acq{end,3} = 'double'; % scalar
list.acq{end,4} = 0;
list.acq{end+1,1} = 'nof_phases'; list.acq{end,2} = 'Number of phases in sample to be analysed';
list.acq{end,3} = 'double'; % scalar
list.acq{end,4} = 1;
list.acq{end+1,1} = 'true_detsizeu'; list.acq{end,2} = 'True detector X or U size before cropping (pixels)';
list.acq{end,3} = 'double'; % scalar
list.acq{end,4} = 2;
list.acq{end+1,1} = 'true_detsizev'; list.acq{end,2} = 'True detector Y or V size before cropping (pixels)';
list.acq{end,3} = 'double'; % scalar
list.acq{end,4} = 2;
list.acq{end+1,1} = 'detroi_u_off'; list.acq{end,2} = 'X or U offset of cropped detector ROI (the corner pixel)';
list.acq{end,3} = 'double'; % scalar
list.acq{end,4} = 2;
list.acq{end+1,1} = 'detroi_v_off'; list.acq{end,2} = 'Y or V offset of cropped detector ROI (the corner pixel)';
list.acq{end,3} = 'double'; % scalar
list.acq{end,4} = 2;
list.acq{end+1,1} = 'pair_tablename'; list.acq{end,2} = 'Table name for spot pairs';
list.acq{end,3} = 'char';
list.acq{end,4} = 0;
list.acq{end+1,1} = 'calib_tablename'; list.acq{end,2} = '[not used] Table name for calibration of spot pairs matching';
list.acq{end,3} = 'char';
list.acq{end,4} = 0;
list.acq{end+1,1} = 'flip_images'; list.acq{end,2} = 'Do you want to flip the images left-right for some reason?';
list.acq{end,3} = 'logical';
list.acq{end,4} = 1;
list.acq{end+1,1} = 'maxradius'; list.acq{end,2} = '[Computed] Maximum active radius of the detector, for example in case of vignetting';
list.acq{end,3} = 'double'; % scalar
list.acq{end,4} = 0;
list.acq{end+1,1} = 'online'; list.acq{end,2} = 'Is the analysis online?';
list.acq{end,3} = 'logical';
list.acq{end,4} = 1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% xop for phase 1; if necessary the same for other phases % xop for phase 1}; if necessary the same for other phases
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.xop = []; list.xop = cell(0, 4);
list.xop{end+1,1} = 'twotheta'; list.xop{end,2} = 'Twotheta angle (2*Bragg angle)'; list.xop(end+1, :) = {'twotheta', ...
list.xop{end,3} = 'single'; 'Twotheta angle (2*Bragg angle)', 'single', 0};
list.xop{end,4} = 0; list.xop(end+1, :) = {'dspacing', ...
list.xop{end+1,1} = 'dspacing'; list.xop{end,2} = 'd-spacing'; 'd-spacing', 'single', 0};
list.xop{end,3} = 'single'; list.xop(end+1, :) = {'int', ...
list.xop{end,4} = 0; 'Intensity', 'single', 0};
list.xop{end+1,1} = 'int'; list.xop{end,2} = 'Intensity'; list.xop(end+1, :) = {'formfactor', ...
list.xop{end,3} = 'single'; 'Form factor', 'single', 0};
list.xop{end,4} = 0; list.xop(end+1, :) = {'mult', ...
list.xop{end+1,1} = 'formfactor'; list.xop{end,2} = 'Form factor'; 'Multiplicity', 'int8', 0};
list.xop{end,3} = 'single'; list.xop(end+1, :) = {'hkl', ...
list.xop{end,4} = 0; 'hkl Miller indexes', 'int8', 0};
list.xop{end+1,1} = 'mult'; list.xop{end,2} = 'Multiplicity'; list.xop(end+1, :) = {'filename', ...
list.xop{end,3} = 'int8'; 'XOP/Diamond crystallographic file', 'char', 0};
list.xop{end,4} = 0; list.xop(end+1, :) = {'xop_dir', ...
list.xop{end+1,1} = 'hkl'; list.xop{end,2} = 'hkl Miller indexes'; 'Directory for the XOP input file', 'char', 0};
list.xop{end,3} = 'int8';
list.xop{end,4} = 0;
list.xop{end+1,1} = 'filename'; list.xop{end,2} = 'XOP/Diamond crystallographic file';
list.xop{end,3} = 'char';
list.xop{end,4} = 0;
list.xop{end+1,1} = 'xop_dir'; list.xop{end,2} = 'Directory for the XOP input file';
list.xop{end,3} = 'char';
list.xop{end,4} = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
...@@ -216,710 +167,512 @@ list.xop{end+1,1} = 'xop_dir'; list.xop{end,2} = 'Direct ...@@ -216,710 +167,512 @@ list.xop{end+1,1} = 'xop_dir'; list.xop{end,2} = 'Direct
% In case of one phase only, both 'list.cryst(1)' and 'list.cryst' can be % In case of one phase only, both 'list.cryst(1)' and 'list.cryst' can be
% used in Matlab to refer to that phase. % used in Matlab to refer to that phase.
list.cryst = []; list.cryst = cell(0, 4);
list.cryst{end+1,1} = 'name'; list.cryst{end,2} = 'Name of phase to display (e.g. Al, Austenite, Beta_Titanium)'; list.cryst(end+1, :) = {'name', ...
list.cryst{end,3} = 'char'; 'Name of phase to display (e.g. Al, Austenite, Beta_Titanium)', 'char', 1};
list.cryst{end,4} = 1; list.cryst(end+1, :) = {'composition', ...
list.cryst{end+1,1} = 'composition'; list.cryst{end,2} = 'Chemical composition of phase (e.g BaTiO3)'; 'Chemical composition of phase (e.g BaTiO3)', 'char', 1};
list.cryst{end,3} = 'char'; % to distinguish materials from different sources or processing
list.cryst{end,4} = 1; list.cryst(end+1, :) = {'material', ...
list.cryst{end+1,1} = 'material'; list.cryst{end,2} = 'Distinctive reference name of sample material (e.g AlLi_July2010_recrystallized)'; 'Distinctive reference name of sample material (e.g AlLi_July2010_recrystallized)', 'char', 1};
list.cryst{end,3} = 'char'; % to distinguish materials from different sources or processing list.cryst(end+1, :) = {'latticepar', ...
list.cryst{end,4} = 1; 'Lattice parameters [a b c alpha beta gamma] (angstrom, deg)', 'double', 2};
list.cryst{end+1,1} = 'latticepar'; list.cryst{end,2} = 'Lattice parameters [a b c alpha beta gamma] (angstrom, deg)'; list.cryst(end+1, :) = {'spacegroup', ...
list.cryst{end,3} = 'double'; % size (1,6) 'Crystallographic spacegroup', 'double', 2};
list.cryst{end,4} = 2; list.cryst(end+1, :) = {'hermann_mauguin', ...
list.cryst{end+1,1} = 'spacegroup'; list.cryst{end,2} = 'Crystallographic spacegroup'; '[Computed] Hermann Mauguin short symbol', 'char', 0};
list.cryst{end,3} = 'double'; % scalar % see wikipedia.org/wiki/Crystal_system
list.cryst{end,4} = 2; list.cryst(end+1, :) = {'crystal_system', ...
list.cryst{end+1,1} = 'hermann_mauguin'; list.cryst{end,2} = '[Computed] Hermann Mauguin short symbol'; '[Computed] Crystallographic crystal system', 'char', 0};
list.cryst{end,3} = 'char'; % to see difference from crystal system, see wikipedia.org/wiki/Crystal_system
list.cryst{end,4} = 0; list.cryst(end+1, :) = {'lattice_system', ...
list.cryst{end+1,1} = 'crystal_system'; list.cryst{end,2} = '[Computed] Crystallographic crystal system'; '[Computed] Crystallographic lattice system', 'char', 0};
list.cryst{end,3} = 'char'; % see wikipedia.org/wiki/Crystal_system list.cryst(end+1, :) = {'opsym', ...
list.cryst{end,4} = 0; '[Computed] Symmetry operators read from .dsv/.dat file (Diamond/XOP calculation)', 'cell', 0};
list.cryst{end+1,1} = 'lattice_system'; list.cryst{end,2} = '[Computed] Crystallographic lattice system'; list.cryst(end+1, :) = {'hkl', ...
list.cryst{end,3} = 'char'; % to see difference from crystal system, see wikipedia.org/wiki/Crystal_system '[Computed] List of {hkl} families list to be considered', 'double', 0};
list.cryst{end,4} = 0; list.cryst(end+1, :) = {'hklsp', ...
list.cryst{end+1,1} = 'opsym'; list.cryst{end,2} = '[Computed] Symmetry operators read from .dsv/.dat file (Diamond/XOP calculation)'; '[Computed] List of signed (specific) {hkl} families to be considered', 'double', 0};
list.cryst{end,3} = 'cell'; list.cryst(end+1, :) = {'theta', ...
list.cryst{end,4} = 0; '[Computed] Bragg angles theta corresponding to hkl and acq. energy', 'double', 0};
list.cryst{end+1,1} = 'hkl'; list.cryst{end,2} = '[Computed] List of {hkl} families list to be considered'; list.cryst(end+1, :) = {'thetasp', ...
list.cryst{end,3} = 'double'; % size (1,n) '[Computed] Bragg angles theta corresponding to hklsp and acq. energy', 'double', 0};
list.cryst{end,4} = 0; list.cryst(end+1, :) = {'dspacing', ...
list.cryst{end+1,1} = 'hklsp'; list.cryst{end,2} = '[Computed] List of signed (specific) {hkl} families to be considered'; '[Computed] D-spacings corresponding to hkl', 'double', 0};
list.cryst{end,3} = 'double'; % size (1,m) list.cryst(end+1, :) = {'dspacingsp', ...
list.cryst{end,4} = 0; '[Computed] D-spacings corresponding to hklsp', 'double', 0};
list.cryst{end+1,1} = 'theta'; list.cryst{end,2} = '[Computed] Bragg angles theta corresponding to hkl and acq. energy'; list.cryst(end+1, :) = {'thetatype', ...
list.cryst{end,3} = 'double'; % size (1,n) '[Computed] Scalar indices of the hkl families (and theta-s)', 'double', 0};
list.cryst{end,4} = 0; list.cryst(end+1, :) = {'thetatypesp', ...
list.cryst{end+1,1} = 'thetasp'; list.cryst{end,2} = '[Computed] Bragg angles theta corresponding to hklsp and acq. energy'; '[Computed] Scalar index of the given hkl family (one of thetatype)', 'double', 0};
list.cryst{end,3} = 'double'; % size (1,m) list.cryst(end+1, :) = {'int', ...
list.cryst{end,4} = 0; '[Computed] Intensity of reflection corresponding to hkl', 'double', 0};
list.cryst{end+1,1} = 'dspacing'; list.cryst{end,2} = '[Computed] D-spacings corresponding to hkl'; list.cryst(end+1, :) = {'intsp', ...
list.cryst{end,3} = 'double'; % size (1,n) '[Computed] Intensity of reflection corresponding to hklsp', 'double', 0};
list.cryst{end,4} = 0; list.cryst(end+1, :) = {'mult', ...
list.cryst{end+1,1} = 'dspacingsp'; list.cryst{end,2} = '[Computed] D-spacings corresponding to hklsp'; '[Computed] Multiplicity of reflections from the given hkl family', 'double', 0};
list.cryst{end,3} = 'double'; % size (1,m) list.cryst(end+1, :) = {'usedfam', ...
list.cryst{end,4} = 0; '[Computed] Used hkl family in matching', 'logical', 0};
list.cryst{end+1,1} = 'thetatype'; list.cryst{end,2} = '[Computed] Scalar indices of the hkl families (and theta-s)'; list.cryst(end+1, :) = {'symm', ...
list.cryst{end,3} = 'double'; % size (1,n) '[Computed] Symmetry operators for the given crystal system', 'struct', 0};
list.cryst{end,4} = 0;
list.cryst{end+1,1} = 'thetatypesp'; list.cryst{end,2} = '[Computed] Scalar index of the given hkl family (one of thetatype)'; list.cryst__symm = cell(0, 4);
list.cryst{end,3} = 'double'; % size (1,m) list.cryst__symm(end+1, :) = {'g3', ...
list.cryst{end,4} = 0; '[Computed] Set of symmetry operators (3x3)', 'double', 0};
list.cryst{end+1,1} = 'int'; list.cryst{end,2} = '[Computed] Intensity of reflection corresponding to hkl'; list.cryst__symm(end+1, :) = {'g', ...
list.cryst{end,3} = 'double'; % size (1,n) '[Computed] Set of symmetry operators (4x4)', 'double', 0};
list.cryst{end,4} = 0;
list.cryst{end+1,1} = 'intsp'; list.cryst{end,2} = '[Computed] Intensity of reflection corresponding to hklsp'; % list.cryst(end+1, :) = {'sg', '[Computed] Additional information about symmetry operators for the given crystal system', 'struct', 0};
list.cryst{end,3} = 'double'; % size (1,m)
list.cryst{end,4} = 0; % list.cryst__sg = cell(0, 4);
list.cryst{end+1,1} = 'mult'; list.cryst{end,2} = '[Computed] Multiplicity of reflections from the given hkl family'; % list.cryst__sg(end+1, :) = {'rot', '[Computed] Complete list of rotations given a crystal system', 'double', 0};
list.cryst{end,3} = 'double'; % size (1,n) % list.cryst__sg(end+1, :) = {'trans', '[Computed] Complete list of translations values given a crystal system', 'double', 0};
list.cryst{end,4} = 0;
list.cryst{end+1,1} = 'usedfam'; list.cryst{end,2} = '[Computed] Used hkl family in matching'; % list.cryst(end+1, :) = {'symm', '[Computed] Unique symmetry operators for the given crystal system', 'struct', 0};
list.cryst{end,3} = 'logical'; % size (1,n)
list.cryst{end,4} = 0; % list.cryst__symm = cell(0, 4);
list.cryst{end+1,1} = 'symm'; list.cryst{end,2} = '[Computed] Symmetry operators for the given crystal system'; % list.cryst__symm(end+1, :) = {'g3', '[Computed] Set of unitary rotation matrices corresponding to the indistinguishable lattice permutations', 'double', 0};
list.cryst{end,3} = 'struct'; % size (1,M) % list.cryst__symm(end+1, :) = {'perm', '[Computed] Set of indistinguishable lattice permutations given a crystal system', 'double', 0};
list.cryst{end,4} = 0;
list.cryst__symm = [];
list.cryst__symm{end+1,1} = 'g3'; list.cryst__symm{end,2} = '[Computed] Set of symmetry operators (3x3)';
list.cryst__symm{end,3} = 'double';
list.cryst__symm{end,4} = 0;
list.cryst__symm{end+1,1} = 'g'; list.cryst__symm{end,2} = '[Computed] Set of symmetry operators (4x4)';
list.cryst__symm{end,3} = 'double';
list.cryst__symm{end,4} = 0;
% list.cryst{end+1,1} = 'sg'; list.cryst{end,2} = '[Computed] Additional information about symmetry operators for the given crystal system';
% list.cryst{end,3} = 'struct'; % size (1,N)
% list.cryst{end,4} = 0;
% list.cryst__sg = [];
% list.cryst__sg{end+1,1} = 'rot'; list.cryst__sg{end,2} = '[Computed] Complete list of rotations given a crystal system';
% list.cryst__sg{end,3} = 'double'; % size (3,3)
% list.cryst__sg{end,4} = 0;
% list.cryst__sg{end+1,1} = 'trans'; list.cryst__sg{end,2} = '[Computed] Complete list of translations values given a crystal system';
% list.cryst__sg{end,3} = 'double'; % size (1,3)
% list.cryst__sg{end,4} = 0;
%
% list.cryst{end+1,1} = 'symm'; list.cryst{end,2} = '[Computed] Unique symmetry operators for the given crystal system';
% list.cryst{end,3} = 'struct'; % size (1,M)
% list.cryst{end,4} = 0;
% list.cryst__symm = [];
% list.cryst__symm{end+1,1} = 'g3'; list.cryst__symm{end,2} = '[Computed] Set of unitary rotation matrices corresponding to the indistinguishable lattice permutations';
% list.cryst__symm{end,3} = 'double'; % size (3,3)
% list.cryst__symm{end,4} = 0;
% list.cryst__symm{end+1,1} = 'perm'; list.cryst__symm{end,2} = '[Computed] Set of indistinguishable lattice permutations given a crystal system';
% list.cryst__symm{end,3} = 'double'; % size (3,3)
% list.cryst__symm{end,4} = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Parameters to describe the setup geometry % Parameters to describe the setup geometry
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% coordinates are given in the Lab reference % coordinates are given in the Lab reference
list.labgeo = []; list.labgeo = cell(0, 4);
list.labgeo{end+1,1} = 'beamdir'; list.labgeo{end,2} = 'Beam direction in LAB reference (unit row vector)'; list.labgeo(end+1, :) = {'beamdir', ...
list.labgeo{end,3} = 'double'; % size (1,3) 'Beam direction in LAB reference (unit row vector)', 'double', 1};
list.labgeo{end,4} = 1; list.labgeo(end+1, :) = {'rotdir', ...
list.labgeo{end+1,1} = 'rotdir'; list.labgeo{end,2} = 'Rotation axis direction in LAB (unit row vector); omega is right-handed rotation'; 'Rotation axis direction in LAB (unit row vector); omega is right-handed rotation', 'double', 1};
list.labgeo{end,3} = 'double'; % size (1,3) list.labgeo(end+1, :) = {'rotpos', ...
list.labgeo{end,4} = 1; 'Rotation axis position (arbitrary point on axis) in LAB', 'double', 1};
list.labgeo{end+1,1} = 'rotpos'; list.labgeo{end,2} = 'Rotation axis position (arbitrary point on axis) in LAB'; list.labgeo(end+1, :) = {'detrefpos', ...
list.labgeo{end,3} = 'double'; % size (1,3) 'Detector reference point (usually center) position in LAB', 'double', 1};
list.labgeo{end,4} = 1; list.labgeo(end+1, :) = {'detrefu', ...
list.labgeo{end+1,1} = 'detrefpos'; list.labgeo{end,2} = 'Detector reference point (usually center) position in LAB'; 'Detector reference point U coordinate in pixels', 'double', 1};
list.labgeo{end,3} = 'double'; % size (1,3) list.labgeo(end+1, :) = {'detrefv', ...
list.labgeo{end,4} = 1; 'Detector reference point V coordinate in pixels', 'double', 1};
list.labgeo{end+1,1} = 'detrefu'; list.labgeo{end,2} = 'Detector reference point U coordinate in pixels'; list.labgeo(end+1, :) = {'detdiru', ...
list.labgeo{end,3} = 'double'; % scalar 'Detector U direction in LAB (unit row vector)', 'double', 1};
list.labgeo{end,4} = 1; list.labgeo(end+1, :) = {'detdirv', ...
list.labgeo{end+1,1} = 'detrefv'; list.labgeo{end,2} = 'Detector reference point V coordinate in pixels'; 'Detector V direction in LAB (unit row vector)', 'double', 1};
list.labgeo{end,3} = 'double'; % scalar list.labgeo(end+1, :) = {'pixelsizeu', ...
list.labgeo{end,4} = 1; 'Detector pixel size in direction U (lab unit/pixel)', 'double', 1};
list.labgeo{end+1,1} = 'detdiru'; list.labgeo{end,2} = 'Detector U direction in LAB (unit row vector)'; list.labgeo(end+1, :) = {'pixelsizev', ...
list.labgeo{end,3} = 'double'; % size (1,3) 'Detector pixel size in direction V (lab unit/pixel)', 'double', 1};
list.labgeo{end,4} = 1; list.labgeo(end+1, :) = {'samenvtop', ...
list.labgeo{end+1,1} = 'detdirv'; list.labgeo{end,2} = 'Detector V direction in LAB (unit row vector)'; '[Computed] Distance from rotpos to top of sample envelope along rotdir (signed scalar in lab units)', 'double', 0};
list.labgeo{end,3} = 'double'; % size (1,3) list.labgeo(end+1, :) = {'samenvbot', ...
list.labgeo{end,4} = 1; '[Computed] Distance from rotpos to bottom of sample envelope along rotdir (signed scalar in lab units)', 'double', 0};
list.labgeo{end+1,1} = 'pixelsizeu'; list.labgeo{end,2} = 'Detector pixel size in direction U (lab unit/pixel)'; list.labgeo(end+1, :) = {'samenvrad', ...
list.labgeo{end,3} = 'double'; % scalar '[Computed] Radius of sample envelope (in lab units)', 'double', 0};
list.labgeo{end,4} = 1; list.labgeo(end+1, :) = {'detanglemin', ...
list.labgeo{end+1,1} = 'pixelsizev'; list.labgeo{end,2} = 'Detector pixel size in direction V (lab unit/pixel)'; '[Computed] Detector minimum 2Theta angle to consider', 'double', 0};
list.labgeo{end,3} = 'double'; % scalar list.labgeo(end+1, :) = {'detanglemax', ...
list.labgeo{end,4} = 1; '[Computed] Detector maximum 2Theta angle to consider', 'double', 0};
list.labgeo{end+1,1} = 'samenvtop'; list.labgeo{end,2} = '[Computed] Distance from rotpos to top of sample envelope along rotdir (signed scalar in lab units)'; list.labgeo(end+1, :) = {'labunit', ...
list.labgeo{end,3} = 'double'; % scalar 'LAB units (default is mm) [for records only]', 'char', 1};
list.labgeo{end,4} = 0; list.labgeo(end+1, :) = {'deflabX', ...
list.labgeo{end+1,1} = 'samenvbot'; list.labgeo{end,2} = '[Computed] Distance from rotpos to bottom of sample envelope along rotdir (signed scalar in lab units)'; 'Description how Lab X direction was chosen [for records only]', 'char', 1};
list.labgeo{end,3} = 'double'; % scalar list.labgeo(end+1, :) = {'deflabY', ...
list.labgeo{end,4} = 0; 'Description how Lab Y direction was chosen [for records only]', 'char', 1};
list.labgeo{end+1,1} = 'samenvrad'; list.labgeo{end,2} = '[Computed] Radius of sample envelope (in lab units)'; list.labgeo(end+1, :) = {'deflabZ', ...
list.labgeo{end,3} = 'double'; % scalar 'Description how Lab Z direction was chosen [for records only]', 'char', 1};
list.labgeo{end,4} = 0; list.labgeo(end+1, :) = {'detsizeu', ...
list.labgeo{end+1,1} = 'detanglemin'; list.labgeo{end,2} = '[Computed] Detector minimum 2Theta angle to consider'; 'Number of pixels along the u direction', 'double', 1};
list.labgeo{end,3} = 'double'; % scalar list.labgeo(end+1, :) = {'detsizev', ...
list.labgeo{end,4} = 0; 'Number of pixels along the v direction', 'double', 1};
list.labgeo{end+1,1} = 'detanglemax'; list.labgeo{end,2} = '[Computed] Detector maximum 2Theta angle to consider';
list.labgeo{end,3} = 'double'; % scalar
list.labgeo{end,4} = 0;
list.labgeo{end+1,1} = 'labunit'; list.labgeo{end,2} = 'LAB units (default is mm) [for records only]';
list.labgeo{end,3} = 'char';
list.labgeo{end,4} = 1;
list.labgeo{end+1,1} = 'deflabX'; list.labgeo{end,2} = 'Description how Lab X direction was chosen [for records only]';
list.labgeo{end,3} = 'char';
list.labgeo{end,4} = 1;
list.labgeo{end+1,1} = 'deflabY'; list.labgeo{end,2} = 'Description how Lab Y direction was chosen [for records only]';
list.labgeo{end,3} = 'char';
list.labgeo{end,4} = 1;
list.labgeo{end+1,1} = 'deflabZ'; list.labgeo{end,2} = 'Description how Lab Z direction was chosen [for records only]';
list.labgeo{end,3} = 'char';
list.labgeo{end,4} = 1;
list.labgeo{end+1,1} = 'detsizeu'; list.labgeo{end,2} = 'Number of pixels along the u direction';
list.labgeo{end,3} = 'double'; % scalar
list.labgeo{end,4} = 1;
list.labgeo{end+1,1} = 'detsizev'; list.labgeo{end,2} = 'Number of pixels along the v direction';
list.labgeo{end,3} = 'double'; % scalar
list.labgeo{end,4} = 1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Sample geometry parameters for matching and indexing % Sample geometry parameters for matching and indexing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.samgeo = []; list.samgeo = cell(0, 4);
list.samgeo{end+1,1} = 'orig'; list.samgeo{end,2} = 'Lab coordinates of the origin of Sample reference'; list.samgeo(end+1, :) = {'orig', ...
list.samgeo{end,3} = 'double'; % size (1,3) 'Lab coordinates of the origin of Sample reference', 'double', 0};
list.samgeo{end,4} = 0; list.samgeo(end+1, :) = {'dirx', ...
list.samgeo{end+1,1} = 'dirx'; list.samgeo{end,2} = 'Lab coordinates of Sample axis X (unit row vector)'; 'Lab coordinates of Sample axis X (unit row vector)', 'double', 0};
list.samgeo{end,3} = 'double'; % size (1,3) list.samgeo(end+1, :) = {'diry', ...
list.samgeo{end,4} = 0; 'Lab coordinates of Sample axis Y (unit row vector)', 'double', 0};
list.samgeo{end+1,1} = 'diry'; list.samgeo{end,2} = 'Lab coordinates of Sample axis Y (unit row vector)'; list.samgeo(end+1, :) = {'dirz', ...
list.samgeo{end,3} = 'double'; % size (1,3) 'Lab coordinates of Sample axis Z (unit row vector)', 'double', 0};
list.samgeo{end,4} = 0; list.samgeo(end+1, :) = {'voxsize', ...
list.samgeo{end+1,1} = 'dirz'; list.samgeo{end,2} = 'Lab coordinates of Sample axis Z (unit row vector)'; 'Voxel sizes of the Sample reference along X,Y,Z (lab unit/voxel); size(1,3)', 'double', 0};
list.samgeo{end,3} = 'double'; % size (1,3)
list.samgeo{end,4} = 0;
list.samgeo{end+1,1} = 'voxsize'; list.samgeo{end,2} = 'Voxel sizes of the Sample reference along X,Y,Z (lab unit/voxel); size(1,3)';
list.samgeo{end,3} = 'double'; % size (1,3)
list.samgeo{end,4} = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Reconstruction geometry parameters % Reconstruction geometry parameters
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.recgeo = []; list.recgeo = cell(0, 4);
list.recgeo{end+1,1} = 'orig'; list.recgeo{end,2} = 'Lab coordinates of the origin of Reconstruction reference'; list.recgeo(end+1, :) = {'orig', ...
list.recgeo{end,3} = 'double'; % size (1,3) 'Lab coordinates of the origin of Reconstruction reference', 'double', 0};
list.recgeo{end,4} = 0; list.recgeo(end+1, :) = {'dirx', ...
list.recgeo{end+1,1} = 'dirx'; list.recgeo{end,2} = 'Lab coordinates of Reconstruction axis X (unit row vector)'; 'Lab coordinates of Reconstruction axis X (unit row vector)', 'double', 0};
list.recgeo{end,3} = 'double'; % size (1,3) list.recgeo(end+1, :) = {'diry', ...
list.recgeo{end,4} = 0; 'Lab coordinates of Reconstruction axis Y (unit row vector)', 'double', 0};
list.recgeo{end+1,1} = 'diry'; list.recgeo{end,2} = 'Lab coordinates of Reconstruction axis Y (unit row vector)'; list.recgeo(end+1, :) = {'dirz', ...
list.recgeo{end,3} = 'double'; % size (1,3) 'Lab coordinates of Reconstruction axis Z (unit row vector)', 'double', 0};
list.recgeo{end,4} = 0; list.recgeo(end+1, :) = {'voxsize', ...
list.recgeo{end+1,1} = 'dirz'; list.recgeo{end,2} = 'Lab coordinates of Reconstruction axis Z (unit row vector)'; 'Voxel sizes of the Reconstruction reference along X,Y,Z (lab unit/voxel); size(1,3)', 'double', 0};
list.recgeo{end,3} = 'double'; % size (1,3)
list.recgeo{end,4} = 0;
list.recgeo{end+1,1} = 'voxsize'; list.recgeo{end,2} = 'Voxel sizes of the Reconstruction reference along X,Y,Z (lab unit/voxel); size(1,3)';
list.recgeo{end,3} = 'double'; % size (1,3)
list.recgeo{end,4} = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Preprocessing % Preprocessing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.prep = []; list.prep = cell(0, 4);
list.prep{end+1,1} = 'normalisation'; list.prep{end,2} = 'How to normalise images (''none''/''margin''/''fullbeam'')'; list.prep(end+1, :) = {'normalisation', ...
list.prep{end,3} = 'char'; 'How to normalise images (''none''/''margin''/''fullbeam'')', 'char', 2};
list.prep{end,4} = 2; list.prep(end+1, :) = {'absint', ...
list.prep{end+1,1} = 'absint'; list.prep{end,2} = 'Moving median interval in images for the direct beam (mod(total no. of projections, absint)=0)'; 'Moving median interval in images for the direct beam (mod(total no. of projections, absint)=0)', 'double', 1};
list.prep{end,3} = 'double'; % scalar list.prep(end+1, :) = {'absrange', ...
list.prep{end,4} = 1; 'Moving median range in images for the direct beam (=n*2*absint)', 'double', 1};
list.prep{end+1,1} = 'absrange'; list.prep{end,2} = 'Moving median range in images for the direct beam (=n*2*absint)'; list.prep(end+1, :) = {'fullint', ...
list.prep{end,3} = 'double'; % scalar 'Moving median interval in images for the diffracted image (mod(total no. of projections, fullint)=0)', 'double', 1};
list.prep{end,4} = 1; list.prep(end+1, :) = {'fullrange', ...
list.prep{end+1,1} = 'fullint'; list.prep{end,2} = 'Moving median interval in images for the diffracted image (mod(total no. of projections, fullint)=0)'; 'Moving median range in images for the diffracted image (=n*2*fullint)', 'double', 1};
list.prep{end,3} = 'double'; % scalar list.prep(end+1, :) = {'margin', ...
list.prep{end,4} = 1; 'Margin width for normalisation in direct beam (pixels)', 'double', 2};
list.prep{end+1,1} = 'fullrange'; list.prep{end,2} = 'Moving median range in images for the diffracted image (=n*2*fullint)'; list.prep(end+1, :) = {'intensity', ...
list.prep{end,3} = 'double'; % scalar 'Assumed direct beam intensity of normalisation', 'double', 2};
list.prep{end,4} = 1; list.prep(end+1, :) = {'filtsize', ...
list.prep{end+1,1} = 'margin'; list.prep{end,2} = 'Margin width for normalisation in direct beam (pixels)'; '2D median filter size for full images [pixels x pixels]', 'double', 2};
list.prep{end,3} = 'double'; % scalar list.prep(end+1, :) = {'drifts_pad', ...
list.prep{end,4} = 2; 'How to pad shifted images (''av'' or value)', 'char', 2};
list.prep{end+1,1} = 'intensity'; list.prep{end,2} = 'Assumed direct beam intensity of normalisation'; list.prep(end+1, :) = {'renumbered', ...
list.prep{end,3} = 'double'; % scalar '[Computed] ...for interlaced scans', 'logical', 0};
list.prep{end,4} = 2; list.prep(end+1, :) = {'bbox', ...
list.prep{end+1,1} = 'filtsize'; list.prep{end,2} = '2D median filter size for full images [pixels x pixels]'; '[Computed] Sample bounding box in the images', 'double', 0};
list.prep{end,3} = 'double'; % size (1,2) list.prep(end+1, :) = {'correct_drift', ...
list.prep{end,4} = 2; 'we will shift images at the end of preprocessing, no shifting before flatfielding... (''required''/''not_required'')', 'char', 2};
list.prep{end+1,1} = 'drifts_pad'; list.prep{end,2} = 'How to pad shifted images (''av'' or value)'; list.prep(end+1, :) = {'udrift', ...
list.prep{end,3} = 'char'; '[Computed] Values for shifting images in U direction to compensate sample drifts', 'double', 0};
list.prep{end,4} = 2; list.prep(end+1, :) = {'udriftabs', ...
list.prep{end+1,1} = 'renumbered'; list.prep{end,2} = '[Computed] ...for interlaced scans'; '[Computed] Values for shifting abs images in U direction to compensate sample drifts', 'double', 0};
list.prep{end,3} = 'logical'; list.prep(end+1, :) = {'vdrift', ...
list.prep{end,4} = 0; '[Computed] Values for shifting images in V direction to compensate sample drifts', 'double', 0};
list.prep{end+1,1} = 'bbox'; list.prep{end,2} = '[Computed] Sample bounding box in the images';
list.prep{end,3} = 'double'; % size (1,4) % list.prep(end+1, :) = {'correct_drift_iteration', '', 'char' 2};
list.prep{end,4} = 0; % list.prep(end+1, :) = {'prior_flatfield', 'Check if flatfielding is required', 'logical', 2};
list.prep{end+1,1} = 'correct_drift'; list.prep{end,2} = 'we will shift images at the end of preprocessing, no shifting before flatfielding... (''required''/''not_required'')';
list.prep{end,3} = 'char';
list.prep{end,4} = 2;
list.prep{end+1,1} = 'udrift'; list.prep{end,2} = '[Computed] Values for shifting images in U direction to compensate sample drifts';
list.prep{end,3} = 'double'; % row vector
list.prep{end,4} = 0;
list.prep{end+1,1} = 'udriftabs'; list.prep{end,2} = '[Computed] Values for shifting abs images in U direction to compensate sample drifts';
list.prep{end,3} = 'double'; % row vector
list.prep{end,4} = 0;
list.prep{end+1,1} = 'vdrift'; list.prep{end,2} = '[Computed] Values for shifting images in V direction to compensate sample drifts';
list.prep{end,3} = 'double'; % row vector
list.prep{end,4} = 0;
% list.prep{end+1,1} = 'correct_drift_iteration'; list.prep{end,2} = '';
% list.prep{end,3} = 'char';
% list.prep{end,4} = 2;
% list.prep{end+1,1} = 'prior_flatfield'; list.prep{end,2} = 'Check if flatfielding is required';
% list.prep{end,3} = 'logical';
% list.prep{end,4} = 2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Segmentation % Segmentation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.seg = []; list.seg = cell(0, 4);
list.seg{end+1,1} = 'bbox'; list.seg{end,2} = 'Segmentation Bounding Box; segmentation is done excluding this area'; list.seg(end+1, :) = {'bbox', ...
list.seg{end,3} = 'double'; % size (1,4) 'Segmentation Bounding Box}; segmentation is done excluding this area', 'double', 1};
list.seg{end,4} = 1; list.seg(end+1, :) = {'method', ...
list.seg{end+1,1} = 'method'; list.seg{end,2} = 'Segmentation method: ''singlethr'' - single threshold; ''doublethr'' - double threshold'; 'Segmentation method: ''singlethr'' - single threshold}; ''doublethr'' - double threshold', 'char', 1};
list.seg{end,3} = 'char'; list.seg(end+1, :) = {'thr_single', ...
list.seg{end,4} = 1; 'Threshold for ''single threshold'' segmentation', 'double', 1};
list.seg{end+1,1} = 'thr_single'; list.seg{end,2} = 'Threshold for ''single threshold'' segmentation'; % old th2 list.seg(end+1, :) = {'thr_seed', ...
list.seg{end,3} = 'double'; % scalar 'Seed threshold to find potential blobs (for double threshold)', 'double', 1};
list.seg{end,4} = 1; list.seg(end+1, :) = {'thr_grow_rat', ...
list.seg{end+1,1} = 'thr_seed'; list.seg{end,2} = 'Seed threshold to find potential blobs (for double threshold)'; % old th1 for doublethr 'Relative intensity threshold for growing seeds (for double threshold)', 'double', 1};
list.seg{end,3} = 'double'; % scalar list.seg(end+1, :) = {'thr_grow_low', ...
list.seg{end,4} = 1; 'Lower absolut limit of thr_grow_rat for growing seeds (for double threshold)', 'double', 1};
list.seg{end+1,1} = 'thr_grow_rat'; list.seg{end,2} = 'Relative intensity threshold for growing seeds (for double threshold)'; % old f list.seg(end+1, :) = {'thr_grow_high', ...
list.seg{end,3} = 'double'; % scalar 'Upper absolut limit of thr_grow_rat for growing seeds (for double threshold)', 'double', 1};
list.seg{end,4} = 1; list.seg(end+1, :) = {'seedminarea', ...
list.seg{end+1,1} = 'thr_grow_low'; list.seg{end,2} = 'Lower absolut limit of thr_grow_rat for growing seeds (for double threshold)'; 'Minimum seed size, in pixels, that will be considered (for double threshold). For the new segmentation it is hte number of connected pixels in 3D!', 'double', 1};
list.seg{end,3} = 'double'; % scalar list.seg(end+1, :) = {'minsize', ...
list.seg{end,4} = 1; 'Minimum accepted volume of a blob in voxels (for single threshold)', 'double', 1};
list.seg{end+1,1} = 'thr_grow_high'; list.seg{end,2} = 'Upper absolut limit of thr_grow_rat for growing seeds (for double threshold)'; list.seg(end+1, :) = {'omintlimmin', ...
list.seg{end,3} = 'double'; % scalar 'Min. relative intensity in omega image stack to create difspots from blobs', 'double', 1};
list.seg{end,4} = 1; list.seg(end+1, :) = {'omintlimtail', ...
list.seg{end+1,1} = 'seedminarea'; list.seg{end,2} = 'Minimum seed size, in pixels, that will be considered (for double threshold). For the new segmentation it is hte number of connected pixels in 3D!'; 'Relative integrated intensity for tail cut off to create difspots from blobs', 'double', 1};
list.seg{end,3} = 'double'; % scalar list.seg(end+1, :) = {'minblobsize', ...
list.seg{end,4} = 1; 'Minimum accepted blob size (for double threshold)', 'double', 1};
list.seg{end+1,1} = 'minsize'; list.seg{end,2} = 'Minimum accepted volume of a blob in voxels (for single threshold)'; list.seg(end+1, :) = {'maxblobsize', ...
list.seg{end,3} = 'double'; % scalar 'Maximum accepted blob size (for double threshold)', 'double', 1};
list.seg{end,4} = 1; list.seg(end+1, :) = {'extendblobinc', ...
list.seg{end+1,1} = 'omintlimmin'; list.seg{end,2} = 'Min. relative intensity in omega image stack to create difspots from blobs'; 'Size of incremental blob bbox extension (for double threshold)', 'double', 1};
list.seg{end,3} = 'double'; % scalar; used in gtDBBlob2SpotTable_WriteDifspots list.seg(end+1, :) = {'background_subtract', ...
list.seg{end,4} = 1; 'Offset the remaining median value of each full image to zero (computed and applied outside seg.bbox)', 'logical', 1};
list.seg{end+1,1} = 'omintlimtail'; list.seg{end,2} = 'Relative integrated intensity for tail cut off to create difspots from blobs'; list.seg(end+1, :) = {'overlaps_removed', ...
list.seg{end,3} = 'double'; % scalar; used in gtDBBlob2SpotTable_WriteDifspots 'Removing of overlaps', 'logical', 1};
list.seg{end,4} = 1; list.seg(end+1, :) = {'difspotmask', ...
list.seg{end+1,1} = 'minblobsize'; list.seg{end,2} = 'Minimum accepted blob size (for double threshold)'; 'Mask used to create difspot.edf from blob (''none''/''blob2D''/''blob3D'')', 'char', 1};
list.seg{end,3} = 'double'; % size (1,3) list.seg(end+1, :) = {'debug', ...
list.seg{end,4} = 1; 'Display messages', 'logical', 1};
list.seg{end+1,1} = 'maxblobsize'; list.seg{end,2} = 'Maximum accepted blob size (for double threshold)'; list.seg(end+1, :) = {'writeblobs', ...
list.seg{end,3} = 'double'; % size (1,3) 'Write difblobs to the table', 'logical', 1};
list.seg{end,4} = 1; list.seg(end+1, :) = {'writespots', ...
list.seg{end+1,1} = 'extendblobinc'; list.seg{end,2} = 'Size of incremental blob bbox extension (for double threshold)'; 'Write difspot metadata to the table', 'logical', 1};
list.seg{end,3} = 'double'; % size (1,3) list.seg(end+1, :) = {'writeedfs', ...
list.seg{end,4} = 1; 'Save difspots as edf files', 'logical', 1};
list.seg{end+1,1} = 'background_subtract'; list.seg{end,2} = 'Offset the remaining median value of each full image to zero (computed and applied outside seg.bbox)'; list.seg(end+1, :) = {'writehdf5', ...
list.seg{end,3} = 'logical'; 'Save difspots as hdf5 files', 'logical', 1};
list.seg{end,4} = 1; list.seg(end+1, :) = {'wrapping', ...
list.seg{end+1,1} = 'overlaps_removed'; list.seg{end,2} = 'Removing of overlaps'; 'For 360degree data, wrap from the last image back to the first image', 'logical', 1};
list.seg{end,3} = 'logical'; list.seg(end+1, :) = {'segmentation_stack_size', ...
list.seg{end,4} = 1; 'How many images in memory? (1000 images approx 32Gb)', 'double', 1};
list.seg{end+1,1} = 'difspotmask'; list.seg{end,2} = 'Mask used to create difspot.edf from blob (''none''/''blob2D''/''blob3D'')'; list.seg(end+1, :) = {'background_subtract_accelerate', ...
list.seg{end,3} = 'char'; % used in gtDBBlob2SpotTable_WriteDifspots 'Calculate median on a subset of pixels (faster)', 'logical', 1};
list.seg{end,4} = 1;
list.seg{end+1,1} = 'debug'; list.seg{end,2} = 'Display messages';
list.seg{end,3} = 'logical';
list.seg{end,4} = 1;
list.seg{end+1,1} = 'writeblobs'; list.seg{end,2} = 'Write difblobs to the table';
list.seg{end,3} = 'logical';
list.seg{end,4} = 1;
list.seg{end+1,1} = 'writespots'; list.seg{end,2} = 'Write difspot metadata to the table';
list.seg{end,3} = 'logical';
list.seg{end,4} = 1;
list.seg{end+1,1} = 'writeedfs'; list.seg{end,2} = 'Save difspots as edf files';
list.seg{end,3} = 'logical';
list.seg{end,4} = 1;
list.seg{end+1,1} = 'writehdf5'; list.seg{end,2} = 'Save difspots as hdf5 files';
list.seg{end,3} = 'logical';
list.seg{end,4} = 1;
list.seg{end+1,1} = 'wrapping'; list.seg{end,2} = 'For 360degree data, wrap from the last image back to the first image';
list.seg{end,3} = 'logical';
list.seg{end,4} = 1;
list.seg{end+1,1} = 'segmentation_stack_size'; list.seg{end,2} = 'How many images in memory? (1000 images approx 32Gb)';
list.seg{end,3} = 'double'; % scalar
list.seg{end,4} = 1;
list.seg{end+1,1} = 'background_subtract_accelerate'; list.seg{end,2} = 'Calculate median on a subset of pixels (faster)';
list.seg{end,3} = 'logical';
list.seg{end,4} = 1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Friedel pair matching % Friedel pair matching
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.match = []; list.match = cell(0, 4);
list.match{end+1,1} = 'thr_theta'; list.match{end,2} = 'Max. theta angular deviation for a match (in degrees)'; list.match(end+1, :) = {'thr_theta', ...
list.match{end,3} = 'double'; % scalar 'Max. theta angular deviation for a match (in degrees)', 'double', 1};
list.match{end,4} = 1; list.match(end+1, :) = {'thr_theta_scale', ...
list.match{end+1,1} = 'thr_theta_scale'; list.match{end,2} = 'Linear scaling for thr_theta: thr = thr_theta + thr_theta_scale*theta'; 'Linear scaling for thr_theta: thr = thr_theta + thr_theta_scale*theta', 'double', 1};
list.match{end,3} = 'double'; % scalar list.match(end+1, :) = {'thr_max_offset', ...
list.match{end,4} = 1; 'Max. centroid image offset for a match (in no. of images)', 'double', 1};
list.match{end+1,1} = 'thr_max_offset'; list.match{end,2} = 'Max. centroid image offset for a match (in no. of images)'; list.match(end+1, :) = {'thr_ext_offset', ...
list.match{end,3} = 'double'; % scalar 'Max. offset of first and last image in omega stack (in no. of images)', 'double', 1};
list.match{end,4} = 1; list.match(end+1, :) = {'thr_genim_offset', ...
list.match{end+1,1} = 'thr_ext_offset'; list.match{end,2} = 'Max. offset of first and last image in omega stack (in no. of images)'; 'Max. offset for at least one of (centroid,first,last) image (in no. of images)', 'double', 1};
list.match{end,3} = 'double'; % scalar list.match(end+1, :) = {'thr_intint', ...
list.match{end,4} = 1; 'Max. intensity ratio for a match (>1)', 'double', 1};
list.match{end+1,1} = 'thr_genim_offset'; list.match{end,2} = 'Max. offset for at least one of (centroid,first,last) image (in no. of images)'; list.match(end+1, :) = {'thr_area', ...
list.match{end,3} = 'double'; % scalar 'Max. area ratio for a match (>1)', 'double', 1};
list.match{end,4} = 1; list.match(end+1, :) = {'thr_bbsize', ...
list.match{end+1,1} = 'thr_intint'; list.match{end,2} = 'Max. intensity ratio for a match (>1)'; 'Max. bbox size ratio (for both U and V) for a match (>1)', 'double', 1};
list.match{end,3} = 'double'; % scalar list.match(end+1, :) = {'minsizeu', ...
list.match{end,4} = 1; 'Min. bbox U size in pixels for spots to be considered for matching', 'double', 1};
list.match{end+1,1} = 'thr_area'; list.match{end,2} = 'Max. area ratio for a match (>1)'; list.match(end+1, :) = {'minsizev', ...
list.match{end,3} = 'double'; % scalar 'Min. bbox V size in pixels for spots to be considered for matching', 'double', 1};
list.match{end,4} = 1; list.match(end+1, :) = {'addconstr', ...
list.match{end+1,1} = 'thr_bbsize'; list.match{end,2} = 'Max. bbox size ratio (for both U and V) for a match (>1)'; 'Additional constraints for spots to be considered (mysql command text)', 'char', 1};
list.match{end,3} = 'double'; % scalar list.match(end+1, :) = {'thr_meanerror', ...
list.match{end,4} = 1; 'Mean error under which a match is accepted', 'double', 1};
list.match{end+1,1} = 'minsizeu'; list.match{end,2} = 'Min. bbox U size in pixels for spots to be considered for matching'; list.match(end+1, :) = {'thetalimits', ...
list.match{end,3} = 'double'; % scalar 'Allowed theta subranges in degrees: [min max] size (n,2)', 'double', 1};
list.match{end,4} = 1; list.match(end+1, :) = {'uniquetheta', ...
list.match{end+1,1} = 'minsizev'; list.match{end,2} = 'Min. bbox V size in pixels for spots to be considered for matching'; 'Theta tolerance for distinguishing overlapping {hkl} reflections (in degrees)', 'double', 1};
list.match{end,3} = 'double'; % scalar
list.match{end,4} = 1;
list.match{end+1,1} = 'addconstr'; list.match{end,2} = 'Additional constraints for spots to be considered (mysql command text)';
list.match{end,3} = 'char';
list.match{end,4} = 1;
list.match{end+1,1} = 'thr_meanerror'; list.match{end,2} = 'Mean error under which a match is accepted';
list.match{end,3} = 'double'; % scalar
list.match{end,4} = 1;
list.match{end+1,1} = 'thetalimits'; list.match{end,2} = 'Allowed theta subranges in degrees: [min max] size (n,2)';
list.match{end,3} = 'double'; % size (n,2)
list.match{end,4} = 1;
list.match{end+1,1} = 'uniquetheta'; list.match{end,2} = 'Theta tolerance for distinguishing overlapping {hkl} reflections (in degrees)';
list.match{end,3} = 'double'; % size (n,2)
list.match{end,4} = 1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Indexter % Indexter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.index = []; list.index = cell(0, 4);
list.index{end+1,1} = 'strategy'; list.index{end,2} = 'Strategy for indexter containing all parameters'; list.index(end+1, :) = {'strategy', ...
list.index{end,3} = 'struct'; 'Strategy for indexter containing all parameters', 'struct', 0};
list.index{end,4} = 0; list.index(end+1, :) = {'discard', ...
list.index{end+1,1} = 'discard'; list.index{end,2} = 'Vector of pair id-s to be discarded in indexing'; 'Vector of pair id-s to be discarded in indexing', 'double', 1};
list.index{end,3} = 'double'; % row vector list.index(end+1, :) = {'forcemerge', ...
list.index{end,4} = 1; 'Cell array of grain id-s to be merged', 'cell', 1};
list.index{end+1,1} = 'forcemerge'; list.index{end,2} = 'Cell array of grain id-s to be merged';
list.index{end,3} = 'cell'; % row vector list.index__strategy = cell(0, 4);
list.index{end,4} = 1; list.index__strategy(end+1, :) = {'iter', ...
list.index__strategy = []; 'Number of iteration loops', 'double', 1};
list.index__strategy{end+1,1} = 'iter'; list.index__strategy{end,2} = 'Number of iteration loops'; list.index__strategy(end+1, :) = {'rfzext', ...
list.index__strategy{end,3} = 'double'; % scalar 'Extension of Rodrigues space for input reflections to account for measurement errors', 'double', 1};
list.index__strategy{end,4} = 1; list.index__strategy(end+1, :) = {'b', ...
list.index__strategy{end+1,1} = 'rfzext'; list.index__strategy{end,2} = 'Extension of Rodrigues space for input reflections to account for measurement errors'; 'Parameters for finding grains', 'struct', 0};
list.index__strategy{end,3} = 'double'; % scalar list.index__strategy(end+1, :) = {'m', ...
list.index__strategy{end,4} = 1; 'Parameters for merging grains', 'struct', 0};
list.index__strategy{end+1,1} = 'b'; list.index__strategy{end,2} = 'Parameters for finding grains'; list.index__strategy(end+1, :) = {'s', ...
list.index__strategy{end,3} = 'struct'; 'Parameters for adding pairs to grains based on statistics', 'struct', 0};
list.index__strategy{end,4} = 0; list.index__strategy(end+1, :) = {'x', ...
list.index__strategy{end+1,1} = 'm'; list.index__strategy{end,2} = 'Parameters for merging grains'; 'Parameters for excluding pairs from grains based on statistics', 'struct', 0};
list.index__strategy{end,3} = 'struct';
list.index__strategy{end,4} = 0; list.index__strategy__b = cell(0, 4);
list.index__strategy{end+1,1} = 's'; list.index__strategy{end,2} = 'Parameters for adding pairs to grains based on statistics'; list.index__strategy__b(end+1, :) = {'beg', ...
list.index__strategy{end,3} = 'struct'; 'Tolerances in the first iteration loop for finding grains', 'struct', 0};
list.index__strategy{end,4} = 0; list.index__strategy__b(end+1, :) = {'end', ...
list.index__strategy{end+1,1} = 'x'; list.index__strategy{end,2} = 'Parameters for excluding pairs from grains based on statistics'; 'Tolerances in the last iteration loop for finding grains', 'struct', 0};
list.index__strategy{end,3} = 'struct';
list.index__strategy{end,4} = 0; list.index__strategy__b__beg = cell(0, 4);
list.index__strategy__b = []; list.index__strategy__b__beg(end+1, :) = {'ang', ...
list.index__strategy__b{end+1,1} = 'beg'; list.index__strategy__b{end,2} = 'Tolerances in the first iteration loop for finding grains'; 'Max. angular deviation between two reflections in a grain (in degrees)', 'double', 1};
list.index__strategy__b{end,3} = 'struct'; list.index__strategy__b__beg(end+1, :) = {'int', ...
list.index__strategy__b{end,4} = 0; 'Max. relative intensity ratio of two reflections in a grain', 'double', 1};
list.index__strategy__b{end+1,1} = 'end'; list.index__strategy__b{end,2} = 'Tolerances in the last iteration loop for finding grains'; list.index__strategy__b__beg(end+1, :) = {'bbxs', ...
list.index__strategy__b{end,3} = 'struct'; 'Max. relative bounding box X (U) size ratio in a grain', 'double', 1};
list.index__strategy__b{end,4} = 0; list.index__strategy__b__beg(end+1, :) = {'bbys', ...
list.index__strategy__b__beg = []; 'Max. relative bounding box Y (V) size ratio in a grain', 'double', 1};
list.index__strategy__b__beg{end+1,1} = 'ang'; list.index__strategy__b__beg{end,2} = 'Max. angular deviation between two reflections in a grain (in degrees)'; list.index__strategy__b__beg(end+1, :) = {'distf', ...
list.index__strategy__b__beg{end,3} = 'double'; % scalar 'Max. distance between two diffraction paths (dmax = distf*grain_size)', 'double', 1};
list.index__strategy__b__beg{end,4} = 1; list.index__strategy__b__beg(end+1, :) = {'distmax', ...
list.index__strategy__b__beg{end+1,1} = 'int'; list.index__strategy__b__beg{end,2} = 'Max. relative intensity ratio of two reflections in a grain'; 'Max. absolut distance between two diffraction paths (in lab unit)', 'double', 1};
list.index__strategy__b__beg{end,3} = 'double'; % scalar list.index__strategy__b__beg(end+1, :) = {'ming', ...
list.index__strategy__b__beg{end,4} = 1; 'Min. no. of Friedel pairs in a grain', 'double', 1};
list.index__strategy__b__beg{end+1,1} = 'bbxs'; list.index__strategy__b__beg{end,2} = 'Max. relative bounding box X (U) size ratio in a grain';
list.index__strategy__b__beg{end,3} = 'double'; % scalar list.index__strategy__b__end = cell(0, 4);
list.index__strategy__b__beg{end,4} = 1; list.index__strategy__b__end(end+1, :) = {'ang', ...
list.index__strategy__b__beg{end+1,1} = 'bbys'; list.index__strategy__b__beg{end,2} = 'Max. relative bounding box Y (V) size ratio in a grain'; 'Max. angular deviation between two reflections in a grain (in degrees)', 'double', 1};
list.index__strategy__b__beg{end,3} = 'double'; % scalar list.index__strategy__b__end(end+1, :) = {'int', ...
list.index__strategy__b__beg{end,4} = 1; 'Max. relative intensity ratio of two reflections in a grain', 'double', 1};
list.index__strategy__b__beg{end+1,1} = 'distf'; list.index__strategy__b__beg{end,2} = 'Max. distance between two diffraction paths (dmax = distf*grain_size)'; list.index__strategy__b__end(end+1, :) = {'bbxs', ...
list.index__strategy__b__beg{end,3} = 'double'; % scalar 'Max. relative bounding box X (U) size ratio in a grain', 'double', 1};
list.index__strategy__b__beg{end,4} = 1; list.index__strategy__b__end(end+1, :) = {'bbys', ...
list.index__strategy__b__beg{end+1,1} = 'distmax'; list.index__strategy__b__beg{end,2} = 'Max. absolut distance between two diffraction paths (in lab unit)'; 'Max. relative bounding box Y (V) size ratio in a grain', 'double', 1};
list.index__strategy__b__beg{end,3} = 'double'; % scalar list.index__strategy__b__end(end+1, :) = {'distf', ...
list.index__strategy__b__beg{end,4} = 1; 'Max. relative distance between two diffraction paths (dmax = distf*grain_size)', 'double', 1};
list.index__strategy__b__beg{end+1,1} = 'ming'; list.index__strategy__b__beg{end,2} = 'Min. no. of Friedel pairs in a grain'; list.index__strategy__b__end(end+1, :) = {'distmax', ...
list.index__strategy__b__beg{end,3} = 'double'; % scalar 'Max. absolut distance between two diffraction paths (in lab unit)', 'double', 1};
list.index__strategy__b__beg{end,4} = 1; list.index__strategy__b__end(end+1, :) = {'ming', ...
list.index__strategy__b__end = []; 'Min. no. of Friedel pairs in a grain', 'double', 1};
list.index__strategy__b__end{end+1,1} = 'ang'; list.index__strategy__b__end{end,2} = 'Max. angular deviation between two reflections in a grain (in degrees)';
list.index__strategy__b__end{end,3} = 'double'; % scalar list.index__strategy__m = cell(0, 4);
list.index__strategy__b__end{end,4} = 1; list.index__strategy__m(end+1, :) = {'beg', ...
list.index__strategy__b__end{end+1,1} = 'int'; list.index__strategy__b__end{end,2} = 'Max. relative intensity ratio of two reflections in a grain'; 'Tolerances in the first iteration loop for grains to be merged', 'struct', 0};
list.index__strategy__b__end{end,3} = 'double'; % scalar list.index__strategy__m(end+1, :) = {'end', ...
list.index__strategy__b__end{end,4} = 1; 'Tolerances in the last iteration loop for grains to be merged', 'struct', 0};
list.index__strategy__b__end{end+1,1} = 'bbxs'; list.index__strategy__b__end{end,2} = 'Max. relative bounding box X (U) size ratio in a grain';
list.index__strategy__b__end{end,3} = 'double'; % scalar list.index__strategy__m__beg = cell(0, 4);
list.index__strategy__b__end{end,4} = 1; list.index__strategy__m__beg(end+1, :) = {'bbxs', ...
list.index__strategy__b__end{end+1,1} = 'bbys'; list.index__strategy__b__end{end,2} = 'Max. relative bounding box Y (V) size ratio in a grain'; 'Max. ratio of average bounding box X (U) size of grains', 'double', 1};
list.index__strategy__b__end{end,3} = 'double'; % scalar list.index__strategy__m__beg(end+1, :) = {'bbys', ...
list.index__strategy__b__end{end,4} = 1; 'Max. ratio of average bounding box Y (V) size of grains', 'double', 1};
list.index__strategy__b__end{end+1,1} = 'distf'; list.index__strategy__b__end{end,2} = 'Max. relative distance between two diffraction paths (dmax = distf*grain_size)'; list.index__strategy__m__beg(end+1, :) = {'int', ...
list.index__strategy__b__end{end,3} = 'double'; % scalar 'Max. ratio of average spot intensities of grains', 'double', 1};
list.index__strategy__b__end{end,4} = 1; list.index__strategy__m__beg(end+1, :) = {'distf', ...
list.index__strategy__b__end{end+1,1} = 'distmax'; list.index__strategy__b__end{end,2} = 'Max. absolut distance between two diffraction paths (in lab unit)'; 'Max. relative distance between grain centers (dmax = distf*grain_size)', 'double', 1};
list.index__strategy__b__end{end,3} = 'double'; % scalar list.index__strategy__m__beg(end+1, :) = {'distmin', ...
list.index__strategy__b__end{end,4} = 1; 'Min. absolut limit for distance between grain centers', 'double', 1};
list.index__strategy__b__end{end+1,1} = 'ming'; list.index__strategy__b__end{end,2} = 'Min. no. of Friedel pairs in a grain'; list.index__strategy__m__beg(end+1, :) = {'distmax', ...
list.index__strategy__b__end{end,3} = 'double'; % scalar 'Max. absolut limit for distance between grain centers', 'double', 1};
list.index__strategy__b__end{end,4} = 1; list.index__strategy__m__beg(end+1, :) = {'angf', ...
list.index__strategy__m = []; 'Max. relative angular difference between grains in std (angmax = angf*ang_std_grain)', 'double', 1};
list.index__strategy__m{end+1,1} = 'beg'; list.index__strategy__m{end,2} = 'Tolerances in the first iteration loop for grains to be merged'; list.index__strategy__m__beg(end+1, :) = {'angmin', ...
list.index__strategy__m{end,3} = 'struct'; 'Min. absolut limit for angular difference between grains', 'double', 1};
list.index__strategy__m{end,4} = 0; list.index__strategy__m__beg(end+1, :) = {'angmax', ...
list.index__strategy__m{end+1,1} = 'end'; list.index__strategy__m{end,2} = 'Tolerances in the last iteration loop for grains to be merged'; 'Max. absolut limit for angular difference between grains', 'double', 1};
list.index__strategy__m{end,3} = 'struct';
list.index__strategy__m{end,4} = 0; list.index__strategy__m__end = cell(0, 4);
list.index__strategy__m__end(end+1, :) = {'bbxs', ...
list.index__strategy__m__beg = []; 'Max. ratio of average bounding box X (U) size of grains', 'double', 1};
list.index__strategy__m__beg{end+1,1} = 'bbxs'; list.index__strategy__m__beg{end,2} = 'Max. ratio of average bounding box X (U) size of grains'; list.index__strategy__m__end(end+1, :) = {'bbys', ...
list.index__strategy__m__beg{end,3} = 'double'; % scalar 'Max. ratio of average bounding box Y (V) size of grains', 'double', 1};
list.index__strategy__m__beg{end,4} = 1; list.index__strategy__m__end(end+1, :) = {'int', ...
list.index__strategy__m__beg{end+1,1} = 'bbys'; list.index__strategy__m__beg{end,2} = 'Max. ratio of average bounding box Y (V) size of grains'; 'Max. ratio of average spot intensities of grains', 'double', 1};
list.index__strategy__m__beg{end,3} = 'double'; % scalar list.index__strategy__m__end(end+1, :) = {'distf', ...
list.index__strategy__m__beg{end,4} = 1; 'Max. relative distance between grain centers (dmax = distf*grain_size)', 'double', 1};
list.index__strategy__m__beg{end+1,1} = 'int'; list.index__strategy__m__beg{end,2} = 'Max. ratio of average spot intensities of grains'; list.index__strategy__m__end(end+1, :) = {'distmin', ...
list.index__strategy__m__beg{end,3} = 'double'; % scalar 'Min. absolut limit for distance between grain centers', 'double', 1};
list.index__strategy__m__beg{end,4} = 1; list.index__strategy__m__end(end+1, :) = {'distmax', ...
list.index__strategy__m__beg{end+1,1} = 'distf'; list.index__strategy__m__beg{end,2} = 'Max. relative distance between grain centers (dmax = distf*grain_size)'; 'Max. absolut limit for distance between grain centers', 'double', 1};
list.index__strategy__m__beg{end,3} = 'double'; % scalar list.index__strategy__m__end(end+1, :) = {'angf', ...
list.index__strategy__m__beg{end,4} = 1; 'Max. relative angular difference between grains in std (angmax = angf*ang_std_grain)', 'double', 1};
list.index__strategy__m__beg{end+1,1} = 'distmin'; list.index__strategy__m__beg{end,2} = 'Min. absolut limit for distance between grain centers'; list.index__strategy__m__end(end+1, :) = {'angmin', ...
list.index__strategy__m__beg{end,3} = 'double'; % scalar 'Min. absolut limit for angular difference between grains', 'double', 1};
list.index__strategy__m__beg{end,4} = 1; list.index__strategy__m__end(end+1, :) = {'angmax', ...
list.index__strategy__m__beg{end+1,1} = 'distmax'; list.index__strategy__m__beg{end,2} = 'Max. absolut limit for distance between grain centers'; 'Max. absolut limit for angular difference between grains', 'double', 1};
list.index__strategy__m__beg{end,3} = 'double'; % scalar
list.index__strategy__m__beg{end,4} = 1; list.index__strategy__s = cell(0, 4);
list.index__strategy__m__beg{end+1,1} = 'angf'; list.index__strategy__m__beg{end,2} = 'Max. relative angular difference between grains in std (angmax = angf*ang_std_grain)'; list.index__strategy__s(end+1, :) = {'stdf', ...
list.index__strategy__m__beg{end,3} = 'double'; % scalar 'Max. deviation from average grain properties for a new reflection to be included in grain (in std)', 'double', 1};
list.index__strategy__m__beg{end,4} = 1;
list.index__strategy__m__beg{end+1,1} = 'angmin'; list.index__strategy__m__beg{end,2} = 'Min. absolut limit for angular difference between grains'; list.index__strategy__x = cell(0, 4);
list.index__strategy__m__beg{end,3} = 'double'; % scalar list.index__strategy__x(end+1, :) = {'stdf', ...
list.index__strategy__m__beg{end,4} = 1; 'Max. deviation from average grain properties for a reflection to be kept in grain (in std)', 'double', 1};
list.index__strategy__m__beg{end+1,1} = 'angmax'; list.index__strategy__m__beg{end,2} = 'Max. absolut limit for angular difference between grains';
list.index__strategy__m__beg{end,3} = 'double'; % scalar
list.index__strategy__m__beg{end,4} = 1;
list.index__strategy__m__end = [];
list.index__strategy__m__end{end+1,1} = 'bbxs'; list.index__strategy__m__end{end,2} = 'Max. ratio of average bounding box X (U) size of grains';
list.index__strategy__m__end{end,3} = 'double'; % scalar
list.index__strategy__m__end{end,4} = 1;
list.index__strategy__m__end{end+1,1} = 'bbys'; list.index__strategy__m__end{end,2} = 'Max. ratio of average bounding box Y (V) size of grains';
list.index__strategy__m__end{end,3} = 'double'; % scalar
list.index__strategy__m__end{end,4} = 1;
list.index__strategy__m__end{end+1,1} = 'int'; list.index__strategy__m__end{end,2} = 'Max. ratio of average spot intensities of grains';
list.index__strategy__m__end{end,3} = 'double'; % scalar
list.index__strategy__m__end{end,4} = 1;
list.index__strategy__m__end{end+1,1} = 'distf'; list.index__strategy__m__end{end,2} = 'Max. relative distance between grain centers (dmax = distf*grain_size)';
list.index__strategy__m__end{end,3} = 'double'; % scalar
list.index__strategy__m__end{end,4} = 1;
list.index__strategy__m__end{end+1,1} = 'distmin'; list.index__strategy__m__end{end,2} = 'Min. absolut limit for distance between grain centers';
list.index__strategy__m__end{end,3} = 'double'; % scalar
list.index__strategy__m__end{end,4} = 1;
list.index__strategy__m__end{end+1,1} = 'distmax'; list.index__strategy__m__end{end,2} = 'Max. absolut limit for distance between grain centers';
list.index__strategy__m__end{end,3} = 'double'; % scalar
list.index__strategy__m__end{end,4} = 1;
list.index__strategy__m__end{end+1,1} = 'angf'; list.index__strategy__m__end{end,2} = 'Max. relative angular difference between grains in std (angmax = angf*ang_std_grain)';
list.index__strategy__m__end{end,3} = 'double'; % scalar
list.index__strategy__m__end{end,4} = 1;
list.index__strategy__m__end{end+1,1} = 'angmin'; list.index__strategy__m__end{end,2} = 'Min. absolut limit for angular difference between grains';
list.index__strategy__m__end{end,3} = 'double'; % scalar
list.index__strategy__m__end{end,4} = 1;
list.index__strategy__m__end{end+1,1} = 'angmax'; list.index__strategy__m__end{end,2} = 'Max. absolut limit for angular difference between grains';
list.index__strategy__m__end{end,3} = 'double'; % scalar
list.index__strategy__m__end{end,4} = 1;
list.index__strategy__s = [];
list.index__strategy__s{end+1,1} = 'stdf'; list.index__strategy__s{end,2} = 'Max. deviation from average grain properties for a new reflection to be included in grain (in std)';
list.index__strategy__s{end,3} = 'double'; % scalar
list.index__strategy__s{end,4} = 1;
list.index__strategy__x = [];
list.index__strategy__x{end+1,1} = 'stdf'; list.index__strategy__x{end,2} = 'Max. deviation from average grain properties for a reflection to be kept in grain (in std)';
list.index__strategy__x{end,3} = 'double'; % scalar
list.index__strategy__x{end,4} = 1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% forward simulation of diffraction spots % forward simulation of diffraction spots
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.fsim = []; list.fsim = cell(0, 4);
list.fsim{end+1,1} = 'check_spot'; list.fsim{end,2} = 'Check if there is not-segmented intensity in full images'; list.fsim(end+1, :) = {'check_spot', ...
list.fsim{end,3} = 'logical'; 'Check if there is not-segmented intensity in full images', 'logical', 1};
list.fsim{end,4} = 1; list.fsim(end+1, :) = {'omegarange', ...
list.fsim{end+1,1} = 'omegarange'; list.fsim{end,2} = 'Check for spots and intensity in +/- omega_range'; 'Check for spots and intensity in +/- omega_range', 'double', 1};
list.fsim{end,3} = 'double'; % scalar list.fsim(end+1, :) = {'MaxOmegaOffset', ...
list.fsim{end,4} = 1; 'Maximum omega offset', 'double', 1};
list.fsim{end+1,1} = 'MaxOmegaOffset'; list.fsim{end,2} = 'Maximum omega offset'; list.fsim(end+1, :) = {'bb_size', ...
list.fsim{end,3} = 'double'; % scalar 'Dimensions of search bb - if left empty the projection size will be used', 'double', 1};
list.fsim{end,4} = 1; list.fsim(end+1, :) = {'assemble_figure', ...
list.fsim{end+1,1} = 'bb_size'; list.fsim{end,2} = 'Dimensions of search bb - if left empty the projection size will be used'; 'Assemble the results of forward simulation into a full image saved in the grain_04%d.mat file', 'logical', 1};
list.fsim{end,3} = 'double'; list.fsim(end+1, :) = {'display_figure', ...
list.fsim{end,4} = 1; 'Display the assembled full image (function gtShowFsim)', 'logical', 1};
list.fsim{end+1,1} = 'assemble_figure'; list.fsim{end,2} = 'Assemble the results of forward simulation into a full image saved in the grain_04%d.mat file'; list.fsim(end+1, :) = {'Grayscale', ...
list.fsim{end,3} = 'logical'; 'Colorlimits for display of results', 'double', 1};
list.fsim{end,4} = 1; list.fsim(end+1, :) = {'Rdist_factor', ...
list.fsim{end+1,1} = 'display_figure'; list.fsim{end,2} = 'Display the assembled full image (function gtShowFsim)'; 'Allow for Rdist_factor times dangstd in calulcation of angular deviation', 'double', 1};
list.fsim{end,3} = 'logical'; list.fsim(end+1, :) = {'bbsize_factor', ...
list.fsim{end,4} = 1; 'Allow for bbsize_factor times bbx(y)sstd variation of BoundingBox size', 'double', 1};
list.fsim{end+1,1} = 'Grayscale'; list.fsim{end,2} = 'Colorlimits for display of results'; list.fsim(end+1, :) = {'oversize', ...
list.fsim{end,3} = 'double'; % size (1,2) 'Projections are zeropadded to this size before reconstruction', 'double', 1};
list.fsim{end,4} = 1; list.fsim(end+1, :) = {'use_th', ...
list.fsim{end+1,1} = 'Rdist_factor'; list.fsim{end,2} = 'Allow for Rdist_factor times dangstd in calulcation of angular deviation'; 'Use theoretically predicted diffraction angles for new detected spots', 'logical', 1};
list.fsim{end,3} = 'double'; % scalar list.fsim(end+1, :) = {'verbose', ...
list.fsim{end,4} = 1; 'Display the search criteria for each of the spots', 'logical', 1};
list.fsim{end+1,1} = 'bbsize_factor'; list.fsim{end,2} = 'Allow for bbsize_factor times bbx(y)sstd variation of BoundingBox size'; list.fsim(end+1, :) = {'included', ...
list.fsim{end,3} = 'double'; % scalar 'Difspots with flag >= included will be put into the stack', 'double', 1};
list.fsim{end,4} = 1; list.fsim(end+1, :) = {'selected', ...
list.fsim{end+1,1} = 'oversize'; list.fsim{end,2} = 'Projections are zeropadded to this size before reconstruction'; 'Difspots with flag >= selected be used for reconstruction', 'double', 1};
list.fsim{end,3} = 'double'; % scalar list.fsim(end+1, :) = {'save_grain', ...
list.fsim{end,4} = 1; 'Flag to save grain_####.mat files', 'logical', 1};
list.fsim{end+1,1} = 'use_th'; list.fsim{end,2} = 'Use theoretically predicted diffraction angles for new detected spots'; list.fsim(end+1, :) = {'oversizeVol', ...
list.fsim{end,3} = 'logical'; 'Grain reconstruction volumes are zeropadded to this size', 'double', 1};
list.fsim{end,4} = 1;
list.fsim{end+1,1} = 'verbose'; list.fsim{end,2} = 'Display the search criteria for each of the spots';
list.fsim{end,3} = 'logical';
list.fsim{end,4} = 1;
list.fsim{end+1,1} = 'included'; list.fsim{end,2} = 'Difspots with flag >= included will be put into the stack';
list.fsim{end,3} = 'double'; % scalar
list.fsim{end,4} = 1;
list.fsim{end+1,1} = 'selected'; list.fsim{end,2} = 'Difspots with flag >= selected be used for reconstruction';
list.fsim{end,3} = 'double'; % scalar
list.fsim{end,4} = 1;
list.fsim{end+1,1} = 'save_grain'; list.fsim{end,2} = 'Flag to save grain_####.mat files';
list.fsim{end,3} = 'logical';
list.fsim{end,4} = 1;
list.fsim{end+1,1} = 'oversizeVol'; list.fsim{end,2} = 'Grain reconstruction volumes are zeropadded to this size';
list.fsim{end,3} = 'double'; % scalar
list.fsim{end,4} = 1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% reconstruction % reconstruction
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.rec = []; list.rec = cell(0, 4);
list.rec{end+1,1} = 'method'; list.rec{end,2} = 'method for the absorption reconstruction ''3DART''/''2DFBP'''; list.rec(end+1, :) = {'method', ...
list.rec{end,3} = 'char'; 'method for the absorption reconstruction ''3DART''/''2DFBP''', 'char', 1};
list.rec{end,4} = 1; list.rec(end+1, :) = {'list', ...
list.rec{end+1,1} = 'list'; list.rec{end,2} = 'list of grainID to be reconstructed'; 'list of grainID to be reconstructed', 'double', 1};
list.rec{end,3} = 'double'; list.rec(end+1, :) = {'percentile1', ...
list.rec{end,4} = 1; 'Alternative adaptive threshold: percentile/100 * mean below grain average value', 'double', 1};
list.rec{end+1,1} = 'percentile1'; list.rec{end,2} = 'Alternative adaptive threshold: percentile/100 * mean below grain average value'; list.rec(end+1, :) = {'percentile2', ...
list.rec{end,3} = 'double'; % scalar 'Adaptive threshold: percentile/100 * std below grain average value', 'double', 1};
list.rec{end,4} = 1; list.rec(end+1, :) = {'do_morph_recon', ...
list.rec{end+1,1} = 'percentile2'; list.rec{end,2} = 'Adaptive threshold: percentile/100 * std below grain average value'; 'Perform morphological reconstruction during segmentation', 'logical', 1};
list.rec{end,3} = 'double'; % scalar list.rec(end+1, :) = {'absinterval', ...
list.rec{end,4} = 1; 'Interval between radiographs used for reconstruction of absorption scan', 'double', 1};
list.rec{end+1,1} = 'do_morph_recon'; list.rec{end,2} = 'Perform morphological reconstruction during segmentation'; list.rec(end+1, :) = {'abs_num_iter', ...
list.rec{end,3} = 'logical'; 'Number of iterations used in SIRT reconstruction of absorption volume', 'double', 1};
list.rec{end,4} = 1; list.rec(end+1, :) = {'num_iter', ...
list.rec{end+1,1} = 'absinterval'; list.rec{end,2} = 'Interval between radiographs used for reconstruction of absorption scan'; 'Number of iterations used in SIRT reconstruction of grain volumes', 'double', 1};
list.rec{end,3} = 'double'; % scalar
list.rec{end,4} = 1; list.rec(end+1, :) = {'absorption', ...
list.rec{end+1,1} = 'abs_num_iter'; list.rec{end,2} = 'Number of iterations used in SIRT reconstruction of absorption volume'; 'Absorption volume reconstruction information', 'struct', 0};
list.rec{end,3} = 'double'; % scalar list.rec(end+1, :) = {'grains', ...
list.rec{end,4} = 1; 'Grains volume reconstruction information', 'struct', 0};
list.rec{end+1,1} = 'num_iter'; list.rec{end,2} = 'Number of iterations used in SIRT reconstruction of grain volumes';
list.rec{end,3} = 'double'; % scalar list.rec__absorption = cell(0, 4);
list.rec{end,4} = 1; list.rec__absorption(end+1, :) = {'algorithm', ...
'Algorithm for the absorption reconstruction ''SIRT''/''2DFBP''', 'char', 1};
list.rec{end+1,1} = 'sample'; list.rec{end,2} = 'Sample volume reconstruction information'; list.rec__absorption(end+1, :) = {'num_iter', ...
list.rec{end,3} = 'struct'; 'Number of iterations used in SIRT reconstruction of absorption volume', 'double', 1};
list.rec{end,4} = 0; list.rec__absorption(end+1, :) = {'interval', ...
list.rec{end+1,1} = 'grains'; list.rec{end,2} = 'Grains volume reconstruction information'; 'Interval between radiographs used for reconstruction of absorption scan', 'double', 1};
list.rec{end,3} = 'struct'; list.rec__absorption(end+1, :) = {'options', ...
list.rec{end,4} = 0; 'Reconstruction algorithm''s options', 'struct', 0};
list.rec__absorption = [];
list.rec__absorption{end+1,1} = 'algorithm'; list.rec{end,2} = 'Algorithm for the absorption reconstruction ''SIRT''/''2DFBP'''; list.rec__grains = cell(0, 4);
list.rec{end,3} = 'char'; list.rec__grains(end+1, :) = {'algorithm', ...
list.rec{end,4} = 1; 'Algorithm for the absorption reconstruction ''SIRT''/''CPOL1''', 'char', 1};
list.rec__absorption{end+1,1} = 'num_iter'; list.rec{end,2} = 'Number of iterations used in SIRT reconstruction of absorption volume'; list.rec__grains(end+1, :) = {'num_iter', ...
list.rec{end,3} = 'double'; % scalar 'Number of iterations used in SIRT reconstruction of grain volume', 'double', 1};
list.rec{end,4} = 1; list.rec__grains(end+1, :) = {'list', ...
list.rec__absorption{end+1,1} = 'interval'; list.rec{end,2} = 'Interval between radiographs used for reconstruction of absorption scan'; 'list of grain IDs to be reconstructed', 'double', 1};
list.rec{end,3} = 'double'; % scalar list.rec__grains(end+1, :) = {'options', ...
list.rec{end,4} = 1; 'Reconstruction algorithm''s options', 'struct', 0};
list.rec__absorption{end+1,1} = 'options'; list.rec{end,2} = 'Reconstruction algorithm''s options';
list.rec{end,3} = 'struct';
list.rec{end,4} = 0;
list.rec__grains = [];
list.rec__grains{end+1,1} = 'algorithm'; list.rec{end,2} = 'Algorithm for the absorption reconstruction ''SIRT''/''CPOL1''';
list.rec{end,3} = 'char';
list.rec{end,4} = 1;
list.rec__grains{end+1,1} = 'num_iter'; list.rec{end,2} = 'Number of iterations used in SIRT reconstruction of grain volume';
list.rec{end,3} = 'double'; % scalar
list.rec{end,4} = 1;
list.rec__grains{end+1,1} = 'list'; list.rec{end,2} = 'list of grain IDs to be reconstructed';
list.rec{end,3} = 'double';
list.rec{end,4} = 1;
list.rec__grains{end+1,1} = 'options'; list.rec{end,2} = 'Reconstruction algorithm''s options';
list.rec{end,3} = 'struct';
list.rec{end,4} = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% fed % fed
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.fed = []; list.fed = cell(0, 4);
list.fed{end+1,1} = 'dir'; list.fed{end,2} = 'Data analysis directory'; list.fed(end+1, :) = {'dir', ...
list.fed{end,3} = 'char'; 'Data analysis directory', 'char', 1};
list.fed{end,4} = 1; list.fed(end+1, :) = {'dct_vol', ...
list.fed{end+1,1} = 'dct_vol'; list.fed{end,2} = 'Dct reconstructed volume filename (.edf)'; 'Dct reconstructed volume filename (.edf)', 'char', 1};
list.fed{end,3} = 'char'; list.fed(end+1, :) = {'dct_offset', ...
list.fed{end,4} = 1; 'Offset to be applied to the volume [x y z]', 'double', 1};
list.fed{end+1,1} = 'dct_offset'; list.fed{end,2} = 'Offset to be applied to the volume [x y z]'; list.fed(end+1, :) = {'renumber_list', ...
list.fed{end,3} = 'double'; % size (1,3) 'Renumbering list for grainID', 'double', 1};
list.fed{end,4} = 1;
list.fed{end+1,1} = 'renumber_list'; list.fed{end,2} = 'Renumbering list for grainID';
list.fed{end,3} = 'double'; % row vector
list.fed{end,4} = 1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% oar % oar
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list.oar = []; list.oar = cell(0, 4);
list.oar{end+1,1} = 'njobs'; list.oar{end,2} = 'Number of OAR jobs?'; list.oar(end+1, :) = {'njobs', ...
list.oar{end,3} = 'double'; % scalar 'Number of OAR jobs?', 'double', 1};
list.oar{end,4} = 1; list.oar(end+1, :) = {'walltime', ...
list.oar{end+1,1} = 'walltime'; list.oar{end,2} = 'Walltime for OAR? (in seconds)'; 'Walltime for OAR? (in seconds)', 'double', 1};
list.oar{end,3} = 'double'; % scalar list.oar(end+1, :) = {'mem', ...
list.oar{end,4} = 1; 'Total memory required? (Mb)', 'double', 1};
list.oar{end+1,1} = 'mem'; list.oar{end,2} = 'Total memory required? (Mb)';
list.oar{end,3} = 'double'; % scalar
list.oar{end,4} = 1;
end % end of function end % end of function
...@@ -48,63 +48,73 @@ if isstruct(list) ...@@ -48,63 +48,73 @@ if isstruct(list)
for ii = 1:length(names) for ii = 1:length(names)
out.odisp(['### structure ' names{ii} ' ###']) name = names{ii};
if ~isstruct(list.(names{ii})) out.odisp(['### structure ' name ' ###'])
for jj = 1:size(list.(names{ii}), 1) if ~isstruct(list.(name))
for jj = 1:size(list.(name), 1)
try
sub_field_name = list.(name){jj, 1};
sub_field_type = list.(name){jj, 3};
catch mexc
name
jj
rethrow(mexc)
end
if strcmpi(list.(names{ii}){jj, 3}, 'char') switch (lower(sub_field_type))
field.(names{ii}).(list.(names{ii}){jj, 1}) = char([]); case 'char'
%out.odisp('Found char...') field.(name).(sub_field_name) = char([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'single') %out.odisp('Found char...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = single([]); case 'single'
%out.odisp('Found single...') field.(name).(sub_field_name) = single([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'double') %out.odisp('Found single...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = double([]); case 'double'
%out.odisp('Found double...') field.(name).(sub_field_name) = double([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'int8') %out.odisp('Found double...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = int8([]); case 'int8'
%out.odisp('Found int8...') field.(name).(sub_field_name) = int8([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'int16') %out.odisp('Found int8...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = int16([]); case 'int16'
%out.odisp('Found int16...') field.(name).(sub_field_name) = int16([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'int32') %out.odisp('Found int16...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = int32([]); case 'int32'
%out.odisp('Found int32...') field.(name).(sub_field_name) = int32([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'int64') %out.odisp('Found int32...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = int64([]); case 'int64'
%out.odisp('Found int64...') field.(name).(sub_field_name) = int64([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'uint') %out.odisp('Found int64...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = uint([]); case 'uint'
%out.odisp('Found uint...') field.(name).(sub_field_name) = uint([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'uint8') %out.odisp('Found uint...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = uint8([]); case 'uint8'
%out.odisp('Found uint8...') field.(name).(sub_field_name) = uint8([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'uint16') %out.odisp('Found uint8...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = uint16([]); case 'uint16'
%out.odisp('Found uint16...') field.(name).(sub_field_name) = uint16([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'uint32') %out.odisp('Found uint16...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = uint32([]); case 'uint32'
%out.odisp('Found uint32...') field.(name).(sub_field_name) = uint32([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'uint64') %out.odisp('Found uint32...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = uint64([]); case 'uint64'
%out.odisp('Found uint64...') field.(name).(sub_field_name) = uint64([]);
elseif strcmpi(list.(names{ii}){jj, 3}, 'logical') %out.odisp('Found uint64...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = false(); case 'logical'
%out.odisp('Found logical...') field.(name).(sub_field_name) = false();
elseif strcmpi(list.(names{ii}){jj, 3}, 'cell') %out.odisp('Found logical...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = cell(1, 1); case 'cell'
%out.odisp('Found cell...') field.(name).(sub_field_name) = cell(1, 1);
elseif strcmpi(list.(names{ii}){jj, 3}, 'struct') %out.odisp('Found cell...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = struct(); case 'struct'
out.odisp('Found structure...') field.(name).(sub_field_name) = struct();
else out.odisp('Found structure...')
field.(names{ii}).(list.(names{ii}){jj, 1}) = NaN; otherwise
field.(name).(sub_field_name) = NaN;
end end
end % end for loop jj end % end for loop jj
else else
out.odisp(['Found structure... Run again the function with input the structure <oldinput>.' names{ii}]) out.odisp(['Found structure... Run again the function with input the structure <oldinput>.' name])
end % end isstruct(list.(names{ii})) end % end isstruct(list.(name))
end % end for loop ii end % end for loop ii
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment