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

FSL - Can I set the path within an fsf file (program setup file) to current working directory?

我正在执行 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") 允许我遍历每个主题并 运行 专长。

我试过设置 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)

My script navigates into each individual subject and scan, so I have change the design file to: set feat_files(1) "/fmri/fmri_data"

这是个好主意,但为了创建相对路径,您还必须删除前导 /;此外还提示错误消息 cannot create directory ‘/fmri’.

.fsf 文件中使用真正的相对路径,也应该可以通过调用 feat /<i>path[=22 使用通用的 <code>design.fsf =]/design.fsf

我无法实现我想要实现的目标,所以我循环执行与上面相同的操作,将我的 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