Skip to content
Snippets Groups Projects
submit_faser_reco.sh 4.33 KiB
Newer Older
Eric Torrence's avatar
Eric Torrence committed
#!/bin/bash
# Used with a condor file to submit to vanilla universe
#
# Usage:
Eric Torrence's avatar
Eric Torrence committed
# submit_faser_reco.sh file_path [release_directory] [working_directory] [nevents]
Eric Torrence's avatar
Eric Torrence committed
# 
# Options:
#   --out - specify output location (in EOS) to copy output HITS file
#   --log - specify output location (in EOS) for log file
# 
Eric Torrence's avatar
Eric Torrence committed
# file_path - full file name (with path)
# release_directory - optional path to release install directory (default pwd)
# working_directory - optional path to output directory location (default pwd)
Eric Torrence's avatar
Eric Torrence committed
# nevents - optional number of events to process (default: -1 - all)
Eric Torrence's avatar
Eric Torrence committed
#
# The release directory must already be set up 
# (so an unqualified asetup can set up the release properly)
#
# Script will use git describe to find the release tag.  
# If this matches reco/r???? it will be passed to the reco job
#
#----------------------------------------
# Keep track of time
SECONDS=0
Eric Torrence's avatar
Eric Torrence committed
#
# Parse command-line options
while [ -n "$1" ]
do 
  case "$1" in
      -l | --log)
	  logdest="$2";
	  shift;
	  shift;; # Must eat 2 options here

      -o | --out)
	  outdest="$2";
	  shift;
	  shift;;

      --) # End of options
	  shift; # Eat this
	  break;; # And stop parsing

    -*) 
	  echo "Unknown option $1"
	  shift;;

    *) break;;  # Not an option, don't shift
  esac
done
#
# Parse command-line arguments
Eric Torrence's avatar
Eric Torrence committed
file_path=${1}
release_directory=${2}
working_directory=${3}
Eric Torrence's avatar
Eric Torrence committed
nevents=${4}
Eric Torrence's avatar
Eric Torrence committed
#
# Set defaults if arguments aren't provided
if [ -z "$file_path" ]
then
  echo "No file_path specified!"
  exit 1
fi
#
if [ -z "$release_directory" ]
then
  release_directory=`pwd`
fi
#
if [ -z "$working_directory" ]
then
  working_directory=`pwd`
fi
Eric Torrence's avatar
Eric Torrence committed
#
if [ -z "$nevents" ]
then
  nevents="-1"
fi
#
Eric Torrence's avatar
Eric Torrence committed
starting_directory=`pwd`
#
# Now extract the run number and file stem
#
# First, get the filename
file_name=$(basename "$file_path")
# 
# Now split based on '.' to get stem
defaultIFS=$IFS
IFS='.'
read file_stem ext <<< "$file_name"
#
# Finally extract the run number
IFS='-'
# Read the split words into an array based on delimiter
read faser type run_number segment <<< "$file_stem"
#
# Set the IFS delimeter back or else echo doesn't work...
IFS=$defaultIFS
#
# Make output directory if needed
output_directory="$working_directory/Run-$run_number"
mkdir -p "$output_directory"
#
# This magic redirects everything in this script to our log file
logfile="${file_stem}.rec.log"
exec >& "$output_directory/$logfile"
Eric Torrence's avatar
Eric Torrence committed
echo `date` - $HOSTNAME
echo "File: $file_name"
echo "Release: $release_directory"
echo "Output: $output_directory"
echo "Starting: $starting_directory"
#
# Set up the release (do this automatically)?
export ATLAS_LOCAL_ROOT_BASE=/cvmfs/atlas.cern.ch/repo/ATLASLocalRootBase
Eric Torrence's avatar
Eric Torrence committed
source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh 
Eric Torrence's avatar
Eric Torrence committed
#
# Try automatic
# Always go back to the starting directory in case paths are relative
cd "$starting_directory"
cd "$release_directory"
#asetup 
#source build/x8*/setup.sh
Eric Torrence's avatar
Eric Torrence committed
#
# Do this by hand
asetup --input=calypso/asetup.faser Athena,22.0.49
source build/x86*/setup.sh
Eric Torrence's avatar
Eric Torrence committed
#
#
# Try to find a release tag
cd calypso
recotag=`git describe`
if [[ "$recotag" == "reco/r"???? ]]; then
Eric Torrence's avatar
Eric Torrence committed
  tag=`echo "$recotag" | cut -c 6-11`
  echo "Found reco tag: $tag"
fi
if [[ "$recotag" == "reco/p"???? ]]; then
  tag=`echo "$recotag" | cut -c 6-11`
  echo "Found proc tag: $tag"
Eric Torrence's avatar
Eric Torrence committed
fi
#
# Move to the run directory
cd "$starting_directory"
cd "$output_directory"
#
# Remove any previous directory if it exists
Eric Torrence's avatar
Eric Torrence committed
#if [[ -e "$file_stem" ]]; then
#    echo "Remove previous directory $file_stem"
#    rm -rf "$file_stem"
#fi
Eric Torrence's avatar
Eric Torrence committed
#
# Make run directory
Eric Torrence's avatar
Eric Torrence committed
if [[ -e "$file_stem" ]]; then
    echo "Directory $file_stem already exists"
else
    mkdir "$file_stem"
fi
Eric Torrence's avatar
Eric Torrence committed
cd "$file_stem"
#
# Run job
Eric Torrence's avatar
Eric Torrence committed
if [[ -z "$rtag" ]]; then
    faser_reco.py "--nevents=$nevents" "$file_path"
Eric Torrence's avatar
Eric Torrence committed
else
Eric Torrence's avatar
Eric Torrence committed
    faser_reco.py "--nevents=$nevents" "--reco=$tag" "$file_path"
Eric Torrence's avatar
Eric Torrence committed
fi
#
# Print out ending time
date
echo "Job finished after $SECONDS seconds"
# 
# Copy output to EOS if desired
export EOS_MGM_URL=root://eospublic.cern.ch
#
if ! [ -z "$outdest" ]
then
    ls -l
    echo "copy *-RDO.root to $outdest"
    mkdir -p $outdest
    eos cp *-xAOD.root $outdest
fi
#
# Also copy log file
if ! [ -z "$logdest" ]
then
    cd ..
    ls -l
    echo "copy $logfile to $logdest"
    mkdir -p $logdest
    eos cp $logfile $logdest
elif ! [ -z "$outdest" ]
then 
    cd ..
    ls -l
    echo "copy $logfile to $outdest"
    mkdir -p $outdest
    eos cp $logfile\ $outdest
fi