-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathquestionnaire2bedlog.m
More file actions
75 lines (65 loc) · 1.82 KB
/
Copy pathquestionnaire2bedlog.m
File metadata and controls
75 lines (65 loc) · 1.82 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
66
67
68
69
70
71
72
73
74
function [bedTimeArray,riseTimeArray] = questionnaire2bedlog(Q,HNDid,datenumArray)
%QUESTIONNAIRE2BEDLOG Summary of this function goes here
% Detailed explanation goes here
idx = Q.HNDid == HNDid;
thisQ = Q(idx,:);
daysDatenum = unique(floor(datenumArray));
daysDatevec = datevec(daysDatenum(:));
daysDatetime = datetime(daysDatevec);
timeFormat = 'HH:MM:SS';
workBed = NaN;
workRise = NaN;
freeBed = NaN;
freeRise = NaN;
if ~strcmpi(thisQ.LMworkBed,'NA')
workBed = datevec(thisQ.LMworkBed,timeFormat);
end
if ~strcmpi(thisQ.LMworkAwake,'NA')
workRise = datevec(thisQ.LMworkAwake,timeFormat);
end
if ~strcmpi(thisQ.LMfreeBed,'NA')
freeBed = datevec(thisQ.LMfreeBed,timeFormat);
end
if ~strcmpi(thisQ.LMfreeAwake,'NA')
freeRise = datevec(thisQ.LMfreeAwake,timeFormat);
end
if (isnan(workBed(1)) && isnan(freeBed(1))) || (isnan(workRise(1)) && isnan(freeRise(1)))
error('Insufficient questionnaire information to generate bed log.')
else
if isnan(workBed(1))
workBed = freeBed;
elseif isnan(freeBed(1))
freeBed = workBed;
end
if isnan(workRise(1))
workRise = freeRise;
elseif isnan(freeRise(1))
freeRise = workRise;
end
end
workBed(1:3) = 0;
workRise(1:3) = 0;
freeBed(1:3) = 0;
freeRise(1:3) = 0;
if workBed(4) >= workRise(4)
workBed(3) = -1;
end
if freeBed(4) >= freeRise(4)
freeBed(3) = -1;
end
freeIdx = isweekend(daysDatetime);
bedTimeArray = zeros(size(daysDatetime));
riseTimeArray = zeros(size(daysDatetime));
for iDay = 1:numel(daysDatetime)
thiDatevec = daysDatevec(iDay,:);
if freeIdx(iDay)
thisBed = freeBed;
thisRise = freeRise;
else
thisBed = workBed;
thisRise = workRise;
end
bedTimeArray(iDay) = datenum(thiDatevec + thisBed);
riseTimeArray(iDay) = datenum(thiDatevec + thisRise);
end
end