Skip to content
Snippets Groups Projects
Commit e26983bb authored by Laura Nervo's avatar Laura Nervo Committed by Nicola Vigano
Browse files

Conflicts : update routine and add function to solve automatically some conflicts


Signed-off-by: default avatarLaura Nervo <laura.nervo@esrf.fr>

git-svn-id: https://svn.code.sf.net/p/dct/code/trunk@549 4c865b51-4357-4376-afb4-474e03ccb993
parent 4769032e
No related branches found
No related tags found
No related merge requests found
function grains_merge = gtAnalyseForwardSimulation(save_flag, maxnum)
% GTANALYSEFORWARDSIMULATION Try to find a criteria to merge grains with
% difspots in conflict (claimed by more than one grain)
% grains_merge = gtAnalyseForwardSimulation2(save_flag, maxnum)
% -------------------------------------------------------------
% grains_merge = gtAnalyseForwardSimulation(save_flag, maxnum)
% ------------------------------------------------------------
%
% Reads parameters.mat, 4_grains/spot2grain.mat, 4_grains/phase_[phaseid]/index.mat
% Saves 4_grains/grains_merge.mat, 4_grains/conflicts.mat.
......@@ -21,7 +21,7 @@ function grains_merge = gtAnalyseForwardSimulation(save_flag, maxnum)
% INPUT:
% save_flag = flag to save 'grains_merge.mat' <logical> {true}
% maxnum = maximum number of allowed difspots in conflict per
% grain to be consdered not mergeable <double> {5}
% grain to be consdered not mergeable <double> {10}
%
% OUTPUT:
% grains_merge = output for each phase containing info on grains in
......@@ -32,23 +32,25 @@ function grains_merge = gtAnalyseForwardSimulation(save_flag, maxnum)
% .summary{grainid} = GtGrainAnalyser object with :
% .totspots = number of difspots in common with other grains
% <double>
% .idspot = list of difspots conflict <double 2xtotspots>
% .numgrain = number of grains with which shares difspots
% <double>
% .idconflict = list of grain ids in conflict <double 1xnumgrain>
% .delete = logical (true: flag = 1, false: flag = 2)
% .flag = logical (1: lowest grainid, 2: higher grainid)
% .difspotID = vector of difspotID from fsim <double>
%
% .conflicts{grainid} = conflicts structure <cell numgrainx1>
% .difspots = [idconflict, [difspots]] <cell numgrainx1>
% .maxnum = logical <cell numgrainx1>
% .merge = [idconflict, [difspots]] if maxnum = true <cell numgrainx1>
% .allequals = logical <cell numgrainx1>
% .difspots = [idconflict, [difspots]] <cell>
% .maxnum = logical <cell>
% .merge = [idconflict, [difspots]] if maxnum = true <cell>
% .allequals = logical <cell>
%
% .hasConflicts(grainid) = boolean to say if grainid has conflicts <logical numgrainx1>
% .nofConflicts(grainid) = number of conflicts <int numgrainx1>
if ~exist('maxnum','var') || isempty(maxnum)
maxnum = 5;
maxnum = 10;
end
if ~exist('save_flag','var') || isempty(save_flag)
save_flag = true;
......@@ -146,17 +148,16 @@ for phaseid = 1 : num_phases
for grainid = 1 : ngrains(phaseid)
grains_merge{phaseid}.summary{grainid} = GtGrainAnalyser();
grains_merge{phaseid}.conflicts{grainid} = GtConflict();
grains_merge{phaseid}.conflicts{grainid} = [];
g = grain{grainid};
if ~isempty(g)
grains_merge{phaseid}.hasConflicts(grainid) = true;
totspots = size(g,2);
idconflict = unique(g(1,:));
numgrain = length(idconflict);
disp(['grain # ' num2str(grainid) ' has ' num2str(length(idconflict)) ' conflicts!'])
disp(['grain # ' num2str(grainid) ' has ' num2str(numgrain) ' conflicts!'])
listids_all = sort([idconflict, grainid]);
......@@ -164,19 +165,20 @@ for phaseid = 1 : num_phases
grains_merge{phaseid}.summary{grainid}.numgrain = numgrain;
grains_merge{phaseid}.summary{grainid}.idconflict = idconflict;
grains_merge{phaseid}.nofConflicts(grainid) = totspots;
grains_merge{phaseid}.conflicts{grainid} = repmat(GtConflict(),numgrain,1);
for kk = 1 : numgrain
for kk = 1 : length(idconflict)
[tmp_s, tmp_c] = sfCompareGrains(...
grains_merge{phaseid}.summary{grainid}, ...
grains_merge{phaseid}.conflicts{grainid}, ...
grains_merge{phaseid}.conflicts{grainid}(kk), ...
g, grainid, ...
idconflict(kk), kk, ...
idconflict(kk), ...
maxnum ...
);
grains_merge{phaseid}.summary{grainid} = gtAddMatFile(grains_merge{phaseid}.summary{grainid},tmp_s,1,1,1);
grains_merge{phaseid}.conflicts{grainid} = gtAddMatFile(grains_merge{phaseid}.conflicts{grainid},tmp_c,1,1,1);
grains_merge{phaseid}.conflicts{grainid}(kk) = gtAddMatFile(grains_merge{phaseid}.conflicts{grainid}(kk),tmp_c,1,1,1);
end
else % no conflicts
......@@ -189,6 +191,7 @@ for phaseid = 1 : num_phases
end % end for phaseid
if save_flag
copyfile(fullfile(filedir,'grains_merge.mat'),fullfile(filedir,['grains_merge_' datestr(now(),'dd-mm-yyyy') '.mat']))
save(fullfile(filedir,'grains_merge.mat'),'grains_merge');
end
......@@ -201,8 +204,8 @@ end % end of function
% sub-functions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [s,c] = sfCompareGrains(summary, conflicts, grain, idgrain, idconflict, kk, maxnum)
% [s,c] = sfCompareGrains(summary, grain, idgrain, idconflict, kk, maxnum)
function [s,c] = sfCompareGrains(summary, conflicts, grain, idgrain, idconflict, maxnum)
% [s,c] = sfCompareGrains(summary, grain, idgrain, idconflict, maxnum)
% ------------------------------------------------------------------------
%
% INPUT:
......@@ -211,7 +214,6 @@ function [s,c] = sfCompareGrains(summary, conflicts, grain, idgrain, idconflict,
% grain = current grains_merge{phaseid}.grain{idgrain} <double 2xM>
% idgrain = grainid <double>
% idconflict = grainid for another grain in conflict <double>
% kk = iterator over the list of grains in conflicts <int>
% maxnum = maximum number of difspots allowed in order not to be
% merged <int>
%
......@@ -220,7 +222,8 @@ function [s,c] = sfCompareGrains(summary, conflicts, grain, idgrain, idconflict,
% c = conflicts{idgrain} updated! <GtConflict>
s = summary;
c = conflicts;
numgrain = s.numgrain;
c = conflicts;
if idgrain < idconflict
s.delete = false;
......@@ -233,21 +236,20 @@ else
end
current_spots = sfGetDifspotsConflicts(grain, idconflict);
c(kk).difspots = {idconflict, current_spots};
c.difspots = {idconflict, current_spots};
s.idspot = [s.idspot, current_spots];
if length(current_spots) >= maxnum
c(kk).maxnum = true;
c(kk).merge = c(kk).difspots;
if length(current_spots) > maxnum
c.maxnum = true;
else
c(kk).maxnum = false;
c(kk).merge = [];
c.maxnum = false;
end
orig_spots = unique(grain(2,:));
if isempty(setdiff(orig_spots, current_spots))
c(kk).allequals = true;
c.allequals = true;
else
c(kk).allequals = false;
c.allequals = false;
end
end % end sfCompareGrains
......
function sample = gtSolveGrainsConflicts(maxnum, save_flag)
% GTSOLVEGRAINSCONFLICTS
% sample = gtSolveGrainsConflicts(maxnum, save_flag)
% --------------------------------------------------
% To be run in the analysis directory after gtUpdateGrainsConflicts
%
% INPUT:
% maxnum = maximum number of spots to be discarded <double> {4}
% save_flag = flag to save 4_grains/sample.mat and 4_grains/spot2grain.mat
% <logical> {false}
%
% OUTPUT:
% sample = updated sample.mat <struct>
%
% Version 003 15-06-2012 by LNervo
% sample.phases{phaseid}.summary{grainid}.flag can be:
% 0 - no conflict
% 1 - conflict and threshold < 0
% 2 - conflict and (completeness - mean) < 3*std
% 3 - conflict and totspots < maxnum
if ~exist('maxnum','var') || isempty(maxnum)
maxnum = 4;
end
if ~exist('save_flag','var') || isempty(save_flag)
save_flag = false;
end
out = [];
sample = [];
spot2grain = [];
spot2phase = [];
sampleFile = fullfile('4_grains','sample.mat');
spot2grainFile = fullfile('4_grains','spot2grain.mat');
load(sampleFile);
load(spot2grainFile);
num_phases = length(sample.phases);
difspots_list = [];
for phaseid = 1 : num_phases
phase = sample.phases{phaseid};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% get grains with threshold < 0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
grainIDs_thr = phase.getGrainsWithFieldValueLessThan('threshold', 0);
% set phase.selectedGrains = false
arrayfun(@(array) phase.setSelected(array, false), grainIDs_thr);
% set summary.flag = 1
arrayfun(@(array) phase.setFlag(array, 1), grainIDs_thr);
disp(['Deselected ' num2str(length(grainIDs_thr)) ' grains with threshold < 0'])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% get grains with (completeness - mean ) < 3*std
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
thr_com = mean(phase.completeness(:))-3*std(phase.completeness(:));
grainIDs_com = phase.getGrainsWithCompletenessLessThan(thr_com)'; % row vector
% set phase.selectedGrains = false
arrayfun(@(array) phase.setSelected(array, false), grainIDs_com);
% set summary.flag = 2
arrayfun(@(array) phase.setFlag(array, 2), grainIDs_com);
disp(['Deselected ' num2str(length(grainIDs_com)) ' grains with (completeness - mean) < 3*std: ' num2str(thr_com)])
clear thr_com
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% get deselected grains
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
grainIDs_desel = phase.getDeselectedGrains();
% set delete = true
arrayfun(@(array) phase.setDelete(array, true), grainIDs_desel);
disp(['Set summary.delete = true for ' num2str(length(grainIDs_desel)) ' grains'])
% get grainIDs with hasConflicts=true
hasC = arrayfun(@(array) phase.getHasConflicts(array), grainIDs_desel);
% set idspot for grainIDs_desel(hasC)
idspot = arrayfun(@(array) phase.buildIdSpot(array), grainIDs_desel(hasC), 'UniformOutput', false);
disp(['Set summary.idspot for ' num2str(length(grainIDs_desel(hasC))) ' grains'])
% create difspots_list and grains_list (only grains with conflicts)
list_desel = [idspot{:}];
grains_list_desel = unique(grainIDs_desel(hasC));
if ~isempty(list_desel)
difspots_list = unique(list_desel);
% update spot2grain and spot2phase
for ii = 1 : length(grains_list_desel)
for jj = 1 : length(difspots_list)
index = spot2grain{difspots_list(jj)}==grains_list_desel(ii);
spot2grain{difspots_list(jj)}(index)=[];
spot2phase{difspots_list(jj)}(index)=[];
end
end
disp(['Updated spot2grain.mat for ' num2str(length(difspots_list)) ' difspots in conflict with ' num2str(length(grains_list_desel)) ' grains'])
end
% for each deselected grain with conflict, get idconflict
ids = arrayfun(@(num) phase.getIdConflict(num), grainIDs_desel(hasC), 'UniformOutput', false);
idconflicts_desel = unique([ids{:}]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% deselect difspots in conflict from grains{grainid} still in conflicts
% if difspots <= maxnum
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
grainIDs = find(phase.getSelected(:)==true & phase.getHasConflicts(:)==true)'; % row vector
% set idspot for grainIDs
idspot = arrayfun(@(array) phase.buildIdSpot(array), grainIDs, 'UniformOutput', false);
disp(['Set summary.idspot for ' num2str(length(grainIDs)) ' grains'])
% difspots <= maxnum
grainIDs_max = phase.getGrainsWithNofConflictsLessThan(maxnum)'; % row vector
% get all the grains.selectedDiffspots
disp(['Found ' num2str(length(grainIDs_max)) ' grains with less than ' num2str(maxnum) ' difspots in conflict'])
% get indexes for each grain of difspots in conflict
indexes = arrayfun(@(array) phase.getIdSpotIndexes(array), grainIDs_max, 'UniformOutput', false);
% set to false in grains{grainid}.selectedDiffspots
arrayfun(@(num) phase.setSelectedDiffspotsIndexes(grainIDs_max(num), indexes{num}, false), 1:length(indexes));
disp(['Set grains{grainid}.selectedDiffspots(indexes) = false for ' num2str(length(grainIDs_max)) ' grains'])
% set summary.flag = 3
arrayfun(@(array) phase.setFlag(array, 3), grainIDs_max);
% set summary.delete = false & summary.delete
arrayfun(@(array) phase.setDelete(array, false & phase.getDelete(array)), grainIDs_max);
list_max = [idspot{:}];
grains_list_max = unique(grainIDs_max);
if ~isempty(list_max)
difspots_list = unique([list_desel, list_max]);
% update spot2grain and spot2phase
for ii = 1 : length(grains_list_max)
for jj = 1 : length(difspots_list)
index = spot2grain{difspots_list(jj)}==grains_list_max(ii);
spot2grain{difspots_list(jj)}(index)=[];
spot2phase{difspots_list(jj)}(index)=[];
end
end
disp(['Updated spot2grain.mat for ' num2str(length(difspots_list)) ' difspots in conflict with ' num2str(length(grains_list_max)) ' grains'])
end
% for each modified grain with conflict, get idconflict
ids = arrayfun(@(num) phase.getIdConflict(num), grainIDs_max, 'UniformOutput', false);
idconflicts_max = unique([ids{:}]);
idconflicts_list = unique([idconflicts_desel, idconflicts_max]');
out{phaseid}.deselected = grainIDs_desel';
out{phaseid}.modified = grainIDs_max';
out{phaseid}.difspots_list = difspots_list;
out{phaseid}.conflicts_list = idconflicts_list;
out{phaseid}.spot2grain = {spot2grain, spot2phase};
sample.phases{phaseid} = phase;
end % end for phaseid
output_spots = [];
output_spots.spot2grain = spot2grain;
output_spots.spot2phase = spot2phase;
outname = fullfile('4_grains','out.mat');
save(outname,'out');
disp('Saved output in 4_grains/out.mat')
if save_flag
copyfile(fullfile('4_grains','sample.mat'),fullfile('4_grains',['sample_' datestr(now,'dd-mm-yyyy') '.mat']));
save(fullfile('4_grains','sample.mat'),'sample');
disp('Updated 4_grains/sample.mat')
copyfile(fullfile('4_grains','spot2grain.mat'),fullfile('4_grains',['spot2grain_' datestr(now,'dd-mm-yyyy') '.mat']));
save(fullfile('4_grains','spot2grain.mat'),'-struct','output_spots');
disp('Updated 4_grains/spot2grain.mat')
disp(' ')
disp('Please run again ''gtAnalyseForwardSimulation'' and ''gtUpdateGrainsConflicts'' to update completely sample.mat!')
end
end % end of function
function gtUpdateGrainsConflicts()
function sample = gtUpdateGrainsConflicts(save_flag)
% GTUPDATEGRAINSCONFLICTS
% gtUpdateGrainsConflicts()
% -------------------------
% sample = gtUpdateGrainsConflicts(save_flag)
% -------------------------------------------
% Loads 4_grains/sample.mat and 4_grains/grains_merge.mat
% Updates info from grains_merge.mat:
% sample.phases{}.summary
......@@ -9,6 +9,11 @@ function gtUpdateGrainsConflicts()
% sample.phases{}.hasConflicts
% sample.phases{}.nofConflicts
if ~exist('save_flag','var') || isempty(save_flag)
save_flag = true;
end
grains_merge = [];
sample = [];
......@@ -29,11 +34,18 @@ for phaseid = 1 : length(sample.phases)
phase.setIdConflict(grainid, merge.summary{grainid}.idconflict);
phase.setDelete(grainid, merge.summary{grainid}.delete);
phase.setFlag(grainid, merge.summary{grainid}.flag);
phase.setIdSpot(grainid, merge.summary{grainid}.idspot);
if merge.summary{grainid}.numgrain > 1
phase.conflicts{grainid} = repmat(GtConflict(), phase.getNumGrain(grainid), 1);
end
phase.setDifspots(grainid, merge.conflicts{grainid}.difspots);
phase.setMaxNum(grainid, merge.conflicts{grainid}.maxnum);
phase.setMerge(grainid, merge.conflicts{grainid}.merge);
phase.setAllEquals(grainid, merge.conflicts{grainid}.allequals);
for conflictid = 1 : phase.getNumGrain(grainid)
phase.setDifspots(grainid, conflictid, merge.conflicts{grainid}(conflictid).difspots);
phase.setMaxNum(grainid, conflictid, merge.conflicts{grainid}(conflictid).maxnum);
phase.setMerge(grainid, conflictid, merge.conflicts{grainid}(conflictid).merge);
phase.setAllEquals(grainid, conflictid, merge.conflicts{grainid}(conflictid).allequals);
end
phase.setHasConflicts(grainid, merge.hasConflicts(grainid));
phase.setNofConflicts(grainid, merge.nofConflicts(grainid));
......@@ -43,8 +55,11 @@ for phaseid = 1 : length(sample.phases)
sample.phases{phaseid} = phase;
end
disp(' ')
disp(['Updating file ' filename '...'])
save(fullfile(filedir,'sample.mat'),'sample');
if save_flag
disp(' ')
disp(['Updating file ' filename '...'])
save(fullfile(filedir,'sample.mat'),'sample');
end
end % end of function
......@@ -2,6 +2,7 @@ classdef GtGrainAnalyser
properties
totspots = [];
idspot = [];
numgrain = [];
idconflict = [];
delete = false;
......
......@@ -78,6 +78,8 @@ classdef GtPhase < handle
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Setter Functions
% phase fields
function setHasConflicts(obj, grainid, hasConf)
obj.hasConflicts(grainid, 1) = hasConf;
end
......@@ -111,6 +113,7 @@ classdef GtPhase < handle
obj.bboxExtremes(grainid, :) = [bbox(1:3) (bbox(1:3) + bbox(4:6) -1) ];
end
% grains fields
function setThreshold(obj, grainid, thr)
obj.grains{grainid}.threshold = thr;
end
......@@ -118,11 +121,28 @@ classdef GtPhase < handle
function setSelectedDiffspots(obj, grainid, selDiffspots)
obj.grains{grainid}.selectedDiffspots = selDiffspots;
end
function setSelectedDiffspotsIndexes(obj, grainid, indexes, value)
obj.grains{grainid}.selectedDiffspots(indexes) = value;
end
% summary fields
function setTotSpots(obj, grainid, tot)
obj.summary{grainid}.totspots = tot;
end
function setIdSpot(obj, grainid, id)
obj.summary{grainid}.idspot = id;
end
function setIdSpotIndexes(obj, grainid, ind)
obj.summary{grainid}.idspot(2,:) = ind;
end
function setIdSpotIds(obj, grainid, ids)
obj.summary{grainid}.idspot(1,:) = ids;
end
function setNumGrain(obj, grainid, num)
obj.summary{grainid}.numgrain = num;
end
......@@ -143,31 +163,32 @@ classdef GtPhase < handle
obj.summary{grainid}.difspotID = spots;
end
function setDifspots(obj, grainid, spots)
obj.conflicts{grainid}.difspots = spots;
% conflicts fields
function setDifspots(obj, grainid, conflictid, spots)
obj.conflicts{grainid}(conflictid).difspots = spots;
end
function setMaxNum(obj, grainid, max)
obj.conflicts{grainid}.maxnum = max;
function setMaxNum(obj, grainid, conflictid, max)
obj.conflicts{grainid}(conflictid).maxnum = max;
end
function setMerge(obj, grainid, m)
obj.conflicts{grainid}.merge = m;
function setMerge(obj, grainid, conflictid, m)
obj.conflicts{grainid}(conflictid).merge = m;
end
function setAllEquals(obj, grainid, alleq)
obj.conflicts{grainid}.allequals = alleq;
function setAllEquals(obj, grainid, conflictid, alleq)
obj.conflicts{grainid}(conflictid).allequals = alleq;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Getter Functions
% phase fields
function hasC = getHasConficts(obj, grainid)
function hasC = getHasConflicts(obj, grainid)
hasC = obj.hasConflicts(grainid, 1);
end
function nofC = getNofConficts(obj, grainid)
function nofC = getNofConflicts(obj, grainid)
nofC = obj.nofConflicts(grainid, 1);
end
......@@ -216,7 +237,19 @@ classdef GtPhase < handle
function tot = getTotSpots(obj, grainid)
tot = obj.summary{grainid}.totspots;
end
function idspot = getIdSpot(obj, grainid)
idspot = obj.summary{grainid}.idspot;
end
function indexes = getIdSpotIndexes(obj, grainid)
indexes = obj.summary{grainid}.idspot(2,:);
end
function ids = getIdSpotIds(obj, grainid)
ids = obj.summary{grainid}.idspot(1,:);
end
function num = getNumGrain(obj, grainid)
num = obj.summary{grainid}.numgrain;
end
......@@ -242,24 +275,24 @@ classdef GtPhase < handle
end
% conflicts fields
function spots = getDifspots(obj, grainid)
spots = obj.conflicts{grainid}.difspots;
function spots = getDifspots(obj, grainid, conflictid)
spots = obj.conflicts{grainid}(conflictid).difspots;
end
function max = getMaxNum(obj, grainid)
max = obj.conflicts{grainid}.maxnum;
function max = getMaxNum(obj, grainid, conflictid)
max = obj.conflicts{grainid}(conflictid).maxnum;
end
function m = getMerge(obj, grainid)
m = obj.conflicts{grainid}.merge;
function m = getMerge(obj, grainid, conflictid)
m = obj.conflicts{grainid}(conflictid).merge;
end
function alleq = getAllEquals(obj, grainid)
alleq = obj.conflicts{grainid}.allequals;
function alleq = getAllEquals(obj, grainid, conflictid)
alleq = obj.conflicts{grainid}(conflictid).allequals;
end
function conflicts = getConflicts(obj, grainid)
conflicts = obj.conflicts{grainid};
function conflicts = getConflicts(obj, grainid, conflictid)
conflicts = obj.conflicts{grainid}(conflictid);
end
% get all values from grains
......@@ -276,8 +309,13 @@ classdef GtPhase < handle
% get all values from conflicts
function allvalues = getAllValuesFromConflictsField(obj, field)
conflictsArray = [obj.conflicts{:}];
allvalues = cellfun(@(name) name, {conflictsArray.(field)});
conflictsArray = [obj.conflicts];
allvalues = [];
for i = 1 : length(conflictsArray)
for j = 1 : size(conflictsArray{i},1)
allvalues = [allvalues, conflictsArray{i}(j).(field)];
end
end
end
% less than
......@@ -291,14 +329,34 @@ classdef GtPhase < handle
grainIDs = find(allvalues < value);
end
function grainIDs = getConflictsWithFieldValueLessThan(obj, field, value)
function grainIDs = getSummaryWithFieldValueEqualsTo(obj, field, value)
allvalues = getAllValuesFromSummaryField(obj, field);
grainIDs = find(allvalues == value);
end
function grainIDs = getConflictsWithFieldValueEqualsTo(obj, field, value)
allvalues = getAllValuesFromConflictsField(obj, field);
grainIDs = find(allvalues < value);
nofC = obj.nofConflicts(:);
ind = nofC;
ind(ind<2)=1;
indtot = cumsum(ind,1);
nofCtot = cumsum(nofC,1);
grainIDs = find(allvalues == value);
[~,pippo] = intersect(indtot, grainIDs);
missing = setdiff(grainIDs, indtot);
missing = missing+1;
[~,pippo2] = intersect(indtot, missing);
end
% between 0 and value
function grainIDs = getGrainsWithNofConflictsLessThan(obj, value)
grainIDs = find(obj.nofConflicts < value & obj.nofConflicts > 0);
grainIDs = find(obj.nofConflicts < value & obj.hasConflicts);
end
function grainIDs = getGrainsWithCompletenessLessThan(obj, value)
......@@ -307,23 +365,33 @@ classdef GtPhase < handle
function grainIDs = getGrainsWithDiffspotsNumLessThan(obj, value)
grainsArray = [obj.grains{:}];
numDiffSpots = cellfun(@length, {grainsArray.('selectedDiffspots')});
grainIDs = find(numDiffSpots < value & numDiffSpots > 0);
numDiffSpots = cellfun(@length, {grainsArray.selectedDiffspots});
grainIDs = find(numDiffSpots < value);
end
function numDiffSpots = getSelectedDiffspotsNum(obj, grainid)
diffSpots = find(obj.grains{grainid}.selectedDiffspots == true);
numDiffSpots = length(diffSpots);
end
function spotIDs = getSelectedDiffspotsTrue(obj, grainid)
spotIDs = find(obj.grains{grainid}.selectedDiffspots == true);
end
% more than value
function grainIDs = getGrainsWithNofConflictsMoreThan(obj, value)
grainIDs = find(obj.nofConflicts > value);
grainIDs = find(obj.nofConflicts > value & obj.hasConflicts);
end
% logical values
function inconflict = getConflictsGrains(obj)
function inconflict = getHasConflictsTrue(obj)
inconflict = find(obj.hasConflicts == true);
end
function deselected = getDeselectedGrains(obj)
deselected = find(obj.selectedGrains == false);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Analysis Functions
......@@ -343,5 +411,28 @@ classdef GtPhase < handle
& obj.bboxExtremes(:,6) >= point(3) ...
);
end
function idspot = buildIdSpot(obj, grainid)
difspotID = obj.summary{grainid}.difspotID'; % row vector
idspot = obj.summary{grainid}.idspot; % row vector
if ~isempty(idspot)
if size(idspot,1) < size(idspot,2)
idspot = idspot(1,:);
else
idspot = idspot(:,1);
end
if size(difspotID,1) ~= size(idspot,1)
idspot = idspot';
end
[spots, ind] = intersect(difspotID, idspot);
IDspot(1,:) = spots;
IDspot(2,:) = ind;
obj.summary{grainid}.idspot = IDspot;
else
spots = [];
obj.summary{grainid}.idspot = [];
end
idspot = spots;
end
end
end
......@@ -51,6 +51,7 @@ classdef GtSample < handle
obj.mergeSummaryField(other, phaseNum, grainNum, 'idconflict', []);
obj.mergeSummaryField(other, phaseNum, grainNum, 'numgrain', []);
obj.mergeSummaryField(other, phaseNum, grainNum, 'totspots', []);
obj.mergeSummaryField(other, phaseNum, grainNum, 'idspot', []);
obj.mergeSummaryField(other, phaseNum, grainNum, 'difspotID', []);
end
for grainNum = 1:length(other.phases{phaseNum}.conflicts)
......
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