diff --git a/beamtime/nappBackground.m b/beamtime/nappBackground.m index ee6efe5..e8003d8 100644 --- a/beamtime/nappBackground.m +++ b/beamtime/nappBackground.m @@ -103,16 +103,16 @@ for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1) 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; - clearvars excludedPoints + clearvars excludedPoints excludedPointsZwei = excludedata( xData, yData, 'domain',[xData(1) p.Results.energyStart(2)] ); excludedPoints = excludedPointsEins & excludedPointsZwei; elseif size(p.Results.energyStart,2) ==2 && size(p.Results.energyEnd,2) ==2 excludedPointsEins = excludedPoints; - clearvars excludedPoints + clearvars excludedPoints excludedPointsZwei = excludedata( xData, yData, 'domain',[p.Results.energyStart(2) p.Results.energyEnd(2)] ); excludedPoints = excludedPointsEins & excludedPointsZwei; end - + opts = fitoptions( 'Method', 'NonlinearLeastSquares','Exclude', ~excludedPoints ); opts.Display = 'Off'; @@ -121,8 +121,8 @@ for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1) if contains(p.Results.showFigures,'on') % Plot fit with data. figure( 'Name', 'untitled fit 1' ); - plot( fitresult, xData, yData, excludedPoints ); - % legend( h, 'y vs. x', 'Excluded y vs. x', 'untitled fit 1', 'Location', 'NorthEast', 'Interpreter', 'none' ); + plot( fitresult, xData, yData, excludedPoints ); + % legend( h, 'y vs. x', 'Excluded y vs. x', 'untitled fit 1', 'Location', 'NorthEast', 'Interpreter', 'none' ); % Label axes xlabel( 'kinetic energy [eV]', 'Interpreter', 'none' ); ylabel( 'PE intensity', 'Interpreter', 'none' ); @@ -131,9 +131,9 @@ for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1) end if endsWith(p.Results.mode,'divide') tmp{ii,1} = p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}./fitresult(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}); - + else - tmp{ii,1} = p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}-fitresult(p.Results.DataTable(p.Results.tableSelection,:).xRayEkin_eV{ii}); + tmp{ii,1} = p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}-fitresult(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}); end elseif startsWith(p.Results.mode,'mean') b_1 = find(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii} >= p.Results.energyStart,1); @@ -153,7 +153,48 @@ for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1) if contains(p.Results.mode,'linfit') disp('linfit not yet supported') % MEAN - else + + elseif contains(p.Results.mode,'exponential') + [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; + clearvars excludedPoints + excludedPointsZwei = excludedata( xData, yData, 'domain',[xData(1) p.Results.energyStart(2)] ); + excludedPoints = excludedPointsEins & excludedPointsZwei; + elseif size(p.Results.energyStart,2) ==2 && size(p.Results.energyEnd,2) ==2 + excludedPointsEins = excludedPoints; + clearvars excludedPoints + excludedPointsZwei = excludedata( xData, yData, 'domain',[p.Results.energyStart(2) p.Results.energyEnd(2)] ); + excludedPoints = excludedPointsEins & excludedPointsZwei; + end + + 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') + % Plot fit with data. + figure( 'Name', 'untitled fit 1' ); + plot( fitresult, xData, yData, excludedPoints ); + % legend( h, 'y vs. x', 'Excluded y vs. x', 'untitled fit 1', 'Location', 'NorthEast', 'Interpreter', 'none' ); + % Label axes + xlabel( 'binding energy [eV]', 'Interpreter', 'none' ); + ylabel( 'PE intensity', 'Interpreter', 'none' ); + grid on + title(p.Results.DataTable(p.Results.tableSelection,:).name{ii},'Interpreter','none') + end + if endsWith(p.Results.mode,'divide') + tmp{ii,1} = p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}./fitresult(p.Results.DataTable(p.Results.tableSelection,:).bindingEnergy_eV{ii}); + + else + tmp{ii,1} = p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}-fitresult(p.Results.DataTable(p.Results.tableSelection,:).bindingEnergy_eV{ii}); + end + elseif startsWith(p.Results.mode,'mean') b_1 = find(p.Results.DataTable(p.Results.tableSelection,:).bindingEnergy_eV{ii} <= p.Results.energyStart,1); b_2 = find(p.Results.DataTable(p.Results.tableSelection,:).bindingEnergy_eV{ii} <= p.Results.energyEnd,1);