Description and explanation of MEG (ROI-extracted) data, to be found at https://osf.io/v3r52/. Unfortunately, the raw data cannot be shared due to our consent form used at the time of data collection, and privacy regulations at our institutes. Please contact Anne Urai for access.
Anne Urai, Leiden University, 20 September 2021 [email protected]
Each main file has the following title:
GA
('grand average', all data from the 60 participants together)-S1
or-S2
, for session 1 or session 2 in the MEG (with practice in between)_parcel_
, these are beamformed and parcellated into atlases, see Methods section_alpha_
,_beta_
,_gamma_
for the frequency band, see Methods section
Each file contains a FieldTrip-like data structure:
source =
struct with fields:
freq: 80
time: [1×163 double]
label: {62×1 cell}
pow: [62×23932×163 double]
powdimord: 'chan_rpt_time'
trialinfo: [23932×18 double]
freq
: the center frequency of each band. More information that was used to determine the frequency bands- alpha: freq = 10, timewin = 0.5, tapsmofrq = 3 (so 7 - 13 Hz)
- beta: freq = 24, timewin = 0.5, tapsmofrq = 12 (so 12 - 36 Hz)
- gamma: freq = 80, timewin = 0.4, tapsmofrq = 15 (so 65 - 95 Hz)
time
: time axis during the trial.- This is chopped up into 4 epochs: refererence, test stimulus, response, feedback. Each epoch's onset is at 0, and the breaks between epochs (due to jitter between them) is indicated with some padded NaNs. This allows you to plot the whole timecourse as in e.g. Figure 1e: take
1:length(source.time)
as the x-axis, and then use the functiontimename.m
to recode this and indicate the 0-points for all 4 events.
- This is chopped up into 4 epochs: refererence, test stimulus, response, feedback. Each epoch's onset is at 0, and the breaks between epochs (due to jitter between them) is indicated with some padded NaNs. This allows you to plot the whole timecourse as in e.g. Figure 1e: take
label
: the label of each ROI that was selected for analysis.glasser
/wang
/jwg
indicates the atlas of provenance (see Methods table)- for
wang
,vfc
indicates that the individual regions from the original paper have been grouped into visual field clusters, see Methods for grouping
- for
- those with
left
,right
are from one side of the brain- those with
lateralized
are left-right, useful for the motor signals - those without these terms, or
symm
, are symmetrical: the average signal from left and right ROIs
- those with
powdimord
is a FieldTrip indication of the dimensions ofpow
: first channels (= labels, aka ROIs), then repetitions (= trials), then timepoints within the trialpow
has the beamformed power modulation valuestrialinfo
is a table with columns that describe each trial. Since Matlab can't have a table within a structure, I'm attaching a separateallsubjects_meg.csv
table which has column names that are easier to work with. They two can be mapped to ensure that you're working with the correct trials, see the code snipperts below.- the column names in the
csv
file hopefully speak for themselves: forhand
andstart_hand
(you can ignore the latter), the mapping is 12 -> left and 18 -> right.idx
is a simple mapping variable that also exists insource.trialinfo
.
- the column names in the
Run the following Matlab code to work with the data
sjdat = subjectspecifics('ga');
% ============================ %
% load behavioral data
% ============================ %
tab = readtable(sprintf('%s/allsubjects_meg.csv', sjdat.csvdir));
tab = tab(ismember(tab.subj_idx, sjdat.clean), :); % remove 1 bad subject
% ============================ %
% load the MEG data
% ============================ %
source = load(sprintf('%s/GA-S%d_parcel_%s.mat', sjdat.roidir, ...
session, freqs(v).name));
source = source.source;
% remove some ugly stuff in the beginning and between epochs
if session ~= 5,
rmidx = [1:4, 31:41, 45:48, 79:85, 123:length(source.time)];
source.pow(:, :, rmidx) = [];
source.time(rmidx) = [];
end
% REMOVE NANS FROM TIMECOURSE - make the epoch borders smaller
% for better plotting
startSeq = strfind(squeeze(isnan(nanmean(nanmean(source.pow))))', true(1,3));
removeidx = false(1, length(source.time));
for s = 1:length(startSeq),
removeidx(startSeq(s)+1 : startSeq(s)+1) = 1;
end
source.pow(:, :, removeidx) = [];
source.time(removeidx) = [];
% ============================ %
% map them together
so you can work with the table
% ============================ %
[~, ~, tidx] = intersect(source.trialinfo(:, 18), tab.idx, 'stable');
assert(size(source.trialinfo, 1) == length(tidx));
tab = tab(tidx, :); % keep only that part of the table
assert(isequal(tab.idx, source.trialinfo(:, 18)), 'idx do not match');
Apart from the .mat
and allsubjects_meg.csv
files, I'm also including
allsubjects_meg_complete.csv
. This has beamformed power modulation values per time window of interest, so it's much smaller but easier to work with. The lateralization MEG values have been flipped for half the subjects, to account for the stimulus-response mapping counterbalancing. It has all trials, time windows and ROIs (withnan
for trials where the MEG was rejected).allsubjects_meg_lean.csv
, a much smaller file with only those trials with MEG, and those MEG trial-by-trial signals that are used for HDDM modelling and mediation.
Email me if you have any questions.