0001 function chunks = bml_chunk_sessions(session, split_time, chunk_duration)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 session = bml_annot_table(session);
0018 assert(isempty(bml_annot_overlap(session)),'sessions should not overlap');
0019 if nargin == 1
0020 split_time = [];
0021 elseif nargin == 2
0022 if length(split_time)==1 && abs(split_time-round(split_time,0))<1e-9 && split_time <= 10
0023 n_split = split_time;
0024 split_time = [];
0025 for s=1:height(session)
0026 bp = linspace(session.starts(s),session.ends(s),n_split+1);
0027 split_time = [split_time, bp(2:(end-1))];
0028 end
0029 end
0030 elseif nargin == 3
0031 if isempty(split_time)
0032 split_time = [];
0033 end
0034 for s=1:height(session)
0035 n_split = round(session.duration(s)/chunk_duration);
0036 bp = linspace(session.starts(s),session.ends(s),n_split+1);
0037 split_time = [split_time, bp(2:(end-1))];
0038 end
0039 else
0040 warning("incorrect number of arguments");
0041 end
0042
0043 if ~ismember('session_id',session.Properties.VariableNames)
0044 session.session_id = session.id;
0045 end
0046 if ~ismember('session_part',session.Properties.VariableNames)
0047 session.session_part = ones(height(session),1);
0048 end
0049
0050 split_time = sort(split_time);
0051 for i=1:length(split_time)
0052 session_i=session((session.starts < split_time(i)) & (session.ends > split_time(i)),:);
0053 if isempty(session_i)
0054 warning("time
0055 else
0056 session.ends(session.id==session_i.id(1)) = split_time(i);
0057 session_i.id = max(session.id)+1;
0058 session_i.starts = split_time(i);
0059 session_i.session_part = session_i.session_part + 1;
0060 session = [session; session_i];
0061 end
0062 end
0063
0064 session.id=[];
0065 chunks=bml_annot_table(session);
0066
0067
0068
0069
0070
0071