General example
% Example script for batch-processing multiple subjects' Siemens IMA data
% with accompanying water references. Each subject has four scans each to
% be joined together and treated as single datasets during data processing.
%
% Remember to check GannetPreInitialise.m has the appropriate settings for
% your data: 'join' must be set to '1'.
data_dir = '/Users/username/Documents/my_project/data'; % Root data directory
% For joining files for each subject and batching over multiple subjects, the
% data must be entered as an M x N cell array, where M is the number of
% files per subject and N is the number of subjects. In this example, we
% have only two subjects, each with four files that are to be joined.
sub01 = {'sub-01-1/MPRESS1_1.IMA', ...
'sub-01-2/MPRESS2_1.IMA', ...
'sub-01-3/MPRESS3_1.IMA', ...
'sub-01-4/MPRESS4_1.IMA'};
sub02 = {'sub-02-1/MPRESS1_1.IMA', ...
'sub-02-2/MPRESS2_1.IMA', ...
'sub-02-3/MPRESS3_1.IMA', ...
'sub-02-4/MPRESS4_1.IMA'};
metab_data = [sub01(:), sub02(:)]; % Make an M x N cell array
metab_data = fullfile(data_dir, metab_data); % It is good practice to include the full pathname
% Now we do the same for the water reference data. Because of how file
% joining is currently coded in Gannet, there needs to be the same number
% of water reference files per subject as the metabolite data.
sub01_w = {'sub-01-1_w/WATREF1_1.IMA', ...
'sub-01-2_w/WATREF2_1.IMA', ...
'sub-01-3_w/WATREF3_1.IMA', ...
'sub-01-4_w/WATREF4_1.IMA'};
sub02_w = {'sub-02-1_w/WATREF1_1.IMA', ...
'sub-02-2_w/WATREF2_1.IMA', ...
'sub-02-3_w/WATREF3_1.IMA', ...
'sub-02-4_w/WATREF4_1.IMA'};
water_data = [sub01_w(:), sub02_w(:)];
water_data = fullfile(data_dir, water_data);
anat = {'sub-01_T1w.nii', 'sub-02_T1w.nii'};
MRS = GannetLoad(metab_data, water_data);
MRS = GannetFit(MRS);
MRS = GannetCoRegister(MRS, anat);
MRS = GannetSegment(MRS);
MRS = GannetQuantify(MRS);
Siemens RDA files
% Example script for batch-processing multiple subjects' Siemens RDA data
% with accompanying water references. Each subject has two scans each to
% be joined together and treated as single datasets during data processing.
%
% As Siemens .rda files are typically exported in pairs for MEGA-edited
% data (i.e., edit-ON/edit-OFF subexperiments), the command syntax for
% joining such files is slightly different, as shown below.
%
% Remember to check GannetPreInitialise.m has the appropriate settings for
% your data: 'join' must be set to '1'.
data_dir = '/Users/username/Documents/my_project/data'; % Root data directory
% For joining files for each subject and batching over multiple subjects,
% the data must be entered as an M x N x P cell array, where M is the
% number of files per subject to join, N is the number of subjects, and P
% is the number of subexperiment scans (two for MEGA editing). In this
% example, we have only two subjects, each with two pairs of .rda files
% (two scans) that are to be joined.
fnames_metab = {'sub01_run1_OFF.rda'
'sub01_run1_ON.rda'
'sub01_run2_OFF.rda'
'sub01_run2_ON.rda'
'sub02_run1_OFF.rda'
'sub02_run1_ON.rda'
'sub02_run2_OFF.rda'
'sub02_run2_ON.rda'};
metab_data(:,1,1) = fnames_metab([1 3]);
metab_data(:,1,2) = fnames_metab([2 4]);
metab_data(:,2,1) = fnames_metab([5 7]);
metab_data(:,2,2) = fnames_metab([6 8]);
metab_data = fullfile(data_dir, metab_data);
% Water reference data are saved as single files. Because of how file
% joining is currently coded in Gannet, there needs to be the same number
% of water reference files per subject as the metabolite data.
fnames_water = {'sub01_water.rda', 'sub02_water.rda'};
water_data(:,1) = fnames_water([1 1]);
water_data(:,2) = fnames_water([2 2]);
water_data = fullfile(data_dir, water_data);
anat = {'sub-01_T1w.nii', 'sub-02_T1w.nii'};
MRS = GannetLoad(metab_data, water_data);
MRS = GannetFit(MRS);
MRS = GannetCoRegister(MRS, anat);
MRS = GannetSegment(MRS);
MRS = GannetQuantify(MRS);
LS0tCnRpdGxlOiAiSm9pbmluZyBkYXRhIGZpbGVzIgpkYXRlOiAiTGFzdCB1cGRhdGVkOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVCICVkLCAlWScpYCIKb3V0cHV0OiBodG1sX2RvY3VtZW50Ci0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyLCBjaGlsZCA9IGMoImpzL2JhY2stdG8tdG9wLmh0bWwiLCAianMvY29weS10by1jbGlwYm9hcmQuaHRtbCIpfQpgYGAKCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0KYm9keSAubWFpbi1jb250YWluZXIgewogIG1heC13aWR0aDogOTAwcHg7Cn0KYGBgCgo8YnI+CgojIyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30KCiMjIyBHZW5lcmFsIGV4YW1wbGUKCmBgYHtvY3RhdmUsIGV2YWwgPSBGQUxTRX0KJSBFeGFtcGxlIHNjcmlwdCBmb3IgYmF0Y2gtcHJvY2Vzc2luZyBtdWx0aXBsZSBzdWJqZWN0cycgU2llbWVucyBJTUEgZGF0YQolIHdpdGggYWNjb21wYW55aW5nIHdhdGVyIHJlZmVyZW5jZXMuIEVhY2ggc3ViamVjdCBoYXMgZm91ciBzY2FucyBlYWNoIHRvCiUgYmUgam9pbmVkIHRvZ2V0aGVyIGFuZCB0cmVhdGVkIGFzIHNpbmdsZSBkYXRhc2V0cyBkdXJpbmcgZGF0YSBwcm9jZXNzaW5nLgolIAolIFJlbWVtYmVyIHRvIGNoZWNrIEdhbm5ldFByZUluaXRpYWxpc2UubSBoYXMgdGhlIGFwcHJvcHJpYXRlIHNldHRpbmdzIGZvcgolIHlvdXIgZGF0YTogJ2pvaW4nIG11c3QgYmUgc2V0IHRvICcxJy4KCmRhdGFfZGlyID0gJy9Vc2Vycy91c2VybmFtZS9Eb2N1bWVudHMvbXlfcHJvamVjdC9kYXRhJzsgJSBSb290IGRhdGEgZGlyZWN0b3J5CgolIEZvciBqb2luaW5nIGZpbGVzIGZvciBlYWNoIHN1YmplY3QgYW5kIGJhdGNoaW5nIG92ZXIgbXVsdGlwbGUgc3ViamVjdHMsIHRoZQolIGRhdGEgbXVzdCBiZSBlbnRlcmVkIGFzIGFuIE0geCBOIGNlbGwgYXJyYXksIHdoZXJlIE0gaXMgdGhlIG51bWJlciBvZgolIGZpbGVzIHBlciBzdWJqZWN0IGFuZCBOIGlzIHRoZSBudW1iZXIgb2Ygc3ViamVjdHMuIEluIHRoaXMgZXhhbXBsZSwgd2UKJSBoYXZlIG9ubHkgdHdvIHN1YmplY3RzLCBlYWNoIHdpdGggZm91ciBmaWxlcyB0aGF0IGFyZSB0byBiZSBqb2luZWQuCnN1YjAxID0geydzdWItMDEtMS9NUFJFU1MxXzEuSU1BJywgLi4uCiAgICAgICAgICdzdWItMDEtMi9NUFJFU1MyXzEuSU1BJywgLi4uCiAgICAgICAgICdzdWItMDEtMy9NUFJFU1MzXzEuSU1BJywgLi4uCiAgICAgICAgICdzdWItMDEtNC9NUFJFU1M0XzEuSU1BJ307CgpzdWIwMiA9IHsnc3ViLTAyLTEvTVBSRVNTMV8xLklNQScsIC4uLgogICAgICAgICAnc3ViLTAyLTIvTVBSRVNTMl8xLklNQScsIC4uLgogICAgICAgICAnc3ViLTAyLTMvTVBSRVNTM18xLklNQScsIC4uLgogICAgICAgICAnc3ViLTAyLTQvTVBSRVNTNF8xLklNQSd9OwoKbWV0YWJfZGF0YSA9IFtzdWIwMSg6KSwgc3ViMDIoOildOyAlIE1ha2UgYW4gTSB4IE4gY2VsbCBhcnJheQptZXRhYl9kYXRhID0gZnVsbGZpbGUoZGF0YV9kaXIsIG1ldGFiX2RhdGEpOyAlIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gaW5jbHVkZSB0aGUgZnVsbCBwYXRobmFtZQogICAgICAgICAKJSBOb3cgd2UgZG8gdGhlIHNhbWUgZm9yIHRoZSB3YXRlciByZWZlcmVuY2UgZGF0YS4gQmVjYXVzZSBvZiBob3cgZmlsZQolIGpvaW5pbmcgaXMgY3VycmVudGx5IGNvZGVkIGluIEdhbm5ldCwgdGhlcmUgbmVlZHMgdG8gYmUgdGhlIHNhbWUgbnVtYmVyCiUgb2Ygd2F0ZXIgcmVmZXJlbmNlIGZpbGVzIHBlciBzdWJqZWN0IGFzIHRoZSBtZXRhYm9saXRlIGRhdGEuCnN1YjAxX3cgPSB7J3N1Yi0wMS0xX3cvV0FUUkVGMV8xLklNQScsIC4uLgogICAgICAgICAgICdzdWItMDEtMl93L1dBVFJFRjJfMS5JTUEnLCAuLi4KICAgICAgICAgICAnc3ViLTAxLTNfdy9XQVRSRUYzXzEuSU1BJywgLi4uCiAgICAgICAgICAgJ3N1Yi0wMS00X3cvV0FUUkVGNF8xLklNQSd9OwoKc3ViMDJfdyA9IHsnc3ViLTAyLTFfdy9XQVRSRUYxXzEuSU1BJywgLi4uCiAgICAgICAgICAgJ3N1Yi0wMi0yX3cvV0FUUkVGMl8xLklNQScsIC4uLgogICAgICAgICAgICdzdWItMDItM193L1dBVFJFRjNfMS5JTUEnLCAuLi4KICAgICAgICAgICAnc3ViLTAyLTRfdy9XQVRSRUY0XzEuSU1BJ307Cgp3YXRlcl9kYXRhID0gW3N1YjAxX3coOiksIHN1YjAyX3coOildOwp3YXRlcl9kYXRhID0gZnVsbGZpbGUoZGF0YV9kaXIsIHdhdGVyX2RhdGEpOwoKYW5hdCA9IHsnc3ViLTAxX1Qxdy5uaWknLCAnc3ViLTAyX1Qxdy5uaWknfTsKCk1SUyA9IEdhbm5ldExvYWQobWV0YWJfZGF0YSwgd2F0ZXJfZGF0YSk7Ck1SUyA9IEdhbm5ldEZpdChNUlMpOwpNUlMgPSBHYW5uZXRDb1JlZ2lzdGVyKE1SUywgYW5hdCk7Ck1SUyA9IEdhbm5ldFNlZ21lbnQoTVJTKTsKTVJTID0gR2FubmV0UXVhbnRpZnkoTVJTKTsKYGBgCgojIyMgU2llbWVucyBSREEgZmlsZXMKCmBgYHtvY3RhdmUsIGV2YWwgPSBGQUxTRX0KJSBFeGFtcGxlIHNjcmlwdCBmb3IgYmF0Y2gtcHJvY2Vzc2luZyBtdWx0aXBsZSBzdWJqZWN0cycgU2llbWVucyBSREEgZGF0YQolIHdpdGggYWNjb21wYW55aW5nIHdhdGVyIHJlZmVyZW5jZXMuIEVhY2ggc3ViamVjdCBoYXMgdHdvIHNjYW5zIGVhY2ggdG8KJSBiZSBqb2luZWQgdG9nZXRoZXIgYW5kIHRyZWF0ZWQgYXMgc2luZ2xlIGRhdGFzZXRzIGR1cmluZyBkYXRhIHByb2Nlc3NpbmcuCiUgCiUgQXMgU2llbWVucyAucmRhIGZpbGVzIGFyZSB0eXBpY2FsbHkgZXhwb3J0ZWQgaW4gcGFpcnMgZm9yIE1FR0EtZWRpdGVkCiUgZGF0YSAoaS5lLiwgZWRpdC1PTi9lZGl0LU9GRiBzdWJleHBlcmltZW50cyksIHRoZSBjb21tYW5kIHN5bnRheCBmb3IKJSBqb2luaW5nIHN1Y2ggZmlsZXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50LCBhcyBzaG93biBiZWxvdy4KJQolIFJlbWVtYmVyIHRvIGNoZWNrIEdhbm5ldFByZUluaXRpYWxpc2UubSBoYXMgdGhlIGFwcHJvcHJpYXRlIHNldHRpbmdzIGZvcgolIHlvdXIgZGF0YTogJ2pvaW4nIG11c3QgYmUgc2V0IHRvICcxJy4KCmRhdGFfZGlyID0gJy9Vc2Vycy91c2VybmFtZS9Eb2N1bWVudHMvbXlfcHJvamVjdC9kYXRhJzsgJSBSb290IGRhdGEgZGlyZWN0b3J5CgolIEZvciBqb2luaW5nIGZpbGVzIGZvciBlYWNoIHN1YmplY3QgYW5kIGJhdGNoaW5nIG92ZXIgbXVsdGlwbGUgc3ViamVjdHMsCiUgdGhlIGRhdGEgbXVzdCBiZSBlbnRlcmVkIGFzIGFuIE0geCBOIHggUCBjZWxsIGFycmF5LCB3aGVyZSBNIGlzIHRoZQolIG51bWJlciBvZiBmaWxlcyBwZXIgc3ViamVjdCB0byBqb2luLCBOIGlzIHRoZSBudW1iZXIgb2Ygc3ViamVjdHMsIGFuZCBQCiUgaXMgdGhlIG51bWJlciBvZiBzdWJleHBlcmltZW50IHNjYW5zICh0d28gZm9yIE1FR0EgZWRpdGluZykuIEluIHRoaXMKJSBleGFtcGxlLCB3ZSBoYXZlIG9ubHkgdHdvIHN1YmplY3RzLCBlYWNoIHdpdGggdHdvIHBhaXJzIG9mIC5yZGEgZmlsZXMKJSAodHdvIHNjYW5zKSB0aGF0IGFyZSB0byBiZSBqb2luZWQuCmZuYW1lc19tZXRhYiA9IHsnc3ViMDFfcnVuMV9PRkYucmRhJwogICAgICAgICAgICAgICAgJ3N1YjAxX3J1bjFfT04ucmRhJwogICAgICAgICAgICAgICAgJ3N1YjAxX3J1bjJfT0ZGLnJkYScKICAgICAgICAgICAgICAgICdzdWIwMV9ydW4yX09OLnJkYScKICAgICAgICAgICAgICAgICdzdWIwMl9ydW4xX09GRi5yZGEnCiAgICAgICAgICAgICAgICAnc3ViMDJfcnVuMV9PTi5yZGEnCiAgICAgICAgICAgICAgICAnc3ViMDJfcnVuMl9PRkYucmRhJwogICAgICAgICAgICAgICAgJ3N1YjAyX3J1bjJfT04ucmRhJ307Cm1ldGFiX2RhdGEoOiwxLDEpID0gZm5hbWVzX21ldGFiKFsxIDNdKTsKbWV0YWJfZGF0YSg6LDEsMikgPSBmbmFtZXNfbWV0YWIoWzIgNF0pOwptZXRhYl9kYXRhKDosMiwxKSA9IGZuYW1lc19tZXRhYihbNSA3XSk7Cm1ldGFiX2RhdGEoOiwyLDIpID0gZm5hbWVzX21ldGFiKFs2IDhdKTsKbWV0YWJfZGF0YSA9IGZ1bGxmaWxlKGRhdGFfZGlyLCBtZXRhYl9kYXRhKTsKCiUgV2F0ZXIgcmVmZXJlbmNlIGRhdGEgYXJlIHNhdmVkIGFzIHNpbmdsZSBmaWxlcy4gQmVjYXVzZSBvZiBob3cgZmlsZQolIGpvaW5pbmcgaXMgY3VycmVudGx5IGNvZGVkIGluIEdhbm5ldCwgdGhlcmUgbmVlZHMgdG8gYmUgdGhlIHNhbWUgbnVtYmVyCiUgb2Ygd2F0ZXIgcmVmZXJlbmNlIGZpbGVzIHBlciBzdWJqZWN0IGFzIHRoZSBtZXRhYm9saXRlIGRhdGEuCmZuYW1lc193YXRlciA9IHsnc3ViMDFfd2F0ZXIucmRhJywgJ3N1YjAyX3dhdGVyLnJkYSd9OwoKd2F0ZXJfZGF0YSg6LDEpID0gZm5hbWVzX3dhdGVyKFsxIDFdKTsKd2F0ZXJfZGF0YSg6LDIpID0gZm5hbWVzX3dhdGVyKFsyIDJdKTsKd2F0ZXJfZGF0YSA9IGZ1bGxmaWxlKGRhdGFfZGlyLCB3YXRlcl9kYXRhKTsKCmFuYXQgPSB7J3N1Yi0wMV9UMXcubmlpJywgJ3N1Yi0wMl9UMXcubmlpJ307CgpNUlMgPSBHYW5uZXRMb2FkKG1ldGFiX2RhdGEsIHdhdGVyX2RhdGEpOwpNUlMgPSBHYW5uZXRGaXQoTVJTKTsKTVJTID0gR2FubmV0Q29SZWdpc3RlcihNUlMsIGFuYXQpOwpNUlMgPSBHYW5uZXRTZWdtZW50KE1SUyk7Ck1SUyA9IEdhbm5ldFF1YW50aWZ5KE1SUyk7CmBgYAo=
Built with
R Markdown in
RStudio
Copyright © 2020–2026, Mark Mikkelsen