Plot of the ratio of scattered and incident photon energies in Compton scattering  
Matlab code 

% Program to plot out the fractional loss E'/E0 for Compton scattering


clear; close all;


% Prompt user for input parameters

prompt = 'Minimum incident photon energy in keV? [default = 5 keV]: ';

hvmin = input(prompt);

if isempty(hvmin)

    hvmin = 5;

end


prompt = 'Maximum photon energy in keV? [default = 1000]: ';

hvmax = input(prompt);

if isempty(hvmax)

    hvmax = 1000;

end


prompt = 'Step size in photon energy in keV? [default = 2.5]: ';

hvstep = input(prompt);

if isempty(hvstep)

    hvstep = 2.5;

end


noSteps = (hvmax - hvmin)/hvstep;


% Custom rainbow color map for curves

% Red, orange, yellow, green, cyan, blue, violet over 200 steps

rgb = customcolormap([0 0.2 0.4 0.6 0.8 1],...

    {'#ff0000', '#ffa500', '#ffff00', '#00ff00',...

    '#00ffff', '#0000ff'},noSteps+1);

rgb = flip(rgb);


figure('ToolBar','none');

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

vid.FrameRate = 30;    % Default 30

vid.Quality = 100;    % Default 75

open(vid);

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


lambdaC = 2.4263e-2; % Compton wavelength h/mc in Angstroms

psi = 0:180;

colIndex = 0;

for ii = hvmin:hvstep:hvmax % From minimum energy to maximum energy in hvstep sizes

    colIndex = colIndex+1;

    lambda0 = 12.3984/ii; % in Angstrom

    % For present photon energy

    eRatio = (1 + (lambdaC/lambda0)*(1 - cosd(psi))).^-1;

    plot(psi,eRatio,'color',rgb(colIndex,:), 'LineWidth', 2.5);

    set(gca,'FontName','Helvetica','fontsize',18);

    set(gca,'TickLength',[0.016, 2]);

    set(gca,'linewidth',2);

    xlim([0.0 180])

    ylim([0 1.1])


    xlabel('Scattering angle \psi [degrees]');

    ylabel('E/E_0');


    str1 = 'E_0 = ';

    str2 = num2str(ii,'% 4.0f');

    str3 = ' keV';

    strTot = [str1,str2,str3];

    hText = text(30, 0.1, strTot, 'FontSize',18);


    % Add frame to file vid

    frame = getframe(gcf);

    writeVideo(vid,frame);

end

% Output the movie as an mp4 file and close it

close(vid);