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



set auto_path [linsert $auto_path 0  /usr/local/oag/apps/lib/$env(HOST_ARCH)]
set auto_path [linsert $auto_path 0 /usr/local/oag/lib_patch/$env(HOST_ARCH)]
set CVSRevisionAuthor "\$Revision: 1.11 $ \$Author: soliday $"

APSApplication . -name SRGapVoltage -version $CVSRevisionAuthor \
  -overview {This tools provides storage ring gap voltage information, with support for fudging the values to account for errors in the calibrations.}


set tcl_precision 4

frame .userFrame.outputs 
pack .userFrame.outputs -side top

set S1FF 1
set S2FF 1
set S3FF 1
set S4FF 1

proc MakeStationVoltageWidget {widget args} {
    set station ""
    set factor 1
    set parent ""
    APSParseArguments {factor station parent}

    global S${station}C1GV S${station}C2GV S${station}C3GV S${station}C4GV S${station}GV

    set w $parent$widget
    frame $w -bd 2 -relief raised
    pack $w
    APSMakeLabeledOutputs $w.total "Station $station total (kV): " \
      -ewidth 13 -lanchor w -eside right -lwidth 24  S${station}GV
    APSMakeLabeledOutputs $w.indiv "Station $station cells (kV): " \
      -ewidth 13 -lanchor w -eside right -lwidth 24 \
      S${station}C1GV S${station}C2GV S${station}C3GV S${station}C4GV         
    APSMakeLabeledEntries $w.fudge "Fudge factor: " \
      -ewidth 13 -lanchor w -eside right -lwidth 24 \
      S${station}FF
}

foreach station {1 2 3 4} {
    if {[pv linkw \
           [split "S${station}C1GVraw S${station}C2GVraw S${station}C3GVraw S${station}C4GVraw"] \
           [split "S${station}:C:cav1GapVolt S${station}:C:cav2GapVolt S${station}:C:cav3GapVolt S${station}:C:cav4GapVolt"]] != 0} {
        puts $errorCode
        exit
    }
    if {[pv mon \
           [split "S${station}C1GVraw S${station}C2GVraw S${station}C3GVraw S${station}C4GVraw"] \
           RefreshValues] != 0} {
        puts $errorCode
        exit
    }
    MakeStationVoltageWidget .s$station -parent .userFrame.outputs -station $station
}        

APSMakeLabeledOutputs .userFrame.outputs.total "Total gap voltage (kV): " \
  -ewidth 10 -lanchor w -eside right -lwidth 25  SGV

proc RefreshValues {} {
    global S1C1GV S1C2GV S1C3GV S1C4GV S1GV S1FF
    global S1C1GVraw S1C2GVraw S1C3GVraw S1C4GVraw

    global S2C1GV S2C2GV S2C3GV S2C4GV S2GV S2FF
    global S2C1GVraw S2C2GVraw S2C3GVraw S2C4GVraw

    global S3C1GV S3C2GV S3C3GV S3C4GV S3GV S3FF
    global S3C1GVraw S3C2GVraw S3C3GVraw S3C4GVraw

    global S4C1GV S4C2GV S4C3GV S4C4GV S4GV S4FF
    global S4C1GVraw S4C2GVraw S4C3GVraw S4C4GVraw

    global SGV

    set S1C1GVraw $S1C1GVraw 
    set S1C1GV [expr $S1FF*$S1C1GVraw]
    set S1C2GVraw $S1C2GVraw 
    set S1C2GV [expr $S1FF*$S1C2GVraw]
    set S1C3GVraw $S1C3GVraw 
    set S1C3GV [expr $S1FF*$S1C3GVraw]
    set S1C4GVraw $S1C4GVraw 
    set S1C4GV [expr $S1FF*$S1C4GVraw]
    set S1GV [expr $S1C1GV+$S1C2GV+$S1C3GV+$S1C4GV]

    set S2C1GVraw $S2C1GVraw 
    set S2C1GV [expr $S2FF*$S2C1GVraw]
    set S2C2GVraw $S2C2GVraw 
    set S2C2GV [expr $S2FF*$S2C2GVraw]
    set S2C3GVraw $S2C3GVraw 
    set S2C3GV [expr $S2FF*$S2C3GVraw]
    set S2C4GVraw $S2C4GVraw 
    set S2C4GV [expr $S2FF*$S2C4GVraw]
    set S2GV [expr $S2C1GV+$S2C2GV+$S2C3GV+$S2C4GV]

    set S3C1GVraw $S3C1GVraw 
    set S3C1GV [expr $S3FF*$S3C1GVraw]
    set S3C2GVraw $S3C2GVraw 
    set S3C2GV [expr $S3FF*$S3C2GVraw]
    set S3C3GVraw $S3C3GVraw 
    set S3C3GV [expr $S3FF*$S3C3GVraw]
    set S3C4GVraw $S3C4GVraw 
    set S3C4GV [expr $S3FF*$S3C4GVraw]
    set S3GV [expr $S3C1GV+$S3C2GV+$S3C3GV+$S3C4GV]

    set S4C1GVraw $S4C1GVraw 
    set S4C1GV [expr $S4FF*$S4C1GVraw]
    set S4C2GVraw $S4C2GVraw 
    set S4C2GV [expr $S4FF*$S4C2GVraw]
    set S4C3GVraw $S4C3GVraw 
    set S4C3GV [expr $S4FF*$S4C3GVraw]
    set S4C4GVraw $S4C4GVraw 
    set S4C4GV [expr $S4FF*$S4C4GVraw]
    set S4GV [expr $S4C1GV+$S4C2GV+$S4C3GV+$S4C4GV]
    
    set SGV [expr $S1GV+$S2GV+$S3GV+$S4GV]        
}

RefreshValues


