Averaging Fiff-files
Simple Matlab script for averaging of Fiff-files. It assumes that all data files have identical data parameters (e.g. after interpolation). You should also have applied identical filtering, baseline correction, referencing etc. where appropriate. This script will not care about bad channels - if a channel is bad in one file, it should be treated as bad in the grand-mean as well.
% Compute the grand-mean for a list of Fiff-files in cell array "files{}" % The string "file_out" specifies the file name for output % The first file of the list will be used as a template for Fiff-output % This obviously assumes that all files have identical parameters (e.g. are % interpolated to a standard sensor array) % OH, March 2009 % output file name for grand-mean data file_out = '/fullpath/GrandMean.fif'; % List of fiff-files to be averaged fiff_files = {'/fullpath/file4subj1.fif', ... '/fullpath/file4subj2.fif', ... '/fullpath/file4subj3.fif'}; fid = fopen(file_out, 'a'); if fid==-1, fprintf(1, 'Cannot access output file %s\n', file_out); return; end; fclose(fid); nr_files = length(fiff_files); epoch_gm = [0]; for ff = 1:nr_files, % read all files and average all that might be relevant fprintf(1, '%s\n', fiff_files{ff}); data = fiff_read_evoked(fiff_files{ff}); if ff==1, data_templ = data; % first data set will be used as template for output end; epoch_gm = epoch_gm + data.evoked.epochs; % average MEG data epoch end; epoch_gm = epoch_gm/nr_files; data_templ.evoked.epochs = epoch_gm; % insert averaged data into template structure fiff_write_evoked(file_out, data_templ); % Write average % The end of this