#!/bin/sh
# \
exec oagtclsh "$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)]
APSStandardSetup
 
set usage "usage: processEnvData -multPrefix <multiplier-prefix> -multSuffix <multiplier-suffix> -verifyUpdate <0|1>"

set multPrefix ACIS:RAI_
set multSuffix _MULT
set verifyUpdate 0
set verifyBeamOpPV 0
set args $argv

if {[APSStrictParseArguments {multPrefix multSuffix verifyUpdate verifyBeamOpPV}]} {
    puts stderr $usage
    exit 1
}

set IDBM_Mult /home/helios/oagData/sr.old/localSteering/configs/IDBM_Mult.sdds
set idMultList [exec sddsprintout $IDBM_Mult -col=ID_Multiplier -nolabels -notitle -nowarnings]
set bmMultList [exec sddsprintout $IDBM_Mult -col=BM_Multiplier -nolabels -notitle -nowarnings]
set chkSumMult [exec sddsprocess -pipe=out $IDBM_Mult \
    -process,ID_Multiplier,sum,ID_Sum \
    -process,BM_Multiplier,sum,BM_Sum \
    "-redefine=param,chkSum,ID_Sum BM_Sum + int,type=short" \
    | sddsprintout -pipe=in -param=chkSum -noTitles -noLabels]


set cavgetList ""
set cavputList ""
set cavgetShutterList ""
for {set sector 1} {$sector < 36} {incr sector} {
    set listIndex [expr $sector - 1]
    set idMultiplier [lindex $idMultList $listIndex]
    set bmMultiplier [lindex $bmMultList $listIndex]
    lappend cavgetList ${multPrefix}${sector}ID${multSuffix}
    lappend cavgetList ${multPrefix}${sector}BM${multSuffix}
    lappend cavgetShutterList ${multPrefix}${sector}ID_CLOSED
    lappend cavgetShutterList ${multPrefix}${sector}BM_CLOSED
    lappend cavputList ${multPrefix}${sector}ID${multSuffix}=$idMultiplier
    lappend cavputList ${multPrefix}${sector}BM${multSuffix}=$bmMultiplier
}

set cavgetList -list=[join $cavgetList ,]
set cavgetShutterList -list=[join $cavgetShutterList ,]
set cavputList -list=[join $cavputList ,]
puts $cavputList
exit
catch {exec cavget $cavgetList} cavgetListValues
catch {exec cavget $cavgetShutterList} cavgetShutterListValues

# First check if the multiplier list needs to be updated.

set chkSumGet 0
foreach multiplier $cavgetListValues {
    set chkSumGet [expr $chkSumGet + $multiplier]
}

if {$chkSumMult==$chkSumGet} {
    puts stdout "Beamline multiplier list does not need to be updated."
    puts ""
} else {
    catch {exec cavput $cavputList} result
    puts stdout "Beamline multiplier update complete."
    puts ""
    exit
}

if $verifyBeamOpPV {
    set chkSumGet 0
    set pvCheck 0
    set index 0
    foreach multiplier $cavgetListValues {
        set shutterOpen [lindex $cavgetShutterListValues $index]
        if {$shutterOpen==0} {
            set shutterOpen 1
        } else {
            set shutterOpen 0
        }
        set pvCheck [expr $pvCheck + $multiplier * $shutterOpen]
        puts stdout "$index [expr $shutterOpen * $multiplier]"
        incr index
    }
    puts stdout ""
    puts stdout "Calculated number of beamlines operating = ${pvCheck}"
    puts stdout "Number of beamlines operating per the PV = [exec cavget -list=ACIS:RAI_sumCALC]."
}
exit
