neuroimagen:pipe05
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
neuroimagen:pipe05 [2022/01/12 10:07] – [Segmentación Freesurfer] osotolongo | neuroimagen:pipe05 [2022/06/17 07:43] (current) – [Non image data] osotolongo | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Pipeline de Procesamiento de FACE v0.5 ====== | ====== Pipeline de Procesamiento de FACE v0.5 ====== | ||
- | Nueva version en etapa de planificacion. | ||
===== Porque una nueva version? ===== | ===== Porque una nueva version? ===== | ||
- | * // Introducir containers. Preparar el pipeline para utilizarlo en Microsoft Azure, AWS o similar. Todas las llamadas a FSL, Freesurfer o ANTs deben sustituirse por una llamada a containers. // **Nota: De momento no parece ser necesario y los containers de FSL o Fs pueden ser mas complicados de lo que parecen** DELETEME | ||
* < | * < | ||
* Reparalelizar los procesos de registro, y extraccion de metricas PET en modulos mas pequeños :?: | * Reparalelizar los procesos de registro, y extraccion de metricas PET en modulos mas pequeños :?: | ||
Line 13: | Line 11: | ||
* < | * < | ||
- | ===== TODO ===== | ||
- | - acenip Containers? DELETEME | ||
- | |||
- | {{ : | ||
===== Dependencias ===== | ===== Dependencias ===== | ||
Line 28: | Line 22: | ||
* fmriprep: https:// | * fmriprep: https:// | ||
* dicom3tools: | * dicom3tools: | ||
- | * xnatapic: https:// | + | * xnatapic: https:// |
===== DB ===== | ===== DB ===== | ||
Line 166: | Line 160: | ||
</ | </ | ||
+ | ==== Manipular las rutas ==== | ||
+ | |||
+ | La configuración del proyecto puede ser modificada editando el archivo de configuración directamente o utilizando la herramienta // | ||
+ | |||
+ | * Mostrar configuración | ||
+ | <code bash> | ||
+ | $ pipeconf.pl -p f5cehbi -r | ||
+ | BIDS = / | ||
+ | DATA = / | ||
+ | PET = / | ||
+ | SRC = / | ||
+ | WORKING = / | ||
+ | XNAME = f5cehbi | ||
+ | </ | ||
+ | * Editar configuración | ||
+ | <code bash> | ||
+ | $ pipeconf.pl -p f5cehbi -a XNAME=f2cehbi | ||
+ | $ pipeconf.pl -p f5cehbi -r | ||
+ | BIDS = / | ||
+ | DATA = / | ||
+ | PET = / | ||
+ | SRC = / | ||
+ | WORKING = / | ||
+ | XNAME = f2cehbi | ||
+ | </ | ||
+ | * Crear nuevo archivo | ||
+ | <code bash> | ||
+ | $ pipeconf.pl -p test -c / | ||
+ | [osotolongo@brick03 acenip]$ pipeconf.pl -p test -r | ||
+ | BIDS = / | ||
+ | DATA = / | ||
+ | SRC = / | ||
+ | WORKING = / | ||
+ | XNAME = test | ||
+ | </ | ||
+ | |||
+ | Con este conjunto de operaciones basta para manipular la configuración de cualquier proyecto. | ||
+ | |||
+ | ==== Recuperar DICOMs de XNAT ==== | ||
+ | |||
+ | Aunque se supone que tenemos todos los DICOM en el server, lo cierto es que lo que nos suben puede estar muy desordenado. Para llevar las imagenes a XNAT ya nos hemos tomado el trabajo de ordenar todo y en XNAT deberia estar el proyecto muy ordenado. | ||
+ | |||
+ | Luego, la idea es que una vez que el proyecto en XNAT este cerrado, podemos recrear la colección de DICOMs en el directorio SRC del proyecto //local//. El script [[https:// | ||
+ | |||
+ | Por ejemplo, para el proyecto local //unidad//, el archivo de configuración, | ||
+ | |||
+ | < | ||
+ | [osotolongo@brick03 mri_face]$ cat ~/ | ||
+ | BIDS = / | ||
+ | DATA = / | ||
+ | SRC = / | ||
+ | WORKING = / | ||
+ | XNAME = tester | ||
+ | </ | ||
+ | |||
+ | nos dice que debe enlazarse con el proyecto XNAT //tester//. Asi que al ejecutar, | ||
+ | |||
+ | <code bash> | ||
+ | [osotolongo@brick03 mri_face]$ xnat2raw.pl -p unidad | ||
+ | </ | ||
+ | |||
+ | se crea un directorio por sujeto del proyecto dentro del //SRC//, | ||
+ | |||
+ | <code bash> | ||
+ | [osotolongo@brick03 mri_face]$ ls raw/ | ||
+ | 20050456 | ||
+ | </ | ||
+ | |||
+ | y el archivo CSV, // | ||
+ | |||
+ | < | ||
+ | [osotolongo@brick03 mri_face]$ cat unidad_MRI.csv | ||
+ | 0001, | ||
+ | 0002, | ||
+ | 0003, | ||
+ | </ | ||
+ | que podemos utilizar para crear facilmente la DB del proyecto y ejecutar la conversion a BIDS. | ||
===== DCM2BIDS ===== | ===== DCM2BIDS ===== | ||
Line 506: | Line 577: | ||
[[neuroimagen: | [[neuroimagen: | ||
- | ===== Bajar proyecto de XNAT ===== | + | ==== Bajar proyecto de XNAT ==== |
Una a vez procesada la segmentación de Freesurfer, si queremos hacer algo mas complejo, hemos de bajar ordenadamente el directorio de procesamiento de cada sujeto. El primer paso sería crear el proyecto local, pero no es necesario (al menos en principio) identificar la posicion de las imagenes RAW. Es decir que practicamente se puede hacer a mano a partir del listado de XNAT. | Una a vez procesada la segmentación de Freesurfer, si queremos hacer algo mas complejo, hemos de bajar ordenadamente el directorio de procesamiento de cada sujeto. El primer paso sería crear el proyecto local, pero no es necesario (al menos en principio) identificar la posicion de las imagenes RAW. Es decir que practicamente se puede hacer a mano a partir del listado de XNAT. | ||
Line 2092: | Line 2163: | ||
[osotolongo@brick03 facehbi]$ for x in `cat xnat_pet_experiments.list`; | [osotolongo@brick03 facehbi]$ for x in `cat xnat_pet_experiments.list`; | ||
</ | </ | ||
+ | |||
+ | ==== Extraer resultados ==== | ||
+ | |||
+ | La idea fundamental aqui es obtener los valores de SUVR y centiloide calculados en XNAT. Estos pueden obtenerse con, | ||
+ | |||
+ | <code bash> | ||
+ | $ xnatapic get_registration_report --project_id f5cehbi --output xnat_pet_results.csv | ||
+ | </ | ||
+ | |||
+ | y esto vamos a limpiarlo un poco, | ||
+ | |||
+ | <code bash> | ||
+ | $ awk -F"," | ||
+ | </ | ||
+ | |||
+ | La lista de sujetos del proyecto se obtiene con, | ||
+ | |||
+ | <code bash> | ||
+ | $ xnatapic list_subjects --project_id f5cehbi --label > xnat_subjects.list | ||
+ | </ | ||
+ | |||
+ | Esto se puede ordenar rapidamente haciendo, | ||
+ | |||
+ | <code bash> | ||
+ | $ sort -t, -k 1 xnat_subjects.list > xnat_subjects_sorted.list | ||
+ | </ | ||
+ | |||
+ | Y entonces podemos integrar los ID de proyecto con los resultaos, a traves de los ID de XNAT, y seleccionar los datos que queremos guardar, | ||
+ | |||
+ | <code bash> | ||
+ | $ join -t, xnat_subjects_sorted.list pet.results | sort -t, -k 2 | awk -F"," | ||
+ | </ | ||
+ | |||
+ | Todo esto se resume en el script [[https:// | ||
+ | |||
+ | * -p : nombre del proyecto en XNAT, se ignora si existe //-x//. Solo existe por compatibilidad. | ||
+ | * -x : nombre del proyecto en XNAT | ||
+ | * -o : archivo de salida (default STDOUT) | ||
+ | |||
Line 2288: | Line 2398: | ||
---- | ---- | ||
- | ==== Extraer resultados ==== | ||
- | |||
- | La idea fundamental aqui es obtener los valores de SUVR y centiloide calculados en XNAT. Estos pueden obtenerse con, | ||
- | |||
- | <code bash> | ||
- | $ xnatapic get_registration_report --project_id f5cehbi --output xnat_pet_results.csv | ||
- | </ | ||
- | |||
- | y esto vamos a limpiarlo un poco, | ||
- | |||
- | <code bash> | ||
- | $ awk -F"," | ||
- | </ | ||
- | |||
- | La lista de sujetos del proyecto se obtiene con, | ||
- | |||
- | <code bash> | ||
- | $ xnatapic list_subjects --project_id f5cehbi --label > xnat_subjects.list | ||
- | </ | ||
- | |||
- | Esto se puede ordenar rapidamente haciendo, | ||
- | |||
- | <code bash> | ||
- | $ sort -t, -k 1 xnat_subjects.list > xnat_subjects_sorted.list | ||
- | </ | ||
- | |||
- | Y entonces podemos integrar los ID de proyecto con los resultaos, a traves de los ID de XNAT, y seleccionar los datos que queremos guardar, | ||
- | |||
- | <code bash> | ||
- | $ join -t, xnat_subjects_sorted.list pet.results | sort -t, -k 2 | awk -F"," | ||
- | </ | ||
- | |||
- | Todo esto se resume en el script [[https:// | ||
- | |||
- | * -p : nombre del proyecto en XNAT, se ignora si existe //-x//. Solo existe por compatibilidad. | ||
- | * -x : nombre del proyecto en XNAT | ||
- | * -o : archivo de salida (default STDOUT) | ||
===== PET-tau ===== | ===== PET-tau ===== | ||
Line 2385: | Line 2458: | ||
</ | </ | ||
- | y para cada experiento | + | y para cada experiento |
<code perl> | <code perl> | ||
Line 2401: | Line 2474: | ||
my $fsout = $fsoutput.'/ | my $fsout = $fsoutput.'/ | ||
make_path $fsout; | make_path $fsout; | ||
- | </ | + | </ |
podemos utilizar las sintaxis de la funcion // | podemos utilizar las sintaxis de la funcion // | ||
Line 2713: | Line 2786: | ||
{{: | {{: | ||
+ | ===== Non image data ===== | ||
+ | ==== Datos demograficos ==== | ||
+ | Una de las cosas que hace a XNAT una buena herramienta es la capacidad de guardar datos de cualquier tipo. Vamos a intentar guardar los datos mas relevantes para el procesamiento. | ||
+ | Por ejemplo, los [[neuroimagen: | ||
+ | Para recuperar la edad debemos utilizar la API. | ||
+ | <code perl xnat_get_age.pl> | ||
+ | use strict; | ||
+ | use warnings; | ||
+ | use XNATACE qw(xget_session xget_subjects xget_mri xget_exp_data xget_sbj_demog); | ||
+ | use JSON; | ||
+ | use Date:: | ||
+ | use Math:: | ||
+ | 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 " | ||
+ | $oxfile = $xprj.' | ||
+ | my %xconf = xget_session(); | ||
+ | my $jid = $xconf{' | ||
+ | my %subjects = xget_subjects($xconf{' | ||
+ | foreach my $sbj (sort keys %subjects){ | ||
+ | $subjects{$sbj}{' | ||
+ | my $mri_date = xget_exp_data($xconf{' | ||
+ | my $dob = xget_sbj_demog($xconf{' | ||
+ | if ($mri_date and $dob){ | ||
+ | my $ddif = Delta_Format(DateCalc(ParseDate($dob), | ||
+ | $subjects{$sbj}{' | ||
+ | print " | ||
+ | } | ||
+ | } | ||
+ | open ODF, "> | ||
+ | print ODF " | ||
+ | foreach my $subject (sort keys %subjects){ | ||
+ | if(exists($subjects{$subject}{' | ||
+ | print ODF " | ||
+ | } | ||
+ | } | ||
+ | close ODF; | ||
+ | </ | ||
+ | La magia aqui la hace la función // | ||
+ | |||
+ | <code perl> | ||
+ | sub xget_sbj_demog { | ||
+ | my @xdata = @_; | ||
+ | my $crd = 'curl -f -X GET -b " | ||
+ | my $jres = qx/$crd/; | ||
+ | my $xfres = decode_json $jres; | ||
+ | #dump $xfres-> | ||
+ | return $xfres-> | ||
+ | } | ||
+ | </ | ||
+ | que permite recuperar los datos demograficos que esten almacenados. En este caso es el //dob// pero podria ser //gender// o cualquier otro que hayamos almacenado. | ||
+ | ==== Resultados de procesamiento ==== | ||
+ | Tambien podemos almacenar los resultados del procesamiento de imagen que se hayan hecho con herramientas ajenas a XNAT. Por ejemplo vamos a ver como almacenamos los [[neuroimagen: | ||
neuroimagen/pipe05.1641982031.txt.gz · Last modified: 2022/01/12 10:07 by osotolongo