echo '------------------------------------------------------------'
echo
echo 'Script for fetal brain reconstruction'
echo 'Author: Weijie Ma Date: 5 March, 2020'
echo 'Reference: Michael Ebner et al. An automated framework for localization, segmentation and super-resolution reconstruction of fetal brain MRI. NeuroImage, 116324.'
echo
echo '------------------------------------------------------------'
startime=$(date "+%Y%m%d%H%M%S")
is_error_seg=0
is_error_recon=0
DATA_FOLDER=$(cd "$(dirname "$0")";pwd)
touch $DATA_FOLDER/log.txt
errorlog=$DATA_FOLDER/log.txt
resolution=0.94
mkdir -r $DATA_FOLDER/successful
mkdir -r $DATA_FOLDER/failed
for filename in `ls`
do
if [ -d "$filename" ] && [ "$filename" -ne "successful" ] && ["$filename" -ne "failed"]
then
echo
echo
echo "--------Detection and Segmentation-----Now the performing file:--------"$filename"---------"
echo
echo
mkdir -p $filename/t2_haste
mkdir -p $filename/nifti
mkdir -p $filename/seg
mkdir -p $filename/srr
for name in `ls $filename | grep "t2_haste" | grep "nii"`
do
cp $filename/$name $filename/t2_haste
done
filepath=$DATA_FOLDER/$filename
counter=`ls $filename/t2_haste -l | grep "^-"|wc -l`
if [ $counter -eq 0 ]
then
echo $filename " : there are no T2 HASTE files for reconstruction!">>$errorlog
echo " " >>$errorlog
cp -r $filepath $DATA_FOLDER/failed
continue
fi
ls $filepath/t2_haste/*cor*;state_cor=$?
ls $filepath/t2_haste/*sag*;state_sag=$?
ls $filepath/t2_haste/*tra*;state_tra=$?
if [ $state_cor -ne 0 ] || [ $state_sag -ne 0 ] || [ $state_tra -ne 0 ]
then
echo $filename " : warning type 1 ----------- t2 haste nii tri-plane is incomplete, only one or two planes">>$errorlog
echo " " >>$errorlog
fi
counter_tmp=0
for niifile in $filename/t2_haste/*
do
let counter_tmp++
cp $niifile $filename/nifti/stack$counter_tmp.nii
done
gzip $filename/nifti/*.nii
cd $FETAL_BRAIN_SEG
for((i=1;i<=counter;i++))
do
python /home/mwj/fetal_brain_seg/fetal_brain_seg.py \
--input_names $filepath/nifti/stack${i}.nii.gz \
--segment_output_names $filepath/seg/stack${i}_mask.nii.gz
state=$?
if [ $state -ne 0 ]
then
let is_error_seg++
echo $filename ' : error type 1 ----------- stack'$i' brain section cannot be detected, segmentation stopped and failed' >>$errorlog
echo " " >>$errorlog
cp -r $filepath $DATA_FOLDER/failed
break
fi
done
cd $DATA_FOLDER
if [ `ls $filename/seg -l | grep "^-"|wc -l` -eq $counter ]
then
echo
echo
echo "--------Reconstruction--------Now the performing file:--------"$filename"---------"
echo
echo
tmpfile=$(mktemp recon_cmd_XXXXXX.sh)
echo "#!/bin/bash">>$tmpfile
echo "niftymic_run_reconstruction_pipeline \\">>$tmpfile
echo "--filenames \\">>$tmpfile
for((i=1;i<=counter;i++))
do
echo $filepath"/nifti/stack"${i}".nii.gz \\">>$tmpfile
done
echo "--filenames-masks \\">>$tmpfile
for((i=1;i<=counter;i++))
do
echo $filepath"/seg/stack"${i}"_mask.nii.gz \\">>$tmpfile
done
echo "--dir-output "$filepath"/srr \\">>$tmpfile
echo "--isotropic-resolution "$resolution>>$tmpfile
sh $tmpfile
ls $filepath/srr/recon_template_space/srr_template.nii.gz;state_recon=\$?
if [ $state_recon -ne 0 ]
then
let is_error_recon++
echo $filename ' : error type 3 --------- individuals of the generated masks after segmentation are null, reconstuction stopped and failed.' >>$errorlog
echo " " >>$errorlog
cp -r $filepath $DATA_FOLDER/failed
else
cp -r $filepath $DATA_FOLDER/successful
fi
rm $tmpfile
fi
fi
done
echo
echo "----------------The total reconstruction : done------------------"
is_error=$[$is_error_seg + $is_error_recon]
if [ $is_error -ne 0 ]
then
echo;echo;echo "--------------------------------------------------------"
echo 'start time: '$startime
echo 'end time: '$(date "+%Y%m%d%H%M%S")
echo 'reminder: errors occured and were reported in the logfile please check and fix'
echo "--------------------------------------------------------";echo;echo
fi