Saltar al contenido principal

11.13: Ejercicio- Referenciar con un Guión

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$

( \newcommand{\kernel}{\mathrm{null}\,}\) $$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\id}{\mathrm{id}}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\kernel}{\mathrm{null}\,}$$

$$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$

$$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$

$$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\AA}{\unicode[.8,0]{x212B}}$$

$$\newcommand{\vectorA}[1]{\vec{#1}} % arrow$$

$$\newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow$$

$$\newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vectorC}[1]{\textbf{#1}}$$

$$\newcommand{\vectorD}[1]{\overrightarrow{#1}}$$

$$\newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}}$$

$$\newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}}$$

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\avec}{\mathbf a}$$ $$\newcommand{\bvec}{\mathbf b}$$ $$\newcommand{\cvec}{\mathbf c}$$ $$\newcommand{\dvec}{\mathbf d}$$ $$\newcommand{\dtil}{\widetilde{\mathbf d}}$$ $$\newcommand{\evec}{\mathbf e}$$ $$\newcommand{\fvec}{\mathbf f}$$ $$\newcommand{\nvec}{\mathbf n}$$ $$\newcommand{\pvec}{\mathbf p}$$ $$\newcommand{\qvec}{\mathbf q}$$ $$\newcommand{\svec}{\mathbf s}$$ $$\newcommand{\tvec}{\mathbf t}$$ $$\newcommand{\uvec}{\mathbf u}$$ $$\newcommand{\vvec}{\mathbf v}$$ $$\newcommand{\wvec}{\mathbf w}$$ $$\newcommand{\xvec}{\mathbf x}$$ $$\newcommand{\yvec}{\mathbf y}$$ $$\newcommand{\zvec}{\mathbf z}$$ $$\newcommand{\rvec}{\mathbf r}$$ $$\newcommand{\mvec}{\mathbf m}$$ $$\newcommand{\zerovec}{\mathbf 0}$$ $$\newcommand{\onevec}{\mathbf 1}$$ $$\newcommand{\real}{\mathbb R}$$ $$\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}$$ $$\newcommand{\laspan}[1]{\text{Span}\{#1\}}$$ $$\newcommand{\bcal}{\cal B}$$ $$\newcommand{\ccal}{\cal C}$$ $$\newcommand{\scal}{\cal S}$$ $$\newcommand{\wcal}{\cal W}$$ $$\newcommand{\ecal}{\cal E}$$ $$\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}$$ $$\newcommand{\gray}[1]{\color{gray}{#1}}$$ $$\newcommand{\lgray}[1]{\color{lightgray}{#1}}$$ $$\newcommand{\rank}{\operatorname{rank}}$$ $$\newcommand{\row}{\text{Row}}$$ $$\newcommand{\col}{\text{Col}}$$ $$\renewcommand{\row}{\text{Row}}$$ $$\newcommand{\nul}{\text{Nul}}$$ $$\newcommand{\var}{\text{Var}}$$ $$\newcommand{\corr}{\text{corr}}$$ $$\newcommand{\len}[1]{\left|#1\right|}$$ $$\newcommand{\bbar}{\overline{\bvec}}$$ $$\newcommand{\bhat}{\widehat{\bvec}}$$ $$\newcommand{\bperp}{\bvec^\perp}$$ $$\newcommand{\xhat}{\widehat{\xvec}}$$ $$\newcommand{\vhat}{\widehat{\vvec}}$$ $$\newcommand{\uhat}{\widehat{\uvec}}$$ $$\newcommand{\what}{\widehat{\wvec}}$$ $$\newcommand{\Sighat}{\widehat{\Sigma}}$$ $$\newcommand{\lt}{<}$$ $$\newcommand{\gt}{>}$$ $$\newcommand{\amp}{&}$$ $$\definecolor{fillinmathshade}{gray}{0.9}$$

En este ejercicio, agregaremos referencias al script del ejercicio anterior para que el nuevo script sea más útil. También aprenderás algunas estrategias importantes en el camino.

Como recordará, los datos ERP CORE se registraron sin referencia (lo cual es posible en solo unos pocos sistemas de grabación), por lo que necesitamos usar EEG Channel Operations para hacer referencia a los datos. También agregaremos canales bipolares VEOG y HEOG. El N170 se hace referencia tradicionalmente al promedio de todos los sitios (ver Capítulo 5), y eso es lo que haremos en este ejemplo.

Ya deberías tener 9 conjuntos de datos cargados del ejercicio anterior. Si no lo haces, vuelve a ejecutar Script4.m. Con el conjunto de datos 10_N170 activo, seleccione EEGLAB > ERPLAB > Operaciones de canal EEG. Borre todas las ecuaciones que ya estén establecidas, establezca el Modo en Crear nuevo conjunto de datos y asegúrese de que la casilla etiquetada Intentar conservar las ubicaciones de los canales esté marcada. Haga clic en el botón Asistente de referencia e ingrese los parámetros que se muestran en la Captura de Pantalla 11.5.

El parámetro clave es avgchan (1:33), que le indica que use como referencia el promedio de los 33 canales. Luego haga clic en Aceptar, que debería llenar la ventana de ecuaciones con una ecuación para hacer referencia a cada uno de los 33 canales al promedio de los Canales 1—33. Luego agregue estas dos ecuaciones para crear canales HEOG y VEOG bipolares:

nch34 = ch31 - ch32 Heog-bipolar de etiquetas

nch35 = ch33 - ch16 Etiqueta VEOG Bipolar

Después haga clic en Ejecutar para ejecutar la rutina. Ahora escriba eegh para ver el comando script para Operaciones de canal EEG, que comienza con EEG = pop_eegchanoperator. Este comando es extremadamente largo, porque contiene las 35 ecuaciones que contiene. Hay una mejor manera de hacerlo: en lugar de tener este enorme comando, podemos poner todas las ecuaciones en un archivo y pasar el nombre del archivo en lugar de la lista de ecuaciones.

Ver una lista de los canales en un conjunto de datos o ERPSet

Cuando usas la GUI de EEGLAB/ERPLAB, suele ser bastante fácil ver qué canales hay en un conjunto de datos o ERPSet. Sin embargo, esta información no es tan obvia cuando estás escribiendo guiones. Aquí hay un pequeño truco que uso con bastante frecuencia: Si haces doble clic en el nombre de una variable en el dolor de espacio de trabajo de la ventana principal de Matlab, aparecerá un panel Variables y mostrará el contenido de esa variable. Por ejemplo, puede hacer doble clic en la variable EEG para ver su contenido. EEG es una estructura compleja con muchos campos, y puede hacer doble clic en el nombre de un campo para ver el contenido de ese campo. La siguiente captura de pantalla muestra lo que veo cuando hago doble clic por primera vez en la variable EEG y luego hago doble clic en el campo chanlocs (ubicaciones de canales). Esto también funciona para ERPSets si hace doble clic en la variable ERP.

Para ver cómo funciona esto, seleccione la versión original de 10_N170 en el menú Conjuntos de datos e inicie nuevamente las operaciones del Canal EEG. Aún debes tener las 35 ecuaciones de antes. Cerca de la parte inferior de la ventana, haga clic en el botón Guardar lista como para guardar la lista de ecuaciones como un archivo. Nombra el archivo equations.txt. Además de guardar el archivo, este comando pone el nombre del archivo (incluyendo la ruta completa) en el cuadro de texto Archivo:. Ahora, seleccione la casilla de verificación etiquetada Enviar archivo en lugar de ecuaciones individuales y haga clic en Ejecutar para ejecutar la rutina. Ahora cuando escribes eegh en la línea de comandos, deberías ver una línea de código mucho más corta que se ve así:

EEG = pop_eegchanoperator (EEG, '/Users/luck/Ch_10_Scripting/Exercises/equations.txt', 'ErrorMsg', 'popup', 'KeepChLoc', 'on', 'Warning', 'on');

Echemos un vistazo más de cerca a este comando. Enviamos la variable EEG como primer parámetro. La rutina luego devuelve una nueva versión de esta variable como salida. El segundo parámetro es el nombre de archivo para el archivo de ecuaciones (incluyendo la ruta completa, que será diferente en su computadora). Entonces tenemos una secuencia de pares de parámetros, que ocurren en el orden nombre del parámetro, valor del parámetro. Por ejemplo, la secuencia de parámetros 'ErrorMsg', 'popup' le dice a la rutina que establezca la opción de mensaje de error a un valor de popup, lo que significa que los mensajes de error se entregarán en ventanas emergentes. El siguiente par de parámetros es 'KeepChloc', 'on', que le dice a la rutina que la opción para mantener las ubicaciones de los canales debe estar activada (que había establecido desde la GUI marcando la casilla la opción etiquetada Intentar preservar las ubicaciones de los canales). El uso de pares de parámetros, uno para el nombre del parámetro y otro para el valor, facilita la comprensión de lo que están haciendo los parámetros. Este enfoque es común en los scripts y funciones de Matlab, y se usa ampliamente en las rutinas EEGLAB y ERPLAB.

¿Cómo sabes qué opciones hay disponibles para un comando como pop_eegchanoperator? Puedes usar la función de ayuda de Matlab. Hay varias formas de acceder a esta función. Una forma común es escribir help pop_eegchanoperator en la línea de comandos. Otra forma es seleccionar el nombre de la rutina en la Ventana de Comandos (o en un script) y luego hacer clic con el botón derecho o control-clic sobre ella para obtener un menú contextual, que contiene un elemento de Ayuda en Selección. Pruebe uno de estos métodos para ver la ayuda de pop_eegchanoperator. Cuando haces esto, Matlab simplemente te muestra todos los comentarios (líneas de texto que comienzan con el carácter%) en la parte superior del archivo.m que contiene el comando (por ejemplo, el archivo pop_eegchanoperator.m, que contiene el código para esta rutina y se encuentra en una subcarpeta profunda dentro de la carpeta EEGLAB que se creó al instalar EEGLAB y ERPLAB). Esto funciona con cualquier comando, incluidos los comandos integrados de Matlab como pwd y EEGLAB y los comandos ERPLAB como pop_eegchanoperator.

Ahora es el momento de una admisión embarazosa: Cuando busqué la ayuda para pop_eegchanoperator, descubrí que en realidad no enumeraba los parámetros opcionales. De hecho, no fue de mucha ayuda en absoluto. Esta es una de las primeras rutinas que escribimos para ERPLAB, y supongo que aún no habíamos establecido un buen flujo de trabajo que incluyera una cuidadosa documentación de todas las características de cada rutina. Esto ya se ha arreglado. Y aquí hay otra admisión vergonzosa: He visto muchas deficiencias en la información de ayuda de ERPLAB ya que he trabajado en este libro. No tengo una buena excusa para esto. Te puedo decir que la mayoría de los programadores odian escribir documentación, una vez hecho el código, no es muy divertido escribir la documentación. Pero esa no es una buena excusa. Voy a agregar “pasar por toda la ayuda de ERPLAB” a mi lista de cosas que hacer después de terminar este libro.

Pero volvamos los limones en limonada y utilicemos esto como una oportunidad para aprender a superar documentación poco clara o faltante.

Limonada

Hay un viejo dicho que dice “Cuando la vida te da limones, haz limonada”. Prefiero la versión más sarcástica, “Cuando la vida te dé limones, apriétalos en las heridas abiertas de tus enemigos”.

Cuando me encontré con este problema con pop_eegchanoperator, simplemente abrí el archivo pop_eegchanoperator.m y miré el código. No tuve que ir a buscar por mi sistema de archivos este archivo. Acabo de encontrar pop_eegchanoperator en la Ventana de Comandos, lo seleccioné, control-clicé sobre él para obtener un menú contextual, y seleccioné Abrir selección. Inténtalo para abrir el archivo pop_eegchanoperator.m.

Si no eres un experto en scripting de Matlab, tal vez te preguntes ¿cómo vas a entender el código en el archivo pop_eegchanoperator.m? Te interesa conocer las opciones, y sabes que una de las opciones es ErrorMsg, por lo que tendría sentido hacer una búsqueda de esa cadena en el archivo. Si haces esto, eventualmente encontrarás esta línea:

p.AddParamValue ('ErrorMsg', 'cw', @ischar);% cw = ventana de comandos

A partir de esta línea se puede inferir que un valor posible para este parámetro es 'cw', y que éste enviará los mensajes de error a la Ventana de Comandos. Si buscas un poco más, encontrarás este conjunto de líneas:

si strcmpi (p.Results.ErrorMsg, 'popup')

errormsgtype = 1;% abrir ventana emergente

A partir de estas dos líneas, se puede ver que el valor 'popup' abre una ventana emergente. Entonces, ahora has aprendido una estrategia para averiguar cómo funciona una rutina y cuáles son las opciones (y he aprendido que necesito poner más esfuerzo para asegurarme de que la información de ayuda de ERPLAB esté completa).

Ahora que ya has aprendido sobre el comando para Operaciones de Canal EEG, vamos a agregarlo al script que iniciamos en el ejercicio anterior. Abra Script4.m (si aún no está abierto) y guárdalo como MyScript4.m. Copia la línea pop_eegchanoperator del historial de eegh en la Ventana de Comandos al portapapeles y luego pegarla en MyScript4.m justo después de la línea que comienza con EEG = pop_loadset. Asegúrate de haber pegado la versión que usa el archivo equations.txt. A continuación, guarde el archivo MyScript4.m actualizado. (Siempre guardo un script antes de ejecutarlo; si hay un error que falla Matlab, no quiero perder el nuevo código que acabo de agregar).

Ahora salga de EEGLAB, escriba clear all y ejecute MyScript4.m para que funcione. Debería ver el lanzamiento de EEGLAB y luego aparecer mucho texto en la Ventana de Comandos (principalmente de Operaciones de Canal EEG), incluyendo una línea que dice algo como Procesando Asunto 9 de 9, ID = 10 ya que cada sujeto individual se está procesando. Una vez que termine el script, debes trazar el EEG a partir de uno de los conjuntos de datos, y luego verás que ahora tienes canales bipolares VEOG y HEOG.

Si te encuentras con un error, asegúrate de seguir las instrucciones anteriores cuidadosamente, y piensa en la lógica de lo que estás haciendo. También puede consultar los Consejos de Solución de Problemas en el Apéndice 2. Las siguientes secciones de este capítulo requerirán que hagas varias adiciones a MyScript4.m, y es casi seguro que cometerás al menos un error en algún momento. Cuando lo hagas, siéntete libre de hacer algunos comentarios poco amables sobre mi parentesco, y luego recuerda que los errores son una gran parte del scripting y que uno de los objetivos de este libro es que aprendas a encontrar y solucionar problemas. El apéndice 2 termina con algunas recomendaciones para escribir código de una manera que reduzca la probabilidad de errores.

Después de que consigas que el script se ejecute correctamente, quiero que dediques un momento a pensar en lo fácil que fue agregar el paso para hacer referencia a los datos al script anterior. Una vez que tenías el script básico para recorrer los participantes y abrir sus conjuntos de datos, solo tenías que ejecutar Operaciones de canal EEG desde la GUI, obtener el historial y copiar el comando desde el historial hasta el punto apropiado en el script. ¡Hecho!

Bueno, no tan rápido. Por lo general, querrás hacer algunos cambios en el comando que copiaste del historial. Por ejemplo, la nueva línea de código que agregó al script rompió mi regla sobre los valores (como los nombres de archivo) que se definían como variables en la parte superior del script. Si movió este script y el archivo equations.txt a una nueva carpeta, el script se rompería. El siguiente ejercicio resolverá este problema y hará algunas mejoras adicionales.

This page titled 11.13: Ejercicio- Referenciar con un Guión is shared under a CC BY 4.0 license and was authored, remixed, and/or curated by Steven J Luck directly on the LibreTexts platform.