#!/bin/bash
# Fusion ablation eval — max + POE variants on 4 viewpoints (same setup as Phase A viewpoint).

set -e
cd /data/cameron/para/libero

CKPT_MAX=/data/cameron/para/libero/checkpoints/libero_2view_max_v0/latest.pth
CKPT_POE=/data/cameron/para/libero/checkpoints/libero_2view_poe_v0/latest.pth

LOG_DIR=/data/cameron/para/libero/logs/fusion_ablation_eval
mkdir -p $LOG_DIR

# (variant, theta, phi, label, gpu)
declare -a CELLS=(
    "max  0    0    indist_default 0"
    "max 14   45    indist_left    1"
    "max 10  180    OOD_back       2"
    "max 14  225    OOD_backleft   3"
    "poe  0    0    indist_default 4"
    "poe 14   45    indist_left    5"
    "poe 10  180    OOD_back       6"
    "poe 14  225    OOD_backleft   7"
)

run_cell() {
    local VAR=$1; local TH=$2; local PH=$3; local LABEL=$4; local GPU=$5
    local CKPT
    if [ "$VAR" = "max" ]; then CKPT=$CKPT_MAX; else CKPT=$CKPT_POE; fi
    PYTHONPATH=/data/cameron/LIBERO LIBERO_DATA_PATH=/data/libero CUDA_VISIBLE_DEVICES=$GPU \
    DINO_REPO_DIR=/data/cameron/keygrip/dinov3 \
    DINO_WEIGHTS_PATH=/data/cameron/keygrip/dinov3/weights/dinov3_vits16plus_pretrain_lvd1689m-4057cbaa.pth \
    MUJOCO_GL=osmesa PYOPENGL_PLATFORM=osmesa \
    python eval_libero_2view_ood.py --checkpoint $CKPT \
        --n_episodes 10 --max_steps 600 \
        --teleport --zero_rotation --clean_scene \
        --cam_theta $TH --cam_phi $PH \
        > $LOG_DIR/${VAR}_th${TH}_ph${PH}_${LABEL}.log 2>&1
}

for cell in "${CELLS[@]}"; do
    read -r VAR TH PH LABEL GPU <<< "$cell"
    (run_cell $VAR $TH $PH $LABEL $GPU) &
done
wait

echo "=== Fusion ablation results ==="
for cell in "${CELLS[@]}"; do
    read -r VAR TH PH LABEL GPU <<< "$cell"
    FILE=$LOG_DIR/${VAR}_th${TH}_ph${PH}_${LABEL}.log
    SR=$(grep "Success Rate" $FILE 2>/dev/null | head -1 | sed 's/.*Success Rate: //')
    echo "  $VAR th=$TH ph=$PH ($LABEL): $SR"
done
