neuroimagen:mriface_reports
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
neuroimagen:mriface_reports [2022/04/05 14:38] – [Sacando edad de XNAT] osotolongo | neuroimagen:mriface_reports [2023/07/14 09:57] (current) – [Evaluando neurodegeneración] osotolongo | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | |||
====== 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 | + | 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 23: | ||
</ | </ | ||
- | ===== Bajar PDFs ===== | + | **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/ | ||
+ | [osotolongo@brick03 mri_face]$ xnatapic get_jsession | ||
+ | 65F92C34AC318AB2A6A7D1BE3506A317 | ||
+ | [osotolongo@brick03 mri_face]$ while read -r line; do s=$(echo ${line} | awk -F',' | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== Bajar PDFs ===== | ||
- Entrar en https:// | - Entrar en https:// | ||
- | - 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 150: | Line 164: | ||
</ | </ | ||
++++ | ++++ | ||
+ | |||
+ | ++++ Procedimiento antiguo | | ||
y entonces, | y entonces, | ||
Line 170: | Line 186: | ||
20211611, | 20211611, | ||
</ | </ | ||
+ | |||
+ | ++++ 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 598: | Line 616: | ||
# Get input | # Get input | ||
my $xprj = ' | my $xprj = ' | ||
+ | my $ilist; | ||
while (@ARGV and $ARGV[0] =~ /^-/) { | while (@ARGV and $ARGV[0] =~ /^-/) { | ||
$_ = shift; | $_ = shift; | ||
last if /^--$/; | last if /^--$/; | ||
if (/^-x/) {$xprj = shift; chomp($xprj); | if (/^-x/) {$xprj = shift; chomp($xprj); | ||
+ | if (/^-i/) {$ilist = shift; chomp($ilist); | ||
} | } | ||
die " | die " | ||
Line 628: | Line 648: | ||
my $tmp_dir = tempdir(TEMPLATE => $ENV{TMPDIR}.'/ | my $tmp_dir = tempdir(TEMPLATE => $ENV{TMPDIR}.'/ | ||
my $sbj_file = $tmp_dir.'/ | my $sbj_file = $tmp_dir.'/ | ||
+ | # me conecto y genero mi JSESSIONID | ||
+ | my $q = 'curl -f -X POST -u "' | ||
+ | my $jid = qx/$q/; | ||
# Saco los sujetos del proyecto | # Saco los sujetos del proyecto | ||
- | my $q = 'curl -f -X GET -u "'.$xconf{' | + | $q = 'curl -f -b JSESSIONID='.$jid.' "' |
system($q); | system($q); | ||
+ | my @slist; | ||
+ | if ($ilist) { | ||
+ | open IDF, "< | ||
+ | @slist = < | ||
+ | close IDF; | ||
+ | } | ||
my %subjects; | my %subjects; | ||
open IDF, "< | open IDF, "< | ||
Line 637: | Line 666: | ||
my ($xid, | my ($xid, | ||
#print "$xid -> $xlabel\n"; | #print "$xid -> $xlabel\n"; | ||
- | $subjects{$xid}{' | + | |
+ | | ||
+ | print " | ||
+ | } | ||
} | } | ||
} | } | ||
close IDF; | close IDF; | ||
+ | #dump %subjects; | ||
foreach my $subject (sort keys %subjects){ | foreach my $subject (sort keys %subjects){ | ||
my $sconn = ' | my $sconn = ' | ||
Line 661: | Line 693: | ||
} | } | ||
close ODF; | close ODF; | ||
- | |||
</ | </ | ||
++++ | ++++ | ||
+ | |||
+ | ----- | ||
+ | |||
+ | ** 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 / | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | $ ./ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ** (si no se pone el nombre de proyecto toma como default //unidad//) ** | ||
+ | |||
+ | ** Si solo quiero hacer unos pocos, ** | ||
+ | |||
+ | <code bash> | ||
+ | $ cat newones.list | ||
+ | 20220534 | ||
+ | 20210104 | ||
+ | 20210474 | ||
+ | 20171653 | ||
+ | $ ./ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ----- | ||
Y ahora puedo usar este [[https:// | Y ahora puedo usar este [[https:// | ||
Line 924: | Line 983: | ||
+ | ===== 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, | ||
+ | 20040526, | ||
+ | 20050456, | ||
+ | 20050604, | ||
+ | 20071018, | ||
+ | 20081210, | ||
+ | 20090461, | ||
+ | 20090567, | ||
+ | 20100147, | ||
+ | 20100678, | ||
+ | </ | ||
+ | |||
+ | Lo primero es mirar aqui quienes no tienen Genero o Fecha de nacimiento, | ||
+ | |||
+ | <code bash> | ||
+ | [osotolongo@brick03 mri_face]$ awk -F"," | ||
+ | [osotolongo@brick03 mri_face]$ cat newones.list | ||
+ | 20050604 | ||
+ | 20181621 | ||
+ | 20191940 | ||
+ | 20220120 | ||
+ | 20220144 | ||
+ | 20220205 | ||
+ | 20221002 | ||
+ | 20221079 | ||
+ | 20221124 | ||
+ | 2021020051 | ||
+ | 2021020062 | ||
+ | 2021020098 | ||
+ | </ | ||
+ | |||
+ | 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]$ ./ | ||
+ | </ | ||
+ | |||
+ | y el archivo resultante, | ||
+ | |||
+ | <code bash> | ||
+ | [osotolongo@brick03 mri_face]$ cat unidad_dob_gender.csv | ||
+ | ID, | ||
+ | XNAT_S00611, | ||
+ | XNAT_S00612, | ||
+ | XNAT_S00613, | ||
+ | XNAT_S00614, | ||
+ | XNAT_S00615, | ||
+ | XNAT_S00616, | ||
+ | XNAT_S00617, | ||
+ | XNAT_S00618, | ||
+ | XNAT_S00619, | ||
+ | </ | ||
+ | |||
+ | 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, | ||
+ | 20151338, | ||
+ | 20211523, | ||
+ | 2021020098, | ||
+ | 20211401, | ||
+ | 20211281, | ||
+ | 20210716, | ||
+ | 20081210, | ||
+ | 20211524, | ||
+ | 20211482, | ||
+ | [osotolongo@brick03 mri_face]$ awk -F"," | ||
+ | [osotolongo@brick03 mri_face]$ awk -F"," | ||
+ | [osotolongo@brick03 mri_face]$ grep -v "`cat reports_done.list`" | ||
+ | [osotolongo@brick03 mri_face]$ while read -r line; do xpr=$(xnatapic list_experiments --project_id unidad --subject_id ${line} --modality MRI --label); echo " | ||
+ | [osotolongo@brick03 mri_face]$ head sbj_ids.csv | ||
+ | 20050604, | ||
+ | 20181621, | ||
+ | 20191940, | ||
+ | 20211269, | ||
+ | 20220053, | ||
+ | 20220120, | ||
+ | 20220144, | ||
+ | 20220205, | ||
+ | 20220460, | ||
+ | 20220581, | ||
+ | </ | ||
+ | |||
+ | y ahora regresamos a [[neuroimagen: | ||
+ | ===== Evaluando neurodegeneración ===== | ||
+ | |||
+ | Ahora, como determinar la N. | ||
+ | |||
+ | Primero obtener los datos, | ||
+ | <code bash> | ||
+ | [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 mriface -o base_aparc.csv | ||
+ | [osotolongo@brick03 mri_face]$ awk -F',' | ||
+ | [osotolongo@brick03 mri_face]$ awk -F',' | ||
+ | [osotolongo@brick03 mri_face]$ join -t, tmp_aseg.csv tmp_aparc.csv | awk -F',' | ||
+ | [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]$ awk -F',' | ||
+ | [osotolongo@brick03 mri_face]$ awk -F',' | ||
+ | [osotolongo@brick03 mri_face]$ join -t, tmp_age.csv tmp_base.csv | awk -F',' | ||
+ | </ | ||
+ | |||
+ | y ahora me bajo el [[https:// | ||
+ | |||
+ | <code bash> | ||
+ | [osotolongo@brick03 mri_face]$ Rscript nplus.r | ||
+ | </ | ||
+ | |||
+ | Y tenemos como resultado la estimacion de presencia de neurodegeneracion asi como la probailidad de pertenecer a cada grupo. | ||
+ | |||
+ | <code bash> | ||
+ | [osotolongo@brick03 mri_face]$ head classifier_output.csv | ||
+ | Subject_ID, | ||
+ | 20050456, | ||
+ | 20081210, | ||
+ | 20090461, | ||
+ | 20100678, | ||
+ | 20140947, | ||
+ | 20150926, | ||
+ | 20151338, | ||
+ | 20160418, | ||
+ | 20170735, | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | y la densidad de probabilidades de presentar neurodegeneracion perteneciendo a este grupo sería algo como, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ===== 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',' | ||
+ | awk -F',' | ||
+ | ./ | ||
+ | awk -F',' | ||
+ | (head -n 1 lcr_data.csv && tail -n +2 lcr_data.csv | sort -t,) > lcr_data_sorted.csv | ||
+ | </ | ||
+ | |||
+ | 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 | ||
+ | </ |
neuroimagen/mriface_reports.1649169528.txt.gz · Last modified: 2022/04/05 14:38 by osotolongo