Added peak area ratio as fitting constrain. Additional small bug fixes (not sure what I did)
This commit is contained in:
1 parent
7633f3a741
commit
fa1323b96d
5 files changed
+202
-104
No files matched your search
@@ -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'));
|
||||
|
||||
@@ -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) &...
|
||||
|
||||
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
|
||||
Reference in new issue
Block a user