User Tools

Site Tools


neuroimagen:pipe03

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

neuroimagen:pipe03 [2018/11/30 10:43]
osotolongo
neuroimagen:pipe03 [2020/08/04 10:58]
Line 1: Line 1:
-====== ACE Pipeline (v0.3.0) ====== 
- 
-De momento, el procesamiento MRI y DTI esta integrado en el cluster. El procesamiento de las imagenes PET no lo esta. El procesamiento de fMRI esta sin definir. 
-===== Creando el proyecto ===== 
-Para comenzar a trabajar es necesario crear la estructura del proyecto, que debe ser fija. Para ello existe el script //make_std.pl// que toma como argumento el nombre del proyecto y crea un sencillo archivo de configuracion, así como un par de directorios necesarios.  
- 
-**Ejemplo**, 
- 
-<code> 
-$ make_std.pl mopead 
-</code> 
- 
-crea el archivo //$HOME/.config/neuro/mopead.cfg//, con la estructura del proyecto, 
- 
-<code> 
-$ cat ~/.config/neuro/mopead.cfg  
-DATA = /nas/osotolongo/data/mopead 
-DATABASE = /nas/osotolongo/data/mopead/mopead.csv 
-WORKING = /nas/osotolongo/data/mopead/working 
-NIFTI = /nas/osotolongo/data/mopead/nifti 
-MRI = /nas/osotolongo/data/mopead/mri 
-fMRI = /nas/osotolongo/data/mopead/fmri 
-DTI = /nas/osotolongo/data/mopead/dti 
-PET-FDG = /nas/osotolongo/data/mopead/pet-fdg 
-PET-PIB = /nas/osotolongo/data/mopead/pet-pib 
-PET-FBB = /nas/osotolongo/data/mopead/fbb 
-FBB-NC = /nas/osotolongo/data/mopead/fbb_first 
-SPECT = /nas/osotolongo/data/mopead/spect 
-</code> 
- 
-Este archivo lo leen todos los demas scripts, así que si es necesario mover algun directorio de sitio,basta con cambiar este archivo para que los scripts busquen la imagenes en el nuevo directorio. 
- 
-Fuera de crear el directorio del proyecto y el directorio //working//, el script no hace mas nada. Hay que crear la base de datos del proyecto, que debe tener esta forma, 
- 
-<code> 
-$ cat mopead.csv  
-0001;mop 
-0002;mop 
-0003;mop 
-0004;mop 
-0005;mop 
-0006;mop 
-0007;mop 
-0008;mop 
-0009;mop 
-0010;mop 
-0011;mop 
-0012;mop 
-0013;mop 
-0014;mop 
-0015;mop 
-0016;mop 
-0017;mop 
-0018;mop 
-0019;mop 
-0020;mop 
-0021;mop 
-0022;mop 
-0023;mop 
-</code> 
- 
-Esta no es más que una cadena numerica de entre 4 y 6 numeros (no tiene por que ser consecutiva ni estar ordenada) y una cadena de caracteres de entre 1 y 4 caracteres (no tienen que ser iguales, puede usarse para diferenciar grupos), separados por un punto y coma (;). //Cuatro numeros y tres caracteres es un buen compromiso.//  
- 
-===== MRI ===== 
-La organizacion de las tareas de segmentacion se realizo con el proyecto MOPEAD. Ver [[neuroimagen:mopead_c|la pagina del proyecto]] para mas info. 
- 
-Los archivos de imagen //T1// deben estar almacenados en el directorio //mri// dentro del directorio del proyecto y en formato NIfTI-1. Deben ademas ser nombrados de acuerdo a la base de datos del proyecto. El archivo //mop0001sXXXX.nii.gz// (las X son cualquier numero) es el correspondiente a la linea //0001;mop// de la base de datos. 
- 
-El script //fsl2fs.pl// crea la estructura de //freesurfer// del sujeto y convierte los archivos //T1// en el formato y estructura necesarios para ejecutar la segmentacion de //freesurfer//. Envía un email cuando termina. Las opciones son,  
-  * //-a//, adjunta el archivo log al email  
-  * //-cut//, para hacer solo un subconjunto de los archivos. Ver mas abajo en [[neuroimagen:pipe03#opciones_comunes|Opciones comunes]]. 
- 
-Así, 
-<code> 
-$ fsl2fs.pl mopead 
-</code> 
-crea la estructura y convierte todos los T1 en //mopead/mri// hacia //$SUBJECTS_DIR/mopead_mopXXXX/mri/orig/XXX.mgz// 
- 
-<code> 
-$ ls /nas/data/mopead/mri 
-mop0001s0005.nii.gz  mop0007s0005.nii.gz  mop0013s0005.nii.gz  mop0019s0005.nii.gz 
-mop0002s0005.nii.gz  mop0008s0005.nii.gz  mop0014s0005.nii.gz  mop0020s0005.nii.gz 
-mop0003s0005.nii.gz  mop0009s0005.nii.gz  mop0015s0005.nii.gz  mop0021s0005.nii.gz 
-mop0004s0005.nii.gz  mop0010s0005.nii.gz  mop0016s0005.nii.gz  mop0022s0005.nii.gz 
-mop0005s0005.nii.gz  mop0011s0005.nii.gz  mop0017s0005.nii.gz  mop0023s0005.nii.gz 
-mop0006s0005.nii.gz  mop0012s0005.nii.gz  mop0018s0005.nii.gz 
- 
-$ ls -d /nas/data/subjects/mopead_* 
-/nas/data/subjects/mopead_mop0001  /nas/data/subjects/mopead_mop0013 
-/nas/data/subjects/mopead_mop0002  /nas/data/subjects/mopead_mop0014 
-/nas/data/subjects/mopead_mop0003  /nas/data/subjects/mopead_mop0015 
-/nas/data/subjects/mopead_mop0004  /nas/data/subjects/mopead_mop0016 
-/nas/data/subjects/mopead_mop0005  /nas/data/subjects/mopead_mop0017 
-/nas/data/subjects/mopead_mop0006  /nas/data/subjects/mopead_mop0018 
-/nas/data/subjects/mopead_mop0007  /nas/data/subjects/mopead_mop0019 
-/nas/data/subjects/mopead_mop0008  /nas/data/subjects/mopead_mop0020 
-/nas/data/subjects/mopead_mop0009  /nas/data/subjects/mopead_mop0021 
-/nas/data/subjects/mopead_mop0010  /nas/data/subjects/mopead_mop0022 
-/nas/data/subjects/mopead_mop0011 
- 
-$ ls /nas/data/subjects/mopead_mop0001/mri/orig/ 
-001.mgz 
-</code> 
- 
-Ya la estructura esta preparada para lanzar la segmentación. Para esto es el script //precon.pl//, con las opciones,  
-  * //-a//, adjunta el archivo log al email  
-  * //-cut//, para hacer solo un subconjunto de los sujetos. Ver [[neuroimagen:pipe03#opciones_comunes|Opciones comunes]]. 
- 
-La orden, 
-<code> 
-$ precon.pl mopead 
-</code> 
-lanza la segmentacion de freesurfer al //cluster//, repartiendo las tareas en caso necesario entre las distintas maquinas. El script lanza todos los procesos en paralelo bajo la misma tarea por lo que si hay algín problema con la segmentación la tarea seguirá indefinidamente. Si se prolonga demasiado habra que matar la tarea. Para todo esto es necesario utilizar las herramientas de //slurm//. Ver mas abajo en [[neuroimagen:pipe03#opciones_comunes|Opciones comunes]]  y revisar [[:cluster|Como usar el cluster sin morir en el intento]]. 
- 
-Para comprobar si hay algun error se lanza otro script, 
-<code> 
-$ check_fs_run.pl mopead 
-</code> 
-Este lee los logs de //freesurfer//, busca los errores e informa los sujetos que estan mal. Ojo, que si hubo un error previo, hay que borrar los logs antes de relanzar la segmentacion. 
- 
-Tras esto solo queda sacar las metricas, 
-<code> 
-$ mri_metrics.pl mopead 
-</code> 
-que devuelve el archivo //mopead_mri.csv// con los resultados. 
-===== DTI ===== 
- 
-Para la redefinicion del calculo DTI se ha utilizado el proyecto MOPEAD. Ver la [[neuroimagen:mopead_c|pagina de este proyecto]] para mas info sobre como funcionan las herramientas. 
- 
-==== Preprocesamiento ==== 
-Los archivos de //DTI// deben estar almacenados en el directorio //dti// dentro del directorio del proyecto y en formato NIfTI-1. Deben ademas ser nombrados de acuerdo a la base de datos del proyecto. El archivo //mop0001sXXXX.nii.gz// (las X son cualquier numero) es el correspondiente a la linea //0001;mop// de la base de datos. Deben existir ademas los archivos //mop0001sXXXX.bval// y //mop0001sXXXX.bvec//. En caso de tenerlo, el archivo //mop0001_p2a_b0.nii.gz//, permite hacer correccion de susceptibilidad.  
- 
-De cara al cluster, hay dos maneras de ejecutar el procesamiento DTI. Los scripts //dti_reg.pl// y //dti_reg_split.pl// hacen exactamente lo mismo pero mientras el primero lanza todas las tareas en el mismo trabajo, el segundo lanza una tarea por trabajo permitiendo un control individual del proceso de cada sujeto a cambio de velocidad de procesamiento. Dependiendo de las opciones, la cantidad de sujetos y los fallos que se obtenga en el proceso es preferible uno o el otro. 
- 
-Las opciones son,  
-  * //-cut//, (Ver [[neuroimagen:pipe03#opciones_comunes|Opciones comunes]])  
-  * //-nocorr//, no realiza correciones (para cuando no existe el //P>>A// 
-  * //-legacy//, en lugar de la versión moderna de //eddy// utiliza //eddy_correct// y es util para los casos en que falla el procesamiento. 
- 
-Por ejemplo, 
- 
-<code bash> 
-$ dti_reg_split -nocorr -cut soloestos.csv facehbi 
-</code> 
- 
-procesara los sujetos contenidos en el archivo //soloestos.csv// que pertenezcan al proyecto //facehbi// sin realizar correciones por suceptibilidad. 
- 
-Los valores de FA y MD se obtienen ejecutando //dti_metrics.pl//. Este script calcula, y envia la tabla por email, estos valores en las regiones de referencia definidos por los [[https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/Atlases|atlas de la JHU]]. Por defecto utiliza el //JHU white-matter tractography atlas//. Las opciones son, 
-  * //-l//, no envía la tabla por email 
-  * //-a1//, usa el //ICBM-DTI-81 white-matter labels atlas// 
-  * //-a2//, usa el //JHU white-matter tractography atlas// 
-  * //-sd//, incluye tambien las desviaciones standard 
- 
-==== Tractografía ==== 
-Para la tractografia se utliza el script //dti_track.pl//. Este script ejecuta //bedpostx// y //probtrackx// sobre los sujetos del proyecto. Para ejecutar este script es necesario crear el archivo //dti_tracks.seed// en el directorio del proyecto. Este archivo contiene las ROI que se utilizaran como mascara para //probtrackx//. Por defecto se utiliza la segmentacion de freesurfer y las ROI se indican por el indice que se puede ver en //FreeSurferColorLUT.txt// 
- 
-Las opciones son, 
-  * //-cut// (Ver [[neuroimagen:pipe03#opciones_comunes|Opciones comunes]]) 
-  * <del>//-slow//: ejecuta bedpost sin utlizar el cluster (**desaconsejada**)</del> 
-  * //-uofm//: utiliza el [[https://www.nitrc.org/projects/uofm_jhu_atlas|atlas de la UofM]], en lugar de la segmentacion de //freesurfer// 
-  * //-s2t//: ejecuta //probtrackx// con clasificación de targets. Necesita los archivos //dti_track.seed// y //dti_track.targets// 
- 
-Por ejemplo para ejecutar el script con los hipocampos como mascara, 
-<code bash> 
-$ cat dti_track.seed  
-17 
-53 
- 
-$ dti_track.pl mopead 
-</code> 
- 
-Para ejecutar esto mismo en el //Default Mode Network dorsal//, definido por el [[https://www.nitrc.org/projects/uofm_jhu_atlas|atlas de la UofM]], 
-<code bash> 
-$ dti_track.pl -uofm DMN_dorsal mopead 
-</code> 
- 
-Para hacer un //seed to targets// del nodo 1 de la //Laguage Network//, de este atlas, a los demas nodos, 
-<code bash> 
-$ cat dti_track.seed  
-mri_LN1.nii 
- 
-$ cat dti_track.targets  
-mri_LN2.nii 
-mri_LN3.nii 
-mri_LN4.nii 
-mri_LN5.nii 
-mri_LN6.nii 
-mri_LN7.nii 
- 
-$ dti_track.pl -s2t -uofm LN mopead 
-</code> 
- 
-==== Metricas en tractos escogidos ==== 
- 
-Una vez hecha la tractografia tenemos un mapa de determinado grupo de tractos sobre los que podemos sacar, para cada sujeto, los valores medios de FA y MD. Esto lo podemos hacer con el script //dti_metrics_alt.pl// 
- 
-==== Herramientas ==== 
-**get_aseg.sh**, **get_aparc.sh** 
-FIXME 
- 
-**cutslices.sh** 
-FIXME 
- 
-**test_candidate.pl** 
-FIXME 
- 
-**track2mask.sh** 
- 
-Convierte una imagen en una mascara,con un umbral dado, 
-<code bash> 
-$ track2mask.sh fdt_paths.nii.gz 0.25 
-</code> 
-produce una mascara al 25% del valor maximo de la imagen original en el archivo //fdt_paths_mask.nii.gz// en el mismo directorio, 
- 
-{{ :neuroimagen:track_mask.png?direct&300 |fslview_deprecated fdt_paths fdt_paths_mask}} 
- 
- 
- 
-===== PET-FDG ===== 
- 
-El primer paso para analizar las imágenes PET-FDG es registrarlas al espacio MNI. Para ello es necesario tener las imágenes MRI previamente procesadas con Freesurfer. El script es capaz de buscar y convertir las imágenes necesarias y copiarlas al directorio //working//. 
- 
-El comando a utilizar para el coregistro es, 
-<code bash> 
-$ pet_reg.pl estudio 
-</code> 
- 
-Las opciones son, 
-  * //-cut//, //-a//, //-l//, (Ver [[neuroimagen:pipe03#opciones_comunes|Opciones comunes]])  
-  * //-norm//, normaliza las imagenes entre 0 y 1 
- 
-El script de registro en el espacio MNI produce además un informe de dicho registro en el archivo //working/pets/index.html// que puede consultarse para comprobar que el 
-registro de todas las imágenes se haya producido satisfactoriamente. 
-Tras esto solo hay que decidir que normalización ha de hacerse y que ROI debe analizarse. Por ejemplo, 
- 
-<code bash> 
-cd working; for x in *_pet_inMNI*; do a=`echo $x | awk -F"_" '{print $1}' | sed 's/mci//;s/hc//'`; b=`fslstats $x -k /opt/neuro.dev/lib/bin_rpons_vermis.nii.gz -M`; c=`fslstats $x -k  /opt/neuro.dev/lib/ADNI_Composite.nii.gz -M`; echo $a, `echo $c/$b | bc -l` ; done > ../slandau.csv 
-</code> 
-normaliza por el //pons// todos los PET-FDG de los sujetos catalogados como //mci// o //hc// y halla el valor medio de la ROI de trabajo de ADNI. 
-Esta linea está aquí a modo de ejemplo pero también puede hacerse con el comando, 
- 
-<code bash> 
-$ parallel_fdg_adniroi_metrics.pl estudio 
-</code> 
- 
-que deja los resultados en el archivo, estudio_fdg_adni_suvr_predef.csv. Ver más sobre las [[http://adni.loni.usc.edu/methods/research-tools/|ROI de ADNI]]. 
- 
-Tambien pueden obtenerse estos valores en toda la segmentacion de freesurfer, normalizados por //pons//, 
- 
-<code bash> 
-$ pet_fdg_rois_metrics.pl estudio 
-</code> 
- 
-o normalizados por el cerebelo, 
- 
-<code bash> 
-$ pet_fs_roi_metrics.pl estudio 
-</code> 
- 
- 
- 
-===== PET-PIB ===== 
- 
-Las imagenes PET-PIB se registran al espacio anatomico del sujeto, 
- 
-<code bash> 
-$ pib_reg.pl estudio 
-</code> 
- 
-Las opciones son, 
-  * //-cut//, //-a//, //-l//,  (Ver [[neuroimagen:pipe03#opciones_comunes|Opciones comunes]]) 
-  * //-useb//, utiliza el cerebro extraido para hacer el registro 
-  * //-usem//, registra una mascara del PET-PIB al espacio de sujeto y utliza esta informacion para registrar la imagen 
- 
-**Nota:** Las imagenes PIB son bastante problematicas de registrar, por ello aqui las opciones //-useb// y //-usem//, asi como el informe del registro. Se ha de  inspeccionar visualmente el registro y relanzar con estas opciones en los sujetos que no haya funcionado. 
- 
-Luego se extrae el valor medio de la captacion en el cortex **(en las 5 regiones que todo el mundo usa)**, normalizado por el cerebelo, 
-<code bash> 
-$ parallel_pib_rois_metrics.pl estudio 
-</code> 
- 
-los resultados se escriben en el archivo //estudio_pib_fs_suvr_predef.csv//. 
-===== PET-FBB ===== 
-Esta herramienta se creo ustilizando el estudio FACEHBI como piloto. El procedimiento sigue las lineas de este estudio. Se reciben 4 imagenes, cada una integrando 5 minutos. Las imagenes se coregistran independientemente al espacio del sujeto y se luego promedian. Para ello, 
- 
-<code bash> 
-$ fbb_correct.pl estudio 
-</code> 
- 
-Las opciones son, 
-  * //-cut//, (Ver [[neuroimagen:pipe03#opciones_comunes|Opciones comunes]]) 
-  * //-usem//, registra una mascara de los FBB y usa la informacion para registrar las imagenes 
-  * //-useb//, registra los FBB al cerebro extraido 
-  * //-useg//, registra uno de los FBB y usa la informacion para registrar el resto  
- 
-Tras esto, se extrae el valor medio en el cortex **(si, en las mismas 5 regiones)**, normalizado por el valor en la materia gris del cerebelo, 
-<code bash> 
-$ parallel_fbb_rois_metrics.pl estudio 
-</code> 
-los resultados se escriben en el archivo //estudio_fbb_fs_suvr_predef.csv//. 
- 
-===== fMRI ===== 
- 
-El tratamiento de las fMRI se ha implementado, en principio, solo para //resting state//. Se ha implementado el //Independent Component Analysis (ICA)// utilizando //feat// y //melodic// de **FSL** e integrando todo en **slurm**.  
- 
-==== ICA individual ==== 
- 
-Para realizar el ICA de un solo sujeto se utiliza el script //rs_ica_one.pl//. La unica opcion disponible es //-cut// (Ver [[neuroimagen:pipe03#opciones_comunes|Opciones comunes]]) para realizar el analisis individual en una seleccion de individuos. En caso contrario lo realiza en todos los sujetos del proyecto. Se lanza simplemente con, 
- 
-<code bash> 
-$ rs_ica_one.pl mopead 
-</code>  
- 
----- 
- 
-**Nota:** Para realizar esta tarea se utiliza una plantilla que se encuentra en //${PIPEDIR}/lib/lone_ica_template.fsf// y se rellena con los directorios particulares del proyecto en si.No obstante, en caso de tener que cambiar alguna opción mas, como el //TR//, habria que editar directamente la plantilla. De momento, se ha hecho asi para simplificar el uso ya que los fMRI por ahora vienen con un unico protocolo pero esto puede estar sujeto a cambios. 
- 
----- 
- 
-Los resultados de cada sujeto quedan en // working/**sujeto**_rs.ica/ // y el informe en // working/**sujeto**_rs.ica/filtered_func_data.ica/report/00index.html // 
- 
-==== ICA grupal ==== 
- 
-Para realizar el ICA del proyecto o un grupo de sujetos se utliza el script //rs_ica_group.pl//. La unica opcion disponible es -cut (Ver Opciones comunes) para realizar el analisis grupal en una seleccion de individuos. En caso contrario lo realiza en todos los sujetos del proyecto. Se lanza con, 
- 
-<code bash> 
-rs_ica_group.pl mopead 
-</code> 
- 
----- 
- 
-**Nota:** Para realizar el analisis se utilizan varias plantillas que se encuentran en ${PIPEDIR}/lib/ 
- 
-<code> 
-notalone_ica_template.fsf 
-group_ica_template_p1.fsf 
-group_ica_template_targets.fsf 
-group_ica_template_p2.fsf 
-</code> 
- 
-Estas plantillas se rellenan con los directorios particulares del proyecto en si. No obstante, en caso de tener que cambiar alguna opción mas, como el TR, habria que editar directamente las plantillas correspondientes. Notese que en cualquier caso habria que cambiar dos plantillas, //notalone_ica_template.fsf// y la plantilla // group_ica_template_???.fsf// donde se encuentre el parametro en cuestion. Esto puede estar sujeto a cambios. 
- 
----- 
- 
-Los resultados de cada sujeto quedan en //working/rs.gica/groupmelodic.ica/ // y el informe en //working/rs.gica/groupmelodic.ica/report/00index.html// 
-===== Opciones comunes ===== 
- 
-Para realizar la misma tarea se usan en cada script las mismas opciones de entrada. 
- 
-  * //-cut//: toma una archivo //.csv// como argumento y ejecuta el script solo sobre los sujetos nombrados en ese archivo. Este archivo debe tener el mismo formato que la base de datos del proyectoy debe ser un subconjunto de ella. O sea, solo se ejecutara el script sobre los sujetos que **tambien** esten en la base de datos del proyecto. <code>script.pl -cut soloestos.csv proyecto</code> ejecutara //script.pl// sobre los sujetos que esten en los archivos //soloestos.csv// **y** //proyecto.csv//. Esto es util para cuando se desea ejecutar el procesamiento sobre sujetos que llegan nuevos o repetir algunos sujetos. 
- 
-  * //-a//: Envía como attachment los resultados finales o los //logs// que producen los scripts 
- 
-  * //-l//: Cuando por defecto el script envía attachments, esta opción evita que los haga 
- 
-  * Para manejar el cluster se usa [[https://slurm.schedmd.com/quickstart.html|slurm]]. Usando //squeue// y //scancel// se puede encontrar y eliminar cualquier tarea que se haya lanzado. Una explicación simple de estas herramients se puede ver en [[:cluster|Como usar el cluster sin morir en el intento]]. 
  
neuroimagen/pipe03.txt · Last modified: 2020/08/04 10:58 (external edit)