diff --git a/nipype/algorithms/modelgen.py b/nipype/algorithms/modelgen.py index b57e6bfcd5..d23ae392ba 100644 --- a/nipype/algorithms/modelgen.py +++ b/nipype/algorithms/modelgen.py @@ -13,10 +13,12 @@ """ from __future__ import (print_function, division, unicode_literals, absolute_import) + +str_basetype = str from builtins import range, str, bytes, int from copy import deepcopy -import os, math, csv +import csv, math, os from nibabel import load import numpy as np @@ -145,7 +147,7 @@ def scale_timings(timelist, input_units, output_units, time_repetition): return timelist def bids_gen_info(bids_event_files, - condition_column='trial_type', + condition_column='', amplitude_column=None, time_repetition=False, ): @@ -173,9 +175,13 @@ def bids_gen_info(bids_event_files, info = [] for bids_event_file in bids_event_files: with open(bids_event_file) as f: - f_events = csv.DictReader(f, skipinitialspace=True, delimiter='\t') + f_events = csv.DictReader(f, skipinitialspace=True, delimiter=str_basetype('\t')) events = [{k: v for k, v in row.items()} for row in f_events] - conditions = list(set([i[condition_column] for i in events])) + if not condition_column: + condition_column = '_trial_type' + for i in events: + i.update({condition_column: 'ev0'}) + conditions = sorted(set([i[condition_column] for i in events])) runinfo = Bunch(conditions=[], onsets=[], durations=[], amplitudes=[]) for condition in conditions: selected_events = [i for i in events if i[condition_column]==condition] @@ -185,10 +191,7 @@ def bids_gen_info(bids_event_files, decimals = math.ceil(-math.log10(time_repetition)) onsets = [np.round(i, decimals) for i in onsets] durations = [np.round(i ,decimals) for i in durations] - if condition: - runinfo.conditions.append(condition) - else: - runinfo.conditions.append('e0') + runinfo.conditions.append(condition) runinfo.onsets.append(onsets) runinfo.durations.append(durations) try: diff --git a/nipype/algorithms/tests/test_modelgen.py b/nipype/algorithms/tests/test_modelgen.py index 824a634354..01d9b1d0c6 100644 --- a/nipype/algorithms/tests/test_modelgen.py +++ b/nipype/algorithms/tests/test_modelgen.py @@ -11,9 +11,19 @@ import pytest import numpy.testing as npt +from nipype.testing import example_data from nipype.interfaces.base import Bunch, TraitError -from nipype.algorithms.modelgen import (SpecifyModel, SpecifySparseModel, - SpecifySPMModel) +from nipype.algorithms.modelgen import (bids_gen_info, SpecifyModel, + SpecifySparseModel, SpecifySPMModel) + + +def test_bids_gen_info(): + fname = example_data('events.tsv') + res = bids_gen_info([fname]) + assert res[0].onsets == [[183.75, 313.75, 483.75, 633.75, 783.75, 933.75, 1083.75, 1233.75]] + assert res[0].durations == [[20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0]] + assert res[0].amplitudes ==[[1, 1, 1, 1, 1, 1, 1, 1]] + assert res[0].conditions == ['ev0'] def test_modelgen1(tmpdir): diff --git a/nipype/testing/data/events.tsv b/nipype/testing/data/events.tsv new file mode 100644 index 0000000000..9f9fba67ef --- /dev/null +++ b/nipype/testing/data/events.tsv @@ -0,0 +1,9 @@ +onset duration frequency pulse_width amplitude +183.75 20.0 20.0 0.005 1.0 +313.75 20.0 20.0 0.005 1.0 +483.75 20.0 20.0 0.005 1.0 +633.75 20.0 20.0 0.005 1.0 +783.75 20.0 20.0 0.005 1.0 +933.75 20.0 20.0 0.005 1.0 +1083.75 20.0 20.0 0.005 1.0 +1233.75 20.0 20.0 0.005 1.0