#!/bin/bash

# CAUTION: this script is used in the data-taking so do not modify and test it without checking DAQ status

#default values (default is to do nothing), with possible values, as comments
mask="1" # 1 or 2
pattern="skip" # "skip", "none" or "odd" or "even" or "all" (other)
recall=0 # 1 or 2 or 3 or 4
out1=2
out2=2
det="tpc"
dummy="skip"

#DSsleeptime=0.5 # between commands
sleeptime=1 # between commands
#DSsleeptime=2 # between commands

#argument handling
while [[ "$#" > 0 ]]; do case $1 in
  -m|--mask) mask="$2"; shift;;
  -p|--pattern) pattern="$2";; 
  -no|--none) pattern="none";; 
  -o|--odd) pattern="odd";; 
  -e|--even) pattern="even";; 
  -a|--all) pattern="all";; 
  -t|--tpc) det="tpc";; 
  -mu|--mch) det="mch";; 
  -n|--noise) recall="1";; # noise studies, no pulse, recall 1 anyway
  -c|--calib) recall="3";; # default staircase for calib studies
  -d|--delay) recall="4";; # default delayed pulses for shape studies
  -r0|--recall0) recall="0";; # no recall
  -r1|--recall1) recall="1";; # staircase for calib studies
  -r2|--recall2) recall="2";; # delayed pulses for shape studies
  -r3|--recall3) recall="3";; # staircase for calib studies, with "deep hole"
  -r4|--recall4) recall="4";; # delayed pulses for shape studies, with "deep hole"
  -n1|--on1) out1="1";; # turn on output 1
  -n2|--on2) out2="1";; # turn on output 2
  -f1|--off1) out1="0";; # turn off output 1
  -f2|--off2) out2="0";; # turn off output 2
  -s|--skip) dummy="skip"; shift;;
  *) echo "Unknown parameter passed: $1";;
esac; shift; done

#                                                                             
num=`printf "%d\n" ${mask}`

if [ ${num} == "1" ]; then
    IP="192.168.0.11"
elif [ ${num} == "2" ]; then
    IP="192.168.0.12"
else
    echo "no such station - exiting"
#DS    IP="192.168.0.13"
    exit
fi

vxipath=$HOME/work/vxi11/bin

if [ ${recall} == "1" ]; then
    $vxipath/vxi11_send $IP "*RCL ${recall}" 
    sleep ${sleeptime}
    echo "calib mode selected"
elif [ ${recall} == "2" ]; then
    $vxipath/vxi11_send $IP "*RCL ${recall}" # for 10 pF setting
    sleep ${sleeptime}
    echo "pulse shape studies delay mode selected"
elif [ ${recall} == "3" ]; then
    $vxipath/vxi11_send $IP "*RCL ${recall}" 
    sleep ${sleeptime}
    echo "calib mode selected - with deep hole"
elif [ ${recall} == "4" ]; then
    $vxipath/vxi11_send $IP "*RCL ${recall}" # for 10 pF setting
    sleep ${sleeptime}
    echo "pulse shape studies delay mode selected - with deep hole"
else
    echo "no recall selected"
fi

#report arguments
echo "testpulser.sh: mask ${mask} pattern ${pattern} recall ${recall} out1 ${out1} out2 ${out2} det ${det}"
echo "PulseGenerator IP $IP"
exit

if [ ${out1} == "1" ]; then
    echo "out1 on selected"
    $vxipath/vxi11_send_verify $IP "OUTPUT1:STATE ON"
    sleep ${sleeptime}
elif [ ${out1} == "0" ]; then
    echo "out1 off selected"
    $vxipath/vxi11_send_verify $IP "OUTPUT1:STATE OFF"
    sleep ${sleeptime}
fi

if [ ${out2} == "1" ]; then
    echo "out2 on selected"
    $vxipath/vxi11_send_verify $IP "OUTPUT2:STATE ON"
    sleep ${sleeptime}
elif [ ${out2} == "0" ]; then
    echo "out2 off selected"
    $vxipath/vxi11_send_verify $IP "OUTPUT2:STATE OFF"
    sleep ${sleeptime}
fi

# set pattern, and verify status
# TODO: redo command if desired state and readback status do not match?

# USER1 <=> noise/off
# USER2 calib MuCh
# USER3 <=> calib
# USER4 <=> delay MuCh

#default = MuCh
noiseF="USER1"
calibF="USER2"
delayF="USER4"
if [ ${det} == "tpc" ]; then # no delay file for TPC, but different calib file
    calibF="USER3"
fi

if [ ${pattern} == "odd" ]; then
    echo "odd selected"
    $vxipath/vxi11_send_verify $IP "TRIGGER:SEQUENCE:SOURCE EXTERNAL" # external trigger
    sleep ${sleeptime}
    $vxipath/vxi11_send_verify $IP "SOURCE1:FUNCTION ${calibF}" # calib 1
    sleep ${sleeptime}
    $vxipath/vxi11_send_verify $IP "SOURCE2:FUNCTION ${noiseF}" # off 2
elif [ ${pattern} == "even" ]; then
    echo "even selected"
    $vxipath/vxi11_send_verify $IP "TRIGGER:SEQUENCE:SOURCE EXTERNAL" # external trigger
    sleep ${sleeptime}
    $vxipath/vxi11_send_verify $IP "SOURCE1:FUNCTION ${noiseF}" # off 1
    sleep ${sleeptime}
    $vxipath/vxi11_send_verify $IP "SOURCE2:FUNCTION ${calibF}" # calib 2
elif [ ${pattern} == "none" ]; then
    echo "none selected"
    $vxipath/vxi11_send_verify $IP "TRIGGER:SEQUENCE:SOURCE TIMER" # internal trigger
    sleep ${sleeptime}
    $vxipath/vxi11_send_verify $IP "SOURCE1:FUNCTION ${noiseF}" # off 1
    sleep ${sleeptime}
    $vxipath/vxi11_send_verify $IP "SOURCE2:FUNCTION ${noiseF}" # off 2
elif [ ${pattern} == "all" ]; then
    echo "all selected"
    $vxipath/vxi11_send_verify $IP "TRIGGER:SEQUENCE:SOURCE EXTERNAL" # external trigger
    sleep ${sleeptime}
    $vxipath/vxi11_send_verify $IP "SOURCE1:FUNCTION ${delayF}" # delay 1
    sleep ${sleeptime}
    $vxipath/vxi11_send_verify $IP "SOURCE2:FUNCTION ${delayF}" # delay 2
else
    echo "pattern skip selected"
fi

sleep ${sleeptime}

