Corrige os marcadores (ecode) dos eventlists do EEGLAB/ERPLAB a partir de
uma planilha de identificação por participante.
O eventlist gerado pelo ERPLAB registra quando cada estímulo ocorreu, mas não
qual estímulo foi: todos os eventos saem com ecode = 1. A identificação real
vem de uma análise separada (software de execução do experimento), salva em uma
planilha .csv/.xlsx com uma coluna por participante.
O EEGHelper cruza os dois: para cada eventlist, substitui em ordem os ecode
alvo pelos códigos da coluna do participante correspondente.
- Só a coluna
ecodemuda. Cabeçalho,label,onset,bine formatação em colunas ficam byte a byte iguais. - Linhas de
boundary(ecode = -99) são ignoradas — a contagem começa no primeiro evento real. - Pareamento posicional: a n-ésima ocorrência do
ecodealvo recebe o n-ésimo código da planilha. ecodealvo configurável (campo "marcador procurado" na janela, padrão1).- O original nunca é sobrescrito. Sai um
<nome>_corrigido.txtmais umrelatorio_substituicoes.csvcom uma linha por troca. - Contagem incompatível aborta aquele participante e o erro é reportado ao final, sem impedir os demais. Seguir adiante desalinharia todos os marcadores seguintes.
Primeira coluna = número do evento; demais colunas = um participante cada
(separador , ou ; é detectado automaticamente):
event;B0001;B0002;B0003
1;9;9;9
2;9;12;9
# Interface desktop (Flet) — três formas equivalentes de abrir a mesma janela
uv run eeghelper-gui
uv run python main.py
uv run python -m eeghelperO mapeamento auto extrai o ID do nome do arquivo (B0002_eventos.txt →
coluna B0002); o que não casar é perguntado ao usuário.
uv sync # cria .venv e instala tudo
uv run pytest # testes
uv run ruff check # lint
uv run ruff format . # formataçãosrc/eeghelper/
├── config.py # ConfiguracaoSubstituicao (dataclass)
├── excecoes.py # hierarquia de erros esperados
├── dominio/modelos.py # LinhaEventlist, Eventlist, RelatorioSubstituicao
├── io_/ # leitura/escrita de eventlist e planilha
├── servicos/ # mapeamento e substituição (regra de negócio pura)
└── interfaces/
└── gui/ # janela desktop (Flet)
servicos e dominio não conhecem Flet.
O serviço separa o cálculo da escrita:
verificar_lotedevolve umaPreviaParticipantepor participante sem tocar em disco, inclusive para quem falhou — a prévia guarda as posições dosecodealvo e o ponto exato onde as contagens divergem;gravar_previasgrava só as prévias que a verificação aprovou.
A interface desktop exige a verificação: a gravação só destrava depois dela, e qualquer mudança nas entradas descarta a prévia e trava tudo de novo.
Ver docs/notas/tutorial-projeto-python-uv.md (local, não versionado) para o
passo a passo de criação do repositório.