Table of Contents
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,
- El PET de ADNI se realiza con AV45 y el de FACEHBI con FBB
- 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.