This shows you the differences between two versions of the page.
neuroimagen:afni_proc [2020/01/31 08:52] osotolongo [Procesando fMRI con AFNI (single subject)] |
neuroimagen:afni_proc [2020/08/04 10:58] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Procesando fMRI con AFNI (single subject) ====== | ||
- | |||
- | Voy a seguir los pasos de aqui, | ||
- | |||
- | https:// | ||
- | |||
- | **Revisar aqui primero :** | ||
- | https:// | ||
- | ===== Construyendo el template ===== | ||
- | |||
- | Siguiendo esta entrada del blog lanzo // | ||
- | |||
- | {{ : | ||
- | |||
- | Pero no voy a correr el programa.En lugar de esto exporto los comandos que se correran, | ||
- | |||
- | <code bash> | ||
- | # | ||
- | |||
- | # created by uber_subject.py: | ||
- | # creation date: Fri Jan 24 16:33:30 2020 | ||
- | |||
- | # set data directories | ||
- | set top_dir | ||
- | set anat_dir | ||
- | set epi_dir | ||
- | |||
- | # set subject and group identifiers | ||
- | set subj = sub_0001 | ||
- | set group_id | ||
- | |||
- | # run afni_proc.py to create a single subject processing script | ||
- | afni_proc.py -subj_id $subj \ | ||
- | -script proc.$subj -scr_overwrite | ||
- | -blocks despike tshift align tlrc volreg blur mask regress \ | ||
- | -copy_anat $anat_dir/ | ||
- | -tcat_remove_first_trs 0 \ | ||
- | -dsets $epi_dir/ | ||
- | -volreg_align_to third \ | ||
- | -volreg_align_e2a | ||
- | -volreg_tlrc_warp | ||
- | -blur_size 4.0 \ | ||
- | -regress_censor_motion 0.2 \ | ||
- | -regress_censor_outliers 0.1 \ | ||
- | -regress_bandpass 0.01 0.1 \ | ||
- | -regress_apply_mot_types demean deriv \ | ||
- | -regress_reml_exec | ||
- | -regress_est_blur_errts | ||
- | |||
- | </ | ||
- | |||
- | Este script lo voy a tomar de template para crear los scripts que necesite ejecutar. | ||
- | |||
- | <file bash afni_proc.template> | ||
- | # | ||
- | |||
- | # created by uber_subject.py: | ||
- | # creation date: Fri Jan 24 16:33:30 2020 | ||
- | |||
- | # set data directories | ||
- | set top_dir | ||
- | set anat_dir | ||
- | set epi_dir | ||
- | |||
- | # set subject and group identifiers | ||
- | set subj = < | ||
- | set group_id | ||
- | |||
- | # run afni_proc.py to create a single subject processing script | ||
- | afni_proc.py -subj_id $subj \ | ||
- | -script proc.$subj -scr_overwrite | ||
- | -blocks despike tshift align tlrc volreg blur mask regress \ | ||
- | -copy_anat $anat_dir/< | ||
- | -tcat_remove_first_trs 0 \ | ||
- | -dsets $epi_dir/< | ||
- | -volreg_align_to third \ | ||
- | -volreg_align_e2a | ||
- | -volreg_tlrc_warp | ||
- | -blur_size 4.0 \ | ||
- | -regress_censor_motion 0.2 \ | ||
- | -regress_censor_outliers 0.1 \ | ||
- | -regress_bandpass 0.01 0.1 \ | ||
- | -regress_apply_mot_types demean deriv \ | ||
- | -regress_reml_exec | ||
- | -regress_est_blur_errts | ||
- | </ | ||
- | |||
- | Ojo que este script solo creara otro script, que es el que hay que ejecutar, el output de este escript es, | ||
- | <code bash> | ||
- | [osotolongo@detritus subj.sub_0001]$ ./ | ||
- | -- applying orig view as +orig | ||
- | -- tcat: reps is now 200 | ||
- | -- volreg: base/sub indices are 0, 2 | ||
- | ++ volreg: warp and align to isotropic 3 mm tlrc voxels | ||
- | -- masking: group anat = ' | ||
- | ++ updating polort to 3, from run len 426.0 s | ||
- | -- will apply motion types: demean, deriv | ||
- | ++ adding labels: [] | ||
- | -- will add 3dClustSim table to stats dset | ||
- | -- using default: will not apply EPI Automask | ||
- | (see ' | ||
- | |||
- | ------------------------------------- | ||
- | ** warning have only 1 run to analyze | ||
- | ------------------------------------- | ||
- | |||
- | --> script is file: proc.sub_0001 | ||
- | consider the script execution command: | ||
- | |||
- | tcsh -xef proc.sub_0001 |& tee output.proc.sub_0001 | ||
- | </ | ||
- | |||
- | ===== Del template a los scripts ===== | ||
- | |||
- | Primero escribimos el template con tags que sean simples de sustituir, | ||
- | |||
- | <code bash afni_proc_rest.template> | ||
- | # | ||
- | |||
- | # created by uber_subject.py: | ||
- | # creation date: Fri Jan 24 16:33:30 2020 | ||
- | |||
- | # set data directories | ||
- | set top_dir | ||
- | set anat_dir | ||
- | set epi_dir | ||
- | |||
- | # set subject and group identifiers | ||
- | set subj = < | ||
- | set group_id | ||
- | |||
- | # run afni_proc.py to create a single subject processing script | ||
- | afni_proc.py -subj_id $subj \ | ||
- | -script proc.$subj -scr_overwrite | ||
- | -blocks despike tshift align tlrc volreg blur mask regress \ | ||
- | -copy_anat < | ||
- | -tcat_remove_first_trs 0 \ | ||
- | -dsets < | ||
- | -volreg_align_to third \ | ||
- | -volreg_align_e2a | ||
- | -volreg_tlrc_warp | ||
- | -blur_size 4.0 \ | ||
- | -regress_bandpass 0.01 0.1 \ | ||
- | -regress_apply_mot_types demean deriv \ | ||
- | -regress_reml_exec | ||
- | -regress_est_blur_errts | ||
- | |||
- | </ | ||
- | |||
- | Ahora, para cada sujeto a analizar, debemos crear este script, ejecutarlo, tomar el script resultante y ejecutarlo, esto ultimo directamente en el directorio de output, | ||
- | |||
- | ++++ lo mas rapido es irlo haciendo on-the-fly, | ||
- | <code perl dfmriafni.pl> | ||
- | # | ||
- | use strict; use warnings; | ||
- | |||
- | use File:: | ||
- | use NEURO4 qw(print_help load_project shit_done cut_shit check_subj check_or_make); | ||
- | use Data::Dump qw(dump); | ||
- | use File:: | ||
- | use File:: | ||
- | use File:: | ||
- | |||
- | my $template = $ENV{' | ||
- | my $cfile=""; | ||
- | |||
- | @ARGV = (" | ||
- | |||
- | while (@ARGV and $ARGV[0] =~ /^-/) { | ||
- | $_ = shift; | ||
- | last if /^--$/; | ||
- | if (/^-cut/) { $cfile = shift; chomp($cfile); | ||
- | if (/^-h$/) { print_help $ENV{' | ||
- | } | ||
- | my $study = shift; | ||
- | unless ($study) { print_help $ENV{' | ||
- | my %std = load_project($study); | ||
- | my $w_dir = $std{' | ||
- | my $data_dir = $std{' | ||
- | my $bids_dir = $std{' | ||
- | my $fsdir = $ENV{' | ||
- | my $db = $std{' | ||
- | my $fmriout_dir = $data_dir.'/ | ||
- | check_or_make($fmriout_dir); | ||
- | my $outdir = " | ||
- | check_or_make($outdir); | ||
- | |||
- | my @subjects = cut_shit($db, | ||
- | |||
- | foreach my $subject (@subjects) { | ||
- | my %nifti = check_subj($std{' | ||
- | if($nifti{' | ||
- | chdir($outdir); | ||
- | my $creator = $outdir.'/ | ||
- | open TPF, "< | ||
- | open CRF, "> | ||
- | while(< | ||
- | s/< | ||
- | s/< | ||
- | s/< | ||
- | s/< | ||
- | s/< | ||
- | print CRF; | ||
- | print; | ||
- | } | ||
- | close CRF; | ||
- | close TPF; | ||
- | chmod 0755, $creator; | ||
- | system($creator); | ||
- | my $orderfile = $outdir.'/' | ||
- | open ORD, "> | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD 'srun ' | ||
- | close ORD; | ||
- | chdir($fmriout_dir); | ||
- | system(" | ||
- | } | ||
- | } | ||
- | my $orderfile = $outdir.'/ | ||
- | open ORD, "> | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD '# | ||
- | print ORD ": | ||
- | close ORD; | ||
- | my $order = ' | ||
- | exec($order); | ||
- | </ | ||
- | ++++ | ||
- | |||
- | Es bastante rápido y deja el output en // | ||
- | |||
- | <code bash> | ||
- | [osotolongo@detritus mopead]$ ls afni_out/ | ||
- | sub_0001.results | ||
- | sub_0002.results | ||
- | sub_0003.results | ||
- | sub_0004.results | ||
- | sub_0005.results | ||
- | sub_0006.results | ||
- | sub_0007.results | ||
- | sub_0008.results | ||
- | sub_0009.results | ||
- | sub_0010.results | ||
- | sub_0011.results | ||
- | sub_0012.results | ||
- | sub_0013.results | ||
- | [osotolongo@detritus mopead]$ ls afni_out/ | ||
- | all_runs.sub_0001+tlrc.BRIK | ||
- | all_runs.sub_0001+tlrc.HEAD | ||
- | anat_final.sub_0001+tlrc.BRIK | ||
- | anat_final.sub_0001+tlrc.HEAD | ||
- | bandpass_rall.1D | ||
- | blur.err_reml.1D | ||
- | blur.errts.1D | ||
- | blur_est.sub_0001.1D | ||
- | ClustSim.mask | ||
- | ClustSim.NN1.1D | ||
- | ClustSim.NN1.niml | ||
- | ClustSim.NN2.1D | ||
- | ClustSim.NN2.niml | ||
- | ClustSim.NN3.1D | ||
- | ClustSim.NN3.niml | ||
- | dfile.r01.1D | ||
- | dfile_rall.1D | ||
- | |||
- | </ | ||
- | |||
- | ===== Resultados ===== | ||
- | |||
- | Revisar esto visualmente con AFNI tiene truco, | ||
- | |||
- | <code bash> | ||
- | [osotolongo@detritus mopead]$ cd afni_out/ | ||
- | [osotolongo@detritus sub_0001.results]$ afni -dset all_runs.sub_0001+tlrc | ||
- | |||
- | Thanks go to J Evans for useful feedback | ||
- | |||
- | Initializing: | ||
- | [osotolongo@detritus sub_0001.results]$ . Widgets...... Input files: | ||
- | | ||
- | Time series | ||
- | NLfit & NLerr= Optimizer (AFNI_NLFIM_METHOD) is SIMPLEX | ||
- | NLfit & NLerr= Found 26 models | ||
- | | ||
- | |||
- | ++ NOTE: This version of AFNI was built Sep 30 2013 ++ | ||
- | ++ NOTE: ' | ||
- | ++ NOTE: you may want to consider creating a ' | ||
- | | ||
- | | ||
- | </ | ||
- | |||
- | {{ : | ||
- | |||
- | **nota:** Necesito otro monitor mas! | ||
- | |||
- | {{ : | ||
- | |||
- | https:// | ||
- | |||
- | Para el //resting state//, el archivo de output con los datos limpios es // | ||
- | |||
- | <code bash> | ||
- | [osotolongo@detritus sub_0001.results]$ 3dAFNItoNIFTI -prefix sub_0001_fmri_clean errts.sub_0001+tlrc | ||
- | ++ 3dAFNItoNIFTI: | ||
- | [osotolongo@detritus sub_0001.results]$ fslinfo sub_0001_fmri_clean.nii | ||
- | data_type | ||
- | dim1 54 | ||
- | dim2 64 | ||
- | dim3 50 | ||
- | dim4 200 | ||
- | datatype | ||
- | pixdim1 | ||
- | pixdim2 | ||
- | pixdim3 | ||
- | pixdim4 | ||
- | cal_max | ||
- | cal_min | ||
- | file_type | ||
- | [osotolongo@detritus sub_0001.results]$ 3dAFNItoNIFTI -prefix sub_0001_anat pb03.sub_0001.r01.volreg+tlrc | ||
- | ++ 3dAFNItoNIFTI: | ||
- | [osotolongo@detritus sub_0001.results]$ fslinfo sub_0001_anat.nii | ||
- | data_type | ||
- | dim1 54 | ||
- | dim2 64 | ||
- | dim3 50 | ||
- | dim4 200 | ||
- | datatype | ||
- | pixdim1 | ||
- | pixdim2 | ||
- | pixdim3 | ||
- | pixdim4 | ||
- | cal_max | ||
- | cal_min | ||
- | file_type | ||
- | [osotolongo@detritus sub_0001.results]$ fslview_deprecated sub_0001_anat.nii sub_0001_fmri_clean.nii -l " | ||
- | |||
- | </ | ||
- | |||
- | {{ : | ||
- | {{ : | ||
- | |||
- | ===== y ahora? ===== | ||
- | |||
- | Postprocessing, | ||
- | |||
- | * https:// | ||
- | * https:// | ||
- | * https:// | ||
- | * https:// | ||