Skip to content

Commit

Permalink
Merge pull request #48 from AlonDaks/master
Browse files Browse the repository at this point in the history
Fixed scene_slicer tests to be in passing shape
  • Loading branch information
AlonDaks committed Dec 8, 2015
2 parents c886f50 + dcd399f commit 4625a4b
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 63 deletions.
1 change: 0 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion code/utils/linear_modeling.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down
26 changes: 9 additions & 17 deletions code/utils/scene_slicer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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)
Expand All @@ -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)
2 changes: 1 addition & 1 deletion code/utils/tests/test_linear_modeling.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
89 changes: 46 additions & 43 deletions code/utils/tests/test_scene_slicer.py
Original file line number Diff line number Diff line change
@@ -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()


0 comments on commit 4625a4b

Please sign in to comment.