University of Miami · Triton

Run one PyMACS simulation folder on Triton.

Each structure gets its own folder. The guided PyMACS runner records your choices, prepares the system with gmx_mpi, and submits one checkpoint-safe GPU job through Triton’s LSF scheduler.

IBM LSF schedulerGROMACS gmx_mpiOne folder · one structure · one simulationGPU submission and restart support

Before you start

Use this page only on Triton.

This walkthrough is for University of Miami users who can log into the Triton cluster. It does not replace the normal local Install & Run guide.

Connect with ssh triton from a configured UM account.Start in a clean folder containing one .pdb, .cif, or .mmcif structure.Protein–protein and protein–peptide systems do not require CGenFF ligand parameterization.

Connect to Triton

Log in before starting a run folder.

Triton access requires an active IDSC account. The cluster login host is t2.idsc.miami.edu; use your University of Miami CaneID as the username. See the official IDSC Triton page for account access, policies, and support.

SSH login
ssh YOUR_CANEID@t2.idsc.miami.edu
Off campus?

Connect through the University of Miami VPN first if your network configuration requires it. Once logged in, confirm the host with hostname and work from your project/home location rather than a local laptop path.

Step 1 — Install PyMACS into this run folder

Copy a fresh, self-contained PyMACS instance into your structure folder.

Make and enter a folder for one system, put the input structure there, then run the installer shown here. New installs include the guided pymacs_run.py helper and the Triton LSF profile.

PyMACS installer
bash <<'EOF'
set -e

REPO_URL="https://github.com/schurerlab/Pymacs.git"
TMP_DIR="$(mktemp -d)"
TARGET_DIR="$(pwd)"

cleanup() {
  rm -rf "$TMP_DIR"
}

trap cleanup EXIT

echo "======================================"
echo " PyMACS Quick Start Install"
echo "======================================"
echo
echo "This will copy a fresh PyMACS instance into:"
echo "  $TARGET_DIR"
echo

if ! command -v git >/dev/null 2>&1; then
  echo "ERROR: git is not installed or not available in PATH."
  echo "Please install git first, then run this command again."
  exit 1
fi

if [ "$(find "$TARGET_DIR" -mindepth 1 -maxdepth 1 | wc -l)" -gt 0 ]; then
  echo "WARNING: This directory is not empty."
  echo "Files with the same names as PyMACS files may be overwritten."
  echo
  printf "Continue copying PyMACS into this directory? [y/N]: "
  read -r answer </dev/tty
  case "$answer" in
    y|Y|yes|YES) ;;
    *)
      echo "Install cancelled."
      exit 0
      ;;
  esac
fi

echo
echo "Cloning PyMACS into a temporary folder..."
git clone "$REPO_URL" "$TMP_DIR/pymacs"

cd "$TMP_DIR/pymacs"

if command -v git-lfs >/dev/null 2>&1 || git lfs version >/dev/null 2>&1; then
  echo "Git LFS detected. Pulling large tracked files..."
  git lfs install
  git lfs pull
else
  echo "WARNING: Git LFS was not detected."
  echo "Core PyMACS files will still be copied, but large example assets may remain as LFS pointer files."
  echo "Install Git LFS later and re-run this installer if you need the full example datasets."
fi

echo
echo "Copying PyMACS files into your current directory..."

shopt -s dotglob nullglob
for item in "$TMP_DIR/pymacs"/*; do
  base="$(basename "$item")"
  if [ "$base" = ".git" ]; then
    continue
  fi

  if [ -e "$TARGET_DIR/$base" ]; then
    printf "Overwrite existing %s? [y/N]: " "$base"
    read -r overwrite </dev/tty
    case "$overwrite" in
      y|Y|yes|YES)
        rm -rf "$TARGET_DIR/$base"
        ;;
      *)
        echo "Skipping $base"
        continue
        ;;
    esac
  fi

  cp -R "$item" "$TARGET_DIR/"
done

echo "Cleaning up temporary clone..."
cleanup
trap - EXIT

cd "$TARGET_DIR"

echo
echo "Done. PyMACS has been copied into:"
echo "  $TARGET_DIR"
echo
echo "Next recommended steps:"
echo "  conda env create -f environment_cgenff.yml"
echo "  conda env create -f environment_mdanalysis.yml"
echo
echo "Then follow the Step 1 / Step 2 / Step 3 workflow on this page."
EOF

Step 2 — Install Miniforge and create the environments

Use a personal POWER9 Conda installation.

Triton uses linux-ppc64le, so install the matching Miniforge distribution in your home directory. It includes the fast libmamba solver; the cluster Miniconda module uses Conda's legacy solver and can take an impractical amount of time to resolve the analysis environment.

First-time Miniforge and environment setup
curl -fsSLo "$HOME/Miniforge3-Linux-ppc64le.sh" https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-ppc64le.sh
bash "$HOME/Miniforge3-Linux-ppc64le.sh" -b -p "$HOME/miniforge3"
source "$HOME/miniforge3/etc/profile.d/conda.sh"
conda config --set solver libmamba
conda init bash

conda env create -f environment_triton_setup.yml
conda env create -f environment_triton_analysis.yml

module purge
module load gcc-runtime/13.4.0-none-none-gh6rpjx
module load gromacs/2025.1-gcc-13.4.0-6vq7xfo
gmx_mpi --version

conda env list
conda activate cgenff
python --version

conda activate mdanalysis
python --version
Every new login shell

After the one-time conda init bash command, Conda starts automatically in new shells. Activate the environment you need with conda activate cgenff or conda activate mdanalysis. Before any interactive GROMACS command, run module purge, then load the GCC runtime and GROMACS modules shown above. The PyMACS LSF jobs handle Conda and modules automatically.

Protein–ligand runs only — private CGenFF access

Request access before selecting the Kyle Funnel workflow.

Protein–protein and protein–peptide runs can skip this section. For protein–small-molecule runs, request the private Funnel address, access token, and one-time terminal command. Do not place the token itself in ~/.bashrc, a job folder, or a repository.

One-time environment-variable template
# Replace only PRIVATE_FUNNEL_URL with the value sent by the PyMACS administrator.
# The token is stored separately in ~/.config/pymacs/cgenff-funnel.token.
cat >> "$HOME/.bashrc" <<'EOF'
export PYMACS_CGENFF_FUNNEL_URL="PRIVATE_FUNNEL_URL"
export PYMACS_CGENFF_TOKEN_FILE="$HOME/.config/pymacs/cgenff-funnel.token"
EOF
source "$HOME/.bashrc"
What these variables do

PYMACS_CGENFF_FUNNEL_URL identifies the private Kyle parameterization service; PYMACS_CGENFF_TOKEN_FILE points to a local, permission-restricted token file. Once the administrator’s one-time command has installed the token, these exports persist for future Triton logins. In python pymacs_run.py configure, choose option 5, remote CGenFF via Kyle Funnel.

Private access folder — copy it to Triton

Download, copy, install.

After your access request is approved, you will receive a private folder. Keep your University of Miami VPN connected while copying it to Triton. Download that folder to your computer first; if it downloads as a ZIP file, unzip it. The commands below assume it is in your Downloads folder.

Mac or Linux terminal: copy your private folder to Triton
# Replace YOUR_ACCESS_FOLDER with the folder you received.
# Replace YOUR_CANEID with your Triton username.
scp -r "$HOME/Downloads/YOUR_ACCESS_FOLDER" YOUR_CANEID@t2.idsc.miami.edu:~/

# Enter your CaneID password if prompted. Then log in:
ssh YOUR_CANEID@t2.idsc.miami.edu

# On Triton, enter the copied folder and install access:
cd ~/YOUR_ACCESS_FOLDER
bash install_pymacs_kyle_funnel_access.sh
source "$HOME/.bashrc"
If the copy fails

Confirm that the VPN is connected, that you replaced both placeholders, and that the folder is really in ~/Downloads. In Finder, you can drag the folder into Terminal after scp -r to insert its exact path, then add a space followed by YOUR_CANEID@t2.idsc.miami.edu:~/.

Step 3 — Guided configuration

Answer questions once; save the scientific choices in this folder.

The Q&A finds structures, detects PDB/mmCIF chains, lets you retain intended chains, names them, and presents numbered box options. It writes pymacs_run.json, which later commands read without repeating questions.

1

Start the Q&A

For protein–protein or protein–peptide systems, select the matching system type. Choose dodecahedron unless you have a specific reason to use another box.

python pymacs_run.py configure
2

Review saved answers

Validation confirms the input structure and required choices before PyMACS changes the folder.

python pymacs_run.py validate

Step 4 — Prepare the system

Run PyMACS Step 1 on Triton.

This creates the topology, box, solvated/ionized system, and em.tpr. It is the required checkpoint before an LSF GPU job can be submitted.

Step 1 preparation
conda activate cgenff
module purge
module load gcc-runtime/13.4.0-none-none-gh6rpjx
module load gromacs/2025.1-gcc-13.4.0-6vq7xfo
python pymacs_run.py setup

python pymacs_run.py status
Do not submit until setup succeeds.

The submit command checks for topol.top, solv_ions.gro, and em.tpr. Missing inputs stop the submission rather than sending an invalid job to the queue.

Step 5 — Submit MD, analysis, and reporting

Use the GPU for MD; free it for CPU analysis.

The Triton profile submits the 1-GPU Step 2 job plus a separate dependent CPU job. Both scripts charge the lab’s brd LSF project. The CPU job waits for successful MD, runs memory-safe chunked Step 3A, dispatches 3B or 3C when appropriate, and generates the Step 4 figurebook.

Submit and monitor
python pymacs_run.py submit --profile triton --with-analysis

# Replace JOBID with the number printed by submission
bjobs -u "$USER" -w
bpeek JOBID

tail -f mdrun.log

Automatic post-MD analysis

Chunked by default, no GPU required.

The configuration Q&A records analysis threads, chunk size, interface or ligand settings, and whether to build the figurebook. The default chunk size is 1,000 frames, so large trajectories are processed incrementally rather than loaded entirely into memory.

The dependent analysis job uses 8 CPU slots and no GPU.Choose --with-analysis to submit both jobs together.Use python pymacs_run.py submit-analysis --profile triton to run analysis separately later.

Step 6 — Resume safely

Walltime is not a failed simulation.

Triton jobs have a walltime limit. PyMACS writes GROMACS checkpoints during production; use the resume command to submit the same folder again from its latest checkpoint.

python pymacs_run.py resume --profile triton
Use python pymacs_run.py status before resubmitting.Keep all generated files in the same run folder.Use Step 3A analysis after production MD completes.

The whole Triton path

One folder, seven commands.

source "$HOME/miniforge3/etc/profile.d/conda.sh"
python pymacs_run.py configure
python pymacs_run.py validate
conda activate cgenff && module purge && module load gcc-runtime/13.4.0-none-none-gh6rpjx && module load gromacs/2025.1-gcc-13.4.0-6vq7xfo
python pymacs_run.py setup
python pymacs_run.py submit --profile triton --with-analysis
python pymacs_run.py resume --profile triton  # only if production needs continuation