Skip to content

Commit b211e3d

Browse files
committed
create valid suffix for MRI filenames
1 parent 1492d46 commit b211e3d

File tree

6 files changed

+80
-15
lines changed

6 files changed

+80
-15
lines changed

src/createFilename.m

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,21 +99,39 @@
9999

100100
cfg.fileName.suffix.run = ['_run-' sprintf(cfg.fileName.pattern, cfg.subject.runNb)];
101101

102+
%% MRI
102103
% set values for the suffixes for the different fields in the BIDS name
103104
fields2Check = { ...
105+
'acquisition', ...
104106
'contrastEnhancement', ...
107+
'echo', ...
105108
'phaseEncodingDirection', ...
106109
'reconstruction', ...
110+
};
111+
112+
targetFields = { ...
113+
'acq', ...
114+
'ce', ...
107115
'echo', ...
108-
'acquisition'
116+
'dir', ...
117+
'rec', ...
109118
};
110119

111120
for iField = 1:numel(fields2Check)
121+
112122
if isempty (cfg.mri.(fields2Check{iField})) %#ok<*GFLD>
123+
113124
cfg.fileName.suffix.mri.(fields2Check{iField}) = ''; %#ok<*SFLD>
125+
114126
else
127+
128+
% upper camelCase and remove invalid characters
129+
thisField = getfield(cfg.mri, fields2Check{iField});
130+
[~, validFieldName] = createValidName(thisField);
131+
115132
cfg.fileName.suffix.mri.(fields2Check{iField}) = ...
116-
['_' fields2Check{iField} '-' getfield(cfg.mri, fields2Check{iField})];
133+
['_' targetFields{iField} '-' validFieldName];
134+
117135
end
118136
end
119137

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
function [taskName, taskNameValid] = createTaskName(taskName)
1+
function [name, nameValid] = createValidName(name)
22
% [taskName, taskNameValid] = createTaskName(taskName)
33
%
44
% Name of the task (for resting state use the "rest" prefix). No two tasks
55
% should have the same name. Task label is derived from this field by
66
% removing all non alphanumeric ([a-zA-Z0-9]) characters.
77

88
% camel case: upper case for first letter for all words but the first one
9-
spaceIdx = regexp(taskName, '[a-zA-Z0-9]*', 'start');
10-
taskName(spaceIdx(2:end)) = upper(taskName(spaceIdx(2:end)));
9+
spaceIdx = regexp(name, '[a-zA-Z0-9]*', 'start');
10+
name(spaceIdx(2:end)) = upper(name(spaceIdx(2:end)));
1111

1212
% remove invalid characters
13-
[unvalidCharacters] = regexp(taskName, '[^a-zA-Z0-9]');
14-
taskNameValid = taskName;
15-
taskNameValid(unvalidCharacters) = [];
13+
[unvalidCharacters] = regexp(name, '[^a-zA-Z0-9]');
14+
nameValid = name;
15+
nameValid(unvalidCharacters) = [];
1616

1717
end

src/subfun/transferInfoToBids.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
% relevant field for its reuse for BIDS filenames or JSON later
66

77
if isfield(cfg, 'task') && isfield(cfg.task, 'name')
8-
[taskName, taskNameValid] = createTaskName(cfg.task.name);
8+
[taskName, taskNameValid] = createValidName(cfg.task.name);
99
fieldsToSet.fileName.task = taskNameValid;
1010
fieldsToSet.bids.meg.TaskName = taskName;
1111
fieldsToSet.bids.mri.TaskName = taskName;

tests/test_checkCFG.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,4 @@ function test_checkCfgBasic()
124124

125125
expectedCfgStructure = orderfields(expectedCfgStructure);
126126

127-
end
127+
end

tests/test_createFilename.m

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,53 @@ function test_createFilenameMriEyetracker()
9494

9595
end
9696

97+
98+
function test_createFilenameMriSuffix()
99+
100+
outputDir = fullfile(fileparts(mfilename('fullpath')), '..', 'output');
101+
102+
%% set up
103+
104+
cfg.verbose = false;
105+
cfg.subject.subjectGrp = 'ssri';
106+
cfg.subject.subjectNb = 3;
107+
cfg.subject.sessionNb = 4;
108+
cfg.subject.runNb = 5;
109+
cfg.task.name = 'rest';
110+
cfg.dir.output = outputDir;
111+
112+
cfg.eyeTracker.do = false;
113+
cfg.testingDevice = 'mri';
114+
115+
cfg.mri.reconstruction = 'fast recon';
116+
cfg.mri.contrastEnhancement = 'test';
117+
cfg.mri.phaseEncodingDirection = 'y pos';
118+
cfg.mri.echo = '1';
119+
cfg.mri.acquisition = ' new tYpe';
120+
121+
cfg = createFilename(cfg);
122+
123+
%% data to test against
124+
125+
funcDir = fullfile(outputDir, 'source', 'sub-ssri003', 'ses-004', 'func');
126+
127+
baseFilename = 'sub-ssri003_ses-004_task-rest';
128+
129+
eventFilename = ['sub-ssri003_ses-004_task-rest', ...
130+
'_acq-newTYpe_ce-test_dir-yPos_rec-fastRecon', ...
131+
'_run-005_echo-1_events_date-' ...
132+
cfg.fileName.date '.tsv'];
133+
134+
%% tests
135+
% make sure the func dir is created
136+
assertTrue(exist(funcDir, 'dir') == 7);
137+
138+
% make sure the right filenames are created
139+
assertEqual(cfg.fileName.base, baseFilename)
140+
assertEqual(cfg.fileName.events, eventFilename);
141+
142+
end
143+
97144
function test_createFilenameEeg()
98145

99146
outputDir = fullfile(fileparts(mfilename('fullpath')), '..', 'output');

tests/test_createTaskName.m renamed to tests/test_createValidName.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function test_suite = test_createTaskName %#ok<*STOUT>
1+
function test_suite = test_createValidName %#ok<*STOUT>
22
try % assignment of 'localfunctions' is necessary in Matlab >= 2016
33
test_functions = localfunctions(); %#ok<*NASGU>
44
catch % no problem; early Matlab versions can use initTestSuite fine
@@ -12,7 +12,7 @@ function test_createTaskNameRemoveInvalidCharacters()
1212

1313
taskName = '&|@#-_(§!{})[]ù%£+/=:;.?,\<> visual task';
1414

15-
[taskName, taskNameValid] = createTaskName(taskName);
15+
[~, taskNameValid] = createValidName(taskName);
1616

1717
[unvalidCharacters] = regexp(taskNameValid, '[^a-zA-Z0-9]');
1818

@@ -22,15 +22,15 @@ function test_createTaskNameRemoveInvalidCharacters()
2222
%% set up
2323
taskName = ' 09 visual task';
2424

25-
[taskName, taskNameValid] = createTaskName(taskName);
25+
[~, taskNameValid] = createValidName(taskName);
2626

2727
[unvalidCharacters] = regexp(taskNameValid, '[^a-zA-Z0-9]');
2828

2929
%% test
3030
assertTrue(isempty(unvalidCharacters));
3131

3232
taskName = 'foo bar';
33-
[taskName, taskNameValid] = createTaskName(taskName);
33+
[taskName, taskNameValid] = createValidName(taskName);
3434
assert(isequal(taskName, 'foo Bar'));
3535
assert(isequal(taskNameValid, 'fooBar'));
3636

@@ -40,7 +40,7 @@ function test_createTaskNameCamelCase()
4040

4141
%% set up
4242
taskName = 'foo bar';
43-
[taskName, taskNameValid] = createTaskName(taskName);
43+
[taskName, taskNameValid] = createValidName(taskName);
4444

4545
%% test
4646
assertEqual(taskName, 'foo Bar');

0 commit comments

Comments
 (0)