Added inital code base.

This commit is contained in:
florez_j committed 2023-08-09 15:02:10 +02:00
1 parent 0a38de73c3
commit 1c141cf1c0
1357 files changed
+159982

No files matched your search

File diff suppressed because it is too large. Load diff
@@ -0,0 +1 @@
mcc -a CurveFit.dat -a WarpFit.dat -e ARPESView.m
@@ -0,0 +1,108 @@
function varargout = ImgProcSetup(varargin)
% IMGPROCSETUP MATLAB code for ImgProcSetup.fig
% IMGPROCSETUP, by itself, creates a new IMGPROCSETUP or raises the existing
% singleton*.
% H = IMGPROCSETUP returns the handle to a new IMGPROCSETUP or the handle to
% the existing singleton*.
% IMGPROCSETUP('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in IMGPROCSETUP.M with the given input arguments.
% IMGPROCSETUP('Property','Value',...) creates a new IMGPROCSETUP or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before ImgProcSetup_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to ImgProcSetup_OpeningFcn via varargin.
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
% Last Modified by GUIDE v2.5 04-Nov-2020 16:11:59
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @ImgProcSetup_OpeningFcn, ...
'gui_OutputFcn', @ImgProcSetup_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before ImgProcSetup is made visible.
function ImgProcSetup_OpeningFcn(hObject,~,handles,varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% varargin command line arguments to ImgProcSetup (see VARARGIN)
% Choose default command line output for ImgProcSetup
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% figure properties
% set(gcf,'WindowStyle','modal')
% global parameters and their initialization
global presmdX presmdY structMode sharp sharpIni postsmdX postsmdY clipImgProcNeg
if isempty(presmdX); presmdX=0; end; set(handles.editPresmdX,'String',sprintf('%g',presmdX));
if isempty(presmdY); presmdY=0; end; set(handles.editPresmdY,'String',sprintf('%g',presmdY));
if isempty(structMode); structMode=1; end; set(handles.menuStructMode,'Value',structMode)
if structMode==1; set([handles.textSharp handles.editSharp],'Visible','Off'); else set([handles.textSharp handles.editSharp],'Visible','On'); end
sharpIni=0; if isempty(sharp); sharp=sharpIni; end; set(handles.editSharp,'String',sprintf('%g',sharp));
if isempty(postsmdX); postsmdX=0; end; set(handles.editPostsmdX,'String',sprintf('%g',postsmdX));
if isempty(postsmdY); postsmdY=0; end; set(handles.editPostsmdY,'String',sprintf('%g',postsmdY));
if isempty(clipImgProcNeg); clipImgProcNeg=1; end; set(handles.radiobuttonClipImgProcNeg,'Value',clipImgProcNeg);
%if modeView==1; set(handles.menuStructMode,'String',{'None';'Curvature' ; '-d2I/dE2>0'}); else; set(handles.menuStructMode,'String',{'None';'Curvature'}); end
% % - figure position
% global xPos_View yPos_View
% Pos=get(gcf,'position'); offsetFigHeader=29;
% set(gcf,'position',[xPos_View yPos_View-Pos(4)-offsetFigHeader Pos(3) Pos(4)]);
% --- Outputs from this function are returned to the command line.
function varargout = ImgProcSetup_OutputFcn(~,~,handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in editPresmdX.
function editPresmdX_Callback(hObject,~,~)
global presmdX; presmdX=field2num(hObject,0);
% --- Executes on button press in editPresmdY.
function editPresmdY_Callback(hObject,~,~)
global presmdY; presmdY=field2num(hObject,0);
% --- Executes on selection change in menuStructMode.
function menuStructMode_Callback(hObject,~,handles)
global structMode; structMode=get(hObject,'Value');
if structMode==1; set([handles.textSharp handles.editSharp],'Visible','Off'); else set([handles.textSharp handles.editSharp],'Visible','On'); end
function editSharp_Callback(hObject, ~,~)
global sharp sharpIni; sharp=field2num(hObject,sharpIni);
% --- Executes on button press in editPostsmdX.
function editPostsmdX_Callback(hObject,~,~)
global postsmdX; postsmdX=field2num(hObject,0);
% --- Executes on button press in editPresmdY.
function editPostsmdY_Callback(hObject,~,~)
global postsmdY; postsmdY=field2num(hObject,0);
% --- Executes on button press in radiobuttonClipImgProcNeg.
function radiobuttonClipImgProcNeg_Callback(hObject,~,~)
global clipImgProcNeg; clipImgProcNeg=get(hObject,'value');
% Hints: get(hObject,'String') returns contents of editSharp as text
% str2double(get(hObject,'String')) returns contents of editSharp as a double
% % --- Executes on button press in editXRange.
% function editXRange_Callback(hObject,~,~)
% global XRange
% XRange=field2num(hObject); if length(XRange)~=2; XRange=[]; set(hObject,'String','Full'); end
%
% % --- Executes on button press in editYRange.
% function editYRange_Callback(hObject,~,~)
% global YRange
% YRange=field2num(hObject); if length(YRange)~=2; YRange=[]; set(hObject,'String','Full'); end
% Hint: get(hObject,'Value') returns toggle state of radiobuttonClipImgProcNeg
@@ -0,0 +1,86 @@
function varargout = LockSetup(varargin)
% LOCKSETUP MATLAB code for LockSetup.fig
% LOCKSETUP, by itself, creates a new LOCKSETUP or raises the existing
% singleton*.
% H = LOCKSETUP returns the handle to a new LOCKSETUP or the handle to
% the existing singleton*.
% LOCKSETUP('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in LOCKSETUP.M with the given input arguments.
% LOCKSETUP('Property','Value',...) creates a new LOCKSETUP or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before LockSetup_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to LockSetup_OpeningFcn via varargin.
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
% Last Modified by GUIDE v2.5 26-Apr-2020 14:27:52
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @LockSetup_OpeningFcn, ...
'gui_OutputFcn', @LockSetup_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before LockSetup is made visible.
function LockSetup_OpeningFcn(hObject,~,handles,varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% varargin command line arguments to LockSetup (see VARARGIN)
% Choose default command line output for LockSetup
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% figure properties
% set(gcf,'WindowStyle','modal')
% global parameters
% - initial values
global feat_Lock setTo_Lock dESm_Lock dEWin_Lock
if isequal(feat_Lock,'Peak'); set(handles.popupmenuFeat,'Value',2); else set(handles.popupmenuFeat,'Value',1); end
set(handles.editSetTo,'String',num2str(setTo_Lock));
if isempty(dESm_Lock); set(handles.editSmooth,'String','Auto'); else; set(handles.editSmooth,'String',num2str(dESm_Lock)); end
if isempty(dEWin_Lock); set(handles.editSearch,'String','Auto'); else; set(handles.editSearch,'String',num2str(dEWin_Lock)); end
% % - figure position
% global xPos_Lock yPos_Lock
% Pos=get(gcf,'position'); offsetFigHeader=29;
% set(gcf,'position',[xPos_Lock yPos_Lock-Pos(4)-offsetFigHeader Pos(3) Pos(4)]);
% --- Outputs from this function are returned to the command line.
function varargout = LockSetup_OutputFcn(~,~,handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on selection change in popupmenuFeat.
function popupmenuFeat_Callback(hObject,~,~)
global feat_Lock
val=get(hObject,'Value'); if val==2; feat_Lock='Peak'; end
% --- Executes on button press in editSetTo.
function editSetTo_Callback(hObject,~,~)
global setTo_Lock
setTo_Lock=str2num(get(hObject,'String'));
if isempty(setTo_Lock); set(hObject,'String','0.0'); end
% --- Executes on button press in editSmooth.
function editSmooth_Callback(hObject,~,~)
global dESm_Lock
dESm_Lock=str2num(get(hObject,'String'));
if isempty(dESm_Lock); set(hObject,'String','Auto'); end
% --- Executes on button press in editSearch.
function editSearch_Callback(hObject,~,~)
global dEWin_Lock
dEWin_Lock=str2num(get(hObject,'String'));
if isempty(dEWin_Lock); set(hObject,'String','Auto'); end
@@ -0,0 +1,113 @@
function varargout = NaviSetup(varargin)
% Ver. 21Aug2022
% NAVISETUP MATLAB code for NaviSetup.fig
% NAVISETUP, by itself, creates a new NAVISETUP or raises the existing
% singleton*.
% H = NAVISETUP returns the handle to a new NAVISETUP or the handle to
% the existing singleton*.
% NAVISETUP('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in NAVISETUP.M with the given input arguments.
% NAVISETUP('Property','Value',...) creates a new NAVISETUP or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before NaviSetup_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to NaviSetup_OpeningFcn via varargin.
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
% Last Modified by GUIDE v2.5 21-May-2020 19:44:12
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @NaviSetup_OpeningFcn, ...
'gui_OutputFcn', @NaviSetup_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before NaviSetup is made visible.
function NaviSetup_OpeningFcn(hObject,~,handles,varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% varargin command line arguments to NaviSetup (see VARARGIN)
% Choose default command line output for NaviSetup
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% figure properties
% set(gcf,'WindowStyle','modal')
% global parameters
global surfNx_Navi hv_N eB_N kx_N thtM thtM_N thtA_N alpha
set(handles.editHv,'String',sprintf('%0.3f',hv_N));
thtM_N=thtM; set(handles.editThtM,'String',sprintf('%0.3f',thtM_N));
set(handles.editEB,'String',sprintf('%0.3f',eB_N));
kx_N=0; % kx_N=[];
set(handles.editKx,'String',sprintf('%0.3f',kx_N));
set(handles.editThtA,'String',sprintf('%0.3f',thtA_N));
surfNx_Navi=SurfNormX(hv_N,eB_N,kx_N,thtM_N,thtA_N,alpha);
set(handles.textSurfNormX,'String',['surfNx = ' sprintf('%0.3f',surfNx_Navi)]);
% % - figure position
% global xPos_Navi yPos_Navi
% if ~isempty(xPos_Navi*yPos_Navi)
% Pos=get(gcf,'position'); offsetFigHeader=29; set(gcf,'position',[xPos_Navi yPos_Navi-Pos(4)-offsetFigHeader Pos(3) Pos(4)]);
% end
% --- Outputs from this function are returned to the command line.
function varargout = NaviSetup_OutputFcn(~,~,handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% Get default command line output from handles structure
varargout{1} = handles.output;
function editHv_Callback(hObject,~,handles)
global hv_N eB_N kx_N thtM_N thtA_N surfNx_Navi alpha
hv_N=field2num(hObject);
if length(hv_N)==1
surfNx_Navi=SurfNormX(hv_N,eB_N,kx_N,thtM_N,thtA_N,alpha);
set(handles.textSurfNormX,'String',['surfNx = ' sprintf('%0.3f',surfNx_Navi)]);
end
%set(hObject,'String',num2str(hv_N))
function editThtM_Callback(hObject,~,handles)
global hv_N eB_N kx_N thtM_N thtA_N surfNx_Navi alpha
thtM_N=field2num(hObject);
if length(thtM_N)==1
surfNx_Navi=SurfNormX(hv_N,eB_N,kx_N,thtM_N,thtA_N,alpha);
set(handles.textSurfNormX,'String',['surfNx = ' sprintf('%0.3f',surfNx_Navi)]);
end
%set(hObject,'String',num2str(thtM_N))
function editKx_Callback(hObject,~,handles)
global hv_N eB_N kx_N thtM_N thtA_N surfNx_Navi alpha
kx_N=field2num(hObject);
if length(kx_N)==1
surfNx_Navi=SurfNormX(hv_N,eB_N,kx_N,thtM_N,thtA_N,alpha);
set(handles.textSurfNormX,'String',['surfNx = ' sprintf('%0.3f',surfNx_Navi)]);
end
%set(hObject,'String',num2str(kx_N))
function editThtA_Callback(hObject,~,handles)
global hv_N eB_N kx_N thtM_N thtA_N surfNx_Navi alpha
thtA_N=field2num(hObject);
if length(thtA_N)==1
surfNx_Navi=SurfNormX(hv_N,eB_N,kx_N,thtM_N,thtA_N,alpha);
set(handles.textSurfNormX,'String',['surfNx = ' sprintf('%0.3f',surfNx_Navi)]);
end
%set(hObject,'String',num2str(thtA_N))
function editEB_Callback(hObject,~,handles)
global hv_N eB_N kx_N thtM_N thtA_N surfNx_Navi alpha
eB_N=field2num(hObject);
if length(eB_N)==1
surfNx_Navi=SurfNormX(hv_N,eB_N,kx_N,thtM_N,thtA_N,alpha);
set(handles.textSurfNormX,'String',['surfNx= ' sprintf('%0.3f',surfNx_Navi)]);
end
%set(hObject,'String',num2str(eB_N))
@@ -0,0 +1,87 @@
function varargout = NormSetup(varargin)
% NORMSETUP MATLAB code for NormSetup.fig
% NORMSETUP, by itself, creates a new NORMSETUP or raises the existing
% singleton*.
% H = NORMSETUP returns the handle to a new NORMSETUP or the handle to
% the existing singleton*.
% NORMSETUP('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in NORMSETUP.M with the given input arguments.
% NORMSETUP('Property','Value',...) creates a new NORMSETUP or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before NormSetup_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to NormSetup_OpeningFcn via varargin.
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
% Last Modified by GUIDE v2.5 04-Nov-2020 16:28:10
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @NormSetup_OpeningFcn, ...
'gui_OutputFcn', @NormSetup_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before NormSetup is made visible.
function NormSetup_OpeningFcn(hObject,~,handles,varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% varargin command line arguments to NormSetup (see VARARGIN)
% Choose default command line output for NormSetup
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% figure properties
% set(gcf,'WindowStyle','modal')
% global parameters
% - initial values
global RangeNorm scCoeff scCoeffIni clipNormNeg
% if isempty(RangeNorm)||isempty(str2num(RangeNorm)); set(handles.editRange,'String','Full'); else set(handles.editRange,'String',sprintf('%g:%g',RangeNorm)); end
if isempty(RangeNorm); set(handles.editRange,'String','Full'); else set(handles.editRange,'String',sprintf('%g:%g',RangeNorm)); end
if isempty(scCoeff); scCoeff=scCoeffIni; end; set(handles.editSubtr,'String',num2str(scCoeff))
if isempty(clipNormNeg); clipNormNeg=1; end; set(handles.radiobuttonClipNormNeg,'Value',clipNormNeg)
% % - figure position
% global xPos_Norm yPos_Norm
% Pos=get(gcf,'position'); offsetFigHeader=29;
% set(gcf,'position',[xPos_Norm yPos_Norm-Pos(4)-offsetFigHeader Pos(3) Pos(4)]);
% --- Outputs from this function are returned to the command line.
function varargout = NormSetup_OutputFcn(~,~,handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in editRange.
function editRange_Callback(hObject,~,~)
% hObject handle to editRange (see GCBO)
% clear normalization array
global RangeNorm IDiv ISubtr
IDiv=[]; ISubtr=[]; disp('- cleared IDiv ISubtr')
% energy range
% RangeStr=get(hObject,'String'); RangeStr=strrep(RangeStr,':',' '); Range=sort(str2num(RangeStr));
% if length(Range)==2; RangeNorm=Range; else RangeNorm=RangeIni; end
RangeNorm=field2num(hObject); if length(RangeNorm)~=2; RangeNorm=[]; set(hObject,'String','Full'); end
% set(hObject,'String',[num2str(RangeNorm(1)) ':' num2str(RangeNorm(2))]);
% --- Executes on button press in editSubtr.
function editSubtr_Callback(~,~,handles)
% hObject handle to editSubtr (see GCBO)
global scCoeff scCoeffIni
% Scaling coefficient to subtract angle-integrated spectrum
scCoeff=field2num(handles.editSubtr,scCoeffIni);
% set(handles.editSubtr,'String',num2str(scCoeffIni));
% --- Executes on button press in radiobuttonClipNormNeg.
function radiobuttonClipNormNeg_Callback(hObject,~,~)
global clipNormNeg; clipNormNeg=get(hObject,'value');
@@ -0,0 +1,44 @@
function varargout = RawTableDisplay(varargin)
% Created by X. Wang, 02-Feb-2021
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @RawTableDisplay_OpeningFcn, ...
'gui_OutputFcn', @RawTableDisplay_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before RawTableDisplay is made visible.
function RawTableDisplay_OpeningFcn(hObject,~, handles, varargin)
% This function has no output args, see OutputFcn.
% varargin command line arguments to RawTableDisplay (see VARARGIN)
% Set table properties
emptyRow = TableColumns.emptyRow(); numberColumns = TableColumns.Activate - 1; set(handles.tableRaw, 'Data', emptyRow(1:numberColumns));
coledit = true(1, numberColumns); set(handles.tableRaw, 'ColumnEditable', coledit);
colname = TableColumns.columnNames(); set(handles.tableRaw, 'ColumnName', colname(1:numberColumns));
colformat = TableColumns.columnFormats(); set(handles.tableRaw, 'ColumnFormat', colformat(1:numberColumns));
colwidth = TableColumns.columnWidth(); colwidth{TableColumns.File} = 0; colwidth{TableColumns.Comment} = 0;
colwidth{TableColumns.Sweeps} = 50; colwidth{TableColumns.Y} = 'auto'; set(handles.tableRaw, 'ColumnWidth', colwidth);
% Find main GUI from input argument
rawData = varargin{1};
set(handles.tableRaw, 'Data', rawData);
handles.output = hObject;
% Update handles structure
guidata(hObject, handles); uiwait(hObject);
% --- Outputs from this function are returned to the command line.
function varargout = RawTableDisplay_OutputFcn(~,~,~)
% varargout cell array for returning output args (see VARARGOUT);
% Get default command line output from handles structure
%varargout{1} = handles.output;
@@ -0,0 +1,72 @@
% X. Wang, 02-Feb-2021
classdef TableColumns < uint32
enumeration
% File
File(1)
Comment(2)
% Beamline
hv(3)
Polarization(4)
Slit(5)
% Analyzer
Mode(6)
Epass(7)
EbEk(8)
Energy(9)
dt(10)
Sweeps(11)
% Manipulator
Theta(12)
Tilt(13)
Azimuth(14)
X(15)
Y(16)
Z(17)
% Control
Activate(18)
Action(19)
Time(20)
end
methods(Static)
function v = numberColumns()
v = 20;
end
function v = vectorizableColumns()
v = [hv, Theat, Tilt, Azimuth, X, Z];
end
function v = emptyRow()
v = {'' '' ... % File
'' '' [] ... % Beamline
'' [] '' '' '' [] ... % Analyzer
'' '' '' '' '' ''... % Manipulator
false 'Select' '' % Control
};
end
function v = columnNames()
v = {'File', 'Comment', ...
'<html><b><i>hv</i></b></html>', 'Pol', 'Slit', ...
'Mode', 'Epass', 'Eb/k', 'Energy', 'dt(s)', 'Sweeps', ...
'<html><b><i>Theta</i></b></html>', ...
'<html><b><i>Tilt</i></b></html>', ...
'<html><b><i>Azim</i></b></html>', ...
'<html><b><i>X</i></b></html>', ...
'<html><b><i>Y</i></b></html>', ...
'<html><b><i>Z</i></b></html>', ...
'Activate', 'Action', 'T(min)'};
end
function v = columnFormats()
v = {'char', 'char', ...
'char', {'LH','LV','C+','C-'}, 'char',...
{'WAM','MAM','LAD'}, 'char', {'Eb','Ek'}, 'char', 'char', 'char', ...
'char', 'char', 'char', 'char', 'char', 'char' ...
'logical', {'Select','Clear','Copy','Paste','Edit Raw', 'Load Raw'}, 'char'};
end
function v = columnWidth()
v = {122 122 ...
80 40 40 ...
45 40 40 80 30 0 ...
70 70 70 70 0 70 ...
50 70 70};
end
end
end
@@ -0,0 +1,90 @@
function varargout = ViewSetup(varargin)
% VIEWSETUP MATLAB code for ViewSetup.fig
% VIEWSETUP, by itself, creates a new VIEWSETUP or raises the existing
% singleton*.
% H = VIEWSETUP returns the handle to a new VIEWSETUP or the handle to
% the existing singleton*.
% VIEWSETUP('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in VIEWSETUP.M with the given input arguments.
% VIEWSETUP('Property','Value',...) creates a new VIEWSETUP or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before ViewSetup_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to ViewSetup_OpeningFcn via varargin.
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
% Last Modified by GUIDE v2.5 05-Nov-2020 12:36:57
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @ViewSetup_OpeningFcn, ...
'gui_OutputFcn', @ViewSetup_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before ViewSetup is made visible.
function ViewSetup_OpeningFcn(hObject,~,handles,varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% varargin command line arguments to ViewSetup (see VARARGIN)
% Choose default command line output for ViewSetup
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% figure properties
% set(gcf,'WindowStyle','modal')
% global parameters
% - initial values
global FracView FracViewIni XRange YRange viewMode gamma gammaIni render renderIni
if viewMode==2; set([handles.editFracView handles.editGamma handles.popupmenuRender],'Enable','Off');
else set([handles.editFracView handles.editGamma handles.popupmenuRender],'Enable','On'); end
if isempty(FracView); FracView=FracViewIni; end; set(handles.editFracView,'String',sprintf('%g:%g',FracView));
if isempty(XRange); set(handles.editXRange,'String','Full'); else; set(handles.editXRange,'String',sprintf('%g:%g',XRange)); end
if isempty(YRange); set(handles.editYRange,'String','Full'); else; set(handles.editYRange,'String',sprintf('%g:%g',YRange)); end
gammaIni=1; if isempty(gamma); gamma=gammaIni; end; set(handles.editGamma,'String',gamma);
renderIni='Flat'; if isempty(render); render=renderIni; end; if isequal(render,'Flat'); set(handles.popupmenuRender,'value',1); else set(handles.popupmenuRender,'value',2); end
% % - figure position
% global xPos_View yPos_View
% Pos=get(gcf,'position'); offsetFigHeader=29;
% set(gcf,'position',[xPos_View yPos_View-Pos(4)-offsetFigHeader Pos(3) Pos(4)]);
% --- Outputs from this function are returned to the command line.
function varargout = ViewSetup_OutputFcn(~,~,handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in editFracView.
function editFracView_Callback(hObject,~,~)
global FracView FracViewIni
FracView=field2num(hObject); if length(FracView)~=2; FracView=FracViewIni; set(hObject,'String',sprintf('%g:%g',FracView)); end
% --- Executes on button press in editXRange.
function editXRange_Callback(hObject,~,~)
global XRange
XRange=field2num(hObject); if length(XRange)~=2; XRange=[]; set(hObject,'String','Full'); end
% --- Executes on button press in editYRange.
function editYRange_Callback(hObject,~,~)
global YRange
YRange=field2num(hObject); if length(YRange)~=2; YRange=[]; set(hObject,'String','Full'); end
function editGamma_Callback(hObject,~,~)
global gamma
gamma=field2num(hObject,1); set(hObject,'String',num2str(gamma))
% --- Executes on selection change in popupmenuRender.
function popupmenuRender_Callback(hObject,~,~)
global render
val=get(hObject,'Value'); if val==1; render='Flat'; else render='Interp'; end
@@ -0,0 +1,16 @@
function Num = field2num(Field,DefaultNum)
% Num = field2num(Field [,DefaultNum]) reads numerical input in Field (scalar or
% a two-element vector separated by colon) into Num relayed in the field. If input
% is invalid and DefaultNum specified, Num and the field are set to DefaultNum.
% if ~isequal(Field,'hObject'); eval('Field=[''handles.'' Field];'); end % does not work
Str=get(Field,'String'); if ~isempty(findstr(Str,' ')); Str='XXX'; end; Str=strrep(Str,':',' ');
% Num=sort(str2num(Str));
Num=str2num(Str);
if nargin>1
if isempty(Num)||length(Num)>2; Num=DefaultNum;
if length(DefaultNum)==1; set(Field,'String',sprintf('%g',DefaultNum))
else set(Field,'String',sprintf('%g:%g',DefaultNum))
end
end
end
@@ -0,0 +1,81 @@
function [EAlign,EF,Fail]=AlignEF(Data,ECorr,eWin,dEWin,dESmooth,feat)
% [EAlign,EF,Fail]=AlignEF(Data,ECorr [,eWin] [,dEWin] [,dESmooth] [,feat]) aligns the energy scale relative
% to EF or peak . The inputs are 2D or 3D data array Data, corresponding 1D-column % vector or
% (curvature corrected) 2D-matrix of energies ECorr, (optional scalar/vector of the length size(Data,3) or
% empty value) approximate EF position eWin, (optional or empty value) width of the EF support dEWin,
% (optional or empty value) Gaussian pre-smoothing energy width dESmooth, and (optional or empty
% value) feat = 'Peak' (case-insensitive) defines the feature to align as a peak instead of the default Fermi
% edge. If eWin,dEWin and dESmooth are skipped or empty values, they take reasonable automatic
% values. The output EF is the determined EF positions in the input energy scale. Fail returns the indices
% of the scans where the alignment failed and EF was set to eWin.
% - Ver. 7 Mar 2020 (added vectorization of eWin)
disp('- EF alignment')
% parameters
% - dimensions
nE=size(Data,1); nA=size(Data,2); nS=size(Data,3);
% - energy matrix
if size(ECorr,2)==1; rep=1; ECorr=repmat(ECorr,1,nA); else rep=0; end
% - energy interval and step
eMin=max(ECorr(1,:)); eMax=min(ECorr(end,:)); eInterval=eMax-eMin; dE=eInterval/(size(ECorr,1)-1);
% - failed alignment indices
Fail=[];
% automatic parameters
if nargin<6; feat='Edge'; end
if nargin<5; dESmooth=[]; end; if isempty(dESmooth); dESmooth=0.01*eInterval; end
if nargin<4; dEWin=[]; end; if isempty(dEWin); dEWin=0.1*eInterval; end
if nargin<3; eWin=[]; end; if isempty(eWin); eWin=eMin+0.7*eInterval; dEWin=0.1*eInterval; end
if isscalar(eWin); eWin=eWin*ones(1,size(Data,3)); end
if length(eWin)~=size(Data,3); disp('- AlignEF: Incompatible eWin length'); return; end
% angle integration (can be replaced by evalc(IntAngle(...), where evalc suppresses text output)
% - reference grid
EInt=(eMin:dE:eMax)';
% - cycle over angles in triads for speed
AngleInt=zeros(length(EInt),nS);
for iS=1:nS
if nA>1
for iA=round(0.05*nA)+1:3:round(0.95*nA)-1
% - interpolation on the reference grid
ACorr=interp1(ECorr(:,iA),sum(Data(:,iA-1:iA+1,iS),2),EInt);
% - angle integration
AngleInt(:,iS)=AngleInt(:,iS)+ACorr;
end
else
AngleInt(:,iS)=Data(:,1,nS);
end
end
% processing
% - logarithmic derivative if edge not peak
if ~isequal(lower(feat),'peak')
D=AngleInt(3:length(EInt),:)-AngleInt(1:length(EInt)-2,:); D=[D(1,:);D;D(end,:)];
D=D./AngleInt;
else D=-1*AngleInt; end
% - smoothing (after the derivation to suppress the spikes)
hwPts=dESmooth/dE; hsPts=3*hwPts; DS=Gaco1(D,hwPts,hsPts);
% alignment at EF
% - cycle through scans
EAlign=zeros(nE,nA,nS); EF=zeros(1,nS);
for iS=1:nS
% - alignment region
DS1=DS(EInt>=eWin(iS)-dEWin/2&EInt<=eWin(iS)+dEWin/2,iS);
ERef=EInt(EInt>=eWin(iS)-dEWin/2&EInt<=eWin(iS)+dEWin/2);
% - locating the minimum
L=DS1(1:end-2); C=DS1(2:end-1); R=DS1(3:end); IMinima=1+find(C<L&C<R);
if isempty(IMinima)
eF=eWin(iS); Fail=[Fail iS];
disp(['Error in AlignEF.m: Failed to locate EF, scan = ' num2str(iS)]);
else
% - eF as the global minimum
[~,iMin]=min(DS1(IMinima)); ind=IMinima(iMin);
x=XYMax(-1*(DS1(ind-1:ind+1))');
eF=ERef(ind-1)+x*(ERef(ind)-ERef(ind-1));
end
% - energy matrix alignment
EAlign(:,:,iS)=ECorr-eF; EF(iS)=eF;
end
% - reduction to energy vector
if rep==1; EAlign=mean(EAlign,2); end
@@ -0,0 +1,50 @@
function ECorr=CurveCorr(Angle,Energy,ep,CurveFit)
% ECorr=CurveCorr(Angle,Energy [,ep] [,CurveFit]) returns curvature corrected matrix
% of (binding or kinetic) energies ECorr for the vector of angles Angle, vector of
% (binding or kinetic) energies Energy and pass energy ep with the curvature fit data
% taken from the file CurveFit. If the input ep is omitted or empty, it is set to the
% default value based on the input energy range.
% Note: CurveCorr assumes the raw size of the data array as produced by
% ReadARPES without trimming
disp('- Curvature correction')
% parameters
nA=length(Angle);
% default pass energy
if nargin<3; ep=[]; end
if isempty(ep)
ep=(Energy(end)-Energy(1))/(2*0.066);
end
% default calibration file
if nargin<4; CurveFit=[]; end
if isempty(CurveFit)
CurveFit='CurveFit.dat';
end
% mode WAM/MAM/LAD/MAD = 1/2/3/4
aRange=Angle(end)-Angle(1);
mode=4; if aRange>12; mode=3; end; if aRange>18; mode=2; end; if aRange>24; mode=1; end;
% load curvature correction
CurveFit=load(CurveFit);
% select the mode
ind=find(CurveFit(:,1)==mode);
if isempty(ind); disp('- Error: Angular mode not curvature calibrated'); ECorr=[]; return
else CurveFit=CurveFit(ind,2:end);
end
% interpolate fitting coefficients
if size(CurveFit,1)==1
curveFit=CurveFit(2:end);
else
Ep=[0;CurveFit(:,1);realmax];
CurveFit=[CurveFit(1,2:end);CurveFit(:,2:end);CurveFit(end,2:end)];
curveFit=interp1q(Ep',CurveFit,ep);
end
% append zero constant term
curveFit=[curveFit 0];
% angle-dependent energy correction
ECorr=polyval(curveFit,Angle)*ep;
% corrected energy matrix
ECorr=repmat(Energy,1,nA)-repmat(ECorr,length(Energy),1);
@@ -0,0 +1,59 @@
% WAM data: Derived from the data taken on 10.07.2013 with Ag 3d doublet,
% only the high-energy peak, Ek~350eV, range +/-14deg, Uconv=-0.1*Ep
1.0000000e+00 3.0000000e+01 5.7549797e-08 2.1158619e-07 -3.3674509e-05 -8.4042108e-05
1.0000000e+00 3.5000000e+01 1.0505235e-07 7.1089350e-07 -5.1345310e-05 -1.5238416e-04
1.0000000e+00 4.0000000e+01 9.2186459e-08 6.4460407e-07 -4.5949043e-05 -1.3554235e-04
1.0000000e+00 5.0000000e+01 7.0686093e-08 5.2940559e-07 -3.9347857e-05 -1.1235947e-04
1.0000000e+00 6.0000000e+01 5.6283692e-08 4.5041152e-07 -3.3508238e-05 -9.4024728e-05
1.0000000e+00 7.0000000e+01 4.6072350e-08 3.8347197e-07 -3.0571355e-05 -8.1005505e-05
1.0000000e+00 8.0000000e+01 2.9146535e-08 2.2734112e-07 -2.4364012e-05 -5.0864007e-05
1.0000000e+00 9.0000000e+01 2.5496097e-08 1.9852660e-07 -2.4291307e-05 -4.4976466e-05
1.0000000e+00 1.0000000e+02 3.1989259e-08 2.4854284e-07 -2.8141413e-05 -5.4139857e-05
1.0000000e+00 1.1000000e+02 2.7389427e-08 2.5019251e-07 -2.6970258e-05 -5.4302099e-05
1.0000000e+00 1.2000000e+02 2.2344655e-08 2.3894543e-07 -2.5521078e-05 -5.1900527e-05
1.0000000e+00 1.3000000e+02 2.0850462e-08 2.2253980e-07 -2.4625183e-05 -4.9655316e-05
1.0000000e+00 1.5000000e+02 1.8535201e-08 2.1325583e-07 -2.3211084e-05 -4.6419003e-05
1.0000000e+00 1.7000000e+02 1.7530471e-08 1.9432319e-07 -2.2085372e-05 -4.2948120e-05
1.0000000e+00 1.9000000e+02 1.7808490e-08 1.9211485e-07 -2.1718196e-05 -4.1936317e-05
1.0000000e+00 2.1000000e+02 1.6743817e-08 1.7716850e-07 -2.1202846e-05 -3.9064115e-05
1.0000000e+00 2.3000000e+02 1.5972928e-08 1.6835411e-07 -2.0703645e-05 -3.7292074e-05
% MAM data: Derived from the data taken on 06.02.2014 with Au 4f doublet,
% only the high-energy peak, Ek=600eV, range +/-10deg, Uconv=-0.1*Ep
2.0000000e+00 5.0000000e+01 -5.1437913e-08 -1.2542236e-08 -1.7764284e-05 -3.7514664e-05
2.0000000e+00 6.0000000e+01 -1.8041414e-08 -2.4458453e-08 -2.3996694e-05 -4.1370343e-05
2.0000000e+00 7.0000000e+01 2.9236181e-08 1.2566237e-07 -2.9297142e-05 -5.2360323e-05
2.0000000e+00 8.0000000e+01 1.2752606e-08 7.8533778e-08 -2.7479533e-05 -4.9415261e-05
2.0000000e+00 9.0000000e+01 7.5112234e-09 2.0679238e-08 -2.5652457e-05 -4.2271472e-05
2.0000000e+00 1.0000000e+02 -1.4011202e-08 2.8402782e-09 -2.2424522e-05 -3.9853476e-05
2.0000000e+00 1.1000000e+02 4.0507111e-09 5.9354326e-08 -2.4315809e-05 -4.3545690e-05
2.0000000e+00 1.2000000e+02 1.5488383e-08 8.7218602e-08 -2.5835792e-05 -4.4856094e-05
2.0000000e+00 1.3000000e+02 4.8677328e-09 1.4383923e-07 -2.3652203e-05 -4.6226302e-05
2.0000000e+00 1.5000000e+02 -5.7244407e-08 -5.8666841e-08 -1.7606347e-05 -3.4487768e-05
2.0000000e+00 1.7000000e+02 -4.1382132e-08 -2.8961874e-08 -1.9501614e-05 -3.6009241e-05
2.0000000e+00 1.9000000e+02 -2.2639470e-08 3.7623335e-09 -2.1696643e-05 -3.8397051e-05
2.0000000e+00 2.1000000e+02 -1.2801735e-08 -2.3204288e-08 -2.2944474e-05 -3.6757262e-05
2.0000000e+00 2.4000000e+02 -1.1737097e-08 -5.1748812e-09 -2.2853740e-05 -3.6909846e-05
2.0000000e+00 2.8000000e+02 -7.8257657e-09 1.2411199e-08 -2.3460122e-05 -3.7130127e-05
2.0000000e+00 3.2000000e+02 2.7760873e-09 2.3242272e-08 -2.4619223e-05 -3.7341181e-05
2.0000000e+00 3.6000000e+02 -1.5466724e-08 -1.2627854e-08 -2.2548439e-05 -3.4346397e-05
2.0000000e+00 4.0000000e+02 -1.8199853e-08 -1.9653684e-08 -2.2350511e-05 -3.3019789e-05
% LAD data: Derived from the data taken on 10.07.2013 with As 3d doublet,
% average of two peaks, Ek~450eV, range +/-7deg, Uconv=-0.1*Ep
3.0000000e+00 2.0000000e+01 -5.6590710e-07 3.7657977e-07 -4.5918343e-05 -1.5095901e-04
3.0000000e+00 2.5000000e+01 -4.7487888e-08 8.0426266e-07 -5.3329296e-05 -1.0409184e-04
3.0000000e+00 3.0000000e+01 4.6092656e-08 5.1490354e-07 -5.7203510e-05 -9.6523178e-05
3.0000000e+00 4.0000000e+01 -3.9284756e-08 5.1742300e-07 -5.2464655e-05 -5.7580797e-05
3.0000000e+00 5.0000000e+01 -9.4676429e-08 3.5994451e-07 -5.5091213e-05 -4.8691923e-05
3.0000000e+00 6.0000000e+01 -1.7565702e-09 3.6889550e-07 -5.9880389e-05 -4.8252266e-05
3.0000000e+00 7.0000000e+01 -2.0084433e-08 4.1847882e-07 -5.8378467e-05 -4.8201603e-05
3.0000000e+00 8.0000000e+01 -8.1540589e-09 3.3351325e-07 -5.7895254e-05 -4.5131684e-05
3.0000000e+00 1.0000000e+02 6.1610583e-10 4.3373624e-07 -5.9036927e-05 -4.7745530e-05
3.0000000e+00 1.2000000e+02 -6.0724832e-09 3.4058051e-07 -5.8828172e-05 -4.3386438e-05
3.0000000e+00 1.4000000e+02 2.5038671e-08 2.7496880e-07 -6.0021915e-05 -3.9312189e-05
3.0000000e+00 1.6000000e+02 2.1618208e-09 2.6940645e-07 -5.9964532e-05 -3.9010305e-05
3.0000000e+00 1.8000000e+02 9.8608825e-09 2.5477795e-07 -6.0625964e-05 -3.6786976e-05
3.0000000e+00 2.2000000e+02 3.6290369e-08 2.3779143e-07 -6.1622441e-05 -3.2874057e-05
3.0000000e+00 2.6000000e+02 3.4024333e-08 2.3038477e-07 -6.0573206e-05 -3.1100064e-05
3.0000000e+00 2.6000000e+02 3.4024333e-08 2.3038477e-07 -6.0573206e-05 -3.1100064e-05
@@ -0,0 +1,35 @@
% WAM data: Derived from the data taken on 10.07.2013 with Ag3d doublet,
% only the high-energy peak, Ek~350eV, range +/-14deg, Uconv=0
1.0000000e+00 3.0000000e+01 2.1306546e-08 1.4768044e-07 -2.8795764e-05 -8.5032310e-05
% 1.0000000e+00 3.0000000e+01 1.0393199e-07 3.3741764e-07 -3.8090737e-05 -9.8030810e-05
1.0000000e+00 3.5000000e+01 1.0631018e-07 7.5754682e-07 -5.1340744e-05 -1.5328049e-04
1.0000000e+00 4.0000000e+01 1.0080948e-07 6.8498696e-07 -4.7175019e-05 -1.3615200e-04
1.0000000e+00 5.0000000e+01 7.9379740e-08 5.8225266e-07 -4.1056249e-05 -1.1444108e-04
1.0000000e+00 6.0000000e+01 6.4803800e-08 4.9031506e-07 -3.5221582e-05 -9.4853610e-05
1.0000000e+00 7.0000000e+01 5.2840298e-08 4.0994889e-07 -3.2070365e-05 -8.0827960e-05
1.0000000e+00 8.0000000e+01 3.4672706e-08 2.4991694e-07 -2.5523078e-05 -5.1622928e-05
1.0000000e+00 9.0000000e+01 2.8673121e-08 2.1401474e-07 -2.5286271e-05 -4.5141067e-05
1.0000000e+00 1.0000000e+02 2.7832710e-08 2.0968809e-07 -2.5140436e-05 -4.3153996e-05
1.0000000e+00 1.1000000e+02 3.0312848e-08 2.7422049e-07 -2.8034394e-05 -5.4651777e-05
1.0000000e+00 1.2000000e+02 2.7064196e-08 2.6192190e-07 -2.6748270e-05 -5.2730280e-05
1.0000000e+00 1.3000000e+02 2.3602394e-08 2.4425979e-07 -2.5610484e-05 -5.0146420e-05
1.0000000e+00 1.5000000e+02 2.1596039e-08 2.3548527e-07 -2.4195916e-05 -4.7598225e-05
1.0000000e+00 1.7000000e+02 2.2027151e-08 2.2445147e-07 -2.3256239e-05 -4.4669348e-05
1.0000000e+00 1.9000000e+02 2.1021630e-08 2.0826566e-07 -2.2647293e-05 -4.1608327e-05
1.0000000e+00 2.1000000e+02 1.9713603e-08 1.9696854e-07 -2.2082909e-05 -3.9933074e-05
1.0000000e+00 2.3000000e+02 1.6458739e-08 1.6959803e-07 -2.0449888e-05 -3.4962645e-05
% LAD data: Derived from the data taken on 08.09.2011 with Bi4f doublet,
% only the high-energy peak, Ek~335eV, range +/-8deg, Uconv=0.
2.0000000e+00 2.0000000e+01 -3.8292981e-07 -6.8686463e-07 -2.0384950e-05 -4.4744837e-05
2.0000000e+00 3.0000000e+01 -9.1341088e-08 -3.3673794e-07 -3.8264046e-05 -3.3915924e-05
2.0000000e+00 4.0000000e+01 -1.9917581e-08 7.3363282e-08 -4.2197301e-05 -3.1728725e-05
2.0000000e+00 5.0000000e+01 2.7592216e-08 -1.3185723e-07 -4.5099978e-05 -2.6869346e-05
2.0000000e+00 6.0000000e+01 -4.6319220e-08 -8.6985546e-08 -4.2574396e-05 -2.9587033e-05
2.0000000e+00 7.0000000e+01 6.3612583e-08 1.3971578e-07 -4.7547438e-05 -3.1673379e-05
2.0000000e+00 8.0000000e+01 7.1098497e-08 7.5987040e-08 -4.7584179e-05 -3.1804050e-05
2.0000000e+00 1.0000000e+02 3.7604619e-08 -9.4977276e-08 -4.7238403e-05 -2.3134884e-05
2.0000000e+00 1.2500000e+02 -2.9897730e-08 -9.9245647e-08 -4.5563467e-05 -2.1980214e-05
2.0000000e+00 1.5000000e+02 5.9584031e-08 1.8400067e-07 -4.9629554e-05 -2.9789333e-05
2.0000000e+00 2.0000000e+02 6.7021293e-08 -6.2406963e-08 -4.9811175e-05 -2.2856145e-05
2.0000000e+00 2.5000000e+02 4.3345596e-09 -6.4595199e-08 -4.7740393e-05 -2.3217752e-05
2.0000000e+00 3.0000000e+02 3.1404303e-08 6.1270702e-08 -4.8883771e-05 -2.6030532e-05
@@ -0,0 +1,74 @@
function [XCut,DCut]=Cut(ACorr,ECorr,Data,xMode,Win)
% [XCut,DCut]=Cut(ACorr,ECorr,Data,xMode,Win) calculates 1D array DCut of intensity as
% a function of 1D array XCut(raw vector of angles/momenta) for xMode='mdc', or XCut
% (column vector of energies in Energy dimension) for xMode='edc'. The input 2D array
% Data of intensity is defined on the 1D (row) or 2D array ACorr of [warping corrected]
% angles/momenta and the 1D (column) or 2D array ECorr of curvature corrected [aligned]
% energies. DCut is integrated within the Win window [win1 win2] in energies (xMode='mdc')
% or angles/momenta (xMode='edc'). XCut is calculated in the middle of Win.
% Ver. 01.01.2021
% Revisions to Ver. 29.12.2017: Grossly reworked to correct the dimensions and linear/subscript indexing of the arrays meeting in the interpolation
disp('- Data cut formation')
% check inputs
% - supported modes
xMode=lower(xMode);
if ~isequal(xMode,'mdc') && ~isequal(xMode,'edc')
XCut=[]; DCut=[]; disp('Error: Only ''mdc'' and ''edc'' modes supported'); return;
end
% - integration window and its check
Win=sort(Win);
Win(1)=Win(1)+1e-10*diff(Win); Win(2)=Win(2)-1e-10*diff(Win); % to avoid the edge effects in the code
if isequal(xMode,'mdc') Range=[max(ECorr(1,:)) min(ECorr(end,:))];
else Range=[max(ACorr(:,1)) min(ACorr(:,end))]; end
if Win(1)<Range(1)||Win(2)>Range(2)
XCut=[]; DCut=[]; disp('Error: Inconsistent integration window'); return;
end
% shaping the arrays
% - remove NaNs spoiling the cumulative sum
Data(isnan(Data))=0;
% - expanding ACorr and ECorr if 1D arrays
if size(ACorr,1)==1; ACorr=repmat(ACorr,size(Data,1),1); end
if size(ECorr,2)==1; ECorr=repmat(ECorr,1,size(Data,2)); end
% - array permutation to reduce the 'edc' mode to 'mdc'
if isequal(xMode,'edc')
ACorr=ACorr'; ECorr=ECorr'; Data=Data';
T=ACorr; ACorr=ECorr; ECorr=T; clear T;
end
% - shifted energy arrays for locating the window
ECorr1=ECorr(1:end-1,:); ECorr2=ECorr(2:end,:);
% parameters
de=mean(mean(diff(ECorr,1)));
% array of intensity values DCut
% cumulative array
ISum=cumsum(Data(1:end,:),1)-0.5*Data(1:end,:)-0.5*Data(1,:);
% - point 1
% - - subscripts and linear indices of the grid point below Win(1)
[I,J]=find(ECorr1<=Win(1)&ECorr2>Win(1)); Lin1=sub2ind(size(ECorr),I,J);
% - - linear indices of the grid point above Win(1)
Lin2=sub2ind(size(ECorr),I+1,J);
% - - interpolation of the linear matrices defined by linear indices
I1=ISum(Lin1)+(ISum(Lin2)-ISum(Lin1)).*(Win(1)-ECorr(Lin1))/de;
% - point 2
[I,J]=find(ECorr1<=Win(2)&ECorr2>Win(2)); Lin1=sub2ind(size(ECorr),I,J);
Lin2=sub2ind(size(ECorr),I+1,J);
I2=ISum(Lin1)+(ISum(Lin2)-ISum(Lin1)).*(Win(2)-ECorr(Lin1))/de;
% integral value
DCut=I2-I1;
% normalization
DCut=DCut*de/(eps+diff(Win));
% array of coordinate values XCut interpolated in the middle of Win
% - this block runs ~25% of the integration block runtime
midE=mean(Win);
[I,J]=find(ECorr1<=midE&ECorr2>midE);
Lin1=sub2ind(size(ECorr),I,J); Lin2=sub2ind(size(ECorr),I+1,J);
XCut=ACorr(Lin1)+(ACorr(Lin2)-ACorr(Lin1)).*(midE-ECorr(Lin1))/de;
% transpose if the MDC mode
if isequal(xMode,'mdc'); DCut=DCut'; XCut=XCut'; end
@@ -0,0 +1,29 @@
function AA=DiffFlt2(A,scheme,sharp,dX2dY)
% AA=DiffFlt2(A,scheme,sharp [,dX2dY]) applies a curvature filter to sharpen the structure in the 2D array A.
% Inputs:
% scheme='1D' or '2D' selects 1D derivation along columns or 2D derivaton
% sharp from 0 to 1 tunes the sharpening essentially from smooth f'' to singular 1/f'
% dX2dY (if scheme='2D') is the step-width ratio between rows and columns
% Algorithm: Zhang et al, "A precise method for visualizing dispersive features in image plots," Revi. Sci. Instr. 82 (2011) 043712
% check input
if ~isequal(scheme,'1D')&&~isequal(scheme,'2D'); disp('Input error in CurvFlt2: scheme must be ''1D'' or ''2D'); AA=[]; return; end
if sharp<0||sharp>1; disp('Input error in CurvFlt2: sharp must be between 0 and 1'); AA=[]; return; end
% sharpening constant
c=1/(sharp+eps)-1;
% 1D derivation scheme
if isequal(scheme,'1D')
% - normalize the derivative
A1Sq=DifC(A,1).^2; A1Sq=A1Sq./mean(A1Sq(~isnan(A1Sq)));
% - calculate curvature
AA=DifC(A,2)./(c+A1Sq).^(3/2);
% 2D derivation scheme (neglecting cross-derivatives in the exact curvature)
else
% - normalize the partial derivatives along X and Y
A1XSq=DifC(A',1).^2; A1XSq=A1XSq./mean(A1XSq(~isnan(A1XSq)));
A1YSq=DifC(A,1).^2; A1YSq=A1YSq./mean(A1YSq(~isnan(A1YSq)));
% - calculate curvature
AA=(DifC(A',2)./(c+A1XSq).^(3/2))'+dX2dY^2*DifC(A,2)./(c+A1YSq).^(3/2);
end
@@ -0,0 +1,54 @@
function AA=Gaco2(A,hwX,hwY,hsX,hsY)
% AA=Gaco2(A,hwX,hwY [,hsX] [,hsY]) convolves vector or matrix A with Gaussian of half-width/
% half-support along the rows hwX/hsX (in inter-point distances > 0) and along the columns hwY/hsY.
% If empty or skipped, the default hsX=3*hwX and hsY=3*hwY. Setting hwX or hwY to zero disables
% convolution along the corresponding direction. The input A is padded by the end values.
% Gaco2 is equivalent to Gaco1 except that it convolves along both dimensions.
% Ver. 23.12.2020
% Update to Ver. 17.06.2017: 2D convolution changed to two 1D convolutions to keep the dimensionality at ~50% increase of runtime
% default supports
if nargin<4||isempty(hsX); hsX=3*hwX; end; hsX=round(hsX);
if nargin<5||isempty(hsY); hsY=3*hwY; end; hsY=round(hsY);
% convolution along rows
if hwX~=0
% - normalized kernel
KX=-1*hsX:hsX; KX=exp(-1*(sqrt(log(2))*KX/(hwX)).^2); KX=KX/sum(KX);
% - padding
A=padarray(A,[0 hsX],'replicate','both');
% - convolution
A=conv2(1,KX,A,'valid');
end
% convolution along columns
if hwY~=0
% - normalized kernel
KY=(-1*hsY:hsY)'; KY=exp(-1*(sqrt(log(2))*KY/(hwY)).^2); KY=KY/sum(KY);
% - padding
A=padarray(A,[hsY 0],'replicate','both');
% - convolution
A=conv2(KY,1,A,'valid');
end
% output
AA=A;
% % Ver. 2017 (malfunctioning: changing dimensionality)
% % normalized convolution kernels
% % - along rows
% if hwX==0; hsX=0; KX=1; else
% KX=(-1*hsX:hsX)'; KX=exp(-1*(sqrt(log(2))*KX/(hwX)).^2);
% KX=KX/sum(KX);
% end
% % - along columns
% if hwY==0; hsY=0; KY=1; else
% KY=-1*hsY:hsY; KY=exp(-1*(sqrt(log(2))*KY/(hwY)).^2); KY=KY/sum(KY);
% end
%
% % padding A
% A=padarray(A,[hsY hsX],'replicate','both');
%
% % convolution
% AA=conv2(KY,KX,A,'valid');
@@ -0,0 +1,44 @@
function h=ImData(X,Y,Z,style)
% [h=] ImData(X,Y,Z[,style]) plots image of Z(X,Y) using the style 'flat' (default)
% or 'interp' style. X and Y are vectors or 2D arrays, Z is 2D array.
% h (optional) can be used for further handling of the image (rotation, etc)
% default style
if nargin==3; style='flat'; end
% squeeze input arrays to 2D
% X=squeeze(X); Y=squeeze(X); Z=squeeze(Z);
% X and Y matrices
% [X,Y]=meshgrid(X,Y); end
if size(X,1)==1||size(X,2)==1
if size(X,1)>size(X,2); X=X'; end
X=repmat(X,size(Z,1),1);
end
if size(Y,1)==1||size(Y,2)==1
if size(Y,1)<size(Y,2); Y=Y'; end
Y=repmat(Y,1,size(Z,2));
end
if sum(size(Z)-size(X))~=0 || sum(size(Z)-size(Y))~=0 error('Mismatch of input matrices'); end
switch lower(style)
case('flat')
% appending along X
DX=diff(X,1,2)/2; XV=[X(:,1)-DX(:,1) X(:,1:end-1)+DX X(:,end)+DX(:,end)];
DXV=XV(end,:)-XV(end-1,:); XV=[XV; XV(end,:)+DXV];
% appending along Y
DY=diff(Y,1,1)/2; YV=[Y(1,:)-DY(1,:); Y(1:end-1,:)+DY; Y(end,:)+DY(end,:)];
DYV=YV(:,end)-YV(:,end-1); YV=[YV YV(:,end)+DYV];
% appending Z
ZV=[Z NaN*ones(size(Z,1),1)]; ZV=[ZV; NaN*ones(1,size(ZV,2))];
% plotting
h=pcolor(XV,YV,ZV); set(h,'EdgeColor','None','FaceColor','Flat');
case ('interp')
h=pcolor(X,Y,Z); set(h,'EdgeColor','None','FaceColor','Interp');
otherwise
error('Invalid image style')
end
% axes on top and ticks
set(gca,'Layer','Top','TickDir','Out');
@@ -0,0 +1,56 @@
function [DataInt,EInt]=IntAngle(Data,ACorr,ECorr,Interval)
% [DataInt,EInt]=IntAngle(Data,ACorr,ECorr [,Interval]) integrates 2D/3D
% array Data over 1D/2D array ACorr of angles within Interval (default
% is 90% of the ACorr range). The outputs are respectively 1D/2D integrated
% data array DataInt and 1D energy vector EInt
% Rev. 07.07.2019
disp('- Angle integrating')
% parameters
% - angular interval
if nargin<4; Interval=0.9*[max(ACorr(:,1)) min(ACorr(:,end))]; end
% - dimensions
nE=size(Data,1); nA=size(Data,2); nS=size(Data,3);
% - extend energy array to the data array
if size(ECorr,2)==1; ECorr=repmat(ECorr,1,nA); end
if nS>1&&size(ECorr,3)==1; ECorr=repmat(ECorr,1,1,nS); end
% - reference energy grid
if nA==1&&nS==1; EInt=ECorr;
else eMin=max(max(ECorr(1,:,:))); eMax=min(min(ECorr(end,:,:))); EInt=linspace(eMin,eMax,nE)';
end
% data within the angular interval/normalization
if size(ACorr,1)==1
% - 1D-ACorr
Data=Data(:,Interval(1)<=ACorr&ACorr<=Interval(2),:);
nA=size(Data,2); Data=Data/nA;
else
% - 2D-ACorr
Out=find(Interval(1)>ACorr|ACorr>Interval(2)); Data(Out)=0;
Supp=ones(size(Data)); Supp(Out)=0;
Weight=sum(Supp,2); Weight=repmat(Weight,1,nA);
Data=Data.*Supp./Weight;
end
% cycle over scans
DataInt=zeros(nE,nS);
for iS=1:nS
% cycle over angles in triads for speed
IntScan=zeros(size(EInt));
for iA=2:3:nA-1
% interpolation on the reference grid
if nS>1
DCorr=interp1(ECorr(:,iA,iS),sum(Data(:,iA-1:iA+1,iS),2),EInt);
else
if nA>1
DCorr=interp1(ECorr(:,iA),sum(Data(:,iA-1:iA+1),2),EInt);
else DCorr=interp1(ECorr,sum(Data(:,iA-1:iA+1),2),EInt);
end
end
% angle integration
IntScan=IntScan+DCorr;
end
% check
% figure; plot(EInt,DD,EInt,DDS);
% output and normalization
DataInt(:,iS)=IntScan;
end
@@ -0,0 +1 @@
mcc -e KNavi.m
@@ -0,0 +1,211 @@
function varargout = KNavi(varargin)
% KNAVI MATLAB code for KNavi.fig
% KNAVI, by itself, creates a new KNAVI or raises the existing
% singleton*.
% H = KNAVI returns the handle to a new KNAVI or the handle to
% the existing singleton*.
% KNAVI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in KNAVI.M with the given input arguments.
% KNAVI('Property','Value',...) creates a new KNAVI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before KNavi_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to KNavi_OpeningFcn via varargin.
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help KNavi
% Last Modified by GUIDE v2.5 11-Aug-2022 19:48:25
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @KNavi_OpeningFcn, ...
'gui_OutputFcn', @KNavi_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before KNavi is made visible.
function KNavi_OpeningFcn(hObject,~,handles,varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to KNavi (see VARARGIN)
% Choose default command line output for KNavi
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% parameters
clear global
global ePhi alpha eB
ePhi=4.5; alpha=9; eB=0; % surfNx calculated for arbitrary eB, and all other calculations assume eB=0
% image the scheme
% - read in image
IS=imread('Scheme.png');
% - match the axis size to image
Origin=get(handles.axes1,'Position'); Origin=Origin(1:2);
WH=size(IS); WH=WH(1:2);
set(handles.axes1,'Position',[Origin WH]);
% - plot image
image(IS,'Parent',handles.axes1); axis image off
% UIWAIT makes KNavi wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = KNavi_OutputFcn(~,~,handles)
% Get default command line output from handles structure
varargout{1} = handles.output;
% ---------------- Nominal X-ray incidence ----------------
% --- Executes on selection change in popupmenuAlpha.
function popupmenuAlpha_Callback(hObject,~,handles)
% hObject handle to popupmenuAlpha (see GCBO)
global alpha
if get(hObject,'Value')==1; alpha=9; else alpha=20; end
% update all outputs if the parameters available
try pushbuttonOrgCalc_Callback(handles.pushbuttonOrgCalc,[],handles); end
try pushbuttonKxCalc_Callback(handles.pushbuttonKxCalc,[],handles); end
try pushbuttonKyCalc_Callback(handles.pushbuttonKyCalc,[],handles); end
try pushbuttonKzCalc_Callback(handles.pushbuttonKzCalc,[],handles); end
% ---------------- Origin section ----------------
% --- Executes on button press in pushbuttonOrgCalc.
function pushbuttonOrgCalc_Callback(~,~,handles)
global ePhi alpha
% initial parameters
set(handles.textOrgSurfNormX,'String','')
% read in the parameters
hv=str2num(get(handles.editOrgHv,'String')); if hv<ePhi; hv=[]; end
eB=str2num(get(handles.editOrgEB,'String'));
kx=str2num(get(handles.editOrgKx,'String'));
thtM=str2num(get(handles.editOrgThtM,'String'));
thtA=str2num(get(handles.editOrgThtA,'String'));
% surface normal calculations
surfNx = SurfNormX(hv,eB,kx,thtM,thtA,alpha);
% display results
set(handles.textOrgSurfNormX,'String',['surfNx = ' num2str(surfNx)])
set([handles.editKxSurfNx handles.editKySurfNx handles.editKzSurfNx], 'String',num2str(surfNx))
% ---------------- Kx section ----------------
% --- Executes on button press in pushbuttonKxCalc
function pushbuttonKxCalc_Callback(~,~,handles)
global ePhi alpha eB
% read in the parameters
surfNx=str2num(get(handles.editKxSurfNx,'String'));
hv=str2num(get(handles.editKxHv,'String')); if hv<ePhi; hv=[]; end
kx=str2num(get(handles.editKxKx,'String'));
thtM=str2num(get(handles.editKxThtM,'String')); thtMPhys=thtM+surfNx;
thtA=str2num(get(handles.editKxThtA,'String'));
% calculation of kx/thtM/thtA
switch get(handles.popupmenuKx,'Value')
case 1
if isempty(surfNx*hv*thtM*thtA); msgbox('Empty inputs','modal'); return; end
kx=0.5124*sqrt(hv-ePhi+eB)*sind(thtMPhys+thtA)-2*pi*hv*cosd(alpha+thtMPhys)/12400;
set(handles.editKxKx,'String',num2str(kx))
case 2
if isempty(surfNx*hv*kx*thtA); msgbox('Empty inputs','modal'); return; end
[thtM,~,exitFlag]=fsolve(@(x) 0.5124*sqrt(hv-ePhi+eB)*sind(x+surfNx+thtA)-...
2*pi*hv*cosd(alpha+x+surfNx)/12400-kx,0,optimset('Display','off','TolFun',1e-12));
if exitFlag~=1; thtM=[]; msgbox('Solver failure: Check input parameters','modal'); end
set(handles.editKxThtM,'String',num2str(thtM))
case 3
if isempty(surfNx*hv*kx*thtM); msgbox('Empty inputs','modal'); return; end
[thtA,~,exitFlag]=fsolve(@(x) 0.5124*sqrt(hv-ePhi+eB)*sind(thtMPhys+x)-...
2*pi*hv*cosd(alpha+thtMPhys)/12400-kx,0,optimset('Display','off','TolFun',1e-12));
if exitFlag~=1; thtA=[]; msgbox('Solver failure: Check input parameters','modal'); end
set(handles.editKxThtA,'String',num2str(thtA))
end
% transfer hv value to the Ky and Kz sections
set([handles.editKyHv handles.editKzHv],'String',num2str(hv))
% transfer Kx to the Kz section
set(handles.editKzKx,'String',num2str(kx))
% transfer thtM value to the Ky and Kz sections
set([handles.editKyThtM handles.editKzThtM],'String',num2str(thtM))
% ---------------- Ky section ----------------
% --- Executes on button press in pushbuttonKyCalc
function pushbuttonKyCalc_Callback(~,~,handles)
global ePhi alpha eB
% read in the parameters
thtA=str2num(get(handles.editKyThtA,'String'));
surfNx=str2num(get(handles.editKySurfNx,'String'));
thtM=str2num(get(handles.editKyThtM,'String')); thtMPhys=thtM+surfNx;
hv=str2num(get(handles.editKyHv,'String')); if hv<ePhi; hv=[]; end
ky=str2num(get(handles.editKyKy,'String'));
tlt=str2num(get(handles.editKyTlt,'String'));
% calculation of ky/TLT
switch get(handles.popupmenuKy,'Value')
case 1
if isempty(thtA*thtM*surfNx*hv*tlt); msgbox('Empty inputs','modal'); return; end
ky=0.5124*sqrt(hv-ePhi+eB)*sind(tlt)*cosd(thtA+thtMPhys)+2*pi*hv*sind(alpha+thtMPhys)*sind(tlt)/12400;
set(handles.editKyKy,'String',num2str(ky))
case 2
if isempty(thtA*thtM*surfNx*hv*ky); msgbox('Empty inputs','modal'); return; end
[tlt,~,exitFlag]=fsolve(@(x) 0.5124*sqrt(hv-ePhi+eB)*sind(x)*cosd(thtA+thtMPhys)+...
2*pi*hv*sind(alpha+thtMPhys)*sind(x)/12400-ky,0,optimset('Display','off','TolFun',1e-12));
if exitFlag~=1; tlt=[]; msgbox('Solver failure: Check input parameters','modal'); end
set(handles.editKyTlt,'String',num2str(tlt))
end
% transfer Ky to the Kz section
set(handles.editKzKy,'String',num2str(ky))
% ---------------- Kz section ----------------
% --- Executes on button press in pushbuttonKzCalc.
function pushbuttonKzCalc_Callback(~,~,handles)
global ePhi alpha eB
% inputs
surfNx=str2num(get(handles.editKzSurfNx,'String'));
thtM=str2num(get(handles.editKzThtM,'String')); thtMPhys=thtM+surfNx;
tlt=str2num(get(handles.editKzTlt,'String'));
kx=str2num(get(handles.editKzKx,'String'));
ky=str2num(get(handles.editKzKy,'String'));
if tlt*ky==0&&(tlt+ky)~=0; msgbox('Incompatible tlt and Ky','modal'); return; end
v000=str2num(get(handles.editKzV000,'String'));
hv=str2num(get(handles.editKzHv,'String')); if hv<ePhi; hv=[]; end
kz=str2num(get(handles.editKzKz,'String'));
c=str2num(get(handles.editKzC,'String')); if ~isempty(c); tpc=2*pi/c; else tpc=[]; end
% calculation of kz/hv/V000
switch get(handles.popupmenuKz,'Value')
case 1
if isempty(thtM*surfNx*kx*ky*v000*hv); msgbox('Empty inputs','modal'); return; end
% kz=0.5124*sqrt(hv+eB+v000-3.81*(kx^2+ky^2))+2*pi*hv*sind(alpha+thtMPhys)/12400;
kx_f=kx+2*pi*hv*cosd(alpha+thtMPhys)/12400; ky_f=ky-2*pi*hv*sind(alpha+thtMPhys)*sind(tlt)/12400;
kz=0.5124*sqrt(hv+eB+v000-3.81*(kx_f^2+ky_f^2))+2*pi*hv*sind(alpha+thtMPhys)/12400;
if get(handles.popupmenuKzUnits,'Value')==2; kz=kz/tpc; end % kz units
set(handles.editKzKz,'String',num2str(kz))
case 2
if isempty(thtM*surfNx*kx*ky*v000*kz); msgbox('Empty inputs','modal'); return; end
if get(handles.popupmenuKzUnits,'Value')==2; kz=kz*tpc; end % kz units
[hv,~,exitFlag]=fsolve(@(x) 0.5124*sqrt(x+eB+v000-3.81*((kx+2*pi*x*cosd(alpha+thtMPhys)/12400).^2+(ky-2*pi*x*sind(alpha+thtMPhys)*sind(tlt)/12400).^2))+...
2*pi*x*sind(alpha+thtMPhys)/12400-kz,0,optimset('Display','off','TolFun',1e-12));
if exitFlag~=1; hv=[]; msgbox('Solver failure: Check input parameters','modal'); end
hv=real(hv); % trim the imaginary residual error
set(handles.editKzHv,'String',num2str(hv))
case 3
if isempty(thtM*surfNx*kx*ky*hv*kz); msgbox('Empty inputs','modal'); return; end
if get(handles.popupmenuKzUnits,'Value')==2; kz=kz*tpc; end % kz units
v000=((kz-2*pi*hv*sind(alpha+thtMPhys)/12400)/0.5124)^2-hv-eB+3.81*((kx+2*pi*hv*cosd(alpha+thtMPhys)/12400)^2+(ky-2*pi*hv*sind(alpha+thtMPhys)*sind(tlt)/12400).^2);
set(handles.editKzV000,'String',num2str(v000))
end
% --- Executes on selection change in popupmenuKzUnits.
function popupmenuKzUnits_Callback(hObject,~,handles)
if get(hObject,'Value')==1
set([handles.editKzC handles.textKzC],'Enable','off');
else
set([handles.editKzC handles.textKzC],'Enable','on');
end
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

@@ -0,0 +1,54 @@
function Kx = Kxx(HV,Eb,thtM,ThtA,surfNormX,incAlpha)
% Kx = Kxx(HV,Eb,thtM,ThtA,surfNormX) calculates k// along the analyzer slit
% Inputs:
% HV (scalar or 1D vector) - photon energies
% Eb (Eb<0; scalar/column vector/2D/3D array) - binding energies
% thtM (scalar) - manipulator primary rotation
% ThtA (scalar/row vector/2D/3D array) - analyzer scale angles
% surfNormX - surface normal primary angle returned by SurfNormX.m
% incAlpha - nominal X-ray incidence angle, for the present geometry equal to 9deg. If omitted, old geometry with 20deg implied.
% Ver. 11.08.2022
% parameters
global alpha ePhi thtMPhys nA nE
if nargin<6; alpha=20; else alpha=incAlpha; end % nominal incidence angle
ePhi=4.5; % workfunction
thtMPhys=thtM+surfNormX;
nA=size(ThtA,2); nE=size(Eb,1);
nS=max(length(HV),size(Eb,3)); % scan is either HV or tilt encoded in Eb
% conversion of iso-E 2D-arrays to 3D-arrays
if isscalar(Eb) && ~isvector(ThtA); ThtA=permute(ThtA,[3,2,1]); sq=1; else sq=0; end
% hv-independent data (scalar HV) including single image
Kx=[];
if isscalar(HV)
% - cycle through tilt
for iS=1:nS
EbF=Eb(:,:,min(iS,size(Eb,3))); ThtAF=ThtA;
KxF=Kx1(HV,EbF,ThtAF);
Kx=cat(3,Kx,KxF);
end
% hv-dependent data (non-scalar HV)
else
% - cycle through HV
for iS=1:nS
EbF=Eb(:,:,min(iS,size(Eb,3))); ThtAF=ThtA(:,:,min(iS,size(ThtA,3)));
KxF=Kx1(HV(iS),EbF,ThtAF);
Kx=cat(3,Kx,KxF);
end
end
% back conversion of iso-E 3D-arrays to 2D-arrays as required for ImData
if sq==1; Kx=(squeeze(Kx))'; end
% single image conversion
function Kx1 = Kx1(hv,Eb,ThtA)
% Kx1 = Kx1(hv,Eb,ThtA) calculates Kx for single Eb/ThtA image with scalar hv
global alpha ePhi thtMPhys nA nE
% Eb=squeeze(Eb); ThtA=squeeze(ThtA);
% forming 2D arrays unless scalars
if size(Eb,2)==1&&size(Eb,1)~=1; EbF=repmat(Eb,1,nA); else EbF=Eb; end
if size(ThtA,1)==1&&size(ThtA,2)~=1; ThtAF=repmat(ThtA,nE,1); else ThtAF=ThtA; end
% Kx calculation
Kx1=0.5124*sqrt(hv-ePhi+EbF).*sind(ThtAF+thtMPhys)-2*pi*hv*cosd(alpha+thtMPhys)/12400;
@@ -0,0 +1,64 @@
function Ky = Kyy(HV,Eb,ThtA,thtM,TltM,surfNormX,incAlpha,TltE)
% Ky = Kyy(HV,Eb,ThtA,thtM,TltM,surfNormX [,incAlpha] [,TltE]) calculates k// perpendicular to the analyzer slit
% Inputs:
% HV (scalar/vector) - photon energies
% Eb (Eb<0; scalar/column vector/2D/3D array) - binding energies
% ThtA (scalar/row vector/2D/3D array) - analyzer scale angles (may include angular warping)
% thtM - manipulator primary rotation
% TltM (scalar/row vector) - manipulator tilt relative to the surface normal
% surfNormX - surface normal primary angle returned by SurfNormX.m
% incAlpha - nominal X-ray incidence angle, for the present geometry equal to 9deg. If omitted, old geometry with 20deg implied.
% TltE (scalar/row vector) - angular deflection. If omitted, TltE=0.
% Ver. 02.12.2022
% parameters
global alpha ePhi thtMPhys nA nE
if nargin<8; TltE=0; end % nominal incidence angle
if nargin<7; alpha=20; else alpha=incAlpha; end % nominal incidence angle
ePhi=4.5; % workfunction
nA=size(ThtA,2); nE=size(Eb,1); nH=length(HV); nT=length(TltM); nD=length(TltE);
if length(find([nH nT nD]>1))>1; disp('Error in Kyy: Only one of hv/tilt/defection can be vectorized'); return; end
if size(ThtA,1)==1&&size(ThtA,2)~=1; ThtA=repmat(ThtA,nE,1); end % form 2D array of ThtA unless scalar or 3D
if size(Eb,2)==1&&size(Eb,1)~=1; Eb=repmat(Eb,1,nA); end % form 2D array of Eb unless scalar or 3D
thtMPhys=thtM+surfNormX;
nS=max([length(HV) length(TltM) length(TltE)]); % scan is either HV or TltM or TltE
% conversion of iso-E 2D-arrays to 3D-arrays (immune to scalars)
% if isscalar(Eb); HV=permute(HV,[3,2,1]); TltM=permute(TltM,[3,2,1]); sq=1; else sq=0; end
if isscalar(Eb); ThtA=permute(ThtA,[3,2,1]); sq=1; else sq=0; end
% % hv-independent data (scalar HV) including single image
% Ky=[];
% if isscalar(HV)
% % - cycle through tilt (non-scalar TltM)
% for iS=1:nS
% KyF=Ky1(HV,Eb(:,:,min(iS,size(Eb,3))),ThtA,TltM(iS));
% Ky=cat(3,Ky,KyF);
% end
% % hv-dependent data (non-scalar HV)
% else
% % - cycle through HV
% for iS=1:nS
% KyF=Ky1(HV(iS),Eb(:,:,min(iS,size(Eb,3))),ThtA(:,:,min(iS,size(ThtA,3))),TltM);
% Ky=cat(3,Ky,KyF);
% end
% end
% Ky conversion
Ky=[]; for iS=1:nS
KyF=Ky1(HV(min(nH,iS)),squeeze(Eb(:,:,min(iS,size(Eb,3)))),squeeze(ThtA(:,:,min(iS,size(ThtA,3)))),TltM(min(nT,iS)),TltE(min(nD,iS)));
% Note: by default all Matlab scalars and arrays have infinite number of singleton dimensions
Ky=cat(3,Ky,KyF);
end
% back conversion of iso-E 3D-arrays to 2D-arrays as required for ImData
if sq==1; Ky=(squeeze(Ky))'; end
% single 2D-image conversion
function Ky1 = Ky1(hv,Eb,ThtA,tltM,tltE)
% Ky1 = Ky1(hv,Eb,ThtAF,tltM) calculates Ky for single Eb/ThtA image with scalar hv, tltM and tltE
global alpha ePhi thtMPhys nA nE
% forming 2D arrays if vectors
if size(Eb,2)==1&&size(Eb,1)~=1; Eb=repmat(Eb,1,nA); end
if size(ThtA,1)==1&&size(ThtA,2)~=1; ThtA=repmat(ThtA,nE,1); end
% Ky calculation
Ky1=0.5124*sqrt(hv-ePhi+Eb)*sind(tltM+tltE).*cosd(ThtA+thtMPhys)+2*pi*hv*sind(alpha+thtMPhys).*sind(tltM)/12400;
@@ -0,0 +1,61 @@
function Kz = Kzz(HV,Eb,thtM,ThtA,TltM,v000,surfNormX,incAlpha)
% Kz = Kzz(HV,Eb,thtM,ThtA,TltM,v000,surfNormX,incAlpha) calculates kz along the surface normal
% Inputs:
% HV (scalar or vector) - photon energies
% Eb (Eb<0; scalar/column vector/2D/3D array) - binding energies
% ThtA (scalar/row vector/2D/3D array) - analyzer scale angles
% TltM (scalar/row vector) - manipulator tilt relative to the surface normal + deflection angle
% ThtA and TltM (scalar/column vector/2D/3D array) - angles along the x- and y-axis
% v000 >0 - inner potential relative to EF
% thtM - the manipulator primary rotation
% surfNormX - surface normal primary angle returned by SurfNormX.m
% incAlpha - nominal X-ray incidence angle. If omitted, 20deg is implied
% Ver. 02.12.2022
% parameters
global alpha ePhi thtMPhys v0001 nA nE
if nargin<8; alpha=20; else alpha=incAlpha; end % nominal incidence angle
ePhi=4.5; % workfunction
nH=length(HV); nT=length(TltM);
if length(find([nH nT]>1))>1; disp('Error in Kyy: Only one of hv/tilt/defection can be vectorized'); return; end
thtMPhys=thtM+surfNormX;
v0001=v000;
nA=size(ThtA,2); nE=size(Eb,1); nH=length(HV); nT=length(TltM);
nS=max(nH,size(TltM,3)); % number of scans in HV or in tilt encoded in TltM
if size(ThtA,1)==1&&size(ThtA,2)~=1; ThtA=repmat(ThtA,nE,1); end % form 2D array of ThtA unless scalar or 3D
if size(Eb,2)==1&&size(Eb,1)~=1; Eb=repmat(Eb,1,nA); end % form 2D array of Eb unless scalar or 3D
% conversion of iso-E/iso-K 2D-arrays from Slice to 3D-arrays (immune to scalars)
if isscalar(Eb); ThtA=permute(ThtA,[3,2,1]); TltM=permute(TltM,[3,2,1]); sq=1; else sq=0; end
if isscalar(ThtA); Eb=permute(Eb,[1,3,2]); TltM=permute(TltM,[1,3,2]); sq=2; end
% % extension of Eb to 3D (if not extended by AlignEF)
% if nS>1 && size(Eb,3)==1; Eb=repmat(Eb,1,1,nS); end
% % extension of ThtA,TltM to 3D
% if nS>1 && size(ThtA,3)==1; ThtA=repmat(ThtA,1,1,nS); end
% if nS>1 && size(TltM,3)==1; TltM=repmat(TltM,1,1,nS); end
% Kz conversion
Kz=[]; for iS=1:nS
KzF=Kz1(HV(min(nH,iS)),squeeze(Eb(:,:,min(iS,size(Eb,3)))),squeeze(ThtA(:,:,min(iS,size(ThtA,3)))),TltM(min(nT,iS)));
% Note: by default all Matlab scalars and arrays have infinite number of singleton dimensions
Kz=cat(3,Kz,KzF);
end
% back conversion of iso-E/iso-K 3D-arrays to 2D-arrays as required for ImData
if sq==1; Kz=(squeeze(Kz))'; end
if sq==2; Kz=squeeze(Kz); end
% single 2D-image conversion
function Kz1 = Kz1(hv,Eb,ThtA,tltM)
% Kz1 = Kz1(hv,Eb,ThtA,tltM) calculates Kz for single Eb/ThtA image with scalar hv
global alpha ePhi thtMPhys v0001 nA nE
% forming 2D arrays if vectors
if size(Eb,2)==1&&size(Eb,1)~=1; Eb=repmat(Eb,1,nA); end
if size(ThtA,1)==1&&size(ThtA,2)~=1; ThtA=repmat(ThtA,nE,1); end
% final-state Kz
Kx1_2=(hv-ePhi+Eb).*sind(ThtA+thtMPhys).^2;
Ky1_2=(hv-ePhi+Eb).*(sind(tltM).*cosd(ThtA+thtMPhys)).^2;
Kz1=0.5124*sqrt(hv+Eb+v0001-(Kx1_2+Ky1_2));
% photon momentum corrected initial-state Kz
Kz1=Kz1+2*pi*hv*sind(alpha+thtMPhys)/12400;
@@ -0,0 +1,43 @@
function [Angle,Energy,Scan,Data,ep,Note,RawTable]=ReadARPES(file)
% [Angle,Energy,Scan,Data,ep,Note]=ReadARPES(file) reads in HDF5 and SP2 files
% to return Angle (row), Energy (column), Scan (empty for 2D arrays and row
% for 3D arrays, Data (2- or 3-dim array), ep (pass energy) and Note (info)
% Ver. 17.08.2022
disp(['- Reading in ' file])
RawTable = [];
if strcmp(file(end-1:end),'h5')
% read in HDF5
[Data,Axes,Note]=ReaderHDF5(file);
try; RawTable = load(file, 'SmartTable', '-mat').SmartTable.rawData; end
Angle=Axes{1};
Energy=(Axes{2})';
if size(Axes,1)==3; Scan=Axes{3}; else Scan=[]; end
if ndims(Data)==3; Data=double(permute(Data,[2 1 3])); else Data=double(Data'); end
% pos=strfind(Note,'Epass'); ep=str2double(Note(pos+9:pos+12));
else
% read in SP2
[data,NoteCell]=ReaderSP2(file);
Data=data.image; Data=double(Data');
Angle=linspace(data.arange(1),data.arange(2),size(Data,2));
Energy=(linspace(data.erange(1),data.erange(2),size(Data,1)))';
Scan=[];
% ep=str2double(NoteCell{10}(22:27));
% convert Note from cell to string
Note = ''; for i=1:size(NoteCell)
Note = sprintf('%s\n%s', Note, NoteCell{i});
end
end
% ep evaluation
pos=strfind(Note,'Ep =');
% - sp2 or sp2/hdf5 converted file
if ~isempty(pos)
hash=strfind(Note(pos:end),'#');
ep=str2double(Note(pos+20:pos+hash(1)-2));
else
% - hdf5 file
pos1=strfind(Note,'Epass =');
pos2=strfind(Note,'Ek/Eb =');
ep=str2double(Note(pos1+9:pos2-1));
end
@@ -0,0 +1,43 @@
function [XR,YR,DataR]=Remap(XM,YM,Data)
% [XR,YR,DataR]=Remap(XM,YM,Data) remaps the data array Data defined on the raw
% vector/2D/3D array XM of x-coordinates (usually the corrected angles ACorr) and
% column vector/2D/3D array YM of y-coordinates (usually aligned energies EAlign)
% onto DataR defined on the rectangular grid formed by the equidistant vectors XR and YR
% Ver. 8 Jan 2021
disp('- Re-mapping')
% check if XM and YM are already equidistant vectors
if ndims(XM)==1&&ndims(YM)==1
if all([diff(diff(XM))==0 diff(diff(XM))]==0)
disp('- No remapping of the output data because the input coordinates are already equidistant vectors');
XR=XM; YR=YM; DataR=Data; return
end
end
% parameters
nA=size(XM,2); nA3=size(XM,3);
nE=size(YM,1); nE3=size(YM,3);
nS=size(Data,3);
% extending 1D arrays to 2D
if size(XM,1)==1; XM=repmat(XM,nE,1); end
if size(YM,2)==1; YM=repmat(YM,1,nA); end
% output grid
XR=linspace(min(min(min(XM))),max(max(max(XM))),nA);
YR=linspace(min(min(min(YM))),max(max(max(YM))),nE);
[XRM,YRM]=meshgrid(XR,YR);
% NaN-wrapping against the edge triangulation errors
XM=[2*XM(1,:,:)-XM(2,:,:); XM; 2*XM(end,:,:)-XM(end-1,:,:)]; XM=[2*XM(:,1,:)-XM(:,2,:) XM 2*XM(:,end,:)-XM(:,end-1,:)];
YM=[2*YM(1,:,:)-YM(2,:,:); YM; 2*YM(end,:,:)-YM(end-1,:,:)]; YM=[2*YM(:,1,:)-YM(:,2,:) YM 2*YM(:,end,:)-YM(:,end-1,:)];
Data=[NaN*Data(1,:,:); Data; NaN*Data(end,:,:)]; Data=[NaN*Data(:,1,:) Data NaN*Data(:,end,:)];
% re-mapping
DataR=zeros(nE,nA,nS);
for iS=1:nS
iA=min(nA3,iS); X=XM(:,:,iA); X=X(:);
iE=min(nE3,iS); Y=YM(:,:,iE); Y=Y(:);
DL=Data(:,:,iS); DL=DL(:);
% DataR(:,:,iS)=griddata(X,Y,D,AngleM,EnergyM);
F=TriScatteredInterp(X,Y,DL); DataR(:,:,iS)=F(XRM,YRM);
end
@@ -0,0 +1 @@
mcc -e ResBeamline.m
@@ -0,0 +1,242 @@
function varargout = ResBeamline(varargin)
%RESBEAMLINE M-file for ResBeamline.fig
% RESBEAMLINE, by itself, creates a new RESBEAMLINE or raises the existing
% singleton*.
% H = RESBEAMLINE returns the handle to a new RESBEAMLINE or the handle to
% the existing singleton*.
% RESBEAMLINE('Property','Value',...) creates a new RESBEAMLINE using the
% given property value pairs. Unrecognized properties are passed via
% varargin to ResBeamline_OpeningFcn. This calling syntax produces a
% warning when there is an existing singleton*.
% RESBEAMLINE('CALLBACK') and RESBEAMLINE('CALLBACK',hObject,...) call the
% local function named CALLBACK in RESBEAMLINE.M with the given input
% arguments.
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help ResBeamline
% Last Modified by GUIDE v2.5 14-Feb-2023 18:06:32
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @ResBeamline_OpeningFcn, ...
'gui_OutputFcn', @ResBeamline_OutputFcn, ...
'gui_LayoutFcn', [], ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before ResBeamline is made visible.
function ResBeamline_OpeningFcn(hObject,~, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% Choose default command line output for ResBeamline
handles.output = hObject;
% beamline parameters
handles.sigmaSizeV_ID=0.014; % rms vertical source size
handles.sigmaDivV_ID=0.014E-3; % rms vertical divergence of the coherent core
handles.fCM=17750; % distance between the source and CM
handles.graLength=90; % grating optical surface length
handles.fFM=9510; % dispersion length
handles.Gratings=get(handles.popupmenuGrating,'String'); % available gratings
handles.Cff=[2.15 3 2.55]; % default Cff values
handles.Orders=get(handles.popupmenuOrder,'String'); % available orders
handles.sigmaSE_PM=1e-6*0.252; % rms slope error PM = 0.052 arcsec
handles.sigmaSE_Gr=1e-6*[0.07*4.848137 0.35 0.079]; % rms slope error of the grating
% handles.Cff=Res(:,1); handles.SigmaV=Res(:,2:end)/4;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes ResBeamline wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = ResBeamline_OutputFcn(~,~, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% Get default command line output from handles structure
varargout{1} = handles.output;
% % --- Executes on button press in pushbuttonUpdate.
% function pushbuttonUpdate_Callback(hObject, eventdata, handles)
% % hObject handle to pushbuttonUpdate (see GCBO)
% set([handles.editSlitWidth handles.editResolution],'BackgroundColor','w')
% % retrieve the actual parameters
% [hEnergy,hGratingNo,hOrd,hCff,hSlitWidth]=mcaopen('X03MA-PGM:energy','X03MA-PGM-GRCH:GRATING',...
% 'X03MA-PGM:difforder0','X03MA-PGM:cff','X03MA-OP-SL:TRY_AP');
% [energy,gratingNo,ord,cff,slitWidth]=mcaget(hEnergy,hGratingNo,hOrd,hCff,hSlitWidth);
% mcaexit()
% % display the actual parameters
% set(handles.editEnergy,'String',num2str(energy));
% % gratingNo=2-gratingNo; % reverse grating order from EPICS
% set(handles.popupmenuGrating,'Value',gratingNo+1);
% set(handles.popupmenuOrder,'Value',ord+1);
% set(handles.editCff,'String',num2str(cff));
% set(handles.editSlitWidth,'String',num2str(slitWidth)); slitWidth=slitWidth/1000;
% % try to calculate the resolution parameters
% [resLimit,resCoeff]=resParams(handles); if isempty(resLimit*resCoeff) return; end
% % slit limited resolution
% resSlit=slitWidth*energy^2/(resCoeff*1240*1e-6);
% % total resolution
% resTotal=sqrt(resSlit^2+resLimit^2);
% % display resolution
% set(handles.editResolution,'String',num2str(1000*resTotal))
% Cff solver
function alphabeta=cffSolver(cff,N,k,lambda)
% alphabeta=cffSolver(cff,N,k,lambda) finds the incident and exit angles
% [alpha beta](rad) from the cff value, groove density N(l/mm),
% diffraction order k and wavelength lambda(mm)
a=1-(1/cff)^2; b=-2*N*k*lambda; c=(1/cff)^2+(N*k*lambda)^2-1;
if cff==1
disp('cffSolver => error: invalid cff=1'); beta=NaN;
else
X=[-1*b-sqrt(b^2-4*a*c) -1*b+sqrt(b^2-4*a*c)]/(2*a);
Beta=asin(X);
[~,ind]=min( abs( imag(Beta) ) ); beta=Beta(ind); % selecting the real value
end
% alpha
alpha=asin(N*k*lambda-sin(beta));
% output
alphabeta=[alpha beta];
function editEnergy_Callback(hObject,~, handles)
% hObject handle to editEnergy (see GCBO)
% Hints: get(hObject,'String') returns contents of editEnergy as text
% str2double(get(hObject,'String')) returns contents of editEnergy as a double
set([handles.editSlitWidth handles.editResolution],'String','')
% get energy value
energy=str2num(get(hObject,'String'));
if ~isempty(energy) && (energy<160 || energy>1800); set(hObject,'String',''); return; end
% try to calculate the resolution parameters
resParams(handles);
% --- Executes on selection change in popupmenuGrating.
function popupmenuGrating_Callback(hObject,~, handles)
% hObject handle to popupmenuGrating (see GCBO)
% Hints: contents = get(hObject,'String') returns popupmenuGrating contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenuGrating
set([handles.editSlitWidth handles.editResolution],'String','')
% default Cff
gratingNo=get(hObject,'Value'); cff=handles.Cff(gratingNo); set(handles.editCff,'String',num2str(cff))
% try to calculate the resolution parameters
resParams(handles);
% --- Executes on selection change in popupmenuOrder.
function popupmenuOrder_Callback(~,~, handles)
% hObject handle to popupmenuOrder (see GCBO)
% Hints: contents = get(hObject,'String') returns popupmenuOrder contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenuOrder
set([handles.editSlitWidth handles.editResolution],'String','')
% try to calculate the resolution parameters
resParams(handles);
function editCff_Callback(hObject,~, handles)
% hObject handle to editCff (see GCBO)
% Hints: get(hObject,'String') returns contents of editCff as text
% str2double(get(hObject,'String')) returns contents of editCff as a double
set([handles.editSlitWidth handles.editResolution],'String','')
% get Cff value
cff=str2num(get(hObject,'String'));
if isempty(cff) || cff<1 || cff>10; set(hObject,'String',''); return; end
% try to calculate the resolution parameters
resParams(handles);
function editSlitWidth_Callback(hObject,~,handles)
% hObject handle to editSlitWidth (see GCBO)
% Hints: get(hObject,'String') returns contents of editSlitWidth as text
% str2double(get(hObject,'String')) returns contents of editSlitWidth as a double
set(handles.editResolution,'String','')
slitWidth=str2num(get(hObject,'String'))/1000;
if isempty(slitWidth); set([hObject handles.editResolution],'String',''); return; end
energy=str2num(get(handles.editEnergy,'String'));
% try to calculate the resolution parameters
[resLimit,resCoeff]=resParams(handles); if isempty(resLimit*resCoeff) return; end
% slit limited resolution
resSlit=slitWidth*energy^2/(resCoeff*1240*1e-6);
% total resolution
resTotal=sqrt(resSlit^2+resLimit^2);
% display resolution
set(handles.editResolution,'String',num2str(round(1e6*resTotal)/1000))
function editResolution_Callback(hObject,~,handles)
% hObject handle to editResolution (see GCBO)
% Hints: get(hObject,'String') returns contents of editResolution as text
% str2double(get(hObject,'String')) returns contents of editResolution as a double
set(handles.editSlitWidth,'String','')
res=str2num(get(hObject,'String'))/1000;
if isempty(res); set([hObject handles.editSlitWidth],'String',''); return; end
energy=str2num(get(handles.editEnergy,'String'));
% try to calculate the resolution parameters
[resLimit,resCoeff]=resParams(handles); if isempty(resLimit*resCoeff) return; end
% check the resolution limit
if res<resLimit res=resLimit; set(hObject,'String',num2str(res*1000)); end
% slit limited resolution
resSlit=sqrt(res^2-resLimit^2);
% slit width
slitWidth=resSlit*resCoeff*1240*1e-6/energy^2;
% display slit width
set(handles.editSlitWidth,'String',num2str(1000*slitWidth))
% --- Evaluates the resolution parameters from energy, groove density and cff
function [resLimit,resCoeff]=resParams(handles)
% input
% rms to fwhm
rms2fwhm=2*sqrt(2*log(2));
% - energy
energy=str2num(get(handles.editEnergy,'String'));
% - n
gratingNo=get(handles.popupmenuGrating,'Value');
n=str2num(handles.Gratings{gratingNo});
% - k
orderNo=get(handles.popupmenuOrder,'Value'); k=str2num(handles.Orders{orderNo});
% - Cff
cff=str2num(get(handles.editCff,'String')); if isempty(cff); resLimit=[]; return; end
% % sigmaV
% sigmaV=interp1(handles.Cff,handles.SigmaV(:,gratingNo),cff,'pchip');
% % display spot size
% set(handles.textSpotSize,'String',['Spot Size FWHM (um) = ' num2str(1000*2*sqrt(2*log(2))*sigmaV)])
% set(handles.textSpotSize,'String',['4-sigma Spot Size (um) = ' num2str(1000*4*sigmaV)])
% % if not zero order
% set([handles.editResolution handles.editSlitWidth],'Enable','On');
% wavelength
lambda=1e-6*1240/energy;
% alpha and beta
alphabeta=cffSolver(cff,n,k,lambda); alpha=alphabeta(1); beta=alphabeta(2);
% T-parameter
T=sqrt(lambda*k*n*(cff^2-1)/2);
% 4-sigma grating illumination
gratingIllumination=(4*handles.sigmaDivV_ID*handles.fCM/cos(alpha));
set(handles.textGratingIllumination,'String',['Grating Illumination (mm) = ' num2str(gratingIllumination)])
% resolving power
% - source contribution
handles.sigmaSizeV_ID*rms2fwhm;
R_source=handles.fCM*T/(handles.sigmaSizeV_ID*rms2fwhm);
% - PM-SE contribution
R_PM=T/(2*handles.sigmaSE_PM*rms2fwhm);
% - grating-SE contribution
R_Gr=T/(handles.sigmaSE_Gr(gratingNo)*rms2fwhm*(1+cff));
% - illuminated grooves
incAngleGra=pi/2-alpha; footGraV=handles.sigmaDivV_ID*rms2fwhm*handles.fCM/sin(incAngleGra);
R_N=min(handles.graLength,footGraV)*n;
% - total
R_tot=1/sqrt(R_source^-2+R_PM^-2+R_Gr^-2+R_N^-2);
resLimit=energy/R_tot;
% display resolution limit
set(handles.textResolutionLimit,'String',['Resolution Limit (meV) = ' num2str(1000*resLimit)])
% spot size at the slit
slitV=sqrt( (handles.sigmaSizeV_ID*rms2fwhm*handles.fFM/(cff*handles.fCM))^2 + ...
(2*handles.sigmaSE_PM*rms2fwhm*handles.fFM/cff)^2 + ...
(handles.sigmaSE_Gr(gratingNo)*rms2fwhm*(1+1/cff)*handles.fFM)^2 );
% display spot size at the slit
set(handles.textSpotSize,'String',['Focused spot size (um) = ' num2str(1000*slitV)])
% resolution coefficient
resCoeff=handles.fFM*n*k/cos(beta);
@@ -0,0 +1,26 @@
function DataC=SetContrast(Data,minFrac,maxFrac,gamma)
% DataC=SetContrast(Data,minFrac,maxFrac [,gamma]) increases the image contrast
% by saturating the lowest and highest data values within the minFrac and maxFrac
% fractions of all data points and (optionally) introducing the gamma-correction.
% The function ignores NaN elements. DataC is offset to zero in its minimum.
% Ver. 11.02.2018
% inputs
if nargin<4; gamma=1; end
% normalization to vary between 0 and 1 required for image processing functions
dMin=min(min(Data)); Data=Data-dMin; scale=max(max(Data)); Data=Data/scale;
% reference array without NaNs
DataR=Data(:); DataR=DataR(~isnan(DataR));
if isempty(DataR); DataC=Data; return; end
% histogram enhancement; the output arrays varies between 0 and 1
Lims=stretchlim(DataR,[minFrac maxFrac]);
DataC=imadjust(Data,Lims,[0 1],gamma);
% recovery of the NaNs removed by imadjust
DataC(isnan(Data))=NaN;
% scaling back
DataC=scale*DataC/diff(Lims)+dMin;
@@ -0,0 +1,100 @@
function [DSlice,XSlice]=Slice(ACorr,ECorr,Data,xMode,Win)
% [DSlice,XSlice]=Slice(ACorr,ECorr,Data,xMode,Win) slices the 3D array Data defined as a
% function of the [warping corrected] angles/parallel momenta ACorr and curvature corrected
% [aligned] energies ECorr. The calculated 2D array DSlice is defined as a function of 2D
% array XSlice(angles/momenta in Angle dimension, angles/momenta/hv in Scan dimension) for
% xMode='IsoE' (case-insensitive) or XSlice(angles/momenta/hv in Scan dimension, energies
% in Energy dimension) for xMode='isoK'. DSlice is integrated within the Win window
% [win1 win2] of energies (xMode='isoE') or angles/momenta (xMode='isoK'). XSlice is
% calculated in the middle of Win.
% Ver. 06.06.2020 (ver. 15.12.2017 + permanent ACorr/ECorr)
disp('- Data slice formation')
% persistent DataSave ISum
persistent ACorrSave ECorrSave DataSave ISumE ISumK
% check supported modes
xMode=lower(xMode);
if ~isequal(xMode,'isoe') && ~isequal(xMode,'isok')
XSlice=[]; DSlice=[]; disp('Error in Slice: Only ''IsoE'' and ''IsoK'' modes supported'); return;
end
% reset if new data (cumulative sum for another integration direction is persistent)
if ~isequal(ACorr,ACorrSave) || ~isequal(ECorr,ECorrSave) || ~isequal(Data,DataSave)
ISumE=[]; ISumK=[]; ACorrSave=ACorr; ECorrSave=ECorr; DataSave=Data;
end
% array permutation to reduce the 'isoK' mode to 'isoE'
if isequal(xMode,'isok')
ACorr=permute(ACorr,[2 1 3]); ECorr=permute(ECorr,[2 1 3]); Data=permute(Data,[2 1 3]);
T=ACorr; ACorr=ECorr; ECorr=T; clear T;
end
% check integration window
Win=sort(Win);
% if Win(1)>max(max(max(ECorr))) || Win(2)<min(min(min(ECorr)))
if Win(1)<max(max(ECorr(1,:,:))) || Win(2)>min(min(ECorr(end,:,:)))
XSlice=[]; DSlice=[]; disp('Error in Slice: Inconsistent integration window'); return;
end
% remove NaNs spoiling the cumulative sum
Data(isnan(Data))=0;
% expanding angle and energy arrays
% - 1D arrays
if size(ACorr,1)==1; ACorr=repmat(ACorr,size(Data,1),1); end
if size(ECorr,2)==1; ECorr=repmat(ECorr,1,size(Data,2)); end
% - 2D arrays
if size(ACorr,3)==1; ACorr=repmat(ACorr,[1 1 size(Data,3)]); end
if size(ECorr,3)==1; ECorr=repmat(ECorr,[1 1 size(Data,3)]); end
% shifted angle and energy arrays
ACorr1=ACorr(1:end-1,:,:); ECorr1=ECorr(1:end-1,:,:); ECorr2=ECorr(2:end,:,:);
% parameters
nA=size(Data,2); nS=size(Data,3); de=mean(mean(mean(diff(ECorr,1,1))));
% cumulative arrays
if isequal(xMode,'isoe')
if isempty(ISumE); ISumE=cumsum(Data(1:end-1,:,:),1)-0.5*Data(1:end-1,:,:); end
ISum=ISumE;
else
if isempty(ISumK); ISumK=cumsum(Data(1:end-1,:,:),1)-0.5*Data(1:end-1,:,:); end
ISum=ISumK;
end
% slice values
% point 1
Lin1=find(ECorr1<=Win(1)&ECorr2>Win(1));
% - subscript indices of the next point in energy
[I,J,K]=ind2sub(size(ECorr1),Lin1); Lin2=sub2ind(size(ECorr1),I+1,J,K);
% - interpolation of the linear matrices defined by linear indices
I1=ISum(Lin1)+(ISum(Lin2)-ISum(Lin1)).*(Win(1)-ECorr1(Lin1))/de;
% point 2
Lin1=find(ECorr1<=Win(2)&ECorr2>Win(2));
[I,J,K]=ind2sub(size(ECorr1),Lin1); Lin2=sub2ind(size(ECorr1),I+1,J,K);
I2=ISum(Lin1)+(ISum(Lin2)-ISum(Lin1)).*(Win(2)-ECorr1(Lin1))/de;
% integral value
% size(ISum)
% size(I2)
% size(I1)
DSlice=I2-I1;
% normalization
DSlice=DSlice*de/diff(Win);
% reshape back to array
DSlice=(reshape(DSlice,nA,nS))';
% XSlice values interpolated in the middle of Win
% - this block runs ~25% of the integration block runtime
midE=mean(Win);
Lin1=find(ECorr1<=midE&ECorr2>midE);
[I,J,K]=ind2sub(size(ECorr1),Lin1); Lin2=sub2ind(size(ECorr1),I+1,J,K);
XSlice=ACorr1(Lin1)+(ACorr1(Lin2)-ACorr1(Lin1)).*(midE-ECorr1(Lin1))/de;
% - reshape back to array
XSlice=(reshape(XSlice,nA,nS))';
% permutate back if the 'IsoK' mode
if isequal(xMode,'isok')
XSlice=XSlice'; DSlice=DSlice';
end
@@ -0,0 +1,42 @@
function A=SubtrBkg(ACorr,EAlign,Data,EWinNorm,scCoeff,clipNeg)
% A=SubtrBkg(ACorr,EAlign,Data [,EWinNorm] [,scCoeff] [,clipNeg]) subtracts angle-integrated spectral weight from
% the 2D/3D data array Data. Before the subtraction, the data is normalized to the spectral intensity integrated within
% the energy window EWinNorm (default 90% of the EAlign range). scCoeff scales the subtracted angle-integrated
% intensity (default 0.7) and clipNeg indicates whether the negative values are set to zero (default 1) or not (0).
% Ver. 11.07.2022
% default arguments
if nargin<6||isempty(clipNeg); clipNeg=1; end
if nargin<5||isempty(scCoeff); scCoeff=0.7; end
if nargin<4||isempty(EWinNorm); EWinNorm=[]; end
% validity check
if ~isnumeric(scCoeff)||~isequal(size(scCoeff),[1 1]); disp ('Error in SubtrBkg: scCoeff should be scalar'); A=[]; return; end
if ~isequal(clipNeg,0)&&~isequal(clipNeg,1); disp ('Error in SubtrBkg: clipNeg should be 0 or 1'); A=[]; return; end
if ~isempty(EWinNorm)&&~isequal(size(EWinNorm),[1 2])&&~isequal(size(EWinNorm),[2 1]); disp('Error in SubtrBkg: EWinNorm should be a two-element vector'); A=[]; return; end
% normalization energy window
ERange=[min(min(EAlign(:,1,:))) max(max(EAlign(:,end,:)))];
if isempty(EWinNorm)
EWinNorm=[0.9*ERange(1)+0.1*ERange(2) 0.1*ERange(1)+0.9*ERange(2)];
else
if min(EWinNorm)<ERange(1)||max(EWinNorm)>ERange(2) disp('Error in SubtrBkg: Inconsistent normalization energy window'); A=[]; return; end
end
% normalizing data
disp('- Normalizing data')
IDiv=Slice(ACorr,EAlign,Data,'isoE',EWinNorm);
IDiv=Gaco2(IDiv,5,0); % HWHM adjusted to suppress uneven sensitivity of the CCD channels
IDiv=repmat(IDiv,1,1,size(Data,1)); IDiv=permute(IDiv,[3 2 1]);
Data=Data./IDiv;
% angle-integration window
aMin=max(max(ACorr(:,1,:))); aMax=min(min(ACorr(:,end,:)));
AWin=[0.95*aMin+0.05*aMax 0.05*aMin+0.95*aMax];
% subtract angle-integrated spectrum and clip negative values
if scCoeff~=0
disp('- Subtracting angle-integrated background')
ISubtr=Slice(ACorr,EAlign,Data,'isoK',AWin);
ISubtr=repmat(ISubtr,1,1,size(Data,2)); ISubtr=permute(ISubtr,[1 3 2]);
A=Data-scCoeff*ISubtr;
if clipNeg==1; A(A<0)=0; end
end
@@ -0,0 +1,65 @@
function [DataXC,OffsE]=SumScanXC(Energy,Data,maxLagE,Win)
% [DataXC,OffsE] = SumScanXC(Energy,Data,maxLagE[,WinE]) summs up the separate scan frames from 3D
% array Data with energy offsets calculated by cross-correlation within the lag interval % +-maxLagE.
% The cross-correlation energy window is Win (default 80% of Energy) and angular window is fixed to
% default 90%. The returned offsets OffsE are discrete on energy grid without interpolation.
% Note: The cross-correlation algorithm subtracts linear background fixed at the end points of the
% energy window. For better accuracy choose the window ends at valleys between the spectral peaks
% and not far above EF.
% Ver. 17.06.2017
disp('- Correlating scans')
% check input
if size(Data,3)<2; DataXC=Data; OffsE=0; return; end
% parameters
nE=length(Energy); dE=mean(diff(Energy)); nA=size(Data,2); nS=size(Data,3);
maxLag=round(maxLagE/dE); Lag=-1*maxLag:maxLag;
% XC-window
% - default window of 80% in energy and 90% in angle
EWin=(1+round(0.1*nE)):round(0.9*nE);
AWin=(1+round(0.05*nA)):round(0.95*nA); nAWin=length(AWin);
% - energy window
if nargin>3;
Win=sort(Win);
EWin=round([max(1,interp1(Energy,1:nE,Win(1))):min(nE,interp1(Energy,1:nE,Win(2)))]);
end
nEWin=length(EWin);
% data window
DWin=Data(EWin(1):EWin(end),AWin(1):AWin(end),:);
X=repmat(1:nAWin,nEWin,1); Y=repmat((1:nEWin)',1,nAWin);
% figure; surf(X,Y,DWin(:,:,1),'edgecolor','none');
% suppress the window edge effects by 1D linear fit of the edge values
% - window edge values averaged over 3 end points
D1=sum(DWin(1:3,:,:),1)/3; D2=sum(DWin(end-2:end,:,:),1)/3;
for iS=1:nS
D1S=D1(1,:,iS); D2S=D2(1,:,iS);
Bkg=repmat(D1S,nEWin,1)+repmat((D2S-D1S)./(Y(end,:)-Y(1,:)),nEWin,1).*Y;
% figure; surf(X,Y,Bkg,'edgecolor','none');
DWin(:,:,iS)=DWin(:,:,iS)-Bkg;
% figure; surf(X,Y,DWin(:,:,iS),'edgecolor','none');
end
% padded reference
Ref=DWin(:,:,1); RPad=[zeros(maxLag,nAWin);Ref;zeros(maxLag,nAWin)];
% cycle over scans
OffsE=0; DataXC=Data(:,:,1)/nS;
for iS=2:nS
% - cycle over lags
XC=[]; for lag=Lag
DPad=[zeros(maxLag+lag,nAWin);DWin(:,:,iS);zeros(maxLag-lag,nAWin)];
xc=sum(sum(RPad.*DPad));
%/(size(Ref,1)-abs(lag)); % Note: Unbiased correlation may fail for flat-topped functions like y=x^2 (see TestXC.m)
XC=[XC xc];
end
% figure; plot(dE*Lag,XC);
% - offset at maximal correlation
[~,indMax]=max(XC); offs=Lag(indMax); offsE=offs*dE; OffsE=[OffsE; offsE];
disp(['Scan = ' num2str(iS) ': Offset = ' num2str(offsE)])
% - appending/truncation of the correlated images
% Note: negative arguments of ones(n,m) return empty array
Data(:,:,iS)=[NaN*ones(offs,nA); ...
Data(max(1,1-offs):min(nE,nE-offs),:,iS); ...
NaN*ones(-1*offs,nA)];
% - summation normalized by nS
DataXC=DataXC+Data(:,:,iS)/nS;
end
@@ -0,0 +1,62 @@
% -------------------------------------------------------------------------
% FUNCTION CALL: Img = CurvatureFlt2(Img [,order] [,CX] [,CY])
% -------------------------------------------------------------------------
% DESCRIPTION:
% This function computes the 1D or the 2D curvature as presented in [1]
% of the image.
% -------------------------------------------------------------------------
% INPUT:
% Img inpute image
% order dim parameter [String]: '1D', '2D' (1D or 2D curvature method)
% CX weighting parameter x direction (in 2D: exact parameter defined in [1])
% CY weighting parameter y direction (in 2D: exact parameter defined in [1])
% [1] P. P. Zhang, "A precise method for visualizing dispersive features
% in image plots," Review of Scientific Instruments, vol. 82,
% no. 4, 2011.
% -------------------------------------------------------------------------
% OUTPUT:
% Img filtered image (image is normalized to value range between (0,1))
% -------------------------------------------------------------------------
function [img] = CurvatureFlt2(img,varargin)
if(isempty(varargin))
img = curvature2D(img, 1,1);
else
switch varargin{1}
case '1D'
img = curvature1D(img,varargin{2},varargin{3});
case '2D'
img = curvature2D(img,varargin{2},varargin{3});
end
end
end
function AA = curvature2D(A,CX,CY)
%compute 1st,2nd derivative along x,y
AX = DifC(A',1)';
AXX = DifC(A',2)';
AY = (DifC(A,1));
AYY = (DifC(A,2));
AXY = (DifC(AX,1));
%compute curvature
AA = subplus(-(...
((1+CX*AX.^2).*CY.*AYY) -...
(2*CX*CY*(AX.*AY.*AXY)) +...
((1+CY*AY.^2)*CX.*AXX)) ./...
(...
(1 + CX*AX.^2 +CY*AY.^2).^(1.5)));
AA = mat2gray(AA);
end
function AA = curvature1D(A,hw,vw)
AX = DifC(A',1)';
AXX = DifC(A',2)';
AY = (DifC(A,1));
AYY = (DifC(A,2));
AA = hw*AXX./(1+AX.^2).^(3/2) + vw*AYY./(1+AY.^2).^(3/2);
AA = subplus(-AA);
AA = mat2gray(AA);
end
@@ -0,0 +1,40 @@
% -------------------------------------------------------------------------
% FUNCTION CALL: GaussFlt2(Img,hwX,hwY,hsX,hsY)
% -------------------------------------------------------------------------
% DESCRIPTION:
% The image is convolved with a gaussian kernel. The gaussian kernel is a
% kernel with [hsX,hsY] size and incorporates the horicontal, vertical
% half widths. The kernel is normalized.
% -------------------------------------------------------------------------
% HINT:
% For medianfilter use the MATLAB function medfilt2 (help medfilt2)
% -------------------------------------------------------------------------
% INPUT:
% Img 2D intensity image
% hwX horizontal half width
% hwY vertical half width
% hsX horizontal kernel length
% hsY vertical kernel length
% -------------------------------------------------------------------------
% OUTPUT:
% Img image convolved with gaussian kernel
% -------------------------------------------------------------------------
function Img = GaussFlt2(Img,hwX,hwY,hsX,hsY)
sigx = hwX/(2*sqrt(2*log(2)));
sigy = hwY/(2*sqrt(2*log(2)));
cov = [sigx, 0; 0 sigy];
kernel = getGauss(hsX,hsY,cov);
Img = imfilter(Img,kernel);
end
function gauss = getGauss(hsX, hsY, cov)
halfx = (hsX-1)/2;
halfy = (hsY-1)/2;
[x,y] = meshgrid(-halfx:halfx,-halfy:halfy);
A = inv(cov);
a1 = A(1,1)*x + A(1,2)*y;
a2 = A(2,1)*x + A(2,2)*y;
gauss = exp(-0.5*(x.*a1 + y.*a2));
gauss = gauss./sum(gauss(:));
end
@@ -0,0 +1,159 @@
% -------------------------------------------------------------------------
% FUNCTION CALL: LaplaceFlt2(Img [,y2xRatio] [,order])
% -------------------------------------------------------------------------
% DESCRIPTION:
% For laplacian computation a 2nd and 4th order scheme is used, for details
% please see (https://en.wikipedia.org/wiki/Finite_difference_coefficient).
% The 2nd order scheme needs a x_(i-1) and x_(i+1) for computation of the
% 2nd derivative at x_i. While the 4th order scheme needs x_(i-2),...,
% x_(i+2) values for x_i computation. For boundary pixels padding is
% therefore needed. Padding is done by mirroring boundary pixels.
% -------------------------------------------------------------------------
% EXAMPLE USE:
% img = imread('cameraman.tif');
% img = Laplacian2(img,1,'4th');
% imshow(img)
% -------------------------------------------------------------------------
% INPUT:
% Img --- image (NxM array)
% y2xRatio --- weigthing ratio between y and x laplacian
% order --- laplacian order [String]; '2nd','4th'
% -------------------------------------------------------------------------
% OUTPUT:
% Img --- output image (NxM array), image is normalized between
% (0,1)
% -------------------------------------------------------------------------
function [img] = LaplaceFlt2(img, varargin)
if(isempty(varargin))
img = laplacian2nd(img,1);
elseif(length(varargin)==2)
y2x = varargin{1};
switch varargin{2}
case '2nd'
img = laplacian2nd(img, y2x);
case '4th'
img = laplacian4th(img, y2x);
end
end
end
function [img] = laplacian2nd(img, y2x)
a = 1;
b = -2;
%resize array
[nsz, msz] = size(img);
AA = zeros(nsz+2,msz+2);
AA(2:end-1,2:end-1) = img;
AA(1,2:end-1) = (img(1,:));
AA(end,2:end-1) = (img(end,:));
AA(:,1) = (AA(:,2));
AA(:,end) = (AA(:,end-1));
img = AA;
% horizontal
Am = b*img(2:end-1,2:end-1);
Al = a*img(2:end-1,1:end-2);
Ar = a*img(2:end-1,3:end);
Ah = subplus(-(Am + Al + Ar));
% vertical
Am = b*img(2:end-1,2:end-1);
Al = a*img(1:end-2,2:end-1);
Ar = a*img(3:end,2:end-1);
Av = subplus(-(Am + Al + Ar));
% % diag-1
%
% Am = b*img(2:end-1,2:end-1);
% Al = a*img(1:end-2,1:end-2);
% Ar = a*img(3:end,3:end);
%
% Ad = dw1*subplus(-(Am + Al + Ar)/2);
%
%
% % diag-2
%
% Am = b*img(2:end-1,2:end-1);
% Al = a*img(3:end,1:end-2);
% Ar = a*img(1:end-2,3:end);
%
% Add = dw2*subplus(-(Am + Al + Ar)/2);
Av = y2x*mat2gray(Av);
Ah = mat2gray(Ah);
% Add = mat2gray(Add);
% Ad = mat2gray(Ad);
% img = max(max(Av,Ah),max(Add,Ad));
img = max(Av,Ah);
end
function [img] = laplacian4th(A,y2x)
%coeff 4th order
a = -1/12;
b = 4/3;
c = -5/2;
%enlarge array
[nsz, msz] = size(A);
AA = zeros(nsz+4,msz+4);
AA(3:end-2,3:end-2) = A;
AA(1:2,3:end-2) = repmat(A(1,:),[2 1]);
AA(end-1:end,3:end-2) = repmat(A(end,:),[2 1]);
AA(:,1:2) = repmat(AA(:,3),[1 2]);
AA(:,end-1:end) = repmat(AA(:,end-2),[1 2]);
A = AA;
% horizontal
Am = c*A(3:end-2,3:end-2);
All = a*A(3:end-2,1:end-4);
Al = b*A(3:end-2,2:end-3);
Arr = a*A(3:end-2,5:end);
Ar = b*A(3:end-2,4:end-1);
Axx = subplus(-(All + Al + Am + Ar + Arr));
% vertical
Am = c*A(3:end-2,3:end-2);
All = a*A(1:end-4,3:end-2);
Al = b*A(2:end-3,3:end-2);
Arr = a*A(5:end,3:end-2);
Ar = b*A(4:end-1,3:end-2);
Ayy = subplus(-(All + Al + Am + Ar + Arr));
% % diag-1
% Am = c*A(3:end-2,3:end-2);
% All = a*A(1:end-4,1:end-4);
% Al = b*A(2:end-3,2:end-3);
% Arr = a*A(5:end,5:end);
% Ar = b*A(4:end-1,4:end-1);
%
% Aud = dw1 * subplus(-(All + Al + Am + Ar + Arr)/2);
%
% % diag-2
% Am = c*A(3:end-2,3:end-2);
% All = a*A(5:end,1:end-4);
% Al = b*A(4:end-1,2:end-3);
% Arr = a*A(1:end-4,5:end);
% Ar = b*A(2:end-3,4:end-1);
%
% Abu = dw2 * subplus(-(All + Al + Am + Ar + Arr)/2);
Axx = mat2gray(Axx);
Ayy = y2x*mat2gray(Ayy);
% Aud = mat2gray(Aud);
% Abu = mat2gray(Abu);
% img = max(max(Axx,Ayy),max(Aud,Abu));
img = max(Axx,Ayy);
end
@@ -0,0 +1,46 @@
function DataCorr=SkewCorr(Angle,Energy,Data,AngleC,EnergyC,DataC,eLoc,feat)
% SkewCorr.m removes skewing of Data in energy scale as function of angle, which may result from
% certain irreproducibility of the analyzer slit setting. The algorithm uses 2-order polynomial fit
% of the Fermi edge or spectral peak in the calibration data, averaged within 20 angular bins, and
% AlignEF.m with default energy window and pre-smoothing parameters.
% Inputs: Angle (1D-row), Energy (1D-column) and Data (2D or 3D) are the input data arrays;
% AngleC (1D-row), EnergyC (1D-column) and DataC (2D) are the calibration data arrays; optional eLoc
% (default eLoc=0) specifies approximate energy of the calibration spectral structure, and optional
% feat = 'EF' or 'Peak' (case-insensitive, default 'EF') the type of this structure.
% Outputs: DataCorr as a function of the same Angle and Energy
% calibration data and parameters
%[AngleC,EnergyC,~,DataC,~,~]=ReadARPES(CalibFile); % the previous version
nA=size(DataC,2); nBin=20;
if nargin<7; eLoc=[]; end; if isempty(eLoc); eLoc=0; end
if nargin<8; feat=[]; end; if isempty(feat); feat='EF'; end;
% alignment and fit of the calibration data
% - global EF alignment to help reliability of the local alignment
[EnergyC,~,Fail]=AlignEF(DataC,EnergyC,eLoc,[],[],feat);
if ~isempty(Fail); DataCorr=[]; disp('Global EF alignment error'); return; end
% - local EF alignment
width=floor(nA/nBin);
n1=round((nA-nBin*width)/2);
A=[]; EF=[];
for j=n1:width:n1+width*(nBin-1);
[~,ef,Fail]=AlignEF(DataC(:,j:j+width),EnergyC,0,[],[],feat);
if isempty(Fail);
A=[A (AngleC(floor(j+width/2))+AngleC(ceil(j+width/2)))/2]; EF=[EF ef];
end
end
% - polynomial fit
P=polyfit(A,EF,2);
% figure; plot(A,EF,'b',AngleC,polyval(P,AngleC),'r')
% - removal of constant offset
P(end)=0;
% input data alignment
% - interpolation matrices
AngleM=repmat(Angle,size(Data,1),1);
EnergyCorr=repmat(Energy,1,size(Data,2))+repmat(polyval(P,Angle),size(Data,1),1);
% - cycle through scans
DataCorr=Data; for iScan=1:size(Data,3)
% - interpolating the corrected data
DataCorr(:,:,iScan)=interp2(Angle,Energy,Data(:,:,iScan),AngleM,EnergyCorr,'pchip');
end
@@ -0,0 +1,21 @@
function surfNormX = SurfNormX(hv,eB,kx,thtM,thtA,incAlpha)
% surfNormX = SurfNormX(hv,eB,kx,thtM,thtA,incAlpha) calculates the surface normal
% angle in the measurement plane. Inputs:
% hv - photon energy;
% eB and kx - binding energy (eB<0) and known k// of some reference feature;
% thtN and thtA - corresponding angle of the sample rotation and angle on
% the analyser scale.
% incAlpha - nominal X-ray incidence angle, for the present geometry equal to 9deg. If omitted, old geometry with 20deg implied.
% Ver. 08.11.2022
% parameters
if nargin<6; alpha=20; else alpha=incAlpha; end % nominal incidence angle
ePhi=4.5; % workfunction
% inputs check
if isempty(hv*eB*kx*thtM*thtA); surfNormX=[]; return; end
% physical reference THT
[thtMPhys,~,exitFlag]=fsolve(@(x) 0.5124*sqrt(hv-ePhi+eB)*sind(thtA+x)-...
2*pi*hv*cosd(alpha+x)/12400-kx,0,optimset('Display','off','TolFun',1e-10));
if exitFlag~=1||imag(thtMPhys)~=0; thtMPhys=[]; msgbox('Error: Failed to find the surface normal'); end
% surface normal
surfNormX=thtMPhys-thtM;
@@ -0,0 +1,58 @@
function [AA,ClipIm]=UnDisperse(A,hwSm,threshD2,threshD1)
% [AA,ClipIm]=UnDisperse(A,hwSm,threshD2,threshD1) clips from the ARPES image A the band-dispersion regions and
% evaluates the spectrum AA which is angle-integrated and normalized by the number of points outside these regions.
% The dispersion regions are identified by the condition -d2I/dE2>threshD2 (between the peak inflexion points) or,
% if the fourth parameter provided, by |d2I/dE2|>threshD2 and |dI/dE|>threshD1 (larger peak base width). Before
% the derivation, the image A is Gaussian pre-smoothed in the energy direction with hwSm, and the resulting
% spectrum AA post-smoothed with hwSm/2. If the -d2I/dE2>threshD2 condition is used, the corresponding peak
% width underestimate can be compensted by an increase of hwSm (which simultaneously reduces noise).
% Example: [AA,ClipIm]=UnDisperse(Z,0.5/dE,0.04); ImData(X,Y,SetContrast(ClipIm,0.001,0.999)); plot(AA)
% parameters
histMax=0.999; Mask=ones(size(A));
% pre-smoothing
SmA=Gaco2(A,0,hwSm);
% peak identification from second derivative only
if nargin<4
% - derivatives in the Y-direction
DA2=-1*DifC(SmA,2); DA2(DA2<0)=0; DA2(isnan(DA2))=0;
% - normalization to histogrammic maximum
DA2=DA2/max(max(DA2)); limDA2=stretchlim(DA2,[0 histMax]); DA2=DA2/limDA2(2);
% - clipping mask
Mask(DA2>threshD2)=0;
% peak identification from second and first derivatives
else
% - derivatives in the Y-direction
DA1=abs(DifC(SmA,1)); DA1(isnan(DA1))=0;
DA2=-1*DifC(SmA,2); DA2(DA2<0)=0; DA2(isnan(DA2))=0; % peak width within -d2I/dY2 maximum
% DA2=abs(DifC(SmA,2)); DA2(isnan(DA2))=0; % peak width between -d2I/dY2 minima
% - normalization to histogrammic maximum
DA1=DA1/max(max(DA1)); limDA1=stretchlim(DA1,[0 histMax]); DA1=DA1/limDA1(2);
DA2=DA2/max(max(DA2)); limDA2=stretchlim(DA2,[0 histMax]); DA2=DA2/limDA2(2);
% - clipping mask
Mask(DA2>threshD2|DA1>threshD1)=0;
end
% angle-integrated unstructure
% - input data with the clipped dispersion regions
ClipIm=A; ClipIm(Mask==0)=NaN;
% - nput data with zeros in the clipped regions
A(Mask==0)=0;
% - angle-integrated data normalized by number of points outside the clipped regions
nA=size(A,2); nE=size(A,1); AA=IntAngle(A,1:nA,(1:nE)',[1+0.05*(nA-1) 1+0.95*(nA-1)]);
% [~,AA]=Cut(1:nA,(1:nE)',A,'edc',[1+0.05*(nA-1) 1+0.95*(nA-1)]); % for some reasons does not work
MSum=IntAngle(Mask,1:nA,(1:nE)',[1+0.05*(nA-1) 1+0.95*(nA-1)]);
AA=AA./MSum;
% post-smoothing
AA=Gaco2(AA,0,hwSm/2);
% SmoZ=Gaco2(ExpZ,0,0.1/dE);
% figure; ImData(ExpX,ExpY,SmoZ); colormap hot; colorbar
% Di2Z=-DifC(SmoZ,2);
% Diff1=DifC(SmoZ,1);
% Cl2Z=Di2Z; Cl2Z(abs(Di2Z)>max(max(abs(Di2Z)))/40|abs(Diff1)>max(max(abs(Diff1)))/10)=NaN;
% figure; ImData(ExpX,ExpY,Cl2Z); colormap hot; colorbar;
% Cl2Z=Di2Z; Cl2Z(abs(Di2Z)>max(max(abs(Di2Z)))/20|abs(Diff1)>max(max(abs(Diff1)))/10)=NaN;
% figure; ImData(ExpX,ExpY,Cl2Z); colormap hot; colorbar;
@@ -0,0 +1,22 @@
function D=DifC(X,n)
% D = DifC(X,n) calculates the central differencies for the vector X of
% the n=1 or 2 order. The result is end-padded to keep the length of X.
% If A is matrix, the differences are calculated along the columns.
% consistency check
if n~=1 && n~=2; disp('DifC: Error, only n=1 or 2 are supported'); return; end
% transpose the row vector input
if size(X,1)==1; X=X'; tra=1; else tra=0; end
% central differences
if n==1
D=( X(3:end,:)-X(1:end-2,:) )/2;
else
D=X(3:end,:)+X(1:end-2,:)-2*X(2:end-1,:);
end
% padding
D=[D(1,:); D; D(end,:)];
% back transpose when the row vector input
if tra==1; D=D'; end
@@ -0,0 +1,25 @@
function [XMIN, XMAX] = ExLoc(X,Y)
% [XMIN, XMAX] = ExLoc(X,Y) finds all local extrema and interpolates their position
% inputs/outputs:
% X,Y - vectors of x- and y-values
% XMIN, XMAX - interpolated x-values of the local minima and maxima
% size check and reshape to rows
nx=length(X); ny=length(Y); if (nx-ny)~=0 error('Mismatch of input vectors'); end
X=reshape(X,[1 nx]); Y=reshape(Y,[1 ny]);
% - locating the extrema
L=Y(1:size(Y,2)-2); C=Y(2:size(Y,2)-1); R=Y(3:size(Y,2));
IMIN=1+find(C<L&C<R); IMAX=1+find(C>L&C>R);
% - interpolating
XMIN=[];
for imin=IMIN
[x dummy]=XYMax( [Y(imin-1) Y(imin) Y(imin+1)] );
XMIN=[XMIN X(imin-1)+x*(X(imin)-X(imin-1))];
end
XMAX=[];
for imax=IMAX
[x dummy]=XYMax( [Y(imax-1) Y(imax) Y(imax+1)] );
XMAX=[XMAX X(imax-1)+x*(X(imax)-X(imax-1))];
end
@@ -0,0 +1,38 @@
function [XMin,YMin,XMax,YMax] = ExtremeXY(X,Y)
% [XMin,YMin,XMax,YMax] = ExtremeXY(X,Y) finds and interpolates all local extremes
% Inputs/outputs:
% X,Y - vectors (rows or columns) of x- and y-values
% XMin,YMin,XMax,YMax - interpolated x- and y-values of the local minima and maxima
% Note: X shall not necessarily be equidistant, but plaid and not repeating values
% locating indices of the extremes
L=Y(1:end-2); C=Y(2:end-1); R=Y(3:end);
IMin=1+find(C<L&C<R); IMax=1+find(C>L&C>R);
% offsets to pre-condition the polynom fit
xOffset=mean(X); yOffset=mean(Y);
X=X-xOffset; Y=Y-yOffset;
% interpolating minima and offset backcorrection
XMin=[]; YMin=[];
if ~isempty(IMin)
for iMin=IMin
X(iMin-1:iMin+1); Y(iMin-1:iMin+1);
Fit=polyfit(X(iMin-1:iMin+1),Y(iMin-1:iMin+1),2);
xMin=-0.5*Fit(2)/Fit(1); XMin=[XMin xMin];
yMin=polyval(Fit,xMin); YMin=[YMin yMin];
end;
XMin=XMin+xOffset; YMin=YMin+yOffset;
end
% interpolating maxima and offset backcorrection
XMax=[]; YMax=[];
if ~isempty(IMax)
for iMax=IMax
Fit=polyfit(X(iMax-1:iMax+1),Y(iMax-1:iMax+1),2);
xMax=-0.5*Fit(2)/Fit(1); XMax=[XMax xMax];
yMax=polyval(Fit,xMax); YMax=[YMax yMax];
end;
XMax=XMax+xOffset; YMax=YMax+yOffset;
end
@@ -0,0 +1,14 @@
function [AFlat,Coeffs]=Flat(Angle,Scan,Slice)
% AFlat=Flat(Angle,Scan,Slice) returns a bilinear fit of Slice
% flatten the arrays
SliceF=Slice(:);
[AngleM,ScanM]=meshgrid(Angle,Scan); AngleF=AngleM(:); ScanF=ScanM(:);
OnesF=ones(size(SliceF));
% fitting
Coeffs=[AngleF ScanF OnesF]\SliceF;
% fitting plane
AFlat=Coeffs(1)*AngleM+Coeffs(2)*ScanM+Coeffs(3);
% figure; imagesc(Angle,Scan,Slice); set(gca,'TickDir','Out'); axis equal tight;
% figure; imagesc(Angle,Scan,FitM); set(gca,'TickDir','Out'); axis equal tight;
@@ -0,0 +1,27 @@
function AA=Gaco1(A,hw,hs)
% AA=Gaco1(A,hw [,hs]) convolutes vector or matrix A with Gaussian of
% half-width hw and half-support hs(in inter-point distances). If skipped,
% the default hs=3*hw. The ends are padded symmetrically. If A is matrix,
% the convolution proceeds along the columns.
% transpose the row vector input
if size(A,1)==1; A=A'; tra=1; else tra=0; end
% default support
if nargin<3; hs=3*hw; end; hs=ceil(hs);
% convolution kernel
% - formation
K=(-1*hs:1:hs)'; K=exp(-1*(sqrt(log(2))*K/(hw+eps)).^2);
% - normalization
K=K/sum(K);
% padding A
% ALow=flipud(A(2:hs+1,:)); AHi=flipud(A(end-hs:end-1,:)); A=[ALow;A;AHi];
A=padarray(A,[hs 0],'replicate','both');
% convolution
AA=conv2(K,1,A,'valid');
% back transpose when the row vector input
if tra==1; AA=AA'; end
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,16 @@
function Fit=LinFit(X,Y,Z,FString)
% linear fit of Z(X,Y) with the functions of X and Y specified in FString
% (space separated). The constant term is represented by leading 1.
% Example: Fit=LinFit(X,Y,Z,'1 X.^2 X.*Y Y.^2')
% replacing the constant term
if isequal(FString(1),'1'); FString=['ones(size(X))' FString(2:end)]; end
% flattening
X=X(:); Y=Y(:); Z=Z(:);
if length(Y)~=length(X) || length(Z)~=length(X)
Fit=[]; disp('LinFit error: Incompatible input arrays'); return
end
% - fitting
eval(['Fit=[' FString ']\Z;']); Fit=Fit';
@@ -0,0 +1,25 @@
function Z=LinVal(FString,Coeffs,X,Y)
% Z=LinVal(FString,Coeffs,X,Y) returns values of the linear combination of
% the functions of X and Y defined in FString (space separated) with
% the coefficients defined in Coeffs.
% Example: Z=LinVal('1 X.^2 X.Y Y.^2',Coeffs,X,Y)
% squeeze multiple spaces from FString
while ~isempty(strfind(FString,' '))
FString=strrep(FString,' ',' ');
end
% consistency check
if length(strfind(FString,' '))~=length(Coeffs)-1
Z=[]; disp('LinVal error: FString misfits with Coeffs'); return
end
% formation of the linear combination string
FString=['Coeffs(1)*' FString]; % leading term
for iCoeff=2:length(Coeffs)
iSep=strfind(FString,' '); iSep=iSep(1);
FString=[FString(1:iSep-1) '+Coeffs(' num2str(iCoeff) ')*' FString(iSep+1:end)];
end
% values
eval(['Z=' FString ';']);
@@ -0,0 +1,26 @@
function [xMax,yMax,zMax]=MaxLoc2(X,Y,Z)
% [xMax,yMax,zMax]=MaxLoc2(X,Y,Z) finds the global maximum of Z(X,Y) and
% quadratically interpolates its coordinates and value
% locate the global maximum
ZMax=max(max(Z)); [iMax,jMax]=find(Z==ZMax);
X=X(jMax-1:jMax+1); Y=Y(iMax-1:iMax+1); Z=Z(iMax-1:iMax+1,jMax-1:jMax+1);
% test
% figure; ImData(X,Y,Z);
% quadratic fit of the global maximum
% - flatten the arrays
[XM,YM]=meshgrid(X,Y); XF=XM(:); YF=YM(:);
ZF=Z(:);
OnesF=ones(size(ZF));
% - fit coeffs
A=[XF.^2 YF.^2 XF.*YF XF YF OnesF]\ZF;
% - fit surface
ZFit=A(1)*XM.^2+A(2)*YM.^2+A(3)*XM.*YM+A(4)*XM+A(5)*YM+A(6);
% - output test
% figure; ImData(X,Y,ZFit);
% - coordinates and value of the global maximum
xMax=(2*A(2).*A(4)-A(3).*A(5))/(A(3).^2-4*A(1).*A(2));
yMax=(-2*A(1)*xMax-A(4))/A(3);
zMax=A(1)*xMax.^2+A(2)*yMax.^2+A(3)*xMax.*yMax+A(4)*xMax+A(5)*yMax+A(6);
@@ -0,0 +1,35 @@
function DataCorr=PolyAlignEF(Angle,Energy,Data,CalibFile)
% PolyCorrEF.m aligns Data in energy scale relative to EF varying as function of angle. The
% algorithm uses 3-order polynomial fit of the Fermi edge, averaged within 20 angular bins.
% Inputs: Angle (1D-row), Energy (1D-column) and Data (2D or 3D) are the input array; CalibFile
% is the EF calibration file. Outputs: DataCorr as a function of the same Angle and Energy
% calibration data and parameters
[AngleC,EnergyC,~,DataC,~,~]=ReadARPES(CalibFile);
nA=size(DataC,2); nBin=20;
% - global EF alignment to help reliability of the local alignment
[EnergyC,~,Fail]=AlignEF(DataC,EnergyC,0);
if ~isempty(Fail); DataCorr=[]; disp('Global EF alignment error'); return; end
% - local EF alignment
width=floor(nA/nBin);
n1=round((nA-nBin*width)/2);
A=[]; EF=[];
for j=n1:width:n1+width*(nBin-1);
[~,ef,Fail]=AlignEF(DataC(:,j:j+width),EnergyC,0);
if isempty(Fail);
A=[A (AngleC(floor(j+width/2))+AngleC(ceil(j+width/2)))/2]; EF=[EF ef];
end
end
% - polynomial fit
P=polyfit(A,EF,3);
% figure; plot(A,EF,'b',AngleC,polyval(P,AngleC),'r')
% input data alignment
% - interpolation matrices
AngleM=repmat(Angle,size(Data,1),1);
EnergyCorr=repmat(Energy,1,size(Data,2))+repmat(polyval(P,Angle),size(Data,1),1);
% - cycle through scans
DataCorr=Data; for iScan=1:size(Data,3)
% - interpolating the corrected data
DataCorr(:,:,iScan)=interp2(Angle,Energy,Data(:,:,iScan),AngleM,EnergyCorr,'pchip');
end
@@ -0,0 +1,16 @@
function [Angle,Energy,Scan,DataXC,ep,Note]=ReadSumXC(Files)
% ReadSumXC reads and adds separate sp2- or hdf5-files with x-correlation.
% The files are assumed to have the same size and energy scale.
% The input parameter Files is a cell array like {'A','B','C'}.
% load files
DataXC=[];
for iFile=1:size(Files,2)
try [Angle,Energy,Scan,Data,ep,Note]=ReadARPES(Files{iFile});
catch msgbox(['Input Error in ' Files{iFile}],'modal'); return; end
DataXC=cat(3,DataXC,Data);
end
% reduction
disp('- X-correlating data')
maxLagE=0.25; [Energy,DataXC]=SumScanXC(Energy,DataXC,maxLagE);
@@ -0,0 +1,19 @@
function [data, axes, note] = ReaderHDF5(fname)
% Read HDF5 file saved by SmartGUI
% data is the possible multidimensional matrix.
% axes is a cell object. Each row holds the scale array for
% corresponding dimension.
axes = {};
% data dimensions are reversed
data = h5read(fname, '/Matrix');
data = permute(data, ndims(data):-1:1);
% notes
note = h5readatt(fname, '/Matrix', 'IGORWaveNote');
% scale information for each dimension
scale = h5readatt(fname, '/Matrix', 'IGORWaveScaling');
[~, ncols] = size(scale);
for n=2:ncols
axis = scale(2,n)+[0:size(data,n-1)-1]*scale(1, n);
axes = vertcat(axes, axis);
end
end
@@ -0,0 +1,45 @@
function [data,comments,transform] = ReaderSP2(filename)
data = struct('image',[], ...
'raw', [], ... % raw image without correction
'erange',[], ... % in the format of [EkinStart, EkinEnd]
'arange',[], ... % in the format of [aStart, aEnd]
'edelta',[], ... % in the format of [EkinStart, EkinDelta]
'adelta',[] ... % in the format of [aStart, aDelta]
);
d = readsp2(filename);
if (isempty(d.image))
return
end
data.image = d.image;
data.raw = d.raw;
comments = d.comment;
% Parse ERange and aRange
ini = IniConfig();
ini.ReadStream(comments,'#');
value = ini.GetValues('Transform','ERange','');
erange = value{1};
delta = (erange(2)-erange(1))/(size(data.image,2)-1);
data.erange = erange;
data.edelta = [erange(1) delta];
value = ini.GetValues('Transform','aRange','');
arange = value{1};
delta = (arange(2)-arange(1))/(size(data.image,1)-1);
data.arange = arange;
data.adelta = [arange(1) delta];
% Parse Transform section
transform = [];
keys = {'lensmode', 'Ek', 'Ep', 'WF', 'ERange', 'aRange', 'De1', 'aInner', ...
'eShift', 'Da1', 'Da3', 'Da5', 'Da7', 'pixel_size', 'magnification', ...
'offset', 'interpolation_mode', 'intensity_scaling', 'aUnit', ...
'eGrid', 'aGrid', 'source'};
for key=keys
keyname = key{1};
value = ini.GetValues('Transform', keyname, '');
value = value{1};
transform.(keyname) = value;
end
end
@@ -0,0 +1,65 @@
function [data,comments] = ReaderSP2(filename)
% Read SP2 files.
% It read the image as well as the scale information.
data = struct('image',[], ...
'erange',[], ... % in the format of [EkinStart, EkinEnd]
'arange',[], ... % in the format of [aStart, aEnd]
'edelta',[], ... % in the format of [EkinStart, EkinDelta]
'adelta',[] ... % in the format of [aStart, aDelta]
);
% Read image data
% This is much slower than read with textscan
% try
% data.image = imread(filename);
% lastwarn('');
% catch ME
% disp(ME.message)
% return
% end
% Valid SP2 file?
file = fopen(filename);
line = fgetl(file);
if ~strcmp(line, 'P2')
fclose(file);
return
end
% Read comments
comments = {};
line = fgetl(file);
while ischar(line)
if line(1)~='#', break; end
comments = vertcat(comments,regexprep(line, '^#(.*)', '$1'));
line = fgetl(file);
end
% Read dimension information
dims = sscanf(line, '%d %d %d');
% Read data
raw = textscan(file, '%d');
data.image = double(reshape(raw{1}, dims(1), dims(2))');
% Close file
fclose(file);
% Parse ERange and aRange
ini = IniConfig();
ini.ReadStream(comments,'#');
value = ini.GetValues('Transform','ERange','');
range = value{1};
delta = (range(2)-range(1))/(size(data.image,2)-1);
data.erange = range;
data.edelta = [range(1) delta];
value = ini.GetValues('Transform','aRange','');
range = value{1};
delta = (range(2)-range(1))/(size(data.image,1)-1);
data.arange = range;
data.adelta = [range(1) delta];
end
@@ -0,0 +1,48 @@
function AA=VGaco(A,HW,hs,PadMethod)
% AA=VGaco(A,HW [,hs] [,PadMethod]) convolutes A (vector) with Gaussian
% having varying half-width HW (vector or scalar, in inter-point distances)
% and fixed half-support hs (scalar, in inter-point distances). If skipped
% or empty, the default hs=3*hw. Reduction of the end effects is controlled
% by PadMethod (optional): default symmetric padding if skipped or 'symm',
% or padding by hs-wide arrays linearly extrapolated from the HW-wide end
% intervals if 'extrap'
% default support
if nargin<3; hs=[]; end
if isempty(hs); hs=3*HW; end
% check the PadMethod arguments
if nargin==4 && ~strcmp(PadMethod,'extrap') && ~strcmp(PadMethod,'symm')
error('''symm'' (default) and ''extrap'' padding methods are supported');
end
% parameters
na=length(A); AA=A; A=reshape(A,[1 na]);
HW=HW/sqrt(log(2))+eps; if length(HW)==1; HW=HW*ones(1,na); end
hs=ceil(hs);
% convolution with padding by linear extrapolation
if nargin==4 && strcmp(PadMethod,'extrap')
% - linear fit within HW
rangeL=1:1+ceil(HW(1)); PL=polyfit(rangeL,A(rangeL),1); AL=polyval(PL,1-hs:0);
rangeR=na-ceil(HW(end)):na; PR=polyfit(rangeR,A(rangeR:na),1); AR=polyval(PR,na+1:na+hs);
% - appending
if size(A,1)<size(A,2) A=[AL A AR]; else A=[AL; A; AR]; end
% - convolution
for i=1:na
RANGE=i-hs:i+hs;
WEIGHTS=exp( -1*((i-RANGE)/HW(i)).^2 );
AA(i)=dot( A(RANGE+hs),WEIGHTS )/sum( WEIGHTS );
end
% convolution with symmetric padding (default)
else
% - convolution with re-weighting at the ends
for i=1:na
RANGE=max([1 i-hs]):min([na i+hs]);
WEIGHTS=exp( -1*((i-RANGE)/HW(i)).^2 );
AA(i)=dot( A(RANGE),WEIGHTS )/sum( WEIGHTS );
end
end
% end of VGaco
@@ -0,0 +1,14 @@
function [x,y]=XYMax(PTS)
% [x,y]=xymax(PTS) quadraticly interpolates a 3-point vector to find the maximum.
% The points are assumed located at [0 1 2]. The maximum may be outside.
% Based on QUAD2 from the Optimization toolbox.
% input check
if size(PTS,1)>size(PTS,2); pts=PTS; else pts=PTS'; end
c=pts(1);
ab=[-1 0.5; 2 -0.5]*(pts(2:3)-c*ones(2,1));
x=-ab(2)/(2*ab(1));
y=ab(1)*x^2+ab(2)*x+c;
@@ -0,0 +1,8 @@
function dispname(varargin)
% dispname(x [,...]) displays variables in coma-separated argument list with names
for i=1:nargin
disp([inputname(i) '= ' num2str(varargin{i})])
end
% function dispname(name)
% % dispname(X) -- Display scalar variable(s) in argument list with name(s)
% disp([inputname(1) '= ' num2str(name)])
@@ -0,0 +1,482 @@
function [z,s,exitflag,Wtot] = smoothn(varargin)
%SMOOTHN Robust spline smoothing for 1-D to N-D data.
% SMOOTHN provides a fast, automatized and robust discretized smoothing
% spline for data of any dimension.
%
% Z = SMOOTHN(Y) automatically smoothes the uniformly-sampled array Y. Y
% can be any N-D noisy array (time series, images, 3D data,...). Non
% finite data (NaN or Inf) are treated as missing values.
%
% Z = SMOOTHN(Y,S) smoothes the array Y using the smoothing parameter S.
% S must be a real positive scalar. The larger S is, the smoother the
% output will be. If the smoothing parameter S is omitted (see previous
% option) or empty (i.e. S = []), it is automatically determined using
% the generalized cross-validation (GCV) method.
%
% Z = SMOOTHN(Y,W) or Z = SMOOTHN(Y,W,S) specifies a weighting array W of
% real positive values, that must have the same size as Y. Note that a
% nil weight corresponds to a missing value.
%
% Robust smoothing
% ----------------
% Z = SMOOTHN(...,'robust') carries out a robust smoothing that minimizes
% the influence of outlying data.
%
% [Z,S] = SMOOTHN(...) also returns the calculated value for S so that
% you can fine-tune the smoothing subsequently if needed.
%
% An iteration process is used in the presence of weighted and/or missing
% values. Z = SMOOTHN(...,OPTION_NAME,OPTION_VALUE) smoothes with the
% termination parameters specified by OPTION_NAME and OPTION_VALUE. They
% can contain the following criteria:
% -----------------
% TolZ: Termination tolerance on Z (default = 1e-3)
% TolZ must be in ]0,1[
% MaxIter: Maximum number of iterations allowed (default = 100)
% Initial: Initial value for the iterative process (default =
% original data)
% -----------------
% Syntax: [Z,...] = SMOOTHN(...,'MaxIter',500,'TolZ',1e-4,'Initial',Z0);
%
% [Z,S,EXITFLAG] = SMOOTHN(...) returns a boolean value EXITFLAG that
% describes the exit condition of SMOOTHN:
% 1 SMOOTHN converged.
% 0 Maximum number of iterations was reached.
%
% Class Support
% -------------
% Input array can be numeric or logical. The returned array is of class
% double.
%
% Notes
% -----
% The N-D (inverse) discrete cosine transform functions <a
% href="matlab:web('http://www.biomecardio.com/matlab/dctn.html')"
% >DCTN</a> and <a
% href="matlab:web('http://www.biomecardio.com/matlab/idctn.html')"
% >IDCTN</a> are required.
%
% To be made
% ----------
% Estimate the confidence bands (see Wahba 1983, Nychka 1988).
%
% Reference
% ---------
% Garcia D, Robust smoothing of gridded data in one and higher dimensions
% with missing values. Computational Statistics & Data Analysis, 2010.
% <a
% href="matlab:web('http://www.biomecardio.com/pageshtm/publi/csda10.pdf')">PDF download</a>
%
% Examples:
% --------
% % 1-D example
% x = linspace(0,100,2^8);
% y = cos(x/10)+(x/50).^2 + randn(size(x))/10;
% y([70 75 80]) = [5.5 5 6];
% z = smoothn(y); % Regular smoothing
% zr = smoothn(y,'robust'); % Robust smoothing
% subplot(121), plot(x,y,'r.',x,z,'k','LineWidth',2)
% axis square, title('Regular smoothing')
% subplot(122), plot(x,y,'r.',x,zr,'k','LineWidth',2)
% axis square, title('Robust smoothing')
%
% % 2-D example
% xp = 0:.02:1;
% [x,y] = meshgrid(xp);
% f = exp(x+y) + sin((x-2*y)*3);
% fn = f + randn(size(f))*0.5;
% fs = smoothn(fn);
% subplot(121), surf(xp,xp,fn), zlim([0 8]), axis square
% subplot(122), surf(xp,xp,fs), zlim([0 8]), axis square
%
% % 2-D example with missing data
% n = 256;
% y0 = peaks(n);
% y = y0 + rand(size(y0))*2;
% I = randperm(n^2);
% y(I(1:n^2*0.5)) = NaN; % lose 1/2 of data
% y(40:90,140:190) = NaN; % create a hole
% z = smoothn(y); % smooth data
% subplot(2,2,1:2), imagesc(y), axis equal off
% title('Noisy corrupt data')
% subplot(223), imagesc(z), axis equal off
% title('Recovered data ...')
% subplot(224), imagesc(y0), axis equal off
% title('... compared with original data')
%
% % 3-D example
% [x,y,z] = meshgrid(-2:.2:2);
% xslice = [-0.8,1]; yslice = 2; zslice = [-2,0];
% vn = x.*exp(-x.^2-y.^2-z.^2) + randn(size(x))*0.06;
% subplot(121), slice(x,y,z,vn,xslice,yslice,zslice,'cubic')
% title('Noisy data')
% v = smoothn(vn);
% subplot(122), slice(x,y,z,v,xslice,yslice,zslice,'cubic')
% title('Smoothed data')
%
% % Cardioid
% t = linspace(0,2*pi,1000);
% x = 2*cos(t).*(1-cos(t)) + randn(size(t))*0.1;
% y = 2*sin(t).*(1-cos(t)) + randn(size(t))*0.1;
% z = smoothn(complex(x,y));
% plot(x,y,'r.',real(z),imag(z),'k','linewidth',2)
% axis equal tight
%
% % Cellular vortical flow
% [x,y] = meshgrid(linspace(0,1,24));
% Vx = cos(2*pi*x+pi/2).*cos(2*pi*y);
% Vy = sin(2*pi*x+pi/2).*sin(2*pi*y);
% Vx = Vx + sqrt(0.05)*randn(24,24); % adding Gaussian noise
% Vy = Vy + sqrt(0.05)*randn(24,24); % adding Gaussian noise
% I = randperm(numel(Vx));
% Vx(I(1:30)) = (rand(30,1)-0.5)*5; % adding outliers
% Vy(I(1:30)) = (rand(30,1)-0.5)*5; % adding outliers
% Vx(I(31:60)) = NaN; % missing values
% Vy(I(31:60)) = NaN; % missing values
% Vs = smoothn(complex(Vx,Vy),'robust'); % automatic smoothing
% subplot(121), quiver(x,y,Vx,Vy,2.5), axis square
% title('Noisy velocity field')
% subplot(122), quiver(x,y,real(Vs),imag(Vs)), axis square
% title('Smoothed velocity field')
%
% See also SMOOTH, SMOOTH3, DCTN, IDCTN.
%
% -- Damien Garcia -- 2009/03, revised 2010/11
% Visit my <a
% href="matlab:web('http://www.biomecardio.com/matlab/smoothn.html')">website</a> for more details about SMOOTHN
% Check input arguments
error(nargchk(1,12,nargin));
%% Test & prepare the variables
%---
k = 0;
while k<nargin && ~ischar(varargin{k+1}), k = k+1; end
%---
% y = array to be smoothed
y = double(varargin{1});
sizy = size(y);
noe = prod(sizy); % number of elements
if noe<2, z = y; return, end
%---
% Smoothness parameter and weights
W = ones(sizy);
s = [];
if k==2
if isempty(varargin{2}) || isscalar(varargin{2}) % smoothn(y,s)
s = varargin{2}; % smoothness parameter
else % smoothn(y,W)
W = varargin{2}; % weight array
end
elseif k==3 % smoothn(y,W,s)
W = varargin{2}; % weight array
s = varargin{3}; % smoothness parameter
end
if ~isequal(size(W),sizy)
error('MATLAB:smoothn:SizeMismatch',...
'Arrays for data and weights must have same size.')
elseif ~isempty(s) && (~isscalar(s) || s<0)
error('MATLAB:smoothn:IncorrectSmoothingParameter',...
'The smoothing parameter must be a scalar >=0')
end
%---
% "Maximal number of iterations" criterion
I = find(strcmpi(varargin,'MaxIter'),1);
if isempty(I)
MaxIter = 100; % default value for MaxIter
else
try
MaxIter = varargin{I+1};
catch ME
error('MATLAB:smoothn:IncorrectMaxIter',...
'MaxIter must be an integer >=1')
end
if ~isnumeric(MaxIter) || ~isscalar(MaxIter) ||...
MaxIter<1 || MaxIter~=round(MaxIter)
error('MATLAB:smoothn:IncorrectMaxIter',...
'MaxIter must be an integer >=1')
end
end
%---
% "Tolerance on smoothed output" criterion
I = find(strcmpi(varargin,'TolZ'),1);
if isempty(I)
TolZ = 1e-3; % default value for TolZ
else
try
TolZ = varargin{I+1};
catch ME
error('MATLAB:smoothn:IncorrectTolZ',...
'TolZ must be in ]0,1[')
end
if ~isnumeric(TolZ) || ~isscalar(TolZ) || TolZ<=0 || TolZ>=1
error('MATLAB:smoothn:IncorrectTolZ',...
'TolZ must be in ]0,1[')
end
end
%---
% "Initial Guess" criterion
I = find(strcmpi(varargin,'Initial'),1);
if isempty(I)
isinitial = false; % default value for TolZ
else
isinitial = true;
try
z0 = varargin{I+1};
catch ME
error('MATLAB:smoothn:IncorrectInitialGuess',...
'Z0 must be a valid initial guess for Z')
end
if ~isnumeric(z0) || ~isequal(size(z0),sizy)
error('MATLAB:smoothn:IncorrectTolZ',...
'Z0 must be a valid initial guess for Z')
end
end
%---
% "Weighting function" criterion
I = find(strcmpi(varargin,'Weights'),1);
if isempty(I)
weightstr = 'bisquare'; % default weighting function
else
try
weightstr = lower(varargin{I+1});
catch ME
error('MATLAB:smoothn:IncorrectWeights',...
'A valid weighting function must be chosen')
end
if ~ischar(weightstr)
error('MATLAB:smoothn:IncorrectWeights',...
'A valid weighting function must be chosen')
end
end
%---
% Weights. Zero weights are assigned to not finite values (Inf or NaN),
% (Inf/NaN values = missing data).
IsFinite = isfinite(y);
nof = nnz(IsFinite); % number of finite elements
W = W.*IsFinite;
if any(W<0)
error('MATLAB:smoothn:NegativeWeights',...
'Weights must all be >=0')
else
W = W/max(W(:));
end
%---
% Weighted or missing data?
isweighted = any(W(:)<1);
%---
% Robust smoothing?
isrobust = any(strcmpi(varargin,'robust'));
%---
% Automatic smoothing?
isauto = isempty(s);
%---
% DCTN and IDCTN are required
test4DCTNandIDCTN
%% Creation of the Lambda tensor
%---
% Lambda contains the eingenvalues of the difference matrix used in this
% penalized least squares process.
d = ndims(y);
Lambda = zeros(sizy);
for i = 1:d
siz0 = ones(1,d);
siz0(i) = sizy(i);
Lambda = bsxfun(@plus,Lambda,...
cos(pi*(reshape(1:sizy(i),siz0)-1)/sizy(i)));
end
Lambda = -2*(d-Lambda);
if ~isauto, Gamma = 1./(1+s*Lambda.^2); end
%% Upper and lower bound for the smoothness parameter
% The average leverage (h) is by definition in [0 1]. Weak smoothing occurs
% if h is close to 1, while over-smoothing appears when h is near 0. Upper
% and lower bounds for h are given to avoid under- or over-smoothing. See
% equation relating h to the smoothness parameter (Equation #12 in the
% referenced CSDA paper).
N = sum(sizy~=1); % tensor rank of the y-array
hMin = 1e-6; hMax = 0.99;
sMinBnd = (((1+sqrt(1+8*hMax.^(2/N)))/4./hMax.^(2/N)).^2-1)/16;
sMaxBnd = (((1+sqrt(1+8*hMin.^(2/N)))/4./hMin.^(2/N)).^2-1)/16;
%% Initialize before iterating
%---
Wtot = W;
%--- Initial conditions for z
if isweighted
%--- With weighted/missing data
% An initial guess is provided to ensure faster convergence. For that
% purpose, a nearest neighbor interpolation followed by a coarse
% smoothing are performed.
%---
if isinitial % an initial guess (z0) has been provided
z = z0;
else
z = InitialGuess(y,IsFinite);
end
else
z = zeros(sizy);
end
%---
z0 = z;
y(~IsFinite) = 0; % arbitrary values for missing y-data
%---
tol = 1;
RobustIterativeProcess = true;
RobustStep = 1;
nit = 0;
%--- Error on p. Smoothness parameter s = 10^p
errp = 0.1;
opt = optimset('TolX',errp);
%--- Relaxation factor RF: to speedup convergence
RF = 1 + 0.75*isweighted;
%% Main iterative process
%---
while RobustIterativeProcess
%--- "amount" of weights (see the function GCVscore)
aow = sum(Wtot(:))/noe; % 0 < aow <= 1
%---
while tol>TolZ && nit<MaxIter
nit = nit+1;
DCTy = dctn(Wtot.*(y-z)+z);
if isauto && ~rem(log2(nit),1)
%---
% The generalized cross-validation (GCV) method is used.
% We seek the smoothing parameter s that minimizes the GCV
% score i.e. s = Argmin(GCVscore).
% Because this process is time-consuming, it is performed from
% time to time (when nit is a power of 2)
%---
fminbnd(@gcv,log10(sMinBnd),log10(sMaxBnd),opt);
end
z = RF*idctn(Gamma.*DCTy) + (1-RF)*z;
% if no weighted/missing data => tol=0 (no iteration)
tol = isweighted*norm(z0(:)-z(:))/norm(z(:));
z0 = z; % re-initialization
end
exitflag = nit<MaxIter;
if isrobust %-- Robust Smoothing: iteratively re-weighted process
%--- average leverage
h = sqrt(1+16*s); h = sqrt(1+h)/sqrt(2)/h; h = h^N;
%--- take robust weights into account
Wtot = W.*RobustWeights(y-z,IsFinite,h,weightstr);
%--- re-initialize for another iterative weighted process
isweighted = true; tol = 1; nit = 0;
%---
RobustStep = RobustStep+1;
RobustIterativeProcess = RobustStep<4; % 3 robust steps are enough.
else
RobustIterativeProcess = false; % stop the whole process
end
end
%% Warning messages
%---
if isauto
if abs(log10(s)-log10(sMinBnd))<errp
warning('MATLAB:smoothn:SLowerBound',...
['s = ' num2str(s,'%.3e') ': the lower bound for s ',...
'has been reached. Put s as an input variable if required.'])
elseif abs(log10(s)-log10(sMaxBnd))<errp
warning('MATLAB:smoothn:SUpperBound',...
['s = ' num2str(s,'%.3e') ': the upper bound for s ',...
'has been reached. Put s as an input variable if required.'])
end
end
if nargout<3 && ~exitflag
warning('MATLAB:smoothn:MaxIter',...
['Maximum number of iterations (' int2str(MaxIter) ') has ',...
'been exceeded. Increase MaxIter option or decrease TolZ value.'])
end
%% GCV score
%---
function GCVscore = gcv(p)
% Search the smoothing parameter s that minimizes the GCV score
%---
s = 10^p;
Gamma = 1./(1+s*Lambda.^2);
%--- RSS = Residual sum-of-squares
if aow>0.9 % aow = 1 means that all of the data are equally weighted
% very much faster: does not require any inverse DCT
RSS = norm(DCTy(:).*(Gamma(:)-1))^2;
else
% take account of the weights to calculate RSS:
yhat = idctn(Gamma.*DCTy);
RSS = norm(sqrt(Wtot(IsFinite)).*(y(IsFinite)-yhat(IsFinite)))^2;
end
%---
TrH = sum(Gamma(:));
GCVscore = RSS/nof/(1-TrH/noe)^2;
end
end
%% Robust weights
function W = RobustWeights(r,I,h,wstr)
% weights for robust smoothing.
MAD = median(abs(r(I)-median(r(I)))); % median absolute deviation
u = abs(r/(1.4826*MAD)/sqrt(1-h)); % studentized residuals
if strcmp(wstr,'cauchy')
c = 2.385; W = 1./(1+(u/c).^2); % Cauchy weights
elseif strcmp(wstr,'talworth')
c = 2.795; W = u<c; % Talworth weights
else
c = 4.685; W = (1-(u/c).^2).^2.*((u/c)<1); % bisquare weights
end
W(isnan(W)) = 0;
end
%% Test for DCTN and IDCTN
function test4DCTNandIDCTN
if ~exist('dctn','file')
error('MATLAB:smoothn:MissingFunction',...
['DCTN and IDCTN are required. Download DCTN <a href="matlab:web(''',...
'http://www.biomecardio.com/matlab/dctn.html'')">here</a>.'])
elseif ~exist('idctn','file')
error('MATLAB:smoothn:MissingFunction',...
['DCTN and IDCTN are required. Download IDCTN <a href="matlab:web(''',...
'http://www.biomecardio.com/matlab/idctn.html'')">here</a>.'])
end
end
%% Initial Guess with weighted/missing data
function z = InitialGuess(y,I)
%-- nearest neighbor interpolation (in case of missing values)
if any(~I(:))
if license('test','image_toolbox')
[z,L] = bwdist(I);
z = y;
z(~I) = y(L(~I));
else
% If BWDIST does not exist, NaN values are all replaced with the
% same scalar. The initial guess is not optimal and a warning
% message thus appears.
z = y;
z(~I) = mean(y(I));
warning('MATLAB:smoothn:InitialGuess',...
['BWDIST (Image Processing Toolbox) does not exist. ',...
'The initial guess may not be optimal; additional',...
' iterations can thus be required to ensure complete',...
' convergence. Increase ''MaxIter'' criterion if necessary.'])
end
else
z = y;
end
%-- coarse fast smoothing using one-tenth of the DCT coefficients
siz = size(z);
z = dctn(z);
for k = 1:ndims(z)
z(ceil(siz(k)/10)+1:end,:) = 0;
z = reshape(z,circshift(siz,[0 1-k]));
z = shiftdim(z,1);
end
z = idctn(z);
end
@@ -0,0 +1,43 @@
function ViewSeries(ACorr,EAlign,Scan,Data,nRows,nCols,colorScheme,minFrac,maxFrac)
% View series of downsampled images. The inputs are ACorr (2D or 3D array of [warping
% corrected] angles), EAlign (2D or 3D matrix of curvature corrected/aligned to EF energies),
% Scan (row), Data (3D data array Data), nRows and nCols as number of rows and columns
% of the frames in which the images are shown, and their colorScheme from the standard
% Matlab colormaps including 'jet', 'hot' and 'gray'. minFrac and maxFrac are contrast enhancement
% parameters used by SetContrast.m inside.
% downsampling parameters
[nR,nC,~]=size(EAlign); nR=nRows*floor(nR/nRows); nC=nCols*floor(nC/nCols);
% contrast parameters
if nargin<8; minFrac=1e-2; maxFrac=1-1e-4; end
% frame loop
for ipage=1:ceil(size(Data,3)/nRows/nCols)
figure; orient tall
for iframe=1:nRows*nCols
n=(ipage-1)*nRows*nCols+iframe; if n>size(Scan,2); break; end
% frames
if ndims(ACorr)<3; ACorrFrame=ACorr; else ACorrFrame=squeeze(ACorr(:,:,n)); end
if ndims(EAlign)<3; EAlignFrame=EAlign; else EAlignFrame=squeeze(EAlign(:,:,n)); end
DataFrame=squeeze(Data(:,:,n));
% downsampling
% - angles
ACorrFrame1=0; for iF=1:nCols; ACorrFrame1=ACorrFrame1+ACorrFrame(:,iF:nCols:nC)/nCols; end
ACorrFrame=0; for iF=1:nRows; ACorrFrame=ACorrFrame+ACorrFrame1(iF:nRows:nR,:)/nRows; end
% - energies
EAlignFrame1=0; for iF=1:nCols; EAlignFrame1=EAlignFrame1+EAlignFrame(:,iF:nCols:nC)/nCols; end
EAlignFrame=0; for iF=1:nRows; EAlignFrame=EAlignFrame+EAlignFrame1(iF:nRows:nR,:)/nRows; end
% - data
DataFrame1=0; for iF=2:nCols; DataFrame1=DataFrame1+DataFrame(:,iF:nCols:nC)/nCols; end
DataFrame=0; for iF=2:nRows; DataFrame=DataFrame+DataFrame1(iF:nRows:nR,:)/nRows; end
% contrast enhancement
DataFrame=SetContrast(DataFrame,minFrac,maxFrac);
% plot
subplot(nRows,nCols,iframe);
% h=pcolor(ACorrFrame,EAlignFrame,DataFrame); set(h,'EdgeColor','None','FaceColor','Interp');
ImData(ACorrFrame,EAlignFrame,DataFrame);
colormap('jet'); if nargin>6; eval(['colormap ''' colorScheme '''']); end
title(['Scan=' num2str(Scan(n))],'Interpreter','none','fontweight','normal');
end
end
@@ -0,0 +1,72 @@
function ACorr=WarpCorr(Angle,Energy,HV,ep,warpFitFile)
% ACorr=WarpCorr(Angle,Energy [,HV] [,ep] [,warpFitFile]) returns matrix ACorr of warping corrected angles
% for the vector of angles Angle, vector of (kinetic or binding) energies Energy and pass energy ep.
% If HV is omitted or empty, Energy is in kinetic energies; if a scalar or raw vector of photon energies,
% Energy is in binding energies. If ep is omitted or empty, it is set to the default value based on the
% input energy range. If the file of the warping fit coefficients warpFitFile is omitted or empty, it is
% set to the default file WarpFit.dat.
% Note1: WarpCorr assumes the raw size of the data array as returned by ReadARPES without trimming
% Note2: WarpCorr applies to the data acquired in the snapshot mode but not in the scanning mode.
% Note3: WarpCorr keeps between the calls the correction matrices if the Angle, Energy and ep
% inputs are the same
disp('- Warping correction')
persistent iniChk WarpFit A1 A2 A3 A4 A5 A6 A7 A8 A9
% parameters
ePhi=4.5;
if nargin<3; HV=[]; end
if nargin<4; ep=[]; end
if nargin<5; warpFitFile='WarpFit.dat'; end;
% mode WAM/MAM/LAD/MAD = 1/2/3/4
aRange=Angle(end)-Angle(1);
mode=4; if aRange>12; mode=3; end; if aRange>18; mode=2; end; if aRange>24; mode=1; end;
% transformation to kinetic energy scale
if isempty(HV)
% - check against binding energy input
if min(Energy)<4.5; disp('Warning: Binding energy scale requires photon energy input'); end
% - kinetic energy input
KEnergy=Energy;
else
if min(Energy)<4.5
% - binding energy input
KEnergy=repmat(HV,length(Energy),1)+repmat(Energy,1,length(HV))-ePhi;
else
% - kinetic energy input
KEnergy=Energy;
end
end
% default pass energy
eRange=Energy(end)-Energy(1);
if isempty(ep); ep=eRange/(2*0.066); end
% initialization if the first call or input energy or retarding ratio range changed
if isempty(iniChk)||norm(iniChk-[aRange eRange ep])>1e-3
% - load warping coefficients
WarpFit=load(warpFitFile);
ind=find(WarpFit(:,1)==mode);
if isempty(ind); disp('- Error: Angular mode not in WarpFit.dat'); ACorr=[]; return
else WarpFit=WarpFit(ind,2:end);
end
% - polynomial matrices
[AM,EScM]=meshgrid(Angle,(Energy-mean(Energy))/ep);
A1=AM; A2=AM.^2; A3=AM.^3; A4=AM.*EScM; A5=AM.^2.*EScM;
A6=AM.^3.*EScM; A7=AM.*EScM.^2; A8=AM.^2.*EScM.^2; A9=AM.^3.*EScM.^2;
% - initialization check
iniChk=[aRange eRange ep];
end
% array of corrected angles
ACorr=zeros(size(KEnergy,1),length(Angle),size(KEnergy,2));
% - cycle over hv frames
for iS=1:size(KEnergy,2)
% - rr
rr=mean(KEnergy(:,iS))/ep;
% - interpolating the coefficients
Fit=interp1(WarpFit(:,1),WarpFit(:,2:end),rr,'pchip','extrap');
% - correction
ACorr(:,:,iS)=Fit(1)*A1+Fit(2)*A2+Fit(3)*A3+Fit(4)*A4+Fit(5)*A5+...
Fit(6)*A6+Fit(7)*A7+Fit(8)*A8+Fit(9)*A9;
% - check corrected image
% ImData(ACorr,KEnergy,Data,'interp'); set(gca,'YDir','normal','TickDir','Out');
end
@@ -0,0 +1,47 @@
% Calibration data is taken with slit array, hv=1keV, Uconv=0.1*Ep.
% WAM (mode=1) and LAD (mode=3) data taken on 26.02.2013, Ek=350eV for WAM and 600eV for LAD;
% for WAM the Ep=40eV is missing; the WAM angular scale zero slightly drifted with Ep.
% MAM (mode=2)data taken on 30.01.2014, Ek=600eV.
1.0000000e+00 1.1666667e+01 7.8486451e-01 2.6252806e-03 3.5512691e-04 -7.4497438e-01 -2.4580483e-02 -3.7022362e-03 -1.3631077e-01 1.4317764e-01 6.5564314e-02
1.0000000e+00 1.0000000e+01 9.4499244e-01 1.7689033e-03 -3.8234004e-04 1.3925957e-02 -1.6661738e-02 8.9034796e-04 -1.6619161e+00 6.0289210e-02 3.5817790e-02
1.0000000e+00 7.0000000e+00 9.3235873e-01 1.8190070e-03 -2.7861773e-04 7.3757226e-02 -1.8692558e-02 6.4249864e-04 7.5243953e-02 4.9788753e-02 2.0103766e-02
1.0000000e+00 5.8333333e+00 9.3524064e-01 1.8917568e-03 -2.7576215e-04 6.5569738e-02 -2.2072579e-02 9.0871021e-04 -2.2796855e-01 5.3575007e-02 2.4874189e-02
1.0000000e+00 5.0000000e+00 9.3567974e-01 1.8840452e-03 -2.5814245e-04 9.9078822e-02 -2.1204896e-02 5.9724247e-04 3.6117336e-01 7.9235749e-02 2.1807709e-02
1.0000000e+00 4.3750000e+00 9.3423311e-01 1.7632761e-03 -1.9652570e-04 1.1406955e-01 -1.9603072e-02 2.6210206e-04 1.9102179e+00 1.1841798e-01 7.4437550e-03
1.0000000e+00 3.5000000e+00 9.2752366e-01 1.6677888e-03 -1.1378830e-04 9.8774920e-02 -1.9596768e-02 -2.6333242e-04 2.3756781e+00 1.1412266e-01 7.7495397e-03
1.0000000e+00 2.6923077e+00 9.2060166e-01 1.8213639e-03 -1.1955421e-04 1.3194298e-01 -2.2950809e-02 -1.3957909e-04 2.8245694e+00 1.4470518e-01 2.2700228e-03
1.0000000e+00 2.1875000e+00 9.2935241e-01 1.8769675e-03 -9.3625226e-05 1.3575745e-01 -2.5524283e-02 -6.0465036e-04 2.7982317e+00 1.5847581e-01 6.6328318e-03
1.0000000e+00 1.8421053e+00 9.3656931e-01 1.7687522e-03 -6.2474978e-05 1.5743513e-01 -2.8426630e-02 -1.3498163e-03 2.4628121e+00 1.7628626e-01 1.6234894e-02
1.0000000e+00 1.5909091e+00 9.2938240e-01 1.6957461e-03 -3.9240799e-05 1.2509238e-01 -2.8341617e-02 -9.8517958e-04 2.6782854e+00 1.6688236e-01 1.4041178e-02
2.0000000e+00 1.2000000e+01 7.6340370e-01 2.8311455e-03 8.7784755e-04 -1.0528934e+00 -1.9788828e-02 6.9303195e-03 -3.7868593e+00 7.6877506e-01 1.7424718e-01
2.0000000e+00 1.0000000e+01 8.2478673e-01 3.8048564e-03 5.5116463e-04 -6.0337470e-01 -5.3664259e-02 1.6127571e-03 4.8760283e-02 4.4770815e-01 8.5291411e-02
2.0000000e+00 8.5714286e+00 1.0132165e+00 4.8351660e-04 -9.6574036e-04 3.0291150e-01 -5.2268240e-02 -3.5668126e-04 2.3490278e+00 2.8591823e-01 2.0497625e-02
2.0000000e+00 7.5000000e+00 9.5708136e-01 1.5895249e-03 -5.3801601e-04 2.5578373e-01 -5.3235553e-02 -7.5476739e-05 2.4991774e+00 1.9286898e-01 1.4686713e-02
2.0000000e+00 6.6666667e+00 9.2782840e-01 1.2318005e-03 -3.8288588e-04 1.5718071e-01 -4.9498322e-02 8.7663337e-04 3.0540761e+00 1.4544714e-01 -2.9375903e-03
2.0000000e+00 6.0000000e+00 8.9758672e-01 1.1934265e-03 -2.2681473e-04 6.4393674e-02 -4.9833857e-02 2.1689127e-03 2.0134532e+00 1.3894570e-01 1.9039625e-02
2.0000000e+00 5.0000000e+00 9.6315181e-01 2.1745774e-03 -9.6708540e-04 6.1694709e-01 -3.5742960e-02 1.8491167e-03 4.3117049e+00 -5.2714209e-02 -2.9614572e-02
2.0000000e+00 4.2857143e+00 8.8061723e-01 1.1420589e-03 -2.4107998e-04 3.5522605e-02 -4.2134093e-02 1.2462684e-03 -2.3505993e-01 -2.9622535e-02 7.6506177e-02
2.0000000e+00 3.7500000e+00 8.3604179e-01 1.4563854e-03 3.4238938e-04 -2.2020728e-01 -4.7625697e-02 2.6158676e-03 1.2073054e+00 1.8789753e-01 3.9003591e-02
2.0000000e+00 3.3333333e+00 8.5472996e-01 2.2077427e-03 2.1913633e-04 -8.3935875e-02 -4.7708154e-02 1.3911611e-03 2.1482459e+00 1.8466381e-01 2.1355393e-02
2.0000000e+00 3.0000000e+00 8.8033923e-01 2.7350849e-03 5.2930675e-05 7.4992070e-02 -4.5016908e-02 8.6731942e-04 2.7334027e+00 1.6623259e-01 1.1169896e-02
2.0000000e+00 2.6086957e+00 8.6080389e-01 2.9582837e-03 2.6876811e-04 -4.8866475e-02 -4.4468867e-02 3.0794569e-04 2.4451004e+00 1.5987892e-01 2.1482036e-02
2.0000000e+00 2.3076923e+00 8.6939260e-01 3.0808461e-03 2.9024917e-04 -5.7687620e-02 -4.4296704e-02 -3.1359215e-04 1.2520497e+00 2.4316067e-01 5.3319916e-02
2.0000000e+00 2.0689655e+00 8.8114430e-01 3.1895318e-03 2.5917070e-04 -3.6177198e-02 -4.4957985e-02 -9.3637200e-04 8.9044034e-01 2.8432750e-01 6.5562841e-02
2.0000000e+00 1.8750000e+00 8.8190357e-01 3.3104458e-03 2.5970035e-04 -6.6930388e-02 -4.4925623e-02 -1.2009718e-03 6.4660172e-01 3.1089539e-01 7.3783136e-02
2.0000000e+00 1.7142857e+00 8.5755429e-01 3.2986432e-03 4.9007648e-04 -1.3617042e-01 -4.3987221e-02 -1.4989395e-03 5.2155899e-01 3.1316903e-01 7.7923608e-02
3.0000000e+00 3.0000000e+01 9.3131022e-01 8.2597450e-03 5.1081804e-04 -1.3402651e-01 -7.2246367e-02 -5.5988897e-03 1.5374868e+00 3.4599698e-01 4.9330743e-02
3.0000000e+00 2.4000000e+01 9.2467526e-01 6.3341991e-03 1.7753699e-04 -4.3261422e-01 -5.5131881e-02 -1.9958705e-03 2.8918526e+00 2.1531420e-01 1.6078639e-02
3.0000000e+00 2.0000000e+01 9.3393229e-01 3.3488154e-03 -1.1152565e-04 -5.5244530e-02 -3.8968289e-02 -9.5867096e-04 1.2268025e+00 8.4294093e-02 3.5574940e-02
3.0000000e+00 1.7142857e+01 9.5059772e-01 3.8272919e-03 -5.5642471e-04 2.8256611e-01 -3.3916381e-02 2.9679522e-04 1.5630599e+00 5.0493715e-02 9.0972340e-03
3.0000000e+00 1.5000000e+01 9.3402812e-01 4.3175605e-03 -1.0838535e-04 -6.6806770e-02 -4.4191578e-02 -1.1142718e-03 1.4536725e+00 9.4831758e-02 4.1854807e-02
3.0000000e+00 1.2000000e+01 9.3498016e-01 4.0473169e-03 -8.4715514e-05 -7.7367878e-02 -4.5312966e-02 -1.5645238e-03 1.9968548e+00 1.4511322e-01 4.1655025e-02
3.0000000e+00 1.0000000e+01 9.3092485e-01 3.1875552e-03 -6.5883380e-05 -2.5108918e-02 -3.4356190e-02 -7.5332491e-05 1.9673302e+00 8.5808907e-02 3.7330198e-02
3.0000000e+00 7.5000000e+00 9.2899302e-01 3.0826568e-03 -1.5707219e-05 -6.2741266e-03 -3.3001991e-02 1.7303876e-04 2.2077348e+00 6.5493832e-02 3.7567881e-02
3.0000000e+00 6.0000000e+00 9.2387684e-01 2.7580768e-03 8.5993606e-05 2.3771552e-03 -3.1345898e-02 4.5503776e-04 2.0704301e+00 3.7166065e-02 3.3210115e-02
3.0000000e+00 5.0000000e+00 9.2170936e-01 2.9736780e-03 8.2170413e-05 4.1645762e-03 -2.6929763e-02 1.3352710e-04 2.6869195e+00 5.1833013e-02 2.0828516e-02
3.0000000e+00 4.2857143e+00 9.2617785e-01 2.8454061e-03 7.3152173e-05 1.0271635e-01 -2.7756657e-02 1.6176086e-04 2.7132439e+00 1.7374439e-02 1.3080123e-02
3.0000000e+00 3.5294118e+00 9.2064153e-01 2.9982272e-03 7.8310905e-05 2.1679619e-03 -2.4080499e-02 4.9988504e-04 2.7449118e+00 4.2088094e-02 1.6814754e-02
3.0000000e+00 3.0000000e+00 9.2029058e-01 2.8926509e-03 7.4431320e-05 1.1011673e-02 -2.2522534e-02 5.4270980e-04 2.8238914e+00 6.2191053e-02 2.1547114e-02
3.0000000e+00 2.4000000e+00 9.2055433e-01 3.0481727e-03 1.0739890e-04 4.7432488e-02 -2.2275385e-02 5.4720232e-04 2.8764483e+00 4.2127172e-02 1.7435568e-02
3.0000000e+00 2.0000000e+00 9.2212435e-01 3.0485849e-03 5.0553969e-05 3.0420616e-02 -2.1232073e-02 5.7598728e-04 2.6726310e+00 5.5332318e-02 2.2860502e-02
3.0000000e+00 1.7142857e+00 9.2326920e-01 3.0488348e-03 4.5036335e-05 3.4798953e-02 -1.9970755e-02 3.2405038e-04 2.7769612e+00 6.0283280e-02 2.0726711e-02
Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

@@ -0,0 +1,86 @@
function imfp = IMFP_CALC(formalism, ke_dat, args)
% imfp = IMFP_CALC(formalism, ke_dat, args)
% Function that calculates the electron inelastic mean free path (IMFP).
% The TPP2M, S1, S2 and Universal formalisms are available. The user can
% define a scalar or vector of kinetic energies for the input.
% If the args is a string of an element / material, it will look it up
% the relevant materials parameters in the Material Properties Database
% (MPD) ('MPD_PCC.mat'). Otherwise, the args can be manually inserted as
% defined below.
%
% IN:
% - formalism: string for imfp calculator formalism. Default:"TPP2M" ["TPP2M","S1","S2","Universal"]
% - ke_dat: N×1 column vector of the input electron kinetic energy (for PES; KE = BE - PHI) [eV]
% - args: string or vector of scalars defining the arguments of the chosen formalism;
% (1) string of element / material whose parameters are found in materials database; e.g. "Si", "SiO2", "Al2O3"...
% (2) vector with manual entry of material parameters:
% -> TPP2M: 4x1 [density(g/cc),atomicweight(amu),egap(eV),valency(valence electrons per atom)]
% -> S1: 4x1 [density(g/cc),atomicweight(amu),egap(eV),Z(atomic mass number or average for compounds)]
% -> S2: 1x1 [Z(atomic mass number or average for compounds)]
% -> Universal: no args, material independent.
%
% OUT:
% - imfp: N×1 column vector of the electron IMFP values [Angstroms]
%
% SEE REFERENCES:
% [1] Tanuma, S., Powell, C. J., & Penn, D. R. (1987).
% Proposed formula for electron inelastic mean free paths based on
% calculations for 31 materials. Surface Science Letters, 192(1),
% L849–L857. https://doi.org/10.1016/0167-2584(87)90829-2
% [2] Shinotsuka H, Tanuma S, Powell CJ, Penn DR. Calculations of
% electron inelastic mean free paths. XII. Data for 42 inorganic
% compounds over the 50 eV to 200 keV range with the full Penn
% algorithm. Surf Interface Anal. 2018;51(4):427-457.
% doi:10.1002/sia.6598
% [3] M. P. Seah, "An accurate and simple universal curve for the
% energy-dependent electron inelastic mean free path,”
% Surf. Interface Anal., vol. 44, no. 4, pp. 497–503, 2012,
% doi: 10.1002/sia.4816.
%% Default parameters
% - Default formalism
if nargin < 3; args = []; end
if nargin < 1; formalism = "TPP2M"; end
if isempty(formalism); formalism = "TPP2M"; end
if isempty(args); args = []; end
% - Validity check on the inputs
if ischar(formalism); formalism = string(formalism); end
if ischar(args); args = string(args); end
%% - 1 - Determination of the IMFP
% If the kinetic energy is negative, assume it is zero
ke_dat(ke_dat<0) = 0;
% -- TPP2M formalism
if strcmpi(formalism, "TPP2M") || strcmpi(formalism, "TPP-2M")
if isstring(args)
material = args;
imfp = eimfp_tpp2m_mpd(ke_dat, material);
else
rho = args(1); Nv=args(4); M = args(2); Egap = args(3);
imfp = eimfp_tpp2m(ke_dat, rho, Nv, M, Egap);
end
% -- S1 formalism
elseif strcmpi(formalism, "S1")
if isstring(args)
material = args;
imfp = eimfp_S1_mpd(ke_dat, material);
else
rho = args(1); Z=args(4); M = args(2); Egap = args(3);
imfp = eimfp_S1(ke_dat, rho, M, Egap, Z);
end
% -- S2 formalism
elseif strcmpi(formalism, "S2")
if isstring(args)
material = args;
imfp = eimfp_S2_avg_mpd(ke_dat, material);
else
Z=args(1);
imfp = eimfp_S2_avg(ke_dat, Z);
end
% -- Universal formalism
elseif strcmpi(formalism, "Universal")
imfp = eimfp_universal(ke_dat);
end
%% Ensuring the imfp is a column vector
if size(imfp, 2) >1; imfp = imfp'; end
end
@@ -0,0 +1,422 @@
ELEMENT:
Li
SOURCE:
Tanuma, Powell and Penn
Unpublished data
IMFP values determined from optical data and a theoretical model
ATOMIC WEIGHT: 6.94100
DENSITY: 0.5340 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
50.0 4.59
54.9 4.85
59.8 5.10
64.6 5.35
69.5 5.59
74.4 5.82
79.3 6.05
84.1 6.28
89.0 6.50
93.9 6.73
98.8 6.95
103.6 7.17
108.5 7.39
113.4 7.60
118.3 7.82
123.1 8.03
128.0 8.24
132.9 8.46
137.8 8.67
142.6 8.88
147.5 9.09
152.4 9.29
157.3 9.50
162.1 9.71
167.0 9.91
171.9 10.12
176.8 10.32
181.6 10.52
186.5 10.72
191.4 10.92
196.3 11.12
201.1 11.32
206.0 11.52
210.9 11.72
215.8 11.92
220.6 12.12
225.5 12.31
230.4 12.51
235.3 12.70
240.1 12.90
245.0 13.09
249.9 13.29
254.8 13.48
259.6 13.67
264.5 13.86
269.4 14.06
274.3 14.25
279.1 14.44
284.0 14.63
288.9 14.82
293.8 15.01
298.6 15.20
303.5 15.38
308.4 15.57
313.3 15.76
318.1 15.95
323.0 16.13
327.9 16.32
332.8 16.51
337.6 16.69
342.5 16.88
347.4 17.06
352.3 17.25
357.1 17.43
362.0 17.61
366.9 17.80
371.8 17.98
376.6 18.16
381.5 18.35
386.4 18.53
391.3 18.71
396.1 18.89
401.0 19.07
405.9 19.25
410.8 19.43
415.6 19.61
420.5 19.79
425.4 19.97
430.3 20.15
435.1 20.33
440.0 20.51
444.9 20.69
449.8 20.87
454.6 21.04
459.5 21.22
464.4 21.40
469.3 21.58
474.1 21.75
479.0 21.93
483.9 22.11
488.8 22.28
493.6 22.46
498.5 22.63
503.4 22.81
508.3 22.98
513.1 23.16
518.0 23.33
522.9 23.51
527.8 23.68
532.6 23.86
537.5 24.03
542.4 24.20
547.3 24.38
552.1 24.55
557.0 24.72
561.9 24.90
566.8 25.07
571.6 25.24
576.5 25.41
581.4 25.59
586.3 25.76
591.1 25.93
596.0 26.10
600.9 26.27
605.8 26.44
610.6 26.61
615.5 26.78
620.4 26.95
625.3 27.13
630.1 27.30
635.0 27.47
639.9 27.63
644.8 27.80
649.6 27.97
654.5 28.14
659.4 28.31
664.3 28.48
669.1 28.65
674.0 28.82
678.9 28.99
683.8 29.15
688.6 29.32
693.5 29.49
698.4 29.66
703.3 29.83
708.1 29.99
713.0 30.16
717.9 30.33
722.8 30.49
727.6 30.66
732.5 30.83
737.4 30.99
742.3 31.16
747.1 31.33
752.0 31.49
756.9 31.66
761.8 31.82
766.6 31.99
771.5 32.15
776.4 32.32
781.3 32.49
786.1 32.65
791.0 32.82
795.9 32.98
800.8 33.14
805.6 33.31
810.5 33.47
815.4 33.64
820.3 33.80
825.1 33.97
830.0 34.13
834.9 34.29
839.8 34.46
844.6 34.62
849.5 34.78
854.4 34.95
859.3 35.11
864.1 35.27
869.0 35.44
873.9 35.60
878.8 35.76
883.6 35.92
888.5 36.09
893.4 36.25
898.3 36.41
903.1 36.57
908.0 36.73
912.9 36.90
917.8 37.06
922.6 37.22
927.5 37.38
932.4 37.54
937.3 37.70
942.1 37.86
947.0 38.02
951.9 38.19
956.8 38.35
961.6 38.51
966.5 38.67
971.4 38.83
976.3 38.99
981.1 39.15
986.0 39.31
990.9 39.47
995.8 39.63
1000.6 39.79
1005.5 39.95
1010.4 40.11
1015.3 40.27
1020.1 40.43
1025.0 40.59
1029.9 40.74
1034.8 40.90
1039.6 41.06
1044.5 41.22
1049.4 41.38
1054.3 41.54
1059.1 41.70
1064.0 41.86
1068.9 42.01
1073.8 42.17
1078.6 42.33
1083.5 42.49
1088.4 42.65
1093.3 42.81
1098.1 42.96
1103.0 43.12
1107.9 43.28
1112.8 43.44
1117.6 43.59
1122.5 43.75
1127.4 43.91
1132.3 44.07
1137.1 44.22
1142.0 44.38
1146.9 44.54
1151.8 44.69
1156.6 44.85
1161.5 45.01
1166.4 45.16
1171.3 45.32
1176.1 45.48
1181.0 45.63
1185.9 45.79
1190.8 45.95
1195.6 46.10
1200.5 46.26
1205.4 46.41
1210.3 46.57
1215.1 46.73
1220.0 46.88
1224.9 47.04
1229.8 47.19
1234.6 47.35
1239.5 47.50
1244.4 47.66
1249.3 47.81
1254.1 47.97
1259.0 48.12
1263.9 48.28
1268.8 48.43
1273.6 48.59
1278.5 48.74
1283.4 48.90
1288.3 49.05
1293.1 49.21
1298.0 49.36
1302.9 49.52
1307.8 49.67
1312.6 49.82
1317.5 49.98
1322.4 50.13
1327.3 50.29
1332.1 50.44
1337.0 50.59
1341.9 50.75
1346.8 50.90
1351.6 51.06
1356.5 51.21
1361.4 51.36
1366.3 51.52
1371.1 51.67
1376.0 51.82
1380.9 51.98
1385.8 52.13
1390.6 52.28
1395.5 52.44
1400.4 52.59
1405.3 52.74
1410.1 52.89
1415.0 53.05
1419.9 53.20
1424.8 53.35
1429.6 53.51
1434.5 53.66
1439.4 53.81
1444.3 53.96
1449.1 54.11
1454.0 54.27
1458.9 54.42
1463.8 54.57
1468.6 54.72
1473.5 54.88
1478.4 55.03
1483.3 55.18
1488.1 55.33
1493.0 55.48
1497.9 55.63
1502.8 55.79
1507.6 55.94
1512.5 56.09
1517.4 56.24
1522.3 56.39
1527.1 56.54
1532.0 56.69
1536.9 56.85
1541.8 57.00
1546.6 57.15
1551.5 57.30
1556.4 57.45
1561.3 57.60
1566.1 57.75
1571.0 57.90
1575.9 58.05
1580.8 58.20
1585.6 58.35
1590.5 58.50
1595.4 58.65
1600.3 58.81
1605.1 58.96
1610.0 59.11
1614.9 59.26
1619.8 59.41
1624.6 59.56
1629.5 59.71
1634.4 59.86
1639.3 60.01
1644.1 60.16
1649.0 60.31
1653.9 60.46
1658.8 60.61
1663.6 60.76
1668.5 60.90
1673.4 61.05
1678.3 61.20
1683.1 61.35
1688.0 61.50
1692.9 61.65
1697.8 61.80
1702.6 61.95
1707.5 62.10
1712.4 62.25
1717.3 62.40
1722.1 62.55
1727.0 62.70
1731.9 62.84
1736.8 62.99
1741.6 63.14
1746.5 63.29
1751.4 63.44
1756.3 63.59
1761.1 63.74
1766.0 63.89
1770.9 64.03
1775.8 64.18
1780.6 64.33
1785.5 64.48
1790.4 64.63
1795.3 64.78
1800.1 64.92
1805.0 65.07
1809.9 65.22
1814.8 65.37
1819.6 65.52
1824.5 65.66
1829.4 65.81
1834.3 65.96
1839.1 66.11
1844.0 66.26
1848.9 66.40
1853.8 66.55
1858.6 66.70
1863.5 66.85
1868.4 66.99
1873.3 67.14
1878.1 67.29
1883.0 67.44
1887.9 67.58
1892.8 67.73
1897.6 67.88
1902.5 68.03
1907.4 68.17
1912.3 68.32
1917.1 68.47
1922.0 68.61
1926.9 68.76
1931.8 68.91
1936.6 69.05
1941.5 69.20
1946.4 69.35
1951.3 69.49
1956.1 69.64
1961.0 69.79
1965.9 69.93
1970.8 70.08
1975.6 70.23
1980.5 70.37
1985.4 70.52
1990.3 70.67
1995.1 70.81
2000.0 70.96
@@ -0,0 +1,422 @@
ELEMENT:
Be
SOURCE:
Tanuma, Powell and Penn
Unpublished data
IMFP values determined from optical data and a theoretical model
ATOMIC WEIGHT: 9.01218
DENSITY: 1.8500 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
50.0 3.53
54.9 3.56
59.8 3.60
64.6 3.66
69.5 3.73
74.4 3.81
79.3 3.89
84.1 3.97
89.0 4.06
93.9 4.15
98.8 4.24
103.6 4.33
108.5 4.43
113.4 4.52
118.3 4.62
123.1 4.71
128.0 4.81
132.9 4.91
137.8 5.00
142.6 5.10
147.5 5.20
152.4 5.29
157.3 5.39
162.1 5.49
167.0 5.58
171.9 5.68
176.8 5.78
181.6 5.87
186.5 5.97
191.4 6.07
196.3 6.16
201.1 6.26
206.0 6.35
210.9 6.45
215.8 6.54
220.6 6.64
225.5 6.73
230.4 6.83
235.3 6.92
240.1 7.01
245.0 7.11
249.9 7.20
254.8 7.29
259.6 7.39
264.5 7.48
269.4 7.57
274.3 7.66
279.1 7.76
284.0 7.85
288.9 7.94
293.8 8.03
298.6 8.12
303.5 8.21
308.4 8.31
313.3 8.40
318.1 8.49
323.0 8.58
327.9 8.67
332.8 8.76
337.6 8.85
342.5 8.94
347.4 9.03
352.3 9.12
357.1 9.20
362.0 9.29
366.9 9.38
371.8 9.47
376.6 9.56
381.5 9.65
386.4 9.74
391.3 9.82
396.1 9.91
401.0 10.00
405.9 10.09
410.8 10.17
415.6 10.26
420.5 10.35
425.4 10.44
430.3 10.52
435.1 10.61
440.0 10.70
444.9 10.78
449.8 10.87
454.6 10.95
459.5 11.04
464.4 11.13
469.3 11.21
474.1 11.30
479.0 11.38
483.9 11.47
488.8 11.55
493.6 11.64
498.5 11.72
503.4 11.81
508.3 11.89
513.1 11.98
518.0 12.06
522.9 12.15
527.8 12.23
532.6 12.31
537.5 12.40
542.4 12.48
547.3 12.57
552.1 12.65
557.0 12.73
561.9 12.82
566.8 12.90
571.6 12.98
576.5 13.07
581.4 13.15
586.3 13.23
591.1 13.31
596.0 13.40
600.9 13.48
605.8 13.56
610.6 13.64
615.5 13.73
620.4 13.81
625.3 13.89
630.1 13.97
635.0 14.06
639.9 14.14
644.8 14.22
649.6 14.30
654.5 14.38
659.4 14.46
664.3 14.54
669.1 14.63
674.0 14.71
678.9 14.79
683.8 14.87
688.6 14.95
693.5 15.03
698.4 15.11
703.3 15.19
708.1 15.27
713.0 15.35
717.9 15.43
722.8 15.51
727.6 15.59
732.5 15.67
737.4 15.75
742.3 15.83
747.1 15.91
752.0 15.99
756.9 16.07
761.8 16.15
766.6 16.23
771.5 16.31
776.4 16.39
781.3 16.47
786.1 16.55
791.0 16.63
795.9 16.71
800.8 16.79
805.6 16.87
810.5 16.95
815.4 17.03
820.3 17.10
825.1 17.18
830.0 17.26
834.9 17.34
839.8 17.42
844.6 17.50
849.5 17.58
854.4 17.65
859.3 17.73
864.1 17.81
869.0 17.89
873.9 17.97
878.8 18.05
883.6 18.12
888.5 18.20
893.4 18.28
898.3 18.36
903.1 18.43
908.0 18.51
912.9 18.59
917.8 18.67
922.6 18.74
927.5 18.82
932.4 18.90
937.3 18.98
942.1 19.05
947.0 19.13
951.9 19.21
956.8 19.28
961.6 19.36
966.5 19.44
971.4 19.52
976.3 19.59
981.1 19.67
986.0 19.75
990.9 19.82
995.8 19.90
1000.6 19.98
1005.5 20.05
1010.4 20.13
1015.3 20.21
1020.1 20.28
1025.0 20.36
1029.9 20.43
1034.8 20.51
1039.6 20.59
1044.5 20.66
1049.4 20.74
1054.3 20.81
1059.1 20.89
1064.0 20.97
1068.9 21.04
1073.8 21.12
1078.6 21.19
1083.5 21.27
1088.4 21.34
1093.3 21.42
1098.1 21.50
1103.0 21.57
1107.9 21.65
1112.8 21.72
1117.6 21.80
1122.5 21.87
1127.4 21.95
1132.3 22.02
1137.1 22.10
1142.0 22.17
1146.9 22.25
1151.8 22.32
1156.6 22.40
1161.5 22.47
1166.4 22.55
1171.3 22.62
1176.1 22.70
1181.0 22.77
1185.9 22.85
1190.8 22.92
1195.6 23.00
1200.5 23.07
1205.4 23.14
1210.3 23.22
1215.1 23.29
1220.0 23.37
1224.9 23.44
1229.8 23.52
1234.6 23.59
1239.5 23.66
1244.4 23.74
1249.3 23.81
1254.1 23.89
1259.0 23.96
1263.9 24.03
1268.8 24.11
1273.6 24.18
1278.5 24.26
1283.4 24.33
1288.3 24.40
1293.1 24.48
1298.0 24.55
1302.9 24.63
1307.8 24.70
1312.6 24.77
1317.5 24.85
1322.4 24.92
1327.3 24.99
1332.1 25.07
1337.0 25.14
1341.9 25.21
1346.8 25.29
1351.6 25.36
1356.5 25.43
1361.4 25.51
1366.3 25.58
1371.1 25.65
1376.0 25.73
1380.9 25.80
1385.8 25.87
1390.6 25.94
1395.5 26.02
1400.4 26.09
1405.3 26.16
1410.1 26.24
1415.0 26.31
1419.9 26.38
1424.8 26.45
1429.6 26.53
1434.5 26.60
1439.4 26.67
1444.3 26.74
1449.1 26.82
1454.0 26.89
1458.9 26.96
1463.8 27.03
1468.6 27.11
1473.5 27.18
1478.4 27.25
1483.3 27.32
1488.1 27.40
1493.0 27.47
1497.9 27.54
1502.8 27.61
1507.6 27.68
1512.5 27.76
1517.4 27.83
1522.3 27.90
1527.1 27.97
1532.0 28.04
1536.9 28.12
1541.8 28.19
1546.6 28.26
1551.5 28.33
1556.4 28.40
1561.3 28.48
1566.1 28.55
1571.0 28.62
1575.9 28.69
1580.8 28.76
1585.6 28.83
1590.5 28.91
1595.4 28.98
1600.3 29.05
1605.1 29.12
1610.0 29.19
1614.9 29.26
1619.8 29.33
1624.6 29.41
1629.5 29.48
1634.4 29.55
1639.3 29.62
1644.1 29.69
1649.0 29.76
1653.9 29.83
1658.8 29.90
1663.6 29.98
1668.5 30.05
1673.4 30.12
1678.3 30.19
1683.1 30.26
1688.0 30.33
1692.9 30.40
1697.8 30.47
1702.6 30.54
1707.5 30.61
1712.4 30.69
1717.3 30.76
1722.1 30.83
1727.0 30.90
1731.9 30.97
1736.8 31.04
1741.6 31.11
1746.5 31.18
1751.4 31.25
1756.3 31.32
1761.1 31.39
1766.0 31.46
1770.9 31.53
1775.8 31.60
1780.6 31.67
1785.5 31.74
1790.4 31.81
1795.3 31.88
1800.1 31.96
1805.0 32.03
1809.9 32.10
1814.8 32.17
1819.6 32.24
1824.5 32.31
1829.4 32.38
1834.3 32.45
1839.1 32.52
1844.0 32.59
1848.9 32.66
1853.8 32.73
1858.6 32.80
1863.5 32.87
1868.4 32.94
1873.3 33.01
1878.1 33.08
1883.0 33.15
1887.9 33.22
1892.8 33.29
1897.6 33.36
1902.5 33.43
1907.4 33.50
1912.3 33.57
1917.1 33.64
1922.0 33.71
1926.9 33.77
1931.8 33.84
1936.6 33.91
1941.5 33.98
1946.4 34.05
1951.3 34.12
1956.1 34.19
1961.0 34.26
1965.9 34.33
1970.8 34.40
1975.6 34.47
1980.5 34.54
1985.4 34.61
1990.3 34.68
1995.1 34.75
2000.0 34.82
@@ -0,0 +1,422 @@
ELEMENT:
B
SOURCE:
Tanuma, Powell and Penn
Surface Interface Anal. 21 (1994) 165.
IMFP values determined from TPP-2M equation
ATOMIC WEIGHT: 10.81100
DENSITY: 2.3400 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
50.0 5.36
54.9 5.50
59.8 5.59
64.6 5.66
69.5 5.72
74.4 5.78
79.3 5.84
84.1 5.91
89.0 5.99
93.9 6.07
98.8 6.15
103.6 6.23
108.5 6.32
113.4 6.41
118.3 6.51
123.1 6.60
128.0 6.70
132.9 6.80
137.8 6.90
142.6 7.00
147.5 7.11
152.4 7.21
157.3 7.32
162.1 7.42
167.0 7.53
171.9 7.64
176.8 7.74
181.6 7.85
186.5 7.96
191.4 8.07
196.3 8.18
201.1 8.28
206.0 8.39
210.9 8.50
215.8 8.61
220.6 8.72
225.5 8.83
230.4 8.94
235.3 9.05
240.1 9.16
245.0 9.26
249.9 9.37
254.8 9.48
259.6 9.59
264.5 9.70
269.4 9.81
274.3 9.92
279.1 10.03
284.0 10.13
288.9 10.24
293.8 10.35
298.6 10.46
303.5 10.57
308.4 10.67
313.3 10.78
318.1 10.89
323.0 11.00
327.9 11.10
332.8 11.21
337.6 11.32
342.5 11.42
347.4 11.53
352.3 11.64
357.1 11.74
362.0 11.85
366.9 11.95
371.8 12.06
376.6 12.17
381.5 12.27
386.4 12.38
391.3 12.48
396.1 12.59
401.0 12.69
405.9 12.80
410.8 12.90
415.6 13.01
420.5 13.11
425.4 13.22
430.3 13.32
435.1 13.42
440.0 13.53
444.9 13.63
449.8 13.74
454.6 13.84
459.5 13.94
464.4 14.05
469.3 14.15
474.1 14.25
479.0 14.36
483.9 14.46
488.8 14.56
493.6 14.66
498.5 14.77
503.4 14.87
508.3 14.97
513.1 15.07
518.0 15.17
522.9 15.28
527.8 15.38
532.6 15.48
537.5 15.58
542.4 15.68
547.3 15.78
552.1 15.88
557.0 15.99
561.9 16.09
566.8 16.19
571.6 16.29
576.5 16.39
581.4 16.49
586.3 16.59
591.1 16.69
596.0 16.79
600.9 16.89
605.8 16.99
610.6 17.09
615.5 17.19
620.4 17.29
625.3 17.39
630.1 17.49
635.0 17.59
639.9 17.69
644.8 17.78
649.6 17.88
654.5 17.98
659.4 18.08
664.3 18.18
669.1 18.28
674.0 18.38
678.9 18.48
683.8 18.57
688.6 18.67
693.5 18.77
698.4 18.87
703.3 18.97
708.1 19.06
713.0 19.16
717.9 19.26
722.8 19.36
727.6 19.45
732.5 19.55
737.4 19.65
742.3 19.75
747.1 19.84
752.0 19.94
756.9 20.04
761.8 20.13
766.6 20.23
771.5 20.33
776.4 20.42
781.3 20.52
786.1 20.62
791.0 20.71
795.9 20.81
800.8 20.91
805.6 21.00
810.5 21.10
815.4 21.19
820.3 21.29
825.1 21.38
830.0 21.48
834.9 21.58
839.8 21.67
844.6 21.77
849.5 21.86
854.4 21.96
859.3 22.05
864.1 22.15
869.0 22.24
873.9 22.34
878.8 22.43
883.6 22.53
888.5 22.62
893.4 22.72
898.3 22.81
903.1 22.91
908.0 23.00
912.9 23.10
917.8 23.19
922.6 23.28
927.5 23.38
932.4 23.47
937.3 23.57
942.1 23.66
947.0 23.75
951.9 23.85
956.8 23.94
961.6 24.04
966.5 24.13
971.4 24.22
976.3 24.32
981.1 24.41
986.0 24.50
990.9 24.60
995.8 24.69
1000.6 24.78
1005.5 24.88
1010.4 24.97
1015.3 25.06
1020.1 25.16
1025.0 25.25
1029.9 25.34
1034.8 25.43
1039.6 25.53
1044.5 25.62
1049.4 25.71
1054.3 25.81
1059.1 25.90
1064.0 25.99
1068.9 26.08
1073.8 26.18
1078.6 26.27
1083.5 26.36
1088.4 26.45
1093.3 26.54
1098.1 26.64
1103.0 26.73
1107.9 26.82
1112.8 26.91
1117.6 27.00
1122.5 27.09
1127.4 27.19
1132.3 27.28
1137.1 27.37
1142.0 27.46
1146.9 27.55
1151.8 27.64
1156.6 27.74
1161.5 27.83
1166.4 27.92
1171.3 28.01
1176.1 28.10
1181.0 28.19
1185.9 28.28
1190.8 28.37
1195.6 28.46
1200.5 28.56
1205.4 28.65
1210.3 28.74
1215.1 28.83
1220.0 28.92
1224.9 29.01
1229.8 29.10
1234.6 29.19
1239.5 29.28
1244.4 29.37
1249.3 29.46
1254.1 29.55
1259.0 29.64
1263.9 29.73
1268.8 29.82
1273.6 29.91
1278.5 30.00
1283.4 30.09
1288.3 30.18
1293.1 30.27
1298.0 30.36
1302.9 30.45
1307.8 30.54
1312.6 30.63
1317.5 30.72
1322.4 30.81
1327.3 30.90
1332.1 30.99
1337.0 31.08
1341.9 31.17
1346.8 31.26
1351.6 31.35
1356.5 31.44
1361.4 31.53
1366.3 31.62
1371.1 31.71
1376.0 31.79
1380.9 31.88
1385.8 31.97
1390.6 32.06
1395.5 32.15
1400.4 32.24
1405.3 32.33
1410.1 32.42
1415.0 32.51
1419.9 32.60
1424.8 32.68
1429.6 32.77
1434.5 32.86
1439.4 32.95
1444.3 33.04
1449.1 33.13
1454.0 33.22
1458.9 33.30
1463.8 33.39
1468.6 33.48
1473.5 33.57
1478.4 33.66
1483.3 33.75
1488.1 33.83
1493.0 33.92
1497.9 34.01
1502.8 34.10
1507.6 34.19
1512.5 34.27
1517.4 34.36
1522.3 34.45
1527.1 34.54
1532.0 34.63
1536.9 34.71
1541.8 34.80
1546.6 34.89
1551.5 34.98
1556.4 35.06
1561.3 35.15
1566.1 35.24
1571.0 35.33
1575.9 35.41
1580.8 35.50
1585.6 35.59
1590.5 35.68
1595.4 35.76
1600.3 35.85
1605.1 35.94
1610.0 36.03
1614.9 36.11
1619.8 36.20
1624.6 36.29
1629.5 36.37
1634.4 36.46
1639.3 36.55
1644.1 36.64
1649.0 36.72
1653.9 36.81
1658.8 36.90
1663.6 36.98
1668.5 37.07
1673.4 37.16
1678.3 37.24
1683.1 37.33
1688.0 37.42
1692.9 37.50
1697.8 37.59
1702.6 37.68
1707.5 37.76
1712.4 37.85
1717.3 37.94
1722.1 38.02
1727.0 38.11
1731.9 38.20
1736.8 38.28
1741.6 38.37
1746.5 38.45
1751.4 38.54
1756.3 38.63
1761.1 38.71
1766.0 38.80
1770.9 38.89
1775.8 38.97
1780.6 39.06
1785.5 39.14
1790.4 39.23
1795.3 39.32
1800.1 39.40
1805.0 39.49
1809.9 39.57
1814.8 39.66
1819.6 39.74
1824.5 39.83
1829.4 39.92
1834.3 40.00
1839.1 40.09
1844.0 40.17
1848.9 40.26
1853.8 40.34
1858.6 40.43
1863.5 40.52
1868.4 40.60
1873.3 40.69
1878.1 40.77
1883.0 40.86
1887.9 40.94
1892.8 41.03
1897.6 41.11
1902.5 41.20
1907.4 41.28
1912.3 41.37
1917.1 41.45
1922.0 41.54
1926.9 41.62
1931.8 41.71
1936.6 41.79
1941.5 41.88
1946.4 41.96
1951.3 42.05
1956.1 42.13
1961.0 42.22
1965.9 42.30
1970.8 42.39
1975.6 42.47
1980.5 42.56
1985.4 42.64
1990.3 42.73
1995.1 42.81
2000.0 42.90
@@ -0,0 +1,422 @@
ELEMENT:
C
SOURCE:
Tanuma, Powell and Penn
Surface Interface Anal. 17 (1991) 911.
IMFP values determined from optical data and a theoretical model
ATOMIC WEIGHT: 12.01070
DENSITY: 1.8000 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
50.0 5.80
54.9 5.75
59.8 5.74
64.6 5.76
69.5 5.80
74.4 5.85
79.3 5.92
84.1 6.00
89.0 6.09
93.9 6.18
98.8 6.28
103.6 6.38
108.5 6.49
113.4 6.60
118.3 6.71
123.1 6.82
128.0 6.94
132.9 7.06
137.8 7.18
142.6 7.30
147.5 7.42
152.4 7.54
157.3 7.66
162.1 7.78
167.0 7.90
171.9 8.02
176.8 8.15
181.6 8.27
186.5 8.39
191.4 8.51
196.3 8.64
201.1 8.76
206.0 8.88
210.9 9.00
215.8 9.13
220.6 9.25
225.5 9.37
230.4 9.49
235.3 9.62
240.1 9.74
245.0 9.86
249.9 9.98
254.8 10.10
259.6 10.22
264.5 10.35
269.4 10.47
274.3 10.59
279.1 10.71
284.0 10.83
288.9 10.95
293.8 11.07
298.6 11.19
303.5 11.31
308.4 11.43
313.3 11.55
318.1 11.66
323.0 11.78
327.9 11.90
332.8 12.02
337.6 12.14
342.5 12.26
347.4 12.37
352.3 12.49
357.1 12.61
362.0 12.73
366.9 12.84
371.8 12.96
376.6 13.08
381.5 13.19
386.4 13.31
391.3 13.42
396.1 13.54
401.0 13.66
405.9 13.77
410.8 13.89
415.6 14.00
420.5 14.12
425.4 14.23
430.3 14.35
435.1 14.46
440.0 14.58
444.9 14.69
449.8 14.80
454.6 14.92
459.5 15.03
464.4 15.14
469.3 15.26
474.1 15.37
479.0 15.48
483.9 15.60
488.8 15.71
493.6 15.82
498.5 15.93
503.4 16.05
508.3 16.16
513.1 16.27
518.0 16.38
522.9 16.49
527.8 16.61
532.6 16.72
537.5 16.83
542.4 16.94
547.3 17.05
552.1 17.16
557.0 17.27
561.9 17.38
566.8 17.49
571.6 17.60
576.5 17.71
581.4 17.82
586.3 17.93
591.1 18.04
596.0 18.15
600.9 18.26
605.8 18.37
610.6 18.48
615.5 18.59
620.4 18.70
625.3 18.81
630.1 18.92
635.0 19.02
639.9 19.13
644.8 19.24
649.6 19.35
654.5 19.46
659.4 19.57
664.3 19.67
669.1 19.78
674.0 19.89
678.9 20.00
683.8 20.10
688.6 20.21
693.5 20.32
698.4 20.43
703.3 20.53
708.1 20.64
713.0 20.75
717.9 20.85
722.8 20.96
727.6 21.07
732.5 21.17
737.4 21.28
742.3 21.39
747.1 21.49
752.0 21.60
756.9 21.70
761.8 21.81
766.6 21.92
771.5 22.02
776.4 22.13
781.3 22.23
786.1 22.34
791.0 22.44
795.9 22.55
800.8 22.65
805.6 22.76
810.5 22.86
815.4 22.97
820.3 23.07
825.1 23.18
830.0 23.28
834.9 23.39
839.8 23.49
844.6 23.59
849.5 23.70
854.4 23.80
859.3 23.91
864.1 24.01
869.0 24.11
873.9 24.22
878.8 24.32
883.6 24.42
888.5 24.53
893.4 24.63
898.3 24.73
903.1 24.84
908.0 24.94
912.9 25.04
917.8 25.15
922.6 25.25
927.5 25.35
932.4 25.46
937.3 25.56
942.1 25.66
947.0 25.76
951.9 25.87
956.8 25.97
961.6 26.07
966.5 26.17
971.4 26.27
976.3 26.38
981.1 26.48
986.0 26.58
990.9 26.68
995.8 26.78
1000.6 26.89
1005.5 26.99
1010.4 27.09
1015.3 27.19
1020.1 27.29
1025.0 27.39
1029.9 27.49
1034.8 27.59
1039.6 27.70
1044.5 27.80
1049.4 27.90
1054.3 28.00
1059.1 28.10
1064.0 28.20
1068.9 28.30
1073.8 28.40
1078.6 28.50
1083.5 28.60
1088.4 28.70
1093.3 28.80
1098.1 28.90
1103.0 29.00
1107.9 29.10
1112.8 29.20
1117.6 29.30
1122.5 29.40
1127.4 29.50
1132.3 29.60
1137.1 29.70
1142.0 29.80
1146.9 29.90
1151.8 30.00
1156.6 30.10
1161.5 30.20
1166.4 30.30
1171.3 30.40
1176.1 30.50
1181.0 30.60
1185.9 30.70
1190.8 30.80
1195.6 30.90
1200.5 31.00
1205.4 31.10
1210.3 31.19
1215.1 31.29
1220.0 31.39
1224.9 31.49
1229.8 31.59
1234.6 31.69
1239.5 31.79
1244.4 31.88
1249.3 31.98
1254.1 32.08
1259.0 32.18
1263.9 32.28
1268.8 32.38
1273.6 32.47
1278.5 32.57
1283.4 32.67
1288.3 32.77
1293.1 32.87
1298.0 32.96
1302.9 33.06
1307.8 33.16
1312.6 33.26
1317.5 33.36
1322.4 33.45
1327.3 33.55
1332.1 33.65
1337.0 33.75
1341.9 33.84
1346.8 33.94
1351.6 34.04
1356.5 34.14
1361.4 34.23
1366.3 34.33
1371.1 34.43
1376.0 34.52
1380.9 34.62
1385.8 34.72
1390.6 34.82
1395.5 34.91
1400.4 35.01
1405.3 35.11
1410.1 35.20
1415.0 35.30
1419.9 35.40
1424.8 35.49
1429.6 35.59
1434.5 35.69
1439.4 35.78
1444.3 35.88
1449.1 35.98
1454.0 36.07
1458.9 36.17
1463.8 36.26
1468.6 36.36
1473.5 36.46
1478.4 36.55
1483.3 36.65
1488.1 36.74
1493.0 36.84
1497.9 36.94
1502.8 37.03
1507.6 37.13
1512.5 37.22
1517.4 37.32
1522.3 37.42
1527.1 37.51
1532.0 37.61
1536.9 37.70
1541.8 37.80
1546.6 37.89
1551.5 37.99
1556.4 38.08
1561.3 38.18
1566.1 38.28
1571.0 38.37
1575.9 38.47
1580.8 38.56
1585.6 38.66
1590.5 38.75
1595.4 38.85
1600.3 38.94
1605.1 39.04
1610.0 39.13
1614.9 39.23
1619.8 39.32
1624.6 39.42
1629.5 39.51
1634.4 39.61
1639.3 39.70
1644.1 39.79
1649.0 39.89
1653.9 39.98
1658.8 40.08
1663.6 40.17
1668.5 40.27
1673.4 40.36
1678.3 40.46
1683.1 40.55
1688.0 40.65
1692.9 40.74
1697.8 40.83
1702.6 40.93
1707.5 41.02
1712.4 41.12
1717.3 41.21
1722.1 41.30
1727.0 41.40
1731.9 41.49
1736.8 41.59
1741.6 41.68
1746.5 41.77
1751.4 41.87
1756.3 41.96
1761.1 42.06
1766.0 42.15
1770.9 42.24
1775.8 42.34
1780.6 42.43
1785.5 42.52
1790.4 42.62
1795.3 42.71
1800.1 42.80
1805.0 42.90
1809.9 42.99
1814.8 43.08
1819.6 43.18
1824.5 43.27
1829.4 43.36
1834.3 43.46
1839.1 43.55
1844.0 43.64
1848.9 43.74
1853.8 43.83
1858.6 43.92
1863.5 44.02
1868.4 44.11
1873.3 44.20
1878.1 44.29
1883.0 44.39
1887.9 44.48
1892.8 44.57
1897.6 44.67
1902.5 44.76
1907.4 44.85
1912.3 44.94
1917.1 45.04
1922.0 45.13
1926.9 45.22
1931.8 45.31
1936.6 45.41
1941.5 45.50
1946.4 45.59
1951.3 45.68
1956.1 45.78
1961.0 45.87
1965.9 45.96
1970.8 46.05
1975.6 46.15
1980.5 46.24
1985.4 46.33
1990.3 46.42
1995.1 46.51
2000.0 46.61
@@ -0,0 +1,422 @@
ELEMENT:
Na
SOURCE:
Tanuma, Powell and Penn
Unpublished data
IMFP values determined from optical data and a theoretical model
ATOMIC WEIGHT: 22.98977
DENSITY: 0.9700 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
50.0 4.95
54.9 5.27
59.8 5.56
64.6 5.83
69.5 6.09
74.4 6.34
79.3 6.58
84.1 6.81
89.0 7.05
93.9 7.27
98.8 7.50
103.6 7.72
108.5 7.94
113.4 8.16
118.3 8.37
123.1 8.59
128.0 8.80
132.9 9.01
137.8 9.22
142.6 9.43
147.5 9.64
152.4 9.85
157.3 10.05
162.1 10.26
167.0 10.46
171.9 10.66
176.8 10.87
181.6 11.07
186.5 11.27
191.4 11.47
196.3 11.67
201.1 11.87
206.0 12.06
210.9 12.26
215.8 12.46
220.6 12.65
225.5 12.85
230.4 13.04
235.3 13.24
240.1 13.43
245.0 13.63
249.9 13.82
254.8 14.01
259.6 14.20
264.5 14.39
269.4 14.58
274.3 14.77
279.1 14.96
284.0 15.15
288.9 15.34
293.8 15.53
298.6 15.72
303.5 15.90
308.4 16.09
313.3 16.28
318.1 16.46
323.0 16.65
327.9 16.83
332.8 17.02
337.6 17.20
342.5 17.39
347.4 17.57
352.3 17.75
357.1 17.94
362.0 18.12
366.9 18.30
371.8 18.48
376.6 18.66
381.5 18.85
386.4 19.03
391.3 19.21
396.1 19.39
401.0 19.57
405.9 19.75
410.8 19.93
415.6 20.11
420.5 20.28
425.4 20.46
430.3 20.64
435.1 20.82
440.0 21.00
444.9 21.17
449.8 21.35
454.6 21.53
459.5 21.70
464.4 21.88
469.3 22.05
474.1 22.23
479.0 22.41
483.9 22.58
488.8 22.76
493.6 22.93
498.5 23.10
503.4 23.28
508.3 23.45
513.1 23.63
518.0 23.80
522.9 23.97
527.8 24.15
532.6 24.32
537.5 24.49
542.4 24.66
547.3 24.84
552.1 25.01
557.0 25.18
561.9 25.35
566.8 25.52
571.6 25.69
576.5 25.86
581.4 26.03
586.3 26.20
591.1 26.37
596.0 26.54
600.9 26.71
605.8 26.88
610.6 27.05
615.5 27.22
620.4 27.39
625.3 27.56
630.1 27.73
635.0 27.90
639.9 28.06
644.8 28.23
649.6 28.40
654.5 28.57
659.4 28.74
664.3 28.90
669.1 29.07
674.0 29.24
678.9 29.40
683.8 29.57
688.6 29.74
693.5 29.90
698.4 30.07
703.3 30.24
708.1 30.40
713.0 30.57
717.9 30.73
722.8 30.90
727.6 31.06
732.5 31.23
737.4 31.39
742.3 31.56
747.1 31.72
752.0 31.89
756.9 32.05
761.8 32.22
766.6 32.38
771.5 32.54
776.4 32.71
781.3 32.87
786.1 33.03
791.0 33.20
795.9 33.36
800.8 33.52
805.6 33.69
810.5 33.85
815.4 34.01
820.3 34.17
825.1 34.34
830.0 34.50
834.9 34.66
839.8 34.82
844.6 34.99
849.5 35.15
854.4 35.31
859.3 35.47
864.1 35.63
869.0 35.79
873.9 35.95
878.8 36.11
883.6 36.27
888.5 36.44
893.4 36.60
898.3 36.76
903.1 36.92
908.0 37.08
912.9 37.24
917.8 37.40
922.6 37.56
927.5 37.72
932.4 37.88
937.3 38.04
942.1 38.20
947.0 38.35
951.9 38.51
956.8 38.67
961.6 38.83
966.5 38.99
971.4 39.15
976.3 39.31
981.1 39.47
986.0 39.62
990.9 39.78
995.8 39.94
1000.6 40.10
1005.5 40.26
1010.4 40.41
1015.3 40.57
1020.1 40.73
1025.0 40.89
1029.9 41.05
1034.8 41.20
1039.6 41.36
1044.5 41.52
1049.4 41.67
1054.3 41.83
1059.1 41.99
1064.0 42.14
1068.9 42.30
1073.8 42.46
1078.6 42.61
1083.5 42.77
1088.4 42.93
1093.3 43.08
1098.1 43.24
1103.0 43.39
1107.9 43.55
1112.8 43.71
1117.6 43.86
1122.5 44.02
1127.4 44.17
1132.3 44.33
1137.1 44.48
1142.0 44.64
1146.9 44.79
1151.8 44.95
1156.6 45.10
1161.5 45.26
1166.4 45.41
1171.3 45.57
1176.1 45.72
1181.0 45.88
1185.9 46.03
1190.8 46.19
1195.6 46.34
1200.5 46.49
1205.4 46.65
1210.3 46.80
1215.1 46.96
1220.0 47.11
1224.9 47.26
1229.8 47.42
1234.6 47.57
1239.5 47.73
1244.4 47.88
1249.3 48.03
1254.1 48.19
1259.0 48.34
1263.9 48.49
1268.8 48.64
1273.6 48.80
1278.5 48.95
1283.4 49.10
1288.3 49.26
1293.1 49.41
1298.0 49.56
1302.9 49.71
1307.8 49.87
1312.6 50.02
1317.5 50.17
1322.4 50.32
1327.3 50.47
1332.1 50.63
1337.0 50.78
1341.9 50.93
1346.8 51.08
1351.6 51.23
1356.5 51.39
1361.4 51.54
1366.3 51.69
1371.1 51.84
1376.0 51.99
1380.9 52.14
1385.8 52.29
1390.6 52.45
1395.5 52.60
1400.4 52.75
1405.3 52.90
1410.1 53.05
1415.0 53.20
1419.9 53.35
1424.8 53.50
1429.6 53.65
1434.5 53.80
1439.4 53.95
1444.3 54.10
1449.1 54.25
1454.0 54.40
1458.9 54.55
1463.8 54.70
1468.6 54.85
1473.5 55.00
1478.4 55.15
1483.3 55.30
1488.1 55.45
1493.0 55.60
1497.9 55.75
1502.8 55.90
1507.6 56.05
1512.5 56.20
1517.4 56.35
1522.3 56.50
1527.1 56.65
1532.0 56.80
1536.9 56.95
1541.8 57.10
1546.6 57.25
1551.5 57.40
1556.4 57.54
1561.3 57.69
1566.1 57.84
1571.0 57.99
1575.9 58.14
1580.8 58.29
1585.6 58.44
1590.5 58.59
1595.4 58.73
1600.3 58.88
1605.1 59.03
1610.0 59.18
1614.9 59.33
1619.8 59.48
1624.6 59.62
1629.5 59.77
1634.4 59.92
1639.3 60.07
1644.1 60.21
1649.0 60.36
1653.9 60.51
1658.8 60.66
1663.6 60.81
1668.5 60.95
1673.4 61.10
1678.3 61.25
1683.1 61.40
1688.0 61.54
1692.9 61.69
1697.8 61.84
1702.6 61.98
1707.5 62.13
1712.4 62.28
1717.3 62.43
1722.1 62.57
1727.0 62.72
1731.9 62.87
1736.8 63.01
1741.6 63.16
1746.5 63.31
1751.4 63.45
1756.3 63.60
1761.1 63.75
1766.0 63.89
1770.9 64.04
1775.8 64.19
1780.6 64.33
1785.5 64.48
1790.4 64.62
1795.3 64.77
1800.1 64.92
1805.0 65.06
1809.9 65.21
1814.8 65.35
1819.6 65.50
1824.5 65.65
1829.4 65.79
1834.3 65.94
1839.1 66.08
1844.0 66.23
1848.9 66.37
1853.8 66.52
1858.6 66.67
1863.5 66.81
1868.4 66.96
1873.3 67.10
1878.1 67.25
1883.0 67.39
1887.9 67.54
1892.8 67.68
1897.6 67.83
1902.5 67.97
1907.4 68.12
1912.3 68.26
1917.1 68.41
1922.0 68.55
1926.9 68.70
1931.8 68.84
1936.6 68.99
1941.5 69.13
1946.4 69.28
1951.3 69.42
1956.1 69.57
1961.0 69.71
1965.9 69.85
1970.8 70.00
1975.6 70.14
1980.5 70.29
1985.4 70.43
1990.3 70.58
1995.1 70.72
2000.0 70.86
@@ -0,0 +1,422 @@
ELEMENT:
Mg
SOURCE:
Tanuma, Powell and Penn
Surface Interface Anal. 17 (1991) 911.
IMFP values determined from optical data and a theoretical model
ATOMIC WEIGHT: 24.30500
DENSITY: 1.7400 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
50.0 3.89
54.9 4.09
59.8 4.27
64.6 4.43
69.5 4.58
74.4 4.72
79.3 4.86
84.1 5.00
89.0 5.14
93.9 5.27
98.8 5.41
103.6 5.54
108.5 5.67
113.4 5.81
118.3 5.94
123.1 6.07
128.0 6.20
132.9 6.33
137.8 6.46
142.6 6.59
147.5 6.72
152.4 6.84
157.3 6.97
162.1 7.10
167.0 7.23
171.9 7.35
176.8 7.48
181.6 7.61
186.5 7.73
191.4 7.86
196.3 7.98
201.1 8.11
206.0 8.23
210.9 8.36
215.8 8.48
220.6 8.60
225.5 8.73
230.4 8.85
235.3 8.97
240.1 9.09
245.0 9.21
249.9 9.34
254.8 9.46
259.6 9.58
264.5 9.70
269.4 9.82
274.3 9.94
279.1 10.06
284.0 10.18
288.9 10.30
293.8 10.42
298.6 10.54
303.5 10.65
308.4 10.77
313.3 10.89
318.1 11.01
323.0 11.12
327.9 11.24
332.8 11.36
337.6 11.48
342.5 11.59
347.4 11.71
352.3 11.82
357.1 11.94
362.0 12.06
366.9 12.17
371.8 12.29
376.6 12.40
381.5 12.52
386.4 12.63
391.3 12.74
396.1 12.86
401.0 12.97
405.9 13.09
410.8 13.20
415.6 13.31
420.5 13.43
425.4 13.54
430.3 13.65
435.1 13.76
440.0 13.88
444.9 13.99
449.8 14.10
454.6 14.21
459.5 14.32
464.4 14.43
469.3 14.55
474.1 14.66
479.0 14.77
483.9 14.88
488.8 14.99
493.6 15.10
498.5 15.21
503.4 15.32
508.3 15.43
513.1 15.54
518.0 15.65
522.9 15.76
527.8 15.87
532.6 15.98
537.5 16.09
542.4 16.20
547.3 16.30
552.1 16.41
557.0 16.52
561.9 16.63
566.8 16.74
571.6 16.85
576.5 16.95
581.4 17.06
586.3 17.17
591.1 17.28
596.0 17.39
600.9 17.49
605.8 17.60
610.6 17.71
615.5 17.81
620.4 17.92
625.3 18.03
630.1 18.13
635.0 18.24
639.9 18.35
644.8 18.45
649.6 18.56
654.5 18.66
659.4 18.77
664.3 18.88
669.1 18.98
674.0 19.09
678.9 19.19
683.8 19.30
688.6 19.40
693.5 19.51
698.4 19.61
703.3 19.72
708.1 19.82
713.0 19.93
717.9 20.03
722.8 20.14
727.6 20.24
732.5 20.34
737.4 20.45
742.3 20.55
747.1 20.66
752.0 20.76
756.9 20.86
761.8 20.97
766.6 21.07
771.5 21.18
776.4 21.28
781.3 21.38
786.1 21.48
791.0 21.59
795.9 21.69
800.8 21.79
805.6 21.90
810.5 22.00
815.4 22.10
820.3 22.20
825.1 22.31
830.0 22.41
834.9 22.51
839.8 22.61
844.6 22.72
849.5 22.82
854.4 22.92
859.3 23.02
864.1 23.12
869.0 23.22
873.9 23.33
878.8 23.43
883.6 23.53
888.5 23.63
893.4 23.73
898.3 23.83
903.1 23.93
908.0 24.03
912.9 24.14
917.8 24.24
922.6 24.34
927.5 24.44
932.4 24.54
937.3 24.64
942.1 24.74
947.0 24.84
951.9 24.94
956.8 25.04
961.6 25.14
966.5 25.24
971.4 25.34
976.3 25.44
981.1 25.54
986.0 25.64
990.9 25.74
995.8 25.84
1000.6 25.94
1005.5 26.04
1010.4 26.14
1015.3 26.24
1020.1 26.34
1025.0 26.44
1029.9 26.54
1034.8 26.63
1039.6 26.73
1044.5 26.83
1049.4 26.93
1054.3 27.03
1059.1 27.13
1064.0 27.23
1068.9 27.33
1073.8 27.43
1078.6 27.52
1083.5 27.62
1088.4 27.72
1093.3 27.82
1098.1 27.92
1103.0 28.02
1107.9 28.11
1112.8 28.21
1117.6 28.31
1122.5 28.41
1127.4 28.51
1132.3 28.60
1137.1 28.70
1142.0 28.80
1146.9 28.90
1151.8 28.99
1156.6 29.09
1161.5 29.19
1166.4 29.29
1171.3 29.38
1176.1 29.48
1181.0 29.58
1185.9 29.68
1190.8 29.77
1195.6 29.87
1200.5 29.97
1205.4 30.06
1210.3 30.16
1215.1 30.26
1220.0 30.35
1224.9 30.45
1229.8 30.55
1234.6 30.64
1239.5 30.74
1244.4 30.84
1249.3 30.93
1254.1 31.03
1259.0 31.13
1263.9 31.22
1268.8 31.32
1273.6 31.41
1278.5 31.51
1283.4 31.61
1288.3 31.70
1293.1 31.80
1298.0 31.89
1302.9 31.99
1307.8 32.09
1312.6 32.18
1317.5 32.28
1322.4 32.37
1327.3 32.47
1332.1 32.57
1337.0 32.66
1341.9 32.76
1346.8 32.85
1351.6 32.95
1356.5 33.04
1361.4 33.14
1366.3 33.23
1371.1 33.33
1376.0 33.42
1380.9 33.52
1385.8 33.61
1390.6 33.71
1395.5 33.80
1400.4 33.90
1405.3 33.99
1410.1 34.09
1415.0 34.18
1419.9 34.28
1424.8 34.37
1429.6 34.47
1434.5 34.56
1439.4 34.66
1444.3 34.75
1449.1 34.84
1454.0 34.94
1458.9 35.03
1463.8 35.13
1468.6 35.22
1473.5 35.32
1478.4 35.41
1483.3 35.50
1488.1 35.60
1493.0 35.69
1497.9 35.79
1502.8 35.88
1507.6 35.97
1512.5 36.07
1517.4 36.16
1522.3 36.26
1527.1 36.35
1532.0 36.44
1536.9 36.54
1541.8 36.63
1546.6 36.72
1551.5 36.82
1556.4 36.91
1561.3 37.00
1566.1 37.10
1571.0 37.19
1575.9 37.29
1580.8 37.38
1585.6 37.47
1590.5 37.56
1595.4 37.66
1600.3 37.75
1605.1 37.84
1610.0 37.94
1614.9 38.03
1619.8 38.12
1624.6 38.22
1629.5 38.31
1634.4 38.40
1639.3 38.49
1644.1 38.59
1649.0 38.68
1653.9 38.77
1658.8 38.87
1663.6 38.96
1668.5 39.05
1673.4 39.14
1678.3 39.24
1683.1 39.33
1688.0 39.42
1692.9 39.51
1697.8 39.61
1702.6 39.70
1707.5 39.79
1712.4 39.88
1717.3 39.98
1722.1 40.07
1727.0 40.16
1731.9 40.25
1736.8 40.34
1741.6 40.44
1746.5 40.53
1751.4 40.62
1756.3 40.71
1761.1 40.80
1766.0 40.90
1770.9 40.99
1775.8 41.08
1780.6 41.17
1785.5 41.26
1790.4 41.35
1795.3 41.45
1800.1 41.54
1805.0 41.63
1809.9 41.72
1814.8 41.81
1819.6 41.90
1824.5 42.00
1829.4 42.09
1834.3 42.18
1839.1 42.27
1844.0 42.36
1848.9 42.45
1853.8 42.54
1858.6 42.63
1863.5 42.73
1868.4 42.82
1873.3 42.91
1878.1 43.00
1883.0 43.09
1887.9 43.18
1892.8 43.27
1897.6 43.36
1902.5 43.45
1907.4 43.55
1912.3 43.64
1917.1 43.73
1922.0 43.82
1926.9 43.91
1931.8 44.00
1936.6 44.09
1941.5 44.18
1946.4 44.27
1951.3 44.36
1956.1 44.45
1961.0 44.54
1965.9 44.63
1970.8 44.72
1975.6 44.81
1980.5 44.90
1985.4 45.00
1990.3 45.09
1995.1 45.18
2000.0 45.27
@@ -0,0 +1,422 @@
ELEMENT:
Al
SOURCE:
Ashley
J. Electron Spectrosc. 50 (1990) 323; J. C. Ashley, Private communication
IMFP values determined from optical data and a theoretical model
ATOMIC WEIGHT: 26.98154
DENSITY: 2.7000 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
40.0 4.77
64.9 4.93
89.8 5.27
114.7 5.69
139.6 6.14
164.5 6.60
189.4 7.07
214.3 7.55
239.2 8.03
264.1 8.50
289.0 8.98
313.9 9.45
338.8 9.92
363.7 10.38
388.6 10.85
413.5 11.31
438.4 11.77
463.3 12.23
488.2 12.68
513.1 13.13
538.0 13.58
562.9 14.03
587.8 14.47
612.7 14.91
637.6 15.35
662.5 15.79
687.4 16.22
712.3 16.65
737.2 17.08
762.1 17.51
787.0 17.94
811.9 18.36
836.8 18.78
861.7 19.20
886.6 19.62
911.5 20.04
936.4 20.45
961.3 20.87
986.2 21.28
1011.1 21.69
1036.0 22.10
1060.9 22.51
1085.8 22.91
1110.7 23.32
1135.6 23.72
1160.5 24.12
1185.4 24.52
1210.3 24.92
1235.2 25.32
1260.1 25.71
1285.0 26.11
1309.9 26.50
1334.8 26.90
1359.7 27.29
1384.6 27.68
1409.5 28.07
1434.4 28.45
1459.3 28.84
1484.2 29.23
1509.1 29.61
1534.0 30.00
1558.9 30.38
1583.8 30.76
1608.7 31.14
1633.6 31.52
1658.5 31.90
1683.4 32.28
1708.3 32.66
1733.2 33.03
1758.1 33.41
1783.0 33.78
1807.9 34.16
1832.8 34.53
1857.7 34.90
1882.6 35.27
1907.5 35.64
1932.4 36.01
1957.3 36.38
1982.2 36.75
2007.1 37.11
2032.0 37.48
2056.9 37.85
2081.8 38.21
2106.7 38.57
2131.6 38.94
2156.5 39.30
2181.4 39.66
2206.3 40.02
2231.2 40.38
2256.1 40.74
2281.0 41.10
2305.9 41.46
2330.8 41.82
2355.7 42.18
2380.6 42.53
2405.5 42.89
2430.4 43.24
2455.3 43.60
2480.2 43.95
2505.1 44.31
2530.0 44.66
2554.9 45.01
2579.8 45.36
2604.7 45.72
2629.6 46.07
2654.5 46.42
2679.4 46.77
2704.3 47.11
2729.2 47.46
2754.1 47.81
2779.0 48.16
2803.9 48.50
2828.8 48.85
2853.7 49.20
2878.6 49.54
2903.5 49.89
2928.4 50.23
2953.3 50.57
2978.2 50.92
3003.1 51.26
3028.0 51.60
3052.9 51.94
3077.8 52.28
3102.7 52.62
3127.6 52.96
3152.5 53.30
3177.4 53.64
3202.3 53.98
3227.2 54.32
3252.1 54.66
3277.0 55.00
3301.9 55.33
3326.8 55.67
3351.7 56.01
3376.6 56.34
3401.5 56.68
3426.4 57.01
3451.3 57.35
3476.2 57.68
3501.1 58.01
3526.0 58.35
3550.9 58.68
3575.8 59.01
3600.7 59.34
3625.6 59.68
3650.5 60.01
3675.4 60.34
3700.3 60.67
3725.2 61.00
3750.1 61.33
3775.0 61.66
3799.9 61.99
3824.8 62.31
3849.7 62.64
3874.6 62.97
3899.5 63.30
3924.4 63.62
3949.3 63.95
3974.2 64.28
3999.1 64.60
4024.0 64.93
4048.9 65.25
4073.8 65.58
4098.7 65.90
4123.6 66.23
4148.5 66.55
4173.4 66.88
4198.3 67.20
4223.2 67.52
4248.1 67.84
4273.0 68.17
4297.9 68.49
4322.8 68.81
4347.7 69.13
4372.6 69.45
4397.5 69.77
4422.4 70.09
4447.3 70.41
4472.2 70.73
4497.1 71.05
4522.0 71.37
4546.9 71.69
4571.8 72.01
4596.7 72.33
4621.6 72.64
4646.5 72.96
4671.4 73.28
4696.3 73.59
4721.2 73.91
4746.1 74.23
4771.0 74.54
4795.9 74.86
4820.8 75.17
4845.7 75.49
4870.6 75.81
4895.5 76.12
4920.4 76.43
4945.3 76.75
4970.2 77.06
4995.1 77.38
5020.0 77.69
5044.9 78.00
5069.8 78.31
5094.7 78.63
5119.6 78.94
5144.5 79.25
5169.4 79.56
5194.3 79.87
5219.2 80.18
5244.1 80.50
5269.0 80.81
5293.9 81.12
5318.8 81.43
5343.7 81.74
5368.6 82.05
5393.5 82.35
5418.4 82.66
5443.3 82.97
5468.2 83.28
5493.1 83.59
5518.0 83.90
5542.9 84.20
5567.8 84.51
5592.7 84.82
5617.6 85.13
5642.5 85.43
5667.4 85.74
5692.3 86.05
5717.2 86.35
5742.1 86.66
5767.0 86.96
5791.9 87.27
5816.8 87.57
5841.7 87.88
5866.6 88.18
5891.5 88.49
5916.4 88.79
5941.3 89.10
5966.2 89.40
5991.1 89.70
6016.0 90.01
6040.9 90.31
6065.8 90.61
6090.7 90.92
6115.6 91.22
6140.5 91.52
6165.4 91.82
6190.3 92.13
6215.2 92.43
6240.1 92.73
6265.0 93.03
6289.9 93.33
6314.8 93.63
6339.7 93.93
6364.6 94.23
6389.5 94.53
6414.4 94.83
6439.3 95.13
6464.2 95.43
6489.1 95.73
6514.0 96.03
6538.9 96.33
6563.8 96.63
6588.7 96.93
6613.6 97.22
6638.5 97.52
6663.4 97.82
6688.3 98.12
6713.2 98.42
6738.1 98.71
6763.0 99.01
6787.9 99.31
6812.8 99.60
6837.7 99.90
6862.6 100.20
6887.5 100.49
6912.4 100.79
6937.3 101.08
6962.2 101.38
6987.1 101.68
7012.0 101.97
7036.9 102.27
7061.8 102.56
7086.7 102.86
7111.6 103.15
7136.5 103.44
7161.4 103.74
7186.3 104.03
7211.2 104.33
7236.1 104.62
7261.0 104.91
7285.9 105.21
7310.8 105.50
7335.7 105.79
7360.6 106.09
7385.5 106.38
7410.4 106.67
7435.3 106.96
7460.2 107.25
7485.1 107.55
7510.0 107.84
7534.9 108.13
7559.8 108.42
7584.7 108.71
7609.6 109.00
7634.5 109.29
7659.4 109.58
7684.3 109.87
7709.2 110.17
7734.1 110.46
7759.0 110.75
7783.9 111.04
7808.8 111.32
7833.7 111.61
7858.6 111.90
7883.5 112.19
7908.4 112.48
7933.3 112.77
7958.2 113.06
7983.1 113.35
8008.0 113.64
8032.9 113.92
8057.8 114.21
8082.7 114.50
8107.6 114.79
8132.5 115.08
8157.4 115.36
8182.3 115.65
8207.2 115.94
8232.1 116.22
8257.0 116.51
8281.9 116.80
8306.8 117.08
8331.7 117.37
8356.6 117.66
8381.5 117.94
8406.4 118.23
8431.3 118.51
8456.2 118.80
8481.1 119.09
8506.0 119.37
8530.9 119.66
8555.8 119.94
8580.7 120.23
8605.6 120.51
8630.5 120.80
8655.4 121.08
8680.3 121.36
8705.2 121.65
8730.1 121.93
8755.0 122.22
8779.9 122.50
8804.8 122.78
8829.7 123.07
8854.6 123.35
8879.5 123.63
8904.4 123.92
8929.3 124.20
8954.2 124.48
8979.1 124.76
9004.0 125.05
9028.9 125.33
9053.8 125.61
9078.7 125.89
9103.6 126.18
9128.5 126.46
9153.4 126.74
9178.3 127.02
9203.2 127.30
9228.1 127.58
9253.0 127.86
9277.9 128.14
9302.8 128.43
9327.7 128.71
9352.6 128.99
9377.5 129.27
9402.4 129.55
9427.3 129.83
9452.2 130.11
9477.1 130.39
9502.0 130.67
9526.9 130.95
9551.8 131.23
9576.7 131.51
9601.6 131.78
9626.5 132.06
9651.4 132.34
9676.3 132.62
9701.2 132.90
9726.1 133.18
9751.0 133.46
9775.9 133.74
9800.8 134.01
9825.7 134.29
9850.6 134.57
9875.5 134.85
9900.4 135.13
9925.3 135.40
9950.2 135.68
9975.1 135.96
10000.0 136.23
@@ -0,0 +1,422 @@
ELEMENT:
Al
SOURCE:
Tanuma, Powell and Penn
Surface Interface Anal. 17 (1991) 911.
IMFP values determined from optical data and a theoretical model
ATOMIC WEIGHT: 26.98154
DENSITY: 2.7000 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
50.0 3.17
54.9 3.27
59.8 3.37
64.6 3.47
69.5 3.57
74.4 3.67
79.3 3.77
84.1 3.87
89.0 3.97
93.9 4.07
98.8 4.17
103.6 4.28
108.5 4.38
113.4 4.48
118.3 4.58
123.1 4.68
128.0 4.78
132.9 4.88
137.8 4.98
142.6 5.07
147.5 5.17
152.4 5.27
157.3 5.37
162.1 5.47
167.0 5.56
171.9 5.66
176.8 5.76
181.6 5.86
186.5 5.95
191.4 6.05
196.3 6.14
201.1 6.24
206.0 6.33
210.9 6.43
215.8 6.52
220.6 6.62
225.5 6.71
230.4 6.80
235.3 6.90
240.1 6.99
245.0 7.08
249.9 7.17
254.8 7.27
259.6 7.36
264.5 7.45
269.4 7.54
274.3 7.63
279.1 7.72
284.0 7.81
288.9 7.90
293.8 7.99
298.6 8.08
303.5 8.17
308.4 8.26
313.3 8.35
318.1 8.44
323.0 8.53
327.9 8.62
332.8 8.71
337.6 8.80
342.5 8.88
347.4 8.97
352.3 9.06
357.1 9.15
362.0 9.23
366.9 9.32
371.8 9.41
376.6 9.49
381.5 9.58
386.4 9.67
391.3 9.75
396.1 9.84
401.0 9.93
405.9 10.01
410.8 10.10
415.6 10.18
420.5 10.27
425.4 10.35
430.3 10.44
435.1 10.52
440.0 10.61
444.9 10.69
449.8 10.78
454.6 10.86
459.5 10.94
464.4 11.03
469.3 11.11
474.1 11.19
479.0 11.28
483.9 11.36
488.8 11.44
493.6 11.53
498.5 11.61
503.4 11.69
508.3 11.78
513.1 11.86
518.0 11.94
522.9 12.02
527.8 12.11
532.6 12.19
537.5 12.27
542.4 12.35
547.3 12.43
552.1 12.51
557.0 12.60
561.9 12.68
566.8 12.76
571.6 12.84
576.5 12.92
581.4 13.00
586.3 13.08
591.1 13.16
596.0 13.24
600.9 13.32
605.8 13.40
610.6 13.48
615.5 13.56
620.4 13.64
625.3 13.72
630.1 13.80
635.0 13.88
639.9 13.96
644.8 14.04
649.6 14.12
654.5 14.20
659.4 14.28
664.3 14.36
669.1 14.44
674.0 14.52
678.9 14.60
683.8 14.68
688.6 14.76
693.5 14.83
698.4 14.91
703.3 14.99
708.1 15.07
713.0 15.15
717.9 15.23
722.8 15.30
727.6 15.38
732.5 15.46
737.4 15.54
742.3 15.62
747.1 15.69
752.0 15.77
756.9 15.85
761.8 15.93
766.6 16.00
771.5 16.08
776.4 16.16
781.3 16.24
786.1 16.31
791.0 16.39
795.9 16.47
800.8 16.54
805.6 16.62
810.5 16.70
815.4 16.77
820.3 16.85
825.1 16.93
830.0 17.00
834.9 17.08
839.8 17.16
844.6 17.23
849.5 17.31
854.4 17.38
859.3 17.46
864.1 17.54
869.0 17.61
873.9 17.69
878.8 17.76
883.6 17.84
888.5 17.92
893.4 17.99
898.3 18.07
903.1 18.14
908.0 18.22
912.9 18.29
917.8 18.37
922.6 18.44
927.5 18.52
932.4 18.59
937.3 18.67
942.1 18.74
947.0 18.82
951.9 18.89
956.8 18.97
961.6 19.04
966.5 19.12
971.4 19.19
976.3 19.27
981.1 19.34
986.0 19.41
990.9 19.49
995.8 19.56
1000.6 19.64
1005.5 19.71
1010.4 19.79
1015.3 19.86
1020.1 19.93
1025.0 20.01
1029.9 20.08
1034.8 20.16
1039.6 20.23
1044.5 20.30
1049.4 20.38
1054.3 20.45
1059.1 20.52
1064.0 20.60
1068.9 20.67
1073.8 20.74
1078.6 20.82
1083.5 20.89
1088.4 20.96
1093.3 21.04
1098.1 21.11
1103.0 21.18
1107.9 21.26
1112.8 21.33
1117.6 21.40
1122.5 21.48
1127.4 21.55
1132.3 21.62
1137.1 21.69
1142.0 21.77
1146.9 21.84
1151.8 21.91
1156.6 21.99
1161.5 22.06
1166.4 22.13
1171.3 22.20
1176.1 22.28
1181.0 22.35
1185.9 22.42
1190.8 22.49
1195.6 22.56
1200.5 22.64
1205.4 22.71
1210.3 22.78
1215.1 22.85
1220.0 22.93
1224.9 23.00
1229.8 23.07
1234.6 23.14
1239.5 23.21
1244.4 23.28
1249.3 23.36
1254.1 23.43
1259.0 23.50
1263.9 23.57
1268.8 23.64
1273.6 23.71
1278.5 23.79
1283.4 23.86
1288.3 23.93
1293.1 24.00
1298.0 24.07
1302.9 24.14
1307.8 24.21
1312.6 24.29
1317.5 24.36
1322.4 24.43
1327.3 24.50
1332.1 24.57
1337.0 24.64
1341.9 24.71
1346.8 24.78
1351.6 24.85
1356.5 24.92
1361.4 25.00
1366.3 25.07
1371.1 25.14
1376.0 25.21
1380.9 25.28
1385.8 25.35
1390.6 25.42
1395.5 25.49
1400.4 25.56
1405.3 25.63
1410.1 25.70
1415.0 25.77
1419.9 25.84
1424.8 25.91
1429.6 25.98
1434.5 26.05
1439.4 26.12
1444.3 26.19
1449.1 26.26
1454.0 26.33
1458.9 26.40
1463.8 26.47
1468.6 26.54
1473.5 26.61
1478.4 26.68
1483.3 26.75
1488.1 26.82
1493.0 26.89
1497.9 26.96
1502.8 27.03
1507.6 27.10
1512.5 27.17
1517.4 27.24
1522.3 27.31
1527.1 27.38
1532.0 27.45
1536.9 27.52
1541.8 27.59
1546.6 27.66
1551.5 27.73
1556.4 27.80
1561.3 27.87
1566.1 27.94
1571.0 28.01
1575.9 28.08
1580.8 28.15
1585.6 28.21
1590.5 28.28
1595.4 28.35
1600.3 28.42
1605.1 28.49
1610.0 28.56
1614.9 28.63
1619.8 28.70
1624.6 28.77
1629.5 28.84
1634.4 28.91
1639.3 28.97
1644.1 29.04
1649.0 29.11
1653.9 29.18
1658.8 29.25
1663.6 29.32
1668.5 29.39
1673.4 29.46
1678.3 29.52
1683.1 29.59
1688.0 29.66
1692.9 29.73
1697.8 29.80
1702.6 29.87
1707.5 29.94
1712.4 30.00
1717.3 30.07
1722.1 30.14
1727.0 30.21
1731.9 30.28
1736.8 30.35
1741.6 30.41
1746.5 30.48
1751.4 30.55
1756.3 30.62
1761.1 30.69
1766.0 30.75
1770.9 30.82
1775.8 30.89
1780.6 30.96
1785.5 31.03
1790.4 31.10
1795.3 31.16
1800.1 31.23
1805.0 31.30
1809.9 31.37
1814.8 31.43
1819.6 31.50
1824.5 31.57
1829.4 31.64
1834.3 31.71
1839.1 31.77
1844.0 31.84
1848.9 31.91
1853.8 31.98
1858.6 32.04
1863.5 32.11
1868.4 32.18
1873.3 32.25
1878.1 32.31
1883.0 32.38
1887.9 32.45
1892.8 32.52
1897.6 32.58
1902.5 32.65
1907.4 32.72
1912.3 32.79
1917.1 32.85
1922.0 32.92
1926.9 32.99
1931.8 33.06
1936.6 33.12
1941.5 33.19
1946.4 33.26
1951.3 33.32
1956.1 33.39
1961.0 33.46
1965.9 33.53
1970.8 33.59
1975.6 33.66
1980.5 33.73
1985.4 33.79
1990.3 33.86
1995.1 33.93
2000.0 33.99
@@ -0,0 +1,422 @@
ELEMENT:
Al
SOURCE:
Chen
Y. F. Chen, Private communication
IMFP values determined from optical data and a theoretical model
ATOMIC WEIGHT: 26.98154
DENSITY: 2.7000 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
100.0 5.39
104.8 5.50
109.5 5.60
114.3 5.70
119.0 5.80
123.8 5.90
128.5 6.00
133.3 6.10
138.0 6.19
142.8 6.29
147.5 6.39
152.3 6.49
157.0 6.58
161.8 6.68
166.5 6.78
171.3 6.87
176.0 6.97
180.8 7.06
185.5 7.16
190.3 7.25
195.0 7.34
199.8 7.44
204.5 7.53
209.3 7.62
214.0 7.72
218.8 7.81
223.5 7.90
228.3 7.99
233.0 8.09
237.8 8.18
242.5 8.27
247.3 8.36
252.0 8.45
256.8 8.54
261.5 8.63
266.3 8.72
271.0 8.81
275.8 8.90
280.5 8.99
285.3 9.08
290.0 9.17
294.8 9.26
299.5 9.35
304.3 9.44
309.0 9.52
313.8 9.61
318.5 9.70
323.3 9.79
328.0 9.88
332.8 9.96
337.5 10.05
342.3 10.14
347.0 10.23
351.8 10.31
356.5 10.40
361.3 10.49
366.0 10.57
370.8 10.66
375.5 10.75
380.3 10.83
385.0 10.92
389.8 11.00
394.5 11.09
399.3 11.17
404.0 11.26
408.8 11.34
413.5 11.43
418.3 11.51
423.0 11.60
427.8 11.68
432.5 11.77
437.3 11.85
442.0 11.94
446.8 12.02
451.5 12.11
456.3 12.19
461.0 12.27
465.8 12.36
470.5 12.44
475.3 12.53
480.0 12.61
484.8 12.69
489.5 12.77
494.3 12.86
499.0 12.94
503.8 13.02
508.5 13.11
513.3 13.19
518.0 13.27
522.8 13.35
527.5 13.44
532.3 13.52
537.0 13.60
541.8 13.68
546.5 13.77
551.3 13.85
556.0 13.93
560.8 14.01
565.5 14.09
570.3 14.17
575.0 14.26
579.8 14.34
584.5 14.42
589.3 14.50
594.0 14.58
598.8 14.66
603.5 14.74
608.3 14.82
613.0 14.90
617.8 14.98
622.5 15.07
627.3 15.15
632.0 15.23
636.8 15.31
641.5 15.39
646.3 15.47
651.0 15.55
655.8 15.63
660.5 15.71
665.3 15.79
670.0 15.87
674.8 15.95
679.5 16.03
684.3 16.11
689.0 16.18
693.8 16.26
698.5 16.34
703.3 16.42
708.0 16.50
712.8 16.58
717.5 16.66
722.3 16.74
727.0 16.82
731.8 16.90
736.5 16.98
741.3 17.05
746.0 17.13
750.8 17.21
755.5 17.29
760.3 17.37
765.0 17.45
769.8 17.53
774.5 17.60
779.3 17.68
784.0 17.76
788.8 17.84
793.5 17.92
798.3 17.99
803.0 18.07
807.8 18.15
812.5 18.23
817.3 18.31
822.0 18.38
826.8 18.46
831.5 18.54
836.3 18.62
841.0 18.69
845.8 18.77
850.5 18.85
855.3 18.92
860.0 19.00
864.8 19.08
869.5 19.16
874.3 19.23
879.0 19.31
883.8 19.39
888.5 19.46
893.3 19.54
898.0 19.62
902.8 19.69
907.5 19.77
912.3 19.85
917.0 19.92
921.8 20.00
926.5 20.08
931.3 20.15
936.0 20.23
940.8 20.30
945.5 20.38
950.3 20.46
955.0 20.53
959.8 20.61
964.5 20.69
969.3 20.76
974.0 20.84
978.8 20.91
983.5 20.99
988.3 21.06
993.0 21.14
997.8 21.22
1002.5 21.29
1007.3 21.37
1012.0 21.44
1016.8 21.52
1021.5 21.59
1026.3 21.67
1031.0 21.74
1035.8 21.82
1040.5 21.89
1045.3 21.97
1050.0 22.04
1054.8 22.12
1059.5 22.19
1064.3 22.27
1069.0 22.34
1073.8 22.42
1078.5 22.49
1083.3 22.57
1088.0 22.64
1092.8 22.72
1097.5 22.79
1102.3 22.87
1107.0 22.94
1111.8 23.02
1116.5 23.09
1121.3 23.17
1126.0 23.24
1130.8 23.31
1135.5 23.39
1140.3 23.46
1145.0 23.54
1149.8 23.61
1154.5 23.69
1159.3 23.76
1164.0 23.83
1168.8 23.91
1173.5 23.98
1178.3 24.06
1183.0 24.13
1187.8 24.20
1192.5 24.28
1197.3 24.35
1202.0 24.43
1206.8 24.50
1211.5 24.57
1216.3 24.65
1221.0 24.72
1225.8 24.79
1230.5 24.87
1235.3 24.94
1240.0 25.01
1244.8 25.09
1249.5 25.16
1254.3 25.23
1259.0 25.31
1263.8 25.38
1268.5 25.45
1273.3 25.53
1278.0 25.60
1282.8 25.67
1287.5 25.75
1292.3 25.82
1297.0 25.89
1301.8 25.97
1306.5 26.04
1311.3 26.11
1316.0 26.18
1320.8 26.26
1325.5 26.33
1330.3 26.40
1335.0 26.48
1339.8 26.55
1344.5 26.62
1349.3 26.69
1354.0 26.77
1358.8 26.84
1363.5 26.91
1368.3 26.98
1373.0 27.06
1377.8 27.13
1382.5 27.20
1387.3 27.27
1392.0 27.35
1396.8 27.42
1401.5 27.49
1406.3 27.56
1411.0 27.63
1415.8 27.71
1420.5 27.78
1425.3 27.85
1430.0 27.92
1434.8 28.00
1439.5 28.07
1444.3 28.14
1449.0 28.21
1453.8 28.28
1458.5 28.35
1463.3 28.43
1468.0 28.50
1472.8 28.57
1477.5 28.64
1482.3 28.71
1487.0 28.79
1491.8 28.86
1496.5 28.93
1501.3 29.00
1506.0 29.07
1510.8 29.14
1515.5 29.21
1520.3 29.29
1525.0 29.36
1529.8 29.43
1534.5 29.50
1539.3 29.57
1544.0 29.64
1548.8 29.71
1553.5 29.79
1558.3 29.86
1563.0 29.93
1567.8 30.00
1572.5 30.07
1577.3 30.14
1582.0 30.21
1586.8 30.28
1591.5 30.35
1596.3 30.43
1601.0 30.50
1605.8 30.57
1610.5 30.64
1615.3 30.71
1620.0 30.78
1624.8 30.85
1629.5 30.92
1634.3 30.99
1639.0 31.06
1643.8 31.13
1648.5 31.20
1653.3 31.28
1658.0 31.35
1662.8 31.42
1667.5 31.49
1672.3 31.56
1677.0 31.63
1681.8 31.70
1686.5 31.77
1691.3 31.84
1696.0 31.91
1700.8 31.98
1705.5 32.05
1710.3 32.12
1715.0 32.19
1719.8 32.26
1724.5 32.33
1729.3 32.40
1734.0 32.47
1738.8 32.54
1743.5 32.61
1748.3 32.68
1753.0 32.75
1757.8 32.82
1762.5 32.89
1767.3 32.96
1772.0 33.03
1776.8 33.10
1781.5 33.17
1786.3 33.24
1791.0 33.31
1795.8 33.38
1800.5 33.45
1805.3 33.52
1810.0 33.59
1814.8 33.66
1819.5 33.73
1824.3 33.80
1829.0 33.87
1833.8 33.94
1838.5 34.01
1843.3 34.08
1848.0 34.15
1852.8 34.22
1857.5 34.29
1862.3 34.36
1867.0 34.43
1871.8 34.50
1876.5 34.57
1881.3 34.64
1886.0 34.71
1890.8 34.78
1895.5 34.84
1900.3 34.91
1905.0 34.98
1909.8 35.05
1914.5 35.12
1919.3 35.19
1924.0 35.26
1928.8 35.33
1933.5 35.40
1938.3 35.47
1943.0 35.54
1947.8 35.61
1952.5 35.68
1957.3 35.74
1962.0 35.81
1966.8 35.88
1971.5 35.95
1976.3 36.02
1981.0 36.09
1985.8 36.16
1990.5 36.23
1995.3 36.30
2000.0 36.36
@@ -0,0 +1,422 @@
ELEMENT:
Si
SOURCE:
Tanuma, Powell and Penn
Surface Interface Anal. 17 (1991) 911.
IMFP values determined from optical data and a theoretical model
ATOMIC WEIGHT: 28.08550
DENSITY: 2.3290 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
50.0 4.07
54.9 4.17
59.8 4.28
64.6 4.40
69.5 4.51
74.4 4.63
79.3 4.75
84.1 4.87
89.0 4.99
93.9 5.12
98.8 5.24
103.6 5.37
108.5 5.49
113.4 5.61
118.3 5.74
123.1 5.86
128.0 5.99
132.9 6.11
137.8 6.23
142.6 6.36
147.5 6.48
152.4 6.60
157.3 6.72
162.1 6.84
167.0 6.97
171.9 7.09
176.8 7.21
181.6 7.33
186.5 7.45
191.4 7.57
196.3 7.69
201.1 7.81
206.0 7.92
210.9 8.04
215.8 8.16
220.6 8.28
225.5 8.39
230.4 8.51
235.3 8.63
240.1 8.74
245.0 8.86
249.9 8.97
254.8 9.09
259.6 9.20
264.5 9.32
269.4 9.43
274.3 9.54
279.1 9.66
284.0 9.77
288.9 9.88
293.8 10.00
298.6 10.11
303.5 10.22
308.4 10.33
313.3 10.44
318.1 10.55
323.0 10.67
327.9 10.78
332.8 10.89
337.6 11.00
342.5 11.11
347.4 11.22
352.3 11.33
357.1 11.43
362.0 11.54
366.9 11.65
371.8 11.76
376.6 11.87
381.5 11.98
386.4 12.08
391.3 12.19
396.1 12.30
401.0 12.41
405.9 12.51
410.8 12.62
415.6 12.73
420.5 12.83
425.4 12.94
430.3 13.05
435.1 13.15
440.0 13.26
444.9 13.36
449.8 13.47
454.6 13.57
459.5 13.68
464.4 13.78
469.3 13.89
474.1 13.99
479.0 14.09
483.9 14.20
488.8 14.30
493.6 14.41
498.5 14.51
503.4 14.61
508.3 14.72
513.1 14.82
518.0 14.92
522.9 15.02
527.8 15.13
532.6 15.23
537.5 15.33
542.4 15.43
547.3 15.54
552.1 15.64
557.0 15.74
561.9 15.84
566.8 15.94
571.6 16.04
576.5 16.14
581.4 16.24
586.3 16.35
591.1 16.45
596.0 16.55
600.9 16.65
605.8 16.75
610.6 16.85
615.5 16.95
620.4 17.05
625.3 17.15
630.1 17.25
635.0 17.35
639.9 17.45
644.8 17.54
649.6 17.64
654.5 17.74
659.4 17.84
664.3 17.94
669.1 18.04
674.0 18.14
678.9 18.24
683.8 18.33
688.6 18.43
693.5 18.53
698.4 18.63
703.3 18.73
708.1 18.82
713.0 18.92
717.9 19.02
722.8 19.12
727.6 19.21
732.5 19.31
737.4 19.41
742.3 19.51
747.1 19.60
752.0 19.70
756.9 19.80
761.8 19.89
766.6 19.99
771.5 20.09
776.4 20.18
781.3 20.28
786.1 20.37
791.0 20.47
795.9 20.57
800.8 20.66
805.6 20.76
810.5 20.85
815.4 20.95
820.3 21.05
825.1 21.14
830.0 21.24
834.9 21.33
839.8 21.43
844.6 21.52
849.5 21.62
854.4 21.71
859.3 21.81
864.1 21.90
869.0 22.00
873.9 22.09
878.8 22.18
883.6 22.28
888.5 22.37
893.4 22.47
898.3 22.56
903.1 22.66
908.0 22.75
912.9 22.84
917.8 22.94
922.6 23.03
927.5 23.12
932.4 23.22
937.3 23.31
942.1 23.41
947.0 23.50
951.9 23.59
956.8 23.69
961.6 23.78
966.5 23.87
971.4 23.96
976.3 24.06
981.1 24.15
986.0 24.24
990.9 24.34
995.8 24.43
1000.6 24.52
1005.5 24.61
1010.4 24.71
1015.3 24.80
1020.1 24.89
1025.0 24.98
1029.9 25.07
1034.8 25.17
1039.6 25.26
1044.5 25.35
1049.4 25.44
1054.3 25.53
1059.1 25.63
1064.0 25.72
1068.9 25.81
1073.8 25.90
1078.6 25.99
1083.5 26.08
1088.4 26.18
1093.3 26.27
1098.1 26.36
1103.0 26.45
1107.9 26.54
1112.8 26.63
1117.6 26.72
1122.5 26.81
1127.4 26.90
1132.3 26.99
1137.1 27.09
1142.0 27.18
1146.9 27.27
1151.8 27.36
1156.6 27.45
1161.5 27.54
1166.4 27.63
1171.3 27.72
1176.1 27.81
1181.0 27.90
1185.9 27.99
1190.8 28.08
1195.6 28.17
1200.5 28.26
1205.4 28.35
1210.3 28.44
1215.1 28.53
1220.0 28.62
1224.9 28.71
1229.8 28.80
1234.6 28.89
1239.5 28.98
1244.4 29.07
1249.3 29.16
1254.1 29.25
1259.0 29.34
1263.9 29.42
1268.8 29.51
1273.6 29.60
1278.5 29.69
1283.4 29.78
1288.3 29.87
1293.1 29.96
1298.0 30.05
1302.9 30.14
1307.8 30.23
1312.6 30.31
1317.5 30.40
1322.4 30.49
1327.3 30.58
1332.1 30.67
1337.0 30.76
1341.9 30.85
1346.8 30.93
1351.6 31.02
1356.5 31.11
1361.4 31.20
1366.3 31.29
1371.1 31.38
1376.0 31.46
1380.9 31.55
1385.8 31.64
1390.6 31.73
1395.5 31.82
1400.4 31.90
1405.3 31.99
1410.1 32.08
1415.0 32.17
1419.9 32.26
1424.8 32.34
1429.6 32.43
1434.5 32.52
1439.4 32.61
1444.3 32.69
1449.1 32.78
1454.0 32.87
1458.9 32.96
1463.8 33.04
1468.6 33.13
1473.5 33.22
1478.4 33.30
1483.3 33.39
1488.1 33.48
1493.0 33.57
1497.9 33.65
1502.8 33.74
1507.6 33.83
1512.5 33.91
1517.4 34.00
1522.3 34.09
1527.1 34.17
1532.0 34.26
1536.9 34.35
1541.8 34.43
1546.6 34.52
1551.5 34.61
1556.4 34.69
1561.3 34.78
1566.1 34.87
1571.0 34.95
1575.9 35.04
1580.8 35.13
1585.6 35.21
1590.5 35.30
1595.4 35.39
1600.3 35.47
1605.1 35.56
1610.0 35.64
1614.9 35.73
1619.8 35.82
1624.6 35.90
1629.5 35.99
1634.4 36.07
1639.3 36.16
1644.1 36.24
1649.0 36.33
1653.9 36.42
1658.8 36.50
1663.6 36.59
1668.5 36.67
1673.4 36.76
1678.3 36.84
1683.1 36.93
1688.0 37.02
1692.9 37.10
1697.8 37.19
1702.6 37.27
1707.5 37.36
1712.4 37.44
1717.3 37.53
1722.1 37.61
1727.0 37.70
1731.9 37.78
1736.8 37.87
1741.6 37.95
1746.5 38.04
1751.4 38.12
1756.3 38.21
1761.1 38.29
1766.0 38.38
1770.9 38.46
1775.8 38.55
1780.6 38.63
1785.5 38.72
1790.4 38.80
1795.3 38.89
1800.1 38.97
1805.0 39.06
1809.9 39.14
1814.8 39.23
1819.6 39.31
1824.5 39.39
1829.4 39.48
1834.3 39.56
1839.1 39.65
1844.0 39.73
1848.9 39.82
1853.8 39.90
1858.6 39.99
1863.5 40.07
1868.4 40.15
1873.3 40.24
1878.1 40.32
1883.0 40.41
1887.9 40.49
1892.8 40.57
1897.6 40.66
1902.5 40.74
1907.4 40.83
1912.3 40.91
1917.1 40.99
1922.0 41.08
1926.9 41.16
1931.8 41.25
1936.6 41.33
1941.5 41.41
1946.4 41.50
1951.3 41.58
1956.1 41.66
1961.0 41.75
1965.9 41.83
1970.8 41.92
1975.6 42.00
1980.5 42.08
1985.4 42.17
1990.3 42.25
1995.1 42.33
2000.0 42.42
@@ -0,0 +1,422 @@
ELEMENT:
Si
SOURCE:
Tung et al.
US Air Force Report RADC-TR-76-125 (April 1976)
IMFP values determined from optical data and a theoretical model
ATOMIC WEIGHT: 28.08550
DENSITY: 2.3290 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
40.0 1.38
64.9 2.08
89.8 2.73
114.7 3.35
139.6 3.95
164.5 4.53
189.4 5.10
214.3 5.65
239.2 6.20
264.1 6.74
289.0 7.27
313.9 7.79
338.8 8.30
363.7 8.81
388.6 9.31
413.5 9.81
438.4 10.30
463.3 10.79
488.2 11.27
513.1 11.75
538.0 12.23
562.9 12.70
587.8 13.17
612.7 13.64
637.6 14.10
662.5 14.56
687.4 15.02
712.3 15.47
737.2 15.93
762.1 16.38
787.0 16.82
811.9 17.27
836.8 17.71
861.7 18.15
886.6 18.59
911.5 19.03
936.4 19.46
961.3 19.90
986.2 20.33
1011.1 20.76
1036.0 21.18
1060.9 21.61
1085.8 22.03
1110.7 22.46
1135.6 22.88
1160.5 23.30
1185.4 23.72
1210.3 24.13
1235.2 24.55
1260.1 24.96
1285.0 25.37
1309.9 25.79
1334.8 26.20
1359.7 26.61
1384.6 27.01
1409.5 27.42
1434.4 27.82
1459.3 28.23
1484.2 28.63
1509.1 29.03
1534.0 29.44
1558.9 29.84
1583.8 30.23
1608.7 30.63
1633.6 31.03
1658.5 31.43
1683.4 31.82
1708.3 32.21
1733.2 32.61
1758.1 33.00
1783.0 33.39
1807.9 33.78
1832.8 34.17
1857.7 34.56
1882.6 34.95
1907.5 35.33
1932.4 35.72
1957.3 36.11
1982.2 36.49
2007.1 36.87
2032.0 37.26
2056.9 37.64
2081.8 38.02
2106.7 38.40
2131.6 38.78
2156.5 39.16
2181.4 39.54
2206.3 39.92
2231.2 40.30
2256.1 40.67
2281.0 41.05
2305.9 41.42
2330.8 41.80
2355.7 42.17
2380.6 42.55
2405.5 42.92
2430.4 43.29
2455.3 43.66
2480.2 44.03
2505.1 44.40
2530.0 44.77
2554.9 45.14
2579.8 45.51
2604.7 45.88
2629.6 46.24
2654.5 46.61
2679.4 46.98
2704.3 47.34
2729.2 47.71
2754.1 48.07
2779.0 48.44
2803.9 48.80
2828.8 49.16
2853.7 49.53
2878.6 49.89
2903.5 50.25
2928.4 50.61
2953.3 50.97
2978.2 51.33
3003.1 51.69
3028.0 52.05
3052.9 52.41
3077.8 52.77
3102.7 53.12
3127.6 53.48
3152.5 53.84
3177.4 54.19
3202.3 54.55
3227.2 54.90
3252.1 55.26
3277.0 55.61
3301.9 55.97
3326.8 56.32
3351.7 56.67
3376.6 57.03
3401.5 57.38
3426.4 57.73
3451.3 58.08
3476.2 58.43
3501.1 58.78
3526.0 59.13
3550.9 59.48
3575.8 59.83
3600.7 60.18
3625.6 60.53
3650.5 60.88
3675.4 61.23
3700.3 61.58
3725.2 61.92
3750.1 62.27
3775.0 62.62
3799.9 62.96
3824.8 63.31
3849.7 63.65
3874.6 64.00
3899.5 64.34
3924.4 64.69
3949.3 65.03
3974.2 65.37
3999.1 65.72
4024.0 66.06
4048.9 66.40
4073.8 66.74
4098.7 67.09
4123.6 67.43
4148.5 67.77
4173.4 68.11
4198.3 68.45
4223.2 68.79
4248.1 69.13
4273.0 69.47
4297.9 69.81
4322.8 70.15
4347.7 70.49
4372.6 70.82
4397.5 71.16
4422.4 71.50
4447.3 71.84
4472.2 72.17
4497.1 72.51
4522.0 72.85
4546.9 73.18
4571.8 73.52
4596.7 73.85
4621.6 74.19
4646.5 74.52
4671.4 74.86
4696.3 75.19
4721.2 75.53
4746.1 75.86
4771.0 76.19
4795.9 76.53
4820.8 76.86
4845.7 77.19
4870.6 77.53
4895.5 77.86
4920.4 78.19
4945.3 78.52
4970.2 78.85
4995.1 79.18
5020.0 79.51
5044.9 79.84
5069.8 80.17
5094.7 80.50
5119.6 80.83
5144.5 81.16
5169.4 81.49
5194.3 81.82
5219.2 82.15
5244.1 82.48
5269.0 82.81
5293.9 83.13
5318.8 83.46
5343.7 83.79
5368.6 84.12
5393.5 84.44
5418.4 84.77
5443.3 85.10
5468.2 85.42
5493.1 85.75
5518.0 86.07
5542.9 86.40
5567.8 86.73
5592.7 87.05
5617.6 87.37
5642.5 87.70
5667.4 88.02
5692.3 88.35
5717.2 88.67
5742.1 89.00
5767.0 89.32
5791.9 89.64
5816.8 89.96
5841.7 90.29
5866.6 90.61
5891.5 90.93
5916.4 91.25
5941.3 91.58
5966.2 91.90
5991.1 92.22
6016.0 92.54
6040.9 92.86
6065.8 93.18
6090.7 93.50
6115.6 93.82
6140.5 94.14
6165.4 94.46
6190.3 94.78
6215.2 95.10
6240.1 95.42
6265.0 95.74
6289.9 96.06
6314.8 96.38
6339.7 96.70
6364.6 97.01
6389.5 97.33
6414.4 97.65
6439.3 97.97
6464.2 98.28
6489.1 98.60
6514.0 98.92
6538.9 99.24
6563.8 99.55
6588.7 99.87
6613.6 100.19
6638.5 100.50
6663.4 100.82
6688.3 101.13
6713.2 101.45
6738.1 101.76
6763.0 102.08
6787.9 102.39
6812.8 102.71
6837.7 103.02
6862.6 103.34
6887.5 103.65
6912.4 103.97
6937.3 104.28
6962.2 104.59
6987.1 104.91
7012.0 105.22
7036.9 105.53
7061.8 105.85
7086.7 106.16
7111.6 106.47
7136.5 106.78
7161.4 107.10
7186.3 107.41
7211.2 107.72
7236.1 108.03
7261.0 108.34
7285.9 108.65
7310.8 108.97
7335.7 109.28
7360.6 109.59
7385.5 109.90
7410.4 110.21
7435.3 110.52
7460.2 110.83
7485.1 111.14
7510.0 111.45
7534.9 111.76
7559.8 112.07
7584.7 112.38
7609.6 112.69
7634.5 113.00
7659.4 113.30
7684.3 113.61
7709.2 113.92
7734.1 114.23
7759.0 114.54
7783.9 114.85
7808.8 115.15
7833.7 115.46
7858.6 115.77
7883.5 116.08
7908.4 116.38
7933.3 116.69
7958.2 117.00
7983.1 117.30
8008.0 117.61
8032.9 117.92
8057.8 118.22
8082.7 118.53
8107.6 118.84
8132.5 119.14
8157.4 119.45
8182.3 119.75
8207.2 120.06
8232.1 120.36
8257.0 120.67
8281.9 120.97
8306.8 121.28
8331.7 121.58
8356.6 121.89
8381.5 122.19
8406.4 122.50
8431.3 122.80
8456.2 123.10
8481.1 123.41
8506.0 123.71
8530.9 124.01
8555.8 124.32
8580.7 124.62
8605.6 124.92
8630.5 125.23
8655.4 125.53
8680.3 125.83
8705.2 126.13
8730.1 126.44
8755.0 126.74
8779.9 127.04
8804.8 127.34
8829.7 127.65
8854.6 127.95
8879.5 128.25
8904.4 128.55
8929.3 128.85
8954.2 129.15
8979.1 129.45
9004.0 129.75
9028.9 130.05
9053.8 130.36
9078.7 130.66
9103.6 130.96
9128.5 131.26
9153.4 131.56
9178.3 131.86
9203.2 132.16
9228.1 132.46
9253.0 132.75
9277.9 133.05
9302.8 133.35
9327.7 133.65
9352.6 133.95
9377.5 134.25
9402.4 134.55
9427.3 134.85
9452.2 135.15
9477.1 135.44
9502.0 135.74
9526.9 136.04
9551.8 136.34
9576.7 136.64
9601.6 136.93
9626.5 137.23
9651.4 137.53
9676.3 137.83
9701.2 138.12
9726.1 138.42
9751.0 138.72
9775.9 139.02
9800.8 139.31
9825.7 139.61
9850.6 139.90
9875.5 140.20
9900.4 140.50
9925.3 140.79
9950.2 141.09
9975.1 141.39
10000.0 141.68
@@ -0,0 +1,425 @@
ELEMENT:
Si
SOURCE:
Elastic peak electron spectroscopy
IMFPs determined from the intensity of the elastic peak
Multiple elastic scattering simulated by the Monte Carlo method
COMMENT:
Gergely et al., Vacuum 48 (1997) 621
ATOMIC WEIGHT: 28.08550
DENSITY: 2.3290 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
100.0 4.43
112.3 4.86
124.5 5.28
136.8 5.69
149.0 6.09
161.3 6.49
173.5 6.88
185.8 7.26
198.0 7.64
210.3 8.02
222.5 8.39
234.8 8.75
247.0 9.11
259.3 9.47
271.5 9.83
283.8 10.18
296.0 10.53
308.3 10.87
320.5 11.22
332.8 11.56
345.0 11.89
357.3 12.23
369.5 12.56
381.8 12.89
394.0 13.22
406.3 13.55
418.5 13.87
430.8 14.20
443.0 14.52
455.3 14.84
467.5 15.15
479.8 15.47
492.0 15.78
504.3 16.10
516.5 16.41
528.8 16.72
541.0 17.02
553.3 17.33
565.5 17.64
577.8 17.94
590.0 18.24
602.3 18.54
614.5 18.84
626.8 19.14
639.0 19.44
651.3 19.74
663.5 20.03
675.8 20.33
688.0 20.62
700.3 20.91
712.5 21.20
724.8 21.49
737.0 21.78
749.3 22.07
761.5 22.36
773.8 22.64
786.0 22.93
798.3 23.21
810.5 23.49
822.8 23.78
835.0 24.06
847.3 24.34
859.5 24.62
871.8 24.90
884.0 25.18
896.3 25.46
908.5 25.73
920.8 26.01
933.0 26.28
945.3 26.56
957.5 26.83
969.8 27.11
982.0 27.38
994.3 27.65
1006.5 27.92
1018.8 28.19
1031.0 28.46
1043.3 28.73
1055.5 29.00
1067.8 29.27
1080.0 29.53
1092.3 29.80
1104.5 30.07
1116.8 30.33
1129.0 30.60
1141.3 30.86
1153.5 31.13
1165.8 31.39
1178.0 31.65
1190.3 31.91
1202.5 32.18
1214.8 32.44
1227.0 32.70
1239.3 32.96
1251.5 33.22
1263.8 33.47
1276.0 33.73
1288.3 33.99
1300.5 34.25
1312.8 34.51
1325.0 34.76
1337.3 35.02
1349.5 35.27
1361.8 35.53
1374.0 35.78
1386.3 36.04
1398.5 36.29
1410.8 36.54
1423.0 36.80
1435.3 37.05
1447.5 37.30
1459.8 37.55
1472.0 37.80
1484.3 38.05
1496.5 38.30
1508.8 38.55
1521.0 38.80
1533.3 39.05
1545.5 39.30
1557.8 39.55
1570.0 39.79
1582.3 40.04
1594.5 40.29
1606.8 40.54
1619.0 40.78
1631.3 41.03
1643.5 41.27
1655.8 41.52
1668.0 41.76
1680.3 42.01
1692.5 42.25
1704.8 42.49
1717.0 42.74
1729.3 42.98
1741.5 43.22
1753.8 43.46
1766.0 43.71
1778.3 43.95
1790.5 44.19
1802.8 44.43
1815.0 44.67
1827.3 44.91
1839.5 45.15
1851.8 45.39
1864.0 45.63
1876.3 45.87
1888.5 46.11
1900.8 46.34
1913.0 46.58
1925.3 46.82
1937.5 47.06
1949.8 47.29
1962.0 47.53
1974.3 47.77
1986.5 48.00
1998.8 48.24
2011.0 48.47
2023.3 48.71
2035.5 48.94
2047.8 49.18
2060.0 49.41
2072.3 49.65
2084.5 49.88
2096.8 50.11
2109.0 50.35
2121.3 50.58
2133.5 50.81
2145.8 51.05
2158.0 51.28
2170.3 51.51
2182.5 51.74
2194.8 51.97
2207.0 52.20
2219.3 52.43
2231.5 52.67
2243.8 52.90
2256.0 53.13
2268.3 53.36
2280.5 53.59
2292.8 53.81
2305.0 54.04
2317.3 54.27
2329.5 54.50
2341.8 54.73
2354.0 54.96
2366.3 55.18
2378.5 55.41
2390.8 55.64
2403.0 55.87
2415.3 56.09
2427.5 56.32
2439.8 56.55
2452.0 56.77
2464.3 57.00
2476.5 57.22
2488.8 57.45
2501.0 57.68
2513.3 57.90
2525.5 58.13
2537.8 58.35
2550.0 58.57
2562.3 58.80
2574.5 59.02
2586.8 59.25
2599.0 59.47
2611.3 59.69
2623.5 59.92
2635.8 60.14
2648.0 60.36
2660.3 60.58
2672.5 60.81
2684.8 61.03
2697.0 61.25
2709.3 61.47
2721.5 61.69
2733.8 61.91
2746.0 62.14
2758.3 62.36
2770.5 62.58
2782.8 62.80
2795.0 63.02
2807.3 63.24
2819.5 63.46
2831.8 63.68
2844.0 63.90
2856.3 64.12
2868.5 64.33
2880.8 64.55
2893.0 64.77
2905.3 64.99
2917.5 65.21
2929.8 65.43
2942.0 65.65
2954.3 65.86
2966.5 66.08
2978.8 66.30
2991.0 66.52
3003.3 66.73
3015.5 66.95
3027.8 67.17
3040.0 67.38
3052.3 67.60
3064.5 67.81
3076.8 68.03
3089.0 68.25
3101.3 68.46
3113.5 68.68
3125.8 68.89
3138.0 69.11
3150.3 69.32
3162.5 69.54
3174.8 69.75
3187.0 69.97
3199.3 70.18
3211.5 70.39
3223.8 70.61
3236.0 70.82
3248.3 71.04
3260.5 71.25
3272.8 71.46
3285.0 71.68
3297.3 71.89
3309.5 72.10
3321.8 72.31
3334.0 72.53
3346.3 72.74
3358.5 72.95
3370.8 73.16
3383.0 73.37
3395.3 73.59
3407.5 73.80
3419.8 74.01
3432.0 74.22
3444.3 74.43
3456.5 74.64
3468.8 74.85
3481.0 75.06
3493.3 75.27
3505.5 75.48
3517.8 75.69
3530.0 75.90
3542.3 76.11
3554.5 76.32
3566.8 76.53
3579.0 76.74
3591.3 76.95
3603.5 77.16
3615.8 77.37
3628.0 77.58
3640.3 77.79
3652.5 78.00
3664.8 78.21
3677.0 78.41
3689.3 78.62
3701.5 78.83
3713.8 79.04
3726.0 79.25
3738.3 79.45
3750.5 79.66
3762.8 79.87
3775.0 80.07
3787.3 80.28
3799.5 80.49
3811.8 80.70
3824.0 80.90
3836.3 81.11
3848.5 81.32
3860.8 81.52
3873.0 81.73
3885.3 81.93
3897.5 82.14
3909.8 82.34
3922.0 82.55
3934.3 82.76
3946.5 82.96
3958.8 83.17
3971.0 83.37
3983.3 83.58
3995.5 83.78
4007.8 83.99
4020.0 84.19
4032.3 84.39
4044.5 84.60
4056.8 84.80
4069.0 85.01
4081.3 85.21
4093.5 85.41
4105.8 85.62
4118.0 85.82
4130.3 86.03
4142.5 86.23
4154.8 86.43
4167.0 86.63
4179.3 86.84
4191.5 87.04
4203.8 87.24
4216.0 87.45
4228.3 87.65
4240.5 87.85
4252.8 88.05
4265.0 88.26
4277.3 88.46
4289.5 88.66
4301.8 88.86
4314.0 89.06
4326.3 89.26
4338.5 89.47
4350.8 89.67
4363.0 89.87
4375.3 90.07
4387.5 90.27
4399.8 90.47
4412.0 90.67
4424.3 90.87
4436.5 91.07
4448.8 91.27
4461.0 91.47
4473.3 91.67
4485.5 91.87
4497.8 92.07
4510.0 92.27
4522.3 92.47
4534.5 92.67
4546.8 92.87
4559.0 93.07
4571.3 93.27
4583.5 93.47
4595.8 93.67
4608.0 93.87
4620.3 94.07
4632.5 94.26
4644.8 94.46
4657.0 94.66
4669.3 94.86
4681.5 95.06
4693.8 95.26
4706.0 95.45
4718.3 95.65
4730.5 95.85
4742.8 96.05
4755.0 96.25
4767.3 96.44
4779.5 96.64
4791.8 96.84
4804.0 97.04
4816.3 97.23
4828.5 97.43
4840.8 97.63
4853.0 97.82
4865.3 98.02
4877.5 98.22
4889.8 98.41
4902.0 98.61
4914.3 98.81
4926.5 99.00
4938.8 99.20
4951.0 99.39
4963.3 99.59
4975.5 99.79
4987.8 99.98
5000.0 100.18
@@ -0,0 +1,425 @@
ELEMENT:
Si
SOURCE:
Elastic peak electron spectroscopy
IMFPs determined from the intensity of the elastic peak
Multiple elastic scattering simulated by the Monte Carlo method
COMMENT:
Lesiak et al., Proc. ECASIA 95, Wiley, Chichester (1996), p. 619
ATOMIC WEIGHT: 28.08550
DENSITY: 2.3290 g/cm**3
TABULATION:
______________________________________________________________________________
Energy IMFP
eV Angstroms
______________________________________________________________________________
100.0 4.94
103.5 5.07
107.0 5.20
110.5 5.32
114.0 5.45
117.5 5.57
121.0 5.70
124.5 5.82
128.0 5.94
131.5 6.06
135.0 6.18
138.5 6.30
142.0 6.42
145.5 6.53
149.0 6.65
152.5 6.77
156.0 6.88
159.5 7.00
163.0 7.11
166.5 7.22
170.0 7.34
173.5 7.45
177.0 7.56
180.5 7.67
184.0 7.78
187.5 7.89
191.0 8.00
194.5 8.11
198.0 8.22
201.5 8.33
205.0 8.44
208.5 8.54
212.0 8.65
215.5 8.76
219.0 8.86
222.5 8.97
226.0 9.07
229.5 9.18
233.0 9.28
236.5 9.38
240.0 9.49
243.5 9.59
247.0 9.69
250.5 9.79
254.0 9.90
257.5 10.00
261.0 10.10
264.5 10.20
268.0 10.30
271.5 10.40
275.0 10.50
278.5 10.60
282.0 10.70
285.5 10.80
289.0 10.89
292.5 10.99
296.0 11.09
299.5 11.19
303.0 11.29
306.5 11.38
310.0 11.48
313.5 11.58
317.0 11.67
320.5 11.77
324.0 11.86
327.5 11.96
331.0 12.05
334.5 12.15
338.0 12.24
341.5 12.34
345.0 12.43
348.5 12.53
352.0 12.62
355.5 12.71
359.0 12.81
362.5 12.90
366.0 12.99
369.5 13.08
373.0 13.18
376.5 13.27
380.0 13.36
383.5 13.45
387.0 13.54
390.5 13.63
394.0 13.72
397.5 13.82
401.0 13.91
404.5 14.00
408.0 14.09
411.5 14.18
415.0 14.27
418.5 14.36
422.0 14.44
425.5 14.53
429.0 14.62
432.5 14.71
436.0 14.80
439.5 14.89
443.0 14.98
446.5 15.06
450.0 15.15
453.5 15.24
457.0 15.33
460.5 15.42
464.0 15.50
467.5 15.59
471.0 15.68
474.5 15.76
478.0 15.85
481.5 15.94
485.0 16.02
488.5 16.11
492.0 16.19
495.5 16.28
499.0 16.37
502.5 16.45
506.0 16.54
509.5 16.62
513.0 16.71
516.5 16.79
520.0 16.88
523.5 16.96
527.0 17.05
530.5 17.13
534.0 17.21
537.5 17.30
541.0 17.38
544.5 17.46
548.0 17.55
551.5 17.63
555.0 17.72
558.5 17.80
562.0 17.88
565.5 17.96
569.0 18.05
572.5 18.13
576.0 18.21
579.5 18.29
583.0 18.38
586.5 18.46
590.0 18.54
593.5 18.62
597.0 18.70
600.5 18.79
604.0 18.87
607.5 18.95
611.0 19.03
614.5 19.11
618.0 19.19
621.5 19.27
625.0 19.35
628.5 19.44
632.0 19.52
635.5 19.60
639.0 19.68
642.5 19.76
646.0 19.84
649.5 19.92
653.0 20.00
656.5 20.08
660.0 20.16
663.5 20.24
667.0 20.32
670.5 20.39
674.0 20.47
677.5 20.55
681.0 20.63
684.5 20.71
688.0 20.79
691.5 20.87
695.0 20.95
698.5 21.03
702.0 21.10
705.5 21.18
709.0 21.26
712.5 21.34
716.0 21.42
719.5 21.49
723.0 21.57
726.5 21.65
730.0 21.73
733.5 21.81
737.0 21.88
740.5 21.96
744.0 22.04
747.5 22.12
751.0 22.19
754.5 22.27
758.0 22.35
761.5 22.42
765.0 22.50
768.5 22.58
772.0 22.65
775.5 22.73
779.0 22.81
782.5 22.88
786.0 22.96
789.5 23.03
793.0 23.11
796.5 23.19
800.0 23.26
803.5 23.34
807.0 23.41
810.5 23.49
814.0 23.56
817.5 23.64
821.0 23.72
824.5 23.79
828.0 23.87
831.5 23.94
835.0 24.02
838.5 24.09
842.0 24.17
845.5 24.24
849.0 24.32
852.5 24.39
856.0 24.46
859.5 24.54
863.0 24.61
866.5 24.69
870.0 24.76
873.5 24.84
877.0 24.91
880.5 24.98
884.0 25.06
887.5 25.13
891.0 25.21
894.5 25.28
898.0 25.35
901.5 25.43
905.0 25.50
908.5 25.57
912.0 25.65
915.5 25.72
919.0 25.79
922.5 25.87
926.0 25.94
929.5 26.01
933.0 26.09
936.5 26.16
940.0 26.23
943.5 26.30
947.0 26.38
950.5 26.45
954.0 26.52
957.5 26.59
961.0 26.67
964.5 26.74
968.0 26.81
971.5 26.88
975.0 26.96
978.5 27.03
982.0 27.10
985.5 27.17
989.0 27.24
992.5 27.32
996.0 27.39
999.5 27.46
1003.0 27.53
1006.5 27.60
1010.0 27.67
1013.5 27.75
1017.0 27.82
1020.5 27.89
1024.0 27.96
1027.5 28.03
1031.0 28.10
1034.5 28.17
1038.0 28.24
1041.5 28.31
1045.0 28.39
1048.5 28.46
1052.0 28.53
1055.5 28.60
1059.0 28.67
1062.5 28.74
1066.0 28.81
1069.5 28.88
1073.0 28.95
1076.5 29.02
1080.0 29.09
1083.5 29.16
1087.0 29.23
1090.5 29.30
1094.0 29.37
1097.5 29.44
1101.0 29.51
1104.5 29.58
1108.0 29.65
1111.5 29.72
1115.0 29.79
1118.5 29.86
1122.0 29.93
1125.5 30.00
1129.0 30.07
1132.5 30.14
1136.0 30.21
1139.5 30.28
1143.0 30.35
1146.5 30.41
1150.0 30.48
1153.5 30.55
1157.0 30.62
1160.5 30.69
1164.0 30.76
1167.5 30.83
1171.0 30.90
1174.5 30.97
1178.0 31.03
1181.5 31.10
1185.0 31.17
1188.5 31.24
1192.0 31.31
1195.5 31.38
1199.0 31.45
1202.5 31.51
1206.0 31.58
1209.5 31.65
1213.0 31.72
1216.5 31.79
1220.0 31.86
1223.5 31.92
1227.0 31.99
1230.5 32.06
1234.0 32.13
1237.5 32.20
1241.0 32.26
1244.5 32.33
1248.0 32.40
1251.5 32.47
1255.0 32.53
1258.5 32.60
1262.0 32.67
1265.5 32.74
1269.0 32.80
1272.5 32.87
1276.0 32.94
1279.5 33.01
1283.0 33.07
1286.5 33.14
1290.0 33.21
1293.5 33.27
1297.0 33.34
1300.5 33.41
1304.0 33.48
1307.5 33.54
1311.0 33.61
1314.5 33.68
1318.0 33.74
1321.5 33.81
1325.0 33.88
1328.5 33.94
1332.0 34.01
1335.5 34.08
1339.0 34.14
1342.5 34.21
1346.0 34.28
1349.5 34.34
1353.0 34.41
1356.5 34.47
1360.0 34.54
1363.5 34.61
1367.0 34.67
1370.5 34.74
1374.0 34.81
1377.5 34.87
1381.0 34.94
1384.5 35.00
1388.0 35.07
1391.5 35.14
1395.0 35.20
1398.5 35.27
1402.0 35.33
1405.5 35.40
1409.0 35.46
1412.5 35.53
1416.0 35.60
1419.5 35.66
1423.0 35.73
1426.5 35.79
1430.0 35.86
1433.5 35.92
1437.0 35.99
1440.5 36.05
1444.0 36.12
1447.5 36.18
1451.0 36.25
1454.5 36.31
1458.0 36.38
1461.5 36.44
1465.0 36.51
1468.5 36.57
1472.0 36.64
1475.5 36.70
1479.0 36.77
1482.5 36.83
1486.0 36.90
1489.5 36.96
1493.0 37.03
1496.5 37.09
1500.0 37.16
Loaded 100 of 1357 files, more files were not shown because too many files have changed in this diff. Show more