User Tools

Site Tools


neuroimagen:mriface_reports

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
neuroimagen:mriface_reports [2022/08/31 14:51] – [Datos demograficos] osotolongoneuroimagen:mriface_reports [2023/07/14 09:57] (current) – [Evaluando neurodegeneración] osotolongo
Line 2: Line 2:
 ====== Extrayendo los datos de los informes de MRI FACE ====== ====== Extrayendo los datos de los informes de MRI FACE ======
  
-===== Obteniendo los PatientID =====+===== Obteniendo los StudyID =====
  
-Lo primero es sacar los //Patient ID// de cada MRI. Primero saco los sujetos del proyecto y los asocio a los //IDs// almacenados como //label// del experimento.+Lo primero es sacar los //Study ID// de cada MRI. Primero saco los sujetos del proyecto y los asocio a los //IDs// almacenados como //label// del experimento.
  
 <code bash> <code bash>
Line 22: Line 22:
  
 </code> </code>
 +
 +**Nota:** Revisar el codigo y cambiar los ID, que no son estos.
 +
 +Estoy migrando de PatientID a StudyID, :BACKLOG:
 +
 +<code bash>
 +[osotolongo@brick03 mri_face]$ for x in reports_archive/*.txt; do p=$(grep "^D[0-9]*$" ${x}); r=$(basename ${x} | sed 's/\.txt//'); a=$(grep "^[0-9]D[0-9]*$" ${x}); echo "${r},${p},${a}"; done > accesion_ids.csv
 +[osotolongo@brick03 mri_face]$ xnatapic get_jsession
 +65F92C34AC318AB2A6A7D1BE3506A317
 +[osotolongo@brick03 mri_face]$ while read -r line; do s=$(echo ${line} | awk -F',' '{print $1}'); aid=$(echo ${line} | awk -F',' '{print $3}'); eid=$(xnatapic list_experiments --project_id mriface --subject_id ${s} --modality MRI); curl -f -X PUT -b "JSESSIONID=65F92C34AC318AB2A6A7D1BE3506A317" "http://detritus.fundacioace.com:8088/data/projects/mriface/subjects/${s}/experiments/${eid}?label=${aid}"; echo "${s}, ${aid} --> done"; done < accesion_ids.csv
 +</code>
 +
  
  
Line 27: Line 39:
  
   - Entrar en https://impax.corachan.com/   - Entrar en https://impax.corachan.com/
-  - Buscar por PatientID+  - Buscar por AccesionID
   - Salvar el report como pdf con el numero interno   - Salvar el report como pdf con el numero interno
  
Line 152: Line 164:
 </code> </code>
 ++++ ++++
 +
 +++++ Procedimiento antiguo |
  
 y entonces, y entonces,
Line 172: Line 186:
 20211611,NA,NA,NA,0,0,0,0,0 20211611,NA,NA,NA,0,0,0,0,0
 </code> </code>
 +
 +++++ DELETEME
  
 Y cuando casi eres feliz, **te cambian la estructura de los informes** LOL Y cuando casi eres feliz, **te cambian la estructura de los informes** LOL
Line 683: Line 699:
  
 ** Para construir el CSV con los datos demograficos de todo el proyecto basta hacer, ** ** Para construir el CSV con los datos demograficos de todo el proyecto basta hacer, **
 +
 +** Nota: ** procedimiento obsoleto ver preanon.sh y update_sbj.pl dentro de /old_nas/mri_face
  
 <code bash> <code bash>
Line 964: Line 982:
 </code> </code>
  
 +
 +===== Haciendo Update de la DB =====
 +
 +Cuando he subido los sujetos nuevos, no me interesa subir todos los datos. Solo de los nuevos. Xnat permite bajarse un CSV con los datos fundamentales de los sujetos. Ejemplo,
 +
 +<code bash>
 +[osotolongo@brick03 mri_face]$ head osotolongo_9_9_2022_14_20_45.csv
 +Subject,M/F,YOB,MR Sessions,Inserted
 +20040526,F,1943,1,2022-08-15 14:50:34.733
 +20050456,F,1940,1,2022-03-21 10:07:58.79
 +20050604,U,,1,2022-09-09 11:03:42.296
 +20071018,F,1937,1,2022-06-01 11:26:55.319
 +20081210,F,1939,1,2021-12-18 18:36:35.746
 +20090461,M,1944,1,2022-02-02 10:18:49.364
 +20090567,F,1951,1,2022-08-16 11:46:09.795
 +20100147,F,1943,1,2022-08-16 10:24:22.267
 +20100678,M,1943,1,2022-02-02 10:53:02.929
 +</code>
 +
 +Lo primero es mirar aqui quienes no tienen Genero o Fecha de nacimiento,
 +
 +<code bash>
 +[osotolongo@brick03 mri_face]$ awk -F"," '{if ($2=="U") print $1 }' osotolongo_9_9_2022_14_20_45.csv | sort -n > newones.list
 +[osotolongo@brick03 mri_face]$ cat newones.list
 +20050604
 +20181621
 +20191940
 +20220120
 +20220144
 +20220205
 +20221002
 +20221079
 +20221124
 +2021020051
 +2021020062
 +2021020098
 +</code>
 +
 +Por supuesto que aqui habra tambien los errores previos (// ver las ultimas lineas//) pero no importa porque estos no se procesaran. Hago,
 +
 +<code bash>
 +[osotolongo@brick03 mri_face]$ ./make_csv.pl -i newones.list
 +</code>
 +
 +y el archivo resultante,
 +
 +<code bash>
 +[osotolongo@brick03 mri_face]$ cat unidad_dob_gender.csv
 +ID,label,dob,gender
 +XNAT_S00611,20050604,1946-11-18,female
 +XNAT_S00612,20220144,1948-04-10,female
 +XNAT_S00613,20220120,1950-12-31,female
 +XNAT_S00614,20220205,1938-10-06,female
 +XNAT_S00615,20221002,1955-02-19,female
 +XNAT_S00616,20181621,1941-10-23,female
 +XNAT_S00617,20221079,1949-07-25,female
 +XNAT_S00618,20191940,1943-11-09,female
 +XNAT_S00619,20221124,1969-03-17,male
 +</code>
 +
 +se utiliza para hacer un update subiendo el spreadsheet directamente a XNAT.
 +
 +ahora, quiero ver los reports que faltan, asi que hago,
 +
 +<code bash>
 +[osotolongo@brick03 mri_face]$ xnat_get_rvr.pl -x mriface
 +[osotolongo@brick03 mri_face]$ head mriface_rvr_data.csv
 +Subject_ID,Date,Fazekas,GCA_D,GCA_I,Kipps_A_D,Kipps_A_I,Kipps_F_D,Kipps_F_I,Kipps_P_D,Kipps_P_I,Koedam_D,Koedam_I,Scheltens_D,Scheltens_I
 +20151338,2021-12-04,1,2,2,1,1,1,1,1,1,2,2,2,2
 +20211523,2021-12-05,2,1,1,NA,NA,NA,NA,NA,NA,1,1,1,2
 +2021020098,2021-12-04,1,2,2,2,2,2,2,1,1,1,2,2,2
 +20211401,2021-12-04,1,1,1,1,1,1,1,2,2,1,1,0,1
 +20211281,2021-12-01,1,3,3,NA,NA,NA,NA,NA,NA,2,3,3,3
 +20210716,2021-12-16,1,1,1,1,1,1,1,1,1,1,1,1,1
 +20081210,2021-12-02,1,1,1,NA,NA,NA,NA,NA,NA,1,1,0,0
 +20211524,2021-12-02,2,2,2,1,1,3,3,1,1,2,2,1,1
 +20211482,2021-12-02,2,2,2,3,3,2,2,2,2,2,2,4,4
 +[osotolongo@brick03 mri_face]$ awk -F"," '{print $1}' mriface_rvr_data.csv > reports_done.list
 +[osotolongo@brick03 mri_face]$ awk -F"," '{print $1}' osotolongo_9_9_2022_14_20_45.csv > all.list
 +[osotolongo@brick03 mri_face]$ grep -v "`cat reports_done.list`" all.list > noreports.list
 +[osotolongo@brick03 mri_face]$ while read -r line; do xpr=$(xnatapic list_experiments --project_id unidad --subject_id ${line} --modality MRI --label); echo "${line},${xpr}"; done < noreports.list | awk -F"," '{print $1","$3}' > sbj_ids.csv
 +[osotolongo@brick03 mri_face]$ head sbj_ids.csv
 +20050604,D22362317
 +20181621,D22407522
 +20191940,D22402332
 +20211269,D18290542
 +20220053,D22038623
 +20220120,D22363608
 +20220144,D22402314
 +20220205,D99365341
 +20220460,D99297208
 +20220581,D22362247
 +</code>
 +
 +y ahora regresamos a [[neuroimagen:mriface_reports#bajar_pdfs| bajar los PDFs y procesarlos]]
 ===== Evaluando neurodegeneración ===== ===== Evaluando neurodegeneración =====
  
Line 970: Line 1083:
 Primero obtener los datos, Primero obtener los datos,
 <code bash> <code bash>
-[osotolongo@brick03 mri_face]$ xnat_pullfs.pl -s aseg -p unidad -o base_aseg.csv +[osotolongo@brick03 mri_face]$ xnat_pullfs.pl -s aseg -p mriface -o base_aseg.csv 
-[osotolongo@brick03 mri_face]$ xnat_pullfs.pl -s aparc -p unidad -o base_aparc.csv +[osotolongo@brick03 mri_face]$ xnat_pullfs.pl -s aparc -p mriface -o base_aparc.csv 
-[osotolongo@brick03 mri_face]$ join -t, base_aseg.csv base_aparc.csv > base_full.csv +[osotolongo@brick03 mri_face]$ awk -F',' '{print $1"_"$2","$0}' base_aseg.csv > tmp_aseg.csv 
-[osotolongo@brick03 mri_face]$ ./xnat_get_age.pl -x unidad+[osotolongo@brick03 mri_face]$ awk -F',' '{print $1"_"$2","$0}' base_aparc.csv > tmp_aparc.csv 
 +[osotolongo@brick03 mri_face]$ join -t, tmp_aseg.csv tmp_aparc.csv | awk -F',' '{$1=$50=$51=""; print $0}' | sed 's/^ //;s/ /,/g;s/,,,/,/g' >  base_full.csv 
 +[osotolongo@brick03 mri_face]$ (head -n 1 base_full.csv && tail -n +2 base_full.csv | sort -t,) > base_full_sorted.csv 
 +[osotolongo@brick03 mri_face]$ xnat_get_age.pl -x unidad
 [osotolongo@brick03 mri_face]$ sort -t, -n unidad_age_data.csv > unidad_age_data_sorted.csv [osotolongo@brick03 mri_face]$ sort -t, -n unidad_age_data.csv > unidad_age_data_sorted.csv
-[osotolongo@brick03 mri_face]$ join -t, base_full.csv unidad_age_data_sorted.csv > input_data.csv+[osotolongo@brick03 mri_face]$ awk -F',' '{print $1"_"$2","$0}' unidad_age_data_sorted.csv > tmp_age.csv 
 +[osotolongo@brick03 mri_face]$ awk -F',' '{print $1"_"$2","$0}' base_full_sorted.csv > tmp_base.csv 
 +[osotolongo@brick03 mri_face]$ join -t, tmp_age.csv tmp_base.csv | awk -F',' '{$1=$5=$6=""; print $0}' | sed 's/^ //;s/ /,/g;s/,,,/,/g'> input_data.csv
 </code> </code>
  
Line 1003: Line 1121:
  
 {{:neuroimagen:unidad_classifier_output_middletemporal.png?600|}} {{:neuroimagen:unidad_classifier_output_middletemporal.png?600|}}
 +
 +{{:neuroimagen:unidad_classifier_output_entorhinal.png?600|}}
  
 y la densidad de probabilidades de presentar neurodegeneracion perteneciendo a este grupo sería algo como, y la densidad de probabilidades de presentar neurodegeneracion perteneciendo a este grupo sería algo como,
Line 1008: Line 1128:
 {{:neuroimagen:unidad_posterior_probs.png?600|}} {{:neuroimagen:unidad_posterior_probs.png?600|}}
  
-===== Juntando todo en un mismo output ===== 
  
 +===== Comparando neurodegeneración con LCR =====
 +
 +Aqui hay dos puntos a tener en cuenta,
 +
 +1.- El algoritmo utilizado es correcto solamente para los pacientes preclínicos. Por construcción se supone que todos los sujetos diagnosticados con demencia tienen una probabilidad cierta (=1) de neurodegeneración. 
 +
 +2.- 
 +
 +<code bash>
 +awk -F',' '{if ($3!='3') print}' dxs_20230629.csv > dxs_20230629_notdemented.csv
 +awk -F',' '{print $2}' dxs_20230629_notdemented.csv > selected.csv
 +./get_lcr.pl -i selected.csv > nondemented_lcr.csv
 +awk -F',' '{print $2","$4","$5","$6}' nondemented_lcr.csv | sed 's/label/Subject_ID/' > lcr_data.csv
 +(head -n 1 lcr_data.csv && tail -n +2 lcr_data.csv | sort -t,) > lcr_data_sorted.csv
 +</code>
 +
 +En este punto solo hay que unir los valores de LCR con los de Nplus.
 +
 +<code bash>
 +join -t, classifier_output.csv lcr_data_sorted.csv > mriface_compare_data.csv
 +</code>
neuroimagen/mriface_reports.1661957462.txt.gz · Last modified: 2022/08/31 14:51 by osotolongo