Added peak area ratio as fitting constrain. Additional small bug fixes (not sure what I did)

This commit is contained in:
bartels-rausch committed 2025-02-27 08:59:53 +01:00
1 parent 7633f3a741
commit fa1323b96d
5 files changed
+202 -104

No files matched your search

+1 -1
View File
@@ -11,7 +11,7 @@ function FileList = addPhotonEnergy(FileList,fileNumber,notesToAdd,dataMonth,dat
% * the month and the year that the data was acquired
for ii = 1:length(fileNumber)
tmpMatch = (startsWith(FileList.name, sprintf('%04.0f',fileNumber(ii)))) & ...
tmpMatch = (startsWith(FileList.name, sprintf('%04.0f',fileNumber(ii))) | startsWith(FileList.name, sprintf('NAPP%04.0f',fileNumber(ii)))) & ...
(month(FileList.lastModifiedDatenum) == dataMonth) &...
(year(FileList.lastModifiedDatenum) == dataYear) &...
(endsWith(FileList.name, '.ibw'));
+4 -2
View File
@@ -27,11 +27,13 @@ for ii = 1:length(fileNumber)
else
if matches(tableSelection,'XPS')
% select the data
tmpMatch = (startsWith(DataTable.name, sprintf('%04.0f',fileNumber(ii)))) & ...
tmpMatch = (startsWith(DataTable.name, sprintf('%04.0f',fileNumber(ii))) | startsWith(DataTable.name, sprintf('NAPP%04.0f',fileNumber(ii)))) & ...
(month(DataTable.lastModifiedDatenum) == dataMonth) &...
(year(DataTable.lastModifiedDatenum) == dataYear) &...
(endsWith(DataTable.name, '.ibw'));
elseif matches(tableSelection,'NEXAFS')
elseif (matches(tableSelection,'NEXAFS') | matches(tableSelection,'.h5'))
% select the data
tmpMatch = (startsWith(DataTable.name, sprintf('%04.0f',fileNumber(ii)))) & ...
(month(DataTable.lastModifiedDatenum) == dataMonth) &...
+8 -8
View File
@@ -22,7 +22,7 @@ function DataTable = nappDetermineShiftXps(DataTable, varargin)
% kinEnReference: Sequence iteration to which the image should be
% aligned, default is 1.
% refPeak: Peak number the position of which will be used to compute the
% BE shift. Only for Gauss fit. Default 1.
% BE shift. Only for Gauss fit. Default 1.
% minPeakWidth: findpeak parameter, default 0.1
% minPeakHeight: findpeak parameter, default 0.1
% movMeanWindow: findpeak parameter, default 1
@@ -329,23 +329,23 @@ else
tmp_1(ii,1) = p.Results.DataTable(p.Results.tableSelection,:).xRayEkin_eV{ii}-locs(I)-p.Results.binEnReference;
clearvars tmp_2
end
DataTable.bindingEnergyShift(p.Results.tableSelection) = tmp_1;
DataTable.bindingEnergyShift(p.Results.tableSelection) = tmp_1;
elseif matches(p.Results.mode,'gaussFit')
tmpFitResults = nappFitGaussXps(DataTable,p.Results.FitParameter,p.Results.tableSelection,...
'energyScale','kinetic','mode',p.Results.FitParameter.fitMode,'showFigures','on','tableVariable',p.Results.tableVariable);
DataTable.bindingEnergyShift(p.Results.tableSelection) = tmpFitResults(p.Results.tableSelection,:).xRayEkinRange_eV(:,1) - tmpFitResults(p.Results.tableSelection,:).peakPosition(:,p.Results.FitParameter.refPeak) - repmat(p.Results.binEnReference,size(DataTable.bindingEnergyShift(p.Results.tableSelection)));
DataTable.peakPosition(p.Results.tableSelection,:) = tmpFitResults(p.Results.tableSelection,:).peakPosition;
DataTable.peakArea(p.Results.tableSelection,:) = tmpFitResults(p.Results.tableSelection,:).peakArea;
DataTable.peakFWHM(p.Results.tableSelection,:) = tmpFitResults(p.Results.tableSelection,:).peakFWHM;
DataTable.bindingEnergyShift(p.Results.tableSelection) = tmpFitResults(p.Results.tableSelection,:).xRayEkinRange_eV(:,1) - tmpFitResults(p.Results.tableSelection,:).peakPosition(:,p.Results.FitParameter.refPeak) - repmat(p.Results.binEnReference,size(DataTable.bindingEnergyShift(p.Results.tableSelection)));
DataTable.peakPosition(p.Results.tableSelection,:) = tmpFitResults(p.Results.tableSelection,:).peakPosition;
DataTable.peakArea(p.Results.tableSelection,:) = tmpFitResults(p.Results.tableSelection,:).peakArea;
DataTable.peakFWHM(p.Results.tableSelection,:) = tmpFitResults(p.Results.tableSelection,:).peakFWHM;
%%
end
end
try
fh = findobj( 'Type', 'Figure', 'Name', 'Gauss Multi Fit ');
+179 -91
View File
@@ -9,8 +9,8 @@ function DataTable = nappFitGaussXps(DataTable,varargin)
% FileList: data table tmpFitParameters: You can give settings for the 4
% peaks (5 in some cases), use small (negligible) values if you are
% interested in less than 4 peaks.
%
% % „position“ mode
%
% % „position“ mode
% tmpFitParameters.peakArea = [abs#1 abs#2 abs#3 abs#4];
% tmpFitParameters.peakWidth = [abs#1 abs#2 abs#3 abs#4];
% tmpFitParameters.peakPos = [abs#1 rel#2 rel#3 rel#4];
@@ -24,11 +24,11 @@ function DataTable = nappFitGaussXps(DataTable,varargin)
% spectrum range
% tmpFitParameters.backgroundRange = [5 5];
%
% % „unconstrained“ mode
% % „unconstrained“ mode
% tmpFitParameters.peakArea = [abs#1 abs#2 abs#3 abs#4];
% tmpFitParameters.peakWidth = [abs#1 abs#2 abs#3 abs#4];
% tmpFitParameters.peakPos = [abs#1 abs#2 abs#3 abs#4];
%
%
% tmpFitParameters.peakAreaUpperBond = [#1 #2 #3 #4];
% tmpFitParameters.peakWidthUpperBond = [#1 #2 #3 #4];
% tmpFitParameters.peakPosUpperBond = [#1 #2 #3 #4];
@@ -38,7 +38,7 @@ function DataTable = nappFitGaussXps(DataTable,varargin)
% spectrum range
% tmpFitParameters.backgroundRange = [5 5];
%
% % „ widthPosition“ mode
% % „widthPosition“ mode
% tmpFitParameters.peakArea = [abs#1 abs#2 abs#3 abs#4 abs#5];
% tmpFitParameters.peakWidth = [abs#1-#5];
% tmpFitParameters.peakPos = [abs#1 rel#2 rel#3 rel#4 rel#5];
@@ -52,7 +52,7 @@ function DataTable = nappFitGaussXps(DataTable,varargin)
% % spectrum range
% tmpFitParameters.backgroundRange = [5 5];
%
% % „ width“ mode
% % „ width“ mode
% tmpFitParameters.peakArea = [abs#1 abs#2 abs#3 abs#4];
% tmpFitParameters.peakWidth = [abs#1-#4];
% tmpFitParameters.peakPos = [abs#1 abs#2 abs#3 abs#4];
@@ -65,7 +65,7 @@ function DataTable = nappFitGaussXps(DataTable,varargin)
% tmpFitParameters.peakPosLowerBond = [#1 #2 #3 #4];
% spectrum range
% tmpFitParameters.backgroundRange = [5 5];
%
%
% % „unconstrainedAndWidthPosition" mode (novel: rel distance fit parameter)
% tmpFitParameters.peakArea = [abs#1 abs#2 abs#3 abs#4 abs#5];
% tmpFitParameters.peakWidth = [abs#1,2,4,5 abs#3];
@@ -123,7 +123,7 @@ function DataTable = nappFitGaussXps(DataTable,varargin)
defaultTableVariable = 'spectrum_countsPerSecond';
expectedTableVariable = {'spectrum_counts','spectrum_countsPerSecond','spectrum_countsNorm'};
defaultMode = 'widthPosition';
expectedMode = {'unconstrained','widthPosition','position','width','unconstrainedAndWidthPosition','gasAndTwoAcidBasePairs'};
expectedMode = {'unconstrained','widthPosition','position','width','unconstrainedAndWidthPosition','gasAndTwoAcidBasePairs','widthPositionAreaRatio','widthPositionAmineAreaRatio'};
defaultTableSelection = true(size(DataTable,1),1);
defaultShowFigures = 'on';
expectedShowFigures = {'on','off'};
@@ -252,7 +252,7 @@ elseif matches(p.Results.mode,'widthPosition')
lb = [p.Results.FitParameter.peakAreaLowerBond(1,1) p.Results.FitParameter.peakWidthLowerBond(1,1) p.Results.FitParameter.peakPosLowerBond(1,1) ... % Gauss peak 1
p.Results.FitParameter.peakAreaLowerBond(1,2) ... % Gauss peak 2
p.Results.FitParameter.peakAreaLowerBond(1,3) ... % Gauss peak 3
p.Results.FitParameter.peakAreaLowerBond(1,4) ...
p.Results.FitParameter.peakAreaLowerBond(1,4) ...
p.Results.FitParameter.peakAreaLowerBond(1,5) ... % Gauss peak 5
-Inf -Inf]; % linear background
% upper bond
@@ -301,7 +301,7 @@ elseif matches(p.Results.mode,'unconstrainedAndWidthPosition') % Novum, also the
% initial value
B0= [p.Results.FitParameter.peakArea(1,1) p.Results.FitParameter.peakWidth(1,1) p.Results.FitParameter.peakPos(1,2)... % Gauss peak 1
p.Results.FitParameter.peakArea(1,2) ... % Gauss peak 2
p.Results.FitParameter.peakArea(1,3) p.Results.FitParameter.peakWidth(1,2) p.Results.FitParameter.peakPos(1,3)... % Gauss peak 3
p.Results.FitParameter.peakArea(1,3) p.Results.FitParameter.peakWidth(1,2) p.Results.FitParameter.peakPos(1,3)... % Gauss peak 3
p.Results.FitParameter.peakArea(1,4) p.Results.FitParameter.peakPos(1,4)... % Gauss peak 4
p.Results.FitParameter.peakArea(1,5) p.Results.FitParameter.peakPos(1,5)... % Gauss peak 5
1 0 ... % linear background
@@ -324,8 +324,8 @@ elseif matches(p.Results.mode,'unconstrainedAndWidthPosition') % Novum, also the
Inf Inf ... % linear background
p.Results.FitParameter.peakPosUpperBond(1,1)]; % shift upper bond
elseif matches(p.Results.mode,'gasAndTwoAcidBasePairs') % Novum, also the distance between peaks is a fit parameter.
% [Gauss = area/(width*sqrt(pi/2)) * exp(-2*(x-position)^2/width^2)]
elseif matches(p.Results.mode,'gasAndTwoAcidBasePairs') % Novum, also the distance between peaks is a fit parameter.
% [Gauss = area/(width*sqrt(pi/2)) * exp(-2*(x-position)^2/width^2)]
yfcn1 = @(tmpB,x)...
tmpB(1)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1) - (tmpB(3)+tmpB(14))).^2/tmpB(2).^2)) ... % Gauss peak 1: width and position
+ tmpB(4)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1) - tmpB(3)).^2/tmpB(2).^2))... % Gauss peak 2: width and position
@@ -337,7 +337,7 @@ elseif matches(p.Results.mode,'unconstrainedAndWidthPosition') % Novum, also the
% initial value
B0= [p.Results.FitParameter.peakArea(1,1) p.Results.FitParameter.peakWidth(1,1) p.Results.FitParameter.peakPos(1,2)... % Gauss peak 1
p.Results.FitParameter.peakArea(1,2) ... % Gauss peak 2
p.Results.FitParameter.peakArea(1,3) p.Results.FitParameter.peakWidth(1,2) p.Results.FitParameter.peakPos(1,3)... % Gauss peak 3
p.Results.FitParameter.peakArea(1,3) p.Results.FitParameter.peakWidth(1,2) p.Results.FitParameter.peakPos(1,3)... % Gauss peak 3
p.Results.FitParameter.peakArea(1,4) p.Results.FitParameter.peakPos(1,4)... % Gauss peak 4
p.Results.FitParameter.peakArea(1,5) p.Results.FitParameter.peakPos(1,5)... % Gauss peak 5
1 0 ... % linear background
@@ -359,6 +359,53 @@ elseif matches(p.Results.mode,'unconstrainedAndWidthPosition') % Novum, also the
p.Results.FitParameter.peakAreaUpperBond(1,5) p.Results.FitParameter.peakPosUpperBond(1,5) ... % Gauss peak 4
Inf Inf ... % linear background
p.Results.FitParameter.peakPosUpperBond(1,1)]; % shift upper bond
elseif matches(p.Results.mode,'widthPositionAreaRatio')
yfcn1 = @(tmpB,x)...
tmpB(1)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1) - tmpB(3)).^2/tmpB(2).^2)) ... % Gauss peak 1
+ tmpB(1)*p.Results.FitParameter.peakArea(1,2)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1)- (tmpB(3)+p.Results.FitParameter.peakPos(1,2))).^2/tmpB(2).^2))... % Gauss peak 2
+ tmpB(1)*p.Results.FitParameter.peakArea(1,3)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1)- (tmpB(3)+p.Results.FitParameter.peakPos(1,3))).^2/tmpB(2).^2))... % Gauss peak 3
+ tmpB(1)*p.Results.FitParameter.peakArea(1,4)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1)- (tmpB(3)+p.Results.FitParameter.peakPos(1,4))).^2/tmpB(2).^2))... % Gauss peak 4
+ tmpB(1)*p.Results.FitParameter.peakArea(1,5)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1)- (tmpB(3)+p.Results.FitParameter.peakPos(1,5))).^2/tmpB(2).^2))... % Gauss peak 4
+tmpB(4).*x(:,1)+tmpB(5); % linear background
% initial value
B0= [p.Results.FitParameter.peakArea(1,1) p.Results.FitParameter.peakWidth(1,1) p.Results.FitParameter.peakPos(1,1)... % Gauss peak 1
1 0]; % linear background
% lower bonds
lb = [p.Results.FitParameter.peakAreaLowerBond(1,1) p.Results.FitParameter.peakWidthLowerBond(1,1) p.Results.FitParameter.peakPosLowerBond(1,1) ... % Gauss peak 1
-Inf -Inf]; % linear background
% upper bond
ub = [p.Results.FitParameter.peakAreaUpperBond(1,1) p.Results.FitParameter.peakWidthUpperBond(1,1) p.Results.FitParameter.peakPosUpperBond(1,1) ... % Gauss peak 1
Inf Inf]; % linear background
elseif matches(p.Results.mode,'widthPositionAmineAreaRatio')
yfcn1 = @(tmpB,x)...
tmpB(1)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1) - tmpB(3)).^2/tmpB(2).^2)) ... % Gauss peak 1
+ tmpB(4)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1)- (tmpB(3)+p.Results.FitParameter.peakPos(1,2))).^2/tmpB(2).^2))... % Gauss peak 2
+ tmpB(4)*p.Results.FitParameter.peakArea(1,3)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1)- (tmpB(3)+p.Results.FitParameter.peakPos(1,3))).^2/tmpB(2).^2))... % Gauss peak 3
+ tmpB(5)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1)- (tmpB(3)+p.Results.FitParameter.peakPos(1,4))).^2/tmpB(2).^2))... % Gauss peak 4
+ tmpB(6)/(tmpB(2)*sqrt(pi/2))*exp(-2.*((x(:,1)- (tmpB(3)+p.Results.FitParameter.peakPos(1,5))).^2/tmpB(2).^2))... % Gauss peak 4
+tmpB(7).*x(:,1)+tmpB(8); % linear background
% initial value
B0= [p.Results.FitParameter.peakArea(1,1) p.Results.FitParameter.peakWidth(1,1) p.Results.FitParameter.peakPos(1,1)... % Gauss peak 1
p.Results.FitParameter.peakArea(1,2) ... % Gauss peak 3
p.Results.FitParameter.peakArea(1,4)...
p.Results.FitParameter.peakArea(1,5)...% Gauss peak 5
1 0]; % linear background
% lower bonds
lb = [p.Results.FitParameter.peakAreaLowerBond(1,1) p.Results.FitParameter.peakWidthLowerBond(1,1) p.Results.FitParameter.peakPosLowerBond(1,1) ... % Gauss peak 1
p.Results.FitParameter.peakAreaLowerBond(1,2) ... % Gauss peak 3
p.Results.FitParameter.peakAreaLowerBond(1,4) ...
p.Results.FitParameter.peakAreaLowerBond(1,5) ... % Gauss peak 5
-Inf -Inf]; % linear background
% upper bond
ub = [p.Results.FitParameter.peakAreaUpperBond(1,1) p.Results.FitParameter.peakWidthUpperBond(1,1) p.Results.FitParameter.peakPosUpperBond(1,1) ... % Gauss peak 1
p.Results.FitParameter.peakAreaUpperBond(1,2) ... % Gauss peak 3
p.Results.FitParameter.peakAreaUpperBond(1,4) ...
p.Results.FitParameter.peakAreaUpperBond(1,5) ...% Gauss peak 5
Inf Inf]; % linear background
end
for ii = 1:size(DataTable(p.Results.tableSelection,:),1)
@@ -435,8 +482,7 @@ for ii = 1:size(DataTable(p.Results.tableSelection,:),1)
tmpB(5) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,3)...
tmpB(6) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,4)...
tmpB(8) tmpB(9)...
tmpB(7) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,5)...
NaN NaN NaN];
tmpB(7) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,5)];
elseif matches(p.Results.mode,'width')
B = [tmpB(1) tmpB(2) tmpB(3)...
tmpB(4) tmpB(2) tmpB(5)...
@@ -458,6 +504,20 @@ for ii = 1:size(DataTable(p.Results.tableSelection,:),1)
tmpB(8) tmpB(2) tmpB(11)+tmpB(9)...
tmpB(12) tmpB(13) ...
tmpB(10) tmpB(2) tmpB(11)];
elseif matches(p.Results.mode,'widthPositionAreaRatio')
B = [tmpB(1) tmpB(2) tmpB(3)...
tmpB(1)*p.Results.FitParameter.peakArea(1,2) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,2)...
tmpB(1)*p.Results.FitParameter.peakArea(1,3) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,3)...
tmpB(1)*p.Results.FitParameter.peakArea(1,4) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,4)...
tmpB(4) tmpB(5)...
tmpB(1)*p.Results.FitParameter.peakArea(1,5) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,5)];
elseif matches(p.Results.mode,'widthPositionAmineAreaRatio')
B = [tmpB(1) tmpB(2) tmpB(3)...
tmpB(4) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,2)...
tmpB(4)*p.Results.FitParameter.peakArea(1,3) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,3)...
tmpB(5) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,4)...
tmpB(7) tmpB(8)...
tmpB(6) tmpB(2) tmpB(3)+p.Results.FitParameter.peakPos(1,5)];
end
% print out result table and result plots based on B. Because B has the
@@ -472,51 +532,51 @@ for ii = 1:size(DataTable(p.Results.tableSelection,:),1)
disp(DataTable(p.Results.tableSelection,:).name{ii});
disp(' ' );
if (B(1) <= 1 || B(4) <= 1)
disp(cell2table({sprintf('%.1f',B(3)),...
sprintf('%.1f',B(2)*sqrt(log(4))),...
sprintf('%.1f',B(2)),...
sprintf('%.3f',B(1));...
sprintf('%.1f',B(6)),...
sprintf('%.1f',B(5)*sqrt(log(4))),...
sprintf('%.1f',B(5)),...
sprintf('%.3f',B(4));...
sprintf('%.1f',B(9)),...
sprintf('%.1f',B(8)*sqrt(log(4))),...
sprintf('%.1f',B(8)),...
sprintf('%.3f',B(7));...
sprintf('%.1f',B(12)),...
sprintf('%.1f',B(11)*sqrt(log(4))),...
sprintf('%.1f',B(11)),...
sprintf('%.3f',B(10)); ...
sprintf('%.1f',B(17)),...
sprintf('%.1f',B(16)*sqrt(log(4))),...
sprintf('%.1f',B(16)),...
sprintf('%.3f',B(15))},...
'VariableNames',{'position';'FWHW';'width';'area'},...
'RowNames',{'peak1','peak2','peak3','peak4','peak5'})); % 'RowNames',{'peak1','peak2','peak3','peak4','peak5'}));
disp(cell2table({sprintf('%.1f',B(3)),...
sprintf('%.1f',B(2)*sqrt(log(4))),...
sprintf('%.1f',B(2)),...
sprintf('%.3f',B(1));...
sprintf('%.1f',B(6)),...
sprintf('%.1f',B(5)*sqrt(log(4))),...
sprintf('%.1f',B(5)),...
sprintf('%.3f',B(4));...
sprintf('%.1f',B(9)),...
sprintf('%.1f',B(8)*sqrt(log(4))),...
sprintf('%.1f',B(8)),...
sprintf('%.3f',B(7));...
sprintf('%.1f',B(12)),...
sprintf('%.1f',B(11)*sqrt(log(4))),...
sprintf('%.1f',B(11)),...
sprintf('%.3f',B(10)); ...
sprintf('%.1f',B(17)),...
sprintf('%.1f',B(16)*sqrt(log(4))),...
sprintf('%.1f',B(16)),...
sprintf('%.3f',B(15))},...
'VariableNames',{'position';'FWHW';'width';'area'},...
'RowNames',{'peak1','peak2','peak3','peak4','peak5'})); % 'RowNames',{'peak1','peak2','peak3','peak4','peak5'}));
else
disp(cell2table({sprintf('%.1f',B(3)),...
sprintf('%.1f',B(2)*sqrt(log(4))),...
sprintf('%.1f',B(2)),...
sprintf('%7.0f',B(1));...
sprintf('%.1f',B(6)),...
sprintf('%.1f',B(5)*sqrt(log(4))),...
sprintf('%.1f',B(5)),...
sprintf('%7.0f',B(4));...
sprintf('%.1f',B(9)),...
sprintf('%.1f',B(8)*sqrt(log(4))),...
sprintf('%.1f',B(8)),...
sprintf('%7.0f',B(7));...
sprintf('%.1f',B(12)),...
sprintf('%.1f',B(11)*sqrt(log(4))),...
sprintf('%.1f',B(11)),...
sprintf('%7.0f',B(10)); ...
sprintf('%.1f',B(17)),...
sprintf('%.1f',B(16)*sqrt(log(4))),...
sprintf('%.1f',B(16)),...
sprintf('%7.0f',B(15))},...
'VariableNames',{'position';'FWHW';'width';'area'},...
'RowNames',{'peak1','peak2','peak3','peak4','peak5'})); % 'RowNames',{'peak1','peak2','peak3','peak4','peak5'}));
disp(cell2table({sprintf('%.1f',B(3)),...
sprintf('%.1f',B(2)*sqrt(log(4))),...
sprintf('%.1f',B(2)),...
sprintf('%7.0f',B(1));...
sprintf('%.1f',B(6)),...
sprintf('%.1f',B(5)*sqrt(log(4))),...
sprintf('%.1f',B(5)),...
sprintf('%7.0f',B(4));...
sprintf('%.1f',B(9)),...
sprintf('%.1f',B(8)*sqrt(log(4))),...
sprintf('%.1f',B(8)),...
sprintf('%7.0f',B(7));...
sprintf('%.1f',B(12)),...
sprintf('%.1f',B(11)*sqrt(log(4))),...
sprintf('%.1f',B(11)),...
sprintf('%7.0f',B(10)); ...
sprintf('%.1f',B(17)),...
sprintf('%.1f',B(16)*sqrt(log(4))),...
sprintf('%.1f',B(16)),...
sprintf('%7.0f',B(15))},...
'VariableNames',{'position';'FWHW';'width';'area'},...
'RowNames',{'peak1','peak2','peak3','peak4','peak5'})); % 'RowNames',{'peak1','peak2','peak3','peak4','peak5'}));
end
% plot result
% eliminate NaN in B
@@ -541,8 +601,8 @@ for ii = 1:size(DataTable(p.Results.tableSelection,:),1)
yData_pk4= Gauss(xGaussPlot ,B(10), B(12), B(11));
yData_pk5= Gauss(xGaussPlot ,B(15), B(17), B(16));
bkgrd = linear(xGaussPlot,B(13),B(14));
% plot fit
h = plot(xGaussPlot,yData_pk1+yData_pk2+yData_pk3+yData_pk4+yData_pk5+bkgrd);
hold on
@@ -565,24 +625,24 @@ for ii = 1:size(DataTable(p.Results.tableSelection,:),1)
h.LineWidth=1.5;
h.Color = PsiFarbe.gelb;
plot(xGaussPlot, bkgrd);
if x1(1)<= x1(end)
if x1(1)<= x1(end)
xlabel('Kinetic Energy [eV]');
else
set(ax(1),'Xdir','reverse');
xlabel('Binding Energy [eV]');
end
else
set(ax(1),'Xdir','reverse');
xlabel('Binding Energy [eV]');
end
% plot data
plot(x1,y1,'o',"MarkerFaceColor","white")
legend OFF
if matches(p.Results.tableVariable,'spectrum_countsPerSecond')
ylabel('PE Intensity [counts per second]');
ylabel('PE Intensity [counts per second]');
else
ylabel('PE intensity [-]');
ylabel('PE intensity [-]');
end
grid on
end
% Write results to List, we need all fitting results
resultsPeakPos(ii,:) = [B(3), B(6), B(9), B(12), B(16)] ; %#ok<*AGROW>
resultsPeakPos(ii,:) = [B(3), B(6), B(9), B(12), B(16)] ; %#ok<*AGROW>
resultsPeakFWHW(ii,:) = [B(2).*sqrt(log(4)), B(5).*sqrt(log(4)), B(8).*sqrt(log(4)), B(11).*sqrt(log(4)), B(17).*sqrt(log(4))] ;
resultsPeakArea(ii,:) = [B(1), B(4), B(7), B(10) B(15)] ;
resultsBkgrd(ii,:) = [B(13), B(14)] ;
@@ -611,34 +671,62 @@ try
DataTable.peakBackground = NaN(size(DataTable,1),size(resultsBkgrd,2));
end
%if contains(p.Results.energyScale,'binding')
DataTable(p.Results.tableSelection,:).peakPosition = resultsPeakPos(:,:);
DataTable(p.Results.tableSelection,:).peakPosition = resultsPeakPos(:,:);
%end
DataTable(p.Results.tableSelection,:).peakFWHM = resultsPeakFWHW(:,:);
DataTable(p.Results.tableSelection,:).peakArea = resultsPeakArea(:,:);
DataTable(p.Results.tableSelection,:).peakBackground = resultsBkgrd(:,:);
catch
disp('Could not write results to table. Writing only 4 entries')
existColumn = strcmp('peakPosition',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakPosition = NaN(size(DataTable,1),size(resultsPeakPos,2));
end
existColumn = strcmp('peakArea',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakArea = NaN(size(DataTable,1),size(resultsPeakArea,2));
end
existColumn = strcmp('peakFWHM',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakFWHM = NaN(size(DataTable,1),size(resultsPeakFWHW,2));
end
existColumn = strcmp('peakBackground',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakBackground = NaN(size(DataTable,1),size(resultsPeakFWHW,2));
end
%if contains(p.Results.energyScale,'binding')
try
disp('Could not write results to table. Writing only 4 entries')
existColumn = strcmp('peakPosition',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakPosition = NaN(size(DataTable,1),size(resultsPeakPos,2));
end
existColumn = strcmp('peakArea',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakArea = NaN(size(DataTable,1),size(resultsPeakArea,2));
end
existColumn = strcmp('peakFWHM',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakFWHM = NaN(size(DataTable,1),size(resultsPeakFWHW,2));
end
existColumn = strcmp('peakBackground',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakBackground = NaN(size(DataTable,1),size(resultsPeakFWHW,2));
end
%if contains(p.Results.energyScale,'binding')
DataTable(p.Results.tableSelection,:).peakPosition = resultsPeakPos(:,1:4);
%end
DataTable(p.Results.tableSelection,:).peakFWHM = resultsPeakFWHW(:,1:4);
DataTable(p.Results.tableSelection,:).peakArea = resultsPeakArea(:,1:4);
%end
DataTable(p.Results.tableSelection,:).peakFWHM = resultsPeakFWHW(:,1:4);
DataTable(p.Results.tableSelection,:).peakArea = resultsPeakArea(:,1:4);
DataTable(p.Results.tableSelection,:).peakBackground = resultsBkgrd(:,:);
catch
disp('Could not write results to table. Writing only 2 entries')
existColumn = strcmp('peakPosition',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakPosition = NaN(size(DataTable,1),size(resultsPeakPos,2));
end
existColumn = strcmp('peakArea',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakArea = NaN(size(DataTable,1),size(resultsPeakArea,2));
end
existColumn = strcmp('peakFWHM',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakFWHM = NaN(size(DataTable,1),size(resultsPeakFWHW,2));
end
existColumn = strcmp('peakBackground',DataTable.Properties.VariableNames);
if ~any(existColumn)
DataTable.peakBackground = NaN(size(DataTable,1),size(resultsPeakFWHW,2));
end
%if contains(p.Results.energyScale,'binding')
DataTable(p.Results.tableSelection,:).peakPosition = resultsPeakPos(:,1:2);
%end
DataTable(p.Results.tableSelection,:).peakFWHM = resultsPeakFWHW(:,1:2);
DataTable(p.Results.tableSelection,:).peakArea = resultsPeakArea(:,1:2);
DataTable(p.Results.tableSelection,:).peakBackground = resultsBkgrd(:,1:2);
end
end
+10 -2
View File
@@ -508,7 +508,10 @@ for ii = 1:size(TmpFileList{2},1) % do this for each list element
catch
tmp = h5read([TmpFileList{2}(ii).folder filesep TmpFileList{2}(ii).name],'/entry/instrument/NDAttributes/CenterEnergy'); % in eV
end
TmpFileList{2}(ii).scientaEkinRange_eV = [tmp(1)-TmpFileList{2}(ii).scientaPassEnergy_eV/20 tmp(1)+TmpFileList{2}(ii).scientaPassEnergy_eV/20];
TmpFileList{2}(ii).scientaEkinRange_eV = [double(tmp(1))-TmpFileList{2}(ii).scientaPassEnergy_eV/20 double(tmp(1))+TmpFileList{2}(ii).scientaPassEnergy_eV/20];
TmpFileList{2}(ii).scientaEkinStep_eV = NaN;
TmpFileList{2}(ii).scientaEkin_eV = linspace(TmpFileList{2}(ii).scientaEkinRange_eV(:,1)...
,TmpFileList{2}(ii).scientaEkinRange_eV(:,2),size(TmpFileList{2}(ii).image,1))';
@@ -531,6 +534,7 @@ for ii = 1:size(TmpFileList{2},1) % do this for each list element
end
TmpFileList{2}(ii).scientaEkin_eV = [TmpFileList{2}(ii).scientaEkinRange_eV(:,1):TmpFileList{2}(ii).scientaEkinStep_eV(1):TmpFileList{2}(ii).scientaEkinRange_eV(:,2)]';
end
clearvars tmp
% read I_0
try
@@ -563,8 +567,12 @@ for ii = 1:size(TmpFileList{2},1) % do this for each list element
try
TmpFileList{2}(ii).scientaRegionIterations = h5read([TmpFileList{2}(ii).folder filesep TmpFileList{2}(ii).name],'/scan 1/attrs/NumIterations');
catch
try
tmp = h5read([TmpFileList{2}(ii).folder filesep TmpFileList{2}(ii).name],'/entry/instrument/NDAttributes/NumIterations');
TmpFileList{2}(ii).scientaRegionIterations = tmp(1);
TmpFileList{2}(ii).scientaRegionIterations = double(tmp(1));
catch
TmpFileList{2}(ii).scientaRegionIterations = 1;
end
end
TmpFileList{2}(ii).scientaSequenceIterations = 1;