<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://labadviser.nanolab.dtu.dk//index.php?action=history&amp;feed=atom&amp;title=Specific_Process_Knowledge%2FCharacterization%2FXRD%2FProcess_Info%2FPole_Figure_script</id>
	<title>Specific Process Knowledge/Characterization/XRD/Process Info/Pole Figure script - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://labadviser.nanolab.dtu.dk//index.php?action=history&amp;feed=atom&amp;title=Specific_Process_Knowledge%2FCharacterization%2FXRD%2FProcess_Info%2FPole_Figure_script"/>
	<link rel="alternate" type="text/html" href="https://labadviser.nanolab.dtu.dk//index.php?title=Specific_Process_Knowledge/Characterization/XRD/Process_Info/Pole_Figure_script&amp;action=history"/>
	<updated>2026-04-26T17:55:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://labadviser.nanolab.dtu.dk//index.php?title=Specific_Process_Knowledge/Characterization/XRD/Process_Info/Pole_Figure_script&amp;diff=53697&amp;oldid=prev</id>
		<title>Eves: Created page with &quot;&lt;i&gt; Unless otherwise stated, this page is written by &lt;b&gt;DTU Nanolab internal&lt;/b&gt;&lt;/i&gt;         function PoleFigureAngles(varargin)     hs=varargin{1};     qs=varargin{2};     rotation=0;     if length(varargin)&gt;2         filename=varargin{3};         if length(varargin)==4             rotation=varargin{4};         end     end     if size(hs,1)==size(qs,1)     for j=1:size(hs,1)         % for each plane and substrate pair calculate the alpha and beta angles         h=hs(j,:...&quot;</title>
		<link rel="alternate" type="text/html" href="https://labadviser.nanolab.dtu.dk//index.php?title=Specific_Process_Knowledge/Characterization/XRD/Process_Info/Pole_Figure_script&amp;diff=53697&amp;oldid=prev"/>
		<updated>2025-07-28T11:55:28Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;i&amp;gt; Unless otherwise stated, this page is written by &amp;lt;b&amp;gt;DTU Nanolab internal&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;         function PoleFigureAngles(varargin)     hs=varargin{1};     qs=varargin{2};     rotation=0;     if length(varargin)&amp;gt;2         filename=varargin{3};         if length(varargin)==4             rotation=varargin{4};         end     end     if size(hs,1)==size(qs,1)     for j=1:size(hs,1)         % for each plane and substrate pair calculate the alpha and beta angles         h=hs(j,:...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;i&amp;gt; Unless otherwise stated, this page is written by &amp;lt;b&amp;gt;DTU Nanolab internal&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function PoleFigureAngles(varargin)&lt;br /&gt;
    hs=varargin{1};&lt;br /&gt;
    qs=varargin{2};&lt;br /&gt;
    rotation=0;&lt;br /&gt;
    if length(varargin)&amp;gt;2&lt;br /&gt;
        filename=varargin{3};&lt;br /&gt;
        if length(varargin)==4&lt;br /&gt;
            rotation=varargin{4};&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if size(hs,1)==size(qs,1)&lt;br /&gt;
    for j=1:size(hs,1)&lt;br /&gt;
        % for each plane and substrate pair calculate the alpha and beta angles&lt;br /&gt;
        h=hs(j,:);&lt;br /&gt;
        % find all permutations of measurement plane&lt;br /&gt;
        qperm=perms(qs(j,:));&lt;br /&gt;
        % calculate the all permutations with both plus and minus sign&lt;br /&gt;
        signperm=[1,1,1;unique(perms([-1,1,1]),&amp;#039;rows&amp;#039;);unique(perms([-1,-1,1]),&amp;#039;rows&amp;#039;);-1,-1,-1];&lt;br /&gt;
        allperm=zeros(size(qperm,1)*size(signperm,1),3);&lt;br /&gt;
        k=size(qperm,1);&lt;br /&gt;
        for i =1: size(signperm,1)&lt;br /&gt;
            allperm((i-1)*k+1:i*k,:)= qperm.*signperm(i,:);&lt;br /&gt;
        end&lt;br /&gt;
        % Find all unique permutations&lt;br /&gt;
        uniqperm=unique(allperm,&amp;#039;rows&amp;#039;);&lt;br /&gt;
        alpha=zeros(length(uniqperm),1);&lt;br /&gt;
        onplane=zeros(size(uniqperm));&lt;br /&gt;
        %Calculate alpha angles and their projection on the plane&lt;br /&gt;
        for i=1:length(uniqperm)&lt;br /&gt;
            alpha(i)=90-acosd(h*uniqperm(i,:)&amp;#039;/(norm(h)*norm(uniqperm(i,:))));&lt;br /&gt;
            onplane(i,:) = uniqperm(i,:)-h*uniqperm(i,:)&amp;#039;/norm(h)^2*h;&lt;br /&gt;
        end&lt;br /&gt;
        % Calculate beta angles from the first vector in onplane&lt;br /&gt;
        beta=zeros(size(onplane,1),1);&lt;br /&gt;
        betat=zeros(size(onplane,1),3);&lt;br /&gt;
        for i=2:size(onplane,1)&lt;br /&gt;
            betat(i,:)=cross(onplane(1,:),onplane(i,:));&lt;br /&gt;
            if betat(i,:)*h&amp;#039;&amp;lt;0&lt;br /&gt;
                beta(i)=360-atan2d(norm(cross(onplane(1,:),onplane(i,:))),...&lt;br /&gt;
                    dot(onplane(1,:),onplane(i,:)));&lt;br /&gt;
            else&lt;br /&gt;
                beta(i)=atan2d(norm(cross(onplane(1,:),onplane(i,:))),...&lt;br /&gt;
                    dot(onplane(1,:),onplane(i,:)));&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        % sort angles acorting to alpha and print to console&lt;br /&gt;
        [A,I]=sort(alpha);&lt;br /&gt;
        index=I(A&amp;gt;0);&lt;br /&gt;
        angles=[alpha(index),beta(index)];&lt;br /&gt;
        str=strcat(sprintf(&amp;#039;alpha\t beta&amp;#039;),sprintf(&amp;#039;\n%3.2f\t %3.2f&amp;#039;,angles&amp;#039;));&lt;br /&gt;
        disp(str);&lt;br /&gt;
        % Plot angles on polar figure&lt;br /&gt;
        if j==1&lt;br /&gt;
            scat=figure;&lt;br /&gt;
        else&lt;br /&gt;
            figure(scat)&lt;br /&gt;
            hold on&lt;br /&gt;
        end&lt;br /&gt;
        polarscatter(beta(index)*pi/180,90-alpha(index))&lt;br /&gt;
        pax=gca;&lt;br /&gt;
        pax.ThetaZeroLocation = &amp;#039;top&amp;#039;;&lt;br /&gt;
        rlim([0 90])&lt;br /&gt;
        rticks([0 30 60 90])&lt;br /&gt;
        rticklabels({&amp;#039;90&amp;#039;,&amp;#039;60&amp;#039;,&amp;#039;30&amp;#039;,&amp;#039;0&amp;#039;});&lt;br /&gt;
        % If a data set from 3D explore is given, overlay the angles on the&lt;br /&gt;
        % data&lt;br /&gt;
        if exist(&amp;#039;filename&amp;#039;,&amp;#039;var&amp;#039;)&lt;br /&gt;
            if j==1&lt;br /&gt;
                cont=figure;&lt;br /&gt;
                hold on&lt;br /&gt;
                axis square&lt;br /&gt;
                axis off&lt;br /&gt;
                polefig=importdata(filename,&amp;#039;\t&amp;#039;,14);&lt;br /&gt;
                sizes=textscan(polefig.textdata{14},&amp;#039;%[# number of data :] %f %f&amp;#039;);&lt;br /&gt;
                x=reshape((90-polefig.data(:,1)).*sind(polefig.data(:,2)-rotation)...&lt;br /&gt;
                    ,[sizes{2},sizes{3}]);&lt;br /&gt;
                y=reshape((90-polefig.data(:,1)).*cosd(polefig.data(:,2)-rotation)...&lt;br /&gt;
                    ,[sizes{2},sizes{3}]);&lt;br /&gt;
                z=reshape(log10(polefig.data(:,3)),[sizes{2},sizes{3}]);&lt;br /&gt;
                z(z==-inf)=-1;&lt;br /&gt;
                contourf(x,y,z,&amp;#039;linestyle&amp;#039;,&amp;#039;none&amp;#039;)&lt;br /&gt;
                colorbar&lt;br /&gt;
                caxis([-1,max(max(z))])&lt;br /&gt;
                colormap(&amp;#039;jet&amp;#039;)&lt;br /&gt;
            else&lt;br /&gt;
                figure(cont)&lt;br /&gt;
                hold on&lt;br /&gt;
            end&lt;br /&gt;
            xa=(90-alpha(index)).*sind(beta(index));&lt;br /&gt;
            ya=(90-alpha(index)).*cosd(beta(index));&lt;br /&gt;
            scatter(xa,ya,&amp;#039;LineWidth&amp;#039;,1,&amp;#039;MarkerEdgeColor&amp;#039;,&amp;#039;k&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    end&lt;/div&gt;</summary>
		<author><name>Eves</name></author>
	</entry>
</feed>