#!/bin/bash # # PatchControl # # This script helps the shifter to easily operate both the line and # the DAQ processes until the ControlUnit will be finalised. # # Author: Carmelo Pellegrino <carmelo.pellegrino@bo.infn.it> # function put_lock() { touch /tmp/pc.lock } function rm_lock() { unlink /tmp/pc.lock } function test_lock() { if [ -e /tmp/pc.lock ]; then return 1 else return 0 fi } function on_exit() { if [ "${LOCK_OWNER}" == "True" ]; then rm_lock fi local pid for pid in ${PROCS[*]}; do kill -9 ${pid} done unset pid } function createList() { local LIST local file for file in *.detectorfile; do LIST=(${LIST[*]} "FALSE" ${file}) done unset file echo ${LIST[*]} } function dm_driver() { echo "set session target = run" sleep $1 echo exit echo y } function log() { [ ! -d ~/.km3_private ] && mkdir -p ~/.km3_private local logfile="~/.km3_private/pc.log" date >>${logfile} echo ${*} >>${logfile} } function nowUTC() { # print the number of seconds elapsed since Jan 1 1970 00:00 in UTC date -u +%s } function get_run_number() { [ ! -d ~/.km3_private ] && mkdir -p ~/.km3_private [ ! -e ~/.km3_private/last_run_number ] && echo 0 >~/.km3_private/last_run_number local last_run_number=`cat ~/.km3_private/last_run_number` local run_number let "run_number = ${last_run_number} + 1" echo ${run_number} > ~/.km3_private/last_run_number echo ${run_number} } # Script begins here test_lock || { zenity --error --text="There is another instance running of this program."; exit 1;} put_lock LOCK_OWNER="True" trap on_exit EXIT while [ 1 ]; do # Ask for the run setup rs_file=`zenity --title "Run Setup Selector" \ --list \ --text "Select one of the following Run Setups:" \ --radiolist \ --column="Selection" \ --column="Run Setup file" \ $(createList ${folder})` if [ -z "${rs_file}" ]; then zenity --error --text="No Run Setup file selected, aborting" exit -1 fi # Ask for run duration run_duration=`zenity --title "Run duration" \ --list \ --text "Select one of the following duration [minutes]:" \ --radiolist \ --column="Selection" \ --column="Minutes" \ FALSE Cancel FALSE 5 TRUE 10 FALSE 20` if [ "${run_duration}" != "Cancel" ]; then break fi done # Wait 10 seconds i=0; while [ $i -lt 100 ]; do let "i = $i + 10" echo $i sleep 1 done | zenity --progress \ --auto-close \ --text="You have 10 seconds to cancel the current operation:\nrunsetup: ${rs_file}\nduration: ${run_duration} minutes" \ --auto-kill # Peak the run number run_number=`get_run_number` let "run_duration_seconds = ${run_duration} * 60" log "Run ${run_number} ready to start. \ Run start time = ${run_start_time}, \ run duration = ${run_duration} minutes, \ run setup file = ${rs_file}." daq_log_file=~/.km3_private/daq_${run_number}.log JGetMessage -H localhost -T MSG -d 3 >${daq_log_file} & PROCS=(${PROCS[*]} $!) # Copy selected run setup file, changing the run number cat ${rs_file} | sed -e 's/RUNNUMBER/${run_number}/' >dm.detectorfile run_start_time=`nowUTC` # Launch the DM dm_driver ${run_duration_seconds} | mono DetectorControl.exe --control --reset & PROCS=(${PROCS[*]} $!) # Launch the DAQ log "Launching the DAQ with the following command line: daq.sh ${run_number} ${run_start_time} ${run_duration_seconds}" daq.sh ${run_number} ${run_start_time} ${run_duration_seconds} # Point the browser to the correct address, if required zenity --question \ --text="Would you like to open the DetectorManager GUI?" \ --cancel-label="No, thanks" && firefox http://localhost:1301/ & # Wait the end of the run sleep ${run_duration_seconds} log "Run ${run_number} finished." zenity --info --text="Run ${run_number} finished! The DAQ log file is located in ${daq_log_file}." exit 0