Rotations of pole figure

572 views
Skip to first unread message

Abhishek Ghosh

unread,
Jul 29, 2016, 8:58:47 AM7/29/16
to MTEX
Dear  Sir,

In MTEX 3.5, we can plot in mtex by several conventions options and for all this conventions Z will be out or in the plane and X, Y will just change like- north , east, south etc by choosing convention options.


Now I want to discuss few things about my work.

I have done ECAP of fcc metals and measured XRD -Texture, parallel to Ecap direction. Now, most of researchers prefer to plot for Ecap ND  -ED directions, instead of ED-TD, here ED (X), TD(Y) and ND (Z) if I choose the below plotting convention

setMTEXpref('xAxisDirection','north');
setMTEXpref('zAxisDirection','outOfPlane').  (The second convention option in MTEX)


From this logic I can rotate pole figure and plot pole figures by following codes-

rot = rotation('axis',yvector,'angle',90*degree);
rot = rotation('axis',zvector,'angle',90*degree);
pf_rotated = rotate(pf,rot);
plot(pf_rotated,'antipodal')

rotpf = rotate(pf,rot);

odf=calcODF(rotpf);

pf = normalize(pf,odf);

plot(odf,'phi2',[0 45]*degree,'projection','plain','grey','contourf');
plotpdf(odf,[Miller(1,1,1),Miller(2,0,0),Miller(2,2,0),Miller(3,1,1)],'angle','contourf','complete','antipodal','minmax','off')

Sir, kindly comment on this codes. Is it ok? If I am wrong please suggest me advice. 

Thanking You, 

ruediger Kilian

unread,
Jul 29, 2016, 12:24:39 PM7/29/16
to mtex...@googlegroups.com
Hi Abishek,
it’s most likely a good idea to test your logic with some synthetic data (define an orientation and plot a polefigure) to see if the results meet your expectations.
Wrt. your code, the second rot overrides the first rot (so this first one does not do anything).

Cheers,
Rüdiger
> --
> If you want to reduce the number of emails you get through this forum login to https://groups.google.com/forum/?fromgroups=#!forum/mtexmail, click "My membership" and select "Don't send me email updates". You can still get emails on selected topics by staring them.
> ---
> You received this message because you are subscribed to the Google Groups "MTEX" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to mtexmail+u...@googlegroups.com.
> Visit this group at https://groups.google.com/group/mtexmail.
> For more options, visit https://groups.google.com/d/optout.

signature.asc
Message has been deleted
Message has been deleted

Abhishek Ghosh

unread,
Jul 30, 2016, 11:52:02 AM7/30/16
to MTEX, ruedige...@unibas.ch
Dear Ruediger Kilian, 

You are correct that my second rotation code ( z axis 90degree) is overwriting the first one. Can you please make it correct for me? I am suffering this point for ling time. 

Thanking you,
Abhishek 

ruediger Kilian

unread,
Jul 30, 2016, 12:19:25 PM7/30/16
to mtex...@googlegroups.com
HI Abishek,
you can either rotate your data first with your first rotation and then apply the second or multiply the two rotations in the correct order, giving e.g. rotation('Euler',[90,90,0]*degree) (this would be first around yvector and then around zector).
However, I think you are best off to test your procedure with something known, so you can be sure that it’s working.
Cheers,
Rüdiger
signature.asc

Abhishek Ghosh

unread,
Jul 31, 2016, 7:13:10 AM7/31/16
to MTEX, ruedige...@unibas.ch
Dear Ruediger Kilian, 

I don't know how I  rotate my data first with my first rotation and after that second.

I do not really understand  how I multiply the two rotations in the correct order, like giving  rotation('Euler',[90,90,0]*degree)

However, I tried with below logic-

The MTEX has default settings of Bunge (ZXZ),here I can't obtained rotation about y axis.
So I choose the Matthies conventions which has a advantage for rotations around (ZYZ) format.

So I used the below codes-

o = rotation('Euler',0*degree,0*degree,0*degree);

setMTEXpref('EulerAngleConvention','Matthies')
o
o = rotation('Euler',0*degree,90*degree,90*degree,'Matthies'); it is (ZYZ format)
opf = rotate(pf,o);
odf=calcODF(opf);
pf = normalize(pf,odf);
plot(odf,'phi2',[0 45]*degree,'projection','plain','grey','contourf');
plotpdf(odf,[Miller(1,1,1),Miller(2,0,0),Miller(2,2,0),Miller(3,1,1)],'angle','contourf','complete','antipodal','minmax','off')


But unfortunately, it is not giving the ideal locations of components in ODF and or pole figures.

Can you please help to correct the codes.

Thanking You,

Rüdiger Kilian

unread,
Jul 31, 2016, 9:42:46 AM7/31/16
to MTEX
Dear Abhishek,
in your initial post, you had rotation('axis',yvector,'angle',90*degree) and then rotation('axis',zvector,'angle',90*degree). If you multiply those two rotations (using *) you will see that it again results in a rotation and that was the one given in the previous example. But you can also apply first your first rotation e.g. pfr1=rotate(pf, rot1) and then the second rotation pfr2=rotate(pfr1,rot2), the result will be identical to the one from rotate(pf,rot2*rot1).
However, because rot1*rot2 is not identical to rot2*rot1  you have to know in which order you want to apply them.

Bunge or Matthies conventions apply to the Euler angles in a rotation or orientation, and just because Bunge rotates with the first Euler angle around Z, with the second around X and with the third again around Z does not mean that you cannot rotate your data around the Y-axis. For example rotation('axis',yvector,'angle',90*degree) is identical to rotation('Euler',[90,90,270]*degree).

I hope this helps.
Cheers,
Rüdiger





From: Abhishek Ghosh [abhishe...@gmail.com]
Sent: Sunday, July 31, 2016 1:13 PM
To: MTEX
Cc: Rüdiger Kilian
Subject: Re: {MTEX} Rotations of pole figure

Abhishek Ghosh

unread,
Aug 1, 2016, 11:43:48 AM8/1/16
to MTEX
Dear Ruediger Kilian, 

I understand your logic. Now I wrote below codes, but is also not giving the right results,

Can you please check it?

rot1 = rotation('axis',yvector,'angle',90*degree);
rot2 = rotation('axis',zvector,'angle',90*degree);
pfr1=rotate(pf,rot1);
pfr2=rotate(pfr1,rot2);
rotate(pfr2,rot1*rot2);
odf=calcODF(pfr2,rot1*rot2); 

Or

rot1 = rotation('axis',yvector,'angle',90*degree);
rot2 = rotation('axis',zvector,'angle',90*degree);
pfr1=rotate(pf,rot1);
pfr2=rotate(pfr1,rot2);
rotate(pfr2);
odf=calcODF(pfr2,rot1*rot2);

Thnaks
Abhishek 

ruediger Kilian

unread,
Aug 1, 2016, 12:36:13 PM8/1/16
to mtex...@googlegroups.com
Hi,
almost, I think you wanted to write it like that:

rot1 = rotation('axis',yvector,'angle',90*degree);
rot2 = rotation('axis',zvector,'angle',90*degree);
pfr1=rotate(pf,rot1);
pfr2=rotate(pfr1,rot2);
odf=calcODF(pfr2);

which is identical to:

odf=calcODF(pf,rot2*rot1);

All the best,
Rüdiger
signature.asc

Abhishek Ghosh

unread,
Aug 3, 2016, 12:15:38 PM8/3/16
to MTEX
Dear Ruediger Kilian,

I noticed that if I apply rotation like-  rot2*rot1, and calculate ODF like odf=calcODF(pf,rot2*rot1); Or   rot1*rot2   odf=calcODF(pf,rot1*rot2); they gave same results (pole and ODF).

 But while I apply this rotation like - 

pfr1=rotate(pf,rot1);
pfr2=rotate(pfr1,rot2);
odf=calcODF(pfr2);

it gives different results. Compare to ideal ODF, second one is somehow acceptable. But there are some other texture software like- labosoft, which gives some more exact results compare to Mtex (with second rotations). 
Please comment on this. 
Thanks,


On Friday, July 29, 2016 at 6:28:47 PM UTC+5:30, Abhishek Ghosh wrote:

ruediger Kilian

unread,
Aug 3, 2016, 12:52:42 PM8/3/16
to MTEX
Dear Abhishek,

> odf=calcODF(pf,rot2*rot1)

is identical to calODF(pf), hence of course you won’t see any difference. Your second argument is a rotation and calcODF doesn’t know what to do with it, so it silently ignores it.

Check again my last email, try out the following:

cs=crystalSymmetry('432')
odf=unimodalODF(orientation('Euler',[0,45,0]*degree,cs))
rot1=rotation('axis',yvector,'angle',90*degree);
rot2=rotation('axis',xvector,'angle',90*degree);
plotPDF(rotate(odf,rot1*rot2),[Miller(0,0,1,cs) Miller(1,0,1,cs) Miller(1,1,1,cs)])
figure
plotPDF(rotate(odf,rot2*rot1),[Miller(0,0,1,cs) Miller(1,0,1,cs) Miller(1,1,1,cs)])

To comment on the second part of your question, you probably need to elaborate a bit more on your problem.

Cheers,
Rüdiger
signature.asc

Abhishek Ghosh

unread,
Aug 4, 2016, 9:46:41 AM8/4/16
to MTEX
Dear Ruediger Kilian,

I can't understand the your last mail. you mentioned '432', unimodal. what is this? I also not understand the code- odf=unimodalODF(orientation('Euler',[0,45,0]*degree,cs)) . ODF should be calculated after rotation like 
rot1=rotation('axis',yvector,'angle',90*degree); 
rot2=rotation('axis',xvector,'angle',90*degree);

My other questions that Mtex is not matching with other softwares like labosoft. Here I am using the below codes-

rot1 = rotation('axis',yvector,'angle',90*degree);
rot2 = rotation('axis',zvector,'angle',90*degree);
pfr1=rotate(pf,rot1);
pfr2=rotate(pfr1,rot2);
odf=calcODF(pfr2);
pf = normalize(pfr2,odf);
plotpdf(odf,[Miller(1,1,1)],'angle','contourf','complete','antipodal','minmax','off')

I attached some pole figures of labosoft and Mtex. For both cases same materials,temperature and other parameters used and measured texture on ED-TD plane both cases. Here there should be no difference but I found some significant differences for texture components between softwares.

Please comment on this. 




On Friday, July 29, 2016 at 6:28:47 PM UTC+5:30, Abhishek Ghosh wrote:

ruediger Kilian

unread,
Aug 4, 2016, 10:10:37 AM8/4/16
to mtex...@googlegroups.com
Dear Abishek,
the code was just an example for you so that you’ll better understand that the oder of your rotations matters, I guess you have seen that they are not commutative. Example code with a unimodal model odf.
Btw. actually mtex has a very nice built-in help so if you don’t know something, for example what unimodalODF does, type "help unimodalODF" and you’ll get a little bit of nice explanation; also the documentation at the website is highly recommendable.

Your two polefigures are just rotated with respect to each other. You should check your reference frame definitions and your rotation around y does not look like it’s doing any good here.

Cheers,
Rüdiger




Rüdiger Kilian
Department of Environmental Sciences
Geological Institute
Bernoullistr. 32
CH-4056 Basel
Switzerland
+41 61 207 3610





On 04 Aug 2016, at 3:46 pm, Abhishek Ghosh <abhishe...@gmail.com> wrote:

> Dear Ruediger Kilian,
>
> I can't understand the your last mail. you mentioned '432', unimodal. what is this? I also not understand the code- odf=unimodalODF(orientation('Euler',[0,45,0]*degree,cs)) . ODF should be calculated after rotation like
> rot1=rotation('axis',yvector,'angle',90*degree);
> rot2=rotation('axis',xvector,'angle',90*degree);
>
> My other questions that Mtex is not matching with other softwares like labosoft. Here I am using the below codes-
>
> rot1 = rotation('axis',yvector,'angle',90*degree);
> rot2 = rotation('axis',zvector,'angle',90*degree);
> pfr1=rotate(pf,rot1);
> pfr2=rotate(pfr1,rot2);
> odf=calcODF(pfr2);
> pf = normalize(pfr2,odf);
> plotpdf(odf,[Miller(1,1,1)],'angle','contourf','complete','antipodal','minmax','off')
>
>
>
>
>
> I attached some pole figures of labosoft and Mtex. For both cases same materials,temperature and other parameters used and measured texture on ED-TD plane both cases. Here there should be no difference but I found some significant differences for texture components between softwares.
>
> Please comment on this.
>
>
>
>
> On Friday, July 29, 2016 at 6:28:47 PM UTC+5:30, Abhishek Ghosh wrote:
> Dear Sir,
>
> In MTEX 3.5, we can plot in mtex by several conventions options and for all this conventions Z will be out or in the plane and X, Y will just change like- north , east, south etc by choosing convention options.
>
>
> Now I want to discuss few things about my work.
>
> I have done ECAP of fcc metals and measured XRD -Texture, parallel to Ecap direction. Now, most of researchers prefer to plot for Ecap ND -ED directions, instead of ED-TD, here ED (X), TD(Y) and ND (Z) if I choose the below plotting convention
>
> setMTEXpref('xAxisDirection','north');
> setMTEXpref('zAxisDirection','outOfPlane'). (The second convention option in MTEX)
>
>
> From this logic I can rotate pole figure and plot pole figures by following codes-
>
> rot = rotation('axis',yvector,'angle',90*degree);
> rot = rotation('axis',zvector,'angle',90*degree);
> pf_rotated = rotate(pf,rot);
> plot(pf_rotated,'antipodal')
>
> rotpf = rotate(pf,rot);
>
> odf=calcODF(rotpf);
>
> pf = normalize(pf,odf);
>
> plot(odf,'phi2',[0 45]*degree,'projection','plain','grey','contourf');
> plotpdf(odf,[Miller(1,1,1),Miller(2,0,0),Miller(2,2,0),Miller(3,1,1)],'angle','contourf','complete','antipodal','minmax','off')
>
> Sir, kindly comment on this codes. Is it ok? If I am wrong please suggest me advice.
>
> Thanking You,
>
signature.asc

Abhishek Ghosh

unread,
Aug 5, 2016, 11:51:41 AM8/5/16
to MTEX
Dear Ruediger Kilian,

My reference frame definitions is ok, I checked it. Can you please suggest me why the rotation around y does not take place? What Can I do here?


On Friday, July 29, 2016 at 6:28:47 PM UTC+5:30, Abhishek Ghosh wrote:

Abhishek Ghosh

unread,
Aug 5, 2016, 11:54:39 AM8/5/16
to MTEX
Right now I have codes like that,

rot1 = rotation('axis',yvector,'angle',90*degree);
rot2 = rotation('axis',zvector,'angle',90*degree);
pfr1=rotate(pf,rot1);
pfr2=rotate(pfr1,rot2);
odf=calcODF(pfr2);
pf = normalize(pfr2,odf);
plot(odf,'phi2',[0 45]*degree,'projection','plain','grey','contourf');
plotpdf(odf,[Miller(1,1,1),Miller(2,0,0),Miller(2,2,0),Miller(3,1,1)],'angle','contourf','complete','antipodal','minmax','off')

On Friday, July 29, 2016 at 6:28:47 PM UTC+5:30, Abhishek Ghosh wrote:

ruediger Kilian

unread,
Aug 5, 2016, 12:29:04 PM8/5/16
to mtex...@googlegroups.com
Dear Abhishek,
I would not say it does not take place - according to what you wrote, and how your pole figure looked like it looks like it’s happening - but I’m not sure if it is required. Have a look at your polefigures just the way they are imported and compare to each step you do.
Cheers,
Rüdiger
signature.asc
Reply all
Reply to author
Forward
0 new messages