mtex icon indicating copy to clipboard operation
mtex copied to clipboard

incompatible sizes of grains(1).poly and grains(1).boundary

Open ralfHielscher opened this issue 1 year ago • 0 comments

Discussed in https://github.com/mtex-toolbox/mtex/discussions/1554

Originally posted by vtvivian September 14, 2022 Hi MTEX team,

I am trying to select grains one by one in my EBSD map, e.g.

for n  = 1:length(grains1), grains1(n); end

And get this intermittent error (e.g. n=786 in this matlab data file) (ebsd = raw ebsd data, ebsd1 = cleaned up ebsd data, grains1 = calculated from ebsd1)

Unable to perform assignment because the indices on the left side are not compatible with the size of the right side.

Error in grain2d/subSet (line 68)
  inverseorder(ind2) = ind1;

Error in grain2d/subsref (line 65)
  grains = subSet(grains,ind);

Which comes from a problem in ordering the gb segments in grain2d/subSet, because grains.poly is 2 rows longer than grains.boundary (it needs to be 1 row longer FNew to have the same number of rows as grains.boundary.F).

if length(grains) == 1
  FNew = [grains.poly{1}(1:end-1).',grains.poly{1}(2:end).'];
  
  % remove inclusion embeddings
  if grains.inclusionId > 0
    ie = sum(FNew == FNew(1),2)==1;
    ie([1,end-grains.inclusionId]) = false;
[mtexForumData.zip](https://github.com/mtex-toolbox/mtex/files/9567851/mtexForumData.zip)

    FNew(ie,:) = [];
  end

  % sort minimum entry first
  FNew = sort(FNew,2);
    
  % sort such the order of F follows t
[mtexForumData.zip](https://github.com/mtex-toolbox/mtex/files/9567844/mtexForumData.zip)
he boundary
  [~,ind1] = sortrows(grains.boundary.F);
  [~,ind2] = sortrows(FNew);
  inverseorder(ind2) = ind1;
  
  grains.boundary = grains.boundary(inverseorder);
  
end

Is this a bug, or did I do something unexpected when computing the grains?

ralfHielscher avatar Sep 14 '22 19:09 ralfHielscher