% dia6_lote.m % Dia 6 - Automatizar y medir. Cinco sujetos, un archivo de numeros. % Solucion del ejercicio final. % % Requiere EEGLAB + ERPLAB, los datos de ERP CORE (N400) y pipeline_un_sujeto.m % en el path. %% Configuracion clear; clc; [ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab; raiz = '/ruta/a/ERP_CORE/N400'; % <-- CAMBIA ESTO salida = fullfile(raiz, 'derivados'); sujetos = {'sub-001','sub-002','sub-003','sub-004','sub-005'}; umbral = 100; registro = {}; % no lo llames log: log() es el logaritmo %% 1. Procesar cada sujeto, sin que uno malo detenga el lote for k = 1:numel(sujetos) s = sujetos{k}; fprintf('\n===== %s (%d de %d) =====\n', s, k, numel(sujetos)); try pipeline_un_sujeto(raiz, s, umbral); registro{end+1} = sprintf('%s OK', s); catch err registro{end+1} = sprintf('%s FALLO: %s', s, err.message); fprintf(2, 'Fallo %s: %s\n', s, err.message); % el 2 imprime en rojo end end if ~exist(salida, 'dir'), mkdir(salida); end fid = fopen(fullfile(salida, 'log_procesamiento.txt'), 'w'); fprintf(fid, '%s\n', registro{:}); fclose(fid); % La lista de sujetos escrita a mano no es un retroceso: cuando excluyas a % alguien por calidad de datos, la exclusion queda en el script y con fecha en % el control de versiones, en vez de ser una carpeta que alguien movio. %% 2. Cargar los .erp archivos = cell(1, numel(sujetos)); for k = 1:numel(sujetos) archivos{k} = sprintf('%s_N400_%d.erp', sujetos{k}, umbral); end [ERP, ALLERP] = pop_loaderp('filename', archivos, 'filepath', salida); numel(ALLERP) % cargaron los cinco ALLERP(1).bindescr % las etiquetas de los bins del primero %% 3. Gran promedio, desde una lista en texto lista = fullfile(salida, 'lista_erpsets.txt'); fid = fopen(lista, 'w'); for k = 1:numel(archivos) fprintf(fid, '%s\n', fullfile(salida, archivos{k})); end fclose(fid); GA = pop_gaverager(lista, 'ExcludeNullBin', 'on', 'SEM', 'on'); GA = pop_savemyerp(GA, 'erpname', 'GA_N400', ... 'filename', 'GA_N400.erp', 'filepath', salida); %% 4. Medir y exportar iCPz = find(strcmp({ALLERP(1).chanlocs.labels}, 'CPz')); pop_ploterps(GA, [3 4 5], iCPz); [ALLERP, Amp, Lat] = pop_geterpvalues(ALLERP, [300 500], [3 4 5], iCPz, ... 'Measure', 'meanbl', ... % amplitud media, con linea base 'Baseline', 'pre', ... 'Erpsets', 1:numel(sujetos), ... 'Filename', fullfile(salida, 'amplitudes_n400.txt'), ... 'Foutput', 'erpset', ... % formato largo: una fila por medicion 'Fracreplace','NaN', ... 'Resolution', 3, ... 'SendtoWorkspace', 'on', ... 'Warning', 'off'); size(Amp) % una medicion por sujeto x bin x canal % Comprobacion que cierra el circulo: para cada sujeto, el bin 5 tiene que ser % el bin 4 menos el bin 3, hasta el ultimo decimal. % % La ventana (300-500 ms), el canal (CPz) y el tipo de medida se eligen ANTES % de mirar los resultados. Elegir la ventana donde el efecto se ve mejor es % exactamente lo que produce hallazgos que no se replican.