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

# input files:
# 
#
# output files: SRDCPS-QSE.mon
#               SRDCPS-QS.mon

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

#Bipolar H V FH FV MT C:M QT SQ 
#Unipolar A:M B:M Q S

set root SRDCPS-QSE

set data(ParameterNames) "InstallLocation"
set data(ColumnNames) "ControlName ReadbackName 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.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/logging/SRDCPS-QS-Extensive/${root}.mon"

if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline SR -type quad} quad]} {
    puts "Error: $quad"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline SR -type sext} sext]} {
    puts "Error: $sext"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline SR -type dipole} dipole]} {
    puts "Error: $dipole"
    exit
}
set magnets "$quad $sext"
foreach m $dipole {
    if {([string first "A:M3" $m] != -1) || \
          ([string first "A:M4" $m] != -1) || \
          ([string first "B:M3" $m] != -1)} {
        lappend magnets $m
    }
}

foreach magnet $magnets {
    lappend data(Column.ControlName) $magnetPVs(${magnet}.statusPV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.statusPV)
    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}.readCurrentPV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.readCurrentPV)
    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.Provider) ca
    lappend data(Column.ExpectNumeric) y
    lappend data(Column.ExpectFieldType) scalar
    lappend data(Column.ExpectElements) 1

    lappend data(Column.ControlName) $magnetPVs(${magnet}.readDCCTCurrentPV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.readDCCTCurrentPV)
    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}.readDCCTSlowCurrentPV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.readDCCTSlowCurrentPV)
    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}.readVoltagePV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.readVoltagePV)
    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}.readTempPV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.readTempPV)
    lappend data(Column.Provider) ca
    lappend data(Column.ExpectNumeric) y
    lappend data(Column.ExpectFieldType) scalar
    lappend data(Column.ExpectElements) 1

    if {[string range $magnetPVs(${magnet}.readTempPV) end-16 end] == "PS:CapacitorTempM"} {
        set magnetPVs(${magnet}.readTempPV) "[string range $magnetPVs(${magnet}.readTempPV) 0 end-17]TemperatureM"
    }

    lappend data(Column.ControlName) $magnetPVs(${magnet}.readTempPV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.readTempPV)
    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.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 DataLogging/${root}.mon.new data

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

puts "Comparing against master PV list"
exec sddsselect DataLogging/${root}.mon.new /home/helios/oagData/pvdata/iocRecNamesOAG.sdds -pipe=out \
    -match=ControlName=rec_name -nowarning -reuse | \
    sddsconvert -pipe=in ./DataLogging/${root}.mon -delete=column,SimpleControlName

file delete DataLogging/${root}.mon.new DataLogging/${root}.mon.new~

#---------------------

set root SRDCPS-QS
set data(Parameter.InstallLocation) "/home/helios/oagData/logging/SRDCPS-QS/${root}.mon"

set data(Column.ControlName) ""
set data(Column.ReadbackName) ""
set data(Column.Provider) ""
set data(Column.ExpectNumeric) ""
set data(Column.ExpectFieldType) ""
set data(Column.ExpectElements) ""
foreach magnet $magnets {
    lappend data(Column.ControlName) $magnetPVs(${magnet}.readCurrentPV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.readCurrentPV)
    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.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 DataLogging/${root}.mon.new data

exec sddssort DataLogging/${root}.mon.new -col=ControlName -num -nowarn

puts "Comparing against master PV list"
exec sddsselect DataLogging/${root}.mon.new /home/helios/oagData/pvdata/iocRecNamesOAG.sdds -pipe=out \
    -match=ControlName=rec_name -nowarning -reuse | \
    sddsconvert -pipe=in ./DataLogging/${root}.mon -delete=column,SimpleControlName

file delete DataLogging/${root}.mon.new DataLogging/${root}.mon.new~
