GE: MNE Python
Se você nunca fez ou acompanhou processamento de EEG/ERP ou sabe pouco, recomendo antes de fazer o estudo de MNE, fazer pelo menos Chapter 1 e 2 do curso online de https://courses.erpinfo.org/courses/Intro-to-ERPs (a inscrição é de graça).
Também é bom dar uma olhada para todos os recursos no site de Acesin:
https://acesin.letras.ufrj.br/curso/erp-workshop-2022/
GE: MNE Python
sessão 3
sessão 4
sessão 5
sessão 6
Sessão 1: Familiarização com plataforma e MNE
Passo 1: baixar MNE: https://mne.tools/stable/install/index.html
Passo 2: familiar-se com o programa: Overview of MEG/EEG analysis with MNE-Python https://mne.tools/stable/auto_tutorials/intro/10_overview.html#sphx-glr-auto-tutorials-intro-10-overview-py
Dicas:
- recomendo que dê uma olhada para o powerpoint que anexei: depois vai fazer sentido!
- com tudo que você faz, paciência! As coisas levam tempo para instalar e para processar. O programa leva tempo para abrir.
- aborda seu primeiro contato com MNE como seguir uma receita cegamente. Da mesma forma que conseguimos fazer uma
bolo seguindo a receita sem entender os detalhes químicos e culinários, conseguimos seguir os passos sem inicialmente entender
exatamente o que está acontecendo.
- Os dados 'sample' que o script puxa para baixar e pesado! Veja se você tem esse 1,6GB no seu computador.
- se dá o tempo de conhecer o programa mexendo e errando, às vezes encontrar a janela certa ou o botão certa pode levar um
tempão, mas não desista! Isso faz com que você aos poucos se familiariza com o programa.
- na minha instalação, não apareceram ícones para iniciar o programa, busquei no explorador de arquivos o MNE, e apareceu o ícone para Spyder (MNE). Percebi que esse programa é uma espécie de RStudio. Ou seja, é uma interface um pouco mais amigável que tem 3 janelas importantes: o terminal em que você vai teclando ou copiando os comandos e que você depois pode salvar como script, um console, no qual são executados os comandos, e uma janela em que você pode trocar vendo figuras (gráficos ou plots que gerou) ou variáveis salvas (são os dados que você cria no script e fica listado lá os dados (objetos) que salvou). Tem também uma janela tipo pop up na qual aparecem visualização dos dados de EEG (ou MEG).
-Para quem quiser se familiarizar com Spyder, que é a interface de usuário que usaremos de Python, assista: https://youtu.be/E2Dap5SfXkI?si=o7E993cncs0LzpMD (Esse tutorial não ensina processar EEG, ele explica como funciona o programa/interface Spyder)
- Fiz um script que você pode usar pronto, mas recomendo que você monta o seu a partir do tutorial, pois você pode anotar comentários (precedidos por #), que podem te ajudar posteriormente a recuperar seu processo de aprendizagem.
Coloco aqui o script e um powerpoint com alguns screenshots e anotações que talvez possam ser úteis.
script: https://drive.google.com/file/d/1vWbZmOjxdou8idduEQtrSS6HNiCuKn1y/view?usp=sharing
Passo 3: importar dados do formato do Brainvision (nosso equipamento de EEG)
dados de teste nossos: Marije_TEST
Observe:
- para eu fazer esse tutorial, primeiro eu queria fazer com o exemplo deles para saber o que está acontecendo / o que fazer;
- para isso eu precisei liberar espaço no meu HD. Então deletei o sample que baixei no tutorial anterior antes de baixar os exemplos do tutorial atual.
Depois: vamos tentar plotar:
powerpoint com anotações: https://docs.google.com/presentation/d/1JXktRbKh5WU2zG3HKymZsugEyEySVGc0/edit?usp=sharing&ouid=117719387071468240758&rtpof=true&sd=true
script como copiado do tutorial para renomear dados do Brainvision: https://drive.google.com/file/d/1gpvasSuLprOPrbVik3d3MSZ3B2VlOj6y/view?usp=sharing
script como copiado (com algumas alterações) para fazer algumas operações modificando os dados raw:
https://drive.google.com/file/d/1qYGZyi5mtZ9dS86HBDn_LT_QFlPV2xnP/view?usp=sharing
script que escrevi para testar importar e mexer com dados meus do BrainVision:
https://drive.google.com/file/d/1_W8SySvpXDsCS-8QxQDDAB3SjTMAC3KB/view?usp=drive_link
Passo 4: Working with events
https://mne.tools/stable/auto_tutorials/raw/20_event_arrays.html
Desta vez não fiz powerpoint, mas fiz alguns comentários no script para começar a entender melhor a estrutura dos comandos
script: https://drive.google.com/file/d/1r7MtQLIbyfGrTzv0OIFMWXtzh-d7SF3x/view?usp=sharing
Fiz uma versão do script em que fui mexendo nos nomes das variáveis para entender a estrutura do script:
https://drive.google.com/file/d/1ukNaPAt9Y8MwE2rrR27U4qVOZLwkfR7Y/view?usp=sharing
Informação importante!
-
Many of the MNE-Python objects have methods that operate in-place to save memory (i.e., the data in the Raw object is changed when you call raw.filter(lfreq, hfreq)). If you do not want this, it is always possible to first call the object’s copy() method (e.g., filtered_raw = raw.copy().filter(lfreq, hfreq)). In addition, some MNE-Python functions have a boolean copy parameter that achieves the same purpose.
-> uma outra solução para isso é sempre trabalhar em cima de uma pasta de arquivos copiados, deixando sempre uma pasta com arquivos crus virgens!
Recomendo também ler (sobre eventos):
https://mne.tools/stable/auto_tutorials/intro/20_events_from_raw.html#tut-events-vs-annotations
Consegui montar um script que importa arquivos de Brainvision e que lê os eventos codificados nesses arquivos:
https://drive.google.com/file/d/1AQMAFhTu8Dda0nDqwOumlOJMyJwVr1ES/view?usp=sharing
fonte: https://pybv.readthedocs.io/en/stable/
Passo 5: Annotating continuous data
https://mne.tools/stable/auto_tutorials/raw/30_annotate_raw.html
um termo que eu ficava encontrando e não estava sabendo o que era:
float: "A float in Python is a numeric data type that is used to represent real numbers. It allows you to work with numbers
that have a decimal point, providing a way to handle real numbers in your code. "
Acho que dessa seção, vamos entender mais tarde a sua utilidade.
Só fiz para ver o script rodar e entender os comandos de forma rudimentar.
https://drive.google.com/file/d/1wq-WnNSeelBvZwO_Hx3xJ5gjGmxz1s1J/view?usp=sharing
Passo 6: Built-in plotting methods for Raw objects
https://mne.tools/stable/auto_tutorials/raw/40_visualize_raw.html
script: https://drive.google.com/file/d/1t-kylAvSpYEgSReR-CIIyUqe7qgpAGsS/view?usp=sharing
script com aplicação dos comandos para EEG Brainproducts: https://drive.google.com/file/d/16tXKQv3uyFyXz93WRCMb4orsvjSY-Qhb/view?usp=sharing
Ainda veja: Working with sensor locations
Isso é importante, pois precisamos importar ou chamar a localização dos sensores (canais/eletrodos) específicos da montagem de
Brainproducts (nosso EEG)
Sessão 2: Preprocessamento
Passo 1: Overview of artifact detection
script feito a partir do tutorial: https://drive.google.com/file/d/16glJ_OfhQxFmF5IQOJQuOAMhxoAKcmHH/view?usp=sharing
script para a nossa amostra do Brain: https://drive.google.com/file/d/1cqT8wB3lpWN9cvXu7YlBUjs6vPfywvWO/view?usp=sharing
Passo 2: Handling bad channels
https://mne.tools/stable/auto_tutorials/preprocessing/15_handling_bad_channels.html
DICA:
If you want to build an interactive bad-channel-marking step into an analysis script, be sure to include the parameter block=True in your call to raw.plot() or epochs.plot(). This will pause the script while the plot is open, giving you time to mark bad channels before subsequent analysis or plotting steps are executed. This can be especially helpful if your script loops over multiple subjects.
#normalmente queremos que o script roda ´semi´ automaticamente, processando um sujeito depois do outro
mas se não 'pausamos' a execução do script na hora de selecionar canais ruins ou trechos ruins manualmente, essas seleções não serão gravadas para serem consideradas nos consecutivos passos do script.
script feito a partir do tutorial: https://drive.google.com/file/d/16glJ_OfhQxFmF5IQOJQuOAMhxoAKcmHH/view?usp=sharing
script para a nossa amostra do Brain: https://drive.google.com/file/d/1cqT8wB3lpWN9cvXu7YlBUjs6vPfywvWO/view?usp=sharing
Passo 3: Rejecting bad data spans and breaks +
Filtering and resampling data
Setting the EEG reference
https://mne.tools/stable/auto_tutorials/preprocessing/20_rejecting_bad_data.html
Pulei várias partes desse trecho do tutorial para focar naquelas operações relevantes para o processamento que costumamos
fazer. Nos scripts eu detalhei isso de forma mais clara:
https://drive.google.com/file/d/1CBLKJrtjzHClMOCm8BaitD0yeTt5avBu/view?usp=sharing
https://drive.google.com/file/d/1mz5Ly5n0Tn8zYoa5tBjk44jIsBELxNNI/view?usp=sharing
https://drive.google.com/file/d/1sfnBkk06PzOOf4Uij1wvmenfUZRjqm7_/view?usp=sharing
Exercício para dia 28/02:
-importar dados Diane_TESTE
-checar informações: - num de canais, nomes de canais, nome de eventos
- filtrar passa alto 0.01Hz
- filtrar passa baixo 100Hz
- filtrar notch 60Hz
- marcar trechos ruins (grosso), ex. de pause entre blocos
- marcar canais ruins
- substituir canais ruins
Informações sobre costumamos fazer preprocessamento no lab:
http://acesin.letras.ufrj.br/wp-content/uploads/2023/08/cursoeeg_3o_dia.pdf