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

GtSample/GtPhase: added infrastructure for holding the information about...

GtSample/GtPhase: added infrastructure for holding the information about extended grains and clusters of grains

Signed-off-by: default avatarNicola Vigano <nicola.vigano@esrf.fr>
parent 6848cca3
No related branches found
No related tags found
No related merge requests found
classdef GtGrain < handle % XXX - To be removed after 31/12/2014
properties
mergedIDs = [];
threshold = 0;
selectedDiffspots = [];
end
end
......@@ -3,20 +3,25 @@ classdef GtPhase < handle
% grains are organized in a performance oriented structure and get/set methods
% are provided, to aid the consistent use of the class.
properties
grains = {}; % XXX - To be removed after 31/12/2014
selectedGrains = []; % Booleans that enable/disable grains
completeness = []; % Index of completeness of a grain [0, 1]
center = []; % Center of mass of the grain
R_vector = []; % Orientation (in Rodrigues space) of the grain
boundingBox = []; % Bounding Box: [x y z lx ly lz] ?
active = true; % Boolean that enables/disables the phase
phaseName = ''; % Recognisable name for the phase
volumeFile = ''; % Path of the mat file which contains the data.
% The syntax is: 'filename:field' where field is
% the field in the mat file which actually contains
% the volume.
bboxExtremes = [];
selectedGrains = true(0, 1); % Booleans that enable/disable grains
completeness = zeros(0, 1); % Index of completeness of a grain [0, 1]
center = zeros(0, 3); % Center of mass of the grain
R_vector = zeros(0, 3); % Orientation (in Rodrigues space) of the grain
boundingBox = zeros(0, 6); % Bounding Box: [x y z lx ly lz] ?
active = true; % Boolean that enables/disables the phase
phaseName = ''; % Recognisable name for the phase
volumeFile = ''; % Path of the mat file which contains the data.
% The syntax is: 'filename:field' where field is
% the field in the mat file which actually contains
% the volume.
bboxExtremes = zeros(0, 6);
orderedPositions = {};
use_extended = false(0, 1);
extended_params = GtPhase.makeExtendedField(cell(0, 1), cell(0, 1));
clusters = GtPhase.makeCluster( ...
cell(0, 1), cell(0, 1), cell(0, 1), cell(0, 1), cell(0, 1));
end
properties (Access = public, Hidden = true)
......@@ -53,6 +58,12 @@ classdef GtPhase < handle
obj.boundingBox = zeros(number, 6);
obj.bboxExtremes = zeros(number, 6);
obj.orderedPositions = {};
obj.use_extended = false(number, 1);
temp_init_cell = cell(number, 1);
obj.extended_params = GtPhase.makeExtendedField(temp_init_cell, temp_init_cell);
obj.clusters = GtPhase.makeCluster( ...
cell(0, 1), cell(0, 1), cell(0, 1), cell(0, 1), cell(0, 1));
end
function pushGrain(obj)
......@@ -67,6 +78,10 @@ classdef GtPhase < handle
obj.boundingBox = [obj.boundingBox; 0 0 0 0 0 0];
obj.bboxExtremes = [obj.bboxExtremes; 0 0 0 0 0 0];
obj.orderedPositions = {};
obj.use_extended = [obj.use_extended; false];
obj.extended_params = [obj.extended_params; ...
GtPhase.makeExtendedField([], [])];
end
function copy = getCopy(obj)
......@@ -84,6 +99,10 @@ classdef GtPhase < handle
copy.bboxExtremes = obj.bboxExtremes;
copy.orderedPositions = obj.orderedPositions;
copy.use_extended = obj.use_extended;
copy.extended_params = obj.extended_params;
copy.clusters = obj.clusters;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......@@ -119,7 +138,11 @@ classdef GtPhase < handle
function setMergeIDs(obj, grainid, ids)
obj.grains{grainid}.mergeIDs = ids;
end
function setUseExtended(obj, grainid, use_ext)
obj.use_extended(grainid, 1) = use_ext;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Getter Functions
......@@ -165,6 +188,14 @@ classdef GtPhase < handle
shift = obj.boundingBox(grainid, 1:3);
end
function use_ext = getUseExtended(obj, grainid)
use_ext = obj.use_extended(grainid, 1);
end
function aclusters = getActiveClusters(obj)
aclusters = obj.clusters([obj.clusters(:).active]);
end
% grains fields
function ids = getMergeIDs(obj, grainid)
ids = obj.grains{grainid}.mergeIDs;
......@@ -175,7 +206,7 @@ classdef GtPhase < handle
end
function grainIDs = getGrainsWithCompletenessLessThan(obj, value)
% GTPHASE/GETGRAINSWITHCOMPLETENESSLESSTHAN Gets grains with
% GTPHASE/GETGRAINSWITHCOMPLETENESSLESSTHAN Gets grains with
% (0 < completeness <= value)
grainIDs = find(obj.completeness <= value & obj.completeness > 0);
end
......@@ -184,16 +215,16 @@ classdef GtPhase < handle
% GTPHASE/GETDESELECTEDGRAINS Gets deselected grains
deselected = find(obj.selectedGrains == false);
end
function selected = getSelectedGrains(obj)
% GTPHASE/GETSELECTEDGRAINS Gets selected grains
selected = find(obj.selectedGrains == true);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Analysis Functions
function buildBBSearchList(obj)
% buildBBSearchList(obj)
for ii = 1:size(obj.bboxExtremes, 2)
......@@ -203,7 +234,7 @@ classdef GtPhase < handle
function matchList = simpleSearchBBtouched(obj, point)
% matchList = simpleSearchBBtouched(obj, point)
matchList = find( obj.bboxExtremes(:,1) <= point(1) ...
& obj.bboxExtremes(:,2) <= point(2) ...
& obj.bboxExtremes(:,3) <= point(3) ...
......@@ -216,7 +247,7 @@ classdef GtPhase < handle
function IDs = getNeighbours(obj, grainID, oversize)
% IDs = getNeighbours(obj, grainID, oversize)
if (~exist('oversize', 'var'))
oversize = 1;
end
......@@ -234,11 +265,10 @@ classdef GtPhase < handle
IDs = setdiff(find(all(relativeCenters < (maxDistances * oversize), 2)), grainID);
end
function merge = checkOverlapConflict(obj, id1, id2, pixelsize)
% function merge = checkOverlapConflict(obj, id1, id2, pixelsize)
merge_value1 = false;
merge_value2 = false;
......@@ -254,7 +284,7 @@ classdef GtPhase < handle
if (dist < thr_dist)
merge_value1 = true;
end
% R_vector
r1 = obj.R_vector(id1, :);
r2 = obj.R_vector(id2, :);
......@@ -265,7 +295,7 @@ classdef GtPhase < handle
if (angle < thr_angle)
merge_value2 = true;
end
merge.grainID_1 = id1;
merge.grainID_2 = id2;
merge.center_1 = c1;
......@@ -281,4 +311,30 @@ classdef GtPhase < handle
merge.tobemerged = merge_value1 & merge_value2;
end
end
methods (Access = public, Static)
function extended_grain = makeExtendedField(bb_r_space, bb_o_space)
extended_grain = struct( ...
'bb_r_space', bb_r_space, 'bb_o_space', bb_o_space);
end
function cluster = makeCluster(included_ids, ref_r_vec, bb_r_space, bb_o_space, active)
if (~exist('active', 'var') || isempty(active))
active = false;
end
cluster = struct( ...
'included_ids', included_ids, 'ref_r_vec', ref_r_vec, ...
'bb_r_space', bb_r_space, 'bb_o_space', bb_o_space, ...
'active', active);
end
function obj = loadobj(obj)
% Function to keep some sort of backwards compatibility
if (numel(obj.use_extended) == 0)
obj.use_extended = false(obj.grains_number, 1);
temp_init_cell = cell(obj.grains_number, 1);
obj.extended_params = GtPhase.makeExtendedField(temp_init_cell, temp_init_cell);
end
end
end
end
......@@ -5,7 +5,7 @@ classdef GtSample < handle
volumeFile = '';
dilVolFile = '';
absVolFile = '';
fileTable = '';
version;
......@@ -37,6 +37,12 @@ classdef GtSample < handle
obj.version = GtSample.getCurrentVersion();
end
function delete(obj)
for ii = 1:numel(obj.phases)
delete(obj.phases{ii});
end
end
function copy = getCopy(obj)
num_phases = numel(obj.phases);
copy = GtSample(num_phases, obj.volumeFile, ...
......@@ -70,6 +76,9 @@ classdef GtSample < handle
obj.mergePhaseField(other, phaseNum, 'boundingBox', 0);
% Merge bboxExtremes
obj.mergePhaseField(other, phaseNum, 'bboxExtremes', 0);
% Merge bboxExtremes
obj.mergePhaseField(other, phaseNum, 'use_extended', 0);
end
end
......@@ -84,7 +93,7 @@ classdef GtSample < handle
if (~exist('fieldName', 'var'))
fieldName = 'sample';
end
lock = GtLockDB(fileTable, fileName);
lock.acquire();
......@@ -124,7 +133,7 @@ classdef GtSample < handle
fileName = fullfile('4_grains', 'sample.mat');
end
sample = obj;
sample = obj; %#ok<NASGU>
save(fileName, 'sample', '-v7.3');
end
......@@ -133,8 +142,9 @@ classdef GtSample < handle
% instances to find the grains which have a lower completeness than the
% value
grainIDs = {};
for phaseID = 1:numel(obj.phases)
num_phases = numel(obj.phases);
grainIDs = cell(num_phases, 1);
for phaseID = 1:num_phases
grainIDs{phaseID} = ...
obj.phases{phaseID}.getGrainsWithCompletenessLessThan(value);
end
......@@ -199,7 +209,7 @@ classdef GtSample < handle
lock.release();
end
function sample = loadFromFile(fileName, fieldName)
% GTSAMPLE/LOADFROMFILE Not synchronized loading from a file
......
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