Home > bml > sync > bml_chunk_sessions.m

bml_chunk_sessions

PURPOSE ^

BML_CHUNK_SESSIONS breaks up sessions into smaller chunks

SYNOPSIS ^

function chunks = bml_chunk_sessions(session, split_time, chunk_duration)

DESCRIPTION ^

 BML_CHUNK_SESSIONS breaks up sessions into smaller chunks

 Use as 
   chunks = bml_chunk_sessions(session, split_time)
   chunks = bml_chunk_sessions(session, [], chunk_duration)

 session - annot table of sessions or chunks
 split_time - double: vector of times at which to split the sessions or 
           integer < 10 indicating the number of chuncks each session
           should be split into
 chunk_duration - double: desired duration of the resulting chunks
 returns a chuked version of session

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function chunks = bml_chunk_sessions(session, split_time, chunk_duration)
0002 
0003 % BML_CHUNK_SESSIONS breaks up sessions into smaller chunks
0004 %
0005 % Use as
0006 %   chunks = bml_chunk_sessions(session, split_time)
0007 %   chunks = bml_chunk_sessions(session, [], chunk_duration)
0008 %
0009 % session - annot table of sessions or chunks
0010 % split_time - double: vector of times at which to split the sessions or
0011 %           integer < 10 indicating the number of chuncks each session
0012 %           should be split into
0013 % chunk_duration - double: desired duration of the resulting chunks
0014 % returns a chuked version of session
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 %d does not belong to any session",split_time(i));
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

Generated on Tue 25-Sep-2018 10:08:19 by m2html © 2005