How do you calculate the misorientation of tilt grain boundaries?

812 views
Skip to first unread message

Xin Xu

unread,
Dec 6, 2017, 1:21:54 AM12/6/17
to MTEX
I'm trying to figure out how many tilt grain boundaries(GB) in my EBSD mapping and what their misorientations are. The tilt grain boundary is where the rotation axis is parallel to the boundary plane. 

The sample symmetry is cubic, m-3m. When I use Mtex to calculate the misorientation of the grain boundaries. The results are not what I want.

For example, I'm looking for tilt grain boundaries with rotation axis (110). But for a tilt GB with 70 degree rotation angle and (110) axis, Mtex gives the rotation angle 60 degree around (-1 1 -1) axis(The codes are attached below). I know the difference result from the crystal symmetry but I do want to know what the angles are if we assume the rotation axis is (110)


cs = ebsd('Ce O2').CS;
o1=orientation('euler',0*degree,0*degree,0*degree,cs);
o3=rotation('axis',vector3d(1,1,0),'angle',70*degree);
mori=inv(o1)*o3;
mori.angle/degree
mori.axis
round(mori.axis)

I also attached my EBSD mapping data in type of crc for your reference.

Thanks for your kind help!

Best,

Xin
950_12H_F_2map14 4.crc

ruediger Kilian

unread,
Dec 6, 2017, 6:29:40 AM12/6/17
to mtex...@googlegroups.com
Hi Xin,
maybe the following could be helpful.
a) Unless you have 3D data, you do not always know it the misorientation axis (in specimenCoords) is within the grain boundary plane.

b) Only exception is, when the misorientation axis (in specimenCoords) is parallel to the trace of the plane

c) To get the trace of the grain boundary, check out boundary.calcMeanDirection or on smooth grains boundary.direction

d) You’ll need two conditions for that:
d1) the misorientation axis (in specimenCoords, check axis(o1,o), have a look in the forum, there are some answers how to get the orientations along a boundary) should be within a certain angle with the grain boundary trace to be considered as the special case mentioned in (b).
d2) your misorientation (in crystal coordinates) of the boundary should be within a certain threshold angle with your desired model misorientation.

E.g.
cond1=angle(smoothgrains.boundary.direction,axis(o1,o2),’antipodal')< 15*degree; % where o1, o2 is the list of orientations along the grain boundary

titlMisorientation=orientation(‘axis’,Miller(1,1,0,cs),’angle’,70*degree,cs,cs)
cond2=angle(smoothgrains.boundary.misorientation,titlMisorientation)

Then you can select the boundaries which fulfil cond1&cond2
e,g,
potentialTiltBoundaries = smoothgrains.boundary(cond1&cond2)

Hope this helps.
Cheers,
Rüdiger


Xin Xu

unread,
Dec 6, 2017, 2:37:47 PM12/6/17
to MTEX
Thank you so much, Rüdiger!

I will look into it and let you know if I have more questions.

Best,

Xin
在 2017年12月6日星期三 UTC-6上午5:29:40,ruediger Kilian写道:

Xin Xu

unread,
Dec 9, 2017, 6:59:12 PM12/9/17
to MTEX
Hi Rüdiger,

Thanks for your kind suggestions! But I have other questions which need your help.

I can understand what you said about the two conditions 
E.g. 
cond1=angle(smoothgrains.boundary.direction,axis(o1,o2),’antipodal')< 15*degree; % where o1, o2 is the list of orientations along the grain boundary 

titlMisorientation=orientation(‘axis’,Miller(1,1,0,cs),’angle’,70*degree,cs,cs) 
cond2=angle(smoothgrains.boundary.misorientation,titlMisorientation) 

potentialTiltBoundaries = smoothgrains.boundary(cond1&cond2) 

I know how to do cond2 but have no idea how to do cond1. For my project, I would like to find tilt grain boundaries which means the misorientation axes are parallel to the grain boundary plane. For now my data is 2D, therefore I need to calculate the grain boundary direction and figure out if the misorientation axis is along the GB direction.

Can you give an example to show how to calculate a specific GB direction?

Right now I'm using the code below to find any GB misorientation is parallel to (110)/72 degree. Next is to figure out if the found GB misorientation is parallel to its GB direction.

cs = ebsd('Ce O2').CS;
[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd('Ce O2'),'angle',0.5*degree);
gB=grains.boundary;
gB_Ce = grains.boundary('Ce O2','Ce O2');

ori = orientation('axis',Miller(1,1,0,cs),'angle',70*degree,cs,cs);
ind = angle(gB_Ce.misorientation,ori)<1*degree;

dlmwrite('Test.txt',gB_Ce(ind).misorientation.Euler);







在 2017年12月6日星期三 UTC-6上午5:29:40,ruediger Kilian写道:
Hi Xin,

Rüdiger Kilian

unread,
Dec 10, 2017, 11:56:37 AM12/10/17
to mtex...@googlegroups.com
Hi Xin,
misorientation axes can be defined in either crystal coordinates (that what you do and then they are of type Miller) or in specimen coordinates (that's what you like to check to see if they are parallel to the trace of th boundary, and they are of type vector3d). Cond1 uses the misorientation axis in specimen coordinates (axis(o1o,2)) and the grains.boundary.direction. o1,o2 are the orientations along the boundary (contained in o=ebsd(grains.boundary('c','c').ebsdId).orientations) nad grains.boundary.direction is the trend of the boundary trace. Again, not that this would only make sense for interpolated boundary vertices (smooth(grains)).
Cheers,
Rüdiger

Xin Xu

unread,
Dec 10, 2017, 1:17:04 PM12/10/17
to MTEX
Hi Rüdiger,

Thanks so much for your reply! But I am still confused here. First let me attach my code here and the EBSD data for you.
X direction is set to east. Y is set to south.

% Search GB has (110) rotation axis with rotatin angles from 1 to 90 degree
% Error within 1 degree
cs = ebsd('Ce O2').CS;
[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd('Ce O2'),'angle',0.5*degree);
gB=grains.boundary;
gB_Ce = grains.boundary('Ce O2','Ce O2');

ori = orientation('axis',Miller(1,1,0,cs),'angle',37*degree,cs,cs); % This is actually cond2
ind = angle(gB_Ce.misorientation,ori)<1*degree;

gB_Ce(ind).misorientation.Euler % it's found GB, output results show below

  Bunge Euler angles in degree
     phi1     Phi    phi2    Inv.
  12.5872 26.4595 14.6068       0
  12.5872 26.4595 14.6068       0
  12.5872 26.4595 14.6068       0
  12.5872 26.4595 14.6068       0
  12.5872 26.4595 14.6068       0
  12.5872 26.4595 14.6068       0
  12.5872 26.4595 14.6068       0
  12.5872 26.4595 14.6068       0



Now I found one GB whose misorientation axis is (110) and angle 37 degree. Next I need to figure out if this GB misorientation axis is along the GB direction. I tried 
gB_Ce(ind).direction % output shows below
ans = vector3d (show methods, plot)
 size: 8 x 1
 antipodal: true
   x  y  z
   1  0  0
   0  1  0
   0  1  0
   0  1  0
   0 -1  0
   0  1  0
  -1  0  0
   0 -1  0

I'm not sure what it means. Isn't gB_Ce(ind).direction supposed to give you the direction of GB in specimen coordinate?

Besides, I also tried o=ebsd(gB_Ce(ind).ebsdId).orientations

o = orientation (show methods, plot)
  size: 8 x 2
  crystal symmetry : Ce O2 (m-3m)
  specimen symmetry: 1
 
  Bunge Euler angles in degree
     phi1     Phi    phi2    Inv.
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0

You said o1, o2 are the orientations along the boundary contained in o=ebsd(grains.boundary('c','c').ebsdId).orientations. But which o1 and o2 I should select? I also got confused about the function of axis(o1,o2). What is it for?

I'm sorry that so many questions may bother you and so appreciated for your kind help!

Best,

Xin







在 2017年12月10日星期日 UTC-6上午10:56:37,Rüdiger Kilian写道:
Sample for Rüdiger.crc

Ralf Hielscher

unread,
Dec 10, 2017, 2:36:27 PM12/10/17
to MTEX
What you observe is the staircasing effect when computing grains boundaries from EBSD data on a rectangular grid. You get more meaningful directions if you smooth your grain boundaries with

grains = smooth(grains,4)

It is always helpful to zoom into the plots and look what is going on.

As for the misorientation axis in specimen coordinates try

a = axis(o(:,1),o(:2))

This gives you the misorientation axes along the boundary in specimen coordinates.

Ralf.

Xin Xu

unread,
Dec 10, 2017, 3:34:11 PM12/10/17
to MTEX
Hi Ralf,

Thanks so much for your help!

I tried smooth function but it seems doesn't work. I still get the same result for gB_Ce(ind).direction.

>> grains = smooth(grains,4);
>> gB_Ce(ind).direction
 
ans = vector3d (show methods, plot)
 size: 8 x 1
 antipodal: true
   x  y  z
   1  0  0
   0  1  0
   0  1  0
   0  1  0
   0 -1  0
   0  1  0
  -1  0  0
   0 -1  0


Besides, can you explain the data set of  o=ebsd(gB_Ce(ind).ebsdId).orientations? I got the result below. For this GB, there are only 8 pixels but why I got 8x2 data? Does that mean (242.327, 134.332, 224.864) is the orientation of left grain and (273. 48, 154.278, 223.561) is the orientation of right grain?
 
o = orientation (show methods, plot)
  size: 8 x 2
  crystal symmetry : Ce O2 (m-3m)
  specimen symmetry: 1
 
  Bunge Euler angles in degree
     phi1     Phi    phi2    Inv.
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
  242.327 134.332 224.864       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0
   273.48 154.278 223.561       0








在 2017年12月10日星期日 UTC-6下午1:36:27,Ralf Hielscher写道:

Ralf Hielscher

unread,
Dec 10, 2017, 3:45:51 PM12/10/17
to MTEX
Dear Xin Xu,

1. Question: Most likely you placed the command at the wrong position

cs = ebsd('Ce O2').CS;
[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd('Ce O2'),'angle',0.5*degree);

grains
= smooth(grains,4)

gB
=grains.boundary;
gB_Ce
= grains.boundary('Ce O2','Ce O2');

please check what each command does! Plot the result, try to understand what is going on.

2. Question: the 8x2 matrix of orientations means that your have 8 boundary segments witch the orientations of the first grain along the boundary being written in the first column and the orientations of the second grain along the boundary beein written in the second column of the matrix. Thatswhy

axis(o(:,1),o(:,2))

computes the misorientation axes along the boundary

Xin Xu

unread,
Dec 10, 2017, 10:10:19 PM12/10/17
to MTEX
Hi Ralf,

Thanks for pointing it out! I put it in the right order and the out put is below.

>> gB_Ce(ind).direction
 
ans = vector3d (show methods, plot)
 size: 8 x 1
 antipodal: true
          x         y         z
   0.632291  0.774731         0
   0.410092  0.912044         0
   0.163207  0.986592         0
  0.0707541  0.997494         0
   -0.41074 -0.911753         0
   0.127091  0.991891         0
  -0.411791 -0.911278         0
  -0.279302 -0.960203         0

I looked up the grains.boundary.direction in Function Overview and Forum and didn't find much about it. What is the meaning of each (x, y)?

Is x and y the direction of each segment of the GB? If yes, the GB starts from the first point(x1,y1), to second point(x1+x2,y1+y2).... and the last one (x1+...+x8, y1+...+y8). When I plot the 8 points, it shows below(left) which is different from the real GB in red(right). Please let me know where I am wrong. Thank you so much!












Best,

Xin












在 2017年12月10日星期日 UTC-6下午2:45:51,Ralf Hielscher写道:

Ralf Hielscher

unread,
Dec 10, 2017, 11:53:12 PM12/10/17
to MTEX


Is x and y the direction of each segment of the GB?

Yes!
 
If yes, the GB starts from the first point(x1,y1),

No - (x1,y1) is the the direction of the first segment
 
to second point(x1+x2,y1+y2).... and the last one (x1+...+x8, y1+...+y8).

No - (x2,y2) is the the direction of the second segment

try

quiver(gB_Ce,gB_Ce.direction)

to visualize directions within the grain plot.

Ralf. 

Xin Xu

unread,
Dec 11, 2017, 1:17:32 AM12/11/17
to MTEX
Hi Ralf,

Thanks for your kind reply!

But I do find difficulty in understanding the data calculated from gB.direction. For example, I got the direction of GB segments below and then plot them. Each of 8 segments has (x, y, z). Since X is set to east and Y is set to south, some (x, y, z) values seem not reasonable. X and Y value should be positive rather negative. Do you know why? Thank you!


gB_Ce(ind).direction
ans = vector3d (show methods, plot)
 size: 8 x 1
 antipodal: true
          x         y         z
   0.632291  0.774731         0
   0.410092  0.912044         0
   0.163207  0.986592         0
  0.0707541  0.997494         0
   -0.41074 -0.911753         0
   0.127091  0.991891         0
  -0.411791 -0.911278         0
  -0.279302 -0.960203         0


plot(gB,'micronbar','off')
hold on
quiver(gB_Ce(ind),gB_Ce(ind).direction)






















在 2017年12月10日星期日 UTC-6下午10:53:12,Ralf Hielscher写道:

Rüdiger Kilian

unread,
Dec 11, 2017, 1:54:47 AM12/11/17
to mtex...@googlegroups.com
Hi Xin,
the change in sign is simply because the segments are calculated from different starting points I guess. Since the grain boundary direction presents the trend of the grain boundary trace, it is actually an non-polar axis (a vector where the direction doesn't matter). Note that it says "antipodal: true". So this is something not to worry about and I'd say the number you have there are very well reasonable.
Cheers,
Rüdiger

Reply all
Reply to author
Forward
0 new messages