Added Example Matlab script with most common during beamtime processing
This commit is contained in:
1 parent
53dd8c6080
commit
bbfab45787
7 files changed
+658
-22
No files matched your search
@@ -0,0 +1,305 @@
|
||||
%% Generate Spectra
|
||||
%
|
||||
% Here we plot all spectra and all regions to confirm that we get what we
|
||||
% need.
|
||||
%
|
||||
% This file shows some typical out-of-the-box examples.
|
||||
|
||||
%% Start fresh
|
||||
clc
|
||||
close all
|
||||
clearvars
|
||||
|
||||
%% Import Data
|
||||
%
|
||||
% This was generated by importData.m. You can either force that it runs
|
||||
% again before this script runs (preferred, ensures you always have recent
|
||||
% data in MATLAB's data table) or load the FileList.
|
||||
run('importData.m')
|
||||
% load("FileList.mat","FileList")
|
||||
|
||||
%% Plot a Survey
|
||||
for ii = 1
|
||||
%% Start fresh
|
||||
close all
|
||||
clc
|
||||
|
||||
%% Select data
|
||||
|
||||
% It is convenient to add date and year of the beamtime. This ensures you
|
||||
% can use the code also when you work with data from several beamtimes
|
||||
% (indexing of the files starts with 0 for each beamtime by default).
|
||||
tmpDataSelection = month(FileList.lastModifiedDatenum) == 11 ...
|
||||
& year(FileList.lastModifiedDatenum) == 2025 ...
|
||||
& ~contains(FileList.sample,"(bad data)") ...
|
||||
& contains(FileList.name,"Survey") ...
|
||||
& (contains(FileList.name,"128"));
|
||||
% Always ensure that you select the spectra you intended.
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr'}))
|
||||
|
||||
%% Generate spectrum and plot
|
||||
FileList = nappGenerateSpectra(FileList,tmpDataSelection);
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond','mode','OneEach');
|
||||
|
||||
%% Add annotation to the figure
|
||||
%
|
||||
% In a survey, we usually want to identify all peaks. Here, based on
|
||||
% binding energies from the literature and a shift, we add common regions:
|
||||
%
|
||||
% **Note that the binding energies are rough estimates – to use this further
|
||||
% we need to confirm them and add the source/reference.**
|
||||
dataObjs = findobj(gcf,'-property','YData');
|
||||
tmpxShift = 7;
|
||||
tmpxRayEnergy = 850;
|
||||
tmpyPosition = 0.5E5;
|
||||
tmpyPositionTwo = 0.8E5;
|
||||
|
||||
% Au peaks
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-57-tmpxShift,tmpyPosition-tmpyPositionTwo,dataObjs(1),'Au5p3/2');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-74-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Au5p5/2');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-84-tmpxShift,tmpyPosition,dataObjs(1),'Au4f7/2');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-88-tmpxShift,tmpyPosition-tmpyPositionTwo,dataObjs(1),'Au4f5/2');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-107-tmpxShift,tmpyPosition,dataObjs(1),'Au5s');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-335-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Au4d1/2');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-353-tmpxShift,tmpyPosition,dataObjs(1),'Au4d3/2');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-546-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Au4p3/2');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-643-tmpxShift,tmpyPosition,dataObjs(1),'Au4p1/2');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-762-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Au4s');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-8-tmpxShift,tmpyPosition,dataObjs(1),'AuVB');
|
||||
|
||||
% Usual suspects
|
||||
nappAnnotateSurvey(tmpxRayEnergy-285-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'C1s');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-534-tmpxShift,tmpyPosition,dataObjs(1),'O1s');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-30-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'O2s');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-405-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'N1s');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-495-tmpxShift,tmpyPosition,dataObjs(1),'Sn3d');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-691-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'F1s');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-295-tmpxShift,tmpyPosition,dataObjs(1),'K2p');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-380-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'K2s');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-153-tmpxShift,tmpyPosition,dataObjs(1),'Si2s');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-100-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Si2p');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-197-tmpxShift,tmpyPosition,dataObjs(1),'Cl2p');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-271-tmpxShift,tmpyPosition,dataObjs(1),'Cl2s');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-286-tmpxShift,tmpyPosition-tmpyPositionTwo,dataObjs(1),'Sn3p');
|
||||
|
||||
% Clay
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-351-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Ca2p');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-347-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Ca2p');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-440-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Ca2s');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-34-tmpxShift,tmpyPosition+tmpyPosition,dataObjs(1),'Ca3s');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-26-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Ca3p');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-297-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'K2p');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-294-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'K2p');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-35-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'K3s');
|
||||
%nappAnnotateSurvey(tmpxRayEnergy-19-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'K3p');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-118-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Al');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-72.5-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Al');
|
||||
|
||||
% Ar gas
|
||||
nappAnnotateSurvey(tmpxRayEnergy-245-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Ar2p');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-323-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Ar2s');
|
||||
nappAnnotateSurvey(tmpxRayEnergy-12-tmpxShift,tmpyPosition+tmpyPositionTwo,dataObjs(1),'Ar3p');
|
||||
|
||||
% Some Auger
|
||||
nappAnnotateSurvey(363,tmpyPosition-tmpyPositionTwo,dataObjs(1),'N KLL');
|
||||
nappAnnotateSurvey(203,tmpyPosition-tmpyPositionTwo,dataObjs(1),'Ar LMN');
|
||||
nappAnnotateSurvey(500,tmpyPosition-tmpyPositionTwo,dataObjs(1),'O KLL');
|
||||
end
|
||||
|
||||
%% Plot NEXAFS & Resonant Data
|
||||
%
|
||||
% You can plot images (raw data from SES) without generating the spectra.
|
||||
% (You can also first generate the spectra, but to plot images the spectra
|
||||
% are not needed.)
|
||||
for ii = 1
|
||||
%% Start fresh
|
||||
clc; close all
|
||||
|
||||
%% Select data
|
||||
tmpDataSelection = month(FileList.lastModifiedDatenum) == 11 ...
|
||||
& year(FileList.lastModifiedDatenum) == 2025 ...
|
||||
& ~contains(FileList.sample,"(bad data)") ...
|
||||
& contains(FileList.name,"O_Kedge_Resonant") ...
|
||||
& contains(FileList.name,"0025");
|
||||
% Always ensure that you select the spectra you intended.
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr'}))
|
||||
|
||||
%% Plot images
|
||||
|
||||
% This one shows x, y in energy scales (data were interpolated).
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','image',...
|
||||
'mode','OneEach');
|
||||
% This one shows sweeps (original data).
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','image','energyScale','sweep');
|
||||
|
||||
%% Plot selected Auger-Meitner
|
||||
%
|
||||
% This plots the electron intensity vs. kinetic energy for chosen X-ray
|
||||
% energies (directly from the image).
|
||||
|
||||
tmpDataSelection = month(FileList.lastModifiedDatenum) == 11 ...
|
||||
& year(FileList.lastModifiedDatenum) == 2025 ...
|
||||
& ~contains(FileList.sample,"(bad data)") ...
|
||||
& contains(FileList.name,"O_Kedge_Resonant") ...
|
||||
& contains(FileList.name,"0025");
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','image','mode','AugerMeitner','AugerMeitnerEnergies',[525,545,550]);
|
||||
% It also shows an example of how the current plot can be edited manually
|
||||
% after its generation by nappPlot.
|
||||
hax = gca;
|
||||
hax.XDir = 'reverse';
|
||||
xlabel('Auger-Meitner binding energy [eV]');
|
||||
|
||||
%% Plot image interactive
|
||||
%
|
||||
% Use the mouse: click once in the image, then the Auger-Meitner and NEXAFS will
|
||||
% follow the mouse position.
|
||||
|
||||
% Select data (Nov 2025, O_Kedge resonant, and file number 25):
|
||||
tmpDataSelection = month(FileList.lastModifiedDatenum) == 11 ...
|
||||
& year(FileList.lastModifiedDatenum) == 2025 ...
|
||||
& ~contains(FileList.sample,"(bad data)") ...
|
||||
& contains(FileList.name,"O_Kedge_Resonant") ...
|
||||
& contains(FileList.name,"0025");
|
||||
% Plot the selected data in an interactive figure:
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','image','mode','interactive');
|
||||
|
||||
%% Generate spectra and plot
|
||||
|
||||
FileList = nappGenerateSpectra(FileList,tmpDataSelection);
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_counts',...
|
||||
'mode','OneEach');
|
||||
%% arrange figures
|
||||
distFig
|
||||
end
|
||||
|
||||
%% Plot iterations
|
||||
for ii = 1
|
||||
%% Select your data
|
||||
%
|
||||
% You can change the plotStep to show fewer iterations (for example 2 for every second one).
|
||||
% However, the total number of sequence iterations needs to be a multiple of
|
||||
% that factor. This is nice to follow a signal with time, e.g. upon dosing.
|
||||
% It requires that each sequence iteration has long enough dwell time and
|
||||
% iterations to give a signal with decent S/N.
|
||||
|
||||
%% Select data
|
||||
close all; clc
|
||||
tmpDataSelection = startsWith(FileList.name, "0191191_O1s_VB_525eV");
|
||||
% List the selected files in the command window.
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','scientaPassEnergy_eV'}))
|
||||
|
||||
%% Plot the iterations
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','image','mode','iterations','plotStep',6);
|
||||
|
||||
%% Modify the top figure
|
||||
legend
|
||||
distFig
|
||||
end
|
||||
|
||||
%% Look at all regions
|
||||
%
|
||||
% To confirm you see what you expect or to change the experimental settings
|
||||
% if not.
|
||||
|
||||
for ii = 1
|
||||
%% Start fresh
|
||||
close all
|
||||
clc
|
||||
% Filter data (select all regions of two files).
|
||||
tmpDataSelection = month(FileList.lastModifiedDatenum) == 11 ...
|
||||
& year(FileList.lastModifiedDatenum) == 2025 ...
|
||||
& ~contains(FileList.sample,"(bad data)") ...
|
||||
& ~contains(FileList.name,"Survey") ...
|
||||
& ~contains(FileList.name,"Resonant") ...
|
||||
& (contains(FileList.name,"146") | contains(FileList.name,"148"));
|
||||
% List the selected files in the command window.
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','scientaPassEnergy_eV'}))
|
||||
|
||||
%% Generate spectra and plot
|
||||
FileList = nappGenerateSpectra(FileList,tmpDataSelection);
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond','mode','OneEach');
|
||||
distFig
|
||||
%% Discussion
|
||||
%
|
||||
% Your observation and comments could go here
|
||||
end
|
||||
|
||||
%% Look at one region in detail
|
||||
%
|
||||
% To confirm you see what you expect or to change the experimental settings
|
||||
% if not.
|
||||
|
||||
for ii = 1
|
||||
%% Start fresh
|
||||
clc; close all
|
||||
|
||||
%% Select data
|
||||
tmpDataSelection = month(FileList.lastModifiedDatenum) == 11 ...
|
||||
& year(FileList.lastModifiedDatenum) == 2025 ...
|
||||
& ~contains(FileList.sample,"(bad data)") ...
|
||||
& ~contains(FileList.name,"Survey") ...
|
||||
& ~contains(FileList.name,"Resonant") ...
|
||||
& (contains(FileList.name,"Al2p") | contains(FileList.name,"Cl2p")) ...
|
||||
& (contains(FileList.name,"146") | contains(FileList.name,"148"));
|
||||
% List the selected files in the command window.
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr'}))
|
||||
|
||||
%% Plot
|
||||
FileList = nappGenerateSpectra(FileList,tmpDataSelection);
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond','mode','OneEach');
|
||||
|
||||
%% Normalize Cl2p intensity to that of Al2p
|
||||
tmpDataSelection = month(FileList.lastModifiedDatenum) == 11 ...
|
||||
& year(FileList.lastModifiedDatenum) == 2025 ...
|
||||
& ~contains(FileList.sample,"(bad data)") ...
|
||||
& ~contains(FileList.name,"Survey") ...
|
||||
& ~contains(FileList.name,"Resonant") ...
|
||||
& contains(FileList.name,"Cl2p") ...
|
||||
& contains(FileList.name,"146");
|
||||
FileList(tmpDataSelection,:).spectrum_countsPerSecond{:} = FileList(tmpDataSelection,:).spectrum_countsPerSecond{:} .* 22335./39687;
|
||||
|
||||
tmpDataSelection = month(FileList.lastModifiedDatenum) == 11 ...
|
||||
& year(FileList.lastModifiedDatenum) == 2025 ...
|
||||
& ~contains(FileList.sample,"(bad data)") ...
|
||||
& ~contains(FileList.name,"Survey") ...
|
||||
& ~contains(FileList.name,"Resonant") ...
|
||||
& contains(FileList.name,"Al2p") ...
|
||||
& contains(FileList.name,"146");
|
||||
FileList(tmpDataSelection,:).spectrum_countsPerSecond{:} = FileList(tmpDataSelection,:).spectrum_countsPerSecond{:} .* 22335./39687;
|
||||
|
||||
%% Align to same background
|
||||
tmpDataSelection = month(FileList.lastModifiedDatenum) == 11 ...
|
||||
& year(FileList.lastModifiedDatenum) == 2025 ...
|
||||
& ~contains(FileList.sample,"(bad data)") ...
|
||||
& ~contains(FileList.name,"Survey") ...
|
||||
& ~contains(FileList.name,"Resonant") ...
|
||||
& contains(FileList.name,"Cl2p") ...
|
||||
& (contains(FileList.name,"146") | contains(FileList.name,"148"));
|
||||
FileList = nappBackground(FileList,647,648,'tableSelection',tmpDataSelection,'energyScale','kinetic',...
|
||||
'mode','mean','showFigures','off');
|
||||
|
||||
%% Plot again
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond','mode','AllInOne');
|
||||
% Optimize figure
|
||||
xlim([647 652])
|
||||
ylabel("counts [norm to Al]")
|
||||
legend
|
||||
distFig
|
||||
end
|
||||
|
||||
%% Plot several spectra in one figure
|
||||
clc; close all
|
||||
for ii = 1
|
||||
close all
|
||||
clc
|
||||
tmpDataSelection = month(FileList.lastModifiedDatenum) == 11 ...
|
||||
& year(FileList.lastModifiedDatenum) == 2025 ...
|
||||
& ~contains(FileList.sample,"(bad data)") ...
|
||||
& contains(FileList.name, "Cl2p")...
|
||||
& ~contains(FileList.name,"Survey") ...
|
||||
& contains(FileList.name,"680eV") ...
|
||||
& (contains(FileList.name,"77") | contains(FileList.name,"116") | contains(FileList.name,"130") | contains(FileList.name,"132") | contains(FileList.name,"133"));
|
||||
FileList = nappGenerateSpectra(FileList,tmpDataSelection);
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond','mode','AllInOne');
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','scientaRegionIterations','scientaSequenceIterations','scientaDwellTime_ms','scientaPassEnergy_eV'}))
|
||||
end
|
||||
Reference in new issue
Block a user