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

gtAnalyseForwardSimulation : removed old function


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

git-svn-id: https://svn.code.sf.net/p/dct/code/trunk@561 4c865b51-4357-4376-afb4-474e03ccb993
parent f0e535ce
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 = 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.
% conflicts.mat contains: grain_conflict = list of logical if difspot(i)
% is claimed by more than one grain
% <row vector num_phases x num_spots>
% phase_conflict = list of difspots in conflict between phases
% <row vector num_phases x spotids>
% phase = list of difspotIDs for each phase
% <cell num_phases x 1>
%
% SUB-FUNCTIONS:
%[sub]- sfCompareGrains
%[sub]- sfGetDifspotsConflicts
%
% 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> {10}
%
% OUTPUT:
% grains_merge = output for each phase containing info on grains in
% conflicts and their difspots list <struct num_phasesx1>
% .grain{grainid} = matrix with for each difspotID in common gives
% the grainID and difspotID <double 2xM>
%
% .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>
% .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 = 10;
end
if ~exist('save_flag','var') || isempty(save_flag)
save_flag = true;
end
parameters = [];
load('parameters.mat');
num_phases = length(parameters.cryst);
filedir = fullfile(parameters.acq.dir,'4_grains');
clear parameters
savename = fullfile(filedir,'grains_merge');
spot2grain = {};
spot2phase = {};
filename = fullfile(filedir,'spot2grain.mat');
load(filename,'spot2grain','spot2phase');
num_spots = length(spot2grain);
ngrains = zeros(num_phases);
grain = {};
for phaseid = 1 : num_phases
filename = fullfile(filedir, sprintf('phase_%02d', phaseid), 'index.mat');
load(filename,'grain');
ngrains(phaseid) = length(grain);
end
clear grain
% Check if a given spsot has been claimed by different phases (phase_conflict)
phase_conflict = [];
grain_conflict = zeros(num_phases, num_spots); % list of problematic difspotids (one list per phase)
for spotid = 1 : num_spots
if (length(spot2phase{spotid}) > 1)
phaseids = unique(spot2phase{spotid});
if (length(phaseids) > 1)
phase_conflict = [phase_conflict, spotid];
else
grain_conflict(phaseids, spotid) = 1;
end
end
end
% build list of difspotIDs claimed by more than one grain from a given phase (phase{num_phases})
phase = cell(num_phases);
for phaseid = 1 : num_phases
phase{phaseid} = find(grain_conflict(phaseid, :));
end
clear filename num_spots phaseids savename spotid phaseid
save(fullfile(filedir,'conflicts.mat'),'grain_conflict','phase_conflict','phase');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% CREATING grains_merge{phaseid}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% fill grains_merge structure for each phaseid: grains_merge{phaseid}
%%% .grain{grainid} = matrix with for each difspotID in common gives
%%% the grainID and difspotID <double 2xM>
%%%
% initialization
grains_merge = cell(num_phases, 1);
for phaseid = 1 : num_phases
grains_merge{phaseid}.grain = cell(ngrains(phaseid), 1);
grains_merge{phaseid}.summary = cell(ngrains(phaseid), 1);
grains_merge{phaseid}.conflicts = cell(ngrains(phaseid), 1);
grains_merge{phaseid}.hasConflicts = false(ngrains(phaseid), 1);
grains_merge{phaseid}.nofConflicts = zeros(ngrains(phaseid), 1);
end
% calculation of grains in conglicts with others
for phaseid = 1 : num_phases
for ii = 1 : length(phase{phaseid})
grainids = unique(spot2grain{phase{phaseid}(ii)});
for jj = 1 : length(grainids)
othergrains = setdiff(grainids, grainids(jj));
for kk = 1 : length(othergrains)
grains_merge{phaseid}.grain{grainids(jj)} = [...
grains_merge{phaseid}.grain{grainids(jj)}, ...
[othergrains(kk); phase{phaseid}(ii)],...
];
end
end
end
end
%%% try to make a summary of what should have to be done .summary{grainid}
for phaseid = 1 : num_phases
grain = grains_merge{phaseid}.grain;
for grainid = 1 : ngrains(phaseid)
grains_merge{phaseid}.summary{grainid} = GtGrainAnalyser();
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(numgrain) ' conflicts!'])
listids_all = sort([idconflict, grainid]);
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;
grains_merge{phaseid}.conflicts{grainid} = repmat(GtConflict(),numgrain,1);
for kk = 1 : numgrain
[tmp_s, tmp_c] = sfCompareGrains(...
grains_merge{phaseid}.summary{grainid}, ...
grains_merge{phaseid}.conflicts{grainid}(kk), ...
g, grainid, ...
idconflict(kk), ...
maxnum ...
);
grains_merge{phaseid}.summary{grainid} = gtAddMatFile(grains_merge{phaseid}.summary{grainid},tmp_s,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
disp(['grain # ' num2str(grainid) ' doesn''t have conflicts!'])
grains_merge{phaseid}.hasConflicts(grainid) = false;
grains_merge{phaseid}.nofConflicts(grainid) = 0;
end
end % end for grainid
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
end % end of function
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% sub-functions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [s,c] = sfCompareGrains(summary, conflicts, grain, idgrain, idconflict, maxnum)
% [s,c] = sfCompareGrains(summary, grain, idgrain, idconflict, maxnum)
% ------------------------------------------------------------------------
%
% INPUT:
% summary = summary for the grainid == summary{idgrain} <GtGrainAnalyser>
% conflicts = conflicts for the grainid == conflicts{idgrain} <GtConflict>
% grain = current grains_merge{phaseid}.grain{idgrain} <double 2xM>
% idgrain = grainid <double>
% idconflict = grainid for another grain in conflict <double>
% maxnum = maximum number of difspots allowed in order not to be
% merged <int>
%
% OUTPUT:
% s = summary{idgrain} updated! <GtGrainAnalyser>
% c = conflicts{idgrain} updated! <GtConflict>
s = summary;
numgrain = s.numgrain;
c = conflicts;
if idgrain < idconflict
s.delete = false;
s.flag = 1; % conflict grain with lower grainid
elseif idgrain > idconflict
s.delete = true;
s.flag = 2; % conflict grain with higher grainid
else
return;
end
current_spots = sfGetDifspotsConflicts(grain, idconflict);
c.difspots = {idconflict, current_spots};
s.idspot = [s.idspot, current_spots];
if length(current_spots) > maxnum
c.maxnum = true;
else
c.maxnum = false;
end
orig_spots = unique(grain(2,:));
if isempty(setdiff(orig_spots, current_spots))
c.allequals = true;
else
c.allequals = false;
end
end % end sfCompareGrains
function difspotsID = sfGetDifspotsConflicts(grain, idconflict)
% difspotsID = sfGetDifspotsConflicts(grain, idconflict)
% ------------------------------------------------------
% INPUT:
% grain = [idconflict; [difspotIDs]] in conflict <row vector 2xM>
% idconflict = id of the conflict grain
%
% OUTPUT:
% difspotsID = difspots for each idconflict grain <row vector 1xM>
difspotsID = grain(2,grain(1,:)==idconflict);
end % end sfGetDifspotsConflicts
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