Dalej

Wstecz

ReadManager

Format mne

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.

Instalacja biblioteki MNE

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.

Konwersja całego sygnału do formatu MNE

Przykład

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)

Technikalia - konwersja MNE

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.

Konwersja wybranych fragmentów sygnału do formatu MNE

Analogicznie możemy konwertować obiekty SmartTagsManager używając metody
SmartTagsManager.get_mne_epochs.

Przykład

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)

Technikalia

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.


Spis

Dalej

Wstecz