User Tools

Site Tools


neuroimagen:altcorrdti

Nueva version de procesamiento de DTI (FACEHBI)

Nota: Evaluar la posibilidad de utilizar epi_reg para el paso de T1 a B0. No es probable que funcione bien dado el corte de los DTI pero habria que intentarlo.

Ver Notas sobre corregistro de DTI

Corregistro

El corregistro de imagenes DTI usando ANTs en el proyecto MOPEAD funciona correctamente.

No obstante en FACEHBI las imagenes DTI estan cortadas por el frontal y por el cerebelo. El soft de corregistro es muchas cosas pero definitivamente no es magico.

Lo que voy a intentar es combinar los dos metodos utilizados hasta ahora, el de la vesion 0.2 del pipeline (viejo) y el de la version 0.3 del pipeline (nuevo). El primero usa flirt y fnirt y hace su trabajo pero no con demasiado lustro, el segundo usa ANTs y es espectacular poniendo la nariz en el cuello.

El primer metodo consiste en registrar la FA a la plantilla de FA de FSL. Esto funciona mas o menos bien y nos da una base para mover el B0 al espacio MNI y de ahi al espacio T1. Lo que voy a hacer es utilizar este B0 trasladado al espacio T1 para hacer una mascara. Aplico esta mascara al T1 y con este T1 chopeado :-D puedo utilizar ANTs. O sea, registro el B0 al T1 cortado.

Despues de muchas vueltas esta es la mejor aproximacion que he logrado.

Para meter esto en el dti_reg tengo que definir un modo nuevo,

    if (/^-chop/) {$old=1; $chop=1;}

y añadir el procedimiento,

if($chop){
    $order = $pipe_dir."/bin/dti_proc_x.sh ".$names[0]." ".$t1_names[0]." ".$dtis{$subject}.$subject." ".$w_dir;
}else{

Esta cosa funciona mas o menos.

Ahora el report. Es muy complicado identificar un buen registro en el espacio nativo DTI dada la baja resolucion de las imagenes. Lo mejor es hacer la comprobacion en el espacio nativo T1, que es el mayor resolucion. He comprobado que la deformacion inversa funciona correctamente asi que si esta bien registrado en T1 debe quedar correcto en DTI.

Voy a hacer un report con los B0 trasladados a espacio de T1.

Ahora vamos a probarlo,

[osotolongo@detritus facehbi]$ dti_reg.pl -chop facehbi
...
[osotolongo@detritus facehbi]$ make_dti_report_x.pl facehbi

Tras esto toca hacer una revision visual de los regitros. Primero apunto los sujetos que he proceso, en el formato necesario para utilizar posteriormente este archivo,

[osotolongo@detritus facehbi]$ for x in working/dtis/*reoriented.png; do y=$(echo ${x} | awk -F"_" '{print $6}'); echo $y; done | sed 's/smc\(.*\)/\1;smc/' > dti_regs.csv

Ahora edito el archivo y BORRO los sujetos mal registrados. Los restante sujetos son lso suceptibles de ser tratados mediante tractografia.

De las 198 imagenes tengo 125 correctamente registradas. No es niguna maravilla pero dados los problemas en la adquisicion es casi magico.

Ejemplo de imagen bien registrada,

 dti reg OK

Ejemplo de imagen mal registrada,

 dti reg KO

Resumen: Debo hacer inspeccion visual del report y hacer un csv con los sujetos bien registrados. Para esto basta con hacer,

[osotolongo@detritus facehbi]$ ls working/dtis/*_reoriented.png | awk -F"smc" {'print $3'} | awk -F"_" {'print $1'} | sed 's/\(.*\)/\1;smc/' > dti_reg_review.csv

y despues editar el archivo dti_reg_review.csv para borrar los sujetos con registro erroneo.

De esta manera quedaria todo preparado para las metricas, bastaria superponer los archivos,

XXXX_dti_FA.nii.gz
XXXX_dti_MD.nii.gz
XXXX_JHU_labels.nii.gz
XXXX_JHU_tracts.nii.gz

Tractografia

Tanto bedpostx como probtrackx funcionan en espacio nativo DTI. Esto nosha obligado a mover todo al espacio DTI pero ya tenemos las matrices necesarias, provenientes del registro.

Hay dos tipos de tractoggrafia que deseamos hacer. Primero, suministrando las regiones, segun la segmentacion de Freesurfer, en el archivo dti_track.seed.

Aqui he escrito un nuevo procedimiento, cambiando el registro de aseg (mas bien aparc) para que use la matriz warp inversa de ANTs.

Suena raro pero en el codigo se entiende mejor

La segunda opcion es usar un atlas (por ahora el de la UofM),

No todas las ROI del atlas estan en el mismo formato. Hay que chequear cada ROI que se añada y en caso necesario registrarla usando 1mm o 2mm segun sea apropiado.

Algo asi,

                dim1=$(fslinfo ${x} | grep "^dim1" | awk {'print $2'});
                if [ ${dim1} = 91 ]; then
                        if [ ! -e ${td}/${pollo}_dti_mni_t121Warp.nii.gz ]; then
                                antsRegistrationSyNQuick.sh -d 3 -f ${w_dir}/${pollo}_t1_reoriented.nii.gz -m ${FSLDIR}/data/standard/MNI152_T1_2mm.nii.gz -o ${td}/${pollo}_dti_mni_t12 -t s;
                        fi;
                        antsApplyTransforms -d 3 -i ${x} -r ${w_dir}/${pollo}_t1_reoriented.nii.gz -t ${td}/${pollo}_dti_mni_t121Warp.nii.gz -t ${td}/${pollo}_dti_mni_t120GenericAffine.mat -o ${td}/${node}_warped.nii.gz;
                else
                        antsApplyTransforms -d 3 -i ${x} -r ${w_dir}/${pollo}_t1_reoriented.nii.gz -t ${td}/${pollo}_mni_t1_warp1Warp.nii.gz -t ${td}/${pollo}_mni_t1_warp0GenericAffine.mat -o ${td}/${node}_warped.nii.gz;
                fi;
                antsApplyTransforms -d 3 -i ${td}/${node}_warped.nii.gz -r ${td}/${pollo}_dti_b0.nii.gz -t [${w_dir}/${pollo}_t1_dti_warp0GenericAffine.mat, 1] -t ${w_dir}/${b_in}_t1_dti_warp1InverseWarp.nii.gz -n GenericLabel[Linear] -o ${td}/${pollo}_${node}.nii.gz

Esto tengo que añadirloal codigo nuevo pero ademas tengo que revisar el codigo anterior para asegurarme que se tiene en cuenta. 8-o (Probado con MOPEAD OK) ;-)

Aqui hay que hacer dos trasnformaciones

Probando la primera opcion, (FPCustom)

[osotolongo@detritus facehbi]$ cat dti_track.seed 
1003
1008
1015
1018
1020
1022
1024
1028
1029
1030
1031
2003
2008
2015
2018
2020
2022
2024
2028
2029
2030
2031
[osotolongo@detritus facehbi]$ dti_track.pl -cut test_t.csv -t1 facehbi
[osotolongo@detritus facehbi]$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
             26994      cuda dti_trac osotolon PD       0:00      1 (Resources)
             26995     devel dti_trac osotolon PD       0:00      1 (Dependency)
             26991      cuda dti_trac osotolon  R       0:02      1 brick01
             26992      cuda dti_trac osotolon  R       0:02      1 brick01
             26993      cuda dti_trac osotolon  R       0:02      1 detritus

Nota: Estas son las fibras que conectan las regiones especificadas en el archivo dti_track.seed. Para conocer el valor medio de FA o MD en estas fibras solo habria que hacer una mascara con ellas y aplicarla a la imagen correspondiente que ya tenemos despues del dti_fit.

Aqui probando la segunda opcion, (Atlas UofM)

[osotolongo@detritus facehbi]$ cat test_t.csv
0001;smc
0003;smc
0004;smc
0006;smc
[osotolongo@detritus facehbi]$ dti_track.pl -cut test_t.csv -t1 -uofm DMN facehbi
[osotolongo@detritus facehbi]$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
             25671     devel dti_trac osotolon PD       0:00      1 (Dependency)
             25668      cuda dti_trac osotolon  R       0:02      1 brick01
             25669      cuda dti_trac osotolon  R       0:02      1 brick01
             25670      cuda dti_trac osotolon  R       0:02      1 detritus

Procedimiento individual para FACEHBI

Corregistro

[osotolongo@detritus facehbi]$ dti_reg.pl -chop facehbi
[osotolongo@detritus facehbi]$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
             25410     devel dti_reg- osotolon PD       0:00      1 (Resources)
             25411     devel dti_reg- osotolon PD       0:00      1 (Priority)
             25412     devel dti_reg- osotolon PD       0:00      1 (Priority)
             25413     devel dti_reg- osotolon PD       0:00      1 (Priority)
             25414     devel dti_reg- osotolon PD       0:00      1 (Priority)
             25415     devel dti_reg- osotolon PD       0:00      1 (Priority)
             25416     devel dti_reg- osotolon PD       0:00      1 (Priority)
             25417     devel dti_reg- osotolon PD       0:00      1 (Priority)
             25418     devel dti_reg- osotolon PD       0:00      1 (Priority)
             25419     devel dti_reg- osotolon PD       0:00      1 (Priority)
 
[osotolongo@detritus facehbi]$ make_dti_report_x.pl facehbi

y revisar los corregistros visualmente.

Metricas

[osotolongo@detritus facehbi]$ dti_metrics.pl -cut dti_reg_review.csv -a1 facehbi

Nota: Conversion de formato de resultados (local)

$ scp -r -P 20022 detritus.fundacioace.com:/nas/data/facehbi/facehbi_dti_labels.csv facehbi_dti_labels_v0.csv
$ sed 's/0/F0/; s/Subject/FACEHBI/' facehbi_dti_labels_v0.csv > facehbi_dti_a1_v0.csv
$ join -t";" facehbi_mri_v0_date_a.csv facehbi_dti_a1_v0.csv > facehbi_dti_labels_v0.csv
$ scp -r -P 20022 detritus.fundacioace.com:/nas/data/facehbi/facehbi_dti_tracts.csv facehbi_dti_tracts_v0.csv
$ sed 's/0/F/; s/Subject/FACEHBI/' facehbi_dti_tracts_v0.csv > facehbi_dti_a2_v0.csv
$ join -t";" facehbi_mri_v0_date_a.csv facehbi_dti_a2_v0.csv > facehbi_dti_tracts_v0.csv
$ ./csv2xls_dti.pl 
$ mv facehbi_dti_v0_data.xlsx facehbi_dti_v0_data_new_protocol.xlsx

Tractografia

Seleccionando regiones segun segmentacion de FS. (dti_track_seed) Nota: Se ha de aumentar el tiempo manualmente. Los procesos de corregistro y conversion requieren alrededor de 6 o 7 horas. Poner un maximo de 12 para prevenir TIME_OUT.

[osotolongo@detritus facehbi]$ dti_track.pl -cut dti_reg_review.csv -time 12:0:0 -t1 facehbi
[osotolongo@detritus facehbi]$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
             27210      cuda dti_trac osotolon PD       0:00      1 (Resources)
             27211      cuda dti_trac osotolon PD       0:00      1 (Priority)
             27212      cuda dti_trac osotolon PD       0:00      1 (Priority)
             27213      cuda dti_trac osotolon PD       0:00      1 (Priority)
             27214      cuda dti_trac osotolon PD       0:00      1 (Priority)
             27215      cuda dti_trac osotolon PD       0:00      1 (Priority)
             27216      cuda dti_trac osotolon PD       0:00      1 (Priority)
             27217      cuda dti_trac osotolon PD       0:00      1 (Priority)
             27218      cuda dti_trac osotolon PD       0:00      1 (Priority)
...
             27332     devel dti_trac osotolon PD       0:00      1 (Dependency)
             27207      cuda dti_trac osotolon  R       0:07      1 brick01
             27208      cuda dti_trac osotolon  R       0:07      1 brick01
             27209      cuda dti_trac osotolon  R       0:07      1 detritus

y sacar las metricas,

[osotolongo@detritus facehbi]$ for x in `ls -d working/smc0*_probtrack_out`; do y=$(echo ${x} | sed 's/out/FPCustom/'); mv ${x} ${y}; done
[osotolongo@detritus facehbi]$ dti_metrics_alt.pl -cut dti_reg_review.csv -path FPCustom facehbi

Usando atlas UofM

[osotolongo@detritus bin]$ dti_track.pl -cut dti_reg_review.csv -time 12:0:0 -t1 -uofm DMN facehbi
[osotolongo@detritus bin]$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
             25473      cuda dti_trac osotolon PD       0:00      1 (Resources)
             25474      cuda dti_trac osotolon PD       0:00      1 (Priority)
             25475      cuda dti_trac osotolon PD       0:00      1 (Priority)
             25476      cuda dti_trac osotolon PD       0:00      1 (Priority)
             25477      cuda dti_trac osotolon PD       0:00      1 (Priority)
             25478      cuda dti_trac osotolon PD       0:00      1 (Priority)
             25479      cuda dti_trac osotolon PD       0:00      1 (Priority)
             25480      cuda dti_trac osotolon PD       0:00      1 (Priority)
             25481      cuda dti_trac osotolon PD       0:00      1 (Priority)
             25482      cuda dti_trac osotolon PD       0:00      1 (Priority)
             25483      cuda dti_trac osotolon PD       0:00      1 (Priority)
             25484      cuda dti_trac osotolon PD       0:00      1 (Priority)
             25485      cuda dti_trac osotolon PD       0:00      1 (Priority)
......

y las metricas se sacan de manera similar.

[osotolongo@detritus facehbi]$ for x in `ls -d working/smc0*_probtrack_out`; do y=$(echo ${x} | sed 's/out/DMN/'); mv ${x} ${y}; done
[osotolongo@detritus facehbi]$ dti_metrics_alt.pl -cut dti_reg_review.csv -path DMN facehbi
[osotolongo@detritus facehbi]$ head facehbi_dti_DMN.csv
Subject;DMN_FA;DMN_MD
0002;0.281107;0.001016
0004;0.267536;0.001043
0005;0.253714;0.001032
0007;0.264982;0.000998
0008;0.256444;0.000994
0011;0.263024;0.000991
0013;0.262677;0.001046
0015;0.276047;0.000996
0017;0.267434;0.001024
neuroimagen/altcorrdti.txt · Last modified: 2020/08/04 10:58 (external edit)