-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathquantifySimDynamics.m
More file actions
65 lines (55 loc) · 2.63 KB
/
quantifySimDynamics.m
File metadata and controls
65 lines (55 loc) · 2.63 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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
function [processivity, speed, lifetime, rate, fractionMotile, simResult, Nmotor] = quantifySimDynamics(motorState, simPar,analysisPar,nSimRepeat)
frameInterval = analysisPar.frameInterval;
zeroSpeedThresh = analysisPar.zeroSpeedThresh;
switchTooCloseThresh = analysisPar.switchTooCloseThresh;
simResult=table;
for ii=1:nSimRepeat
[dynamics] = lipowskiWithUnbindingSim(motorState,simPar);
t=dynamics.t;
x=dynamics.x;
runID=ii;
[simResultCur] = analyseSimDynamics(t,x,frameInterval,zeroSpeedThresh, switchTooCloseThresh, runID,dynamics);
if size(simResultCur,1)>0
simResult=[simResult;simResultCur];
end
end
%implement rate calculations as functions so can do bootstrap CIs
nBoot = 1000;
pause_processive_rateFcn= @(simResult) sum(simResult.isMotile==1 & simResult.isNextStateMotile==0)/ sum(simResult.duration(simResult.isMotile==1));
pause_processive_rate=pause_processive_rateFcn(simResult);
if ~isnan(pause_processive_rate)
pause_processive_rate_ci = bootci(nBoot,pause_processive_rateFcn,simResult);
rate.pause_processive = [pause_processive_rate, pause_processive_rate_ci'];
else
rate.pause_processive = [NaN,NaN,NaN];
end
reversal_processive_rateFcn= @(simResult) sum(simResult.isMotile==1 & simResult.isNextStateMotile==1)/ sum(simResult.duration(simResult.isMotile==1));
reversal_processive_rate=reversal_processive_rateFcn(simResult);
if ~isnan(reversal_processive_rate)
reversal_processive_rate_ci=bootci(nBoot,reversal_processive_rateFcn,simResult);
rate.reversal_processive = [reversal_processive_rate,reversal_processive_rate_ci'];
else
rate.reversal_processive = [NaN,NaN,NaN];
end
staticToMotile_rateFcn = @(simResult) sum(simResult.isMotile==0)/sum(simResult.duration(simResult.isMotile==0));
staticToMotile_rate = staticToMotile_rateFcn(simResult);
if ~isnan(staticToMotile_rate)
staticToMotile_rate_ci=bootci(nBoot,staticToMotile_rateFcn,simResult);
rate.staticToMotile = [staticToMotile_rate,staticToMotile_rate_ci'];
else
rate.staticToMotile = [NaN,NaN,NaN];
end
fractionMotileFcn = @(simResult) sum(simResult.duration(simResult.isMotile==1))/sum(simResult.duration);
fractionMotile = fractionMotileFcn(simResult);
if ~isnan(fractionMotile)
fractionMotile_ci=bootci(nBoot,fractionMotileFcn,simResult);
fractionMotile = [fractionMotile, fractionMotile_ci'];
else
fractionMotile = [NaN,NaN,NaN];
end
lifetime.All= simResult.duration;
lifetime.Processive = simResult.duration(simResult.isMotile==1);
lifetime.Static = simResult.duration(simResult.isMotile==0);
processivity = simResult.processivity(simResult.isMotile==1);
speed = simResult.speed;
Nmotor = simResult.Nmotor;