Skip to content

Commit 2c2c56a

Browse files
committed
add tests and refactor
1 parent c716e5f commit 2c2c56a

File tree

5 files changed

+85
-37
lines changed

5 files changed

+85
-37
lines changed

src/atlas/extractRoiByLabel.m

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,11 @@
2222
outputVol = false(size(vol));
2323
outputVol(vol == labelStruct.label) = true;
2424

25-
p = bids.internal.parse_filename(sourceImage);
26-
p.entities.label = bids.internal.camel_case(labelStruct.ROI);
27-
p.suffix = 'mask';
25+
bf = bids.File(sourceImage);
26+
bf.entities.label = bids.internal.camel_case(labelStruct.ROI);
27+
bf.suffix = 'mask';
2828

29-
bidsFile = bids.File(p);
30-
31-
hdr.fname = spm_file(hdr.fname, 'filename', bidsFile.filename);
29+
hdr.fname = spm_file(hdr.fname, 'filename', bf.filename);
3230

3331
spm_write_vol(hdr, outputVol);
3432
outputImage = hdr.fname;

src/atlas/labelClusters.m

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,17 @@
2828
isFile = @(x) exist(x, 'file') == 2;
2929
isPositive = @(x) isnumeric(x) && x >= 0;
3030

31-
p = inputParser;
31+
args = inputParser;
3232

33-
addRequired(p, 'inputImage', isFile);
34-
addRequired(p, 'peakThreshold', @isnumeric);
35-
addOptional(p, 'clusterSize', default_clusterSize, isPositive);
33+
addRequired(args, 'inputImage', isFile);
34+
addRequired(args, 'peakThreshold', @isnumeric);
35+
addOptional(args, 'clusterSize', default_clusterSize, isPositive);
3636

37-
parse(p, varargin{:});
37+
parse(args, varargin{:});
3838

39-
inputImage = p.Results.inputImage;
40-
peakThreshold = p.Results.peakThreshold;
41-
clusterSize = p.Results.clusterSize;
39+
inputImage = args.Results.inputImage;
40+
peakThreshold = args.Results.peakThreshold;
41+
clusterSize = args.Results.clusterSize;
4242

4343
[l2, num] = getClusters(inputImage, peakThreshold);
4444

@@ -50,12 +50,11 @@
5050
vol = sortAndLabelClusters(l2, num, clusterSize);
5151

5252
% Write new image with cluster laebelled with their voxel size
53-
p = bids.internal.parse_filename(inputImage);
54-
p.suffix = 'dseg'; % discrete segmentation
53+
bf = bids.File(inputImage);
54+
bf.suffix = 'dseg'; % discrete segmentation
5555

5656
hdr = spm_vol(inputImage);
57-
bidsFile = bids.File(p);
58-
hdr.fname = spm_file(hdr.fname, 'filename', bidsFile.filename);
57+
hdr.fname = spm_file(hdr.fname, 'filename', bf.filename);
5958

6059
% Cluster labels as their size.
6160
spm_write_vol(hdr, vol);

src/roi/thresholdToMask.m

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,40 +26,40 @@
2626
isFile = @(x) exist(x, 'file') == 2;
2727
isPositive = @(x) isnumeric(x) && x >= 0;
2828

29-
p = inputParser;
29+
args = inputParser;
3030

31-
addRequired(p, 'inputImage', isFile);
32-
addRequired(p, 'peakThreshold', @isnumeric);
33-
addOptional(p, 'clusterSize', default_clusterSize, isPositive);
31+
addRequired(args, 'inputImage', isFile);
32+
addRequired(args, 'peakThreshold', @isnumeric);
33+
addOptional(args, 'clusterSize', default_clusterSize, isPositive);
3434

35-
parse(p, varargin{:});
36-
37-
inputImage = p.Results.inputImage;
38-
peakThreshold = p.Results.peakThreshold;
39-
clusterSize = p.Results.clusterSize;
35+
parse(args, varargin{:});
4036

37+
inputImage = args.Results.inputImage;
38+
peakThreshold = args.Results.peakThreshold;
39+
clusterSize = args.Results.clusterSize;
4140
[l2, num] = getClusters(inputImage, peakThreshold);
4241
vol = sortAndThresholdClusters(l2, num, clusterSize);
4342

4443
% create output name
45-
p = bids.internal.parse_filename(inputImage);
44+
bf = bids.File(inputImage);
4645

47-
p.suffix = 'mask';
46+
bf.suffix = 'mask';
4847

4948
% add peakThreshold and clusterSizeInfo to desc
50-
if ~isfield(p.entities, 'desc')
51-
p.entities.desc = '';
49+
if ~isfield(bf.entities, 'desc')
50+
bf.entities.desc = '';
5251
end
5352
descSuffix = sprintf('p%05.2f', peakThreshold);
5453
if clusterSize > 0
5554
descSuffix = [descSuffix, sprintf('k%03.0f', clusterSize)];
5655
end
5756
descSuffix = strrep(descSuffix, '.', 'pt');
58-
p.entities.desc = [p.entities.desc descSuffix];
57+
bf.entities.desc = [bf.entities.desc descSuffix];
58+
59+
bf = bf.update();
5960

60-
bidsFile = bids.File(p);
6161
hdr = spm_vol(inputImage);
62-
hdr.fname = spm_file(hdr.fname, 'filename', bidsFile.filename);
62+
hdr.fname = spm_file(hdr.fname, 'filename', bf.filename);
6363
outputImage = hdr.fname;
6464

6565
spm_write_vol(hdr, vol);

tests/test_createRoiName.m

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,19 @@ function test_createRoiName_sphere()
7979
function test_createRoiName_sphere_spm()
8080

8181
% spm (ish) output
82-
%
83-
% https://github.com/cpp-lln-lab/CPP_ROI/issues/6
84-
%
8582

83+
% https://github.com/cpp-lln-lab/CPP_ROI/issues/6
8684
volumeDefiningImage = fullfile(pwd, 'task-auditory_p-0001_k-0_MC-none_label-001_spmT.nii');
8785
mask.def = 'sphere';
8886
mask.label = 'sphere5x44yMinus67z0';
8987
roiName = createRoiName(mask, volumeDefiningImage);
9088
assertEqual(roiName, 'label-sphere5x44yMinus67z0_mask.nii');
9189

90+
% https://github.com/cpp-lln-lab/CPP_ROI/issues/16
91+
volumeDefiningImage = fullfile(pwd, 'con_0001.niii');
92+
mask.def = 'sphere';
93+
mask.label = 'sphere5x44yMinus67z0';
94+
roiName = createRoiName(mask, volumeDefiningImage);
95+
assertEqual(roiName, 'label-sphere5x44yMinus67z0_mask.nii');
96+
9297
end

tests/test_labelClusters.m

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
function test_suite = test_labelClusters %#ok<*STOUT>
2+
% (C) Copyright 2022 CPP ROI developers
3+
try % assignment of 'localfunctions' is necessary in Matlab >= 2016
4+
test_functions = localfunctions(); %#ok<*NASGU>
5+
catch % no problem; early Matlab versions can use initTestSuite fine
6+
end
7+
initTestSuite;
8+
end
9+
10+
function test_labelClusters_basic
11+
12+
zMap = fullfile(demoDir(), 'visual motion_association-test_z_FDR_0.01.nii');
13+
14+
zMap = renameNeuroSynth(zMap);
15+
16+
peakThreshold = 5;
17+
extendThreshold = 50;
18+
19+
labeledClusters = labelClusters(zMap, peakThreshold, extendThreshold);
20+
21+
expected = 'space-MNI_atlas-neurosynth_label-visualMotion_dseg.nii';
22+
assertEqual(exist(fullfile(demoDir(), expected), 'file'), 2);
23+
24+
labelStruct = struct('ROI', 'ns left MT', ...
25+
'label', 1);
26+
27+
roiName = extractRoiByLabel(labeledClusters, labelStruct);
28+
29+
expected = 'space-MNI_atlas-neurosynth_label-nsLeftMT_mask.nii';
30+
assertEqual(exist(fullfile(demoDir(), expected), 'file'), 2);
31+
32+
end
33+
34+
function value = thisDir()
35+
value = fullfile(fileparts(mfilename('fullpath')));
36+
end
37+
38+
function value = demoDir()
39+
40+
value = fullfile(thisDir(), '..', 'demos', 'roi', 'inputs');
41+
42+
if exist(fullfile(value, 'visual motion_association-test_z_FDR_0.01.nii'), 'file') == 0
43+
gunzip(fullfile(value, '*.gz'));
44+
end
45+
46+
end

0 commit comments

Comments
 (0)