diff --git a/.travis.yml b/.travis.yml index 9e394cd..c9db615 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,7 +17,6 @@ install: - python --version # just to check - retry pip install nose # always - sudo apt-get update - - sudo apt-get upgrade - sudo apt-get install libblas-dev liblapack-dev libatlas3gf-base - wheelhouse_pip_install ${DEPENDS} --trusted-host travis-wheels.scikit-image.org - if [ "${COVERAGE}" == "1" ]; then diff --git a/code/utils/linear_modeling.py b/code/utils/linear_modeling.py index c9116cf..7eaa077 100644 --- a/code/utils/linear_modeling.py +++ b/code/utils/linear_modeling.py @@ -5,7 +5,7 @@ import numpy.linalg as npl from scipy.stats import t as t_dist from scipy.ndimage import gaussian_filter -import scene_slicer as ssm +from . import scene_slicer as ssm import nibabel as nib diff --git a/code/utils/scene_slicer.py b/code/utils/scene_slicer.py index 04dd8a5..10d3c29 100644 --- a/code/utils/scene_slicer.py +++ b/code/utils/scene_slicer.py @@ -11,15 +11,8 @@ 'int-ext': {'INT': 0, 'EXT': 1}} -DAY_NIGHT_IND = 0 -INT_EXT_IND = 1 - TUNING_SECONDS_OFFSET = 17 -# with open('../../data/data_path.json', 'r') as fh: -# data_paths = json.load(fh) -# path_to_subject_image = "../../" + data_paths['bold_dico_7Tad2grpbold7Tad']['sub1']['runs'][0]['path'] - class SceneSlicer: def __init__(self, path_to_subject_image, path_to_scene_csv): @@ -40,15 +33,15 @@ def generate_scene_desc_dict_(self): INTEGER_LABELS['int-ext'][row['int-ext']]) def generate_scene_slices_(self): - num_offset_slices = int(math.floor(TUNING_SECONDS_OFFSET / 2)) + num_offset_slices = int(math.ceil(TUNING_SECONDS_OFFSET / 2)) day_night = num_offset_slices * [None] int_ext = num_offset_slices * [None] current_scene_start_time = TUNING_SECONDS_OFFSET for i in range(num_offset_slices, self.image.shape[-1]): - if i * 2 + 1 in self.scene_desc: - current_scene_start_time = i * 2 + 1 - elif i * 2 + 2 in self.scene_desc: - current_scene_start_time = i * 2 + 2 + if i * 2 in self.scene_desc: + current_scene_start_time = i * 2 + elif i * 2 - 1 in self.scene_desc: + current_scene_start_time = i * 2 - 1 day_night.append(self.scene_desc[current_scene_start_time][0]) int_ext.append(self.scene_desc[current_scene_start_time][1]) self.scene_slices = (day_night, int_ext) @@ -60,10 +53,9 @@ def get_scene_slices(self): self.generate_scene_slices_() return self.scene_slices - def get_day_night(self, slice): + def get_labels_by_slice(self, slice): if not self.scene_slices: self.get_scene_slices() - day_label = self.scene_slices[DAY_NIGHT_IND][slice] - int_label = self.scene_slices[INT_EXT_IND][slice] - return (day_label, int_label) - + day_label = self.scene_slices[0][slice] + int_label = self.scene_slices[1][slice] + return (day_label, int_label) \ No newline at end of file diff --git a/code/utils/tests/test_linear_modeling.py b/code/utils/tests/test_linear_modeling.py index e3d9d77..db691d4 100644 --- a/code/utils/tests/test_linear_modeling.py +++ b/code/utils/tests/test_linear_modeling.py @@ -68,7 +68,7 @@ def test_get_top_32(): def test_get_index_4d(): actual = linear_modeling.get_index_4d([0, 2], data) - assert_equal(actual, [(0, 0), (0, 2)]) + assert_equal(list(actual), [(0, 0), (0, 2)]) # def test_plot_single_voxel(): # not sure how to test plots diff --git a/code/utils/tests/test_scene_slicer.py b/code/utils/tests/test_scene_slicer.py index 0075908..756efed 100644 --- a/code/utils/tests/test_scene_slicer.py +++ b/code/utils/tests/test_scene_slicer.py @@ -1,60 +1,63 @@ -# Python 3 compatibility from __future__ import absolute_import, division, print_function - from .. import scene_slicer import os import nibabel as nib import csv import numpy as np -IS_DAY = 0 -IS_INT = 1 - -def test_prepare(): - data = np.array([[[[7, 9], [7, 8]], [[1, 2], [1, 8]]], [[[2, 3], [2, 1]], - [[5, 4], [4, 3]]]]) +def setup_test(): + data = np.zeros((2, 2, 2, 50)) img = nib.Nifti1Image(data, affine=np.diag([1, 1, 1, 1])) nib.save(img, 'test_data.nii') - with open('scene.csv', 'w') as csvfile: + with open('test_scenes.csv', 'w') as csvfile: scenewriter = csv.writer(csvfile, delimiter=',', quotechar='"') - scenewriter.writerow([17.0, "SAVANNAH", "DAY", "EXT"]) - scenewriter.writerow([272.0, "DOCTORS OFFICE", "DAY", "INT"]) - ss = scene_slicer.SceneSlicer('test_data.nii', 'scene.csv') - return ss + scenewriter.writerow([17.0, 'SAVANNAH', 'DAY', 'EXT']) + scenewriter.writerow([40.0, 'DOCTORS OFFICE', 'NIGHT', 'INT']) + scenewriter.writerow([61.0, 'GUMP', 'DAY', 'EXT']) + scenewriter.writerow([82.0, 'GUMP', 'DAY', 'EXT']) + scenewriter.writerow([91.0, 'GUMP', 'NIGHT', 'INT']) + return scene_slicer.SceneSlicer('test_data.nii', 'test_scenes.csv') -def delete_files(): +def teardown_test(): os.remove('test_data.nii') - os.remove('scene.csv') + os.remove('test_scenes.csv') + + +def test_constants(): + assert scene_slicer.INTEGER_LABELS == {'day-night': {'DAY': 0, + 'NIGHT': 1, + 'DAWN': 2}, + 'int-ext': {'INT': 0, + 'EXT': 1}} + assert scene_slicer.TUNING_SECONDS_OFFSET == 17 def test_scene_slicer_init(): - ss = test_prepare() - assert ss.scene_desc is not None - assert ss.scene_keys is not None - delete_files() - - -def test_scene_slicer_dict(): - ss = test_prepare() - ss.generate_scene_desc_dict() - for i in ss.scene_desc: - assert len(ss.scene_desc[i]) == 2 - assert ss.scene_desc[i][IS_DAY] == 0 or ss.scene_desc[i][IS_DAY] == 1 - assert ss.scene_desc[i][IS_INT] == 0 or ss.scene_desc[i][IS_INT] == 1 - delete_files() - - -def test_scene_slicer_slices(): - ss = test_prepare() - ss.get_scene_slices() - assert len(ss.scene_slices) != 0 - delete_files() - - -def test_scene_slicer_day_night(): - ss = test_prepare() - scene_tup = ss.get_day_night(0) - assert scene_tup == (True, False) - delete_files() + ss = setup_test() + assert ss.path_to_scene_csv == 'test_scenes.csv' + np.testing.assert_array_equal(ss.image.get_data(), np.zeros((2, 2, 2, 50))) + assert ss.scene_slices == [] + assert ss.scene_desc == {} + teardown_test() + + +def test_get_scene_slices(): + ss = setup_test() + scene_slices = ss.get_scene_slices() + day_night_labels = 9*[None] + 11*[0] + 11*[1] + 15*[0] + 4*[1] + int_ext_labels = 9*[None] + 11*[1] + 11*[0] + 15*[1] + 4*[0] + assert scene_slices[0] == day_night_labels + assert scene_slices[1] == int_ext_labels + teardown_test() + +def test_get_labels_by_slice(): + ss = setup_test() + assert (None, None) == ss.get_labels_by_slice(0) + assert (None, None) == ss.get_labels_by_slice(8) + assert (0, 1) == ss.get_labels_by_slice(10) + assert (1, 0) == ss.get_labels_by_slice(48) + teardown_test() + +