/
segFind.m
76 lines (56 loc) · 1.99 KB
/
segFind.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 [event, segLength, segState, state, nSeg, segDir,segDistance,segTime,percentActive] = segFind(meanLogSlope,direction,xPos,yPos,smoothFactor,dt)
%% Define threshold: Active for MSD log slope > threshold etc...
threshold = 1.4;
%% Creat offset vectors and find when smooth function crosses threshold
x = smooth(meanLogSlope,smoothFactor);
x1 = [x;0];
x2 = [0;x];
event = find((x1<threshold & x2>=threshold)|(x1>threshold & x2<=threshold));
if isempty(event)==0
if event(length(event)) > length(x)
event(length(event)) = [];
end
end
%% Add 1 and length(x) to event
event = [1;event;length(x)];
%% Output number of segments per vesicle and length of each segment
nSeg = length(event)-1;
segLength = diff(event); % Number of time steps,
% Notation for segType:
% 1 denotes passive
% 2 denotes undetermined
% 3 denotes active
%% Define transport state for each segment, subject to minimum segment length of 20
% threshold defined above!
for ii = 1:nSeg
if segLength(ii)>20
if x(event(ii)+1) < threshold
segState(ii) = 1;
else
segState(ii) = 3;
end
else
segState(ii) = 2;
end
end
%% script filled segType here
for ii = 1:nSeg
state(event(ii):event(ii+1)-1)=segState(ii);
end
state(length(state)+1) = state(length(state));
%% Determine average direction for each segment:
for ii = 1:nSeg
meanDir = mean(direction(event(ii):event(ii+1)));
if meanDir >= 0.5
segDir(ii) = 1; % Moving away from cell body
else
segDir(ii) = 0; % Moving towards cell body
end
end
%% Determine segDistance and segTime
for ii=1:nSeg
segTime(ii) = segLength(ii)*dt; %[sec]
segDistance(ii) = sqrt((xPos(event(ii+1))-xPos(event(ii)))^2+(yPos(event(ii+1))-yPos(event(ii)))^2); %[m]
end
%% Determine percent time active for particle (intentionally doesn't include indeterminate segments!)
percentActive = sum(segTime(find(segState==3)))/(sum(segTime(find(segState==3)))+sum(segTime(find(segState==1))));