#!/bin/bash
# INSTRUCTIONS TO RUN AlignEM-SWiFT ON Lonestar6 AT TACC
# (DEPLOYMENT BY CONDA ENVIRONMENT STRATEGY)

# NOTES:
#     CONNECT TO Lonestar6 THROUGH THE VIS PORTAL. CHOOSE DCV SESSION.
#     PURGE MODULES (HAVE NO MODULES LOADED) WHEN CREATING OR ACTIVATING A CONDA ENV

# TO RUN THIS SCRIPT:
# $ source tacc_bootstrap

CACHER="0"
DEBUG="0"
PULL="1"

echo "Parsing cli arguments..."

for i in "$@"; do
  case $i in
    -c|--cacher)
      CACHER="1"
      shift
      ;;
    -d|--debug)
      DEBUG="1"
      shift # past argument with no value
      ;;
    -p=*|--pull=*)
      PULL="${i#*=}"
      shift
      ;;
    -*|--*)
      echo "Unknown option $i"
      exit 1
      ;;
    *)
      ;;
  esac
done

echo "CACHER  : ${CACHER}"
echo "DEBUG   : ${DEBUG}"
echo "PULL    : ${PULL}"

echo "Setting things up..."

echo "Checking if miniconda3 is installed..."
if [ ! -d "$WORK/miniconda3" ]; then
  echo "Miniconda not found in $WORK..."
  echo "Installing..."
  mkdir -p $WORK/miniconda3
  wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O $WORK/miniconda3/miniconda.sh
  bash $WORK/miniconda3/miniconda.sh -b -u -p $WORK/miniconda3
  rm -rf $WORK/miniconda3/miniconda.sh

  echo "Ensuring conda base environment is OFF..."
  conda config --set auto_activate_base false
fi

echo "Initializing conda..."
$WORK/miniconda3/bin/conda init bash

#echo "Sourcing .bashrc..."
#source ~/.bashrc

#echo "Updating conda..."
#conda update --name base conda -y

echo "Checking if AlignEM-SWiFT exists in $WORK..."
if [ ! -d "$WORK/swift-ir" ]; then
  echo "AlignEM-SWiFT not found in $WORK..."
  cd $WORK
  git clone https://github.com/mcellteam/swift-ir.git
fi

echo "Changing directory to swift-ir..."
cd $WORK/swift-ir

echo "Checking out development_ng branch..."
git checkout development_ng
git pull

echo "Purging modules..."
module purge

if [ "$PULL" != "0" ] ; then
  echo "Pulling the latest changes from GitHub..."
  cd $WORK/swift-ir
  git stash
  git pull --ff-only
else
  echo "Skipping pull from GitHub..."
fi
#echo "Pulling the latest changes from GitHUb..."
#cd $WORK/swift-ir
#git stash
#git pull --ff-only

echo "Activating conda environment..."
conda activate /work/08507/joely/ls6/miniconda3/envs/alignTACC1024

#echo "Unsetting MAX_NUM_THREADS..."
#unset MAX_NUM_THREADS
#echo "Unsetting GALLIUM_DRIVER..."
#unset GALLIUM_DRIVER # Conflicts with TACC SWR module and env variables
echo "Unsetting MESA_DEBUG..."
unset MESA_DEBUG
echo "Unsetting QT_API..."
unset QT_API
echo "Setting QT API environment flag QT_API=pyqt5..."
export QT_API=pyqt5

#echo "Setting Environment Variables in Conda API..."
#NOTE SOME OF THESE ARE ALREADY SET IN THE ENVIRONMENT
#conda env config vars set OBJC_DISABLE_INITIALIZE_FORK_SAFETY='YES'
#conda env config vars set QTWEBENGINE_CHROMIUM_FLAGS='--disable-web-security --no-sandbox --enable-logging --log-level=0'
#conda env config vars set PYTHONDEVMODE=1

#echo "Disabling QtWebEngine sandbox..."
#export QTWEBENGINE_CHROMIUM_FLAGS='--disable-sandbox'
#export QTWEBENGINE_DISABLE_SANDBOX=1
export BLOSC_NTHREADS=1

echo "Activating Preconfigured Conda Environment..."
conda activate /work/08507/joely/ls6/miniconda3/envs/alignTACC1024

echo "Environment Variables:"
conda env config vars list

echo "Loading intel/19.1.1 module..."
ml intel/19.1.1
echo "Loading swr/21.2.5 module..."
ml swr/21.2.5
echo "Loading impi/19.0.9 module..."
ml impi/19.0.9
echo "Loading fftw3/3.3.10 module..."
ml fftw3/3.3.10

if [ "$CACHER" = "1" ] ; then
  echo "Loading python_cacher module..."
  ml python_cacher/1.2
fi

echo "3D Acceleration/OpenGL Rendering:"
swr glxinfo -B

node=$(hostname --alias)
echo "Node     : $node"

echo ""
echo "You should now be in the environment 'alignTACC1024'."
echo "To relaunch AlignEM-SWiFT on Lonestar6 @ TACC:"
echo ""
echo "    cd $WORK/swift-ir"
echo "    source bootstrap_alignEM"
echo ""
#echo "Launching AlignEM-SWiFT in *HEADLESS* mode..."
echo "Launching AlignEM-SWiFT..."

if [ "$DEBUG" = "1" ] ; then
  module load valgrind
  PYTHONFAULTHANDLER=1 PYTHONMALLOC=malloc catchsegv valgrind --leak-check=full --show-leak-kinds=all -s python3 $WORK/swift-ir/alignEM.py
else
  python3 $WORK/swift-ir/alignEM.py
fi



