Tutorial de Unix n.° 9: Automatización del análisis


Descripción general

Al comenzar este tutorial, nos hemos fusionado completamente con el curso fMRI asociado :ref:``. La mayor parte del texto aquí está tomado del capítulo fMRI sobre :ref:`scripting

`, que utiliza todos los comandos que hemos aprendido. La siguiente sección le mostrará cómo integrar condicionales, bucles for y sed para integrar líneas de código independientes en un script útil.

Ejecutar el script

El código a continuación está diseñado para editar y ejecutar un archivo que analiza cada sujeto del conjunto de datos Flanker. Una vez creada la plantilla
__, mueva los archivos design_run1.fsf y design_run2.fsf al directorio que contiene sus asignaturas (es decir, ``mv design*.fsf ..`, y luego cd ..). Luego descargue el script run_1stLevel_Analysis.sh.

`__ y muévelo al directorio Flanker. El script se reproduce aquí:

#!/bin/bash

# Generar la lista de temas para poder modificar este script
# para ejecutar sólo un subconjunto de temas más fácilmente.

para id en `seq -w 1 26` ; hacer
    subj="sub-$id"
    echo "===> Iniciando procesamiento de $subj"
    eco
    cd $subj

        # Si la máscara cerebral no existe, créala
        si [ ! -f anat/${subj}_T1w_brain_f02.nii.gz ]; entonces
            bet2 anat/${subj}_T1w.nii.gz \
                echo "No se encontró cerebro desprovisto de cráneo, utilizando bet con un umbral de intensidad fraccionaria de 0,2" \
                anat/${subj}_T1w_brain_f02.nii.gz -f 0.2 #Nota: Esta intensidad fraccionaria parece funcionar bien para la mayoría de los sujetos del conjunto de datos Flanker. Puede que desee cambiarla si modifica este script para su propio estudio.
        fi

        # Copie los archivos de diseño en el directorio del tema y luego
        # cambiar “sub-08” al número de asunto actual
        cp ../design_run1.fsf .
        cp ../design_run2.fsf .

        # Tenga en cuenta que estamos usando el carácter | para delimitar los patrones
        # en lugar del carácter / habitual porque hay caracteres /
        # en el patrón.
        sed -i '' "s|sub-08|${subj}|g" \
            diseño_run1.fsf
        sed -i '' "s|sub-08|${subj}|g" \
            diseño_run2.fsf

        # Ahora todo está configurado para ejecutar la hazaña
        echo "===> Hazaña inicial para la carrera 1"
        hazaña design_run1.fsf
        echo "===> Hazaña inicial para la carrera 2"
        hazaña design_run2.fsf
                eco

    # Regrese al directorio que contiene todos los temas y repita el bucle
    cd ..
hecho

eco

Analizando el guión

Repasemos cada parte de este script y describamos lo que hace.

Inicializando el bucle for

Comienza con un shebang y algunos comentarios que describen la función exacta del script. Luego, se usan comillas invertidas para expandir seq -w 1 26 y crear un bucle que ejecute el cuerpo del código en todos los sujetos. Esto se expandirá a 01, 02, 03 ... 26 y actualizará el número asignado a la variable id en cada iteración del bucle.

#!/bin/bash

# Generar la lista de temas para poder modificar este script
# para ejecutar sólo un subconjunto de temas más fácilmente.

para id en `seq -w 1 26` ; hacer
    subj="sub-$id"
    echo "===> Iniciando procesamiento de $subj"
    eco
    cd $subj

Por ejemplo, el primer bucle de este código asignará la cadena sub-01 a la variable subj y, a continuación, repetirá “===> Iniciando procesamiento de sub-01”. A continuación, accederá al directorio sub-01.

Condicionales para comprobar la anatomía del cráneo despojado

A continuación, el script utiliza una condición para verificar si existe la anatomía sin cráneo y, si no existe, se genera la imagen sin cráneo.

# Si la máscara cerebral no existe, créala
si [ ! -f anat/${subj}_T1w_brain_f02.nii.gz ]; entonces
    bet2 anat/${subj}_T1w.nii.gz \
        echo "No se encontró cerebro desprovisto de cráneo, utilizando bet con un umbral de intensidad fraccionaria de 0,2" \
        anat/${subj}_T1w_brain_f02.nii.gz -f 0.2 #Nota: Esta intensidad fraccionaria parece funcionar bien para la mayoría de los sujetos del conjunto de datos Flanker. Puede que desee cambiarla si modifica este script para su propio estudio.
fi

Edición y ejecución del archivo de plantilla

A continuación, se edita el archivo *.fsf de diseño de plantilla para reemplazar la cadena sub-08 con el nombre del sujeto actual. Los archivos *.fsf se ejecutan con el comando feat, que es como ejecutar la interfaz gráfica de FEAT desde la línea de comandos. Se utilizan comandos de eco en todo el script para avisar al usuario cuando se ejecuta un nuevo paso.

# Copie los archivos de diseño en el directorio del tema y luego
# cambiar “sub-08” al número de asunto actual
cp ../design_run1.fsf .
cp ../design_run2.fsf .

# Tenga en cuenta que estamos usando el carácter | para delimitar los patrones
# en lugar del carácter / habitual porque hay caracteres /
# en el patrón.
sed -i '' "s|sub-08|${subj}|g" \
    diseño_run1.fsf
sed -i '' "s|sub-08|${subj}|g" \
    diseño_run2.fsf

Los archivos design.fsf, ubicados en el directorio principal de Flanker, se copian al directorio del sujeto actual. Sed reemplaza la cadena sub-08 con el valor actual de subj asignado en el bucle. La última parte del código ejecuta los archivos .fsf con el comando feat e imprime en la terminal la ejecución que se está analizando.

# Ahora todo está configurado para ejecutar la hazaña
echo "===> Hazaña inicial para la carrera 1"
hazaña design_run1.fsf
echo "===> Hazaña inicial para la carrera 2"
hazaña design_run2.fsf
        eco

Puede ejecutar el script simplemente escribiendo bash run_1stLevel_Analysis.sh. Los comandos echo imprimirán texto en la terminal al ejecutar un nuevo paso, y las páginas HTML registrarán el progreso del preprocesamiento y las estadísticas.


Resumen

En este punto, ya ha aprendido todos los comandos y conceptos de Unix necesarios para ejecutar un script de análisis de fMRI. Si es la primera vez que usa Unix, esto puede parecer complicado; pero con la práctica, comprenderá por qué el script está compuesto de esa manera y cómo, en relativamente pocas líneas, puede representar lo que puede requerir decenas de horas de trabajo.

Al invertir tiempo en aprender Unix ahora, podrá realizar sus análisis de forma más rápida, eficiente y menos propensa a errores. También espero que haya adquirido más confianza para dar los primeros pasos y aplicar sus nuevas habilidades a la escritura de sus propios scripts de análisis.


Video

Para ver una demostración en pantalla de cómo descargar y ejecutar el script anterior, haga clic aquí

`__.