Stats of processed input files as CSV or JSON, and of uploaded output files as CSV or JSON (up to 10000 files included)
File reset events, by site
Site
Allocated
Outputting
US_SU-ITS
7
0
US_Swan
3
0
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
exit 0
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
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
echo -e "Using rucio to download file [$did]" 2>&1 | tee -a $envlog
(
export RUCIO_ACCOUNT="justinreadonly"
source /cvmfs/fermilab.opensciencegrid.org/products/common/etc/setups
source /cvmfs/dune.opensciencegrid.org/products/dune/setup_dune.sh
setup python v3_9_15
setup rucio
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
rucio whoami 2>&1 | tee -a $envlog
fi
rucio download ${did} --dir ${WORKSPACE}
subdir=`echo ${did} | cut -f1 -d':'`
mv ${WORKSPACE}/${subdir}/* ${WORKSPACE}/
rm -rf ${subdir}
if [ ${DEBUG_SUBMISSION_SCRIPT} -eq 1 ]; then
ls -lha * 2>&1 | tee -a $envlog
fi
)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Get the filename
#++++++++++++++++++++++++++++++++++++++++++++++++++++++
export FILENAME=`echo ${did} | cut -f2 -d':'`
if [ ! -f ${FILENAME} ]; then
echo -e "The input file [${FILENAME}] does not exist." 2>&1 | tee -a $envlog
exit 0
else
echo -e "The input file is ${FILENAME}" 2>&1 | tee -a $envlog
fi
#+++++++++++++++++++++++++++++++++++++++++
# 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 "\n\t\tPrinting the output of ${OPTION_FILENAME}\n" 2>&1 | tee -a $envlog
less ${OPTION_FILENAME}
echo -e "\n\n"
fi
#=================================================================================================
#=================================================================================================
#=================================================================================================
#+++++++++++++++++++++++++++++++++++++++++
# running the option file
#+++++++++++++++++++++++++++++++++++++++++
execute_gaudi_job() {
export GAUDI_START_TIME="$(date -u +%s)"
SystemTestsApp.exe ${OPTION_FILENAME} 2>&1 | tee -a ${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
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 == "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=`ls -xm --width=1000 *RecoData*.root`
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.root.json}"
export DATA_TIER="dst-reconstructed"
else
export JSON_FILENAME=$OUTFILES_DIR/"${OUTPUT_FILE/$ext/.root.json}"
export DATA_TIER="full-reconstructed"
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
#++++++++++++++++++++++++++
# 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
done
#++++++++++++++++++++++++++++++++++++++++++++++
# end of executing the option files
#++++++++++++++++++++++++++++++++++++++++++++++
#++++++++++++++++++++++
# 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
if [[ ${SAVE_NUMIB} ]];then
rm -rf ${WORKSPACE}/*Digits*
rm -rf ${WORKSPACE}/*histos*
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: 2025-09-19 03:25:45 UTC justIN version: 01.05.00