@@ -41,7 +41,8 @@ class Level1DesignInputSpec(BaseInterfaceInputSpec):
41
41
traits .Dict (traits .Enum (
42
42
'dgamma' ), traits .Dict (traits .Enum ('derivs' ), traits .Bool )),
43
43
traits .Dict (traits .Enum ('gamma' ), traits .Dict (
44
- traits .Enum ('derivs' ), traits .Bool )),
44
+ traits .Enum ('derivs' , 'gammasigma' , 'gammadelay' ))),
45
+ traits .Dict (traits .Enum ('none' ), traits .Dict ()),
45
46
traits .Dict (traits .Enum ('none' ), traits .Enum (None )),
46
47
mandatory = True ,
47
48
desc = ("name of basis function and options e.g., "
@@ -122,7 +123,7 @@ def _create_ev_file(self, evfname, evinfo):
122
123
f .close ()
123
124
124
125
def _create_ev_files (
125
- self , cwd , runinfo , runidx , usetd , contrasts ,
126
+ self , cwd , runinfo , runidx , ev_parameters , contrasts ,
126
127
do_tempfilter , basis_key ):
127
128
"""Creates EV files from condition and regressor information.
128
129
@@ -134,16 +135,25 @@ def _create_ev_files(
134
135
about events and other regressors.
135
136
runidx : int
136
137
Index to run number
137
- usetd : int
138
- Whether or not to use temporal derivatives for
139
- conditions
138
+ ev_parameters : dict
139
+ A dictionary containing the model parameters for the
140
+ given design type.
140
141
contrasts : list of lists
141
142
Information on contrasts to be evaluated
142
143
"""
143
144
conds = {}
144
145
evname = []
145
146
if basis_key == "dgamma" :
146
147
basis_key = "hrf"
148
+ elif basis_key == "gamma" :
149
+ try :
150
+ _ = ev_parameters ['gammasigma' ]
151
+ except KeyError :
152
+ ev_parameters ['gammasigma' ] = 3
153
+ try :
154
+ _ = ev_parameters ['gammadelay' ]
155
+ except KeyError :
156
+ ev_parameters ['gammadelay' ] = 6
147
157
ev_template = load_template ('feat_ev_' + basis_key + '.tcl' )
148
158
ev_none = load_template ('feat_ev_none.tcl' )
149
159
ev_ortho = load_template ('feat_ev_ortho.tcl' )
@@ -174,22 +184,18 @@ def _create_ev_files(
174
184
evinfo .insert (j , [onset , cond ['duration' ][j ], amp ])
175
185
else :
176
186
evinfo .insert (j , [onset , cond ['duration' ][0 ], amp ])
177
- if basis_key == "none" :
178
- ev_txt += ev_template .substitute (
179
- ev_num = num_evs [0 ],
180
- ev_name = name ,
181
- tempfilt_yn = do_tempfilter ,
182
- cond_file = evfname )
187
+ ev_parameters ['ev_num' ] = num_evs [0 ]
188
+ ev_parameters ['ev_name' ] = name
189
+ ev_parameters ['tempfilt_yn' ] = do_tempfilter
190
+ ev_parameters ['cond_file' ] = evfname
191
+ try :
192
+ ev_parameters ['temporalderiv' ] = ev_parameters .pop ('derivs' )
193
+ except KeyError :
194
+ pass
183
195
else :
184
- ev_txt += ev_template .substitute (
185
- ev_num = num_evs [0 ],
186
- ev_name = name ,
187
- tempfilt_yn = do_tempfilter ,
188
- temporalderiv = usetd ,
189
- cond_file = evfname )
190
- if usetd :
191
196
evname .append (name + 'TD' )
192
197
num_evs [1 ] += 1
198
+ ev_txt += ev_template .substitute (ev_parameters )
193
199
elif field == 'regress' :
194
200
evinfo = [[j ] for j in cond ['val' ]]
195
201
ev_txt += ev_none .substitute (ev_num = num_evs [0 ],
@@ -297,10 +303,8 @@ def _run_interface(self, runtime):
297
303
prewhiten = 0
298
304
if isdefined (self .inputs .model_serial_correlations ):
299
305
prewhiten = int (self .inputs .model_serial_correlations )
300
- usetd = 0
301
306
basis_key = list (self .inputs .bases .keys ())[0 ]
302
- if basis_key in ['dgamma' , 'gamma' ]:
303
- usetd = int (self .inputs .bases [basis_key ]['derivs' ])
307
+ ev_parameters = dict (self .inputs .bases [basis_key ])
304
308
session_info = self ._format_session_info (self .inputs .session_info )
305
309
func_files = self ._get_func_files (session_info )
306
310
n_tcon = 0
@@ -316,7 +320,7 @@ def _run_interface(self, runtime):
316
320
do_tempfilter = 1
317
321
if info ['hpf' ] == np .inf :
318
322
do_tempfilter = 0
319
- num_evs , cond_txt = self ._create_ev_files (cwd , info , i , usetd ,
323
+ num_evs , cond_txt = self ._create_ev_files (cwd , info , i , ev_parameters ,
320
324
self .inputs .contrasts ,
321
325
do_tempfilter , basis_key )
322
326
nim = load (func_files [i ])
@@ -348,10 +352,8 @@ def _list_outputs(self):
348
352
cwd = os .getcwd ()
349
353
outputs ['fsf_files' ] = []
350
354
outputs ['ev_files' ] = []
351
- usetd = 0
352
355
basis_key = list (self .inputs .bases .keys ())[0 ]
353
- if basis_key in ['dgamma' , 'gamma' ]:
354
- usetd = int (self .inputs .bases [basis_key ]['derivs' ])
356
+ ev_parameters = dict (self .inputs .bases [basis_key ])
355
357
for runno , runinfo in enumerate (
356
358
self ._format_session_info (self .inputs .session_info )):
357
359
outputs ['fsf_files' ].append (os .path .join (cwd , 'run%d.fsf' % runno ))
@@ -365,7 +367,11 @@ def _list_outputs(self):
365
367
cwd , 'ev_%s_%d_%d.txt' % (name , runno ,
366
368
len (evname )))
367
369
if field == 'cond' :
368
- if usetd :
370
+ try :
371
+ ev_parameters ['temporalderiv' ] = ev_parameters .pop ('derivs' )
372
+ except KeyError :
373
+ pass
374
+ else :
369
375
evname .append (name + 'TD' )
370
376
outputs ['ev_files' ][runno ].append (
371
377
os .path .join (cwd , evfname ))
0 commit comments