HCP Dual Crystal Frame in loaded XRD data

60 views
Skip to first unread message

jason allen

unread,
Feb 21, 2019, 9:02:49 PM2/21/19
to mtex...@googlegroups.com
There seems to be an issue with using the dual crystal frame for HCP systems (maybe others?) when loading in XRD data. When changing from X||a*, Y||b to X||a, Y||b*, there should be a flip about a bisector in the IPF that bisects the fundamental triangle from 0001 to the outside edge as well has a change of positions in the PFs between the [11-20] and the [10-10] PFs. This seems to not be the case for loaded XRD data using the crystal symmetries below. Right now my work around is to export orientation data to a VPSC type file and re-load as an ODF and modify there accordingly. To save space I will not post the entire code, but only the Crystal symmetry code.

Case 1)  CS = crystalSymmetry('6/mmm', [2.95 2.95 4.686], 'X||a*', 'Y||b', 'Z||c', 'mineral', 'Titanium', 'color', 'light blue');



Case 2)  CS = crystalSymmetry('6/mmm', [2.95 2.95 4.686], 'X||a', 'Y||b*', 'Z||c', 'mineral', 'Titanium', 'color'
'light blue');

I have attached my PF,IPF, and ODF outputs for the two cases to this post. As you can see, there is no change in the PFs and IPFs....only the ODF.

Jason Allen




Case 1 IPF.jpg
Case 1 ODF.jpg
Case 1 PF.jpg
Case 2 IPF.jpg
Case 2 ODF.jpg
Case 2 PF.jpg

jason allen

unread,
Feb 21, 2019, 9:03:59 PM2/21/19
to mtex...@googlegroups.com
I wanted to add that I have tried this in MTEX versions 4.5.0 through 5.1.1

Update:  It appears that the default is 'X||a*''Y||b''Z||c' even if you choose 'X||a''Y||b*''Z||c'

On Thursday, February 21, 2019 at 9:02:49 PM UTC-5, jason allen wrote:
There seems to be an issue with using the dual crystal frame for HCP systems (maybe others?) when loading in XRD data. When from X||a*, Y||b to X||a, Y||b*, there should be a flip about a bisector in the IPF that bisects the fundamental triangle from 0001 to the outside edge as well has a change of positions in the PFs between the [11-20] and the [10-10] PFs. This seems to not be the case for loaded XRD data using the crystal symmetries below. Right now my work around is to export orientation data to a VPSC type file and re-load as an ODF and modify there accordingly. To save space I will not post the entire code, but only the Crystal symmetry code.

ruediger Kilian

unread,
Feb 22, 2019, 9:00:04 AM2/22/19
to mtex...@googlegroups.com
Hi,
what symmetry do the imported polefigures and the calculated odf have in your case? Could you add some code how you load and plot?

In the following example, as far as I can see, there's the expected switch in the polefigure.

CS1 = crystalSymmetry('6/mmm', [2.95 2.95 4.686], 'X||a*', 'Y||b', 'Z||c', 'mineral', 'Titanium', 'color', 'light blue');
CS2 = crystalSymmetry('6/mmm', [2.95 2.95 4.686], 'X||a', 'Y||b*', 'Z||c', 'mineral', 'Titanium', 'color','light blue');

odf = unimodalODF(orientation.rand(1,CS1),CS1)
h = [Miller(1,1,-2,0,odf.CS) Miller(1,0,-1,0,odf.CS)]
plotPDF(odf,h)
nextAxis
odf.CS=CS2
h = [Miller(1,1,-2,0,odf.CS) Miller(1,0,-1,0,odf.CS)]
plotPDF(odf,h)

Cheers,
Rüdiger

Ralf Hielscher

unread,
Feb 24, 2019, 11:47:54 AM2/24/19
to MTEX
Hi Jason,

in fact both the pole figures as well as the inverse pole figures should NOT change when switching from X||a* to X||a. For the inverse pole figures the reason is that MTEX aligns them according to the crystal axes, i.e., the a or b axis. In fact the position of the x-axis within the inverse pole figures does change. You may to

annotate(xvector)

on both inverse pole figures and you will observe the different position.

I hope this helps.

Ralf.

jason allen

unread,
Feb 25, 2019, 5:27:33 AM2/25/19
to mtex...@googlegroups.com
ruediger

Sure, this is fine. However, if you look at my original post, I am speaking to the loading of XRD data. This is where the problem lies. General loading of ODF orientation data or EBSD data works fine. From what I can tell, if you interchange X||a and X||a* within the xrd loading of data, there is no difference.

Here is the Code I am using:

%% Import Script for PoleFigure Data
%
% This script was automatically created by the import wizard. You should
% run the whoole script or parts of it in order to import your data. There
% is no problem in making any changes to this script.

%% Specify Crystal and Specimen Symmetries

% crystal symmetry
CS = crystalSymmetry('6/mmm', [2.95 2.95 4.686], 'X||a', 'Y||b*', 'Z||c', 'mineral', 'Titanium', 'color', 'light blue');

% specimen symmetry
SS = specimenSymmetry('1');

% plotting convention
setMTEXpref('xAxisDirection','north');
setMTEXpref('zAxisDirection','outOfPlane');

%% Specify File Names

% path to files
pname = '...../Ti64_XRD_Data';

% which files to be imported
fname = {...
  [pname '/Texture_optimized_40_101_Ti64_13.xrdml'],...
  [pname '/Texture_optimized_53_102_Ti64_13.xrdml'],...
  [pname '/Texture_optimized_63_110_Ti64_13.xrdml'],...
  [pname '/Texture_optimized_70_103_Ti64_13.xrdml'],...
  [pname '/Texture_optimized_76_112_Ti64_13.xrdml'],...
  };


% background
pname = '...../Ti64_XRD_Data';
fname_bg = {...
  [pname '/Texture_optimized_40_101_background_Ti64_13.xrdml'],...
  [pname '/Texture_optimized_53_102_background_Ti64_13.xrdml'],...
  [pname '/Texture_optimized_63_110_background_Ti64_13.xrdml'],...
  [pname '/Texture_optimized_70_103_background_Ti64_13.xrdml'],...
  [pname '/Texture_optimized_76_112_background_Ti64_13.xrdml'],...
  };

%% Specify Miller Indice

h = { ...
  Miller(1, 0,-1, 1,CS),...
  Miller(1, 0,-1, 2,CS),...
  Miller(1, 1,-2, 0,CS),...
  Miller(1, 0,-1, 3,CS),...
  Miller(1, 1,-2, 2,CS),...
  };

%% Import the Data

% create a Pole Figure variable containing the data
pf = loadPoleFigure(fname,h,CS,SS,'interface','xrdml');

% background
pf_bg = loadPoleFigure(fname_bg,h,CS,SS,'interface','xrdml');

% correct data
pf = correct(pf,'bg',pf_bg);


odf = calcODF(pf);

figure
plot(odf,'sections',6,'silent', 'contourf')
mtexColorbar;

figure
plotPDF(odf,[Miller(0,0,0,1,odf.CS), Miller(1,1,-2,0,odf.CS), Miller(1,0,-1,0,odf.CS)],'antipodal','silent', 'contourf', 'complete', 'upper');
mtexColorbar;

figure
r1 = vector3d(1,0,0);
r2 = vector3d(0,1,0);
r3 = vector3d(0,0,1);
plotIPDF(odf,[r1, r2, r3],'antipodal', 'contourf');
mtexColorbar;






jason allen

unread,
Feb 25, 2019, 5:32:50 AM2/25/19
to MTEX
Ralf

When loading orientation data through general ODF or loading through EBSD, there is in fact a change in the IPF and PF plots when you switch from X||a* to X||a. Maybe this in unintended?

Jason

Ralf Hielscher

unread,
Feb 25, 2019, 10:00:48 AM2/25/19
to MTEX
Hi Jason,

what is a texture or ODF? This is something that tells you how often certain crystal directions, 
e.g. (hkl) are aligned with certain specimen directions. 
In this definition the  alignment of the Cartesian crystal reference frame X||a or X||a* has no influence at all. 
In fact, we only require this Cartesian crystal reference frame if we want to define orientations by means of Euler angles.

This is the core of all confusion. As long no Euler angles are in the game the alignment of the Cartesian crystal reference 
frame is completely arbitrary. This is true for inverse pole figures, pole figures and in particular if you reconstruct an ODF from pole figures. 

The situation changes if you look at the ODF in Euler angle space or import the ODF as discretisation over the Euler angles.
Now, it is very important to know the alignment of the Cartesian crystal reference frame - not very surprising as the 
Euler angles are defined with respect to X, Y and Z.

I hope I could make the situation a bit more clear as it is very important to understand.

Ralf.
Reply all
Reply to author
Forward
0 new messages