ReadManager umożliwia eksport i import sygnału do formatu MNE. Jest to domyślny format funkcjonującej pod tą samą nazwą, napisanej w języku python biblioteki do analizy sygnałów EEG. Bibliotek zawiera wiele użytecznych podczas analizy sygnału EEG funkcji.
Bibliotekę można zainstalować wpisując w terminalu komendę:
sudo pip3 install mne
Źródła, dokumentacja oraz tutoriale biblioteki dostępne są na stronie MNE.
Do formatu MNE można konwertować zarówno cały sygnał jak i wybrane fragmenty sygnału.
from obci_readmanager.signal_processing.read_manager import ReadManager
import mne
# Wczytujemy dane
rm = ReadManager('data.xml', 'data.raw', 'data.tag')
# Konwertujemy do MNE
raw = rm.get_mne_raw()
# Alternatywnie, można to zrobić jedną komendą
raw = ReadManager.init_mne('data.xml', 'data.raw',
'data.tag')
# znajdujemy mrugnięcia oczu
# Uwaga! Wywołanie zadziała tylko jeżeli w sygnale istnieją kanały typu EOG,
# lub kanały zawierające w swojej nazwie napis 'eog'.
events = mne.preprocessing.find_eog_events(raw)
# wyświetlamy sygnał z oznaczonymi momentami mrugnięć, używając funkcji MNE
raw.plot(show=True, block=True, events=events)
# Wykres wyposażony jest w narzędzia do nanoszenia annotacji oraz znakowania
# wadliwych fragmentów sygnału. Odpowiednie instrukcje można znaleźć w oknie
# pomocy wykresu (Shift + /)
# Konwersja powrotna z mne do formatu ReadManager
rm2 = ReadManager.from_mne(raw)
Sygnał ciągły w formacie BCIFramework można przekonwertować do obiektu mne.Raw
za pomocą metody get_mne_raw
klasy ReadManager
. Konwersja uwzględnia tagi oraz metadane sygnału.
Typy kanałów są automatycznie rozpoznawane. Jeżeli nazwa kanału odpowiada nazwie stosowanej w systemie 10-05 to kanałowi zostanie automatycznie przypisany typ EEG z określoną pozycją w unormowanej przestrzeni trójwymiarowej. Kanałom, które mają w nazwe emg
, eog
, zostanie odpowiednio przypisany typ elektromiograficzny i elektrokulograficzny. Dodatkowo metoda get_mne_raw
, ma parametr channel_types
w którym można podać listę typów kanałów. Obługiwane są typy: ecg
, bio
, stim
, eog
, misc
, seeg
, ecog
, mag
, eeg
, ref_meg
, grad
, emg
, hbr
i hbo
.
Za pomocą metody klasowej init_mne
sygnał zapisany przez BCIFramework można wczytać bezpośrednio do obiektu mne.Raw
pomijając ReadManager
. Metoda przyjmuje w parametrach nazwy plików: metadanych, danych, tagów oraz parametr channel_types
a następnie z takiego sygnału tworzy obiekt mne.Raw
. Analogicznie z obiektu mne.Raw
można wrócić z powrotem do ReadManagera używajać metody ReadManager.from_mne
.
Analogicznie możemy konwertować obiekty SmartTagsManager
używając metody
SmartTagsManager.get_mne_epochs
.
from obci_readmanager.signal_processing import smart_tags_manager as mgr
from obci_readmanager.signal_processing.tags import smart_tag_definition as df
import mne
# Przygotowujemy cięcie sygnału sekundę wokół zdarzeń trigger:
d = df.SmartTagDurationDefinition(start_tag_name='trigger',
start_offset=-0.15,
end_offset=0,
duration=1.0)
# Tniemy sygnał
m = mgr.SmartTagsManager(d, 'data.xml',
'data.raw', 'data.tag')
# Definiujemy funkcje filtrujące
def func1(tag):
try:
return tag['desc']['value'] == '1'
except:
return False
def func2(tag):
try:
return tag['desc']['value'] == '0'
except:
return False
# Przyjmujemy nazwy zdarzeń
event_descs = ['Positive', 'Negative']
# Konwertujemy dane
epochs = m.get_mne_epochs(p_func=[func1, func2], event_descs=event_descs)
# Wybieramy tylko zdarzenia pozytywne
epp = epochs['Positive']
# Możemy wrócić do listy SmartTags
mgr.SmartTagsManager.get_smart_tags_from_mne_epochs(epp)
# albo analizować w MNE, np. zrobić korektę baseline,
epochs.apply_baseline()
# lub uśrednić pozytywne i negatywne zdarzenia, a następnie
# obejrzeć różnice na wykresie topologicznym:
evokeds = [epochs['Positive'].average(), epochs['Negative'].average()]
mne.viz.plot_evoked_topo(evokeds)
Metoda SmartTagsManager.get_mne_epochs
przyjmuje parametry:
# funkcja która wybierze tagi, których wartość
# pola value w description jest równa '1'
def func1(tag):
try:
return tag['desc']['value'] == '1'
except:
return False
Do listy SmartTagów można wrócić używając metody SmartTagsManager.get_smart_tags_from_mne_epochs
.