diff --git a/.all-contributorsrc b/.all-contributorsrc
index 22dbbab4..0857d149 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -17,6 +17,7 @@
"doc"
]
},
+ {
"login": "anege",
"name": "anege",
"avatar_url": "https://avatars0.githubusercontent.com/u/50317099?v=4",
@@ -26,6 +27,7 @@
"design"
]
},
+ {
"login": "mohmdrezk",
"name": "Mohamed Rezk",
"avatar_url": "https://avatars2.githubusercontent.com/u/9597815?v=4",
@@ -36,6 +38,7 @@
"design"
]
},
+ {
"login": "marcobarilari",
"name": "marcobarilari",
"avatar_url": "https://avatars3.githubusercontent.com/u/38101692?v=4",
@@ -44,7 +47,9 @@
"code",
"design",
"review",
- "doc"
+ "doc",
+ "test",
+ "bug"
]
},
{
@@ -57,13 +62,35 @@
"doc",
"infra",
"design",
- "review"
+ "review",
+ "bug"
+ ]
+ },
+ {
+ "login": "fedefalag",
+ "name": "Fede F.",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/50373329?v=4",
+ "profile": "https://github.com/fedefalag",
+ "contributions": [
+ "bug"
+ ]
+ },
+ {
+ "login": "CerenB",
+ "name": "CerenB",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/10451654?v=4",
+ "profile": "https://github.com/CerenB",
+ "contributions": [
+ "bug",
+ "content",
+ "doc"
]
}
],
"contributorsPerLine": 7,
- "projectName": "CPP_BIDS_SPM_pipeline",
+ "projectName": "CPP_SPM",
"projectOwner": "cpp-lln-lab",
"repoType": "github",
- "repoHost": "https://github.com"
+ "repoHost": "https://github.com",
+ "skipCi": true
}
diff --git a/README.md b/README.md
index 1f60b54f..b631e2c8 100644
--- a/README.md
+++ b/README.md
@@ -21,9 +21,7 @@
**Contributors**
-
-[](#contributors)
-
+[](#contributors-)
@@ -101,17 +99,22 @@ Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
-
+
+
-
+
+
+
This project follows the
diff --git a/src/utils/manageWorkersPool.m b/src/utils/manageWorkersPool.m
index 38f3dd28..b5a8c08b 100644
--- a/src/utils/manageWorkersPool.m
+++ b/src/utils/manageWorkersPool.m
@@ -20,7 +20,12 @@ function manageWorkersPool(action, opt)
% opt.parallelize.killOnExit = true;
%
- if ~isOctave() && opt.parallelize.do
+ if ~opt.parallelize.do
+ opt.parallelize.nbWorkers = 1;
+ opt.parallelize.killOnExit = true;
+ end
+
+ if ~isOctave()
matlabVer = version('-release');
@@ -56,7 +61,11 @@ function manageWorkersPool(action, opt)
if opt.parallelize.killOnExit
if str2double(matlabVer(1:4)) > 2013
- delete(gcp);
+
+ pool = gcp('nocreate');
+ if ~isempty(pool)
+ delete(gcp);
+ end
else
matlabpool close;
diff --git a/src/workflows/bidsSpatialPrepro.m b/src/workflows/bidsSpatialPrepro.m
index 8e644864..91e73a34 100644
--- a/src/workflows/bidsSpatialPrepro.m
+++ b/src/workflows/bidsSpatialPrepro.m
@@ -44,12 +44,20 @@ function bidsSpatialPrepro(opt)
[BIDS, opt, group] = setUpWorkflow(opt, 'spatial preprocessing');
+ opt.orderBatches.selectAnat = 1;
+ opt.orderBatches.realign = 2;
+ opt.orderBatches.coregister = 3;
+ opt.orderBatches.saveCoregistrationMatrix = 4;
+ opt.orderBatches.segment = 5;
+ opt.orderBatches.skullStripping = 6;
+ opt.orderBatches.skullStrippingMask = 7;
+
%% Loop through the groups, subjects, and sessions
for iGroup = 1:length(group)
groupName = group(iGroup).name;
- for iSub = 1:group(iGroup).numSub
+ parfor iSub = 1:group(iGroup).numSub
matlabbatch = [];
% Get the ID of the subject
@@ -60,7 +68,6 @@ function bidsSpatialPrepro(opt)
printProcessingSubject(groupName, iSub, subID);
matlabbatch = setBatchSelectAnat(matlabbatch, BIDS, opt, subID);
- opt.orderBatches.selectAnat = 1;
% if action is emtpy then only realign will be done
action = [];
@@ -68,17 +75,14 @@ function bidsSpatialPrepro(opt)
action = 'realign';
end
[matlabbatch, voxDim] = setBatchRealign(matlabbatch, action, BIDS, opt, subID);
- opt.orderBatches.realign = 2;
% dependency from file selector ('Anatomical')
matlabbatch = setBatchCoregistrationFuncToAnat(matlabbatch, BIDS, opt, subID);
- opt.orderBatches.coregister = 3;
matlabbatch = setBatchSaveCoregistrationMatrix(matlabbatch, BIDS, opt, subID);
% dependency from file selector ('Anatomical')
matlabbatch = setBatchSegmentation(matlabbatch, opt);
- opt.orderBatches.segment = 5;
matlabbatch = setBatchSkullStripping(matlabbatch, BIDS, opt, subID);
diff --git a/tests/test_manageWorkersPool.m b/tests/test_manageWorkersPool.m
new file mode 100644
index 00000000..9754a9ea
--- /dev/null
+++ b/tests/test_manageWorkersPool.m
@@ -0,0 +1,69 @@
+function test_suite = test_manageWorkersPool %#ok<*STOUT>
+ try % assignment of 'localfunctions' is necessary in Matlab >= 2016
+ test_functions = localfunctions(); %#ok<*NASGU>
+ catch % no problem; early Matlab versions can use initTestSuite fine
+ end
+ initTestSuite;
+end
+
+function test_manageWorkersPoolBasic()
+
+ opt.parallelize.do = true;
+ opt.parallelize.nbWorkers = 3;
+ opt.parallelize.killOnExit = true;
+
+ matlabVer = version('-release');
+
+ manageWorkersPool('close', opt);
+
+ manageWorkersPool('open', opt);
+
+ if ~isOctave()
+ if str2double(matlabVer(1:4)) > 2013
+
+ pool = gcp('nocreate');
+ nbWorkers = pool.NumWorkers;
+
+ else
+ nbWorkers = matlabpool('size'); %#ok
+
+ end
+
+ manageWorkersPool('close', opt);
+
+ assertEqual(nbWorkers, opt.parallelize.nbWorkers);
+
+ end
+
+end
+
+function test_manageWorkersPoolNoParallel()
+
+ opt.parallelize.do = false;
+ opt.parallelize.nbWorkers = 3;
+ opt.parallelize.killOnExit = true;
+
+ matlabVer = version('-release');
+
+ manageWorkersPool('close', opt);
+
+ manageWorkersPool('open', opt);
+
+ if ~isOctave()
+ if str2double(matlabVer(1:4)) > 2013
+
+ pool = gcp('nocreate');
+ nbWorkers = pool.NumWorkers;
+
+ else
+ nbWorkers = matlabpool('size'); %#ok
+
+ end
+
+ manageWorkersPool('close', opt);
+
+ assertEqual(nbWorkers, 1);
+
+ end
+
+end