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

sample.mat : fix bug with spot2grain and sample loading and updating...


routine:

gtSetupForwardSimulation
	gtFsimCheckMissingGrains
		gtFsimRunMissingGrains
gtSetupReconstruction
gtCreateGtSample

Conflicts : update and improving the routine.

gtAnalyseForwardSimulation
gtUpdateGrainsConflicts

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

git-svn-id: https://svn.code.sf.net/p/dct/code/trunk@536 4c865b51-4357-4376-afb4-474e03ccb993
parent 6697ad2c
No related branches found
No related tags found
No related merge requests found
......@@ -37,7 +37,6 @@ function grains_merge = gtAnalyseForwardSimulation(save_flag, maxnum)
% .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)
% .alluniquespots = [grainid, [difspots]] <cell>
%
% .conflicts{grainid} = conflicts structure <cell numgrainx1>
% .difspots = [idconflict, [difspots]] <cell numgrainx1>
......@@ -164,7 +163,8 @@ for phaseid = 1 : num_phases
grains_merge{phaseid}.summary{grainid}.totspots = totspots;
grains_merge{phaseid}.summary{grainid}.numgrain = numgrain;
grains_merge{phaseid}.summary{grainid}.idconflict = idconflict;
grains_merge{phaseid}.nofConflicts(grainid) = totspots;
for kk = 1 : length(idconflict)
[tmp_s, tmp_c] = sfCompareGrains(...
......@@ -177,7 +177,6 @@ for phaseid = 1 : num_phases
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}.nofConflicts(grainid) = length(idconflict);
end
else % no conflicts
......@@ -233,9 +232,6 @@ else
return;
end
orig_spots = unique(grain(2,:));
s.alluniquespots = {idgrain, orig_spots};
current_spots = sfGetDifspotsConflicts(grain, idconflict);
c(kk).difspots = {idconflict, current_spots};
......@@ -247,6 +243,7 @@ else
c(kk).merge = [];
end
orig_spots = unique(grain(2,:));
if isempty(setdiff(orig_spots, current_spots))
c(kk).allequals = true;
else
......
......@@ -15,7 +15,7 @@ sample = [];
filedir = fullfile('4_grains');
load(fullfile(filedir,'grains_merge.mat'));
filename = fullfile(filedir,'sample.mat');
load(fullfile(filedir,'sample.mat'));
load(filename);
for phaseid = 1 : length(sample.phases)
......@@ -23,13 +23,12 @@ for phaseid = 1 : length(sample.phases)
merge = grains_merge{phaseid};
for grainid = 1 : length(phase.grains)
fprintf('\b\b\b\b\b\b\b\b\b\b')
fprintf('\b\b\b\b\b\b\b\b\b')
phase.setTotSpots(grainid, merge.summary{grainid}.totspots);
phase.setNumGrain(grainid, merge.summary{grainid}.numgrain);
phase.setIdConflict(grainid, merge.summary{grainid}.idconflict);
phase.setDelete(grainid, merge.summary{grainid}.delete);
phase.setFlag(grainid, merge.summary{grainid}.flag);
phase.setAllUniqueSpots(grainid, merge.summary{grainid}.alluniquespots);
phase.setDifspots(grainid, merge.conflicts{grainid}.difspots);
phase.setMaxNum(grainid, merge.conflicts{grainid}.maxnum);
......
classdef GtGrainAnalyser
properties
totspots = [];
numgrain = [];
idconflict = [];
delete = false;
flag = 0;
alluniquespots = {};
totspots = [];
numgrain = [];
idconflict = [];
delete = false;
flag = 0;
difspotID = [];
end
end
......@@ -139,8 +139,8 @@ classdef GtPhase < handle
obj.summary{grainid}.flag = f;
end
function setAllUniqueSpots(obj, grainid, allunique)
obj.summary{grainid}.alluniquespots = allunique;
function setDifspotID(obj, grainid, spots)
obj.summary{grainid}.difspotID = spots;
end
function setDifspots(obj, grainid, spots)
......@@ -161,43 +161,24 @@ classdef GtPhase < handle
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Getter Functions
% phase fields
function hasC = getHasConficts(obj, grainid)
hasC = obj.hasConflicts(grainid, 1);
end
function inconflict = getConflictsGrains(obj)
inconflict = find(obj.hasConflicts == true);
end
function nofC = getNofConficts(obj, grainid)
nofC = obj.nofConflicts(grainid, 1);
end
function grainIDs = getGrainsWithNofConflictsLessThan(obj, value)
grainIDs = find(obj.nofConflicts < value & obj.nofConflicts > 0);
end
function grainIDs = getGrainsWithNofConflictsMoreThan(obj, value)
grainIDs = find(obj.nofConflicts > value);
end
function sel = getSelected(obj, grainid)
sel = obj.selectedGrains(grainid, 1);
end
function deselected = getDeselectedGrains(obj)
deselected = find(obj.selectedGrains == false);
end
function compl = getCompleteness(obj, grainid)
compl = obj.completeness(grainid, 1);
end
function grainIDs = getGrainsWithCompletenessLessThan(obj, value)
grainIDs = find(obj.completeness < value);
end
function center = getCenter(obj, grainid)
center = obj.center(grainid, :);
end
......@@ -218,6 +199,7 @@ classdef GtPhase < handle
shift = obj.boundingBox(grainid, 1:3);
end
% grains fields
function thr = getThreshold(obj, grainid)
thr = obj.grains{grainid}.threshold;
end
......@@ -226,18 +208,11 @@ classdef GtPhase < handle
selDiffspots = obj.grains{grainid}.selectedDiffspots;
end
function grainIDs = getGrainsWithDifspotsNumLessThan(obj, value)
grainsArray = [obj.grains{:}];
% Using the cell is much faster (5.6/1.2 ratio)
% numDifSpots = arrayfun(@(x)length(x.('selectedDiffspots')), grainsArray);
numDifSpots = cellfun(@length, {grainsArray.('selectedDiffspots')});
grainIDs = find(numDifSpots < value);
end
function grain = getGrain(obj, grainid)
grain = obj.grains{grainid};
end
% summary fields
function tot = getTotSpots(obj, grainid)
tot = obj.summary{grainid}.totspots;
end
......@@ -258,11 +233,15 @@ classdef GtPhase < handle
f = obj.summary{grainid}.flag;
end
function allunique = getAllUniqueSpots(obj, grainid)
allunique = obj.summary{grainid}.alluniquespots;
function ids = getDifspotID(obj, grainid)
ids = obj.summary{grainid}.difspotID;
end
function summary = getSummary(obj, grainid)
summary = obj.summary{grainid};
end
% conflicts fields
function spots = getDifspots(obj, grainid)
spots = obj.conflicts{grainid}.difspots;
end
......@@ -279,14 +258,73 @@ classdef GtPhase < handle
alleq = obj.conflicts{grainid}.allequals;
end
function summary = getSummary(obj, grainid)
summary = obj.summary{grainid};
end
function conflicts = getConflicts(obj, grainid)
conflicts = obj.conflicts{grainid};
end
% get all values from grains
function allvalues = getAllValuesFromGrainsField(obj, field)
grainsArray = [obj.grains{:}];
allvalues = cellfun(@(name) name, {grainsArray.(field)});
end
% get all values from summary
function allvalues = getAllValuesFromSummaryField(obj, field)
summaryArray = [obj.summary{:}];
allvalues = cellfun(@(name) name, {summaryArray.(field)});
end
% get all values from conflicts
function allvalues = getAllValuesFromConflictsField(obj, field)
conflictsArray = [obj.conflicts{:}];
allvalues = cellfun(@(name) name, {conflictsArray.(field)});
end
% less than
function grainIDs = getGrainsWithThresholdLessThan(obj, value)
allvalues = getAllValuesFromGrainsField(obj, 'threshold');
grainIDs = find(allvalues < value);
end
function grainIDs = getSummaryWithFieldValueLessThan(obj, field, value)
allvalues = getAllValuesFromSummaryField(obj, field);
grainIDs = find(allvalues < value);
end
function grainIDs = getConflictsWithFieldValueLessThan(obj, field, value)
allvalues = getAllValuesFromConflictsField(obj, field);
grainIDs = find(allvalues < value);
end
% between 0 and value
function grainIDs = getGrainsWithNofConflictsLessThan(obj, value)
grainIDs = find(obj.nofConflicts < value & obj.nofConflicts > 0);
end
function grainIDs = getGrainsWithCompletenessLessThan(obj, value)
grainIDs = find(obj.completeness < value & obj.completeness > 0);
end
function grainIDs = getGrainsWithDiffspotsNumLessThan(obj, value)
grainsArray = [obj.grains{:}];
numDiffSpots = cellfun(@length, {grainsArray.('selectedDiffspots')});
grainIDs = find(numDiffSpots < value & numDiffSpots > 0);
end
% more than value
function grainIDs = getGrainsWithNofConflictsMoreThan(obj, value)
grainIDs = find(obj.nofConflicts > value);
end
% logical values
function inconflict = getConflictsGrains(obj)
inconflict = find(obj.hasConflicts == true);
end
function deselected = getDeselectedGrains(obj)
deselected = find(obj.selectedGrains == false);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Analysis Functions
function buildBBSearchList(obj)
......
......@@ -51,7 +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, 'alluniquespots', {});
obj.mergeSummaryField(other, phaseNum, grainNum, 'difspotID', []);
end
for grainNum = 1:length(other.phases{phaseNum}.conflicts)
obj.mergeConflictsField(other, phaseNum, grainNum, 'difspots', {});
......
function sample = gtCreateGtSample()
% GTCREATEGTSAMPLE Loads the grain.mat file and generates the GtSample data
% structure
% GTCREATEGTSAMPLE Loads the grain.mat file and generates the GtSample data
% structure
% sample = gtCreateGtSample()
% ---------------------------
parameters = [];
load('parameters.mat');
......@@ -18,50 +20,53 @@ difspot_num = mym(['SELECT count(*) FROM ' parameters.acq.name 'difspot']); % n
spot2grain = cell(difspot_num, 1); % cell array linking difspots with grainids
spot2phase = cell(difspot_num, 1);
for jj = 1:phaseNum
sprintf('Collecting information for phase %d', jj)
for phaseid = 1 : phaseNum
sprintf('Collecting information for phase %d', phaseid)
phaseName = parameters.cryst(phaseNum).name;
index = fullfile(parameters.acq.dir, '4_grains', sprintf('phase_%02d', jj), 'index.mat');
load(index);
indexterFile = fullfile(parameters.acq.dir, '4_grains', sprintf('phase_%02d', phaseid), 'index.mat');
grain = [];
load(indexterFile,'grain');
% Preallocate the space for the grains
grainsNum = length(grain);
phase = GtPhase(phaseName, grainsNum);
phaseDir = sprintf('phase_%02d', jj);
fprintf('Phase %02d: ', jj);
for ii = 1:grainsNum
fprintf('%04d/%04d', ii, grainsNum);
grainFile = sprintf('grain_%04d.mat', ii);
phaseDir = sprintf('phase_%02d', phaseid);
fprintf('Phase %02d: ', phaseid);
for grainid = 1 : grainsNum
fprintf('%04d/%04d', grainid, grainsNum);
grainFile = sprintf('grain_%04d.mat', grainid);
grainPath = fullfile('4_grains', phaseDir, grainFile);
grainInfo = load(grainPath, 'vol', 'shift', 'difspotID', 'completeness', 'selected', 'segbb', 'threshold');
phase.setR_vector(ii, grain{ii}.R_vector);
phase.setCenter(ii, grain{ii}.center);
grainInfo = load(grainPath, 'shift', 'vol', 'segbb', 'selected', 'threshold', 'completeness', 'difspotID');
phase.setR_vector(grainid, grain{grainid}.R_vector);
phase.setCenter(grainid, grain{grainid}.center);
if (~isfield(grainInfo, 'segbb'))
phase.setBoundingBox(ii, [grainInfo.shift, size(grainInfo.vol)]);
phase.setBoundingBox(grainid, [grainInfo.shift, size(grainInfo.vol)]);
else
phase.setBoundingBox(ii, grainInfo.segbb);
phase.setBoundingBox(grainid, grainInfo.segbb);
end
phase.setThreshold(ii, grainInfo.threshold);
selected = zeros(length(grainInfo.difspotID),1);
selected(grainInfo.selected) = 1;
phase.setSelectedDiffspots(ii, selected);
phase.setSelectedDiffspots(grainid, selected);
phase.setThreshold(grainid, grainInfo.threshold);
phase.setCompleteness(grainid, grainInfo.completeness);
phase.setDifspotID(grainid, grainInfo.difspotID);
phase.setCompleteness(ii, grainInfo.completeness);
difspotID = grainInfo.difspotID;
for kk = 1 : length(grainInfo.selected)
if grainInfo.selected(kk)
spot2grain{difspotID(kk)} = [spot2grain{difspotID(kk)}, ii];
spot2phase{difspotID(kk)} = [spot2phase{difspotID(kk)}, jj];
spot2grain{difspotID(kk)} = [spot2grain{difspotID(kk)}, grainid];
spot2phase{difspotID(kk)} = [spot2phase{difspotID(kk)}, phaseid];
end
end
fprintf('\b\b\b\b\b\b\b\b\b');
end
sample.phases{jj} = phase;
sample.phases{phaseid} = phase;
fprintf('(%04d) Done.\n', grainsNum);
end
......
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