This shows you the differences between two versions of the page.
neuroimagen:xnat_pipelines [2019/10/29 23:42] daniel [Estructura de un pipeline] |
neuroimagen:xnat_pipelines [2020/08/04 10:58] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Plataforma XNAT - Pipelines ====== | ||
- | |||
- | ===== Instalación de los pipelines de Xnat ===== | ||
- | |||
- | https:// | ||
- | |||
- | ==== Prerrequisitos: | ||
- | |||
- | * XNat instalado y funcionando | ||
- | * en http:// | ||
- | * con el // | ||
- | * Los programas Git y Mercurial para descargar código de repositorios. | ||
- | * El programa // | ||
- | |||
- | ==== Descarga del software ==== | ||
- | |||
- | Seguimos el tutorial de arriba que sugiere una forma de instalación desde un directorio temporal, que requiere menos pasos que hacerlo, como indican en otros tutoriales, desde dentro del XNAT_HOME (el resultado es equivalente) | ||
- | |||
- | === Sistema de pipelines === | ||
- | |||
- | <code bash> | ||
- | $ cd | ||
- | $ mkdir tmp | ||
- | $ cd tmp | ||
- | $ git clone https:// | ||
- | $ cd xnat-pipeline-engine | ||
- | $ vim gradle.properties | ||
- | </ | ||
- | |||
- | < | ||
- | xnatUrl=http:// | ||
- | siteName=XNAT | ||
- | adminEmail=osotolongo@fundacioace.com | ||
- | smtpServer=smtp.fundacioace.com | ||
- | destination=/ | ||
- | modulePaths=/ | ||
- | </ | ||
- | |||
- | **Nota:** si no se pone el servidor SMTP correcto, no funcionará la característica de muchos pipelines de enviar un mensaje de correo al usuario diciéndole que un proceso largo ha terminado. | ||
- | |||
- | === Pipeline que convierte DICOM a NIFTI === | ||
- | |||
- | <code bash> | ||
- | $ cd | ||
- | $ cd tmp | ||
- | $ mkdir modules | ||
- | $ cd modules | ||
- | $ hg clone https:// | ||
- | </ | ||
- | |||
- | Este pipeline usa el dcm2niix para convertir los DICOM en un NIFTI 4D. Por eso el el ejecutable dcm2niix debería estar accesible y visible (o sea, en el PATH) del usuario bajo en que se ejecuta XNat. Si no es así, se debe incluir la ruta en el script de configuración: | ||
- | |||
- | < | ||
- | $ cd nrg_pipeline_dicomtonifti/ | ||
- | $ vim dcm2niix_setup.sh | ||
- | </ | ||
- | |||
- | <code bash> | ||
- | #!/bin/bash | ||
- | |||
- | DCM2NIIX_HOME=/ | ||
- | export PATH=$DCM2NIIX_HOME: | ||
- | </ | ||
- | |||
- | ==== Instalación del pipeline ==== | ||
- | |||
- | Basta ejecutar desde el directorio xnat-pipeline-engine el programa gradlew (como root): | ||
- | |||
- | <code bash> | ||
- | $ cd | ||
- | $ cd tmp/ | ||
- | $ sudo ./gradlew | ||
- | </ | ||
- | |||
- | El programa gradlew instala en $XNAT_HOME/ | ||
- | |||
- | ==== Resultado de la instalación ==== | ||
- | |||
- | En $XNAT_HOME/ | ||
- | |||
- | <code bash> | ||
- | $ ls / | ||
- | nt-tools | ||
- | birn_tools | ||
- | commandlineTools | ||
- | dcm2niix | ||
- | </ | ||
- | |||
- | === Comprobación de la instalación === | ||
- | |||
- | Accediendo a XNat, en el menú Administer > Pipelines, seleccionar el enlace a “Add pipeline to repository”. En la página que se abre, se debe introducir en el campo “Enter path to pipeline descriptor xml =>” la ruta absoluta a la descripción XML del pipeline que queremos usar: | ||
- | |||
- | < | ||
- | / | ||
- | </ | ||
- | |||
- | Una vez definido el pipeline en XNat, se debe crear un proyecto y, dentro en él, seleccionar los pipelines que se quieren ejecutar sobre las secuencias que se cargarán en él. | ||
- | |||
- | Para ello, en el proyecto, se selecciona la pestaña “Pipelines” y se hace click sobre “Add more pipelines”: | ||
- | |||
- | < | ||
- | * Launch pipeline automatically when session is archived | ||
- | </ | ||
- | |||
- | Esta opción nos recuerda que el procesamiento se lleva a cabo una vez se cargan las imágenes en el proyecto (o, si se cargan como “pre-archivo”, | ||
- | |||
- | Para comprobar que la conversión se ha completado, se puede seleccionar “Actions > Download images”. En la página que se carga, se verá en la columna central con los “Scan formats” un apartado “NIFTY”. | ||
- | |||
- | ===== Ejemplos de pipelines ===== | ||
- | |||
- | A continuación se explica cuál es la estructura de un pipeline y se dan ejemplos de modificación de un pipeline y de construcción de otro. | ||
- | |||
- | ==== Estructura de un pipeline ==== | ||
- | |||
- | Un // | ||
- | * descripción XML del // | ||
- | * '' | ||
- | * '' | ||
- | |||
- | **Ejemplo: | ||
- | |||
- | La descripción del // | ||
- | |||
- | < | ||
- | |||
- | </ | ||
- | |||
- | ==== Ejemplo: modificación del // | ||
- | |||
- | |||
- | ==== Ejemplo: limpieza de las series en una sesión DICOM ==== | ||
- | |||
- | Aquí se describirá el // | ||
- | |||
- | Este // | ||
- | |||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | == CleanMRSession.xml == | ||
- | |||
- | ++++ El código, completo, es así: | | ||
- | <code xml> | ||
- | |||
- | <?xml version=" | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | |||
- | <!-- Standard input parameters --> | ||
- | < | ||
- | < | ||
- | | ||
- | | ||
- | < | ||
- | | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
- | < | ||
- | |||
- | < | ||
- | |||
- | <!-- Pipeline loop --> | ||
- | <loop id=" | ||
- | |||
- | <!-- Other computed parameters --> | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
- | < | ||
- | <!-- Download session series --> | ||
- | <step id=" | ||
- | <!-- mkdir -p $WORKDIR/ | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | <step id=" | ||
- | <!-- XnatDataClient -username $USER -password $PASSWORD -useAbsolutePAth -batch -method GET " | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | <!-- Check and delete unfit series --> | ||
- | <step id=" | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | <!-- Delete all files --> | ||
- | <step id=" | ||
- | <!-- rm -rf $WORKDIR/ | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | <!-- The end --> | ||
- | </ | ||
- | </ | ||
- | |||
- | </ | ||
- | ++++ | ||
- | |||
- | == cleanMRSession.xml (descripción de cleamMRSession.sh) == | ||
- | |||
- | ++++ El código, completo, es así: | | ||
- | <code xml> | ||
- | |||
- | <?xml version=" | ||
- | <!-- --> | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
- | </ | ||
- | ++++ | ||
- | |||
- | |||
- | == cleanMRSession.sh (script que realiza el borrado) == | ||
- | |||
- | ++++ El código, completo, es así: | | ||
- | <code bash> | ||
- | |||
- | #!/bin/bash | ||
- | |||
- | #NOTA: requires dicom3tools' | ||
- | |||
- | ARGS=( " | ||
- | |||
- | #parse arguments | ||
- | USER="" | ||
- | PASSWORD="" | ||
- | URL="" | ||
- | SERIES="" | ||
- | for ((n=0; n< | ||
- | case " | ||
- | -u) | ||
- | let n=n+1 | ||
- | USER=" | ||
- | ;; | ||
- | -p) | ||
- | let n=n+1 | ||
- | PASSWORD=" | ||
- | ;; | ||
- | -U) | ||
- | let n=n+1 | ||
- | URL=" | ||
- | ;; | ||
- | -*) echo " | ||
- | ;; | ||
- | *) | ||
- | SERIES=" | ||
- | ;; | ||
- | esac | ||
- | done | ||
- | |||
- | echo " | ||
- | echo " | ||
- | echo " | ||
- | echo " | ||
- | |||
- | # | ||
- | TMP_PRO=$(mktemp) | ||
- | |||
- | #Tipos de estudios | ||
- | cat > $TMP_PRO << | ||
- | ep2d_bold_p2_resting_state | ||
- | ep2d_fid_basic_bold_p2_AP | ||
- | ep2d_fid_basic_bold_p2_PA | ||
- | asl_3d_tra_iso_3.0_highres | ||
- | DTIep2d_diff_mddw_48dir_p3_AP | ||
- | DTIep2d_diff_mddw_4b0_PA | ||
- | t1_mprage_sag_p2_iso | ||
- | t2_space_dark-fluid_sag_p2_iso | ||
- | .EOF | ||
- | |||
- | #Archivos de la misma serie ($4 único), con fechas y descripciones, | ||
- | DCM=" | ||
- | dckey -k " | ||
- | dckey -k " | ||
- | $HOME/ | ||
- | |||
- | #Dejar todo limpio | ||
- | rm -f $TMP_PRO | ||
- | |||
- | </ | ||
- | ++++ | ||
- | |||