#!/bin/sh  
# \
exec oagtclsh "$0" "$@"

set auto_path [linsert $auto_path 0  $env(OAG_TOP_DIR)/oag/apps/lib/$env(HOST_ARCH)]
package require os

APSStandardSetup

set usage {usage: runCase -cores <number> -nPerBunch <number>(100000) -dfh <harmonicDetuning-kHz> -current <mA> -delayTurns <number>(1000) -rampTurns <number>(5000) -totalTurns <number>(12000)}
set args $argv
set dfh 60.36
set cores 8
set delayTurns 000
set rampTurns 0
set totalTurns 2000
set nPerBunch 1000
set current 1307.41
# set current 214.9583335
# set current 429.91666
if {[APSStrictParseArguments {cores dfh current nPerBunch delayTurns totalTurns rampTurns}] || [expr $cores<1] || [expr $dfh<0] || [expr $current<0]} {
    return -code error "$usage"
}

set I $current

# Parameters of the main cavities
# Q 
set Qm 2.3e10
# Loaded Q
set Qlm 5.08e4
# Ra/Q
set RaOQm 146
# Harmonic number
set mh 7200
# Number of cavities
set nm 11

# Parameters of the harmonic cavities
# Loaded Q
set Qlh 2.29e5
# Relative harmonic
set hh 3
# Ra/Q
set RaOQh 103
# Number of cavities
set nh 4

# V_setpoint or harmonic cavity

set Vcavhh 7.52

# Main cavity voltage
set Vc 22.88

# Main Cavity detuning
set deltaDfM 0

# Rf feedback filters
set phaseFilter PhaseFeedbackFilters.sdds
set ampFilter AmpFeedbackFilters.sdds
# Feedback update interval in main buckets
set nfb 216
# Rf feedback filters for HH
set phaseFilterHH PhaseFeedbackFiltersHH.sdds
set ampFilterHH AmpFeedbackFiltersHH.sdds



set dff [format %.2f $dfh]
        
set rootname run-${I}mA-${nPerBunch}PPB-MH${mh}-NM${nm}-Vc${Vc}-Qm${Qm}-Qlm${Qlm}-RaOQm${RaOQm}-HH${hh}-NH${nh}-Qlh${Qlh}-RaOQh${RaOQh}-${dff}kHz
if ![file exists $rootname.bash ] {
    # Figure out the HHC voltage for this case, and make the profile Basic.twi.longit for use in generating the bunch
    exec beamLoadCalcHHC -output $rootname.param -current $I \
      -mainHarmonic $mh -nMain $nm -Vcavity $Vc -Qm $Qm -Ql $Qlm -RaOverQ $RaOQm \
      -dfHHC $dfh -QlHHC $Qlh -harmonic $hh -RaOverQHHC $RaOQh -nHHC $nh -Vchh $Vcavhh 
    # Generate the bunch
    exec makeBunch -rootname ${rootname}-bunch -nPerBunch $nPerBunch -profile Basic.twi.longit
    exec makeDiagParamFile -output $rootname.diag -particles $nPerBunch -bunches 660
    set jobFile $rootname.csh
    set fd [open $jobFile w]
    puts $fd "#!/bin/csh"
    puts $fd "setenv PATH /usr/lib64/mpich/bin:\$PATH"
    puts $fd "mpiexec -np $cores Pelegant runTemplate.ele -macro=rootname=$rootname,current=$I,cavitySetup=$rootname.param,diagSetup=$rootname.diag,turns=$totalTurns,delayTurns=$delayTurns,rampTurns=$rampTurns,bunch=${rootname}-bunch.bun,ampFilter=$ampFilter,phaseFilter=$phaseFilter,ampFilterHH=$ampFilterHH,phaseFilterHH=$phaseFilterHH,fbInterval=$nfb"
    close $fd
    file attributes $jobFile -permissions u+x
    
    exec sddsmakedataset $rootname.settings \
      -column=cores,type=long -data=$cores -column=delayTurns,type=long -data=$delayTurns -column=rampTurns,type=long -data=$rampTurns \
      -column=totalTurns,type=long -data=$totalTurns -column=nPerBunch,type=long -data=$nPerBunch \
      -column=I,type=double,units=mA -data=$I -column=Qm,type=double -data=$Qm -column=Qlm,type=double -data=$Qlm -column=RaOQm,type=double -data=$RaOQm \
      -column=mh,type=long -data=$mh -column=nm,type=long -data=$nm -column=Qlh,type=double -data=$Qlh  \
      -column=hh,type=long -data=$hh -column=RaOQh,type=double -data=$RaOQh -column=nh,type=long -data=$nh \
      -column=Vc,type=double,units=MV -data=$Vc -column=phaseFilter,type=string -data=$phaseFilter \
      -column=ampFilter,type=string -data=$ampFilter -column=nfb,type=long -data=$nfb \
      -column=Vchh,type=double,units=MV -data=$Vcavhh -column=ampFilterHH,type=string -data=$ampFilterHH \
      -column=dfh,type=double,units=kHz -data=$dff \
      -column=phaseFilterHH,type=string -data=$phaseFilterHH
}
