Table of Contents
Usando XNAT en el dia a dia
Aunque se puede crear el proyecto con el cliente de XNAT, puede hacerse a traves de la web,
No obstante, a partir de aqui es mucho mas comodo utilizar XNAT a traves de CLI pra manipular el proyecto.
Subir DCMs
Para empezar debo subir las imagenes MRI, a la vez que creo el sujeto. En principio debo tener las imagenes en formato DICOM, ordenadas en un directorio,
[bofh@cthulhu ~]$ ls /nas/corachan/facehbi F001 F007 F013 F019 F025 F031 F037 F043 F052 F058 F064 F071 F077 F083 F089 F095 F102 F108 F115 F121 F127 F133 F139 F145 F151 F157 F163 F169 F175 F182 F189 F195 F201 F208 F214 F002 F008 F014 F020 F026 F032 F038 F044 F053 F059 F065 F072 F078 F084 F090 F096 F103 F109 F116 F122 F128 F134 F140 F146 F152 F158 F164 F170 F176 F183 F190 F196 F202 F209 F215 F003 F009 F015 F021 F027 F033 F039 F047 F054 F060 F066 F073 F079 F085 F091 F097 F104 F110 F117 F123 F129 F135 F141 F147 F153 F159 F165 F171 F177 F184 F191 F197 F203 F210 F004 F010 F016 F022 F028 F034 F040 F048 F055 F061 F068 F074 F080 F086 F092 F098 F105 F111 F118 F124 F130 F136 F142 F148 F154 F160 F166 F172 F178 F185 F192 F198 F204 F211 F005 F011 F017 F023 F029 F035 F041 F049 F056 F062 F069 F075 F081 F087 F093 F099 F106 F112 F119 F125 F131 F137 F143 F149 F155 F161 F167 F173 F179 F186 F193 F199 F205 F212 F006 F012 F018 F024 F030 F036 F042 F050 F057 F063 F070 F076 F082 F088 F094 F100 F107 F113 F120 F126 F132 F138 F144 F150 F156 F162 F168 F174 F181 F188 F194 F200 F207 F213
En este caso hay directorios con DICOMs pero podemos partir tambien de archivos ZIP,
[bofh@cthulhu ~]$ ls /nas/corachan/EPAD_LCS/*-SCR.zip /nas/corachan/EPAD_LCS/032-00001-SCR.zip /nas/corachan/EPAD_LCS/032-00018-SCR.zip /nas/corachan/EPAD_LCS/032-00035-SCR.zip /nas/corachan/EPAD_LCS/032-00052-SCR.zip /nas/corachan/EPAD_LCS/032-00068-SCR.zip /nas/corachan/EPAD_LCS/032-00002-SCR.zip /nas/corachan/EPAD_LCS/032-00019-SCR.zip /nas/corachan/EPAD_LCS/032-00036-SCR.zip /nas/corachan/EPAD_LCS/032-00053-SCR.zip /nas/corachan/EPAD_LCS/032-00069-SCR.zip /nas/corachan/EPAD_LCS/032-00003-SCR.zip /nas/corachan/EPAD_LCS/032-00020-SCR.zip /nas/corachan/EPAD_LCS/032-00037-SCR.zip /nas/corachan/EPAD_LCS/032-00054-SCR.zip /nas/corachan/EPAD_LCS/032-00070-SCR.zip /nas/corachan/EPAD_LCS/032-00004-SCR.zip /nas/corachan/EPAD_LCS/032-00021-SCR.zip /nas/corachan/EPAD_LCS/032-00038-SCR.zip /nas/corachan/EPAD_LCS/032-00055-SCR.zip /nas/corachan/EPAD_LCS/032-00071-SCR.zip /nas/corachan/EPAD_LCS/032-00005-SCR.zip /nas/corachan/EPAD_LCS/032-00022-SCR.zip /nas/corachan/EPAD_LCS/032-00039-SCR.zip /nas/corachan/EPAD_LCS/032-00056-SCR.zip /nas/corachan/EPAD_LCS/032-00072-SCR.zip /nas/corachan/EPAD_LCS/032-00007-SCR.zip /nas/corachan/EPAD_LCS/032-00024-SCR.zip /nas/corachan/EPAD_LCS/032-00040-SCR.zip /nas/corachan/EPAD_LCS/032-00057-SCR.zip /nas/corachan/EPAD_LCS/032-00074-SCR.zip /nas/corachan/EPAD_LCS/032-00008-SCR.zip /nas/corachan/EPAD_LCS/032-00025-SCR.zip /nas/corachan/EPAD_LCS/032-00041-SCR.zip /nas/corachan/EPAD_LCS/032-00058-SCR.zip /nas/corachan/EPAD_LCS/032-00075-SCR.zip /nas/corachan/EPAD_LCS/032-00009-SCR.zip /nas/corachan/EPAD_LCS/032-00026-SCR.zip /nas/corachan/EPAD_LCS/032-00042-SCR.zip /nas/corachan/EPAD_LCS/032-00059-SCR.zip /nas/corachan/EPAD_LCS/032-00076-SCR.zip /nas/corachan/EPAD_LCS/032-00010-SCR.zip /nas/corachan/EPAD_LCS/032-00027-SCR.zip /nas/corachan/EPAD_LCS/032-00044-SCR.zip /nas/corachan/EPAD_LCS/032-00060-SCR.zip /nas/corachan/EPAD_LCS/032-00077-SCR.zip /nas/corachan/EPAD_LCS/032-00011-SCR.zip /nas/corachan/EPAD_LCS/032-00028-SCR.zip /nas/corachan/EPAD_LCS/032-00045-SCR.zip /nas/corachan/EPAD_LCS/032-00061-SCR.zip /nas/corachan/EPAD_LCS/032-00078-SCR.zip /nas/corachan/EPAD_LCS/032-00012-SCR.zip /nas/corachan/EPAD_LCS/032-00029-SCR.zip /nas/corachan/EPAD_LCS/032-00046-SCR.zip /nas/corachan/EPAD_LCS/032-00062-SCR.zip /nas/corachan/EPAD_LCS/032-00079-SCR.zip /nas/corachan/EPAD_LCS/032-00013-SCR.zip /nas/corachan/EPAD_LCS/032-00030-SCR.zip /nas/corachan/EPAD_LCS/032-00047-SCR.zip /nas/corachan/EPAD_LCS/032-00063-SCR.zip /nas/corachan/EPAD_LCS/032-00080-SCR.zip /nas/corachan/EPAD_LCS/032-00014-SCR.zip /nas/corachan/EPAD_LCS/032-00031-SCR.zip /nas/corachan/EPAD_LCS/032-00048-SCR.zip /nas/corachan/EPAD_LCS/032-00064-SCR.zip /nas/corachan/EPAD_LCS/032-00082-SCR.zip /nas/corachan/EPAD_LCS/032-00015-SCR.zip /nas/corachan/EPAD_LCS/032-00032-SCR.zip /nas/corachan/EPAD_LCS/032-00049-SCR.zip /nas/corachan/EPAD_LCS/032-00065-SCR.zip /nas/corachan/EPAD_LCS/032-00016-SCR.zip /nas/corachan/EPAD_LCS/032-00033-SCR.zip /nas/corachan/EPAD_LCS/032-00050-SCR.zip /nas/corachan/EPAD_LCS/032-00066-SCR.zip /nas/corachan/EPAD_LCS/032-00017-SCR.zip /nas/corachan/EPAD_LCS/032-00034-SCR.zip /nas/corachan/EPAD_LCS/032-00051-SCR.zip /nas/corachan/EPAD_LCS/032-00067-SCR.zip
Aunque puede dejarse que XNAT asigne el nombre del sujeto basandose en la informacion del DICOM, es preferible asegurarse y decirle a XNAT cual debe ser,
[osotolongo@brick03 ~]$ for x in /nas/corachan/facehbi/* ; do s=$(echo ${x}| awk -F"/" {'print $5'}); xnatapic upload_dicom --project_id facehbi --subject_id ${s} ${x}; done
Errores
De vez en cuando XNAT encuentra un sujeto cuyo upload da error,
[osotolongo@brick03 f2cehbi]$ xnatapic upload_dicom --project_id f2cehbi --subject_id F088 /nas/corachan/facehbi_2/F088 curl -f -X POST -u osotolongo:kaponko http://detritus.fundacioace.com:8088/data/services/import?import-handler=SI&dest=/archive/projects/f2cehbi/subjects/F088&overwrite=delete&triggerPipelines=false -F file.tar.gz=@/nas/osotolongo/tmp/tmp.nyYXgRBJfQ.tar.gz Error: could not upload /nas/corachan/facehbi_2/F088
Lo correcto es ir al prearchive y revisar el error,
Ejecutando los pipelines
Primero debemos añadir los pipelines al proyecto. Esto tambien pueden hacer con xnatapic pero tampoco se gana mucho,
Ahora, para lanzar los pipelines debemos conocer los experiment_id del proyecto.
[osotolongo@brick03 ~]$ xnatapic list_experiments --project_id facehbi > xnat_experiments.list [osotolongo@brick03 ~]$ head xnat_experiments.list XNAT4_E00170 XNAT4_E00171 XNAT4_E00173 XNAT4_E00175 XNAT4_E00176 XNAT4_E00178 XNAT4_E00179 XNAT4_E00180 XNAT4_E00162 XNAT4_E00163
Ahora, sobre estos experimentos debemos ejecutar el pipeline. Primero hay que asegurarse que el pipeline esta incluido en el proyecto,
[osotolongo@brick03 ~]$ xnatapic list_pipelines --project_id facehbi RunFreesurfer
Luego, ejecutamos el pipeline para cada experimento que deseemos,
[osotolongo@brick03 ~]$ for x in `cat xnat_experiments.list`; do xnatapic run_pipeline --project_id facehbi --pipeline RunFreesurfer --experiment_id ${x}; done [osotolongo@brick03 ~]$ squeue | grep xnat | wc -l 206 [osotolongo@brick03 ~]$ squeue | grep xnat 8555 fast RunFrees xnat PD 0:00 1 (Resources) 8556 fast RunFrees xnat PD 0:00 1 (Priority) 8557 fast RunFrees xnat PD 0:00 1 (Priority) ... ... 8551 fast RunFrees xnat R 0:59 1 brick04 8552 fast RunFrees xnat R 0:59 1 brick04 8553 fast RunFrees xnat R 0:59 1 brick04 8554 fast RunFrees xnat R 0:56 1 brick04
Aqui, si todo marcha correctamente, XNAT se encarga de enrutar en el cluster la ejecucion de todos los pipelines.
Sacando resultados
Para obtener los resultados de la ejecucion de FS, existen varias opciones. Podemos obetener las estadisticas total o parcialmente u obtener el directorio completo de analisis de FS.
Vamos a tomar solo el aseg,
[osotolongo@brick03 facehbi]$ mkdir fsresults [osotolongo@brick03 facehbi]$ for x in `cat xnat_experiments.list`; do mkdir fsresults/${x}; xnatapic get_fsresults --experiment_id ${x} --stats aseg fsresults/${x}/; done [osotolongo@brick03 facehbi]$ ls fsresults/*/aseg* fsresults/XNAT4_E00162/aseg.stats fsresults/XNAT4_E00199/aseg.stats fsresults/XNAT4_E00236/aseg.stats fsresults/XNAT4_E00163/aseg.stats fsresults/XNAT4_E00200/aseg.stats fsresults/XNAT4_E00237/aseg.stats ... ... fsresults/XNAT4_E00196/aseg.stats fsresults/XNAT4_E00233/aseg.stats fsresults/XNAT4_E00367/aseg.stats fsresults/XNAT4_E00197/aseg.stats fsresults/XNAT4_E00234/aseg.stats fsresults/XNAT4_E00198/aseg.stats fsresults/XNAT4_E00235/aseg.stats
Rerun errors
Una forma sencilla de ejecutar nuevamente las tareas fallidas es localizar cual experimento no tiene los resultados de segmentacion,
[osotolongo@brick03 facehbi]$ ls fsresults/*/aseg.stats | awk -F"/" {'print $2'} > xnat_done.txt [osotolongo@brick03 facehbi]$ grep -v "`cat xnat_done.txt`" xnat_experiments.list > xnat_failures.txt
y comprobamos,
[osotolongo@brick03 facehbi]$ wc -l xnat_experiments.list 206 xnat_experiments.list [osotolongo@brick03 facehbi]$ wc -l xnat_failures.txt 97 xnat_failures.txt [osotolongo@brick03 facehbi]$ wc -l xnat_done.txt 109 xnat_done.txt
Luego podemos hacer simplemente,
[osotolongo@brick03 facehbi]$ for x in `cat xnat_failures.txt`; do xnatapic run_pipeline --project_id facehbi --pipeline RunFreesurfer --experiment_id ${x}; done [osotolongo@brick03 facehbi]$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 8821 fast RunFrees xnat PD 0:00 1 (Resources) 8822 fast RunFrees xnat PD 0:00 1 (Priority) 8823 fast RunFrees xnat PD 0:00 1 (Priority) 8824 fast RunFrees xnat PD 0:00 1 (Priority) ... ... 8815 fast RunFrees xnat R 4:32 1 brick02 8816 fast RunFrees xnat R 4:32 1 brick03 8817 fast RunFrees xnat R 4:32 1 brick03 8818 fast RunFrees xnat R 4:29 1 brick03 8819 fast RunFrees xnat R 4:29 1 brick03
Todo al mismo tiempo
[osotolongo@brick03 mopead]$ for x in /nas/corachan/MOPEAD_OSCAR_ZIP/*.zip; do s=$(basename ${x} | sed 's/\.zip//'); xnatapic create_subject --project_id mopead --subject_id ${s}; xnatapic upload_dicom --project_id mopead --subject_id ${s} --pipelines --zip ${x}; done
Pero asi no funciona bien. Intentemos,
[osotolongo@brick03 mopead]$ for x in /nas/corachan/MOPEAD_OSCAR_ZIP/*.zip; do s=$(basename ${x} | sed 's/\.zip//'); xnatapic create_subject --project_id mopead --subject_id ${s}; done [osotolongo@brick03 mopead]$ xnatapic list_subjects --project_id mopead --label > xnat_subjects.list [osotolongo@brick03 mopead]$ head xnat_subjects.list XNAT5_S00617,CQXUYGJG XNAT5_S00618,CVSDYQYG XNAT5_S00619,D2A774IW XNAT5_S00597,6599YP5C XNAT5_S00590,27FAKA55 XNAT5_S00591,2Y5ZIMKM XNAT5_S00608,A5T68J8Y XNAT5_S00592,4NKAYEW6 XNAT5_S00598,6AIIS7D5 XNAT5_S00593,4THMLQBG [osotolongo@brick03 mopead]$ for x in `cat xnat_subjects.list`; do s=$(echo ${x} | awk -F"," '{print $1}'); z=$(echo ${x} | awk -F"," '{print $2}'); xnatapic upload_dicom --project_id mopead --subject_id ${s} --pipelines --zip /nas/corachan/MOPEAD_OSCAR_ZIP/${z}.zip; done
Nota: Debe comprobarse el prearchive en caso de algun problema, error, etc.
subiendo los PET
El procedimiento de subida es similar,
[osotolongo@brick03 facehbi]$ for x in `cat pets2xnat.list`; do s=$(echo ${x} | sed 's/FACEHBI-\(F[0-9]*\)B/\1/'); xnatapic upload_dicom --project_id facehbi --subject_id ${s} /nas/clinic/facehbi/${x}; done
XNAT automaticamente encuentra el tipo de imagen y la asigna al sujeto que señalamos,
Analisis PET
Primero encontramos los experimentos correctos,
[osotolongo@brick03 facehbi]$ xnatapic list_experiments --project_id facehbi --type | grep petSessionData | awk -F"," {'print $1'} > xnat_pet_experiments.list [osotolongo@brick03 facehbi]$ head xnat_pet_experiments.list XNAT5_E00276 XNAT5_E00278 XNAT5_E00283 XNAT5_E00296 XNAT5_E00299 XNAT5_E00308 XNAT5_E00316 XNAT5_E00318 XNAT5_E00319 XNAT5_E00323
Voy a asegurarme de que el pipeline esta activo. En otro caso, voy a al web y lo añado manualmente.
[osotolongo@brick03 facehbi]$ xnatapic list_pipelines --project_id facehbi RunFreesurfer RegisterPETwithMRImatch
Y ahora mandamos todo,
[osotolongo@brick03 facehbi]$ for x in `cat xnat_pet_experiments.list`; do xnatapic run_pipeline --project_id facehbi --pipeline RegisterPETwithMRImatch --experiment_id ${x}; done curl -f -X POST -u osotolongo:kaponko http://detritus.fundacioace.com:8088/data/projects/facehbi/pipelines/RegisterPETwithMRImatch/experiments/XNAT5_E00276?xnatapic=true ... ... ...
Esto demora un poco pero encola en el cluster todos los registros,
[osotolongo@brick03 facehbi]$ squeue | wc -l 201 [osotolongo@brick03 facehbi]$ queue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 10814 fast RegisterPETwithMRImatch.XNAT5_ xnat PD 0:00 1 (Resources) 10815 fast RegisterPETwithMRImatch.XNAT5_ xnat PD 0:00 1 (Priority) 10816 fast RegisterPETwithMRImatch.XNAT5_ xnat PD 0:00 1 (Priority) ... ... 10809 fast RegisterPETwithMRImatch.XNAT5_ xnat R 4:42 1 brick03 10810 fast RegisterPETwithMRImatch.XNAT5_ xnat R 4:42 1 brick03 10811 fast RegisterPETwithMRImatch.XNAT5_ xnat R 4:42 1 brick03 10812 fast RegisterPETwithMRImatch.XNAT5_ xnat R 4:39 1 brick03 10813 fast RegisterPETwithMRImatch.XNAT5_ xnat R 4:39 1 brick03
a lo bestia
Ojo que si ya estamos subiendo y corriendo pipelines, deberiamos poder hacerlo al mismo tiempo,
[osotolongo@brick03 f2cehbi]$ for x in `cat pets2xnat.list`; do s=$(echo ${x} | sed 's/FACEHBI-//;s/F$//'); xnatapic upload_dicom --project_id f2cehbi --subject_id ${s} --experiment_id ${s}F --pipelines /nas/clinic/facehbi_2/${x}; done
No funciona
ejemplo V5, correspondencia Amypad
[osotolongo@brick03 f5cehbi]$ for x in `awk -F"," {'print $2'} amypad_facehbi.list`; do xnatapic create_subject --project_id f5cehbi --subject_id ${x}; done [osotolongo@brick03 f5cehbi]$ for x in `awk -F"," {'print $1'} amypad_facehbi.list`; do s=$(grep ${x} amypad_facehbi.list| awk -F"," {'print $2'}); d=$(ls /nas/clinic/facehbi_5/ | grep ${x}); xnatapic upload_dicom --project_id f5cehbi --subject_id ${s} --experiment_id ${s}A /nas/clinic/facehbi_5/${d}; done
Cuales tienen PET y MRI a la vez?
Saco la lista de sujetos,
[osotolongo@brick03 f5cehbi]$ xnatapic list_subjects --project_id f5cehbi --label > xnat_subjects.list [osotolongo@brick03 f5cehbi]$ head xnat_subjects.list XNAT_S00086,F005 XNAT_S00087,F006 XNAT_S00088,F007 XNAT_S00089,F009 XNAT_S00090,F010 XNAT_S00091,F014 XNAT_S00092,F015 XNAT_S00093,F023 XNAT_S00094,F024 XNAT_S00095,F025
De qui, ¿cuantos experimentos MRI hay?
[osotolongo@brick03 f5cehbi]$ for x in `awk -F"," {'print $1'} xnat_subjects.list`; do e=$(xnatapic list_experiments --project_id f5cehbi --subject_id ${x} --modality MRI); if [[ ${e} ]]; then echo "${x},${e}"; fi; done > xnat_subject_mri.list [osotolongo@brick03 f5cehbi]$ head xnat_subject_mri.list XNAT_S00086,XNAT_E00105 XNAT_S00087,XNAT_E00106 XNAT_S00088,XNAT_E00107 XNAT_S00089,XNAT_E00108 XNAT_S00090,XNAT_E00109 XNAT_S00091,XNAT_E00110 XNAT_S00092,XNAT_E00111 XNAT_S00093,XNAT_E00112 XNAT_S00094,XNAT_E00113 XNAT_S00095,XNAT_E00114
De estos, ¿cuantos tiene PET?
[osotolongo@brick03 f5cehbi]$ for x in `awk -F"," {'print $1'} xnat_subject_mri.list`; do e=$(xnatapic list_experiments --project_id f5cehbi --subject_id ${x} --modality PET); if [[ ${e} ]]; then echo "${x},${e}"; fi; done > xnat_subjects_mri_pet.list [osotolongo@brick03 f5cehbi]$ head xnat_subjects_mri_pet.list XNAT_S00086,XNAT5_E00704 XNAT_S00088,XNAT5_E00718 XNAT_S00089,XNAT5_E00712 XNAT_S00090,XNAT5_E00708 XNAT_S00091,XNAT5_E00719 XNAT_S00092,XNAT5_E00705 XNAT_S00093,XNAT5_E00709 XNAT_S00094,XNAT5_E00707 XNAT_S00095,XNAT5_E00715 XNAT_S00096,XNAT5_E00716
Ahora, estos son los que deben ejecutar el pipeline de Centiloide!
[osotolongo@brick03 f5cehbi]$ xnatapic list_pipelines --project_id f5cehbi RunFreesurfer RegisterPETwithMRImatch [osotolongo@brick03 f5cehbi]$ for x in `awk -F"," {'print $2'} xnat_subjects_mri_pet.list`; do xnatapic run_pipeline --project_id f5cehbi --pipeline RegisterPETwithMRImatch --experiment_id ${x}; done [osotolongo@brick03 f5cehbi]$ queue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 11774 fast RegisterPETwithMRImatch.XNAT5_E00704 xnat R 1:19 1 brick04 11775 fast RegisterPETwithMRImatch.XNAT5_E00712 xnat R 1:19 1 brick04 11776 fast RegisterPETwithMRImatch.XNAT5_E00718 xnat R 1:19 1 brick04 11777 fast RegisterPETwithMRImatch.XNAT5_E00708 xnat R 1:19 1 brick04 11778 fast RegisterPETwithMRImatch.XNAT5_E00719 xnat R 1:19 1 brick04 11779 fast RegisterPETwithMRImatch.XNAT5_E00705 xnat R 1:19 1 brick04 11780 fast RegisterPETwithMRImatch.XNAT5_E00709 xnat R 1:16 1 brick04 11781 fast RegisterPETwithMRImatch.XNAT5_E00707 xnat R 1:16 1 brick04 11782 fast RegisterPETwithMRImatch.XNAT5_E00715 xnat R 1:16 1 brick04 11783 fast RegisterPETwithMRImatch.XNAT5_E00716 xnat R 1:16 1 brick04 11784 fast RegisterPETwithMRImatch.XNAT5_E00711 xnat R 1:16 1 brick04 11785 fast RegisterPETwithMRImatch.XNAT5_E00714 xnat R 1:16 1 brick04 11786 fast RegisterPETwithMRImatch.XNAT5_E00713 xnat R 1:16 1 brick01 11787 fast RegisterPETwithMRImatch.XNAT5_E00717 xnat R 1:16 1 brick01 11788 fast RegisterPETwithMRImatch.XNAT5_E00706 xnat R 1:16 1 brick01
Nota: Aqui el proceso RegisterPETwithMRImatch.XNAT5_E00718 deberia fallar ya que el PET en este caso esta etiquetado distinto.
Asi que en rigor, Nota 2: Nodeberia tener que usar root para esto
[root@brick03 ~]# scancel 11776
y
[osotolongo@brick03 f5cehbi]$ xnatapic run_pipeline --project_id f5cehbi --pipeline RegisterPETwithMRImatch --experiment_id XNAT5_E00718 --dcmFBBtag 'FACEHBI_Florbetaben_20min'
y al terminar deberian estar los resultados,
[osotolongo@brick03 f5cehbi]$ xnatapic get_registration_report --project_id f5cehbi > centiloid_results.csv
Pendiente: ¿Como manejar el QA?
failsafe del registro PET-MRI
El proceso automatizado de conversion, registro, etc, puede fallar,
Cuando falla la conversion, o el etiquetado de los PET, deben subirse el nifti y el json correspondientes a la imagen que debemos procesar. En lugar de lanzar el pipeline RegisterPETwithMRImatch ejecutamos el pipeline RegisterPETwithMRI pero suministrando previamente el nifti correcto.
Primero hemos de identificar los sujetos erroneos. Saco la lista completa de sujetos,
[osotolongo@brick03 xnat_tmp]$ xnatapic list_subjects --project_id facehbi --label > xnat_subjects.list
y ahora filtro por el subject_id de los sujetos erroneos,
[osotolongo@brick03 xnat_tmp]$ grep XNAT4_S00341 xnat_subjects.list XNAT4_S00341,F191
O buscamos manualmente el subject_id en la interfaz web. Los nifti existentes han de ser eliminados manualmente,
y ahora copiamos el nifti a su sitio,
[osotolongo@brick03 xnat_tmp]$ mkdir F215 [osotolongo@brick03 xnat_tmp]$ cp /nas/clinic/nii/v0/F215/MSA002s004a2001.nii F215/PET.nii [osotolongo@brick03 xnat_tmp]$ cp PET.json F215/ [osotolongo@brick03 xnat_tmp]$ xnatapic upload_nifti --project_id facehbi --subject_id F215 --experiment_id F215B --scan_id 4 F215/PET.nii F215/PET.json [osotolongo@brick03 xnat_tmp]$ xnatapic run_pipeline --project_id facehbi --pipeline RegisterPETwithMRI --experiment_id F215B
:TODO:
[osotolongo@brick03 f2cehbi]$ xnatapic upload_nifti --project_id f2cehbi --subject_id F043 --experiment_id F043F --scan_id 5 /nas/clinic/nii/v2/F043/PET.nii PET.json
El archivo nifti debe ser el correspondiente al total de tiempo integrado,
[osotolongo@brick03 f2cehbi]$ fslinfo /nas/clinic/nii/v2/F043/PET.nii data_type FLOAT32 dim1 400 dim2 400 dim3 109 dim4 1 datatype 16 pixdim1 1.018210 pixdim2 1.018210 pixdim3 2.027008 pixdim4 0.000000 cal_max 0.0000 cal_min 0.0000 file_type NIFTI-1+
El archivo json debe contener la info minima para identificar el protocolo correcto,
[osotolongo@brick03 f2cehbi]$ cat PET.json { "SeriesDescription": "FACEHBI_Florbetaben_20min", "ProtocolName": "FACEHBI_Florbetaben_20min" }
ambos archivos deben tener el mismo nombre.
Tras esto ya es posible lanzar el pipeline RegisterPETwithMRI,
[osotolongo@brick03 f2cehbi]$ xnatapic run_pipeline --project_id f2cehbi --pipeline RegisterPETwithMRI --experiment_id F043F