-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparams.m
More file actions
51 lines (48 loc) · 1.47 KB
/
Copy pathparams.m
File metadata and controls
51 lines (48 loc) · 1.47 KB
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
function [scanPeak,scanCOM,scanFWHM] = params(scan)
% PARAMS Calculate peak,COM and FWHM of a scan
%
% Copyright 2004, Zhang Jiang
% --- peak
[peak,peakIndex] = max(scan(:,2));
scanPeak.X = scan(peakIndex,1);
scanPeak.Y = peak;
% --- COM
scanCOM = trapz(scan(:,1),scan(:,1).*scan(:,2))/trapz(scan(:,1),scan(:,2));
% --- FWHM
try
leftError = 0;
halfLeftIndex = find(scan(1:peakIndex,2)<peak/2);
left_scan = scan(halfLeftIndex(end):peakIndex,:);
[~,m,~] = unique(left_scan(:,2));
left_scan = left_scan(m,:);
left_scan = sortrows(left_scan,1);
left = interp1(...
left_scan(:,2),left_scan(:,1),peak/2);
catch
leftError = 1;
end
try
rightError = 0;
halfRightIndex = find(scan(peakIndex:end,2)<peak/2)+peakIndex-1;
right_scan = scan(peakIndex:halfRightIndex(1),:);
[~,m,~] = unique(right_scan(:,2));
right_scan = right_scan(m,:);
right_scan = sortrows(right_scan,1);
right = interp1(...
right_scan(:,2),right_scan(:,1),peak/2);
catch
rightError = 1;
end
if leftError == 0 && rightError == 0
scanFWHM.center = (left+right)/2;
scanFWHM.FWHM = right-left;
elseif leftError == 0 && rightError == 1
scanFWHM.center = left;
scanFWHM.FWHM = scan(end,1)-left;
elseif leftError == 1 && rightError == 0
scanFWHM.center = right;
scanFWHM.FWHM = right-scan(1,1);
else
scanFWHM.center = (scan(end,1)+scan(1,1))/2;
scanFWHM.FWHM = scan(end,1)-scan(1,1);
end