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

# input files: /home/helios/oagData/deviceConfig/magnets.sdds
# 
#
# output files: glitchLogs/rfgunPS.atrig
#               glitchLogs/rfgunPS.trigger

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

if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline LINAC} magnets]} {
    puts "Error: $magnets"
    exit
}


set root rfgunPS

set data(ParameterNames) "InstallLocation"
set data(ColumnNames) "ControlName ReadbackName ReadbackUnits Provider ExpectNumeric ExpectFieldType ExpectElements"
set data(ParameterInfo.InstallLocation) "type SDDS_STRING"
set data(ColumnInfo.ControlName) "type SDDS_STRING"
set data(ColumnInfo.ReadbackName) "type SDDS_STRING"
set data(ColumnInfo.ReadbackUnits) "type SDDS_STRING"
set data(ColumnInfo.Provider) "type SDDS_STRING"
set data(ColumnInfo.ExpectNumeric) "type SDDS_CHARACTER"
set data(ColumnInfo.ExpectFieldType) "type SDDS_STRING"
set data(ColumnInfo.ExpectElements) "type SDDS_LONG"

set data(Parameter.InstallLocation) "/home/helios/oagData/glitchLogs/rfgunPS/rfgunPS.atrig"

foreach magnet $magnets {
    set i [string first RG $magnet]
    if {$i == -1} { continue }
    lappend data(Column.ControlName) $magnetPVs(${magnet}.readCurrentPV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.readCurrentPV)
    lappend data(Column.ReadbackUnits) A
    lappend data(Column.Provider) ca
    lappend data(Column.ExpectNumeric) y
    lappend data(Column.ExpectFieldType) scalar
    lappend data(Column.ExpectElements) 1

    lappend data(Column.ControlName) $magnetPVs(${magnet}.setCurrentPV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.setCurrentPV)
    lappend data(Column.ReadbackUnits) A
    lappend data(Column.Provider) ca
    lappend data(Column.ExpectNumeric) y
    lappend data(Column.ExpectFieldType) scalar
    lappend data(Column.ExpectElements) 1
}

set data(Column.ControlName) [list $data(Column.ControlName)]
set data(Column.ReadbackName) [list $data(Column.ReadbackName)]
set data(Column.ReadbackUnits) [list $data(Column.ReadbackUnits)]
set data(Column.Provider) [list $data(Column.Provider)]
set data(Column.ExpectNumeric) [list $data(Column.ExpectNumeric)]
set data(Column.ExpectFieldType) [list $data(Column.ExpectFieldType)]
set data(Column.ExpectElements) [list $data(Column.ExpectElements)]

sdds save ../glitchLogs/${root}.atrig.new data

exec sddssort ../glitchLogs/${root}.atrig.new -col=ControlName -num -nowarn -unique

puts "Comparing against master PV list"

exec sddsprocess  ../glitchLogs/${root}.atrig.new -pipe=out \
    -edit=column,SimpleControlName,ControlName,S?/./K | \
    sddsselect -pipe /home/helios/oagData/pvdata/iocRecNamesOAG.sdds \
    -match=SimpleControlName=rec_name -nowarning -reuse | \
    sddsconvert -pipe=in ../glitchLogs/${root}.atrig -delete=column,SimpleControlName

file delete ../glitchLogs/${root}.atrig.new ../glitchLogs/${root}.atrig.new~

unset data

set data(ParameterNames) "InstallLocation"
set data(ColumnNames) "TriggerControlName TransitionDirection TransitionThreshold MajorAlarm MinorAlarm NoAlarm Provider ExpectNumeric ExpectFieldType ExpectElements"
set data(ParameterInfo.InstallLocation) "type SDDS_STRING"
set data(ColumnInfo.TriggerControlName) "type SDDS_STRING"
set data(ColumnInfo.TransitionDirection) "type SDDS_SHORT"
set data(ColumnInfo.TransitionThreshold) "type SDDS_DOUBLE"
set data(ColumnInfo.MajorAlarm) "type SDDS_SHORT"
set data(ColumnInfo.MinorAlarm) "type SDDS_SHORT"
set data(ColumnInfo.NoAlarm) "type SDDS_SHORT"
set data(ColumnInfo.Provider) "type SDDS_STRING"
set data(ColumnInfo.ExpectNumeric) "type SDDS_CHARACTER"
set data(ColumnInfo.ExpectFieldType) "type SDDS_STRING"
set data(ColumnInfo.ExpectElements) "type SDDS_LONG"

set data(Parameter.InstallLocation) "/home/helios/oagData/glitchLogs/rfgunPS/rfgunPS.trigger"

foreach magnet $magnets {
    set i [string first RG $magnet]
    if {$i == -1} { continue }
    lappend data(Column.TriggerControlName) $magnetPVs(${magnet}.readCurrentPV)
    lappend data(Column.TransitionDirection) 0
    lappend data(Column.TransitionThreshold) 0
    lappend data(Column.MajorAlarm) 1
    lappend data(Column.MinorAlarm) 1
    lappend data(Column.NoAlarm) 0
    lappend data(Column.Provider) ca
    lappend data(Column.ExpectNumeric) y
    lappend data(Column.ExpectFieldType) scalar
    lappend data(Column.ExpectElements) 1
}

set data(Column.TriggerControlName) [list $data(Column.TriggerControlName)]
set data(Column.TransitionDirection) [list $data(Column.TransitionDirection)]
set data(Column.TransitionThreshold) [list $data(Column.TransitionThreshold)]
set data(Column.MajorAlarm) [list $data(Column.MajorAlarm)]
set data(Column.MinorAlarm) [list $data(Column.MinorAlarm)]
set data(Column.NoAlarm) [list $data(Column.NoAlarm)]
set data(Column.Provider) [list $data(Column.Provider)]
set data(Column.ExpectNumeric) [list $data(Column.ExpectNumeric)]
set data(Column.ExpectFieldType) [list $data(Column.ExpectFieldType)]
set data(Column.ExpectElements) [list $data(Column.ExpectElements)]

sdds save ../glitchLogs/${root}.trigger.new data

exec sddssort ../glitchLogs/${root}.trigger.new -col=TriggerControlName -num -nowarn -unique

puts "Comparing against master PV list"

exec sddsprocess  ../glitchLogs/${root}.trigger.new -pipe=out \
    -edit=column,SimpleControlName,TriggerControlName,S?/./K | \
    sddsselect -pipe /home/helios/oagData/pvdata/iocRecNamesOAG.sdds \
    -match=SimpleControlName=rec_name -nowarning -reuse | \
    sddsconvert -pipe=in ../glitchLogs/${root}.trigger -delete=column,SimpleControlName

file delete ../glitchLogs/${root}.trigger.new ../glitchLogs/${root}.trigger.new~
