我正在执行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
。