From 0c5c4f6ed9c0d6841a915fa0dcfb9d9c3ee92ca4 Mon Sep 17 00:00:00 2001 From: ThorBarRa Date: Thu, 23 May 2024 07:07:13 +0200 Subject: [PATCH] Added linear background fit. --- beamtime/nappBackground.m | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/beamtime/nappBackground.m b/beamtime/nappBackground.m index d239273..3dfb487 100644 --- a/beamtime/nappBackground.m +++ b/beamtime/nappBackground.m @@ -90,16 +90,18 @@ end % repeat this for all columns in input. for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1) + + if startsWith(p.Results.mode,'linfit') + ft = fittype( 'poly1' ); + elseif contains(p.Results.mode,'exponential') + ft = fittype( 'exp2' ); + end + if contains(p.Results.energyScale,'kinetic') - % LINEAR FIT - if startsWith(p.Results.mode,'linfit') - disp('linfit not yet supported') - % declining background - elseif contains(p.Results.mode,'exponential') + + if ~startsWith(p.Results.mode,'mean') [xData, yData] = prepareCurveData(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii},p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}); - % Set up fittype and options. - ft = fittype( 'exp2' ); excludedPoints = excludedata( xData, yData, 'domain',[p.Results.energyStart(1) p.Results.energyEnd(1)] ); if size(p.Results.energyStart,2) ==2 && size(p.Results.energyEnd,2) ==1 excludedPointsEins = excludedPoints; @@ -145,21 +147,17 @@ for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1) end b_mean = mean(p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}(b_1:b_2),'omitnan'); - tmp(ii,1) = cellfun(@(x) x-b_mean,p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable)(ii),'UniformOutput',false); + tmp(ii,1) = cellfun(@(x) x-b_mean,p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable)(ii),'UniformOutput',false); %#ok<*AGROW> end elseif contains(p.Results.energyScale,'binding') - if contains(p.Results.mode,'linfit') - disp('linfit not yet supported') - % MEAN - - elseif contains(p.Results.mode,'exponential') + if ~startsWith(p.Results.mode,'mean') [xData, yData] = prepareCurveData(p.Results.DataTable(p.Results.tableSelection,:).bindingEnergy_eV{ii},p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}); % Set up fittype and options. - ft = fittype( 'exp2' ); + excludedPoints = excludedata( xData, yData, 'domain',[p.Results.energyStart(1) p.Results.energyEnd(1)] ); if size(p.Results.energyStart,2) ==2 && size(p.Results.energyEnd,2) ==1 excludedPointsEins = excludedPoints; @@ -176,6 +174,8 @@ for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1) opts = fitoptions( 'Method', 'NonlinearLeastSquares','Exclude', ~excludedPoints ); opts.Display = 'Off'; + + % Fit model to data. [fitresult, ~] = fit( xData, yData, ft, opts ); if contains(p.Results.showFigures,'on') @@ -223,7 +223,7 @@ for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1) if contains(p.Results.showFigures,'on') % Plot fit with data. figure( 'Name', 'fit pre-edge' ); - h = plot( fitresult, xData, yData, excludedPoints ); + plot( fitresult, xData, yData, excludedPoints ); xlabel('Photon Energy eV') ylabel('partial A-M.E.Y.') grid on