#!/bin/bash

# Arguments passed from Condor:
# $1: Tarball Name
# $2: Number of Events
# $3: Job Number (ProcId)
# $4: Output Storage Path (root://...)
# $5: Year (2016pre, 2016post, 2017, or 2018)

TARBALL=$1
NEVENTS=$2
JOBNUM=$3
OUTDIR=$4
YEAR=$5

hostname
date
voms-proxy-info -all
export X509_USER_PROXY=$(voms-proxy-info -path)
echo "Forcing X509_USER_PROXY to: $X509_USER_PROXY"

# --- Setup Random Seed ---
BASE_SEED=1001
SEED=$(($BASE_SEED + $JOBNUM))

echo "Job index: $JOBNUM"
echo "Random Seed: $SEED"
echo "Target Year: $YEAR"

# ==========================================
# 1. Year-Specific Variable Mapping
# ==========================================
if [ "$YEAR" == "2016pre" ]; then
    ERA="Run2_2016_HIPM"
    BEAMSPOT="Realistic25ns13TeV2016Collision"
    COND_GEN="106X_mcRun2_asymptotic_preVFP_v8"
    COND_HLT="80X_mcRun2_asymptotic_2016_TrancheIV_v6"
    COND_RECO="106X_mcRun2_asymptotic_preVFP_v11"
    #PILEUP="dbs:/Neutrino_E-10_gun/RunIISummer20ULPrePremix-UL16_106X_mcRun2_asymptotic_v13-v1/PREMIX"
    PILEUP="filelist:pileup_2016.txt"
    HLT_MENU="HLT:25ns15e33_v4"
    HLT_RELEASE="CMSSW_8_0_36_UL_patch2"
    HLT_ARCH="slc7_amd64_gcc530"

elif [ "$YEAR" == "2016post" ]; then
    ERA="Run2_2016"
    BEAMSPOT="Realistic25ns13TeV2016Collision"
    COND_GEN="106X_mcRun2_asymptotic_v13"
    COND_HLT="80X_mcRun2_asymptotic_2016_TrancheIV_v6"
    COND_RECO="106X_mcRun2_asymptotic_v17"
    #PILEUP="dbs:/Neutrino_E-10_gun/RunIISummer20ULPrePremix-UL16_106X_mcRun2_asymptotic_v13-v1/PREMIX"
    PILEUP="filelist:pileup_2016.txt"
    HLT_MENU="HLT:25ns15e33_v4"
    HLT_RELEASE="CMSSW_8_0_36_UL_patch2"
    HLT_ARCH="slc7_amd64_gcc530"

elif [ "$YEAR" == "2017" ]; then
    ERA="Run2_2017"
    BEAMSPOT="Realistic25ns13TeVEarly2017Collision"
    COND_GEN="106X_mc2017_realistic_v6"
    COND_HLT="94X_mc2017_realistic_v15"
    COND_RECO="106X_mc2017_realistic_v9"
    #PILEUP="dbs:/Neutrino_E-10_gun/RunIISummer20ULPrePremix-UL17_106X_mc2017_realistic_v6-v3/PREMIX"
    PILEUP="filelist:pileup_2017.txt"
    HLT_MENU="HLT:2e34v40"
    HLT_RELEASE="CMSSW_9_4_22_UL"
    HLT_ARCH="slc7_amd64_gcc630"

elif [ "$YEAR" == "2018" ]; then
    ERA="Run2_2018"
    BEAMSPOT="Realistic25ns13TeVEarly2018Collision"
    COND_GEN="106X_upgrade2018_realistic_v11_L1v1"
    COND_HLT="102X_upgrade2018_realistic_v15"
    COND_RECO="106X_upgrade2018_realistic_v16_L1v1"
    #PILEUP="dbs:/Neutrino_E-10_gun/RunIISummer20ULPrePremix-UL18_106X_upgrade2018_realistic_v11_L1v1-v2/PREMIX"
    PILEUP="filelist:pileup_2018.txt"
    HLT_MENU="HLT:2018v32"
    HLT_RELEASE="CMSSW_10_2_20_UL"
    HLT_ARCH="slc7_amd64_gcc700"
else
    echo "Invalid Year Passed: $YEAR"
    exit 1
fi

# ==========================================
# 2. Unpack & Setup Base
# ==========================================
echo "Downloading and unpacking tarball..."
wget http://hep.baylor.edu/jsamudio/tarballs/$TARBALL
export VO_CMS_SW_DIR=/cvmfs/cms.cern.ch
source $VO_CMS_SW_DIR/cmsset_default.sh

tar xzvf $TARBALL

echo "Renaming CMSSW paths..."
for d in CMSSW_*/; do
  (
    cd $d/src
    scram b ProjectRename
  )
done

# ==========================================
# Phase A: GEN, SIM, DIGI (CMSSW_10_6_49_patch1)
# ==========================================
(
    echo "--- Starting Phase A ---"
    export SCRAM_ARCH=slc7_amd64_gcc700
    cd CMSSW_10_6_49_patch1/src
    scram b ProjectRename
    eval `scramv1 runtime -sh`
    scram b

    # LHE-GEN
    cmsDriver.py Configuration/GenProduction/python/TTH-1Jet-MadJax-SMEFTSim_fragment.py \
        --era $ERA \
        --customise Configuration/DataProcessing/Utils.addMonitoring \
        --beamspot $BEAMSPOT \
        --step LHE,GEN \
        --geometry DB:Extended \
        --conditions $COND_GEN \
        --customise_commands "process.RandomNumberGeneratorService.externalLHEProducer.initialSeed=${SEED} \n process.source.numberEventsInLuminosityBlock=cms.untracked.uint32(10000) \n from IOMC.RandomEngine.RandomServiceHelper import RandomNumberServiceHelper ; randSvc = RandomNumberServiceHelper(process.RandomNumberGeneratorService) ; randSvc.populate()" \
        --datatier GEN,LHE \
        --eventcontent RAWSIM,LHE \
        --python_filename step1_LHEGEN_cfg.py \
        --fileout file:step1_LHEGEN.root \
        --number ${NEVENTS} \
        --nThreads 8 --no_exec --mc
    cmsRun step1_LHEGEN_cfg.py || exit $?

    # SIM
    cmsDriver.py \
        --era $ERA \
        --customise Configuration/DataProcessing/Utils.addMonitoring \
        --beamspot $BEAMSPOT \
        --step SIM \
        --geometry DB:Extended \
        --conditions $COND_GEN \
        --datatier GEN-SIM \
        --eventcontent RAWSIM \
        --python_filename step2_SIM_cfg.py \
        --filein file:step1_LHEGEN.root \
        --fileout file:step2_SIM.root \
        --number ${NEVENTS} \
        --runUnscheduled \
        --nThreads 8 --no_exec --mc
    cmsRun step2_SIM_cfg.py || exit $?

    # DIGI-PREMIX
    cmsDriver.py \
        --era $ERA \
        --customise Configuration/DataProcessing/Utils.addMonitoring \
        --procModifiers premix_stage2 \
        --datamix PreMix \
        --step DIGI,DATAMIX,L1,DIGI2RAW \
        --geometry DB:Extended \
        --conditions $COND_GEN \
        --datatier GEN-SIM-DIGI \
        --eventcontent PREMIXRAW \
        --python_filename step3_DIGI_cfg.py \
        --filein file:step2_SIM.root \
        --fileout file:step3_DIGI.root \
        --number ${NEVENTS} \
        --pileup_input "$PILEUP" \
        --runUnscheduled \
        --nThreads 8 --no_exec --mc
    cmsRun step3_DIGI_cfg.py || exit $?
)

# ==========================================
# Phase B: HLT (Dynamic Architecture)
# ==========================================
(
    echo "--- Starting Phase B: HLT ($HLT_RELEASE) ---"
    export SCRAM_ARCH=$HLT_ARCH
    cd ${HLT_RELEASE}/src
    eval `scramv1 runtime -sh`

    mv ../../CMSSW_10_6_49_patch1/src/step3_DIGI.root .

    cmsDriver.py \
        --era $ERA \
        --customise Configuration/DataProcessing/Utils.addMonitoring \
        --step $HLT_MENU \
        --geometry DB:Extended \
        --conditions $COND_HLT \
        --customise_commands 'process.source.bypassVersionCheck = cms.untracked.bool(True)' \
        --datatier GEN-SIM-RAW \
        --eventcontent RAWSIM \
        --python_filename step4_HLT_cfg.py \
        --filein file:step3_DIGI.root \
        --fileout file:step4_HLT.root \
        --number ${NEVENTS} \
        --nThreads 8 --no_exec --mc
    cmsRun step4_HLT_cfg.py || exit $?
)

# ==========================================
# Phase C: RECO & MINIAOD (CMSSW_10_6_X)
# ==========================================
(
    echo "--- Starting Phase C: RECO and MiniAOD ---"
    export SCRAM_ARCH=slc7_amd64_gcc700

    # RECO (10_6_49_patch1)
    cd CMSSW_10_6_49_patch1/src
    eval `scramv1 runtime -sh`
    mv ../../${HLT_RELEASE}/src/step4_HLT.root .

    cmsDriver.py \
        --era $ERA \
        --customise Configuration/DataProcessing/Utils.addMonitoring \
        --step RAW2DIGI,L1Reco,RECO,RECOSIM \
        --geometry DB:Extended \
        --conditions $COND_RECO \
        --datatier AODSIM \
        --eventcontent AODSIM \
        --python_filename step5_RECO_cfg.py \
        --filein file:step4_HLT.root \
        --fileout file:step5_RECO.root \
        --number ${NEVENTS} \
        --runUnscheduled \
        --nThreads 8 --no_exec --mc
    cmsRun step5_RECO_cfg.py || exit $?

    # MINIAOD (10_6_20)
    cd ../../CMSSW_10_6_20/src
    eval `scramv1 runtime -sh`
    mv ../../CMSSW_10_6_49_patch1/src/step5_RECO.root .

    cmsDriver.py \
        --era $ERA \
        --customise Configuration/DataProcessing/Utils.addMonitoring \
        --procModifiers run2_miniAOD_UL \
        --step PAT \
        --geometry DB:Extended \
        --conditions $COND_RECO \
        --datatier MINIAODSIM \
        --eventcontent MINIAODSIM \
        --python_filename step6_MiniAOD_cfg.py \
        --filein file:step5_RECO.root \
        --fileout file:step6_MiniAOD.root \
        --number ${NEVENTS} \
        --runUnscheduled \
        --nThreads 8 --no_exec --mc
    cmsRun step6_MiniAOD_cfg.py || exit $?
)

# ==========================================
# 3. Transfer Output
# ==========================================
echo "Copying MINIAOD file to storage..."

FINAL_NAME="step_miniaodsim_${YEAR}_${JOBNUM}.root"

gfal-copy -f CMSSW_10_6_20/src/step6_MiniAOD.root ${OUTDIR}/${FINAL_NAME}

if [ $? -eq 0 ]; then
    echo "Success! File transferred to ${OUTDIR}/${FINAL_NAME}"
else
    echo "Error transferring file!"
    exit 1
fi

date
