User Tools

Site Tools


neuroimagen:xnat_apiclient_using

Automatizacion con xnatapic

Felizmente tenemos ya un cliente de xnat para manipulacion basica de archivos y pipelines. Vamos a aprender a usarlo para las tareas comunes.

Subiendo un sujeto

Esto ahora es bastante simple de hacer. Necesitamos el nombre del proyecto, el nombre que queremos dar al sujeto y el directorio donde estan las imagenes. Con el formato nuevo, que tiene todos los DICOM en la misma carpeta esto sera muy sencillo.

Primero necesitamos sacar el PatientID de los DICOM pues este sera el nombre del experimento de XNAT. Esto es mas o menos sencillo,

PTID=$(dckey -k "PatientID" ${DIR}/$(ls ${DIR}/ | head -n 1) 2>&1 | sed 's/[ \t]$//g')

Aqui DIR es la variable donde guardamos el directorio DICOM y el sed se usa para quitar algun espacio extra del tag.

En aquellos casos en que los archivos DICOM se encuentren en subdirectorios, tendremos que cambiar el ls por un find:

PTID=$(dckey -k "PatientID" "$(find "${DIR}/" -type f | head -n 1)" 2>&1 | sed 's/[ \t]$//g')

Por último, también es posible que justo el primer archivo de la serie no tenga PatientID, así que complicamos un poco el código y buscamos el primer archivo que tenga ese dato:

for f in $(find "$DIR/" -type f); do
	if PTID=$(dckey -k "PatientID" 2>&1 | sed 's/[ \t]$//g') && ! [ -z "$PTID" ] ; then
		break
	fi
done
 
Ahora he de crear proyecto y sujeto pero solo en caso de que no existan,
<code bash>
f [[ -z $(xnatapic list_projects --project_id ${PROY}) ]]; then
        xnatapic create_project --project_id ${PROY};
fi
if [[ -z $(xnatapic list_subjects --project_id ${PROY} --subject_id ${SUBJECT}) ]]; then
        xnatapic create_subject --project_id ${PROY} --subject_id ${SUBJECT};
fi

y luego subir los archivos,

xnatapic upload_dicom --project_id ${PROY} --subject_id ${SUBJECT} --experiment_id ${PTID} ${DIR}

Por ultimo, la ejecución automática de los pipelines esta desactivada (por ahora) por problemas de sincronizacion de las subidas. Voy a ejecutar el pipeline de conversion a NIfTI. Antes debo comprobar que el pipeline esta cargado en el proyecto:

DCMC=$(xnatapic list_pipelines --project_id ${PROY} | grep DicomToNifti_Y)
if [[ $DCMC == DicomToNifti_X ]]; then 
        xnatapic run_pipeline --project_id ${PROY} --pipeline DicomToNifti_Y --experiment_id ${PTID}; 
fi

Nota: el DicomToNifti_Y es una adaptación del DicomToNifti_X para ajustar la nomenclatura del archivo que se genera y otras cosas.

El codigo completo aqui

El output,

[osotolongo@detritus mopead]$ /upload_subject.sh Test3 PJBQEK3J /nas/corachan/MOPEAD/NYQTFWH6
PROY=Test3
SUBJECT=PJBQEK3J
DIR=/nas/corachan/MOPEAD/NYQTFWH6
PTID=D18475994
curl -f -X POST -u admin:fundacioace http://detritus.fundacioace.com:8088/data/services/import?import-handler=SI&dest=/archive/projects/Test3/subjects/PJBQEK3J/experiments/D18475994&overwrite=delete&triggerPipelines=false -F file.tar.gz=@/tmp/tmp.qVL30cuwWw-10001.tar.gz
curl -f -X POST -u admin:fundacioace http://detritus.fundacioace.com:8088/data/services/import?import-handler=SI&dest=/archive/projects/Test3/subjects/PJBQEK3J/experiments/D18475994&overwrite=delete&triggerPipelines=false -F file.tar.gz=@/tmp/tmp.GMVZq9R2G6-11001.tar.gz
curl -f -X POST -u admin:fundacioace http://detritus.fundacioace.com:8088/data/services/import?import-handler=SI&dest=/archive/projects/Test3/subjects/PJBQEK3J/experiments/D18475994&overwrite=delete&triggerPipelines=false -F file.tar.gz=@/tmp/tmp.OzBboB3wJh-12001.tar.gz
...
curl -f -X POST -u admin:fundacioace http://detritus.fundacioace.com:8088/data/services/import?import-handler=SI&dest=/archive/projects/Test3/subjects/PJBQEK3J/experiments/D18475994&overwrite=delete&triggerPipelines=false -F file.tar.gz=@/tmp/tmp.81ZTkjURKC-1037.tar.gz
Error: could not upload /nas/corachan/MOPEAD/NYQTFWH6

Nota: El error final lo producen algunas series que no se cargan correctamente (¡razón por determinar!).

Y, desde la UI se ve que las va subiendo de una en una: … y una hora después …

¿Que pasa si le quito el mixed-series?

xnatapic upload_dicom --project_id ${PROY} --subject_id ${SUBJECT} --experiment_id ${PTID} ${DIR}
[osotolongo@detritus mopead]$ upload_subject.sh Test3 PJBKQK2P  /nas/corachan/MOPEAD/PJBKQK2P
PROY=Test3
SUBJECT=PJBKQK2P
DIR=/nas/corachan/MOPEAD/PJBKQK2P
PTID=D19115384
curl -f -X POST -u admin:fundacioace http://detritus.fundacioace.com:8088/data/services/import?import-handler=SI&dest=/archive/projects/Test3/subjects/PJBKQK2P/experiments/D19115384&overwrite=delete&triggerPipelines=false -F file.tar.gz=@/tmp/tmp.vTA51qEYJI.tar.gz

Parece que tan sólo las sube en una única vez (y tarda mucho menos).

Y en ambos caso, al final, ejecuta el pipeline:

Historial de operaciones ejecutadas al subir el sujeto //PJBKQK2P// sin la opción de --mixed-series.

neuroimagen/xnat_apiclient_using.txt · Last modified: 2020/08/04 10:58 (external edit)