@@ -41,7 +41,8 @@ class Level1DesignInputSpec(BaseInterfaceInputSpec):
4141 traits .Dict (traits .Enum (
4242 'dgamma' ), traits .Dict (traits .Enum ('derivs' ), traits .Bool )),
4343 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 ()),
4546 traits .Dict (traits .Enum ('none' ), traits .Enum (None )),
4647 mandatory = True ,
4748 desc = ("name of basis function and options e.g., "
@@ -122,7 +123,7 @@ def _create_ev_file(self, evfname, evinfo):
122123 f .close ()
123124
124125 def _create_ev_files (
125- self , cwd , runinfo , runidx , usetd , contrasts ,
126+ self , cwd , runinfo , runidx , ev_parameters , contrasts ,
126127 do_tempfilter , basis_key ):
127128 """Creates EV files from condition and regressor information.
128129
@@ -134,16 +135,25 @@ def _create_ev_files(
134135 about events and other regressors.
135136 runidx : int
136137 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.
140141 contrasts : list of lists
141142 Information on contrasts to be evaluated
142143 """
143144 conds = {}
144145 evname = []
145146 if basis_key == "dgamma" :
146147 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
147157 ev_template = load_template ('feat_ev_' + basis_key + '.tcl' )
148158 ev_none = load_template ('feat_ev_none.tcl' )
149159 ev_ortho = load_template ('feat_ev_ortho.tcl' )
@@ -174,22 +184,18 @@ def _create_ev_files(
174184 evinfo .insert (j , [onset , cond ['duration' ][j ], amp ])
175185 else :
176186 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 )
183- 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 :
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' ] = int (bool (ev_parameters .pop ('derivs' )))
193+ except KeyError :
194+ pass
195+ if ev_parameters ['temporalderiv' ]:
191196 evname .append (name + 'TD' )
192197 num_evs [1 ] += 1
198+ ev_txt += ev_template .substitute (ev_parameters )
193199 elif field == 'regress' :
194200 evinfo = [[j ] for j in cond ['val' ]]
195201 ev_txt += ev_none .substitute (ev_num = num_evs [0 ],
@@ -297,10 +303,8 @@ def _run_interface(self, runtime):
297303 prewhiten = 0
298304 if isdefined (self .inputs .model_serial_correlations ):
299305 prewhiten = int (self .inputs .model_serial_correlations )
300- usetd = 0
301306 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 ])
304308 session_info = self ._format_session_info (self .inputs .session_info )
305309 func_files = self ._get_func_files (session_info )
306310 n_tcon = 0
@@ -316,7 +320,7 @@ def _run_interface(self, runtime):
316320 do_tempfilter = 1
317321 if info ['hpf' ] == np .inf :
318322 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 ,
320324 self .inputs .contrasts ,
321325 do_tempfilter , basis_key )
322326 nim = load (func_files [i ])
@@ -348,10 +352,8 @@ def _list_outputs(self):
348352 cwd = os .getcwd ()
349353 outputs ['fsf_files' ] = []
350354 outputs ['ev_files' ] = []
351- usetd = 0
352355 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 ])
355357 for runno , runinfo in enumerate (
356358 self ._format_session_info (self .inputs .session_info )):
357359 outputs ['fsf_files' ].append (os .path .join (cwd , 'run%d.fsf' % runno ))
@@ -365,7 +367,11 @@ def _list_outputs(self):
365367 cwd , 'ev_%s_%d_%d.txt' % (name , runno ,
366368 len (evname )))
367369 if field == 'cond' :
368- if usetd :
370+ try :
371+ ev_parameters ['temporalderiv' ] = int (bool (ev_parameters .pop ('derivs' )))
372+ except KeyError :
373+ pass
374+ if ev_parameters ['temporalderiv' ]:
369375 evname .append (name + 'TD' )
370376 outputs ['ev_files' ][runno ].append (
371377 os .path .join (cwd , evfname ))
0 commit comments