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 revision Previous revision
Next revision
Previous revision
neuroimagen:mriface_reports [2022/03/31 08:42]
osotolongo [Subiendo todo]
neuroimagen:mriface_reports [2022/11/04 10:16] (current)
osotolongo [Sacar info]
Line 1: Line 1:
 +
 ====== Extrayendo los datos de los informes de MRI FACE ====== ====== Extrayendo los datos de los informes de MRI FACE ======
  
Line 22: Line 23:
 </code> </code>
  
-===== Bajar PDFs =====+ 
 +==== Bajar PDFs =====
  
   - Entrar en https://impax.corachan.com/   - Entrar en https://impax.corachan.com/
Line 150: Line 152:
 </code> </code>
 ++++ ++++
 +
 +++++ Procedimiento antiguo |
  
 y entonces, y entonces,
Line 170: Line 174:
 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 598: Line 604:
 # Get input # Get input
 my $xprj = 'unidad'; my $xprj = 'unidad';
 +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 "Should supply XNAT project" unless $xprj; die "Should supply XNAT project" unless $xprj;
Line 628: Line 636:
 my $tmp_dir = tempdir(TEMPLATE => $ENV{TMPDIR}.'/xnat_data.XXXXXX', CLEANUP => 1); my $tmp_dir = tempdir(TEMPLATE => $ENV{TMPDIR}.'/xnat_data.XXXXXX', CLEANUP => 1);
 my $sbj_file = $tmp_dir.'/all_subjects.csv'; my $sbj_file = $tmp_dir.'/all_subjects.csv';
 +# me conecto y genero mi JSESSIONID
 +my $q = 'curl -f -X POST -u "'.$xconf{'USER'}.':'.$xconf{'PASSWORD'}.'" "'.$xconf{'HOST'}.'/data/JSESSION" 2>/dev/null';
 +my $jid = qx/$q/;
 # Saco los sujetos del proyecto # Saco los sujetos del proyecto
-my $q = 'curl -f -X GET  -u "'.$xconf{'USER'}.':'.$xconf{'PASSWORD'}.'" "'.$xconf{'HOST'}.'/data/projects/unidad/subjects?format=csv" > '.$sbj_file;+$q = 'curl -f -b JSESSIONID='.$jid.' "'.$xconf{'HOST'}.'/data/projects/unidad/subjects?format=csv" > '.$sbj_file.' 2>/dev/null';
 system($q); system($q);
 +my @slist;
 +if ($ilist) {
 +        open IDF, "<$ilist";
 +        @slist = <IDF>;
 +        close IDF;
 +}
 my %subjects; my %subjects;
 open IDF, "<$sbj_file"; open IDF, "<$sbj_file";
Line 637: Line 654:
                 my ($xid,$xlabel) = /(XNAT.*),.*,(\d*),.*,.*,.*$/;                 my ($xid,$xlabel) = /(XNAT.*),.*,(\d*),.*,.*,.*$/;
                 #print "$xid -> $xlabel\n";                 #print "$xid -> $xlabel\n";
-                $subjects{$xid}{'label'} = $xlabel;+                if(!$ilist or grep( /^$xlabel$/, @slist)){ 
 +                        $subjects{$xid}{'label'} = $xlabel; 
 +                        print "$xlabel\n"; 
 +                }
         }         }
 } }
 close IDF; close IDF;
 +#dump %subjects;
 foreach my $subject (sort keys %subjects){ foreach my $subject (sort keys %subjects){
         my $sconn = 'sqlcmd -U '.$sqlconf{'USER'}.' -P '.$sqlconf{'PASSWORD'}.' -S '.$sqlconf{'HOST'}.' -s "," -W -Q "SELECT his_interno, xfecha_nac, xsexo_id FROM [UNIT4_DATA].[imp].[vh_pac_gral] WHERE his_interno = \'"'.$subjects{$subject}{'label'}.'"\';" | grep '.$subjects{$subject}{'label'};         my $sconn = 'sqlcmd -U '.$sqlconf{'USER'}.' -P '.$sqlconf{'PASSWORD'}.' -S '.$sqlconf{'HOST'}.' -s "," -W -Q "SELECT his_interno, xfecha_nac, xsexo_id FROM [UNIT4_DATA].[imp].[vh_pac_gral] WHERE his_interno = \'"'.$subjects{$subject}{'label'}.'"\';" | grep '.$subjects{$subject}{'label'};
Line 661: Line 681:
 } }
 close ODF; close ODF;
- 
 </code> </code>
 ++++ ++++
 +
 +-----
 +
 +** Para construir el CSV con los datos demograficos de todo el proyecto basta hacer, **
 +
 +<code bash>
 +
 +$ ./make_csv.pl -x proyecto
 +
 +</code>
 +
 +** (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
 +$ ./make_csv.pl -i newones.list
 +
 +</code>
 +
 +----- 
  
 Y ahora puedo usar este [[https://wiki.xnat.org/documentation/how-to-use-xnat/upload-experiment-data-via-spreadsheet | metodo para subir el CSV]] Y ahora puedo usar este [[https://wiki.xnat.org/documentation/how-to-use-xnat/upload-experiment-data-via-spreadsheet | metodo para subir el CSV]]
  
 ===== Obteniendo los datos de XNAT ===== ===== Obteniendo los datos de XNAT =====
 +
 +Ahora voy a intentar rescatar desde XNAT los valores de RVR que he subido. Esto es, no hay una estructura fija, en principio, asi que tengo que obtener cualesquiera de los datos que haya definidos en el proyecto. 
 +
 +Para empezar se accede a XNAT y se abre la sesion,
 +
 +<code perl>
 +my $xconf_file = $ENV{'HOME'}.'/.xnatapic/xnat.conf';
 +my %xconf;
 +open IDF, "<$xconf_file";
 +while (<IDF>){
 +        if (/^#.*/ or /^\s*$/) { next; }
 +        my ($n, $v) = /(.*)=(.*)/;
 +        $xconf{$n} = $v;
 +}
 +my $q = 'curl -f -X POST -u "'.$xconf{'USER'}.':'.$xconf{'PASSWORD'}.'" "'.$xconf{'HOST'}.'/data/JSESSION"';
 +my $jid = qx/$q/;
 +
 +</code>
 +
 +y ahora vamos a tomar la lista de sujetos,
 +
 +<code perl>
 +my %subjects;
 +$q = 'curl -f -b JSESSIONID='.$jid.' -X GET "'.$xconf{'HOST'}.'/data/projects/'.$xprj.'/subjects?format=csv&columns=ID,label"';
 +my @sbj_res = split '\n', qx/$q/;
 +</code>
 +
 +Esta respuesta de XNAT no es precisamente la lista de sujetos pero es bastante similar a lo que queremos y podemos ir recorriendo el array y construyendo nuestro output desde ahi.
 +
 +<code perl>
 +foreach my $sbj_prop (@sbj_res){
 +        if ($sbj_prop =~ /^XNAT/){
 +                my ($sid,$slabel) = $sbj_prop =~ /^(XNAT.+),(\S+),(.*)$/;
 +                $subjects{$sid}{'label'} = $slabel;
 +</code>
 +
 +asi, separamos el valor de //sid// que es el ID asignado por XNAT y el //label// que no es mas que el ID que hemos asignado en nuestro proyecto.  Ahora si hacemos,
 +
 +
 +<code perl>
 +                my $qe = 'curl -f -b JSESSIONID='.$jid.' -X GET "'.$xconf{'HOST'}.'/data/projects/'.$xprj.'/subjects/'.$sid.'/experiments?format=json&xsiType=xnat:mrSessionData"';
 +                my $json_res = qx/$qe/;
 +</code>
 +
 +Obtenemos un //json// con los experimentos del sujeto (tipicamente uno solo). Y usando el modulo [[https://metacpan.org/pod/JSON|JSON]] meto los contenidos en un //AoH//.
 +
 +<code perl>
 +                my $exp_prop = decode_json $json_res;
 +                foreach my $experiment (@{$exp_prop->{'ResultSet'}{'Result'}}){
 +                                $subjects{$sid}{'experimentID'} = $experiment->{'ID'};
 +                }
 +</code>
 +
 +y ahora voy a obtener el archivo RVR que haya guardado y convertirlo en una fila del CSV.
 +
 +<code perl>
 +                if (exists($subjects{$sid}{'experimentID'}) and $subjects{$sid}{'experimentID'}){
 +                        my $qr = 'curl -f -b JSESSIONID='.$jid.' -X GET "'.$xconf{'HOST'}.'/data/projects/'.$xprj.'/experiments/'.$subjects{$sid}{'experimentID'}.'/resources/RVR/files?format=json"';
 +                        $json_res = qx/$qr/;
 +                        #print "$json_res\n";
 +                        my $rvr_prop = decode_json $json_res;
 +                        my $report_uri;
 +                        foreach my $rvr_res (@{$rvr_prop->{'ResultSet'}{'Result'}}){
 +                                if ($rvr_res->{'Name'} eq 'report_data.json'){
 +                                        $report_uri = $rvr_res->{'URI'};
 +                                }
 +                        }
 +                        if ($report_uri){
 +                                $qr = 'curl -f -b JSESSIONID='.$jid.' -X GET "'.$xconf{'HOST'}.$report_uri.'"';
 +                                $json_res = qx/$qr/;
 +                                #print "$json_res\n";
 +                                my $report_data = decode_json $json_res;
 +                                foreach my $var_data (@{$report_data->{'ResultSet'}{'Result'}}){
 +                                        my @akeys;
 +                                        my @adata;
 +                                        foreach my $kdata (sort keys %{$var_data}){
 +                                                unless ($dhead){
 +                                                        push @akeys, $kdata unless $kdata eq 'Subject';
 +                                                }
 +                                                push @adata, ${$var_data}{$kdata} unless $kdata eq 'Subject';
 +                                        }
 +                                        $dhead = 'Subject,'. join ',', @akeys unless $dhead;
 +                                        $dbody .= ${$var_data}{'Subject'}.','. join ',', @adata;
 +                                        $dbody .= "\n";
 +                                }
 +                        }
 +                }
 +</code>
 +
 +Ojo, que como no se que estructura va a tener esto, solo veo de poner la columna //Subject// al inicio y lo demas lo intento adivinar automagicamente. 
 +
 +Pues esto despues de escupe a un archiv de output y ya esta.
 +
 +Para lanzarlo ha de hacerse algo como,
 +
 +<code bash>
 +$ ./xnat_get_rvr.pl -x unidad -o rvr_output.csv
 +</code>
 +
 +y si no se especifica el nombre de archivo output se creara uno con nombre como //proyecto_rvr_data.csv// que deberia esperarse que fuera algo como,
 +
 +<code bash>
 +[osotolongo@brick03 mri_face]$ head f5cehbi_rvr_data.csv
 +Subject,ACG,ACP_D,ACP_I,ATM_D,ATM_I,Fazekas
 +F005,1,2,2,0,1,1
 +F006,NA,NA,NA,0,1,1
 +F007,NA,NA,NA,1,0,0
 +F009,2,2,2,1,1,2
 +F010,NA,NA,NA,NA,NA,1
 +F014,NA,NA,NA,1,0,2
 +F015,1,1,1,1,1,NA
 +F023,NA,NA,NA,0,1,2
 +F024,1,1,1,2,2,1
 +</code>
 +
 +Eso segun elproyecto que sea y las variables que se hayan guardado en el //resource// RVR.
 +
 +==== Sacando edad de XNAT ====
 +
 +Para sacar la lista de sujetos del proyecto hago simplemente,
 +
 +<code>
 +[osotolongo@brick03 ~]$ curl -b JSESSIONID=1709B38DD3BD206D00C3389592A4FC9E -X GET "http://detritus.fundacioace.com:8088/data/projects/unidad/subjects?format=csv&columns=ID,label"
 +</code>
 +
 +
 +La forma correcta de parsear el //json// para sacar la fecha de nacimiento es mas o menos asi,
 +
 +<code>
 +[osotolongo@brick03 ~]$ curl -b JSESSIONID=1709B38DD3BD206D00C3389592A4FC9E -X GET 'http://detritus.fundacioace.com:8088/data/subjects/XNAT05_S00052?format=json' | jq '.items[0].children[] | select(.field=="demographics") | .items[0].data_fields.dob'
 +</code>
 +
 +y para sacar la fecha del primer MRI asignado a sujeto es,
 +
 +<code>
 +[osotolongo@brick03 ~]$ curl -b JSESSIONID=1709B38DD3BD206D00C3389592A4FC9E -X GET 'http://detritus.fundacioace.com:8088/data/projects/unidad/subjects/XNAT05_S00052/experiments?format=json' | jq '.ResultSet.Result[0].date'
 +</code>
 +
 +o si se conoce el experimento,
 +
 +<code>
 +[osotolongo@brick03 ~]$ curl -b JSESSIONID=1709B38DD3BD206D00C3389592A4FC9E -X GET 'http://detritus.fundacioace.com:8088/data/projects/unidad/subjects/XNAT05_S00052/experiments/XNAT05_E00065?format=json' | jq '.items[0].data_fields.date'
 +</code>
 +
 +
 +++++ Asi que esto es un poco ir engranado todo |
 +
 +<code perl xnat_get_age.pl>
 +#!/usr/bin/perl
 +#
 +# This is for getting age at MRI date
 +# Intended for MRIFACE protocol
 +# All info is XNAT stored.
 +#
 +# Copyleft 2022 <asqwerty@gmail.com>
 +#
 +use strict;
 +use warnings;
 +use JSON;
 +use Date::Manip;
 +use Math::Round;
 +
 +my $xprj;
 +my $oxfile;
 +while (@ARGV and $ARGV[0] =~ /^-/) {
 +        $_ = shift;
 +        last if /^--$/;
 +        if (/^-o/) {$oxfile = shift; chomp($oxfile);}
 +        if (/^-x/) {$xprj = shift; chomp($xprj);}
 +}
 +die "Should supply XNAT project" unless $xprj;
 +$oxfile = $xprj.'_age_data.csv' unless $oxfile;
 +#Read xnat user config
 +my $xconf_file = $ENV{'HOME'}.'/.xnatapic/xnat.conf';
 +my %xconf;
 +open IDF, "<$xconf_file";
 +while (<IDF>){
 +        if (/^#.*/ or /^\s*$/) { next; }
 +        my ($n, $v) = /(.*)=(.*)/;
 +        $xconf{$n} = $v;
 +}
 +#get the jsessionid
 +my $q = 'curl -f -X POST -u "'.$xconf{'USER'}.':'.$xconf{'PASSWORD'}.'" "'.$xconf{'HOST'}.'/data/JSESSION" 2>/dev/null';
 +my $jid = qx/$q/;
 +my %subjects;
 +$q = 'curl -f -b JSESSIONID='.$jid.' -X GET "'.$xconf{'HOST'}.'/data/projects/'.$xprj.'/subjects?format=csv&columns=ID,label" 2>/dev/null';
 +my @sbj_res = split '\n', qx/$q/;
 +
 +foreach my $sbj_prop (@sbj_res){
 +        if ($sbj_prop =~ /^XNAT/){
 +                my ($sid,$slabel) = $sbj_prop =~ /^(XNAT.+),(\S+),(.*)$/;
 +                $subjects{$sid}{'label'} = $slabel;
 +                my $qe = 'curl -f -b JSESSIONID='.$jid.' -X GET "'.$xconf{'HOST'}.'/data/projects/'.$xprj.'/subjects/'.$sid.'/experiments?format=json&xsiType=xnat:mrSessionData" 2>/dev/null';
 +                my $json_res = qx/$qe/;
 +                my $exp_prop = decode_json $json_res;
 +                foreach my $experiment (@{$exp_prop->{'ResultSet'}{'Result'}}){
 +                        $subjects{$sid}{'experimentID'} = $experiment->{'ID'};
 +                }
 +                my $mri_date;
 +                if (exists($subjects{$sid}{'experimentID'}) and $subjects{$sid}{'experimentID'}){
 +                        my $qr = 'curl -f -b JSESSIONID='.$jid.' -X GET "'.$xconf{'HOST'}.'/data/projects/'.$xprj.'/experiments/'.$subjects{$sid}{'experimentID'}.'?format=json" 2>/dev/null | jq ".items[0].data_fields.date"';
 +                        $mri_date = qx/$qr/; chomp $mri_date;
 +                        $mri_date =~ s/.*(\d{4})-(\d{2})-(\d{2}).*/$2\/$3\/$1/;
 +                        #print "MRI date: $mri_date\n";
 +                }
 +                my $qs = 'curl -f -b JSESSIONID='.$jid.' -X GET "'.$xconf{'HOST'}.'/data/projects/'.$xprj.'/subjects/'.$sid.'?format=json" 2>/dev/null | jq ".items[0].children[] | select(.field==\"demographics\") | .items[0].data_fields.dob"';
 +                #print "$qs\n";
 +                my $dob = qx/$qs/; chomp $dob;
 +                $dob =~ s/.*(\d{4})-(\d{2})-(\d{2}).*/$2\/$3\/$1/;
 +                #print "DoB: $dob\n";
 +                if ($mri_date and $dob){
 +                        #my $d1 = ParseDate($dob);
 +                        #my $d2 = ParseDate($mri_date);
 +                        #print "$d1 - $d2\n";
 +                        my $ddif = Delta_Format(DateCalc(ParseDate($dob),ParseDate($mri_date)),2,"%hh")/(24*365.2425);
 +                        $subjects{$sid}{'age'} = nearest(0.1, $ddif);
 +                        print "$subjects{$sid}{'label'}, $subjects{$sid}{'age'}\n";
 +                }
 +        }
 +}
 +open ODF, ">$oxfile";
 +print ODF "Subject,Age\n";
 +foreach my $subject (sort keys %subjects){
 +        if(exists($subjects{$subject}{'age'})){
 +                print ODF "$subjects{$subject}{'label'},$subjects{$subject}{'age'}\n";
 +        }
 +}
 +close ODF;
 +</code>
 +++++
 +
 +**Ejem**, me ha costado un poco darme cuenta que debo poner las echas como // MM/DD/YYYY // para que //ParseDate()// las agarre bien, pero en fin,que no es tan complicado.
 +
 +luego se hace algo como
 +
 +<code>
 +$./xnat_get_age.pl -x unidad
 +</code>
 +
 +y el archivo de ouput es obviamente
 +
 +<code bash>
 +$ head unidad_age_data.csv
 +Subject,Age
 +20151338,87.7
 +20211523,70.3
 +20211401,63.1
 +20211281,79.4
 +20210716,74.2
 +20081210,82.9
 +20211524,77.1
 +20211269,65
 +20211482,75
 +</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 =====
 +
 +Ahora, como determinar la N.
 +
 +Primero obtener los datos,
 +<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 aparc -p unidad -o base_aparc.csv
 +[osotolongo@brick03 mri_face]$ join -t, base_aseg.csv base_aparc.csv > base_full.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]$ join -t, base_full.csv unidad_age_data_sorted.csv > input_data.csv
 +</code>
 +
 +y ahora me bajo el [[https://github.com/asqwerty666/acenip/tree/main/neuroass|script para calcular la N]] y,
 +
 +<code bash>
 +[osotolongo@brick03 mri_face]$ Rscript nplus.r
 +</code>
 +
 +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,ND,posterior.0,posterior.1
 +20050456,1,1.535472e-03,9.984645e-01
 +20081210,0,7.683998e-01,2.316002e-01
 +20090461,1,2.417535e-03,9.975825e-01
 +20100678,1,1.268098e-04,9.998732e-01
 +20140947,1,6.505165e-02,9.349483e-01
 +20150926,1,3.967107e-07,9.999996e-01
 +20151338,1,2.415657e-04,9.997584e-01
 +20160418,1,2.258146e-07,9.999998e-01
 +20170735,1,4.166497e-03,9.958335e-01
 +</code>
 +
 +{{:neuroimagen:unidad_classifier_output_hippocampus.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,
 +
 +{{:neuroimagen:unidad_posterior_probs.png?600|}}
 +
 +===== Juntando todo en un mismo output =====
 +
neuroimagen/mriface_reports.1648716131.txt.gz · Last modified: 2022/03/31 08:42 by osotolongo