User Tools

Site Tools


neuroimagen:xnat_regular_use

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,

 XNAT project details

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
neuroimagen/xnat_regular_use.txt · Last modified: 2021/01/11 13:53 by osotolongo