Table of Contents
fmriprep
Alternativa: CPAC.
El objetivo final sera utilizar algoritmos de analisis simples para extraer la conectividad en diferentes redes de las imagenes fMRI. Ahora bien, para ello debemos tener las imagenes preprocesadas, con todas las correcciones standard. Lo mas sencillo es usar un soft que hayan echo otros. Voy a intentarlo con fmriprep.
Con Singularity
En esta pagina recomiendan usar la versión empaquetada en docker pero he tenido varios problemas (el HPC no va bien) y no me termina de funcionar. Afortunadamente puede convertirse la imagen a un container de Singularity. Asi que he convertido el container y he logrado que funcione de alguna manera.
Construyendo el container, (No hacer esto en detritus, que no hay espacio)
[root@brick01 singularity]# export SINGULARITY_CACHEDIR=/nas/cache [root@brick01 singularity]# singularity build /nas/usr/local/opt/bin/fmriprep-latest.simg docker://poldracklab/fmriprep:1.5.9 Building into existing container: /nas/usr/local/opt/bin/fmriprep-latest.simg Docker image path: index.docker.io/poldracklab/fmriprep:1.5.9 Cache folder set to /home/cache/docker Importing: base Singularity environment Exploding layer: sha256:c832082614738021cf51d68e84457a45a3f85dbe0ddbb93000c5dc5aae77fe93.tar.gz Exploding layer: sha256:6e1a85c1d66a18674bdb5cee0a7d6b294aa4f1921d3a13074004d00485868051.tar.gz Exploding layer: sha256:f1320ef45e201689247f36b8e037ed8de21532f952be224586cb96b43a495f36.tar.gz Exploding layer: sha256:5a6ab6e6fbf62623bce0db5c75f3775f287c7b86cd0152b01ab09275f1d9f540.tar.gz Exploding layer: sha256:6fd240c277673683f0b16a0d7903c036c307954976e19e2f82a6873327d1d69b.tar.gz Exploding layer: sha256:4910036a866945ed7db59ab8db389a7e785a0815c9afe59a1b5626172c0b86be.tar.gz Exploding layer: sha256:552902834964a2b08552128518d10859785fee27b3f8c0e26b53ee856385d096.tar.gz Exploding layer: sha256:571048daac396c1f5f3b2b9a12089dedea0d7ec9553c67bf3a6e5a1b19c6888c.tar.gz Exploding layer: sha256:1756b6b7c22209f53ff961e0e2696491042f5f36193f6a349c6abc154da72049.tar.gz Exploding layer: sha256:65aa5a2ca8f5712cfe1f4df1f8f2da8f97b12f7c33068bb8eb015f13ade5c522.tar.gz Exploding layer: sha256:143350156437caa631672b3524e7dd4964470cb737f350cf3efe8692fc5989ad.tar.gz Exploding layer: sha256:02a71d7211a274b3a7165d910334bfdce42f85e5a5fb1df1152d32a3cbbc3a50.tar.gz Exploding layer: sha256:cc948187fffce024a2df30038319901da4e6e9956ae618030f7901218f4c19a4.tar.gz Exploding layer: sha256:307e84f37ee94c46357c458c09d6df57df5fff4aaf1be74fbcb601b4a450a5f8.tar.gz Exploding layer: sha256:7f2993d16ccc01a5551dcf3932a89157c1c8d9d0647a1d59fb7706668ff8cec5.tar.gz Exploding layer: sha256:56ed4f8babc15c9779457865603ea70fc3e5f109f17de42625ada1c1fb67630d.tar.gz Exploding layer: sha256:2af115090e565ca47aaa9fbca37d8a442ad41ba0effc8ec1e20bb442d01667ca.tar.gz Exploding layer: sha256:104185b69d0203aa1751588349db7b79a7f14bd5e67ccee8502f5a05fdf0f991.tar.gz Exploding layer: sha256:37434e18a86a3e265f5ce7152ac1da0ddaeb5ec8ad96daaac39b61220357e9a5.tar.gz Exploding layer: sha256:49b8c1f8e6403aa68daf6d580a5f73a6f3e182f3ee774480c456ecaf0152d1da.tar.gz Exploding layer: sha256:0c8d27c764ae53a6c2a1990c6d79981716b841f8ddd4979a6ea024c983f1ae03.tar.gz Exploding layer: sha256:d7e8af36992ff0a13fd804760b414c6fc1ee1fa9bc7a9fefb3380a0dca84114c.tar.gz Exploding layer: sha256:8f2beb8a17f1a38d2ecf836857a18e07cc6f8da373632cd599c96986d0083859.tar.gz Exploding layer: sha256:f7e7732dbf02ecd8abd1a31ba8739cc477b418baf65f43066409408d8f82ed82.tar.gz Exploding layer: sha256:e317a86a0fd4e465a91100b548c2616b50903ace77eac30f692f406e7a64ca40.tar.gz Exploding layer: sha256:5e088dc61c8ef5e49411fb25f519679c8707753af576e5cdf7236bb09338130f.tar.gz Exploding layer: sha256:bf93bcca5bc9ea661b8929ba47d6c615e0c63dd69459c498fee7aad33f086420.tar.gz Exploding layer: sha256:b47efeea289424acbae0b32f2950b8616f268546e943cc2f40b5861b320a3fc9.tar.gz Exploding layer: sha256:10960f811026f82718ac9905a442d3ec1b06c3591bc661ba9adab336cf4d2a02.tar.gz Building Singularity image... Singularity container built: /nas/usr/local/opt/bin/fmriprep-latest.simg Cleaning up... [root@brick01 singularity]# ls -lh /nas/usr/local/opt/bin/fmriprep-latest.simg -rwxr-xr-x 1 root root 4.5G Feb 26 10:17 /nas/usr/local/opt/bin/fmriprep-latest.simg
El primer paso es convertir las imagenes a formato BIDS. Luego ha de procesarse cada sujeto por separado asi,
[osotolongo@brick02 ~]$ singularity run --cleanenv -B /nas:/nas /nas/software/fmriprep-latest.simg /nas/data/mopead/bids /nas/data/mopead/fmriprep participant --participant-label "sub-0001" --ignore slicetiming --skip_bids_validation --fs-license-file /nas/usr/local/opt/freesurfer/.license
Nota: Esto es eterno, asi que debe enviarse en background cuando este OK. De momento estoy probando un caso, despues sera necesario integrarlo al cluster de alguna manera pero con cuidado porque consume muchisimo.
top - 11:35:25 up 209 days, 23:39, 2 users, load average: 5.48, 5.77, 4.43 Tasks: 663 total, 3 running, 660 sleeping, 0 stopped, 0 zombie %Cpu(s): 9.0 us, 0.0 sy, 0.0 ni, 91.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 26372729+total, 6548484 free, 9591132 used, 24758768+buff/cache KiB Swap: 0 total, 0 free, 0 used. 25275507+avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 126411 osotolo+ 20 0 2396520 1.698g 19412 R 571.9 0.7 86:27.98 antsRegistratio 88479 osotolo+ 20 0 938292 199044 33236 S 6.3 0.1 1:12.70 fmriprep ...... ......
Usando SLURM
El proceso pareceiniciarsin problemas pero deora bastantte, asi que voy a intentar lanzarlos con el schedule manager. El primer paso en instalar Singularity en todos los nodos. Luego voy a hacer un script de prueba,
[osotolongo@detritus mopead]$ cat test.sh #!/bin/bash #SBATCH -J fmri_prep #SBATCH --time=72:0:0 #SBATCH -o /nas/data/mopead/slurm/test_fmriprep-%j #SBATCH -c 8 #SBATCH --mail-user=osotolongo srun singularity run --cleanenv -B /nas:/nas /nas/software/fmriprep-latest.simg /nas/data/mopead/bids /nas/data/mopead/fmriprep participant --participant-label "sub-0001" --ignore slicetiming --skip_bids_validation --fs-license-file /nas/usr/local/opt/freesurfer/.license
y lo lanzo normalmente
[osotolongo@detritus mopead]$ sbatch test.sh [osotolongo@detritus mopead]$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) ...... 16610 devel fmri_pre osotolon R 8:02 1 brick01
Ademas, se puede ir controlando el avance en el archivo de output y recibire los emails en caso de fallo o finalizacion.
Nota: fmriprep es bastante iinestable, a veces falla, las tareas se completan en tiempos disimiles, puede no devolver correctamente la salida. De cualquier manera tenemos una herramienta que puede usarse en el cluster con un poco de tunning.
Ya sabemos suficiente para hacer un wrapper
Esto basta para ejecutar las imagenes de singularity en el cluster pero hay un inconveniente, fmriprep es muy inestable falla continuamente y con errores tontos. Para correr varias veces el programa se han de limpiar (o mover) todos los archivos que crea puede dar erroresporque no encuentra los archivos. He añadido 20 segundos entre cada launch para intentar evitar algun solapamiento almontar la particion de trabajo. Esto hace algo mas lenta la ejecucion, pero no demasiado.
[osotolongo@detritus mopead]$ cfmriprep.pl mopead Submitted batch job 16875 Submitted batch job 16876 Submitted batch job 16877 Submitted batch job 16878 Submitted batch job 16879 Submitted batch job 16880 Submitted batch job 16881 Submitted batch job 16882 Submitted batch job 16883 Submitted batch job 16884 Submitted batch job 16885 Submitted batch job 16886 Submitted batch job 16887 Submitted batch job 16888 Submitted batch job 16889 Submitted batch job 16890 Submitted batch job 16891 Submitted batch job 16892 Submitted batch job 16893 Submitted batch job 16894 Submitted batch job 16895 Submitted batch job 16896 Submitted batch job 16897 Submitted batch job 16898 [osotolongo@detritus mopead]$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 16883 fast fmriprep osotolon PD 0:00 1 (Resources) 16884 fast fmriprep osotolon PD 0:00 1 (Priority) 16885 fast fmriprep osotolon PD 0:00 1 (Priority) 16886 fast fmriprep osotolon PD 0:00 1 (Priority) 16887 fast fmriprep osotolon PD 0:00 1 (Priority) 16888 fast fmriprep osotolon PD 0:00 1 (Priority) 16889 fast fmriprep osotolon PD 0:00 1 (Priority) 16890 fast fmriprep osotolon PD 0:00 1 (Priority) 16891 fast fmriprep osotolon PD 0:00 1 (Priority) 16892 fast fmriprep osotolon PD 0:00 1 (Priority) 16893 fast fmriprep osotolon PD 0:00 1 (Priority) 16894 fast fmriprep osotolon PD 0:00 1 (Priority) 16895 fast fmriprep osotolon PD 0:00 1 (Priority) 16896 fast fmriprep osotolon PD 0:00 1 (Priority) 16897 fast fmriprep osotolon PD 0:00 1 (Priority) 16898 fast fmriprep osotolon PD 0:00 1 (Dependency) 16875 fast fmriprep osotolon R 9:29 1 brick03 16876 fast fmriprep osotolon R 9:09 1 brick03 16877 fast fmriprep osotolon R 8:49 1 brick01 16878 fast fmriprep osotolon R 8:29 1 brick01 16879 fast fmriprep osotolon R 8:09 1 brick01 16880 fast fmriprep osotolon R 7:49 1 brick02 16881 fast fmriprep osotolon R 7:29 1 brick02 16882 fast fmriprep osotolon R 7:09 1 brick02
Resultados
De 23 sujetos procesados han terminado con exito 10.
[osotolongo@detritus mopead]$ find fmriprep_out/fmriprep/ -name "*preproc_bold.nii.gz" fmriprep_out/fmriprep/sub-0002/func/sub-0002_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz fmriprep_out/fmriprep/sub-0003/func/sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz fmriprep_out/fmriprep/sub-0007/func/sub-0007_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz fmriprep_out/fmriprep/sub-0008/func/sub-0008_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz fmriprep_out/fmriprep/sub-0009/func/sub-0009_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz fmriprep_out/fmriprep/sub-0012/func/sub-0012_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz fmriprep_out/fmriprep/sub-0014/func/sub-0014_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz fmriprep_out/fmriprep/sub-0018/func/sub-0018_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz fmriprep_out/fmriprep/sub-0020/func/sub-0020_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz fmriprep_out/fmriprep/sub-0023/func/sub-0023_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz
Podemos consultar los errores en los archivos de output guardados en el directorio slurm.
Algunos sujetos no tienen imagenes BOLD,
Exception: No BOLD images found for participant 0016 and task <all>. All workflows require BOLD images. srun: error: brick01: task 0: Exited with exit code 1
Hay errores de procesamiento de freesurfer pero lo raro es que estos archivos ha sido procesados con freesurfer satisfactoriamente en nuestra pipeline.
[osotolongo@detritus mopead]$ grep -i error slurm/fmriprep-16875 [Node] Error on "_autorecon30" (/nas/data/mopead/work/fmriprep_wf/single_subject_0001_wf/anat_preproc_wf/surface_recon_wf/autorecon_resume_wf/autorecon3/mapflow/_autorecon30) 190515-12:17:20,62 nipype.workflow ERROR: 190515-12:17:20,250 nipype.workflow ERROR: RuntimeError: Command: recon-all -s sub-0001 exited with ERRORS at Wed May 15 12:17:19 UTC 2019 Standard error: Preprocessing did not finish successfully. Errors occurred while processing data from participants: 0001 (1). Check the HTML reports for details. raise RuntimeError("".join(result['traceback'])) RuntimeError: Traceback (most recent call last): RuntimeError: Command: recon-all -s sub-0001 exited with ERRORS at Wed May 15 12:17:19 UTC 2019 Standard error: /usr/local/miniconda/lib/python3.7/site-packages/scipy/fftpack/basic.py:160: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result. srun: error: brick03: task 0: Exited with exit code 1
La conclusion, de momento, es que este software es demasiado inestable tal y como esta empaquetado para usarse satisfactoriamente
Con Docker
Tras dar muchas vueltas he conseguido echar a andar docker en las maquinas de la particion fast. Esto deberia bastar para procesar todo si tengo cuidado con lo que hago. Basicamente tod es muy parecido asi que me basare en el trabajo hecho anteriormente.
Voy asuponer que tengo todo en BIDS. La orden para procesar un solo sujeto es,
fmriprep-docker /nas/data/mopead/bids/ /nas/data/mopead/fmriprep --participant-label "sub-0003" --ignore slicetiming --skip_bids_validation --fs-license-file /nas/usr/local/opt/freesurfer/.license
Nota: Esto lo he hecho en brick03 pues no puedo hacerlo en detritus.
El resultado,
[osotolongo@brick03 mopead]$ ls fmriprep/fmriprep/sub-0003/func/ sub-0003_task-rest_run-1_desc-confounds_regressors.json sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-aseg_dseg.nii.gz sub-0003_task-rest_run-1_desc-confounds_regressors.tsv sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-brain_mask.json sub-0003_task-rest_run-1_space-fsaverage5_hemi-L.func.gii sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz sub-0003_task-rest_run-1_space-fsaverage5_hemi-R.func.gii sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.json sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_boldref.nii.gz sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-aparcaseg_dseg.nii.gz [osotolongo@brick03 mopead]$ ls fmriprep/fmriprep/sub-0003/anat/ sub-0003_desc-aparcaseg_dseg.nii.gz sub-0003_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5 sub-0003_label-GM_probseg.nii.gz sub-0003_desc-aseg_dseg.nii.gz sub-0003_hemi-L_inflated.surf.gii sub-0003_label-WM_probseg.nii.gz sub-0003_desc-brain_mask.json sub-0003_hemi-L_midthickness.surf.gii sub-0003_space-MNI152NLin2009cAsym_desc-brain_mask.json sub-0003_desc-brain_mask.nii.gz sub-0003_hemi-L_pial.surf.gii sub-0003_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz sub-0003_desc-preproc_T1w.json sub-0003_hemi-L_smoothwm.surf.gii sub-0003_space-MNI152NLin2009cAsym_desc-preproc_T1w.json sub-0003_desc-preproc_T1w.nii.gz sub-0003_hemi-R_inflated.surf.gii sub-0003_space-MNI152NLin2009cAsym_desc-preproc_T1w.nii.gz sub-0003_dseg.nii.gz sub-0003_hemi-R_midthickness.surf.gii sub-0003_space-MNI152NLin2009cAsym_dseg.nii.gz sub-0003_from-MNI152NLin2009cAsym_to-T1w_mode-image_xfm.h5 sub-0003_hemi-R_pial.surf.gii sub-0003_space-MNI152NLin2009cAsym_label-CSF_probseg.nii.gz sub-0003_from-orig_to-T1w_mode-image_xfm.txt sub-0003_hemi-R_smoothwm.surf.gii sub-0003_space-MNI152NLin2009cAsym_label-GM_probseg.nii.gz sub-0003_from-T1w_to-fsnative_mode-image_xfm.txt sub-0003_label-CSF_probseg.nii.gz
He de intentar ahora organizarlo en el cluster
Usando SLURM
Esto es tan parecido que hay que hacer cambios minimos,
Nota: La llamada por defecto de fmriprep-docker lanza docker en un TTY. Es necesario tomar la orden y eliminar -ti para poder ejecutar la tarea desatendida. de otr manera no es posible.
[osotolongo@detritus mopead]$ cat slurm/fmriprep-113968 the input device is not a TTY srun: error: brick02: task 0: Exited with exit code 1 RUNNING: docker run --rm -it -e DOCKER_VERSION_8395080871=19.03.5 -v /nas/usr/local/opt/freesurfer/.license:/opt/freesurfer/license.txt:ro -v /nas/data/mopead/bids:/data:ro -v /nas/data/mopead/fmriprep_out:/out poldracklab/fmriprep:1.5.0 /data /out participant --participant-label sub-0001 --ignore slicetiming --skip_bids_validation fMRIPrep: Please report errors to https://github.com/poldracklab/fmriprep/issues
Let's see what happens,
[osotolongo@detritus mopead]$ dfmriprep.pl mopead Submitted batch job 114000 Submitted batch job 114001 Submitted batch job 114002 Submitted batch job 114003 Submitted batch job 114004 Submitted batch job 114005 Submitted batch job 114006 Submitted batch job 114007 Submitted batch job 114008 Submitted batch job 114009 Submitted batch job 114010 Submitted batch job 114011 Submitted batch job 114012 Submitted batch job 114013 Submitted batch job 114014 Submitted batch job 114015 Submitted batch job 114016 Submitted batch job 114017 Submitted batch job 114018 Submitted batch job 114019 Submitted batch job 114020 Submitted batch job 114021 Submitted batch job 114022 Submitted batch job 114023
[osotolongo@detritus mopead]$ squeue | grep fmri 114004 fast fmriprep osotolon PD 0:00 1 (Resources) 114005 fast fmriprep osotolon PD 0:00 1 (Priority) 114006 fast fmriprep osotolon PD 0:00 1 (Priority) 114007 fast fmriprep osotolon PD 0:00 1 (Priority) 114008 fast fmriprep osotolon PD 0:00 1 (Priority) 114009 fast fmriprep osotolon PD 0:00 1 (Priority) 114010 fast fmriprep osotolon PD 0:00 1 (Priority) 114011 fast fmriprep osotolon PD 0:00 1 (Priority) 114012 fast fmriprep osotolon PD 0:00 1 (Priority) 114013 fast fmriprep osotolon PD 0:00 1 (Priority) 114014 fast fmriprep osotolon PD 0:00 1 (Priority) 114015 fast fmriprep osotolon PD 0:00 1 (Priority) 114016 fast fmriprep osotolon PD 0:00 1 (Priority) 114017 fast fmriprep osotolon PD 0:00 1 (Priority) 114018 fast fmriprep osotolon PD 0:00 1 (Priority) 114019 fast fmriprep osotolon PD 0:00 1 (Priority) 114020 fast fmriprep osotolon PD 0:00 1 (Priority) 114021 fast fmriprep osotolon PD 0:00 1 (Priority) 114022 fast fmriprep osotolon PD 0:00 1 (Priority) 114023 fast fmriprep osotolon PD 0:00 1 (Dependency) 114000 fast fmriprep osotolon R 7:36 1 brick02 114001 fast fmriprep osotolon R 7:33 1 brick02 114002 fast fmriprep osotolon R 7:30 1 brick02 114003 fast fmriprep osotolon R 7:27 1 brick03
Errores y resultados
Hay errores en el procesamiento que empiezan a llegar antes que termine la cola de SLURM.
sub-0012 (igual que sub-0005?)
Nota: Revisando los logs veo que Freesurfer falla por problemas de memoria, (Cannot allocate memory). Han de revisarse las opciones de fmriprep.
Existe la opcion –fs-no-reconall que se salta el procesamiento de Freesurfer. Habria que probar los resultados y comparar.
Probando sin Freesurfer
Voy a tomar sub-0005 e intentar correr el pipeline sin Freesurfer. Esta puede ser una alternativa al procesamiento de los sujetos que fallen. (incluirla en el wrapper)
[osotolongo@brick01 mopead]$ docker run --rm -v /nas/usr/local/opt/freesurfer/.license:/opt/freesurfer/license.txt:ro -v /nas/data/mopead/bids:/data:ro -v /nas/data/mopead/fmriprep_out:/out poldracklab/fmriprep:1.5.0 /data /out participant --participant-label sub-0005 --ignore slicetiming --skip_bids_validation --fs-no-reconall 191124-11:13:51,496 nipype.workflow IMPORTANT: Running fMRIPREP version 1.5.0: * BIDS dataset path: /data. * Participant list: ['0005']. * Run identifier: 20191124-111340_2f180886-582f-4eef-ac91-030ef42c3e7b. 191124-11:13:53,371 nipype.workflow IMPORTANT: Creating bold processing workflow for "/data/sub-0005/func/sub-0005_task-rest_run-1_bold.nii.gz" (0.03 GB / 200 TRs). Memory resampled/largemem=0.12/0.19 GB. 191124-11:13:53,404 nipype.workflow IMPORTANT: No single-band-reference found for sub-0005_task-rest_run-1_bold.nii.gz 191124-11:13:53,844 nipype.workflow WARNING: SDC: no fieldmaps found or they were ignored (/data/sub-0005/func/sub-0005_task-rest_run-1_bold.nii.gz). 191124-11:13:59,954 nipype.workflow IMPORTANT: Works derived from this fMRIPrep execution should include the following boilerplate: ........
Esto funciona. Ha de modificarse el wrapper para añadir la opción (-nofs) y que se interprete como lanzar fmriprep con –fs-no-reconall. Asi que hay que lanzar el wrapper, anotar los errores y usar las opciones -cut y -nofs para relanzarel proceso solo sobre los que hayan salido mal.
Y ya que estamos. Si no existe el archivo fMRI se podria evitar lanzar el proceso.
Asi se evitan los errores de no existencia del archivo fMRI y se pueden relanzar todos los procesos erroneos, esperando que los problemas hayan sido solo con Freesurfer. Para esto basta añadir,
&& (-e "$bids_dir/$thing/func" && -d "$bids_dir/$thing/func")
cuando se chequea que exista el BIDS. Se ve que elimina los conflictivos (sub-0011, sub-0013, etc).
( "sub-0001", "sub-0002", "sub-0003", "sub-0004", "sub-0005", "sub-0006", "sub-0007", "sub-0008", "sub-0009", "sub-0010", "sub-0012", "sub-0014", "sub-0015", "sub-0017", "sub-0018", "sub-0019", "sub-0020", "sub-0021", "sub-0022", "sub-0023", )
Ahora, en aras de que todas las imagenes tengan el mismo analisis, se podria lanzar el analisis sin Freesurfer para todas. He separado los analisis en directorios distintos previendo esta eventualidad.
[osotolongo@detritus mopead]$ dfmriprep.pl -nofs mopead Submitted batch job 114025 Submitted batch job 114026 Submitted batch job 114027 Submitted batch job 114028 Submitted batch job 114029 Submitted batch job 114030 Submitted batch job 114031 Submitted batch job 114032 Submitted batch job 114033 Submitted batch job 114034 Submitted batch job 114035 Submitted batch job 114036 Submitted batch job 114037 Submitted batch job 114038 Submitted batch job 114039 Submitted batch job 114040 Submitted batch job 114041 Submitted batch job 114042 Submitted batch job 114043 Submitted batch job 114044 Submitted batch job 114045 [osotolongo@detritus mopead]$ squeue | grep fmri 114029 fast fmriprep osotolon PD 0:00 1 (Resources) 114030 fast fmriprep osotolon PD 0:00 1 (Priority) 114031 fast fmriprep osotolon PD 0:00 1 (Priority) 114032 fast fmriprep osotolon PD 0:00 1 (Priority) 114033 fast fmriprep osotolon PD 0:00 1 (Priority) 114034 fast fmriprep osotolon PD 0:00 1 (Priority) 114035 fast fmriprep osotolon PD 0:00 1 (Priority) 114036 fast fmriprep osotolon PD 0:00 1 (Priority) 114037 fast fmriprep osotolon PD 0:00 1 (Priority) 114038 fast fmriprep osotolon PD 0:00 1 (Priority) 114039 fast fmriprep osotolon PD 0:00 1 (Priority) 114040 fast fmriprep osotolon PD 0:00 1 (Priority) 114041 fast fmriprep osotolon PD 0:00 1 (Priority) 114042 fast fmriprep osotolon PD 0:00 1 (Priority) 114043 fast fmriprep osotolon PD 0:00 1 (Priority) 114044 fast fmriprep osotolon PD 0:00 1 (Priority) 114045 fast fmriprep osotolon PD 0:00 1 (Dependency) 114025 fast fmriprep osotolon R 1:05 1 brick02 114026 fast fmriprep osotolon R 1:02 1 brick02 114027 fast fmriprep osotolon R 0:59 1 brick02 114028 fast fmriprep osotolon R 0:59 1 brick03
Y ahi tenemos el inicio de la estructura,
[osotolongo@detritus mopead]$ ls fmriprep_nofs_out/fmriprep/ logs sub-0001 sub-0002 sub-0003 sub-0004
Con slice timing
Si el archivo BIDS se obtiene directamente del DICOM (Convertir DICOMs a BIDS) resulta que la informacion de SliceTiming si que queda registrada en el archivo .json. Asi que voy aintentar que se haga la slicetiming correction. Despues tocara probar tambien con freesurfer.
Veamos el comando,
[osotolongo@brick01 ~]$ fmriprep-docker /nas/data/mopead/bids/ /nas/data/mopead/fmriprep --participant-label "sub-0003" --skip_bids_validation --fs-license-file /nas/usr/local/opt/freesurfer/.license --fs-no-reconall
El resultado,
[osotolongo@detritus mopead]$ tree fmriprep/fmriprep/sub-0003/ fmriprep/fmriprep/sub-0003/ ├── anat │ ├── sub-0003_desc-aparcaseg_dseg.nii.gz │ ├── sub-0003_desc-aseg_dseg.nii.gz │ ├── sub-0003_desc-brain_mask.json │ ├── sub-0003_desc-brain_mask.nii.gz │ ├── sub-0003_desc-preproc_T1w.json │ ├── sub-0003_desc-preproc_T1w.nii.gz │ ├── sub-0003_dseg.nii.gz │ ├── sub-0003_from-MNI152NLin2009cAsym_to-T1w_mode-image_xfm.h5 │ ├── sub-0003_from-orig_to-T1w_mode-image_xfm.txt │ ├── sub-0003_from-T1w_to-fsnative_mode-image_xfm.txt │ ├── sub-0003_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5 │ ├── sub-0003_hemi-L_inflated.surf.gii │ ├── sub-0003_hemi-L_midthickness.surf.gii │ ├── sub-0003_hemi-L_pial.surf.gii │ ├── sub-0003_hemi-L_smoothwm.surf.gii │ ├── sub-0003_hemi-R_inflated.surf.gii │ ├── sub-0003_hemi-R_midthickness.surf.gii │ ├── sub-0003_hemi-R_pial.surf.gii │ ├── sub-0003_hemi-R_smoothwm.surf.gii │ ├── sub-0003_label-CSF_probseg.nii.gz │ ├── sub-0003_label-GM_probseg.nii.gz │ ├── sub-0003_label-WM_probseg.nii.gz │ ├── sub-0003_space-MNI152NLin2009cAsym_desc-brain_mask.json │ ├── sub-0003_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz │ ├── sub-0003_space-MNI152NLin2009cAsym_desc-preproc_T1w.json │ ├── sub-0003_space-MNI152NLin2009cAsym_desc-preproc_T1w.nii.gz │ ├── sub-0003_space-MNI152NLin2009cAsym_dseg.nii.gz │ ├── sub-0003_space-MNI152NLin2009cAsym_label-CSF_probseg.nii.gz │ ├── sub-0003_space-MNI152NLin2009cAsym_label-GM_probseg.nii.gz │ └── sub-0003_space-MNI152NLin2009cAsym_label-WM_probseg.nii.gz ├── figures │ ├── sub-0003_desc-reconall_T1w.svg │ ├── sub-0003_dseg.svg │ ├── sub-0003_space-MNI152NLin2009cAsym_T1w.svg │ ├── sub-0003_task-rest_run-1_desc-bbregister_bold.svg │ ├── sub-0003_task-rest_run-1_desc-carpetplot_bold.svg │ ├── sub-0003_task-rest_run-1_desc-compcorvar_bold.svg │ ├── sub-0003_task-rest_run-1_desc-confoundcorr_bold.svg │ ├── sub-0003_task-rest_run-1_desc-flirtbbr_bold.svg │ └── sub-0003_task-rest_run-1_desc-rois_bold.svg └── func ├── sub-0003_task-rest_run-1_desc-confounds_regressors.json ├── sub-0003_task-rest_run-1_desc-confounds_regressors.tsv ├── sub-0003_task-rest_run-1_space-fsaverage5_hemi-L.func.gii ├── sub-0003_task-rest_run-1_space-fsaverage5_hemi-R.func.gii ├── sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_boldref.nii.gz ├── sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-aparcaseg_dseg.nii.gz ├── sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-aseg_dseg.nii.gz ├── sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-brain_mask.json ├── sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz ├── sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.json └── sub-0003_task-rest_run-1_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz 3 directories, 50 files
Vamos a probar con FS,
[osotolongo@brick01 ~]$ fmriprep-docker /nas/data/mopead/bids/ /nas/data/mopead/fmriprep --participant-label "sub-0004" --skip_bids_validation --fs-license-file /nas/usr/local/opt/freesurfer/.license
Aprovechando la segmentación ya hecha
https://fmriprep.readthedocs.io/en/stable/workflows.html#surface-preprocessing
Surface processing will be skipped if the outputs already exist.
In order to bypass reconstruction in fMRIPrep, place existing reconstructed subjects in <output dir>/freesurfer prior to the run, or specify an external subjects directory with the –fs-subjects-dir flag. fMRIPrep will perform any missing recon-all steps, but will not perform any steps whose outputs already exist.
Basicamente cambiamos la orden de ejecucion,
'srun docker run --rm -v '.$fslic.':/opt/freesurfer/license.txt:ro -v '.$bids_dir.'/sub-'.$subject.':/data:ro -v '.$fmriout_dir.':/out poldracklab/fmriprep:'.$fmriprep_version.' /data /out participant --participant-label '.$subject.' '.$noslicetiming.' --skip_bids_validation --fs-subjects-dir '.$fssubsdir;
Claro que antes hay que copiar los archivos de FS a un nuevo sitio, etc
Nota: Ahora mismo hay algun problema de comunicación entre docker y slurm (mas probablemente de docker).scancel termina la tarea pero el container sigue procesando. He de probar si cuando termina naturalmente el container cae. Esto quiere decir que aunque el proceso de TIME_OUT puede haber terminado satisfactoriamente.Se ha de comprobar los archivos de output.
Upgrade fmriprep
Como root en cada nodo,
$ docker pull poldracklab/fmriprep:1.5.6
En este caso 1.5.6 es la ultima version. Despues editar /nas/fotware/neuro.dev/bin/dfmriprep.pl . Buscar la linea,
my $fmriprep_version = '1.5.3';
y cambiar a la ultima versión,
my $fmriprep_version = '1.5.6';