function [m_dd] = analysis_repos_veto_block(subj,blocks) % function [m_dd] = analysis_repos_veto_block(subj,blocks) % outputs median dominance durations for the requested blocks % called by analyzeMain.m load('subjects_list.mat'); % list of participant and block order; 1-subj, 2-block, 3-belt_or_gear, 4-dir curr_index = []; belt_or_gear = []; dir = []; filename = []; rot = []; dat = []; jumps_ind = []; exp_start_ind = []; exp_end_ind = []; switch_points = []; dom_dur = []; for k = 1:2 % we have two blocks for each condition curr_index = find(subjects_list(:, 1) == subj & subjects_list(:, 2) == blocks(k)); belt_or_gear = subjects_list(curr_index,3); dir = subjects_list(curr_index,4); filename = sprintf('dat_am1_%02d_%02d_%01d_%01d.mat',subj,blocks(k),belt_or_gear,dir); load(filename); % variable name: "dat" rot = diff(dat(:,2)); jumps_ind = find(abs(rot)>200); for i = 1:length(jumps_ind) if rot(jumps_ind(i)) < 0 rot(jumps_ind(i)) = 360 + rot(jumps_ind(i)); elseif rot(jumps_ind(i)) > 0 rot(jumps_ind(i)) = rot(jumps_ind(i)) - 360; end end % get start and end indices exp_start_ind = find(rot~=0,1,'first'); exp_end_ind = find(rot~=0,1,'last'); if exp_end_ind == length(rot) exp_end_ind = exp_end_ind - 1; end % fill "holes" in data resulting from sampling rate difference: where only 1 iteration is 0 and dir. is the same before % and after, replace with subsequent value: % "Specifically, manipulandum % rotation velocity data were segmented into periods of % rotation in one direction or the other, as well as periods % with no movement (no change of position for at least % two subsequent sample points). For each observer and % condition, perceptual stability was defined as the % median duration of all nonzero velocity segments." for i = exp_start_ind+1:exp_end_ind-1 if rot(i) == 0 if rot(i-1)*rot(i+1) > 0 % neither is 0 and they have the same sign rot(i) = rot(i+1); % replace with next iteration's value end end end % get switching points (any change between positive, zero, or negative). % Switching point is defined as the datapoint before the change. switch_c = 0; for i = exp_start_ind:exp_end_ind if rot(i) > 0 if rot(i+1) <= 0 switch_c = switch_c + 1; switch_points(switch_c) = i; end elseif rot(i) < 0 if rot(i+1) >= 0 switch_c = switch_c + 1; switch_points(switch_c) = i; end elseif rot(i) == 0 if rot(i+1) ~= 0 switch_c = switch_c + 1; switch_points(switch_c) = i; end end end % get dominance durations (where not 0) dom_dur_c = 0; for i = 1:(switch_c-1) if mean(rot((switch_points(i)+1):switch_points(i+1))) ~= 0 dom_dur_c = dom_dur_c + 1; dom_dur(dom_dur_c) = dat(switch_points(i+1),1)-dat(switch_points(i),1); end end % get median dominance duration if k == 1 if dom_dur_c >= 1 dd_1 = dom_dur; else dd_1 = NaN; end elseif k == 2 if dom_dur_c >= 1 dd_2 = dom_dur; else dd_2 = NaN; end end curr_index = []; belt_or_gear = []; dir = []; filename = []; rot = []; dat = []; jumps_ind = []; exp_start_ind = []; exp_end_ind = []; switch_points = []; dom_dur = []; end % for k = 1:2 m_dd = nanmedian(horzcat(dd_1,dd_2)); end