-
Notifications
You must be signed in to change notification settings - Fork 0
/
extract_ts.ipy
91 lines (70 loc) · 2.95 KB
/
extract_ts.ipy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 31 10:17:09 2015
@author: mje
"""
import mne
from mne.minimum_norm import (apply_inverse_epochs, read_inverse_operator)
from mne.time_frequency import cwt_morlet
import numpy as np
from my_settings import *
# Using the same inverse operator when inspecting single trials Vs. evoked
snr = 1.0 # Standard assumption for average data but using it for single trial
lambda2 = 1.0 / snr ** 2
method = "dSPM" # use dSPM method (could also be MNE or sLORETA)
freqs = np.arange(8, 13, 1)
n_cycle = freqs / 3.
conditions = ["ent_left", "ctl_left", "ent_right", "ctl_right"]
def ITC_over_trials(data, faverage=True):
"""Calculate the ITC over time.
Parameters
----------
data : numpy array
It should be trials x channels x frequencies x times.
faverage : bool
If true the average is returned, If false each frequency is returned.
Returns
-------
result : numpy array
The result is a numpy array with the length equal to the number of
trials.
"""
result = np.empty([data.shape[1], data.shape[-1]])
for freq in range(result.shape[0]):
for i in range(result.shape[1]):
result[freq, i] =\
np.abs(np.mean(np.exp(1j * (np.angle(data[:, freq, i])))))
if faverage:
result = result.mean(axis=0).squeeze()
return result
for condition in conditions:
itc_res = []
for subject in subjects:
# Load data
labels = mne.read_labels_from_annot(subject, parc='PALS_B12_Brodmann',
regexp="Bro",
subjects_dir=subjects_dir)
labels_occ = [labels[7]]
inverse_operator = read_inverse_operator(mne_folder +
"%s-inv.fif" % subject)
src = mne.read_source_spaces(mne_folder + "%s-oct6-src.fif" % subject)
epochs = mne.read_epochs(epochs_folder +
"%s_ds_filtered_ica_mc_tsss-epo.fif" % subject)
epochs.resample(250, n_jobs=4)
stcs = apply_inverse_epochs(epochs[condition], inverse_operator,
lambda2,
method, pick_ori="normal")
label_ts = []
for j in range(len(stcs)):
label_ts.append(mne.extract_label_time_course(stcs[j],
labels=labels_occ,
src=src,
mode="mean_flip"))
label_ts = np.squeeze(np.asarray(label_ts))
tfr = cwt_morlet(label_ts, epochs.info["sfreq"], freqs,
use_fft=True, n_cycles=n_cycle)
itc_res.append(ITC_over_trials(tfr))
%xdel epochs
%xdel stcs
itc_res = np.asarray(itc_res)
np.save(tf_folder + "itc_%s_ba17_right.npy" % condition, itc_res)