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

if {![info exists env(OAG_TOP_DIR)]} { set env(OAG_TOP_DIR) /usr/local }
set auto_path [linsert $auto_path 0  $env(OAG_TOP_DIR)/oag/apps/lib/$env(HOST_ARCH)]

APSStandardSetup

set usage {usage: longitCmd -twiss <filename> -superperiods <integer> -harmonic <number> [-voltage <MV> | -acceptance <halfHeightPercent>] -output <filename> [-force 1]}
set twiss ""
set harmonic 0
set superperiods 0
set acceptance 0
set voltage 0
set output ""
set force 0
set args $argv
if {[APSStrictParseArguments {twiss harmonic voltage acceptance output force superperiods}] || \
    ![string length $twiss] || $harmonic<=0 || [expr $voltage<=0 && $acceptance<=0] || ![string length $output] || \
    $superperiods<=0} {
    return -code error "$usage"
}
if ![file exists $twiss] {
    return -code error "Not found: $twiss"
}
if {!$force && [file exists $output]} {
    return -code error "exists: $output"
}

if [expr $voltage<=0] {
    set rfVoltOption "-define=parameter,rfVolt,$acceptance 1e2 / sqr pi * alphac * h * E * U0 / InvFq U0 *,units=MeV" 
} else {
    set rfVoltOption "-define=parameter,rfVolt,$voltage,type=double,units=MV" 
}

if [catch {exec sddsprocess $twiss $output \
             -process=s,max,sMax \
             "-define=parameter,Superperiods,$superperiods,type=long" \
             "-define=parameter,h,$harmonic,type=long" \
             "-define=parameter,revFreq,sMax Superperiods * pCentral beta.p c_mks * / rec,units=Hz" \
             "-define=parameter,rfFreq,revFreq h *,units=Hz" \
             "-redefine=parameter,U0,U0 Superperiods *,units=MeV" \
             "-define=parameter,E,pCentral mev *,units=MeV" \
             $rfVoltOption \
             "-define=parameter,q,rfVolt U0 /" \
             "-define=parameter,phiSynch,q rec dasin 180 swap -,units=deg" \
             "-define=parameter,rfAcceptance,q sqr 1 - sqrt q rec acos - 2 * U0 * E / pi / h / alphac / sqrt" \
             "-define=parameter,nuSynch,alphac h * phiSynch dcos chs * 2 / pi / rfVolt * E / sqrt" \
             "-define=parameter,Ss0,Sdelta0 c_mks * alphac * nuSynch 2 * pi * revFreq * /,units=m"} result] {
             return -code error "$result"
}
