-
Notifications
You must be signed in to change notification settings - Fork 0
/
Gauss2FitSize.m
73 lines (67 loc) · 2.06 KB
/
Gauss2FitSize.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
function [fitresult, gof,locations] = Gauss2FitSize(edges, histdata,output,Name)
%CREATEFIT(EDGES,H4SMOOTHED)
% Create a fit.
%
% Data for 'Gaus2FitofSize' fit:
% X Input : edges
% Y Output: h4smoothed
% Output:
% fitresult : a fit object representing the fit.
% gof : structure with goodness-of fit info.
% Auto-generated by MATLAB on 20-May-2019 15:35:50
%% Fit: 'Gaus2FitofSize'.
[xData, yData] = prepareCurveData( edges, histdata );
for xx = 1:20
if yData(xx,1) >= abs(100)
yData(xx,1) = 0;
end
end
% Set up fittype and options.
ft = fittype( 'gauss2' );
excluded = 2500:max(edges)+1;
excludedPoints = excludedata( xData, yData, 'Indices', excluded );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Display = 'Off';
opts.Lower = [-Inf -Inf 0 -Inf -Inf 0];
opts.MaxIter = 500;
opts.StartPoint = [34.1913533834586 82 154.100307633407 6.28944539348627 354 228.854920388933];
opts.Exclude = excludedPoints;
% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts );
% Plot fit with data.
G = figure('Name','Gaus2FitSize','visible','off' );
yFitted = feval(fitresult,xData);
[pks,loc] = findpeaks(yFitted,xData);
szloc = length(loc);
Diam = [];
if loc ~= 1
for xx = 1:szloc
d = num2str(loc(xx,1));
if xx <szloc
rd = [d ' & '];
else
rd = d;
end
Diam = [Diam,rd];
end
end
Mx = ['Max: ' Diam ' nm'];
plot( fitresult, xData, yData);
hold on
plot(loc,pks,'vr','MarkerEdgeColor','r','MarkerFaceColor','r');
axis([0 max(edges) 0 (max(yFitted)+10)])
legend(Name,'Gaussian Fit',Mx,'Location','NorthEast');
legend ('boxoff')
% Label axes
xlabel 'Diameter [nm]'
ylabel 'Particlecounts'
set(gcf,'color','w');
grid on
locations = loc;
export_fig([output '_Gauss2Fit'],G,'-pdf','-tiff','-r300','-painters')
ExpData = array2table([xData,yData,yFitted]);
headers = {'Diameter' 'MeasuredData' 'FittedData'};
ExpData.Properties.VariableNames = headers;
writetable(ExpData,[output '_Gauss2Fit']);
close (G);
end