Skip to content

Commit f627f4d

Browse files
committed
BF: tests and unambiguous conditions order
If this is not done, condition order for orthogonalizarion is unpredictable.
1 parent 6071c94 commit f627f4d

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

nipype/algorithms/modelgen.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from builtins import range, str, bytes, int
1717

1818
from copy import deepcopy
19-
import os, math, csv
19+
import csv, math, os
2020

2121
from nibabel import load
2222
import numpy as np
@@ -145,7 +145,7 @@ def scale_timings(timelist, input_units, output_units, time_repetition):
145145
return timelist
146146

147147
def bids_gen_info(bids_event_files,
148-
condition_column='trial_type',
148+
condition_column='',
149149
amplitude_column=None,
150150
time_repetition=False,
151151
):
@@ -173,9 +173,13 @@ def bids_gen_info(bids_event_files,
173173
info = []
174174
for bids_event_file in bids_event_files:
175175
with open(bids_event_file) as f:
176-
f_events = csv.DictReader(f, skipinitialspace=True, delimiter='\t')
176+
f_events = csv.DictReader(f, skipinitialspace=True, delimiter=str('\t'))
177177
events = [{k: v for k, v in row.items()} for row in f_events]
178-
conditions = list(set([i[condition_column] for i in events]))
178+
if not condition_column:
179+
condition_column = '_trial_type'
180+
for i in events:
181+
i.update({condition_column: 'ev0'})
182+
conditions = sorted(set([i[condition_column] for i in events]))
179183
runinfo = Bunch(conditions=[], onsets=[], durations=[], amplitudes=[])
180184
for condition in conditions:
181185
selected_events = [i for i in events if i[condition_column]==condition]
@@ -185,10 +189,7 @@ def bids_gen_info(bids_event_files,
185189
decimals = math.ceil(-math.log10(time_repetition))
186190
onsets = [np.round(i, decimals) for i in onsets]
187191
durations = [np.round(i ,decimals) for i in durations]
188-
if condition:
189-
runinfo.conditions.append(condition)
190-
else:
191-
runinfo.conditions.append('e0')
192+
runinfo.conditions.append(condition)
192193
runinfo.onsets.append(onsets)
193194
runinfo.durations.append(durations)
194195
try:

nipype/algorithms/tests/test_modelgen.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,19 @@
1111

1212
import pytest
1313
import numpy.testing as npt
14+
from nipype.testing import example_data
1415
from nipype.interfaces.base import Bunch, TraitError
15-
from nipype.algorithms.modelgen import (SpecifyModel, SpecifySparseModel,
16-
SpecifySPMModel)
16+
from nipype.algorithms.modelgen import (bids_gen_info, SpecifyModel,
17+
SpecifySparseModel, SpecifySPMModel)
18+
19+
20+
def test_bids_gen_info():
21+
fname = example_data('events.tsv')
22+
res = bids_gen_info([fname])
23+
assert res[0].onsets == [[183.75, 313.75, 483.75, 633.75, 783.75, 933.75, 1083.75, 1233.75]]
24+
assert res[0].durations == [[20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0]]
25+
assert res[0].amplitudes ==[[1, 1, 1, 1, 1, 1, 1, 1]]
26+
assert res[0].conditions == ['ev0']
1727

1828

1929
def test_modelgen1(tmpdir):

nipype/testing/data/events.tsv

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
onset duration frequency pulse_width amplitude
2+
183.75 20.0 20.0 0.005 1.0
3+
313.75 20.0 20.0 0.005 1.0
4+
483.75 20.0 20.0 0.005 1.0
5+
633.75 20.0 20.0 0.005 1.0
6+
783.75 20.0 20.0 0.005 1.0
7+
933.75 20.0 20.0 0.005 1.0
8+
1083.75 20.0 20.0 0.005 1.0
9+
1233.75 20.0 20.0 0.005 1.0

0 commit comments

Comments
 (0)