From 3bd70f73540693d191497c585d790190b1ae0bda Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 1 Sep 2015 01:35:24 +0200 Subject: [PATCH 1/3] test --- nipype/algorithms/modelgen.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nipype/algorithms/modelgen.py b/nipype/algorithms/modelgen.py index 9dd260e968..7a69cec709 100644 --- a/nipype/algorithms/modelgen.py +++ b/nipype/algorithms/modelgen.py @@ -477,6 +477,8 @@ def _concatenate_info(self, infolist): infoout.onsets[j].extend(onsets.tolist()) for j, val in enumerate(info.durations): if len(val) > 1: + print 'new script installed' + import pdb; pdb.set_trace() # breakpoint aaf99b04 // infoout.durations[j].extend(info.durations[j]) if hasattr(info, 'amplitudes') and info.amplitudes: for j, val in enumerate(info.amplitudes): From f45e93dcf2b5d7e8c92b50aae5077b75b9408728 Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 1 Sep 2015 03:42:19 +0200 Subject: [PATCH 2/3] fix --- nipype/algorithms/modelgen.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/nipype/algorithms/modelgen.py b/nipype/algorithms/modelgen.py index 7a69cec709..47a41992fd 100644 --- a/nipype/algorithms/modelgen.py +++ b/nipype/algorithms/modelgen.py @@ -476,9 +476,7 @@ def _concatenate_info(self, infolist): sum(nscans[0:(i + 1)]) infoout.onsets[j].extend(onsets.tolist()) for j, val in enumerate(info.durations): - if len(val) > 1: - print 'new script installed' - import pdb; pdb.set_trace() # breakpoint aaf99b04 // + if len(val) > 0: infoout.durations[j].extend(info.durations[j]) if hasattr(info, 'amplitudes') and info.amplitudes: for j, val in enumerate(info.amplitudes): @@ -499,7 +497,7 @@ def _concatenate_info(self, infolist): onelist = np.zeros((1, sum(nscans))) onelist[0, sum(nscans[0:i]):sum(nscans[0:(i + 1)])] = 1 infoout.regressors.insert(len(infoout.regressors), - onelist.tolist()[0]) + onelist.tolist()[0]) return [infoout], nscans def _generate_design(self, infolist=None): From 8d624a4b69c863756b667ade2833239fb42595a0 Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 1 Sep 2015 13:07:30 +0200 Subject: [PATCH 3/3] corrected line of modelgen and added test for variable concatenated events --- nipype/algorithms/modelgen.py | 4 ++-- nipype/algorithms/tests/test_modelgen.py | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/nipype/algorithms/modelgen.py b/nipype/algorithms/modelgen.py index 47a41992fd..c20ceded08 100644 --- a/nipype/algorithms/modelgen.py +++ b/nipype/algorithms/modelgen.py @@ -476,7 +476,7 @@ def _concatenate_info(self, infolist): sum(nscans[0:(i + 1)]) infoout.onsets[j].extend(onsets.tolist()) for j, val in enumerate(info.durations): - if len(val) > 0: + if len(val): infoout.durations[j].extend(info.durations[j]) if hasattr(info, 'amplitudes') and info.amplitudes: for j, val in enumerate(info.amplitudes): @@ -497,7 +497,7 @@ def _concatenate_info(self, infolist): onelist = np.zeros((1, sum(nscans))) onelist[0, sum(nscans[0:i]):sum(nscans[0:(i + 1)])] = 1 infoout.regressors.insert(len(infoout.regressors), - onelist.tolist()[0]) + onelist.tolist()[0]) return [infoout], nscans def _generate_design(self, infolist=None): diff --git a/nipype/algorithms/tests/test_modelgen.py b/nipype/algorithms/tests/test_modelgen.py index 22c8d49bc7..c11c4e774f 100644 --- a/nipype/algorithms/tests/test_modelgen.py +++ b/nipype/algorithms/tests/test_modelgen.py @@ -61,6 +61,7 @@ def test_modelgen_spm_concat(): filename2 = os.path.join(tempdir, 'test2.nii') Nifti1Image(np.random.rand(10, 10, 10, 30), np.eye(4)).to_filename(filename1) Nifti1Image(np.random.rand(10, 10, 10, 30), np.eye(4)).to_filename(filename2) + # Test case when only one duration is passed, as being the same for all onsets. s = SpecifySPMModel() s.inputs.input_units = 'secs' s.inputs.concatenate_runs = True @@ -78,23 +79,40 @@ def test_modelgen_spm_concat(): yield assert_equal, np.sum(res.outputs.session_info[0]['regress'][0]['val']), 30 yield assert_equal, len(res.outputs.session_info[0]['cond']), 1 yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['onset']), np.array([2.0, 50.0, 100.0, 170.0, 210.0, 220.0, 280.0, 330.0]) + # Test case of scans as output units instead of seconds setattr(s.inputs, 'output_units', 'scans') yield assert_equal, s.inputs.output_units, 'scans' s.inputs.subject_info = deepcopy(info) res = s.run() yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['onset']), np.array([2.0, 50.0, 100.0, 170.0, 210.0, 220.0, 280.0, 330.0])/6 + # Test case for no concatenation with seconds as output units s.inputs.concatenate_runs = False s.inputs.subject_info = deepcopy(info) s.inputs.output_units = 'secs' res = s.run() yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['onset']), np.array([2.0, 50.0, 100.0, 170.0]) + # Test case for variable number of events in separate runs, sometimes unique. + filename3 = os.path.join(tempdir, 'test3.nii') + Nifti1Image(np.random.rand(10, 10, 10, 30), np.eye(4)).to_filename(filename3) + s.inputs.functional_runs = [filename1, filename2, filename3] info = [Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2]], durations=[[1, 1], [1]]), - Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2, 4]], durations=[[1, 1], [1, 1]])] + Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2, 4]], durations=[[1, 1], [1, 1]]), + Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2]], durations=[[1, 1], [1]])] s.inputs.subject_info = deepcopy(info) res = s.run() yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['duration']), np.array([1., 1.]) yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][1]['duration']), np.array([1.,]) yield assert_almost_equal, np.array(res.outputs.session_info[1]['cond'][1]['duration']), np.array([1., 1.]) + yield assert_almost_equal, np.array(res.outputs.session_info[2]['cond'][1]['duration']), np.array([1.,]) + # Test case for variable number of events in concatenated runs, sometimes unique. + s.inputs.concatenate_runs = True + info = [Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2]], durations=[[1, 1], [1]]), + Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2, 4]], durations=[[1, 1], [1, 1]]), + Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2]], durations=[[1, 1], [1]])] + s.inputs.subject_info = deepcopy(info) + res = s.run() + yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['duration']), np.array([1., 1., 1., 1., 1., 1.]) + yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][1]['duration']), np.array([1., 1., 1., 1.]) rmtree(tempdir)