From 31eaed5074762f800455aea2dd0c78f6b988a831 Mon Sep 17 00:00:00 2001 From: Laura Nervo <lnervo@esrf.fr> Date: Fri, 15 Jun 2012 14:12:02 +0000 Subject: [PATCH] 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: Laura Nervo <laura.nervo@esrf.fr> git-svn-id: https://svn.code.sf.net/p/dct/code/trunk@536 4c865b51-4357-4376-afb4-474e03ccb993 --- 5_reconstruction/gtAnalyseForwardSimulation.m | 9 +- 5_reconstruction/gtUpdateGrainsConflicts.m | 5 +- zUtil_DataStructures/GtGrainAnalyser.m | 12 +- zUtil_DataStructures/GtPhase.m | 120 ++++++++++++------ zUtil_DataStructures/GtSample.m | 2 +- zUtil_DataStructures/gtCreateGtSample.m | 57 +++++---- 6 files changed, 122 insertions(+), 83 deletions(-) diff --git a/5_reconstruction/gtAnalyseForwardSimulation.m b/5_reconstruction/gtAnalyseForwardSimulation.m index 628d429f..a919ac17 100644 --- a/5_reconstruction/gtAnalyseForwardSimulation.m +++ b/5_reconstruction/gtAnalyseForwardSimulation.m @@ -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 diff --git a/5_reconstruction/gtUpdateGrainsConflicts.m b/5_reconstruction/gtUpdateGrainsConflicts.m index f48055a7..9a037f85 100644 --- a/5_reconstruction/gtUpdateGrainsConflicts.m +++ b/5_reconstruction/gtUpdateGrainsConflicts.m @@ -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); diff --git a/zUtil_DataStructures/GtGrainAnalyser.m b/zUtil_DataStructures/GtGrainAnalyser.m index af0e64c4..6fd3549a 100644 --- a/zUtil_DataStructures/GtGrainAnalyser.m +++ b/zUtil_DataStructures/GtGrainAnalyser.m @@ -1,12 +1,12 @@ classdef GtGrainAnalyser properties - totspots = []; - numgrain = []; - idconflict = []; - delete = false; - flag = 0; - alluniquespots = {}; + totspots = []; + numgrain = []; + idconflict = []; + delete = false; + flag = 0; + difspotID = []; end end diff --git a/zUtil_DataStructures/GtPhase.m b/zUtil_DataStructures/GtPhase.m index 1e7e9759..5b0e3bf4 100644 --- a/zUtil_DataStructures/GtPhase.m +++ b/zUtil_DataStructures/GtPhase.m @@ -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) diff --git a/zUtil_DataStructures/GtSample.m b/zUtil_DataStructures/GtSample.m index b7bf93de..e754d7b2 100644 --- a/zUtil_DataStructures/GtSample.m +++ b/zUtil_DataStructures/GtSample.m @@ -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', {}); diff --git a/zUtil_DataStructures/gtCreateGtSample.m b/zUtil_DataStructures/gtCreateGtSample.m index 3d00853b..d1acd808 100644 --- a/zUtil_DataStructures/gtCreateGtSample.m +++ b/zUtil_DataStructures/gtCreateGtSample.m @@ -1,6 +1,8 @@ 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 -- GitLab