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
:<<'EOF'
The following optional environment variables can be set when creating the
workflow/stage: FCL_FILE, NUM_EVENTS, DUNE_VERSION, DUNE_QUALIFIER
EOF
# fcl file and DUNE software version/qualifier to be used
ANA_FILE=QLMatchAna.fcl
NUM_EVENTS=2
DUNE_VERSION=${DUNE_VERSION:-v09_91_04d01}
DUNE_QUALIFIER=${DUNE_QUALIFIER:-e26:prof}
# number of events to process from the input file
if [ "$NUM_EVENTS" != "" ] ; then
events_option="-n $NUM_EVENTS"
fi
# First get an unprocessed file from this stage
did_pfn_rse=`$JUSTIN_PATH/justin-get-file`
if [ "$did_pfn_rse" = "" ] ; then
echo "Nothing to process - exit jobscript"
exit 0
fi
echo "did_pfn_rse: $did_pfn_rse"
# Keep a record of all input DIDs, for pdjson2meta file -> DID mapping
echo "$did_pfn_rse" | cut -f1 -d' ' >>all-input-dids.txt
# pfn is also needed when creating justin-processed-pfns.txt
pfn=`echo $did_pfn_rse | cut -f2 -d' '`
echo "Input PFN = $pfn"
# Setup DUNE environment
source /cvmfs/dune.opensciencegrid.org/products/dune/setup_dune.sh
export PRODUCTS="${INPUT_TAR_DIR_LOCAL}/localProducts_larsoft_v09_91_04_01_e26_prof/:$PRODUCTS" #working
setup dunesw "$DUNE_VERSION" -q "$DUNE_QUALIFIER"
# check Symlink
echo "check symbolic links of ${INPUT_TAR_DIR_LOCAL}/build_slf7.x86_64/QLMatching/slf7.x86_64.e26.prof/lib/libQLMatchAna_module.so: "
ldd ${INPUT_TAR_DIR_LOCAL}/build_slf7.x86_64/QLMatching/slf7.x86_64.e26.prof/lib/libQLMatchAna_module.so
# Redo the Symlink the blipreco lib so
echo "Redo the symlink"
ln -sf ${INPUT_TAR_DIR_LOCAL}/build_slf7.x86_64/dunereco/slf7.x86_64.e26.prof/lib/libdune_BlipRecoAlg.so /exp/dune/app/users/weishi/LQMatch/build_slf7.x86_64/dunereco/slf7.x86_64.e26.prof/lib/libdune_BlipRecoAlg.so
# May need to update for libdune_BlipUtils.so as well??
# check link
echo "Again check symbolic links of libQLMatchAna_module.so: "
ldd ${INPUT_TAR_DIR_LOCAL}/build_slf7.x86_64/QLMatching/slf7.x86_64.e26.prof/lib/libQLMatchAna_module.so
# need this to let lar find the analyzer lib
#export CET_PLUGIN_PATH="${INPUT_TAR_DIR_LOCAL}/build_slf7.x86_64/QLMatching/slf7.x86_64.e26.prof/lib:${INPUT_TAR_DIR_LOCAL}/build_slf7.x86_64/dunereco/slf7.x86_64.e26.prof/lib:$CET_PLUGIN_PATH"
export CET_PLUGIN_PATH="${INPUT_TAR_DIR_LOCAL}/build_slf7.x86_64/QLMatching/slf7.x86_64.e26.prof/lib:$CET_PLUGIN_PATH"
#export LD_LIBRARY_PATH="${INPUT_TAR_DIR_LOCAL}/build_slf7.x86_64/dunereco/slf7.x86_64.e26.prof/lib:${INPUT_TAR_DIR_LOCAL}/build_slf7.x86_64/QLMatching/slf7.x86_64.e26.prof/lib:$LD_LIBRARY_PATH"
# It IS IMPORTANT TO PUT ALL CUSTOMIZED FCL FILES IN INPUT_TAR_DIR_LOCAL
export FHICL_FILE_PATH=${INPUT_TAR_DIR_LOCAL}:${FHICL_FILE_PATH}
export FW_SEARCH_PATH=${INPUT_TAR_DIR_LOCAL}/config_data:$FW_SEARCH_PATH
export FW_SEARCH_PATH=${INPUT_TAR_DIR_LOCAL}:$FW_SEARCH_PATH
export OMP_NUM_THREADS=${JUSTIN_PROCESSORS}
# Construct outFile from input $pfn
now=$(date -u +"%Y-%m-%dT_%H%M%SZ")
Ffname=`echo $pfn | awk -F/ '{print $NF}'`
fname=`echo $Ffname | awk -F. '{print $1}'`
outAnaFile=${fname}_QLMatch_ana_${now}
campaign="justIN.w${JUSTIN_WORKFLOW_ID}s${JUSTIN_STAGE_ID}"
(
# Do the scary preload stuff in a subshell!
# be able to read a file from an xroot path
export LD_PRELOAD=${XROOTD_LIB}/libXrdPosixPreload.so
#echo "lar --print-description QLMatchAna"
#lar --print-description QLMatchAna
lar -c $ANA_FILE $events_option -T ${outAnaFile}_hist.root $pfn > ${fname}_myana_${now}.log 2>&1
)
# Subshell exits with exit code of last command
larExit=$?
echo "lar exit code $larExit"
echo "$pfn" > justin-processed-pfns.txt
# Create compressed tar file with all log files
tar zcf `echo "$JUSTIN_JOBSUB_ID.logs.tgz" | sed 's/@/_/g'` *.log
exit $jobscriptExit
#exit $larExit
justIN time: 2025-11-05 21:05:21 UTC justIN version: 01.05.01