% dia3_objeto_eeg.m % Dia 3 - El objeto EEG. % Todo este archivo corre sin datos descargados: usa un EEG de juguete con la % misma forma que el de verdad. %% Un EEG de juguete clear; clc; EEG = struct(); EEG.setname = 'juguete'; EEG.srate = 500; EEG.data = randn(4, 5000); % 4 canales, 10 segundos de ruido EEG.pnts = size(EEG.data, 2); EEG.chanlocs = struct('labels', {'Fz','Cz','Pz','Oz'}); EEG.event = struct('type', {211, 201, 221, 201, 211}, ... 'latency', {500, 900, 1800, 2200, 3500}); fprintf('%s: %d canales, %.1f s a %g Hz\n', ... EEG.setname, size(EEG.data,1), EEG.pnts/EEG.srate, EEG.srate); numel(EEG.chanlocs) % cuantos electrodos numel(EEG.event) % cuantos eventos isfield(EEG, 'EVENTLIST') % 0: este dataset todavia no paso por ERPLAB % Ojo con lo que hizo la llave en struct('labels', {'Fz','Cz','Pz','Oz'}): % no creo un campo con cuatro nombres adentro, creo CUATRO estructuras, una por % electrodo. Esa es la forma que tienen chanlocs y event en un dataset real. %% Recorrer un struct array: corchetes para numeros, llaves para texto etiquetas = {EEG.chanlocs.labels}; % celda con todos los nombres iPz = find(strcmp(etiquetas, 'Pz')); % en que posicion esta Pz fprintf('Pz es el canal %d\n', iPz); codigos = [EEG.event.type]; % vector con todos los codigos for c = unique(codigos) fprintf(' codigo %3d: %4d veces\n', c, sum(codigos == c)); end % Cuidado: si EEG.event.type viene como texto ('S211'), [EEG.event.type] % concatena caracteres y devuelve un disparate, sin dar ningun error. class(EEG.event(1).type) %% Tres unidades para la misma cosa EEG.event(3).latency % esta en MUESTRAS EEG.event(3).latency / EEG.srate % -> segundos 1000 * EEG.event(3).latency / EEG.srate % -> milisegundos % Al reves: dentro de una epoca que empieza en -200 ms, % que muestra corresponde a 300 ms round((300 - (-200)) / 1000 * EEG.srate) + 1 % En un dataset real, EEG.times ya viene en milisegundos: % vent = EEG.times >= 300 & EEG.times <= 500; % Escribir 0.3 en vez de 300 deja vent vacio, el promedio da NaN, y no aparece % ningun mensaje de error. %% Rutas portables raiz = fullfile('~', 'Documents', 'ERP_CORE', 'N400'); sujetos = {'sub-001','sub-002','sub-010'}; for k = 1:numel(sujetos) s = sujetos{k}; % llaves: sacar de una celda archivo = fullfile(raiz, s, [s '_N400.set']); fprintf('%s\n', archivo); end sprintf('sub-%03d', 7) % 'sub-007' - ceros a la izquierda %% El inventario, sobre el juguete inventario(EEG); % Y la prueba que de verdad importa: que funcione tambien con codigos de texto. EEG.event(1).type = 'S211'; EEG.event(2).type = 'S201'; EEG.event(3).type = 'S221'; EEG.event(4).type = 'S201'; EEG.event(5).type = 'S211'; inventario(EEG);