Stats of processed input files as CSV or JSON, and of uploaded output files as CSV or JSON (up to 10000 files included)
Jobscript
#!/bin/bash
#+++++++++++++++++++++++++++++++++++++++++
# enter software setup script
#+++++++++++++++++++++++++++++++++++++++++
export JUSTIN_SUBID=`echo "${JUSTIN_JOBSUB_ID}" | sed 's/@/./g'`
echo -e "Creating the file $HOME/workspace/env_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log" > $HOME/workspace/env_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log
export envlog="$HOME/workspace/env_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log"
echo -e "The software is Mx2 ${MINERVA_RELEASE}" 2>&1 | tee -a $envlog
source /cvmfs/minerva.opensciencegrid.org/minerva2x2/products/releases/${MINERVA_RELEASE}/setup.sh
date +"%n%a %b %d %T %Z %Y%n" | tee -a $envlog
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
echo -e "Subdirectories in cvmfs" 2>&1 | tee -a $envlog
ls -lha /cvmfs/minerva.opensciencegrid.org/ 2>&1 | tee -a $envlog
echo -e "\n\n" 2>&1 | tee -a $envlog
fi
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
echo -e "Checking the path" 2>&1 | tee -a $envlog
echo -e "$PATH" 2>&1 | tee -a $envlog
echo -e "\n\n" 2>&1 | tee -a $envlog
fi
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
compgen -c | grep -i setenv 2>&1 | tee -a $envlog
echo -e "\n\n" 2>&1 | tee -a $envlog
fi
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
ls -lhs /usr/bin/id 2>&1 | tee -a $envlog
ls -lhs /usr/bin 2>&1 | tee -a $envlog
echo -e "\n\n" 2>&1 | tee -a $envlog
fi
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
echo -e "HOME" 2>&1 | tee -a $envlog
ls -lha $HOME 2>&1 | tee -a $envlog
echo -e "\n\n" 2>&1 | tee -a $envlog
fi
cd $HOME/cmtuser
echo -e "The Minervascripts is ${MINERVASCRIPTS}" 2>&1 | tee -a $envlog
source ${MINERVASCRIPTS}/setenvProject.sh Minerva ${MINERVA_RELEASE} 2>&1 | tee -a $envlog
echo -e "\n\n" 2>&1 | tee -a $envlog
#++++++++++++++++++++++++++++++++++++++++
# setup
#++++++++++++++++++++++++++++++++++++++++
echo -e "Setup DUNE and Metacat" 2>&1 | tee -a $envlog
source /cvmfs/dune.opensciencegrid.org/products/dune/setup_dune.sh 2>&1 | tee -a $envlog
export METACAT_SERVER_URL=https://metacat.fnal.gov:9443/dune_meta_prod/app
export METACAT_AUTH_SERVER_URL=https://metacat.fnal.gov:8143/auth/dune
setup metacat
#+++++++++++++++++++++++++++++++++++++++++
# environment variables
#+++++++++++++++++++++++++++++++++++++++++
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
echo -e "==========================================================================" > $envlog
/usr/bin/printenv 2>&1 | tee -a $envlog
echo -e "==========================================================================" > $envlog
fi
#+++++++++++++++++++++++++++++++++++++++++
# get node information
#+++++++++++++++++++++++++++++++++++++++++
echo -e "The node working directory $PWD" 2>&1 | tee -a $envlog
HOST=`/bin/hostname`
echo -e "\t\thost is $HOST" 2>&1 | tee -a $envlog
echo -e "\t\tjustin site is $JUSTIN_SITE_NAME" 2>&1 | tee -a $envlog
echo -e "\t\tthe current directory is $PWD" 2>&1 | tee -a $envlog
#+++++++++++++++++++++++++++++++++++++++++
# prepare to launch job
#+++++++++++++++++++++++++++++++++++++++++
echo -e "Checking if tarfiles exist in the directory [$INPUT_TAR_DIR_LOCAL]." | tee -a $envlog
ls -lha $INPUT_TAR_DIR_LOCAL 2>&1 | tee -a $envlog
echo -e "\n\n" | tee -a $envlog
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
echo -e "The output of the setup script." | tee -a $envlog
echo -e "==============================================================================================================\n" | tee -a $envlog
less ${INPUT_TAR_DIR_LOCAL}/Minerva_${MINERVA_RELEASE}/Tools/SystemTests/cmt/setup.sh 2>&1 | tee -a $envlog
echo -e "==============================================================================================================\n\n" | tee -a $envlog
fi
#++++++++++++++++++++++++++++++++++++
# setup workspace
#+++++++++++++++++++++++++++++++++++
export WORKSPACE=/home/workspace
cd ${WORKSPACE}
#+++++++++++++++++++++++++++++++++++++++++
# setup the system tests
#+++++++++++++++++++++++++++++++++++++++++
echo -e "Running the cmt setup script." 2>&1 | tee -a $envlog
cd ${INPUT_TAR_DIR_LOCAL}/Minerva_${MINERVA_RELEASE}
cd Tools/SystemTests/cmt
source setup.sh
echo -e "The Systemtests setup is ${SYSTEMTESTSROOT}" 2>&1 | tee -a $envlog
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
echo -e "==============================================================================================================\n" | tee -a $envlog
ls -lha $SYSTEMTESTSROOT | tee -a $envlog
compgen -c | grep -i system 2>&1 | tee -a $envlog
echo -e "\n\n" | tee -a $envlog | tee -a $envlog
fi
SUCCESS=`compgen -c | grep -i SystemTestsApp.exe | wc -l`
if [ ${SUCCESS} -eq 0 ]; then
echo -e "Please contact expert. The SystemTest execuable does not exist.\n" 2>&1 | tee -a $envlog
if [ ${JOBSCRIPT_TEST} -eq 0 ]; then
echo -e "Updating jobscript name jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log\n" 2>&1 | tee -a $envlog
mv jobscript.log jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log
fi
exit 1
fi
#++++++++++++++++++++++++++++++++++++++++++
# setup xml conditions
#++++++++++++++++++++++++++++++++++++++++++
if [ -d ${INPUT_TAR_DIR_LOCAL}/Minerva_${MINERVA_RELEASE}/Det/MinervaXmlConditions ]; then
cd ${INPUT_TAR_DIR_LOCAL}/Minerva_${MINERVA_RELEASE}/Det/MinervaXmlConditions/cmt/
source setup.sh
echo -e "The MinervaXmlConditions setup is ${MINERVAXMLCONDITIONSROOT}" 2>&1 | tee -a $envlog
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
echo -e "==============================================================================================================\n" | tee -a $envlog
ls -lha $MINERVAXMLCONDITIONSROOT | tee -a $envlog
compgen -c | grep -i system 2>&1 | tee -a $envlog
echo -e "\n\n" | tee -a $envlog | tee -a $envlog
fi
fi
#+++++++++++++++++++++++++++++
# go to working directory
#+++++++++++++++++++++++++++++
cd ${WORKSPACE}
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Get the file
# TODO - update to retrieve many files
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
echo -e "\n\nRetrieving the file." | tee -a $envlog
did_pfn_rse=`$JUSTIN_PATH/justin-get-file`
did=`echo $did_pfn_rse | cut -f1 -d' '`
pfn=`echo $did_pfn_rse | cut -f2 -d' '`
rse=`echo $did_pfn_rse | cut -f3 -d' '`
if [ "$did_pfn_rse" = "" ] ; then
echo -e "justIN does not get a file. Exiting the jobscript." 2>&1 | tee -a $envlog
if [ ${JOBSCRIPT_TEST} -eq 0 ]; then
echo -e "Updating jobscript name jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log\n" 2>&1 | tee -a $envlog
mv jobscript.log jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log
fi
fi
echo -e "\tThe file data identifier (DID) is [$did]" | tee -a $envlog
echo -e "\tThe file physical file name (PFN) is [$pfn]" | tee -a $envlog
echo -e "\tThe file Rucio storage element (RSE) is [$rse]\n" | tee -a $envlog
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
# Copy file to local disk
# File can be opened from /pnfs
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
compgen -c | grep -i xrd 2>&1 | tee -a $envlog
fi
echo -e "Running xrdcopy ${pfn} ${WORKSPACE}/" 2>&1 | tee -a $envlog
xrdcopy ${pfn} ${WORKSPACE}/
echo -e "\tCompleted the copying.\n" 2>&1 | tee -a $envlog
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Get the filename
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
IFS=':' read -r -a array <<< "$did"
export FILENAME="${array[1]}"
echo -e "The input file is ${FILENAME}" 2>&1 | tee -a $envlog
#+++++++++++++++++++++++++++++++++++++++++
# define some parameters
#+++++++++++++++++++++++++++++++++++++++++
if [[ $FILENAME == *".dat"* ]]; then
ext=".dat"
elif [[ $FILENAME == *".root"* ]]; then
ext=".root"
fi
#+++++++++++++++++++++++++++++++++++++++++
# parse the input file name
#+++++++++++++++++++++++++++++++++++++++++
INPUT_FILE=${FILENAME##*/}
IFS='_' read -a flist <<< "$INPUT_FILE";
export WORDS="${flist[0]}"
export RUN="${flist[1]}"
export SUBRUN="${flist[2]}"
export DATA_STREAM="${flist[3]}"
export DAQ_SOFTWARE="${flist[4]}"
export TIMESTAMP="${flist[5]}"
export DATA_TYPE="${flist[6]}"
#+++++++++++++++++++++++++++++++++
# get the run period
#+++++++++++++++++++++++++++++++++
FILE_YEAR=`echo ${TIMESTAMP} | cut -c1-2`
FILE_MONTH=`echo ${TIMESTAMP} | cut -c3-4`
export RUN_PERIOD="unknown"
if [[ "${FILE_YEAR}" -eq 23 ]]; then
export RUN_PERIOD="run0"
elif [[ "${FILE_YEAR}" -eq 24 && "${FILE_MONTH#0}" -le 8 ]]; then
export RUN_PERIOD="run1"
fi
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
echo -e "\tThe input file was produced: Year-${FILE_YEAR} and Month-${FILE_MONTH}" 2>&1 | tee -a $envlog
echo -e "\tThe run period is [${RUN_PERIOD}]" 2>&1 | tee -a $envlog
fi
#+++++++++++++++++++++++++++++++++++++++++
# create an output directory
#+++++++++++++++++++++++++++++++++++++++++
cd ${WORKSPACE}
export OUTFILES_DIR=${WORKSPACE}
echo -e "The output files are placed in the directory [$OUTFILES_DIR]\n" | tee -a $envlog
#++++++++++++++++++++++++++++++++++++++++
# parse input parameters
#++++++++++++++++++++++++++++++++++++++++
IFS="," read -a OPTS <<< "$OPTION_FILE";
IFS="," read -a TIER <<< "$FILE_TIER";
if [ "${#OPTS[@]}" != "${#TIER[@]}" ]; then
echo -e "Please see the help menu. Each input option file must accompained a file tier.\n" 2>&1 | tee -a $envlog
if [ ${JOBSCRIPT_TEST} -eq 0 ]; then
echo -e "Updating jobscript name jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log\n" 2>&1 | tee -a $envlog
mv jobscript.log jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log
fi
exit 1
fi
total="${#OPTS[@]}"
echo -e "\n\nRunning over $total options file(s)" | tee -a $envlog
echo -e "\t[$OPTION_FILE]\n" | tee -a $envlog
#++++++++++++++++++++++++++++++++++++++++
# loop over input option files
#++++++++++++++++++++++++++++++++++++++++
for ((i = 0; i < total; ++i)); do
export OPT_FILE="${OPTS[$i]}"
export OPT_TIER="${TIER[$i]}"
echo -e "\t---------------- $OPT_FILE ($OPT_TIER)------------------------------" | tee -a $envlog
#+++++++++++++++++++++++++++++++++++++++++
# create the output file names
#+++++++++++++++++++++++++++++++++++++++++
export UPDATED_TIMESTAMP=$(date +'%y%m%d%H%M')
export UPDATED_DATA_TYPE=$( echo "${DATA_TYPE}" )
if [[ $OPT_TIER == "rawdigs" ]]; then
export UPDATED_DATA_TYPE="RawDigits"${ext}
elif [[ $OPT_TIER == "pdstl" ]]; then
export UPDATED_DATA_TYPE="Pedestal"${ext}
elif [[ $OPT_TIER == "gain" ]]; then
export UPDATED_DATA_TYPE="Gain"${ext}
elif [[ $OPT_TIER == "supdigs" ]]; then
export UPDATED_DATA_TYPE="SupDigits"${ext}
elif [[ $OPT_TIER == "rockmu" ]]; then
export UPDATED_DATA_TYPE="RockMuons"${ext}
elif [[ $OPT_TIER == "reco" ]]; then
export UPDATED_DATA_TYPE="RecoData"${ext}
else
echo -e "The file tier [$OPT_TIER] is not implemented. Please contact expert.\n" 2>&1 | tee -a $envlog
if [ ${JOBSCRIPT_TEST} -eq 0 ]; then
echo -e "Updating jobscript name jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log\n" 2>&1 | tee -a $envlog
mv jobscript.log jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log
fi
exit 1
fi
export OUTPUT_FILE=${WORDS}_${RUN}_${SUBRUN}_${DATA_STREAM}_${DAQ_SOFTWARE}_${UPDATED_TIMESTAMP}_${UPDATED_DATA_TYPE}
export OPTION_FILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/$ext/.opts}"
export LOG_FILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/$ext/.log}"
export HISTO_FILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/$ext/_histos.root}"
export DST_FILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/$ext/_dst.root}"
export ROOT_FILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/$ext/.root}"
echo -e "\n\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" 2>&1 | tee -a $envlog
echo -e "\tOutput option filename is $OPTION_FILENAME" 2>&1 | tee -a $envlog
echo -e "\tOutput job log file name is $LOG_FILENAME" 2>&1 | tee -a $envlog
echo -e "\tOutput histo root file name is $HISTO_FILENAME" 2>&1 | tee -a $envlog
echo -e "\tOutput dst root file name is $DST_FILENAME" 2>&1 | tee -a $envlog
echo -e "\tOutput gaudi root file name is $ROOT_FILENAME" 2>&1 | tee -a $envlog
echo -e "\n\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n" 2>&1 | tee -a $envlog
OPT_EXISTS=`ls ${SYSTEMTESTSROOT}/options/Mx2Prod/${OPT_FILE} | wc -l`
if [ ${OPT_EXISTS} -ne 1 ]; then
echo -e "\tThe option file does not exists in the directory [${SYSTEMTESTSROOT}/options/Mx2Prod/]. Please check your tarball." 2>&1 | tee -a $envlog
if [ ${JOBSCRIPT_TEST} -eq 0 ]; then
echo -e "Updating jobscript name jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log\n" 2>&1 | tee -a $envlog
mv jobscript.log jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log
fi
exit 1
fi
echo -e "\tCopying cp ${SYSTEMTESTSROOT}/options/Mx2Prod/${OPT_FILE} ${OPTION_FILENAME}\n\n" 2>&1 | tee -a $envlog
cp ${SYSTEMTESTSROOT}/options/Mx2Prod/${OPT_FILE} ${OPTION_FILENAME} | tee -a $envlog
echo -e "\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" 2>&1 | tee -a $envlog
echo -e "\tThe file tier is [$OPT_TIER]" 2>&1 | tee -a $envlog
echo -e "\tThe data stream is [$DATA_STREAM]" 2>&1 | tee -a $envlog
echo -e "\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n" 2>&1 | tee -a $envlog
#==================================================================
#
# Configure the option file based on input parameters, etc.
#
#=================================================================
# common configuration for all option files
sed -e "s,ApplicationMgr.EvtMax.*$,ApplicationMgr.EvtMax = ${NEVENTS};,g" -i ${OPTION_FILENAME}
if [[ $OPT_TIER == "rockmu" || $OPT_TIER == "reco" ]]; then
sed -e "s,EventSelector.PrintFreq.*$,EventSelector.PrintFreq = 1;,g" -i ${OPTION_FILENAME}
fi
# special configuration for pedestal
if [[ $OPT_TIER == "pdstl" ]]; then
export ALLOUTFILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/${DATA_STREAM}/pdstl_table_all}"
export SCRUBBEDOUTFILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/${DATA_STREAM}/pdstl_table_scrubbed}"
echo -e "\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" 2>&1 | tee -a $envlog
echo -e "\tOutput pedestal table file is $ALLOUTFILENAME" 2>&1 | tee -a $envlog
echo -e "\tOutput scrubbed pedestal table file is $SCRUBBEDOUTFILENAME" 2>&1 | tee -a $envlog
echo -e "\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n" 2>&1 | tee -a $envlog
fi
# special configuration for light injection
if [[ $OPT_TIER == "gain" ]]; then
export GAINTABLEFILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/${DATA_STREAM}/gain_table}"
export GAINPROBLEMCHANNELSFILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/${DATA_STREAM}/problem_channels}"
export GAINTUNEDHVFILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/${DATA_STREAM}/tuned_hvs}"
echo -e "\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" 2>&1 | tee -a $envlog
echo -e "\tOutput max gain file is $GAINTABLEFILENAME" 2>&1 | tee -a $envlog
echo -e "\tOutput problem channel file is $GAINPROBLEMCHANNELSFILENAME" 2>&1 | tee -a $envlog
echo -e "\tOutput HV file is $GAINTUNEDHVFILENAME" 2>&1 | tee -a $envlog
echo -e "\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n" 2>&1 | tee -a $envlog
fi
# special configuration for rock muons
if [[ $OPT_TIER == "rockmu" ]]; then
export ROCKMUONFILENAME=$ROOT_FILENAME
echo -e "\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" 2>&1 | tee -a $envlog
echo -e "\tOutput rock muon calibration file is $ROCKMUONFILENAME" 2>&1 | tee -a $envlog
echo -e "\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n" 2>&1 | tee -a $envlog
fi
# BuildRawDigits_fRawData.opts
if [[ $OPT_TIER == "rawdigs" ]]; then
echo -e "\tConfiguring the raw data to raw digits option file" 2>&1 | tee -a $envlog
if [[ $DATA_STREAM == "pdstl" ]]; then
echo -e "\t\tupdating the pedestal portion" 2>&1 | tee -a $envlog
sed -e "s,ApplicationMgr.OutStream.*$,ApplicationMgr.OutStream = {\"PdstlStream\"};,g"\
-e "s,LinjcStream.*$,,g"\
-e "s,numibeamStream.*$,,g"\
-e "s,FilterSequence.Members.*$,FilterSequence.Members = {\"TriggerTypeFilter/PdstlFilter\"};,g"\
-e "s,BuildRawEventAlg.InputFileName.*$,BuildRawEventAlg.InputFileName = \"${FILENAME}\";,g"\
-e "s,PdstlStream.Output.*$,PdstlStream.Output=\"DATAFILE='PFN:$ROOT_FILENAME' TYP='POOL_ROOTTREE' OPT='RECREATE'\";,g"\
-i ${OPTION_FILENAME}
elif [[ $DATA_STREAM == "linjc" ]]; then
echo -e "\t\tupdating the light injection portion" 2>&1 | tee -a $envlog
sed -e "s,ApplicationMgr.OutStream.*$,ApplicationMgr.OutStream = {\"LinjcStream\"};,g"\
-e "s,PdstlStream.*$,,g"\
-e "s,numibeamStream.*$,,g"\
-e "s,FilterSequence.Members.*$,FilterSequence.Members = {\"TriggerTypeFilter/LinjcFilter\"};,g"\
-e "s,BuildRawEventAlg.InputFileName.*$,BuildRawEventAlg.InputFileName = \"${FILENAME}\";,g"\
-e "s,LinjcStream.Output.*$,LinjcStream.Output=\"DATAFILE='PFN:$ROOT_FILENAME' TYP='POOL_ROOTTREE' OPT='RECREATE'\";,g"\
-i ${OPTION_FILENAME}
elif [[ $DATA_STREAM == "numib" ]]; then
echo -e "\t\tupdating the numi beam portion" 2>&1 | tee -a $envlog
sed -e "s,ApplicationMgr.OutStream.*$,ApplicationMgr.OutStream = {\"numibeamStream\"};,g"\
-e "s,PdstlStream.*$,,g"\
-e "s,LinjcStream.*$,,g"\
-e "s,FilterSequence.Members.*$,FilterSequence.Members = {\"TriggerTypeFilter/numibeamFilter\"};,g"\
-e "s,BuildRawEventAlg.InputFileName.*$,BuildRawEventAlg.InputFileName = \"${FILENAME}\";,g"\
-e "s,numibeamStream.Output.*$,numibeamStream.Output=\"DATAFILE='PFN:$ROOT_FILENAME' TYP='POOL_ROOTTREE' OPT='RECREATE'\";,g"\
-i ${OPTION_FILENAME}
elif [[ $DATA_STREAM == "numip" ]]; then
echo -e "\t\tupdating the pedestal and numi beam portion" 2>&1 | tee -a $envlog
export PDSTL_ROOT_FILENAME="${ROOT_FILENAME/$DATA_STREAM/pdstl}"
export NUMIB_ROOT_FILENAME="${ROOT_FILENAME/$DATA_STREAM/numib}"
sed -e "s,ApplicationMgr.OutStream.*$,ApplicationMgr.OutStream = {\"PdstlStream\"\,\"numibeamStream\"};,g"\
-e "s,LinjcStream.*$,,g"\
-e "s,FilterSequence.Members.*$,FilterSequence.Members = {\"TriggerTypeFilter/PdstlFilter\"\,\"TriggerTypeFilter/numibeamFilter\"};,g"\
-e "s,BuildRawEventAlg.InputFileName.*$,BuildRawEventAlg.InputFileName = \"${FILENAME}\";,g"\
-e "s,PdstlStream.Output.*$,PdstlStream.Output=\"DATAFILE='PFN:$PDSTL_ROOT_FILENAME' TYP='POOL_ROOTTREE' OPT='RECREATE'\";,g"\
-e "s,numibeamStream.Output.*$,numibeamStream.Output=\"DATAFILE='PFN:$NUMIB_ROOT_FILENAME' TYP='POOL_ROOTTREE' OPT='RECREATE'\";,g"\
-i ${OPTION_FILENAME}
elif [[ $DATA_STREAM == "numil" ]]; then
echo -e "\t\tupdating the light injection and numi beam portion" 2>&1 | tee -a $envlog
export LINJC_ROOT_FILENAME="${ROOT_FILENAME/$DATA_STREAM/linjc}"
export NUMIB_ROOT_FILENAME="${ROOT_FILENAME/$DATA_STREAM/numib}"
sed -e "s,ApplicationMgr.OutStream.*$,ApplicationMgr.OutStream = {\"LinjcStream\"\,\"numibeamStream\"};,g"\
-e "s,PdstlStream.*$,,g"\
-e "s,FilterSequence.Members.*$,FilterSequence.Members = {\"TriggerTypeFilter/LinjcFilter\"\,\"TriggerTypeFilter/numibeamFilter\"};,g"\
-e "s,BuildRawEventAlg.InputFileName.*$,BuildRawEventAlg.InputFileName = \"${FILENAME}\";,g"\
-e "s,LinjcStream.Output.*$,LinjcStream.Output=\"DATAFILE='PFN:$LINJC_ROOT_FILENAME' TYP='POOL_ROOTTREE' OPT='RECREATE'\";,g"\
-e "s,numibeamStream.Output.*$,numibeamStream.Output=\"DATAFILE='PFN:$NUMIB_ROOT_FILENAME' TYP='POOL_ROOTTREE' OPT='RECREATE'\";,g"\
-i ${OPTION_FILENAME}
else
echo -e "Please set the data stream environment variable to (pdstl, linjc, numib, numip, or numil)" 2>&1 | tee -a $envlog
echo -e "Exit the executable script." 2>&1 | tee -a $envlog
if [ ${JOBSCRIPT_TEST} -eq 0 ]; then
echo -e "Updating jobscript name jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log\n" 2>&1 | tee -a $envlog
mv jobscript.log jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log
fi
exit 1
fi
# PedestalFinder_fRawDigits.opts
elif [[ $OPT_TIER == "pdstl" ]]; then
echo -e "\tConfiguring the pedestal finder option file" 2>&1 | tee -a $envlog
sed -e "s,RawDigits.root,$FILENAME,g" \
-e "s,HistogramPersistencySvc.OutputFile.*$,HistogramPersistencySvc.OutputFile = \"$HISTO_FILENAME\";,g" \
-e "s,PedestalFinder.AllOutFileName.*$,PedestalFinder.AllOutFileName = \"$ALLOUTFILENAME\";,g" \
-e "s,PedestalFinder.ScrubbedOutFileName.*$,PedestalFinder.ScrubbedOutFileName = \"$SCRUBBEDOUTFILENAME\";,g" \
-i ${OPTION_FILENAME}
# MaxPEGain.opts
elif [[ $OPT_TIER == "gain" ]]; then
echo -e "\tConfiguring the PMT gain option file" 2>&1 | tee -a $envlog
sed -e "s,RawDigits.root,$FILENAME,g" \
-e "s,HistogramPersistencySvc.OutputFile.*$,HistogramPersistencySvc.OutputFile = \"$HISTO_FILENAME\";,g" \
-e "s,MaxPEGainAlg.OutFileName.*$,MaxPEGainAlg.OutFileName = \"$GAINTABLEFILENAME\";,g" \
-e "s,MaxPEGainAlg.ProblemChannelFileName.*$,MaxPEGainAlg.ProblemChannelFileName = \"$GAINPROBLEMCHANNELSFILENAME\";,g" \
-e "s,MaxPEGainAlg.HVFileName.*$,MaxPEGainAlg.HVFileName = \"$GAINTUNEDHVFILENAME\";,g" \
-i ${OPTION_FILENAME}
# OfflinePedSup_fRawDigits.opts
elif [[ $OPT_TIER == "supdigs" ]]; then
echo -e "\tConfiguring the suppressed digits option file" 2>&1 | tee -a $envlog
sed -e "s,RawDigits.root,$FILENAME,g" \
-e "s,SupDigits.root,$ROOT_FILENAME,g"\
-i ${OPTION_FILENAME}
# RockMuonReconstruction.opts
elif [[ $OPT_TIER == "rockmu" ]]; then
echo -e "\tConfiguring the rock muons option file" 2>&1 | tee -a $envlog
sed -e "s,SupDigits.root,$FILENAME,g" \
-e "s,HistogramPersistencySvc.OutputFile.*$,HistogramPersistencySvc.OutputFile = \"$HISTO_FILENAME\";,g" \
-e "s,RockMuonCalibrationAlg.OutputFilename.*$,RockMuonCalibrationAlg.OutputFilename = \"$ROCKMUONFILENAME\";,g" \
-i ${OPTION_FILENAME}
# Reconstruction
elif [[ $OPT_TIER == "reco" ]]; then
echo -e "\tConfiguring the reconstruction option file" 2>&1 | tee -a $envlog
sed -e "s,SupDigits.root,$FILENAME,g" \
-e "s,DSTWriterAlg.OutputFile.*$,DSTWriterAlg.OutputFile = \"$DST_FILENAME\";,g" \
-e "s,HistogramPersistencySvc.OutputFile.*$,HistogramPersistencySvc.OutputFile = \"$HISTO_FILENAME\";,g" \
-e "s,PoolIOFile.Output.*$,PoolIOFile.Output = \"DATAFILE='$ROOT_FILENAME' TYP='POOL_ROOTTREE' OPT='RECREATE'\";,g" \
-i ${OPTION_FILENAME}
# The file tier is not defined
else
echo -e "The file tier is not recognized. Please see the help menu." 2>&1 | tee -a $envlog
echo -e "Exit the executable script." 2>&1 | tee -a $envlog
if [ ${JOBSCRIPT_TEST} -eq 0 ]; then
echo -e "Updating jobscript name jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log\n" 2>&1 | tee -a $envlog
mv jobscript.log jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log
fi
exit 1
fi
# print debug information
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
echo -e "Printing the output of ${OPTION_FILENAME}\n" 2>&1 | tee -a $envlog
less ${OPTION_FILENAME}
fi
#=================================================================================================
#=================================================================================================
#=================================================================================================
#+++++++++++++++++++++++++++++++++++++++++
# running the option file
#+++++++++++++++++++++++++++++++++++++++++
execute_gaudi_job() {
export GAUDI_START_TIME="$(date -u +%s)"
SystemTestsApp.exe ${OPTION_FILENAME} >> ${LOG_FILENAME}
export GAUDI_END_TIME="$(date -u +%s)"
gaudiTime=$((GAUDI_END_TIME - GAUDI_START_TIME))
echo -e "\t\tThe time for running [ SystemTestsApp.exe ${OPTION_FILENAME} ]: $gaudiTime seconds" 2>&1 | tee -a $envlog
}
echo -e "\tRunning the option file [$OPTION_FILENAME]\n" 2>&1 | tee -a $envlog
mem_before=$(grep MemFree /proc/meminfo | awk '{print $2}')
execute_gaudi_job
mem_after=$(grep MemFree /proc/meminfo | awk '{print $2}')
mem_used=$((mem_before - mem_after))
echo -e "\t\tThe memory used by [ SystemTestsApp.exe ${OPTION_FILENAME} ]: [before,after,used] [$mem_before,$mem_after,$mem_used] KB" 2>&1 | tee -a $envlog
#++++++++++++++++++++++++++
# check job output
#+++++++++++++++++++++++++
export GAUDI_JOB_SUCCESS=true
export GAUDI_ROOT_FILE=""
if [[ $OPT_TIER == "rawdigs" ]]; then
if [[ $DATA_STREAM == "pdstl" || $DATA_STREAM == "linjc" || $DATA_STREAM == "numib" ]]; then
if [ ! -f "$ROOT_FILENAME" ]; then
echo -e "The output file [$ROOT_FILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
elif [[ $DATA_STREAM == "numip" ]]; then
if [ ! -f "$PDSTL_ROOT_FILENAME" ]; then
echo -e "The output file [$PDSTL_ROOT_FILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
if [ ! -f "$NUMIB_ROOT_FILENAME" ]; then
echo -e "The output file [$NUMIB_ROOT_FILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
elif [[ $DATA_STREAM == "numil" ]]; then
if [ ! -f "$LINJC_ROOT_FILENAME" ]; then
echo -e "The output file [$LINJC_ROOT_FILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
if [ ! -f "$NUMIB_ROOT_FILENAME" ]; then
echo -e "The output file [$NUMIB_ROOT_FILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
fi
elif [[ $OPT_TIER == "pdstl" ]]; then
if [ ! -f "$ALLOUTFILENAME" ]; then
echo -e "The output file [$ALLOUTFILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
if [ ! -f "$SCRUBBEDOUTFILENAME" ]; then
echo -e "The output file [$SCRUBBEDOUTFILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
elif [[ $OPT_TIER == "gain" ]]; then
if [ ! -f "$GAINTABLEFILENAME" ]; then
echo -e "The output file [$GAINTABLEFILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
if [ ! -f "$GAINPROBLEMCHANNELSFILENAME" ]; then
echo -e "The output file [$GAINPROBLEMCHANNELSFILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
if [ ! -f "$GAINTUNEDHVFILENAME" ]; then
echo -e "The output file [$GAINTUNEDHVFILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
elif [[ $OPT_TIER == "supdigs" ]]; then
if [ ! -f "$ROOT_FILENAME" ]; then
echo -e "The output file [$ROOT_FILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
elif [[ $OPT_TIER == "rockmu" ]]; then
if [ ! -f "$ROCKMUONFILENAME" ]; then
echo -e "The output file [$ROCKMUONFILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
elif [[ $OPT_TIER == "reco" ]]; then
if [ ! -f "$DST_FILENAME" ]; then
echo -e "The output file [$DST_FILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
if [ ! -f "$ROOT_FILENAME" ]; then
echo -e "The output file [$ROOT_FILENAME] does not exist. Exiting!" 2>&1 | tee -a $envlog
GAUDI_JOB_SUCCESS=false
fi
fi
#+++++++++++++++++++++++++
# create metadata file
#+++++++++++++++++++++++++
if [[ $OPT_TIER == "rockmu" || $OPT_TIER == "reco" ]]; then
echo -e "\n\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" 2>&1 | tee -a $envlog
export METADATA_EXTRACT=${INPUT_TAR_DIR_LOCAL}/Minerva_${MINERVA_RELEASE}/Tools/ProductionScriptsLite/Mx2_scripts/Mx2MetadataExtract.py
filenames=""
if [[ $OPT_TIER == "rockmu" ]]; then
filenames=`ls *RockMuons.root`
elif [[ $OPT_TIER == "reco" ]]; then
filenames=`ls -xm --width=1000 *RecoData*.root`
fi
IFS=', ' read -a files <<< "$filenames";
for index in "${!files[@]}"
do
filename="${files[index]}"
if [[ $filename == *"histos"* ]]; then
continue
elif [[ $filename == *"dst"* ]]; then
export JSON_FILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/$ext/_dst.json}"
else
export JSON_FILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/$ext/.json}"
fi
fsize=`ls -l ${filename} | cut -f5 -d' '`
checksum=`xrdadler32 ${filename} | cut -f1 -d' '`
echo -e "Creating the metadata file [$filename:$JSON_FILENAME] for tier [$OPT_TIER]" 2>&1 | tee -a $envlog
if [ -f "$METADATA_EXTRACT" ]; then
echo -e "\tRunning the command [python ${METADATA_EXTRACT} --name=${filename} --ifile=${did} --ofile=${JSON_FILENAME}] --size=${fsize} --checksum=${checksum}]" 2>&1 | tee -a $envlog
(
setup metacat
setup python v3_9_15
python ${METADATA_EXTRACT} --name=${filename} --ifile=${did} --ofile=${JSON_FILENAME} --size=${fsize} --checksum=${checksum}
)
echo -e "\n" 2>&1 | tee -a $envlog
else :
echo -e "Cannot create the metadata file [$JSON_FILENAME]. The script [$METADATA_EXTRACT] does not exist." 2>&1 | tee -a $envlog
fi
done
echo -e "\n" 2>&1 | tee -a $envlog
fi
#++++++++++++++++++++++
# clean up
#++++++++++++++++++++++
if [[ $OPT_TIER == "rawdigs" ]]; then
if [[ $DATA_STREAM == "numip" && $SAVE_PDSTL -eq 1 ]]; then
echo -e "Removing the output numi beam file [$NUMIB_ROOT_FILENAME]\n" 2>&1 | tee -a $envlog
rm -f $NUMIB_ROOT_FILENAME
elif [[ $DATA_STREAM == "numip" && $SAVE_NUMIB -eq 1 ]]; then
echo -e "Removing the output pedestal file [$PDSTL_ROOT_FILENAME]\n" 2>&1 | tee -a $envlog
rm -f $PDSTL_ROOT_FILENAME
elif [[ $DATA_STREAM == "numil" && $SAVE_LINJC -eq 1 ]]; then
echo -e "Removing the output numi beam file [$NUMIB_ROOT_FILENAME]\n" 2>&1 | tee -a $envlog
rm -f ${NUMIB_ROOT_FILENAME}
elif [[ $DATA_STREAM == "numil" && $SAVE_NUMIB -eq 1 ]]; then
echo -e "Removing the output light injection file [$LINJC_ROOT_FILENAME]\n" 2>&1 | tee -a $envlog
rm -f $LINJC_ROOT_FILENAME
fi
fi
#++++++++++++++++++++++++++
# update the input file
#++++++++++++++++++++++++++
inext=$(( $i + 1 ))
if [ ${inext} -lt ${total} ]; then
if [[ "${TIER[$i+1]}" == "pdstl" ]]; then
FILENAME=`ls * | grep -i pdstl | grep -i root`
elif [[ "${TIER[$i+1]}" == "gain" ]]; then
FILENAME=`ls * | grep -i linjc | grep -i root`
elif [[ "${TIER[$i+1]}" == "supdigs" ]]; then
FILENAME=`ls * | grep -i numib | grep -i RawDigits.root`
elif [[ "${TIER[$i+1]}" == "rockmu" || "${TIER[$i+1]}" == "reco" ]]; then
FILENAME=`ls * | grep -i numi | grep -i SupDigits.root`
else
echo -e "Please see the help menu. The file tier [${TIER[i+1]}] is invalid.\n" 2>&1 | tee -a $envlog
if [ ${JOBSCRIPT_TEST} -eq 0 ]; then
echo -e "Updating jobscript name jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log\n" 2>&1 | tee -a $envlog
mv jobscript.log jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log
fi
exit 1
fi
echo -e "\tThe next input file is [$FILENAME]\n\n" 2>&1 | tee -a $envlog
fi
#++++++++++++++++++++++++++++++++++++++++++++++
# end of executing the option files
#++++++++++++++++++++++++++++++++++++++++++++++
done
#++++++++++++++++++++++
# final clean up
#++++++++++++++++++++++
if [ -f "$INPUT_FILE" ]; then
echo -e "\nRemoving the local copy of the input file ${WORKSPACE}/${INPUT_FILE}\n" 2>&1 | tee -a $envlog
rm -f ${WORKSPACE}/${INPUT_FILE}
fi
######################################
#
# END OF RUNNING GAUDI JOBS
#
######################################
#+++++++++++++++++++++++++++++++++++++++++++
# marking input file as processed
#+++++++++++++++++++++++++++++++++++++++++++
if [ ${JOBSCRIPT_TEST} -eq 0 ]; then
echo -e "Marking the input file(s) [${pfn}] as processed.\n" 2>&1 | tee -a $envlog
echo -e "${pfn}" > justin-processed-pfns.txt
fi
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
# checking the contents of the current directory
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
echo -e "\n\nThe contents in the ${WORKSPACE} directory:" 2>&1 | tee -a $envlog
ls -lha * 2>&1 | tee -a $envlog
echo -e "" | tee -a $envlog
#+++++++++++++++++++++++++++++++++++++++++
# end of script
#+++++++++++++++++++++++++++++++++++++++++
date +"%n%a %b %d %T %Z %Y%n" | tee -a $envlog
echo -e "Exit the jobscript.\n\n" 2>&1 | tee -a $envlog
if [ ${JOBSCRIPT_TEST} -eq 0 ]; then
echo -e "Updating jobscript name jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log\n" 2>&1 | tee -a $envlog
mv jobscript.log jobscript_${JUSTIN_WORKFLOW_ID}.${JUSTIN_STAGE_ID}.${JUSTIN_SUBID}.log
fi
exit 0
justIN time: 2024-11-23 10:45:09 UTC justIN version: 01.01.09