Skip to content

Commit 59ab5af

Browse files
authored
Merge pull request #1826 from TheChymera/flobs
aded support for custom IRF in FSL models
2 parents 50a8ec6 + 41b6d75 commit 59ab5af

File tree

6 files changed

+65
-3
lines changed

6 files changed

+65
-3
lines changed

nipype/interfaces/fsl/model.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class Level1DesignInputSpec(BaseInterfaceInputSpec):
4242
'dgamma'), traits.Dict(traits.Enum('derivs'), traits.Bool)),
4343
traits.Dict(traits.Enum('gamma'), traits.Dict(
4444
traits.Enum('derivs', 'gammasigma', 'gammadelay'))),
45+
traits.Dict(traits.Enum('custom'), traits.Dict(traits.Dict(traits.Enum('bfcustompath'), traits.Str))),
4546
traits.Dict(traits.Enum('none'), traits.Dict()),
4647
traits.Dict(traits.Enum('none'), traits.Enum(None)),
4748
mandatory=True,
@@ -192,10 +193,21 @@ def _create_ev_files(
192193
evinfo.insert(j, [onset, cond['duration'][j], amp])
193194
else:
194195
evinfo.insert(j, [onset, cond['duration'][0], amp])
196+
ev_parameters['cond_file'] = evfname
195197
ev_parameters['ev_num'] = num_evs[0]
196198
ev_parameters['ev_name'] = name
197199
ev_parameters['tempfilt_yn'] = do_tempfilter
198-
ev_parameters['cond_file'] = evfname
200+
if not 'basisorth' in ev_parameters:
201+
ev_parameters['basisorth'] = 1
202+
if not 'basisfnum' in ev_parameters:
203+
ev_parameters['basisfnum'] = 1
204+
try:
205+
ev_parameters['fsldir'] = os.environ['FSLDIR']
206+
except KeyError:
207+
if basis_key == 'flobs':
208+
raise Exception('FSL environment variables not set')
209+
else:
210+
ev_parameters['fsldir'] = '/usr/share/fsl'
199211
try:
200212
ev_parameters['temporalderiv'] = int(bool(ev_parameters.pop('derivs')))
201213
except KeyError:

nipype/interfaces/fsl/tests/test_Level1Design_functions.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,15 @@ def test_level1design():
1212
contrasts = Undefined
1313
do_tempfilter = False
1414
orthogonalization = {}
15-
ev_parameters = {"temporalderiv":False}
16-
for key, val in [('hrf', 3), ('dgamma', 3), ('gamma', 2), ('none', 0)]:
15+
basic_ev_parameters = {'temporalderiv':False}
16+
convolution_variants = [
17+
('custom', 7, {'temporalderiv':False, 'bfcustompath':'/some/path'}),
18+
('hrf', 3, basic_ev_parameters),
19+
('dgamma', 3, basic_ev_parameters),
20+
('gamma', 2, basic_ev_parameters),
21+
('none', 0, basic_ev_parameters)
22+
]
23+
for key, val, ev_parameters in convolution_variants:
1724
output_num, output_txt = Level1Design._create_ev_files(l, os.getcwd(),
1825
runinfo, runidx,
1926
ev_parameters,
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# EV title
2+
set fmri(evtitle$ev_num) "$ev_name"
3+
4+
# Basic waveform shape (EV $ev_num)
5+
# 0 : Square
6+
# 1 : Sinusoid
7+
# 2 : Custom (1 entry per volume)
8+
# 3 : Custom (3 column format)
9+
# 4 : Interaction
10+
# 10 : Empty (all zeros)
11+
set fmri(shape$ev_num) 3
12+
13+
# Convolution (EV $ev_num)
14+
# 0 : None
15+
# 1 : Gaussian
16+
# 2 : Gamma
17+
# 3 : Double-Gamma HRF
18+
# 4 : Gamma basis functions
19+
# 5 : Sine basis functions
20+
# 6 : FIR basis functions
21+
# 7 : Optimal/custom basis functions
22+
set fmri(convolve$ev_num) 7
23+
24+
# Convolve phase (EV $ev_num)
25+
set fmri(convolve_phase$ev_num) 0
26+
27+
# Apply temporal filtering (EV $ev_num)
28+
set fmri(tempfilt_yn$ev_num) $tempfilt_yn
29+
30+
# Add temporal derivative (EV $ev_num)
31+
set fmri(deriv_yn$ev_num) $temporalderiv
32+
33+
# Custom EV file (EV $ev_num)
34+
set fmri(custom$ev_num) "$cond_file"
35+
36+
# Optimal/custom HRF convolution file
37+
set fmri(default_bfcustom) "${fsldir}/etc/default_flobs.flobs/hrfbasisfns.txt"
38+
set fmri(basisorth$ev_num) $basisorth
39+
set fmri(basisfnum$ev_num) $basisfnum
40+
set fmri(bfcustom) "$bfcustompath"

nipype/interfaces/script_templates/feat_ev_gamma.tcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ set fmri(shape$ev_num) 3
1818
# 4 : Gamma basis functions
1919
# 5 : Sine basis functions
2020
# 6 : FIR basis functions
21+
# 7 : Optimal/custom basis functions
2122
set fmri(convolve$ev_num) 2
2223

2324
# Convolve phase

nipype/interfaces/script_templates/feat_ev_hrf.tcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ set fmri(shape$ev_num) 3
1818
# 4 : Gamma basis functions
1919
# 5 : Sine basis functions
2020
# 6 : FIR basis functions
21+
# 7 : Optimal/custom basis functions
2122
set fmri(convolve$ev_num) 3
2223

2324
# Convolve phase (EV $ev_num)

nipype/interfaces/script_templates/feat_ev_none.tcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ set fmri(shape$ev_num) 2
1818
# 4 : Gamma basis functions
1919
# 5 : Sine basis functions
2020
# 6 : FIR basis functions
21+
# 7 : Optimal/custom basis functions
2122
set fmri(convolve$ev_num) 0
2223

2324
# Apply temporal filtering

0 commit comments

Comments
 (0)