Generation of EXAFS oscillations through electron-wave interference cartoon
Matlab code
% Cartoon of the generation of EXAFS oscillations due to interference
% between the outgoing photoelectron wave and that reflected back from a
% neighbouring scattering atom.
clear; close all;
vid = VideoWriter('EXAFSinterference.mp4','MPEG-4');
vid.Quality = 100;
vid.FrameRate = 30;
open(vid);
figure('units','pixels','position',[0 0 1920 1080]);
set(0,'defaultfigurecolor',[1 1 1]);
set(gca,'linewidth',7);
myBlue = [0.4 0.44 0.73];
myGold = [220 166 3]/255;
% red - yellow - green - blue - violet custom colormap
rgb = customcolormap([0 0.25 0.5 0.75 1], {'#ff0000','#ffff00','#00ff00','#0000ff','#7f00ff'});
fliprgb = flip(rgb);
colormap(fliprgb);
[xx,yy,zz] = sphere(50);
r1 = 2;
lp = [0.4 0.4 0.7];
gndStatex = -2.5:0.01:2.5; % x-coordinates gnd state
gndStatey = exp(-gndStatex.^2); % y-coordinates gnd state
% Generate photon symbol of sine wave and arrow head
phWavex = -4*pi:pi/45:0;
phWavey = sin(2*phWavex);
eWavex = 0:pi/45:30;
stepFn = 1./(1+exp(10*(phWavex+pi+0.2)));
phWavey = phWavey.*stepFn;
x = -5:0.1:10; % x-coordinates potential well
y1 = -0.02*exp(0.7*x); % y-coordinates potential well
for hv = 1/256:1/256:1
colorIndex1 = 128+round(128*hv);
colorIndex2 = round(128*hv);
newplot;
hold off
% Plot four curves representing potential well of core electron
plot(x-10.5,y1,-x+10.5,y1,-x+40.5,y1,x+19.5,y1,'Color',myBlue,'Linewidth',2)
hold on
axis off;
axis equal;
% Emitting and scattering atoms
surf(xx*r1,yy*r1-25,zz*r1,'FaceColor',myBlue,'EdgeColor','none','FaceLighting','gouraud');
surf(xx*r1+30,yy*r1-25,zz*r1,'FaceColor',myGold,'EdgeColor','none','FaceLighting','gouraud');
% Dotted linnes showing axis of the two atoms and the zero energy of
% the electron
plot([0 0],[-25 19],'Color','k','Linewidth',1,'Linestyle',':')
plot([30 30],[-25 19],'Color','k','Linewidth',1,'Linestyle',':')
plot([-10 40],[0 0],'Color','k','Linewidth',1,'Linestyle',':')
% Plot ground state of core electron
plot(gndStatex,4*gndStatey-20,'Color','k','Linewidth',2)
plot([-2.5 2.5],[-20 -20],'Color','k','Linewidth',1)
% Plot incident photon symbol
photon = plot(phWavex,phWavey-8,'Color',fliprgb(colorIndex1,:),...
'LineWidth',2.5);
rotate(photon,[0 0 1],-45,[-4*pi -8 0])
phArrowHd = fill([0.25 -1.4 -1.4]+1,[0 0.5 -0.5]-8,fliprgb(colorIndex1,:),...
'LineStyle','none','FaceLighting','none');
rotate(phArrowHd,[0 0 1],-45,[-4*pi -8 0])
text(-14,-6.4,'h\nu','FontSize',23);
% Plot outgoing andreflected electron waves
eWavey = 1.6*sin(1.4*eWavex*hv^0.5)+16*hv; % Outgoing wave from emitting atom
eWavey2 = -sin(1.4*(eWavex+30)*hv^0.5)+16*hv; % Reflected wave from scattering atom
plot(eWavex,eWavey,'Color',fliprgb(colorIndex2,:),...
'LineWidth',3);
plot(30-eWavex,eWavey2,'Color',fliprgb(colorIndex2,:),...
'LineWidth',2);
plot([0 30],[16*hv 16*hv],'Color','k','Linewidth',1)
% Plot of simulated EXAFS spectrum
xEx = -2:0.01:16;
% Quasi step-function on a falling slope to represent bare absorption edge
yE1 = 1./(1+exp(-20*xEx))-xEx/28;
% chi(E), the EXAFS modulation of the absorption with a period proportional
% to the square-root of the electron energy (hv - E_B)
yE2 = 0.28*exp(-xEx/5).*cos(21*abs(xEx).^0.5)./(1+exp(-50*xEx));
plot(-5.6*(yE1+yE2)+37,xEx,'Color','k','LineWidth',2.0)
plot([37 37],[0 16],'Color','k','Linewidth',1.5)
phArrowHd = fill([36.7 37.3 37],[16 16 17.35],'k',...
'LineStyle','none','FaceLighting','none');
text(37.7,8,'E_e','FontSize',19);
text(30.7,-1.1,'\mu(E_e)','FontSize',19);
light('Position',lp,'Style','infinite');
set(gca, 'Projection','perspective');
hold off
% Store the frame
frame = getframe(gcf);
writeVideo(vid,frame);
end
% Output the movie as an mpg file
close(vid)