Skip to content
Snippets Groups Projects
Select Git revision
  • 99a5d20d34566165f7ba874493c9a163e2e5dc73
  • master default protected
2 results

sim1.sh

Blame
  • 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