FSL -我可以将fsf文件(程序安装文件)中的路径设置为当前工作目录吗?



我正在执行MRI分析,并编写了一个脚本,该脚本循环遍历每个受试者的所有扫描,下一步是运行一个名为feat的命令,该命令可以在下面的编码块末尾看到。

#! /bin/sh
path=~/rj82/james_folder/data_copy/
cd $path
# Loop through the MND and Control directories
for directory in * ; do
cd $path
cd $directory
# Loop through each subject in each directory
for subject in ??? ; do
cd $path/$directory/$subject
# Loop through each scan for each subject
for scan in MR?? ; do
cd $path/$directory/$subject/$scan
# Run feat on each scan
feat design.fsf
cd ..
done
done
done

您还将看到feat接受一个design.fsf文件,该文件为feat设置了参数。为了制作这个文件,我使用了一个MRI扫描作为输入数据。

下面我附加了design.fsf代码中的区域,这些区域显示了用于创建文件的文件的路径。

# 4D AVW data or FEAT directory (1)
set feat_files(1) "/projects/rj82/james_folder/data_copy/mnd/002/MR02/fmri/fmri_data"
# Add confound EVs text file
set fmri(confoundevs) 0
# Session's alternate reference image for analysis 1
set alt_ex_func(1) "/projects/rj82/james_folder/data_copy/mnd/002/MR02/fmri_ref/fmri_ref_brain"
# B0 unwarp input image for analysis 1
set unwarp_files(1) "/projects/rj82/james_folder/data_copy/mnd/002/MR02/fmaps/fmap_rads"
# B0 unwarp mag input image for analysis 1
set unwarp_files_mag(1) "/projects/rj82/james_folder/data_copy/mnd/002/MR02/fmaps/mag_e1_brain"
# Subject's structural image for analysis 1
set highres_files(1) "/projects/rj82/james_folder/data_copy/mnd/002/MR02/t1/t1_brain"

如果我运行脚本(第一个编码块)壮举将正确运行,但是由于design.fsf文件中的路径仅指一次扫描,它将在此单次扫描上连续运行壮举。

由于每个主题中的子目录和文件具有相同的名称,我想用脚本(第一个编码块)中的当前目录替换路径"/projects/rj82/james_folder/data_copy/mnd/002/MR02,同时保持结束部分(例如fmri/fmri_data")允许我循环并运行每个主题上的feat。

我已经尝试设置path=pwd并将上述路径替换为不工作的"$path/fmri/fmri_data",以及完全删除"/projects/rj82/james_folder/data_copy/mnd/002/MR02部分,因为我希望它只是使用当前目录,但这也不起作用。两者的错误信息相同:

/bin/mkdir: cannot create directory ‘/fmri’: Permission denied
while executing
"fsl:exec "/bin/mkdir -p $FD" -n"
(procedure "firstLevelMaster" line 22)
invoked from within
"firstLevelMaster $session"
invoked from within
"if { $done_something == 0 } {
if { ! $fmri(inmelodic) } {
if { $fmri(level) == 1 } {
for { set session 1 } { $session <= $fmri(mult..."
(file "/usr/local/fsl/6.0.4/fsl/bin/feat" line 390)

我不能得到我想要实现的工作,所以我循环通过相同的上面,复制我的design.fsf文件到每个目录,并与sed编辑它们有正确的路径。

#! /bin/sh
path=~/rj82/james_folder/data_copy/
cd $path
# Loop through the MND and Control directories
for directory in * ; do
cd $path
cd $directory
# Loop through each subject in each directory
for subject in ??? ; do
cd $path/$directory/$subject
# Loop through each scan for each subject
for scan in MR?? ; do
cd $path/$directory/$subject/$scan
# Copy template design.fsf into each scan folder
cp $path/../design.fsf design.fsf
# Change design.fsf file and replace the directory used 
# to create the template with the current directory
current=$directory/$subject/$scan
sed -i "s|mnd/002/MR02|$current|g" design.fsf
# Run feat using custome design.fsf file
feat design.fsf
cd ..
done
done
done

我的脚本导航到每个单独的主题并扫描,所以我已经将设计文件更改为:set feat_files(1) "/fmri/fmri_data"

这是一个好主意,但为了使相对路径,你还必须删除前导/;它还提示错误信息cannot create directory ‘/fmri’.

.fsf文件中使用真正的相对路径,也应该可以通过调用feat /path/design.fsf

来使用通用的design.fsf

相关内容