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