99 lines
4.6 KiB
Matlab
99 lines
4.6 KiB
Matlab
function DataTable = nappCopyShift(DataTable,varargin)
|
|
%nappBindingEnergyXps calculates the binding energy scale for spectra based
|
|
%on the binding energy shift.
|
|
%
|
|
% For each spectrum with a given file number, the function copies the shift from data of a specified
|
|
% region to another region of choice.
|
|
%
|
|
% *Requirement*
|
|
% Needs table variable bindingEnergyShift as input. Run
|
|
% nappDetermineShiftXps.m first on selected region.
|
|
%
|
|
% FileList = nappCopyShift(FileList,tmpDataSelection,'energyScale','binding');
|
|
%
|
|
% *input*
|
|
% FileList: data table
|
|
% tableSelection (optional): logical array to filter data table
|
|
% regionOld: O1s (default) or C1s - source of shift data
|
|
% regionNew: C1s (default), N1s or O1s - shift data will be copied to this
|
|
% region
|
|
% energyScale: kinetic (default) or binding: process either the kinetic
|
|
% (for images) or the binding energy shift data (for spectra)
|
|
%
|
|
% *output*
|
|
% Table variable bindingEnergy_eV holding the binding energy for
|
|
% the data.
|
|
%
|
|
% See also nappnappAlignImages.m nappBindingEnergyXps nappFitGaussXps.m
|
|
% nappCopyShift.m nappDetermineShiftXps.m
|
|
|
|
% Define conditions and defaults of input
|
|
% Old region must be also selected in tableSelection! it is kind like
|
|
% double.
|
|
defaultRegionOld = 'O1s';
|
|
expectedRegionOld = {'O1s','C1s','N1s'};
|
|
defaultRegionNew = 'C1s';
|
|
expectedRegionNew = {'O1s','C1s','N1s','Cl2p'};
|
|
defaultTableSelection = true(size(DataTable,1));
|
|
defaultEnergyScale = 'kinetic';
|
|
expectedEnergyScale = {'kinetic','binding'};
|
|
|
|
|
|
% Parse input
|
|
p = inputParser;
|
|
addRequired(p,'DataTable',@istable);
|
|
addOptional(p,'tableSelection',defaultTableSelection,@islogical);
|
|
addParameter(p,'regionOld',defaultRegionOld,...
|
|
@(x) any(validatestring(x,expectedRegionOld)));
|
|
addParameter(p,'regionNew',defaultRegionNew,...
|
|
@(x) any(validatestring(x,expectedRegionNew)));
|
|
addParameter(p,'energyScale',defaultEnergyScale,...
|
|
@(x) any(validatestring(x,expectedEnergyScale)));
|
|
parse(p,DataTable,varargin{:});
|
|
|
|
if contains(p.Results.energyScale,'kinetic')
|
|
% repeat this for all columns in input.
|
|
for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1)
|
|
% get name and date
|
|
tmpName = replace(p.Results.DataTable(p.Results.tableSelection,:).name{ii}, ...
|
|
p.Results.regionOld,p.Results.regionNew);
|
|
tmpDate = p.Results.DataTable(p.Results.tableSelection,:).lastModifiedDatenum(ii);
|
|
% select spectra
|
|
tmpDataSelection = contains(p.Results.DataTable.name,tmpName)...
|
|
& ismember(year(p.Results.DataTable.lastModifiedDatenum),year(tmpDate))...
|
|
& ismember(month(p.Results.DataTable.lastModifiedDatenum),month(tmpDate))...
|
|
& ismember(day(p.Results.DataTable.lastModifiedDatenum),day(tmpDate))...
|
|
& ismember(hour(p.Results.DataTable.lastModifiedDatenum),hour(tmpDate))...
|
|
& ismember(minute(p.Results.DataTable.lastModifiedDatenum),minute(tmpDate));
|
|
|
|
if ~any(tmpDataSelection) == 1
|
|
disp('There is something wrong with the data time info')
|
|
disp(tmpName)
|
|
end
|
|
% replace the region in the name and copy the data
|
|
DataTable.kineticEnergyShift(tmpDataSelection,:) = p.Results.DataTable(p.Results.tableSelection,:).kineticEnergyShift(ii);
|
|
end
|
|
elseif contains(p.Results.energyScale,'binding')
|
|
% repeat this for all columns in input.
|
|
for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1)
|
|
% get name and date
|
|
tmpName = replace(p.Results.DataTable(p.Results.tableSelection,:).name{ii}, ...
|
|
p.Results.regionOld,p.Results.regionNew);
|
|
tmpDate = p.Results.DataTable(p.Results.tableSelection,:).lastModifiedDatenum(ii);
|
|
% select spectra
|
|
tmpDataSelection = contains(p.Results.DataTable.name,tmpName)...
|
|
& ismember(year(p.Results.DataTable.lastModifiedDatenum),year(tmpDate))...
|
|
& ismember(month(p.Results.DataTable.lastModifiedDatenum),month(tmpDate))...
|
|
& ismember(day(p.Results.DataTable.lastModifiedDatenum),day(tmpDate))...
|
|
& ismember(hour(p.Results.DataTable.lastModifiedDatenum),hour(tmpDate))...
|
|
& ismember(minute(p.Results.DataTable.lastModifiedDatenum),minute(tmpDate));
|
|
if ~any(tmpDataSelection) == 1
|
|
disp('There is something wrong with the data time info')
|
|
disp(tmpName)
|
|
end
|
|
% replace the region in the name and copy the data
|
|
DataTable.bindingEnergyShift(tmpDataSelection,:) = p.Results.DataTable(p.Results.tableSelection,:).bindingEnergyShift(ii);
|
|
end
|
|
end
|
|
|
|
end |