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/07/07 11:23]
osotolongo [Obteniendo los PatientID]
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>
  
-===== Logistica de reclamacion ===== 
  
-===== Bajar PDFs =====+==== Bajar PDFs =====
  
   - Entrar en https://impax.corachan.com/   - Entrar en https://impax.corachan.com/
Line 152: Line 152:
 </code> </code>
 ++++ ++++
 +
 +++++ Procedimiento antiguo |
  
 y entonces, y entonces,
Line 172: 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 600: 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 630: 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 639: 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 663: 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]]
Line 925: Line 968:
 </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 964: Line 1102:
  
 {{: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,
  
 {{:neuroimagen:unidad_posterior_probs.png?600|}} {{:neuroimagen:unidad_posterior_probs.png?600|}}
 +
 +===== Juntando todo en un mismo output =====
 +
neuroimagen/mriface_reports.1657193014.txt.gz · Last modified: 2022/07/07 11:23 by osotolongo