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

# input files: /home/helios/oagData/deviceConfig/magnets.sdds
# 
#
# output files: PLETDCPS.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

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

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

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

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

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

set magnets "$bbMagnets $ltpMagnets $pbMagnets $parMagnets $ptbMagnets"

set root PLETDCPS

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/PLETDCPS/${root}.mon"

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

    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}.readDacCurrentPV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.readDacCurrentPV)
    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}.setVoltagePV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.setVoltagePV)
    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}.readDacVoltagePV)
    lappend data(Column.ReadbackName) $magnetPVs(${magnet}.readDacVoltagePV)
    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

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

set extraPVs "LTP:PH1:SetpointAO
LTP:PH1:ErrorCC
LTP:PH2:SetpointAO
LTP:PH2:ErrorCC
LTP:PH3:SetpointAO
LTP:PH3:ErrorCC
LTP:PH4:SetpointAO
LTP:PH4:ErrorCC
LTP:PV1:SetpointAO
LTP:PV1:ErrorCC
LTP:PV2:SetpointAO
LTP:PV2:ErrorCC
LTP:PV3:SetpointAO
LTP:PV3:ErrorCC
LTP:PV4:SetpointAO
LTP:PV4:ErrorCC
PTB:PH1:ErrorCC
PTB:PH1:SetpointAO
PTB:PH2:ErrorCC
PTB:PH2:SetpointAO
PTB:PH3:ErrorCC
PTB:PH3:SetpointAO
PTB:PH4:ErrorCC
PTB:PH4:SetpointAO
PTB:PH5:ErrorCC
PTB:PH5:SetpointAO
PTB:PV1:ErrorCC
PTB:PV1:SetpointAO
PTB:PV2:ErrorCC
PTB:PV2:SetpointAO
PTB:PV3:ErrorCC
PTB:PV3:SetpointAO
PTB:PV4:ErrorCC
PTB:PV4:SetpointAO
PTB:PV5:ErrorCC
PTB:PV5:SetpointAO
LTP:B1:capTempM
LTP:B1:diodeBrTempM
LTP:B1:ferriteTempM
LTP:B1:igbtTempM
LTP:B1:magTemp2M
LTP:B1:modeM
LTP:B1:onStatusM
LTP:B1:psModeM
PTB:B1:capTempM
PTB:B1:diodeBrTempM
PTB:B1:ferriteTempM
PTB:B1:igbtTempM
PTB:B1:magTemp2M
PTB:B1:modeM
PTB:B1:onStatusM
PTB:B1:psModeM
PTB:B2:capTempM
PTB:B2:diodeBrTempM
PTB:B2:ferriteTempM
PTB:B2:igbtTempM
PTB:B2:magTemp2M
PTB:B2:modeM
PTB:B2:onStatusM
PTB:B2:psModeM
LTP2PTBEfficiencyM
P:BM:OutDCVoltageAI
P:BM:XDCT:CurrentCALC"

foreach pv $extraPVs {
    lappend data(Column.ControlName) $pv
    lappend data(Column.ReadbackName) $pv
    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 sddsprocess  ../DataLogging/${root}.mon.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 ./../DataLogging/${root}.mon -delete=column,SimpleControlName

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


