Select Git revision
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
sim1.sh 14.72 KiB
#!/bin/bash
#: Title : frames_and_delay/sim1
#: Date : 2023-06-27
#: Author : "Vesa Oikonen" <vesa.oikonen@utu.fi>
#: Options : None
printf "\n=====================================================================\n"
printf " Making or emptying result folder\n"
if [ ! -d sim1 ]; then
mkdir sim1
else
rm -f sim1/*
fi
printf "=====================================================================\n"
printf "Making 66 s radiowater BTAC with 0.1 s sample intervals \n"
printf "=====================================================================\n"
fit2dat -c=0,180,0.1 radiowater.fit sim1/blood.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "=====================================================================\n"
printf "IDIF from LV cavity or aorta is early as compared to tissue TACs,\n"
printf "requiring delay correction.\n"
printf "Move BTAC forward in time 1 s at a time \n"
printf "to simulate delay-corrected BTACs without any errors.\n"
printf "=====================================================================\n"
tactime -nogap sim1/blood.tac +1 sim1/blood01.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tactime -nogap sim1/blood.tac +2 sim1/blood02.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tactime -nogap sim1/blood.tac +3 sim1/blood03.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tactime -nogap sim1/blood.tac +4 sim1/blood04.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tactime -nogap sim1/blood.tac +5 sim1/blood05.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "\nPlot the original BTACs \n"
tac2svg -legend=n -mt="" sim1/sim_frames_and_peak_blood.svg -l sim1/blood.tac sim1/blood??.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "=====================================================================\n"
printf "Apply PET frames to the BTACs \n"
printf "to simulate delay-corrected IDIF BTACs without any errors.\n"
printf "=====================================================================\n"
simframe sim1/blood.tac frames.sif sim1/true_idif00.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
simframe sim1/blood01.tac frames.sif sim1/true_idif01.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
simframe sim1/blood02.tac frames.sif sim1/true_idif02.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
simframe sim1/blood03.tac frames.sif sim1/true_idif03.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
simframe sim1/blood04.tac frames.sif sim1/true_idif04.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
simframe sim1/blood05.tac frames.sif sim1/true_idif05.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "\nPlot the true IDIF BTACs with bars and with AIF BTACs\n"
tac4frpl sim1/true_idif00.tac sim1/bar_true_idif00.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac4frpl sim1/true_idif01.tac sim1/bar_true_idif01.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac4frpl sim1/true_idif02.tac sim1/bar_true_idif02.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac4frpl sim1/true_idif03.tac sim1/bar_true_idif03.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac4frpl sim1/true_idif04.tac sim1/bar_true_idif04.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac4frpl sim1/true_idif05.tac sim1/bar_true_idif05.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_true_idif00.svg -l sim1/blood.tac sim1/bar_true_idif00.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_true_idif01.svg -l sim1/blood01.tac sim1/bar_true_idif01.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_true_idif02.svg -l sim1/blood02.tac sim1/bar_true_idif02.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_true_idif03.svg -l sim1/blood03.tac sim1/bar_true_idif03.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_true_idif04.svg -l sim1/blood04.tac sim1/bar_true_idif04.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_true_idif05.svg -l sim1/blood05.tac sim1/bar_true_idif05.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "=====================================================================\n"
printf "Delay-corrected IDIFs need to have the original PET frame times to be useful in pixel-by-pixel analyses.\n"
printf "Delay correct IDIFs using tacmove which takes into account the frame start and end times \n"
printf "=====================================================================\n"
cp -f sim1/true_idif00.tac sim1/tacmove_idif01.tac
cp -f sim1/true_idif00.tac sim1/tacmove_idif02.tac
cp -f sim1/true_idif00.tac sim1/tacmove_idif03.tac
cp -f sim1/true_idif00.tac sim1/tacmove_idif04.tac
cp -f sim1/true_idif00.tac sim1/tacmove_idif05.tac
tacmove sim1/tacmove_idif01.tac 1
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tacmove sim1/tacmove_idif02.tac 2
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tacmove sim1/tacmove_idif03.tac 3
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tacmove sim1/tacmove_idif04.tac 4
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tacmove sim1/tacmove_idif05.tac 5
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "\nPlot these with bars and with AIF BTACs\n"
tac4frpl sim1/tacmove_idif01.tac sim1/bar_tacmove_idif01.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac4frpl sim1/tacmove_idif02.tac sim1/bar_tacmove_idif02.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac4frpl sim1/tacmove_idif03.tac sim1/bar_tacmove_idif03.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac4frpl sim1/tacmove_idif04.tac sim1/bar_tacmove_idif04.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac4frpl sim1/tacmove_idif05.tac sim1/bar_tacmove_idif05.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_tacmove_idif01.svg -l sim1/blood01.tac sim1/bar_tacmove_idif01.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_tacmove_idif02.svg -l sim1/blood02.tac sim1/bar_tacmove_idif02.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_tacmove_idif03.svg -l sim1/blood03.tac sim1/bar_tacmove_idif03.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_tacmove_idif04.svg -l sim1/blood04.tac sim1/bar_tacmove_idif04.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_tacmove_idif05.svg -l sim1/blood05.tac sim1/bar_tacmove_idif05.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "=====================================================================\n"
printf "The simple and traditional method is to assume that frame average concentration represents \n"
printf "the concentration at frame mid time and then do dot-to-dot interpolations and integrations. \n"
printf "=====================================================================\n"
printf "\nReplace IDIF frame start and end times with frame mid times\n"
tacformat -mid -f=PMOD sim1/true_idif00.tac sim1/midtime.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "\nCorrect that for delay \n"
cp -f sim1/midtime.tac sim1/trad_idif01.tac
cp -f sim1/true_idif00.tac sim1/trad_idif02.tac
cp -f sim1/true_idif00.tac sim1/trad_idif03.tac
cp -f sim1/true_idif00.tac sim1/trad_idif04.tac
cp -f sim1/true_idif00.tac sim1/trad_idif05.tac
tacmove sim1/trad_idif01.tac 1
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tacmove sim1/trad_idif02.tac 2
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tacmove sim1/trad_idif03.tac 3
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tacmove sim1/trad_idif04.tac 4
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tacmove sim1/trad_idif05.tac 5
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "\nInterpolate into original frame mid times \n"
interpol -f=sim1/midtime.tac sim1/trad_idif01.tac sim1/trad_mid_idif01.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
interpol -f=sim1/midtime.tac sim1/trad_idif02.tac sim1/trad_mid_idif02.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
interpol -f=sim1/midtime.tac sim1/trad_idif03.tac sim1/trad_mid_idif03.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
interpol -f=sim1/midtime.tac sim1/trad_idif04.tac sim1/trad_mid_idif04.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
interpol -f=sim1/midtime.tac sim1/trad_idif05.tac sim1/trad_mid_idif05.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "\nPlot these with AIF BTACs\n"
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_trad_mid_idif01.svg -l sim1/blood01.tac sim1/trad_mid_idif01.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_trad_mid_idif02.svg -l sim1/blood02.tac sim1/trad_mid_idif02.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_trad_mid_idif03.svg -l sim1/blood03.tac sim1/trad_mid_idif03.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_trad_mid_idif04.svg -l sim1/blood04.tac sim1/trad_mid_idif04.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
tac2svg -x2=125 -legend=n -mt="" sim1/sim_frames_and_peak_trad_mid_idif05.svg -l sim1/blood05.tac sim1/trad_mid_idif05.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "\nInterpolate into original frame durations (same result as above therefore not plotted) \n"
simframe --force sim1/trad_idif01.tac frames.sif sim1/trad_frame_idif01.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
simframe --force sim1/trad_idif02.tac frames.sif sim1/trad_frame_idif02.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
simframe --force sim1/trad_idif03.tac frames.sif sim1/trad_frame_idif03.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
simframe --force sim1/trad_idif04.tac frames.sif sim1/trad_frame_idif04.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
simframe --force sim1/trad_idif05.tac frames.sif sim1/trad_frame_idif05.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "=====================================================================\n"
printf "Calculate AUC from zero to frame end times. \n"
printf "Plot its error at each frame end time.\n"
printf "=====================================================================\n"
DN=01
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/blood$DN.tac sim1/auc$DN.tac
tacfr2x sim1/tacmove_idif$DN.tac sim1/steps.tac
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/steps.tac sim1/temp.tac
taccalc sim1/temp.tac - sim1/auc$DN.tac sim1/aucerror$DN.tac
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/trad_mid_idif$DN.tac sim1/temp.tac
taccalc sim1/temp.tac - sim1/auc$DN.tac sim1/temp2.tac
tacadd sim1/aucerror$DN.tac sim1/temp2.tac
tacren sim1/aucerror$DN.tac 1 Bar
tacren sim1/aucerror$DN.tac 2 Mid_point
tac2svg -x2=125 -legend=y -mt="" -yt="Error in AUC (s*kBq/mL)" sim1/sim_frames_and_peak_aucerror$DN.svg -l sim1/aucerror$DN.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
DN=02
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/blood$DN.tac sim1/auc$DN.tac
tacfr2x sim1/tacmove_idif$DN.tac sim1/steps.tac
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/steps.tac sim1/temp.tac
taccalc sim1/temp.tac - sim1/auc$DN.tac sim1/aucerror$DN.tac
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/trad_mid_idif$DN.tac sim1/temp.tac
taccalc sim1/temp.tac - sim1/auc$DN.tac sim1/temp2.tac
tacadd sim1/aucerror$DN.tac sim1/temp2.tac
tacren sim1/aucerror$DN.tac 1 Bar
tacren sim1/aucerror$DN.tac 2 Mid_point
tac2svg -x2=125 -legend=y -mt="" -yt="Error in AUC (s*kBq/mL)" sim1/sim_frames_and_peak_aucerror$DN.svg -l sim1/aucerror$DN.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
DN=03
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/blood$DN.tac sim1/auc$DN.tac
tacfr2x sim1/tacmove_idif$DN.tac sim1/steps.tac
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/steps.tac sim1/temp.tac
taccalc sim1/temp.tac - sim1/auc$DN.tac sim1/aucerror$DN.tac
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/trad_mid_idif$DN.tac sim1/temp.tac
taccalc sim1/temp.tac - sim1/auc$DN.tac sim1/temp2.tac
tacadd sim1/aucerror$DN.tac sim1/temp2.tac
tacren sim1/aucerror$DN.tac 1 Bar
tacren sim1/aucerror$DN.tac 2 Mid_point
tac2svg -x2=125 -legend=y -mt="" -yt="Error in AUC (s*kBq/mL)" sim1/sim_frames_and_peak_aucerror$DN.svg -l sim1/aucerror$DN.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
DN=04
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/blood$DN.tac sim1/auc$DN.tac
tacfr2x sim1/tacmove_idif$DN.tac sim1/steps.tac
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/steps.tac sim1/temp.tac
taccalc sim1/temp.tac - sim1/auc$DN.tac sim1/aucerror$DN.tac
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/trad_mid_idif$DN.tac sim1/temp.tac
taccalc sim1/temp.tac - sim1/auc$DN.tac sim1/temp2.tac
tacadd sim1/aucerror$DN.tac sim1/temp2.tac
tacren sim1/aucerror$DN.tac 1 Bar
tacren sim1/aucerror$DN.tac 2 Mid_point
tac2svg -x2=125 -legend=y -mt="" -yt="Error in AUC (s*kBq/mL)" sim1/sim_frames_and_peak_aucerror$DN.svg -l sim1/aucerror$DN.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
DN=05
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/blood$DN.tac sim1/auc$DN.tac
tacfr2x sim1/tacmove_idif$DN.tac sim1/steps.tac
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/steps.tac sim1/temp.tac
taccalc sim1/temp.tac - sim1/auc$DN.tac sim1/aucerror$DN.tac
interpol -i -x=5,10,15,20,25,30,35,40,60,70,80,90,100,120 sim1/trad_mid_idif$DN.tac sim1/temp.tac
taccalc sim1/temp.tac - sim1/auc$DN.tac sim1/temp2.tac
tacadd sim1/aucerror$DN.tac sim1/temp2.tac
tacren sim1/aucerror$DN.tac 1 Bar
tacren sim1/aucerror$DN.tac 2 Mid_point
tac2svg -x2=125 -legend=y -mt="" -yt="Error in AUC (s*kBq/mL)" sim1/sim_frames_and_peak_aucerror$DN.svg -l sim1/aucerror$DN.tac
if [ $? -ne 0 ] ; then printf "Failed!\n" ; exit 1 ; fi
printf "\n===================================================================\n"
printf " All passed! \n"
printf "===================================================================\n"
exit 0