Skip to content

Instantly share code, notes, and snippets.

@veggiesaurus
Created May 13, 2016 10:07
Show Gist options
  • Save veggiesaurus/6d16d0e32cd922df3f9a2cecd40a2bad to your computer and use it in GitHub Desktop.
Save veggiesaurus/6d16d0e32cd922df3f9a2cecd40a2bad to your computer and use it in GitHub Desktop.
script for running optical sim across multiple threads
#!/bin/bash
#trap 'kill $(jobs -p)' EXIT
# Batch parameters
N_PROC=4
Z_ROT=0
N_EV_MIL=80
JOB_NAME=dummyTest
FILL_WIDTH=44
FILL_THICKNESS=11.5
SEED=1000
HADD_OUTPUT=true
while getopts ":N:Z:J:M:T:W:S:H:" opt; do
case $opt in
N)
N_PROC=$OPTARG
;;
Z)
Z_ROT=$OPTARG
;;
J)
JOB_NAME=$OPTARG
;;
M)
N_EV_MIL=$OPTARG
;;
T)
FILL_THICKNESS=$OPTARG
;;
W)
FILL_WIDTH=$OPTARG
;;
S)
SEED=$OPTARG
;;
H)
HADD_OUTPUT=$OPTARG
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
COMMAND_NAME=./opticalSim
OUTPUT_ALL_THREADS=false
CLEAN_THREAD_OUTPUT=true
# Simulation parameters
N_EVENTS=$(($N_EV_MIL*1000000))
# Histogram parameters
PSD_TIME=0.25
# Detector parameters
OPT_SIM=true
SCINT_RES=4.0
#for optimised run, SCINT_RES=SCINT_RES_ACTUAL*0.547722558
OPT_RES=$SCINT_RES
ADDITIONAL_FLAGS="--scintYield 8600 --pmtEff 0.30"
if $OPT_SIM
then
OPT_RES=$(bc <<< 'scale=2; '$SCINT_RES'*0.547722558')
ADDITIONAL_FLAGS="--scintYield 2580 --pmtEff 1.00"
fi
# Source parameters
SOURCE_MACRO=source_macros/ambe_neutrons_above.mac
# additional
OUTPUTFILE=PST_ambe_${Z_ROT}_deg_${N_EV_MIL}mil_Res${SCINT_RES}
echo "Running sim with "$N_EVENTS" events spread across "$N_PROC" processes."
echo "Detector Z-rotation @"$Z_ROT" degrees."
N=$[N_EVENTS / N_PROC]
SEED_END=$[SEED+N_PROC-1]
echo "Cleaning up previous files"
eval rm -f QuadScint_{$SEED..$SEED_END}.root
for ((i=0;i<N_PROC;i++))
do
# seed
SEED_JOB=$[SEED+i]
# pipe output
PIPE_COMMAND='> /dev/null 2>&1'
if [ $i -eq 0 ] || $OUTPUT_ALL_THREADS
then
PIPE_COMMAND='| sed "s/^/[thread "$i" of "$N_PROC" (zRot: "$Z_ROT"; job: "$JOB_NAME")] /"'
fi
eval $COMMAND_NAME --seed $SEED_JOB --numberOfEvents $N --zRot $Z_ROT --scintRes $OPT_RES --fillWidth $FILL_WIDTH --fillThickness $FILL_THICKNESS $ADDITIONAL_FLAGS --sourceMacro $SOURCE_MACRO $PIPE_COMMAND &
done
wait
mkdir -p ${JOB_NAME}
if $HADD_OUTPUT
then
eval hadd -f6 -v 0 ${JOB_NAME}/${OUTPUTFILE}.root QuadScint_{$SEED..$SEED_END}.root
else
for ((i=0;i<N_PROC;i++))
do
# seed
SEED_JOB=$[SEED+i]
cp QuadScint_${SEED_JOB}.root ${JOB_NAME}/${OUTPUTFILE}_${SEED_JOB}.root
done
fi
if $CLEAN_THREAD_OUTPUT
then
eval rm QuadScint_{$SEED..$SEED_END}.root
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment