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