Initial commit
This commit is contained in:
86
test/test.py
Normal file
86
test/test.py
Normal file
@@ -0,0 +1,86 @@
|
||||
import unittest
|
||||
|
||||
import mne
|
||||
import pandas as pd
|
||||
|
||||
from decoding_tf_analysis import events_to_labels, permutation_test
|
||||
from erp_analysis import create_peak_difference_feature
|
||||
from utils.file_utils import get_keys_for_events, get_epochs
|
||||
from pandas.testing import assert_frame_equal
|
||||
|
||||
|
||||
class TestFileUtils(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
# Load true values for keys
|
||||
with open('test_files/face.txt') as f:
|
||||
face = f.readlines()
|
||||
self.face = [x.strip() for x in face]
|
||||
with open('test_files/face_intact.txt') as f:
|
||||
face_intact = f.readlines()
|
||||
self.face_intact = [x.strip() for x in face_intact]
|
||||
with open('test_files/face_scrambled.txt') as f:
|
||||
face_scrambled = f.readlines()
|
||||
self.face_scrambled = [x.strip() for x in face_scrambled]
|
||||
|
||||
# Load true epochs
|
||||
self.raw = mne.io.read_raw_fif("..\\Dataset\\n170\\sub-001\\ses-n170\\eeg\\sub-001_task-n170_cleaned.fif")
|
||||
wanted_keys = get_keys_for_events("face", "intact")
|
||||
events, events_dict = mne.events_from_annotations(self.raw)
|
||||
events_dict_key = dict((k, events_dict[k]) for k in wanted_keys if k in events_dict)
|
||||
self.given = mne.Epochs(self.raw, events, events_dict_key, tmin=-0.2, tmax=0.5, reject_by_annotation=False,
|
||||
picks='P7')
|
||||
self.given.drop_bad()
|
||||
self.given.load_data()
|
||||
|
||||
def test_keys_for_events(self):
|
||||
# Test only for face key generation, as the rest is generated analogously
|
||||
self.assertEqual("stimulus", get_keys_for_events(stimulus=None, condition=None))
|
||||
self.assertEqual(self.face, get_keys_for_events(stimulus='face', condition=None))
|
||||
self.assertEqual(self.face_intact, get_keys_for_events(stimulus='face', condition='intact'))
|
||||
self.assertEqual(self.face_scrambled, get_keys_for_events(stimulus='face', condition='scrambled'))
|
||||
|
||||
def test_get_epochs(self):
|
||||
# Get a epoch to compare against
|
||||
epochs, key = get_epochs(self.raw, [("face", "intact")], picks='P7', tmin=-0.2, tmax=0.5)
|
||||
epochs.load_data()
|
||||
self.assertEqual(self.given, epochs)
|
||||
|
||||
|
||||
class TestERPAnalysis(unittest.TestCase):
|
||||
|
||||
def test_difference_features(self):
|
||||
# Check if the correct features are created
|
||||
subject_ids = [1, 1, 1, 1]
|
||||
stimuli = ['face', 'face', 'car', 'car']
|
||||
conditions = ['intact', 'scrambled', 'intact', 'scrambled']
|
||||
peaks = [1, 2, 3, 4]
|
||||
df = pd.DataFrame(data={'subject_id': subject_ids, 'stimulus': stimuli, 'condition': conditions,
|
||||
'peak': peaks})
|
||||
diff_df_true = pd.DataFrame(
|
||||
data={'subject_id': ['001'], 'mean_face': [1.5], 'mean_car': [3.5], 'peak_diff_overall': [-2.0],
|
||||
'diff_intact': [2.0], 'diff_scrambled': [2.0], 'diff_face': [1.0], 'diff_fc_ci': [-1.0],
|
||||
'diff_fi_rest': [-2.0]})
|
||||
diff_df = create_peak_difference_feature(df, 1)
|
||||
assert_frame_equal(diff_df_true, diff_df)
|
||||
|
||||
|
||||
class TestDecodingTFAnalysis(unittest.TestCase):
|
||||
def test_events_to_labels(self):
|
||||
# Only check for stimuli 1-40, 41-80, 101-140, 141-180 as no other stimuli are possible
|
||||
events_dict = {'stimulus:1': 1, 'stimulus:40': 2, 'stimulus:41': 3, 'stimulus:80': 4, 'stimulus:101': 5,
|
||||
'stimulus:140': 6, 'stimulus:141': 7, 'stimulus:180': 8}
|
||||
labels = events_to_labels([1, 2, 3, 4, 5, 6, 7, 8], events_dict, [0, 1, 2, 3])
|
||||
self.assertCountEqual([0, 0, 1, 1, 2, 2, 3, 3], labels)
|
||||
|
||||
def test_permutation_test(self):
|
||||
# Check permutation test
|
||||
p = permutation_test([0, 0, 0, 0], [0, 0, 0, 0], 100)
|
||||
self.assertEqual(1, p)
|
||||
p = permutation_test([0, 0, 0, 0, 0], [5, 10, 15, 10, 5], 100)
|
||||
self.assertGreater(0.05, p)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
mne.set_log_level(verbose='WARNING') # Avoid full console
|
||||
unittest.main()
|
||||
160
test/test_files/face.csv
Normal file
160
test/test_files/face.csv
Normal file
@@ -0,0 +1,160 @@
|
||||
stimulus:1
|
||||
stimulus:2
|
||||
stimulus:3
|
||||
stimulus:4
|
||||
stimulus:5
|
||||
stimulus:6
|
||||
stimulus:7
|
||||
stimulus:8
|
||||
stimulus:9
|
||||
stimulus:10
|
||||
stimulus:11
|
||||
stimulus:12
|
||||
stimulus:13
|
||||
stimulus:14
|
||||
stimulus:15
|
||||
stimulus:16
|
||||
stimulus:17
|
||||
stimulus:18
|
||||
stimulus:19
|
||||
stimulus:20
|
||||
stimulus:21
|
||||
stimulus:22
|
||||
stimulus:23
|
||||
stimulus:24
|
||||
stimulus:25
|
||||
stimulus:26
|
||||
stimulus:27
|
||||
stimulus:28
|
||||
stimulus:29
|
||||
stimulus:30
|
||||
stimulus:31
|
||||
stimulus:32
|
||||
stimulus:33
|
||||
stimulus:34
|
||||
stimulus:35
|
||||
stimulus:36
|
||||
stimulus:37
|
||||
stimulus:38
|
||||
stimulus:39
|
||||
stimulus:40
|
||||
stimulus:41
|
||||
stimulus:42
|
||||
stimulus:43
|
||||
stimulus:44
|
||||
stimulus:45
|
||||
stimulus:46
|
||||
stimulus:47
|
||||
stimulus:48
|
||||
stimulus:49
|
||||
stimulus:50
|
||||
stimulus:51
|
||||
stimulus:52
|
||||
stimulus:53
|
||||
stimulus:54
|
||||
stimulus:55
|
||||
stimulus:56
|
||||
stimulus:57
|
||||
stimulus:58
|
||||
stimulus:59
|
||||
stimulus:60
|
||||
stimulus:61
|
||||
stimulus:62
|
||||
stimulus:63
|
||||
stimulus:64
|
||||
stimulus:65
|
||||
stimulus:66
|
||||
stimulus:67
|
||||
stimulus:68
|
||||
stimulus:69
|
||||
stimulus:70
|
||||
stimulus:71
|
||||
stimulus:72
|
||||
stimulus:73
|
||||
stimulus:74
|
||||
stimulus:75
|
||||
stimulus:76
|
||||
stimulus:77
|
||||
stimulus:78
|
||||
stimulus:79
|
||||
stimulus:80
|
||||
stimulus:101
|
||||
stimulus:102
|
||||
stimulus:103
|
||||
stimulus:104
|
||||
stimulus:105
|
||||
stimulus:106
|
||||
stimulus:107
|
||||
stimulus:108
|
||||
stimulus:109
|
||||
stimulus:110
|
||||
stimulus:111
|
||||
stimulus:112
|
||||
stimulus:113
|
||||
stimulus:114
|
||||
stimulus:115
|
||||
stimulus:116
|
||||
stimulus:117
|
||||
stimulus:118
|
||||
stimulus:119
|
||||
stimulus:120
|
||||
stimulus:121
|
||||
stimulus:122
|
||||
stimulus:123
|
||||
stimulus:124
|
||||
stimulus:125
|
||||
stimulus:126
|
||||
stimulus:127
|
||||
stimulus:128
|
||||
stimulus:129
|
||||
stimulus:130
|
||||
stimulus:131
|
||||
stimulus:132
|
||||
stimulus:133
|
||||
stimulus:134
|
||||
stimulus:135
|
||||
stimulus:136
|
||||
stimulus:137
|
||||
stimulus:138
|
||||
stimulus:139
|
||||
stimulus:140
|
||||
stimulus:141
|
||||
stimulus:142
|
||||
stimulus:143
|
||||
stimulus:144
|
||||
stimulus:145
|
||||
stimulus:146
|
||||
stimulus:147
|
||||
stimulus:148
|
||||
stimulus:149
|
||||
stimulus:150
|
||||
stimulus:151
|
||||
stimulus:152
|
||||
stimulus:153
|
||||
stimulus:154
|
||||
stimulus:155
|
||||
stimulus:156
|
||||
stimulus:157
|
||||
stimulus:158
|
||||
stimulus:159
|
||||
stimulus:160
|
||||
stimulus:161
|
||||
stimulus:162
|
||||
stimulus:163
|
||||
stimulus:164
|
||||
stimulus:165
|
||||
stimulus:166
|
||||
stimulus:167
|
||||
stimulus:168
|
||||
stimulus:169
|
||||
stimulus:170
|
||||
stimulus:171
|
||||
stimulus:172
|
||||
stimulus:173
|
||||
stimulus:174
|
||||
stimulus:175
|
||||
stimulus:176
|
||||
stimulus:177
|
||||
stimulus:178
|
||||
stimulus:179
|
||||
stimulus:180
|
||||
|
80
test/test_files/face.txt
Normal file
80
test/test_files/face.txt
Normal file
@@ -0,0 +1,80 @@
|
||||
stimulus:1
|
||||
stimulus:2
|
||||
stimulus:3
|
||||
stimulus:4
|
||||
stimulus:5
|
||||
stimulus:6
|
||||
stimulus:7
|
||||
stimulus:8
|
||||
stimulus:9
|
||||
stimulus:10
|
||||
stimulus:11
|
||||
stimulus:12
|
||||
stimulus:13
|
||||
stimulus:14
|
||||
stimulus:15
|
||||
stimulus:16
|
||||
stimulus:17
|
||||
stimulus:18
|
||||
stimulus:19
|
||||
stimulus:20
|
||||
stimulus:21
|
||||
stimulus:22
|
||||
stimulus:23
|
||||
stimulus:24
|
||||
stimulus:25
|
||||
stimulus:26
|
||||
stimulus:27
|
||||
stimulus:28
|
||||
stimulus:29
|
||||
stimulus:30
|
||||
stimulus:31
|
||||
stimulus:32
|
||||
stimulus:33
|
||||
stimulus:34
|
||||
stimulus:35
|
||||
stimulus:36
|
||||
stimulus:37
|
||||
stimulus:38
|
||||
stimulus:39
|
||||
stimulus:40
|
||||
stimulus:101
|
||||
stimulus:102
|
||||
stimulus:103
|
||||
stimulus:104
|
||||
stimulus:105
|
||||
stimulus:106
|
||||
stimulus:107
|
||||
stimulus:108
|
||||
stimulus:109
|
||||
stimulus:110
|
||||
stimulus:111
|
||||
stimulus:112
|
||||
stimulus:113
|
||||
stimulus:114
|
||||
stimulus:115
|
||||
stimulus:116
|
||||
stimulus:117
|
||||
stimulus:118
|
||||
stimulus:119
|
||||
stimulus:120
|
||||
stimulus:121
|
||||
stimulus:122
|
||||
stimulus:123
|
||||
stimulus:124
|
||||
stimulus:125
|
||||
stimulus:126
|
||||
stimulus:127
|
||||
stimulus:128
|
||||
stimulus:129
|
||||
stimulus:130
|
||||
stimulus:131
|
||||
stimulus:132
|
||||
stimulus:133
|
||||
stimulus:134
|
||||
stimulus:135
|
||||
stimulus:136
|
||||
stimulus:137
|
||||
stimulus:138
|
||||
stimulus:139
|
||||
stimulus:140
|
||||
40
test/test_files/face_intact.txt
Normal file
40
test/test_files/face_intact.txt
Normal file
@@ -0,0 +1,40 @@
|
||||
stimulus:1
|
||||
stimulus:2
|
||||
stimulus:3
|
||||
stimulus:4
|
||||
stimulus:5
|
||||
stimulus:6
|
||||
stimulus:7
|
||||
stimulus:8
|
||||
stimulus:9
|
||||
stimulus:10
|
||||
stimulus:11
|
||||
stimulus:12
|
||||
stimulus:13
|
||||
stimulus:14
|
||||
stimulus:15
|
||||
stimulus:16
|
||||
stimulus:17
|
||||
stimulus:18
|
||||
stimulus:19
|
||||
stimulus:20
|
||||
stimulus:21
|
||||
stimulus:22
|
||||
stimulus:23
|
||||
stimulus:24
|
||||
stimulus:25
|
||||
stimulus:26
|
||||
stimulus:27
|
||||
stimulus:28
|
||||
stimulus:29
|
||||
stimulus:30
|
||||
stimulus:31
|
||||
stimulus:32
|
||||
stimulus:33
|
||||
stimulus:34
|
||||
stimulus:35
|
||||
stimulus:36
|
||||
stimulus:37
|
||||
stimulus:38
|
||||
stimulus:39
|
||||
stimulus:40
|
||||
40
test/test_files/face_scrambled.txt
Normal file
40
test/test_files/face_scrambled.txt
Normal file
@@ -0,0 +1,40 @@
|
||||
stimulus:101
|
||||
stimulus:102
|
||||
stimulus:103
|
||||
stimulus:104
|
||||
stimulus:105
|
||||
stimulus:106
|
||||
stimulus:107
|
||||
stimulus:108
|
||||
stimulus:109
|
||||
stimulus:110
|
||||
stimulus:111
|
||||
stimulus:112
|
||||
stimulus:113
|
||||
stimulus:114
|
||||
stimulus:115
|
||||
stimulus:116
|
||||
stimulus:117
|
||||
stimulus:118
|
||||
stimulus:119
|
||||
stimulus:120
|
||||
stimulus:121
|
||||
stimulus:122
|
||||
stimulus:123
|
||||
stimulus:124
|
||||
stimulus:125
|
||||
stimulus:126
|
||||
stimulus:127
|
||||
stimulus:128
|
||||
stimulus:129
|
||||
stimulus:130
|
||||
stimulus:131
|
||||
stimulus:132
|
||||
stimulus:133
|
||||
stimulus:134
|
||||
stimulus:135
|
||||
stimulus:136
|
||||
stimulus:137
|
||||
stimulus:138
|
||||
stimulus:139
|
||||
stimulus:140
|
||||
19
test/visual_sanity_checks.py
Normal file
19
test/visual_sanity_checks.py
Normal file
@@ -0,0 +1,19 @@
|
||||
from utils.file_utils import load_preprocessed_data, get_epochs
|
||||
|
||||
|
||||
def check_peaks():
|
||||
"""
|
||||
Sanity check for the "get_peaks" method
|
||||
"""
|
||||
import matplotlib.pyplot as plt
|
||||
raw = load_preprocessed_data('002', 'N170')
|
||||
epochs, _ = get_epochs(raw, [('face', 'intact')], picks='P7')
|
||||
ch, latency, peak = epochs.average().get_peak(tmin=0.13, tmax=0.2, mode='neg', return_amplitude=True)
|
||||
import numpy as np
|
||||
plt.plot(epochs.times, np.squeeze(epochs.average().data.T))
|
||||
plt.vlines([0.13, 0.2], -0.00001, 0.00001, colors='r', linestyles='dotted')
|
||||
plt.vlines(latency, -0.00001, 0.00001, colors='gray', linestyles='dotted')
|
||||
plt.show()
|
||||
|
||||
|
||||
check_peaks()
|
||||
Reference in New Issue
Block a user