User Tools

Site Tools


neuroimagen:adni_smc

Sacando los SMC de ADNI DB

Generalidades

El objetivo general es extraer un grupo de sujetos similar a la poblacion del estudio FACEHBI. Es decir, sujetos sanos con quejas subjetivas de memoria a los que se haya hecho scaners de MRI y PET.

A tener en cuenta,

  1. El PET de ADNI se realiza con AV45 y el de FACEHBI con FBB
  2. En ADNI SMC significa Significant Memory Concern. Cual es la diferencia entre esto y Subjective Memory Complaints lo dejo a los grandes neurologos, yo voy a extraerlos datos y punto.

Escogiendo sujetos

¿Que sujetos son marcados como SMC en la primera visita?

library("ADNIMERGE")
adni_smc <- adnimerge[adnimerge[,"DX.bl"]== "SMC" & !is.na(adnimerge$DX.bl),]

¿Cuantos tienen AV45?

library("ADNIMERGE")
adni_smc <- adnimerge[adnimerge[,"DX.bl"]== "SMC" & !is.na(adnimerge$DX.bl) & !is.na(adnimerge$AV45),]

De estos, ¿cuantos tienen MRI?

library("ADNIMERGE")
adni_smc <- adnimerge[adnimerge[,"DX.bl"]== "SMC" & !is.na(adnimerge$DX.bl) & !is.na(adnimerge$AV45) & !is.na(adnimerge$WholeBrain),]

Ahora, estos no son sujetos, son registros donde los sujetos se repiten, si empiezan como SMC y convierten todavia estan aqui. ¿Como quito los MCI y demas?

library("ADNIMERGE")
adni_smc <- adnimerge[adnimerge[,"DX.bl"]== "SMC" & !is.na(adnimerge$DX.bl) & !is.na(adnimerge$AV45) & !is.na(adnimerge$WholeBrain) & adnimerge[,"DX"]== "CN",]

Ahora me voy a quedar con el baseline

adni_smc_bl <-adni_smc[adni_smc[,"VISCODE"]=="bl",]

Esto deja un conjunto de 96 sujetos, marcados como SMC, con AV45 y MRI.

La demografia de los sujetos se puede obtener haciendo un merge con ptdemog en caso necesario.

Ver lista de tablas aqui: http://detritus.fundacioace.com:8787/help/library/ADNIMERGE/html/00Index.html

Imagenes

Escogo los ID en una tabla aparte,

> smc_rids <- adni_smc_bl[,c("RID", "PTID")]
> write.csv(smc_rids, file="~/facehbi/adni_img_rids.csv", row.names = FALSE)
[osotolongo@detritus facehbi]$ head adni_img_rids.csv 
"RID","PTID"
4785,"035_S_4785"
5075,"100_S_5075"
5078,"041_S_5078"
5079,"027_S_5079"
5082,"041_S_5082"
5083,"027_S_5083"
5093,"027_S_5093"
5096,"100_S_5096"
5097,"041_S_5097"

Lo pongo en una fila, separados por coma,

[osotolongo@detritus facehbi]$ awk -F"," {'print $1'} adni_img_rids.csv | grep -v "NA\|RID" |  sed ':a;N;$!ba;s/\n/,/g'
4785,5075,5078,5079,5082,5083,5093,5096,5097,5100,5102,5109,5110,5113,5118,5121,5125,5126,5127,5130,5131,5132,5137,5140,5141,5142,5147,5150,5153,5154,5157,5158,5159,5166,5167,5169,5170,5171,5175,5176,5177,5178,5185,5193,5195,5197,5198,5199,5200,5202,5203,5204,5207,5212,5213,5214,5218,5219,5222,5227,5228,5230,5234,5235,5236,5237,5242,5243,5244,5248,5250,5253,5256,5258,5259,5261,5263,5265,5266,5267,5269,5271,5272,5273,5277,5278,5279,5280,5283,5285,5288,5289,5290,5292,5296

El siguiente paso es ir a la web de ADNI. Aqui Download –> Image Collections –> Advanced Search y copiar la lista de IDs, separadas por comas, en el campo Subject ID y llenar el campo Image Description con “MPRAGE” (asi, con las comillas).

El resultado se añade a una collection y desde ahi se puede bajar en formato NIFTI. Para bajar los PETs es el mismo procedimiento pero basta con escoger el radiotrazador.

Nota: Importante bajar el CSV para revisar los resultados.

Una vez bajadas las imagenes, se suben a detritus, se descomprime el archivo y se organizan.

Organizando segun sujeto

Las imagenes de ADNI estan organizadas en una estructura de subdirectorios que dependen de los PTID,

[osotolongo@detritus adni_mri]$ ls ADNI/
002_S_5178  009_S_5125	012_S_5157  013_S_5171	020_S_5203  033_S_5198	036_S_5248  037_S_5222	041_S_5100  041_S_5244	053_S_5272  072_S_5207	082_S_5279  100_S_5280	130_S_5258  153_S_5261
002_S_5230  009_S_5147	012_S_5195  018_S_5250	024_S_5290  033_S_5235	036_S_5271  041_S_5078	041_S_5131  041_S_5253	053_S_5296  073_S_5167	100_S_5075  114_S_5234	135_S_5113  153_S_5267
002_S_5256  009_S_5176	012_S_5213  019_S_5242	032_S_5263  033_S_5259	036_S_5283  041_S_5082	041_S_5141  051_S_5285	067_S_5159  073_S_5227	100_S_5096  130_S_5142	135_S_5269  941_S_5193
006_S_5153  012_S_5121	013_S_5137  020_S_5140	032_S_5289  035_S_4785	037_S_5126  041_S_5097	041_S_5204  053_S_5202	067_S_5212  082_S_5278	100_S_5102  130_S_5175	135_S_5273
[osotolongo@detritus adni_mri]$ ls ADNI/
002_S_5178  009_S_5125	012_S_5157  013_S_5171	020_S_5203  033_S_5198	036_S_5248  037_S_5222	041_S_5100  041_S_5244	053_S_5272  072_S_5207	082_S_5279  100_S_5280	130_S_5258  153_S_5261
002_S_5230  009_S_5147	012_S_5195  018_S_5250	024_S_5290  033_S_5235	036_S_5271  041_S_5078	041_S_5131  041_S_5253	053_S_5296  073_S_5167	100_S_5075  114_S_5234	135_S_5113  153_S_5267
002_S_5256  009_S_5176	012_S_5213  019_S_5242	032_S_5263  033_S_5259	036_S_5283  041_S_5082	041_S_5141  051_S_5285	067_S_5159  073_S_5227	100_S_5096  130_S_5142	135_S_5269  941_S_5193
006_S_5153  012_S_5121	013_S_5137  020_S_5140	032_S_5289  035_S_4785	037_S_5126  041_S_5097	041_S_5204  053_S_5202	067_S_5212  082_S_5278	100_S_5102  130_S_5175	135_S_5273
[osotolongo@detritus adni_mri]$ ls ADNI/002_S_5178/
MPRAGE
[osotolongo@detritus adni_mri]$ ls ADNI/002_S_5178/MPRAGE/
2013-05-16_19_31_16.0
[osotolongo@detritus adni_mri]$ ls ADNI/002_S_5178/MPRAGE/2013-05-16_19_31_16.0/
S189796
[osotolongo@detritus adni_mri]$ ls ADNI/002_S_5178/MPRAGE/2013-05-16_19_31_16.0/S189796/
ADNI_002_S_5178_MR_MPRAGE_br_raw_20130517112247085_119_S189796_I372851.nii

Estos ID los tenemos en un archivo exportado de R, asociados a los RID (bajo los que esta toda la info en ADNI)

$ head adni_img_rids.csv
"RID","PTID"
4785,"035_S_4785"
5075,"100_S_5075"
5078,"041_S_5078"
5079,"027_S_5079"
5082,"041_S_5082"
5083,"027_S_5083"
5093,"027_S_5093"
5096,"100_S_5096"
5097,"041_S_5097"

Voy a limpiar un poco antes de nada,

$ sed 's/"//g' adni_img_rids.csv | grep -v "NA" > rids.csv
$ head rids.csv 
RID,PTID
4785,035_S_4785
5075,100_S_5075
5078,041_S_5078
5079,027_S_5079
5082,041_S_5082
5083,027_S_5083
5093,027_S_5093
5096,100_S_5096
5097,041_S_5097

Ahora es cosa de copiar segun los IDs,

cpadni.pl
#!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dump qw(dump);
my $frules = "rids.csv";
my $adni_s = "ADNI";
my $dest = "mri";
my $series = 0;
my %arules;
open IDR, "<$frules" or die "No rules file here, asshole\n";
while(<IDR>){
	if(/^\d{4},.*/){
		my ($value, $key) = /^(\d*),(.*)$/;
		chomp $key;
		$arules{$key} = $value;
	}
}
close(IDR);
foreach my $ptid (sort keys %arules){
	if(-d "$adni_s/$ptid"){
		my $ford = 'find '.$adni_s.'/'.$ptid.'/ -name *.nii';
		my @s_files = qx/$ford/;
		my $count = 10;
		foreach my $nii_file (@s_files){
			chomp $nii_file;
			$count++;
			my $wn = sprintf("%04d", $count);
			my $order = "\$FSLDIR/bin/imcp $nii_file $dest/smc$arules{$ptid}s$wn.nii.gz";
			system($order);	
		}
	}
}

de manera que quedan organizados,

$ ls mri
smc4785s0001.nii.gz  smc5113s0001.nii.gz  smc5142s0001.nii.gz  smc5176s0001.nii.gz  smc5207s0001.nii.gz  smc5242s0001.nii.gz  smc5259s0001.nii.gz  smc5278s0001.nii.gz
smc5075s0001.nii.gz  smc5121s0001.nii.gz  smc5147s0001.nii.gz  smc5178s0001.nii.gz  smc5212s0001.nii.gz  smc5244s0001.nii.gz  smc5261s0001.nii.gz  smc5279s0001.nii.gz
smc5078s0001.nii.gz  smc5125s0001.nii.gz  smc5153s0001.nii.gz  smc5193s0001.nii.gz  smc5213s0001.nii.gz  smc5248s0001.nii.gz  smc5263s0001.nii.gz  smc5280s0001.nii.gz
smc5082s0001.nii.gz  smc5126s0001.nii.gz  smc5157s0001.nii.gz  smc5195s0001.nii.gz  smc5222s0001.nii.gz  smc5250s0001.nii.gz  smc5267s0001.nii.gz  smc5283s0001.nii.gz
smc5096s0001.nii.gz  smc5131s0001.nii.gz  smc5159s0001.nii.gz  smc5198s0001.nii.gz  smc5227s0001.nii.gz  smc5253s0001.nii.gz  smc5269s0001.nii.gz  smc5285s0001.nii.gz
smc5097s0001.nii.gz  smc5137s0001.nii.gz  smc5167s0001.nii.gz  smc5202s0001.nii.gz  smc5230s0001.nii.gz  smc5253s0002.nii.gz  smc5271s0001.nii.gz  smc5289s0001.nii.gz
smc5100s0001.nii.gz  smc5140s0001.nii.gz  smc5171s0001.nii.gz  smc5203s0001.nii.gz  smc5234s0001.nii.gz  smc5256s0001.nii.gz  smc5272s0001.nii.gz  smc5290s0001.nii.gz
smc5102s0001.nii.gz  smc5141s0001.nii.gz  smc5175s0001.nii.gz  smc5204s0001.nii.gz  smc5235s0001.nii.gz  smc5258s0001.nii.gz  smc5273s0001.nii.gz  smc5296s0001.nii.gz

Nota: El mismo script se usa para convertir los AV-45, editando los paths y la serie.

neuroimagen/adni_smc.txt · Last modified: 2020/08/04 10:58 (external edit)