function[e] = calculate_aggregate(e, index); % % Extract aggregated data based on parameters / selection of % subjects/sessions/trials % aggregate = e.aggregates(index); try tmp = aggregate.trials; aggregate.trials = str2num(aggregate.trials); if (isempty(aggregate.trials)) aggregate.trials = tmp; end catch end %% rewrite all subjects to list of subjects... if strcmp(aggregate.subjects, 'All subjects') e.aggregates(index).subjects = 1:length(e.subjects); end if strcmp(aggregate.sessions, 'All sessions') e.aggregates(index).sessions = 1:length(e.subjects(1).sessions); end aggregate = e.aggregates(index); stimulus_onsets = {}; idx =1; for sub = 1:length(aggregate.subjects) subject_id = aggregate.subjects(sub); for sess = 1:length(aggregate.sessions) sess_id = aggregate.sessions(sess); %trial_query = aggregate.trials; trials = aggregate.trials{subject_id}{sess_id}; %aggregate.e.get_trials_based_on_label(e.subjects(subject_id).sessions(sess_id), trial_query); for t = 1:length(trials) trial_id = trials(t); trial_list(idx) = e.subjects(subject_id).sessions(sess_id).trials(trial_id).data; stimulus_onsets{idx} = e.subjects(subject_id).sessions(sess_id).trials(trial_id).stimulus_onset - ... e.subjects(subject_id).sessions(sess_id).trials(trial_id).trial_start; idx = idx + 1; end end end if isempty(find(~cellfun(@isempty,stimulus_onsets))); display('return?'); return; end min_onset = min([stimulus_onsets{:}]); max_onset = min([stimulus_onsets{:}]); diffs = [stimulus_onsets{:}] - min_onset; max_diff = max(diffs); clear trials for t = 1:length(trial_list) try trials{t} = [ nan(1,max_diff - diffs(t)) trial_list(t).baseline_corrected.filtered(diffs(t)+1:end-max_diff)' ]; catch display('error'); end end min_trial_length = min(cellfun(@length, trials)); for t = 1:length(trial_list) try trial_mat(t,:) = trials{t}(1:min_trial_length); catch end end mean_trial = mean(trial_mat); std_trial = std(trial_mat); var_trial = var(trial_mat); l = length(mean_trial); mean_trial([1:e.settings.FilterSize end-e.settings.FilterSize:end]) = NaN; std_trial([1:e.settings.FilterSize end-e.settings.FilterSize:end]) = NaN; var_trial([1:e.settings.FilterSize end-e.settings.FilterSize:end]) = NaN; aggregate.mean = mean_trial; aggregate.std = std_trial; aggregate.var = var_trial; e.aggregates(index).data = aggregate;