Seed-based analysis
Theory
1) Mask creation
To create a mask based on anatomical atlas, you need first to find the desired structure using FSLView in the atlas nifti file saved usually in /usr/share/fsl/data/atlases. For example, the Harvard-Oxford atlases are stored in the HarvardOxford directory. Other directories containing more atlases are labeled in a similar way. The HarvardOxford folder contains several files, so it is important to choose the correct one. To find the desired structure easily, a file with appendix maxprob-thr25 would be suitable. In this file, all structures are saved in one volume. The number 25 means, that voxels having probability lower than 25% are not displayed (are thresholded). You can choose cortical or subcortical structure atlas, while cortical atlas offers now both lateralized and concatenated version. The subcortical atlas contains the side labels by default, which was already present in older versions of FSL. Furthermore, you can choose either 2 or 1 mm resolution.
After finding the desired structure, it is necessary to note the value from the intensity box
(after clicking on the structure in any slice), which actually represents the index of the structure (we will use the index in the next step). You can close the FSLView afterwards and run the following command in the terminal:
fslroi <input> <output> <tmin> <tsize>
input: NIFTI file of the corresponding atlas appended with prob (not maxprob)
output: custom name of the output file containing the ROI mask
tmin:
volume index, where the desired structure is stored; it corresponds to the index (intensity value) from the maxprob atlas, from which you subtract 1 (the first volume has index 0).
tsize: here we put 1 (since we want to extract just one volume)
An example which extracts volume containing the Frontal Pole structure: fslroi HarvardOxford-cort-prob-2mm.
2) Mask transformation
Further text is not translated, yet. Sorry!
Další
krok záleží na tom, jaký druh analýzy budeme provádět. Pokud chceme
extrahovat signál z původních dat (např. pro seed-based analýzu), musíme
masku nejdřív převést do jejich prostoru. K tomu je potřeba matice (.mat) nebo warp (_warp.nii.gz)
soubor (ten je přítomen v případě nelineární registrace), které vytváří
nástroj Flirt (lineární registrace, s GUI), respektive fnirt
(nelineární registrace, bez GUI). Registrace je samozřejmě i běžnou
součástí Single-subject analýzy; potřebné soubory jsou vždy ve složce <název_analýzy>.feat/reg.
Jelikož je celý poněkud trochu komplexnější a je více variant, je zde
uveden pouze jeden způsob. Nasledující postup je vhodný, pokud funkční
data byla registrována nejdřív lineárně na MPRAGE
(*.feat/reg/highres.nii.gz) a ten poté nelineárně na MNI šablonu
(*.feat/reg/standard.nii.gz). Potřebné soubory jsou v podsložce reg
Single-subject analýzy (viz výše). Následující příkazy na sebe přímo
navazují a jsou spouštěny z adresáře <běh>.feat/reg:
invwarp -w example_func2standard_warp -o standard2example_func_warp -r example_func
applywarp -i <nifti_soubor_masky> -o mask2example_func -r example_func -w standard2example_func_warp
Příkazy pro konverzi z prostoru morfologického T1-váženého obrazu s vysokým rozlišením (MPRAGE):
convert_xfm -omat highres2example_func.mat -inverse example_func2highres.mat
flirt -in <nifti_soubor_masky> -ref example_func -applyxfm -init highres2example_func.mat -out mask2example_func
Celý výše popsaný postup je potřeba provést zvlášť pro každý funkční běh!
3) Prahování masky
Dalším krokem je strukturu adekvátně naprahovat. Jelikož každý voxel je v dané struktuře jen s určitou pravděpodobností, je vhodné odstranit ty, které jsou spíš mimo mozek nebo už v okolních oblastech. U velkých struktur (např. bílá hmota), kde si chceme být jistí, že použijeme jen voxely z dané struktury, je relativně jistý práh 95%. Velká část (především menších nebo méně konstantních) struktur ale takové voxely v atlase vůbec nemusí mít, navíc po převzorkování a snížení rozlišení transformací se jejich objem ještě zmenší, takže hrozí nebezpečí, že maska vůbec neprojde prahováním. Hodnotu pro prahování je proto potřeba odhadnout empiricky a ověřit vizuálně v fslview. Nedoporučuji používat hodnoty pod 50% (resp. 0.5 u binárních masek), jelikož jen voxely s pravděpodobností nad 50% se nachází spíše ve zkoumané struktuře, než někde jinde. Obecně se prahování provádí následujícím příkazem:
fslmaths <soubor_transformované_masky> -thr <hodnota_prahu> <výstupní soubor>
4) Binarizace
Posledním krokem je binarizace masky, která sice pro některé nástroje FSL není nutná (berou jakoukoliv nenulovou hodnotu jako 1), ale pro jistotu je vhodné ji provést vždy.
fslmaths <soubor_prahované_masky> -bin <výstupní soubor>
Tím je maska pro daný běh hotová. Pokud je hodně dat, je celý proces časově náročný, takže v laboratoři je připraven automatický skript, který ovšem očekává naši adresářovou strukturu. Rád bych dále upozornil, že pořadí kroků, které jsem uvedl není zcela striktní, ale má své opodstatnění. Transformací prahovaných anebo binarizovaných dat se totiž opět rozostří (interpolují) okraje masky a tu je potřeba znovu prahovat. Primárně binární masky (např. clustery z předchozích analýz), doporučuji po transformaci prahovat na hodnotu 0.5 a poté opět binarizovat.
Automatický skript
1) Vygenerování masky a časové řady z oblasti zájmu
Pro vygenerování masky je potřeba provést nejdříve filtraci a registraci dat na standardní šablonu (tedy provést SIngle-subject analýzu, která má shodný design jako pozdější seed analýza). Skript pro zpracování masky je součástí automatické smyčky, spouští se z kořenového adresáře studie (např. NM-RMV) a má následující syntaxi:
loop [čísla studií] -seed=<*.feat>:<možnosti>
čísla studií
- pokud jsou definována (buď oddělena čárkou nebo jako rozsah s
pomlčkou, v obou případech bez mezer), smyčka prochází jen uvedené
studie a ignoruje vše ostatní, v opačném případě prochází vzestupně
všechny studie
*.feat
- název feat adresářů (ve formátu jako pro příkaz ls v úrovni adresáře
Results), které slouží jako zdroj filtrovaných dat a matice pro
registraci; skript vyžaduje data, která byla regitrována nelineárně ve
dvou krocích
možnosti
- jsou uváděné bezprostředně za dvojtečkou bez mezer a jsou odděleny
čárkami, jakékoliv mezery např. v názvech souborů je potřeba předsadit
zpětným lomítkem (""): m=<cesta k masce> - je povinným parametrem a definuje úplnou cestu k masce (včetně přípony nii.gz)
l=<štítek> - je nepovinným údajem, definuje štítek pro vygenerované soubory (výchozí je seed)
b (výchozí) nebo p - nepovinný přepínač (b
je výchozí), b definuje soubor s binární maskou, p soubor s maskou
vygenerovanou z probabilistického atlasu (např. HarvardOxford) a očekává
hodnoty voxelů od 0 do 100
Skript nejdříve transformuje a binarizuje masku (viz výše), výstupy ukládá do složky <běh>.feat/reg a poté pomocí fslmeants vygeneruje průměrný signál za masky aplikované na filtrovaná data (filtered_func_data.nii.gz). Výstupní soubor (textový soubor obsahující na každém řádku jednu hodnotu pro každý objem) je pojmenován jako <štítek>_timecourse_demeaned a je uložen v adresáři <běh>.feat zdrojové studie. Zároveň se zkopíruje do adresáře Results/seeds/<běh>/, kde jej posléze hledá navazující skript. Tento soubor je bezprostředně použitelný k zadání jako samostatná EV do GLM analýzy.
2) GLM seed analýza
Pro GLM analýzu je potřeba nejdříve ručně pomocí GUI Feat vytvořit vzorový design. Tento postup je popsán an stránkách FSL. Takto lze ovšem spustit vždy jen jednu analýzu zároveň, což je při větším počtu dat a oblastí zájmu časově náročné.
POZOR: Design je nutno připravit se stejným Pre-Stats jako při analýze, ze které byl extrahován signál z oblasti zájmu!
Další postup je tedy již automatizován. Také tento skript je součástí automatické smyčky loop a spouští se ze stejného adresáře jako předchozí krok:
loop [čísla studiií] -f=<*.nii.gz>:<možnosti>
čísla studií
- pokud jsou definována (buď oddělena čárkou nebo jako rozsah s
pomlčkou, v obou případech bez mezer), smyčka prochází jen uvedené
studie a ignoruje vše ostatní, v opačném případě prochází vzestupně
všechny studie
*.nii.gz - je název vstupních NIFTI souborů (ve formátu jako pro příkaz ls v úrovni adresáře Results)
možnosti
- jsou uváděné bezprostředně za dvojtečkou bez mezer a jsou odděleny
čárkami, jakékoliv mezery např. v názvech souborů je potřeba předsadit
zpětným lomítkem (""): d=<cesta k design.fsf>
- je povinným parametrem a definuje úplnou cestu k souboru design.fsf,
který je šablonou pro design Seed analýzy (včetně přípony fsf)
o=<štítek>
- je nepovinným údajem, definuje štítek pro vygenerované adresáře,
který následuje název odvozený od vstupního souboru (výchozí je prázdný)
e=<název souboru s daty>
- je pro Seed analýzu prakticky povinným parametrem a definuje název
souboru, ve kterém je uložena časová řada pro Seed-based analýzu,
aktuální verze skriptu hledá tento soubor v adresáři
Results/seeds/<název NIFTI souboru> (ověřit aktuální verzi!)
mpr -
nepovinný přepínač (výchozí vypnuto), nutí skript aktualizovat úplnou
cestu k Mprage_brain.nii.gz (nezbytné pro data registrováná nelineárně),
soubor musí být v adresáři Results
mps - má stejnou funkci jako výše uvedený přepínač, cestu aktualizuje na MprageS_brain.nii.gz (pro převrácené analýzy)
r=<REGEXP1@REGEXP2>
- nepovinný parametr, který je možno přidat opakovaně na jeden řádek, v
souboru design.fsf nahrazuje pomocí příkazu sed hledaný řetězec
(REGEXP1) řetězcem druhým (REGEXP2), akceptuje syntax jako sed
parametry regresorů mp, wm, csf, swm, scsf, gs
přidávají do souboru design.fsf patřičné regresory. Parametr mp můsí
být uveden vždy jako první. Více v kapitole potlačení šumu.
Skript vytvoří v adresáři Results podsložku designs, ve které posléze připraví design.fsf z uvedené šablony. Poté spustí standardně příkaz feat designs/<název odvozený od výstupního adresáře>/design.fsf. Následuje skupinová analýza, která již probíhá standardně jako analýza blokové nebo event-related úlohy.
Zpět na Manuál.
Back to Process.