User Tools

Site Tools


neuroimagen:dando_formato_a_las_resultados

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:dando_formato_a_las_resultados [2020/01/05 14:43]
osotolongo [MRI]
neuroimagen:dando_formato_a_las_resultados [2020/08/04 10:58] (current)
Line 101: Line 101:
 F009,20141277,10.01.2015 F009,20141277,10.01.2015
 </code> </code>
-Ahora empieza lo bueno.Tenemos que ligar este archivo con los  sujetos de neuroimagen. Para esto usamos el **archivo guia** que debe existir en cada proyecto, en este caso, //facehbi_mri.csv//+Ahora empieza lo bueno.Tenemos que ligar este archivo con los  sujetos de neuroimagen. Para esto usamos el **archivo guia** que debe existir en cada proyecto, en este caso, //facehbi_mri.csv//Este archivo se debe copiar a otro para garantizar dos cosas, 
 +  - Poder modificarlo sin problemas (sustituir **;** por **,**, añadir header, etc) 
 +  - Que la segunda columna este en el formato correcto, esto es, que contenga los codigos de sujeto del proyecto correctos, sin ningun añadido que pueden tener los directorios. 
 +<code bash> 
 +[osotolongo@detritus facehbi]$ sed 's/;/,/' facehbi_mri.csv > guia_mri.csv 
 +[osotolongo@detritus facehbi]$ sed -i '1iSubject,PSubject' guia_mri.csv 
 +</code> 
 +Una  vez garantizado que la union va a ser correcta, 
 +<code bash> 
 +[osotolongo@detritus facehbi]$ join -t, -1 2 -2 1 guia_mri.csv info_mri_proper.csv > gdata_mri.csv 
 +[osotolongo@detritus facehbi]$ head gdata_mri.csv 
 +PSubject,Subject,Interno,Date 
 +F001,0001,20090806,05.12.2014 
 +F002,0002,20131084,05.12.2014 
 +F003,0003,20130456,11.12.2014 
 +F004,0004,20080130,12.12.2014 
 +F005,0005,20141272,07.01.2015 
 +F006,0006,20141107,23.12.2014 
 +F007,0007,20080716,19.12.2014 
 +F008,0008,20131483,20.12.2014 
 +F009,0009,20141277,10.01.2015 
 +</code> 
 +==== FS output ==== 
 +Para organizar el output en un archivo de MS Excel necesito una primera pagina con info general. Esta debe ser el primer //sheet// del archivo excel. 
 +<code bash> 
 +[osotolongo@detritus facehbi]$ cat info_page.csv 
 +,, 
 +,, 
 +Base de datos:,O. Sotolongo-Grau,asqwerty@gmail.com 
 +Extracción de métricas:,O. Sotolongo-Grau,asqwerty@gmail.com 
 +col. Externa:,Assumpta Vivas-Larruy,assumpta.vivas@gmail.com 
 +,Miguel Ángel Tejero,mtejeroc@corachan.com 
 +,, 
 +,lh,left hemisphere 
 +,rh,right hemisphere 
 +</code> 
 +Todo el output esta en el directorio //fsrecon// y hay que cargarlo en Sheets individuales.  
 + 
 +<code perl fsrecon2xls.pl> 
 +#!/usr/bin/perl 
 + 
 +use strict; 
 +use warnings; 
 +use Data::Dump qw(dump); 
 +use Text::CSV qw( csv ); 
 +use Excel::Writer::XLSX; 
 +my $guide = $ARGV[0]; 
 +my $ofile = $ARGV[1]; 
 +my $idir = 'fsrecon'; 
 +my $info = csv (in => "info_page.csv"); 
 +$ofile =~ s/\.(\w*)?$/.xlsx/; 
 +my $workbook = Excel::Writer::XLSX->new($ofile); 
 +my $worksheet = $workbook->add_worksheet('Info'); 
 +for my $i (0 .. $#{$info}) { 
 +        my $row = $info->[$i]; 
 +        for my $j (0 .. $#{$row}){ 
 +                $worksheet->write( $i, $j, $row->[$j]); 
 +        } 
 +
 +opendir (DIR, $idir); 
 +my @ifiles = grep(/\.csv/, readdir(DIR)); 
 +close DIR; 
 +foreach my $ifile (@ifiles){ 
 +        my $tmpf = 'tmp_'.$ifile; 
 +        my $order = 'join -t, -1 2 -2 1 '.$guide.' '.$idir.'/'.$ifile.' > '.$tmpf; 
 +        system($order); 
 +        my $idata = csv (in => $tmpf); # as array of array 
 +        (my $shname = $ifile) =~ s/\.csv$//; 
 +        $worksheet = $workbook->add_worksheet($shname); 
 +        for my $i (0 .. $#{$idata}) { 
 +                my $row = $idata->[$i]; 
 +                for my $j (0 .. $#{$row}){ 
 +                        $worksheet->write( $i, $j, $row->[$j]); 
 +                } 
 +        } 
 +        unlink $tmpf; 
 +
 +</code> 
 + 
 +El input debe ser el **archivo ya preparado con los datos genericos** del proyecto (IDs, Fechas, numero HC) y el nombre del **archivo de salida**. 
 +<code bash> 
 +[osotolongo@detritus facehbi]$ ./fsrecon2xls.pl gdata_mri.csv facehbi_recon_results.xlsx 
 +[osotolongo@detritus facehbi]$ ls -l facehbi_recon_results.xlsx 
 +-rw-rw---- 1 osotolongo osotolongo 490261 Jan  5 17:07 facehbi_recon_results.xlsx 
 + 
 +</code> 
 +El resultado es un //spreadsheet//, listo para enviar, que puede ser abierto con MS Office, Open Office o con Google Sheets (o cualquier cosa compatible). 
 +{{:neuroimagen:2020-01-05-172425_grim.png|}} 
 +{{:neuroimagen:2020-01-05-171702_grim.png|}} 
 + 
 +**Nota: El script de conversion es facilmente exportable a otros tipos de procesamientos como DTI o PET. El archivo de informacion general es reutilizable y facil de editar. El archivo de datos generales (gdata_mri.csv) sirve para DTI o fMRI. En el caso de PET habria que rehacerlo pero el procedimiento es el mismo.** 
 +===== PET ===== 
 +Como quiero poner todos los resultados juntos voy a ponerlos todos en un mismo directorio y a hacer el excel de ahi, 
 +<code bash> 
 +[osotolongo@detritus facehbi]$ mkdir fbb_results 
 +[osotolongo@detritus facehbi]$ sed 's/;/,/g' facehbi_fbb_cl.csv > fbb_results/fbb_centiloid.csv 
 +[osotolongo@detritus facehbi]$ sed 's/;/,/g' facehbi_fbb_fs_suvr_rois.csv > fbb_results/fbb_landau_method.csv 
 +</code> 
 +Edito la //info_page//, 
 +<code bash> 
 +[osotolongo@detritus facehbi]$ cat info_page.csv 
 +,, 
 +,, 
 +Base de datos:,O. Sotolongo-Grau,asqwerty@gmail.com 
 +Extracción de métricas:,O. Sotolongo-Grau,asqwerty@gmail.com 
 +col. Externa:,Andrés Perissinotti,aperissi@clinic.cat 
 +,Aida Ninerola,ninerola@clinic.cat 
 +,, 
 +</code> 
 +Y voy y saco las fechas de cada scan, 
 +<code bash> 
 +[osotolongo@detritus facehbi]$ for x in /nas/clinic/facehbi/*; do f=$(find ${x} -type f | head -1); d=$(dckey -k "AcquisitionDate" ${f} 2>&1); n=$(echo $x | awk -F"/" {'print $5'} | sed 's/FACEHBI-\(.*\)B/\1/' ); echo ${n},${d}; done > dates_fbb.csv 
 +[osotolongo@detritus facehbi]$ sed -i '1iPSubject,Date' dates_fbb.csv 
 +[osotolongo@detritus facehbi]$ head dates_fbb.csv 
 +PSubject,Date 
 +F001,20141211 
 +F002,20141211 
 +F003,20141218 
 +F004,20141218 
 +F005,20150122 
 +F006,20150115 
 +F007,20150115 
 +F008,20150115 
 +F009,20150129 
 + 
 +</code> 
 +Lo pego a los codigos internos y doy formato a las fechas (con el mismo script!!!) 
 +<code bash> 
 +[osotolongo@detritus facehbi]$ join -t, internos.csv dates_fbb.csv > info_fbb.csv 
 +[osotolongo@detritus facehbi]$ ./format_date.pl info_fbb.csv 
 +[osotolongo@detritus facehbi]$ head info_fbb_proper.csv 
 +PSubject,Interno,Date 
 +F001,20090806,11.12.2014 
 +F002,20131084,11.12.2014 
 +F003,20130456,18.12.2014 
 +F004,20080130,18.12.2014 
 +F005,20141272,22.01.2015 
 +F006,20141107,15.01.2015 
 +F007,20080716,15.01.2015 
 +F008,20131483,15.01.2015 
 +F009,20141277,29.01.2015 
 +</code> 
 + 
 +ahora tengo que dar formato a la //guia_fbb//
 +<code bash> 
 +[osotolongo@detritus facehbi]$ sed 's/;/,/;s/FACEHBI-\(.*\)B/\1/' facehbi_pet.csv > guia_fbb.csv 
 +[osotolongo@detritus facehbi]$ sed -i '1iSubject,PSubject' guia_fbb.csv 
 +[osotolongo@detritus facehbi]$ head guia_fbb.csv 
 +Subject,PSubject 
 +0001,F001 
 +0002,F002 
 +0003,F003 
 +0004,F004 
 +0005,F005 
 +0006,F006 
 +0007,F007 
 +0008,F008 
 +0009,F009 
 +</code> 
 + 
 +Y ya puedo pegar todos los datos preliminares, 
 + 
 +<code bash>[osotolongo@detritus facehbi]$ join -t, -1 2 -2 1 guia_fbb.csv info_fbb_proper.csv > gdata_fbb.csv 
 +[osotolongo@detritus facehbi]$ head gdata_fbb.csv 
 +PSubject,Subject,Interno,Date 
 +F001,0001,20090806,11.12.2014 
 +F002,0002,20131084,11.12.2014 
 +F003,0003,20130456,18.12.2014 
 +F004,0004,20080130,18.12.2014 
 +F005,0005,20141272,22.01.2015 
 +F006,0006,20141107,15.01.2015 
 +F007,0007,20080716,15.01.2015 
 +F008,0008,20131483,15.01.2015 
 +F009,0009,20141277,29.01.2015 
 +</code> 
 + 
 + 
 +Voy  cambiar un poco el script de formatear los resultados de MRI, porque el metodo es muy parecido. **Nota:** De verdad que tengo que pensar como abstraer esto, 
 + 
 +<code perl fbb2xls.pl> 
 +#!/usr/bin/perl 
 + 
 +use strict; 
 +use warnings; 
 +use Data::Dump qw(dump); 
 +use Text::CSV qw( csv ); 
 +use Excel::Writer::XLSX; 
 +my $num_args = $#ARGV + 1; 
 +die "Should supply input filename!!!\n" unless $num_args; 
 +my $idir = 'fbb_results'; 
 +my $guide = $ARGV[0]; 
 +my $ofile; 
 +if ($num_args == 2){ 
 +        $ofile = $ARGV[1]; 
 +}else{ 
 +        $ofile = $idir.'.xlsx'; 
 +
 +my $info = csv (in => "info_page.csv"); 
 +$ofile =~ s/\.(\w*)?$/.xlsx/; 
 +my $workbook = Excel::Writer::XLSX->new($ofile); 
 +my $worksheet = $workbook->add_worksheet('Info'); 
 +for my $i (0 .. $#{$info}) { 
 +        my $row = $info->[$i]; 
 +        for my $j (0 .. $#{$row}){ 
 +                $worksheet->write( $i, $j, $row->[$j]); 
 +        } 
 +
 +opendir (DIR, $idir); 
 +my @ifiles = grep(/\.csv/, readdir(DIR)); 
 +close DIR; 
 +foreach my $ifile (@ifiles){ 
 +        my $tmpf = 'tmp_'.$ifile; 
 +        my $order = 'join -t, -1 2 -2 1 '.$guide.' '.$idir.'/'.$ifile.' > '.$tmpf; 
 +        system($order); 
 +        my $idata = csv (in => $tmpf); # as array of array 
 +        (my $shname = $ifile) =~ s/\.csv$//; 
 +        $worksheet = $workbook->add_worksheet($shname); 
 +        for my $i (0 .. $#{$idata}) { 
 +                my $row = $idata->[$i]; 
 +                for my $j (0 .. $#{$row}){ 
 +                        $worksheet->write( $i, $j, $row->[$j]); 
 +                } 
 +        } 
 +        unlink $tmpf; 
 +
 +</code> 
 +Y corremos, 
 +<code bash> 
 +[osotolongo@detritus facehbi]$ ./fbb2xls.pl gdata_fbb.csv fbb_results.xlsx 
 +[osotolongo@detritus facehbi]$ ls -lh fbb_results.xlsx 
 +-rw-rw---- 1 osotolongo osotolongo 33K Jan  7 11:52 fbb_results.xlsx 
 +</code> 
 +Y nos queda el archivo excel correcto, 
 +{{:neuroimagen:2020-01-07-115603_grim.png|}} 
 +{{:neuroimagen:2020-01-07-115632_grim.png|}} 
 +{{:neuroimagen:2020-01-07-115822_grim.png|}}
neuroimagen/dando_formato_a_las_resultados.1578235418.txt.gz · Last modified: 2020/08/04 10:47 (external edit)