User Tools

Site Tools


neuroimagen:bioface_sbm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
neuroimagen:bioface_sbm [2021/12/11 14:13]
osotolongo [SBM vs NBACE]
neuroimagen:bioface_sbm [2021/12/14 10:33] (current)
osotolongo [Resultados]
Line 246: Line 246:
  
 ===== SBM vs NBACE ===== ===== SBM vs NBACE =====
 +
 +Antes de ejecutar el analisis para las variabes de NBACE, vamos a mirar que hay en la base de datos,
  
 <code bash> <code bash>
Line 497: Line 499:
 </code> </code>
  
 +Entonces voy primero a enlazarlos ID de neuroimagen del proyecto (//Subject//) con los ID del proyecto (//PSubject//). Y luego voy a extraer de la DB las variables que necesito. Voy a empezar con //M_ret_NP// y por supuesto las covariables. Entonces voy a unir los dos archivos y esta sera mi base de trabajo.
  
 <code bash> <code bash>
Line 518: Line 521:
 </code> </code>
  
 +A partir de la DB de trabajo tengo que construir el archivo //FSGD//,
 <code bash> <code bash>
 [osotolongo@brick03 fsga_220]$ (head -n 1 bioface_data_220.csv; tail -n +2 bioface_data_220.csv | sort -t, -k 2) > bioface_data_sorted_220.csv [osotolongo@brick03 fsga_220]$ (head -n 1 bioface_data_220.csv; tail -n +2 bioface_data_220.csv | sort -t, -k 2) > bioface_data_sorted_220.csv
Line 538: Line 542:
 [osotolongo@brick03 fsga_220]$ cat headers_220.txt 220_body.csv > 220.fsgd [osotolongo@brick03 fsga_220]$ cat headers_220.txt 220_body.csv > 220.fsgd
 </code> </code>
 +
 +Y ahora me ejecuto un script que haga todos los analisis de la variable correspondiente,
  
 <code bash fsga_220.sh> <code bash fsga_220.sh>
Line 551: Line 557:
 </code> </code>
  
 +Ahora bien, esto me vale para el //thickness// pero para //area// y //volume// necesito el valor del //intracraneal volume//, pasado a z-scores para evitar //ill-posed// problems.
 + 
 <code bash> <code bash>
 awk -F"," '{print $1","$65}' ../../fsrecon/aseg_stats.csv > bioface_icv.csv awk -F"," '{print $1","$65}' ../../fsrecon/aseg_stats.csv > bioface_icv.csv
Line 556: Line 564:
 awk -F"," '{$1 = sprintf("%04d",$1); print $1","$3}' bioface_zic_tempv.csv | sed 's/"//g;s/0000/Subject/' > bioface_zicv.csv awk -F"," '{$1 = sprintf("%04d",$1); print $1","$3}' bioface_zic_tempv.csv | sed 's/"//g;s/0000/Subject/' > bioface_zicv.csv
 </code> </code>
 +
 +Hago el join con los datos que ya tengo y construyo un nuevo //FSGD// con los //zICV// incluidos.
  
 <code> <code>
Line 562: Line 572:
 cat headers_220.txt 220v_body.csv > 220v.fsgd cat headers_220.txt 220v_body.csv > 220v.fsgd
 </code> </code>
 +
 +Por supuesto que esto lo he de añadir al modelo (//mtx//),
  
 <code bash> <code bash>
 [osotolongo@brick03 fsga_220]$ cat 220a.mtx [osotolongo@brick03 fsga_220]$ cat 220a.mtx
 0 0 0 0 1 0 0 0 0 0 1 0
 +
 +y los nuevos scripts de //area// y //volume// tienen que usar estos nuevos archivos,
  
 [osotolongo@brick03 fsga_220]$ cat fsga_220a.sh [osotolongo@brick03 fsga_220]$ cat fsga_220a.sh
Line 591: Line 605:
 </code> </code>
  
 +En cualquier caso, para encontrar rapidamente si hay resultados basta con hacer un grep rapido, 
 +
 +<code bash>
 +[osotolongo@brick03 fsga_220]$ grep -v "^#" *glmdir/220*/*sig.cluster.summary
 +lh.220.glmdir/220/cache.th30.pos.sig.cluster.summary:          4.7802   70529    384.91    -29.6  -35.2  -15.6  0.00200  0.00120  0.00280    899     3173.92  parahippocampal
 +rh.220v.glmdir/220a/cache.th30.pos.sig.cluster.summary:          3.5435  158360    418.06     45.4  -66.0   29.0  0.00400  0.00280  0.00519    690     2060.05  inferiorparietal
 +</code>
 +
 +==== Automatizando ====
 +
 +Bueno este proceso es mas o menos el mismo para todas las variables, asi que como que se puede automatizar con un poco de maña. 
 +
 +El primer procedimiento es extraer la info de la DB, respecto a la variable a estudiar. Para esto voy a hacer un plantilla y en tonces solo hay que sustituir el codigo de la variables en la plantilla, ejecutar el script resultante y todo deberia quedar en su sitio. Para cada variable hare un subdirectorio distinto, asi no se mezclan la cosas.
 +
 +El segundo paso es ejecutar las ordenes propiamente del analisis. Es decir que hago otra plantilla  donde escribir los codigo de variable y ya esta. Igual, que antes, escribo, ejecuto y quedan los analisis en su sitio.
 +
 +<code bash>
 +[osotolongo@brick03 fsga_nbace]$ cat templates/organize.sh 
 +#!/bin/bash
 +mkdir fsga_<code>
 +awk -F"," '{print $1","$94","$78","$83","$<code>}' bioface_full_db.csv > fsga_<code>/bioface_<code>.csv
 +sed -i 's/SUJETO/PSubject/g' fsga_<code>/bioface_<code>.csv
 +join -t"," -1 2 -2 1 bioface_join.csv fsga_<code>/bioface_<code>.csv > fsga_<code>/bioface_data_<code>.csv
 +(head -n 1 fsga_<code>/bioface_data_<code>.csv; tail -n +2 fsga_<code>/bioface_data_<code>.csv | sort -t, -k 2) > fsga_<code>/bioface_data_sorted_<code>.csv
 +awk -F"," '{print "bioface_"$2","$3","$4","$5","$6}' fsga_<code>/bioface_data_sorted_<code>.csv | sed 's/bioface_Subject/Variables/;s/Edad_visita/Age/;s/Sexo/Gender/;s/Anyos_escolaridad/Education/' | sed 's/bioface_\([^,]*\),/Input bioface_\1 Main /; s/,/ /g' > fsga_<code>/<code>_body.csv
 +echo 'GroupDescriptorFile 1' > fsga_<code>/headers_<code>.txt
 +echo 'Title BIOFACE_<code>' >> fsga_<code>/headers_<code>.txt
 +echo 'Class Main' >> fsga_<code>/headers_<code>.txt
 +echo '0 0 0 0 1' > fsga_<code>/<code>.mtx
 +cat fsga_<code>/headers_<code>.txt fsga_<code>/<code>_body.csv > fsga_<code>/<code>.fsgd
 +join -t"," -1 2 -2 1 fsga_<code>/bioface_data_sorted_<code>.csv bioface_zicv.csv > fsga_<code>/bioface_vdata.csv
 +awk -F"," '{print "bioface_"$1","$3","$4","$5","$6","$7}' fsga_<code>/bioface_vdata.csv | sed 's/bioface_Subject/Variables/;s/Edad_visita/Age/;s/Sexo/Gender/;s/Anyos_escolaridad/Education/' | sed 's/bioface_\([^,]*\),/Input bioface_\1 Main /; s/,/ /g' > fsga_<code>/<code>v_body.csv
 +cat fsga_<code>/headers_<code>.txt fsga_<code>/<code>v_body.csv > fsga_<code>/<code>v.fsgd
 +echo '0 0 0 0 1 0' > fsga_<code>/<code>a.mtx
 +
 +[osotolongo@brick03 fsga_nbace]$ cat templates/runner.sh 
 +#!/bin/bash
 +##thickness
 +mris_preproc --fsgd <code>v.fsgd --cache-in area.fwhm10.fsaverage --target fsaverage --hemi lh --out lh.<code>.area.10.mgh
 +mris_preproc --fsgd <code>v.fsgd --cache-in area.fwhm10.fsaverage --target fsaverage --hemi rh --out rh.<code>.area.10.mgh
 +mri_glmfit --y lh.<code>.area.10.mgh --fsgd <code>v.fsgd --C <code>a.mtx --surf fsaverage lh --glmdir lh.<code>a.glmdir
 +mri_glmfit --y rh.<code>.area.10.mgh --fsgd <code>v.fsgd --C <code>a.mtx --surf fsaverage rh --glmdir rh.<code>a.glmdir
 +mri_glmfit-sim --glmdir lh.<code>a.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir lh.<code>a.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>a.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>a.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +##area
 +mris_preproc --fsgd <code>.fsgd --cache-in thickness.fwhm10.fsaverage --target fsaverage --hemi lh --out lh.<code>.thickness.10.mgh
 +mris_preproc --fsgd <code>.fsgd --cache-in thickness.fwhm10.fsaverage --target fsaverage --hemi rh --out rh.<code>.thickness.10.mgh
 +mri_glmfit --y lh.<code>.thickness.10.mgh --fsgd <code>.fsgd --C <code>.mtx --surf fsaverage lh --glmdir lh.<code>.glmdir
 +mri_glmfit --y rh.<code>.thickness.10.mgh --fsgd <code>.fsgd --C <code>.mtx --surf fsaverage rh --glmdir rh.<code>.glmdir
 +mri_glmfit-sim --glmdir lh.<code>.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir lh.<code>.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +##volume
 +mris_preproc --fsgd <code>v.fsgd --cache-in volume.fwhm10.fsaverage --target fsaverage --hemi lh --out lh.<code>.volume.10.mgh
 +mris_preproc --fsgd <code>v.fsgd --cache-in volume.fwhm10.fsaverage --target fsaverage --hemi rh --out rh.<code>.volume.10.mgh
 +mri_glmfit --y lh.<code>.volume.10.mgh --fsgd <code>v.fsgd --C <code>a.mtx --surf fsaverage lh --glmdir lh.<code>v.glmdir
 +mri_glmfit --y rh.<code>.volume.10.mgh --fsgd <code>v.fsgd --C <code>a.mtx --surf fsaverage rh --glmdir rh.<code>v.glmdir
 +mri_glmfit-sim --glmdir lh.<code>v.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir lh.<code>v.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>v.glmdir --cache 3 neg --cwp 0.05 --2spaces
 +mri_glmfit-sim --glmdir rh.<code>v.glmdir --cache 3 pos --cwp 0.05 --2spaces
 +</code>
 +
 +y ahora debo hacer un script para llenar las plantillas y ejecutarlas. Esto es cosa bastante simple.
 +
 +<code bash>
 +[osotolongo@brick03 fsga_nbace]$ cat run_all.sh 
 +#!/bin/bash
 +code=$1
 +shift
 +sed "s/<code>/${code}/g" templates/organize.sh > org${code}.sh
 +chmod +x org${code}.sh
 +./org${code}.sh
 +rm org${code}.sh
 +sed "s/<code>/${code}/g" templates/runner.sh > fsga_${code}/run.sh
 +cd fsga_${code}/
 +chmod +x run.sh
 +./run.sh
 +cd ..
 +grep -v "^#" fsga_${code}/*glmdir/${code}*/*sig.cluster.summary
 +</code>
 +
 +El //grep// final devuelve los resultados, en caso de haber alguno.
 +y ahora solo tendria que ir ejecutando, por ejemplo,
 +
 +<code bash>
 +$ ./run_all 240
 +</code>
 +
 +y cambiando el codigo para cada caso que me interese.
 +
 +==== Resultados ====
 +
 +Despues de ejecutar todo, puedo mirar los resultados globales con facilidad,
 +
 +<code bash>
 +[osotolongo@brick03 fsga_nbace]$ ls -d fsga_2*
 +fsga_219  fsga_220  fsga_221  fsga_227  fsga_232  fsga_238  fsga_240  fsga_241  fsga_242
 +
 +[osotolongo@brick03 fsga_nbace]$ grep -v "^#" fsga_2*/*glmdir/2*/*sig.cluster.summary
 +fsga_220/lh.220.glmdir/220/cache.th30.pos.sig.cluster.summary:          4.7802   70529    384.91    -29.6  -35.2  -15.6  0.00200  0.00120  0.00280    899     3173.92  parahippocampal
 +fsga_220/rh.220v.glmdir/220a/cache.th30.pos.sig.cluster.summary:          3.5435  158360    418.06     45.4  -66.0   29.0  0.00400  0.00280  0.00519    690     2060.05  inferiorparietal
 +fsga_238/lh.238.glmdir/238/cache.th30.neg.sig.cluster.summary:         -4.9777  159437    405.48     -8.4  -58.6   13.1  0.00020  0.00000  0.00040    949    -3320.19  precuneus
 +fsga_238/lh.238.glmdir/238/cache.th30.neg.sig.cluster.summary:         -5.4753   28501    389.38    -51.8  -53.9  -16.1  0.00100  0.00040  0.00160    555    -2051.28  inferiortemporal
 +fsga_238/lh.238.glmdir/238/cache.th30.neg.sig.cluster.summary:         -3.9238   23271    347.97    -58.7  -49.8   14.8  0.00140  0.00080  0.00200    717    -2300.38  superiortemporal
 +fsga_238/lh.238.glmdir/238/cache.th30.neg.sig.cluster.summary:         -4.1765  125637    231.02    -55.4  -32.9   24.6  0.02524  0.02247  0.02800    409    -1345.49  supramarginal
 +fsga_240/lh.240a.glmdir/240a/cache.th30.pos.sig.cluster.summary:          3.6678   29871    377.44    -34.8   44.8   19.1  0.01950  0.01693  0.02208    566     1720.94  rostralmiddlefrontal
 +fsga_241/rh.241a.glmdir/241a/cache.th30.pos.sig.cluster.summary:          4.3157    1024    596.17      6.6  -19.1   62.8  0.00140  0.00080  0.00200   1482     4717.49  paracentral
 +</code>
 +
 +Ahora para mirar especificamente el cluster que nos interesa hagamos algo como,
 +
 +<code>
 +freeview -f $SUBJECTS_DIR/fsaverage/surf/lh.inflated:annot=aparc.annot:annot_outline=1:overlay=fsga_220/lh.220.glmdir/220/cache.th30.pos.sig.masked.mgh:overlay_threshold=2.3,5 -viewport 3d
 +</code>
 +
 +que nos muestra algo asi,
 +
 +{{ :neuroimagen:step1.png?600 |}}
 +
 +Pero manipulando un poco la configuracion del //overlay// y moviendo un poc la figura, nos queda algo mas //enseñable//,
 +
 +{{ :neuroimagen:step2.png?600 |}}
 +
 +Aqui estamos usando //aparc.annot// como //annotation// y podemos ver las regiones del cortex afectadas por el cluster. Pero tambien podemos cargar otro archivo, por ejemplo //lh.PALS_B12_Brodmann.annot// y esto nos identifica las regiones de Brodman afectadas.
  
 +{{ :neuroimagen:step3.png?600 |}}
neuroimagen/bioface_sbm.1639232004.txt.gz · Last modified: 2021/12/11 14:13 by osotolongo