Cartoon of movements of a spherical grating spectrometer 

Matlab codes 

% Animation of movement of a grating and detector in order to capture the

% energy spectrum from a point source sitting on the Rowland circle.

 

clear; close all;

vid = VideoWriter('sphericalGratingMovement.mp4','MPEG-4');

vid.Quality = 100;

vid.FrameRate = 30;

open(vid);

figure('units','pixels','position',[0 0 1920 1080],'ToolBar','none');

set(0,'defaultfigurecolor',[1 1 1]);

set(gca,'linewidth',7);

 

% Create rgb progression through a rainbow

bot = 0:8:120; % 0 to 7f in 16 steps

top = 128:8:248; % 80 to ff

all = 0:16:240; % 0 to ff

botc = 0*all; % vector of zeros

midc = botc + 127; % vector of 127s

topc = botc + 255; % vector of 255s

rcomp = [top topc topc flip(all) botc botc bot flip(bot)]/256; % R in rgb

gcomp = [botc bot top flip(top) midc flip(bot) botc botc]/256; % G in rgb

bcomp = [botc botc botc botc bot midc midc flip(bot)]/256; % B in rgb

 

 

LL = 11;

r = 10;

grey = [0.5 0.5 0.5];

phistep = pi/360; % Step size in creating crystal surface

phipos = -pi/12:phistep:pi/12; % Vector of angles moving in positive direction from -15 to +15 deg

phineg = flip(phipos); % Vector of angles moving in negative direction from +15 to -15 deg

 

fwd = 1:128;

 

for i = [fwd flip(fwd)]

    phi = 10 + (i-1)*70/128;

    newplot

    hold off

    plot([0 0],[-r 2*r],'Color','black','LineWidth',2,'LineStyle','-.'); % vertical line along which the center of the grating moves

    hold on

    j = 128 - i + 1;

    plot([0 0],[0 2*r*sind(phi)],'Color',[rcomp(j) gcomp(j) bcomp(j)],'LineWidth',2);

    len = 2*r*sind(phi);

    plot([0 len*sind(2*phi)],[len len*(1+cosd(2*phi))],'Color',...

        [rcomp(j) gcomp(j) bcomp(j)],'LineWidth',2);

    xstx1 = r*(1 - cos(phipos)); % x-coords of inner edge of bent crystal

    xstx2 = r*1.05*(1 - cos(phineg)) - r*0.05; % x-coords of outer edge of bent crystal

    xstx = [xstx1 xstx2];   % x-coords of bent crystal via concatenation

    xsty1 = r*sin(phipos)+2*r*sind(phi); % y-coords of inner edge of bent crystal

    xsty2 = r*1.05*sin(phineg)+2*r*sind(phi); % y-coords of outer edge of bent crystal

    xsty = [xsty1 xsty2]; % y-coords of bent crystal via concatenation

    xst = fill(xstx,xsty,grey,'LineStyle','none');

    rotate(xst,[0 0 1],-phi,[0,2*r*sind(phi),0]);

 

    xc = r*cosd(phi);

    yc = r*sind(phi);

    viscircles([xc yc],r,'LineStyle','-.','LineWidth',2); % Dot-dashed Rowland circle

    viscircles([0 0],0.05,'Color','black','LineWidth',5); % Rotation point of Rowland circle

    axis equal

    axis off

    xlim([-LL 2*LL]);

    ylim([-LL 2*LL]);

 

    frame = getframe(gcf);

    writeVideo(vid,frame);

end

% Output the movie as an mpg file

close(vid);