0001 function bml_sync_check(cfg)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 sync_roi_vars = {'session_id','session_part','filetype','sync_channel','sync_type','chunk_id'};
0018
0019 if istable(cfg)
0020 cfg = struct('roi',cfg);
0021 end
0022
0023 sync_roi = bml_roi_table(bml_getopt(cfg,'roi'),'roi_os');
0024 praat = bml_getopt(cfg,'praat',true);
0025 ft_feedback = bml_getopt_single(cfg,'ft_feedback','no');
0026
0027 assert(~isempty(sync_roi),'empty sync roi table');
0028 assert(all(ismember(sync_roi_vars,sync_roi.Properties.VariableNames)),...
0029 "roi table should have vars
0030
0031
0032 chunk_ids=unique(sync_roi.chunk_id);
0033 for chunk_i=1:length(chunk_ids)
0034 chunk_id = chunk_ids(chunk_i);
0035 master_roi = sync_roi((sync_roi.chunk_id==chunk_id) & (sync_roi.sync_type=="master"),:);
0036 slave_roi = sync_roi((sync_roi.chunk_id==chunk_id) & (sync_roi.sync_type=="slave"),:);
0037
0038 master_filename = unique(master_roi.name);
0039 master_folder = unique(master_roi.name);
0040
0041 assert(length(master_filename)==1 & length(master_folder)==1,...
0042 "More than one master file for chunk
0043 assert(length(unique(master_roi.s1))==1,"Inconsistent s1 for master of chunk
0044 assert(length(unique(master_roi.s2))==1,"Inconsistent s2 for master of chunk
0045 assert(length(unique(master_roi.t1))==1,"Inconsistent t1 for master of chunk
0046 assert(length(unique(master_roi.t2))==1,"Inconsistent t2 for master of chunk
0047 assert(length(unique(master_roi.starts))==1,"Inconsistent starts for master of chunk
0048 assert(length(unique(master_roi.ends))==1,"Inconsistent ends for master of chunk
0049
0050 cfg=[];
0051 cfg.roi=master_roi(1,:);
0052 cfg.channel=unique(master_roi.sync_channel);
0053 master = bml_load_continuous(cfg);
0054
0055 if praat
0056 bml_praat(strcat('c',num2str(chunk_id),'_master_',master_filename),master);
0057 end
0058
0059 for slave_i=1:height(slave_roi)
0060
0061 cfg=[];
0062 cfg.roi=slave_roi(slave_i,:);
0063 cfg.channel=unique(slave_roi.sync_channel(slave_i));
0064 slave = bml_load_continuous(cfg);
0065
0066 if praat
0067 t1=master.time{1}(1);
0068 t2=master.time{1}(end);
0069 cfg=[]; cfg.time=master.time; cfg.method='pchip';
0070 cfg.feedback=ft_feedback;
0071 slave_crop=ft_resampledata(cfg,bml_crop(slave,t1,t2));
0072 slave_crop.fsample = master.fsample;
0073 bml_praat(strcat('c',num2str(chunk_id),'_slave_',slave_roi.name(slave_i)),slave_crop);
0074 end
0075
0076 end
0077 end
0078
0079
0080
0081
0082