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

# input files: /home/helios/oagData/deviceConfig/magnets.sdds
# 
#
# output files: linacPS.mon
#               linacPSTopUp.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 LINAC} magnets]} {
    puts "Error: $magnets"
    exit
}


set root linacPS

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/linacPS/${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 names "BoardTempM
CapOT_M
CapacitorTempM
DCCTTripM
DampResOT_M
DampResTempM
FanSpeed1M
FanSpeed2M
FanWarningM
FaultsStatusM
HeatSinkOT_M
HeatSinkTempM
MagOT_MPEOB_M
MeasCurrentM
MeasDacCurrentM
NVolt15M
OCTripM
RateDividerC
ResistanceC
SetDacCurrentC
TemperatureM
VoltageM
Volt3_3M
Volt5M
Volt15M"
    
    foreach name $names {
        lappend data(Column.ControlName) ${magnet}:$name
        lappend data(Column.ReadbackName) ${magnet}:$name
        lappend data(Column.Provider) ca
        lappend data(Column.ExpectNumeric) y
        lappend data(Column.ExpectFieldType) scalar
        lappend data(Column.ExpectElements) 1
    }
}

set extraPVs "L1:PC1:BK:PS:DACOutVoltageAI
L1:PC1:SM:HC:PS:DACOutVoltageAI
L1:PC1:SM:NQ:PS:DACOutVoltageAI
L1:PC1:SM:PS:DACOutVoltageAI
L1:PC1:SM:SQ:PS:DACOutVoltageAI
L1:PC1:SM:VC:PS:DACOutVoltageAI
L1:RG1:HTR:DACOutV_AI
L1:RG1:HTR:DacRefAI
L1:RG1:HTR:PreChopVoltAI
L1:RG1:HTR:VoltageCC
L1:RG1:HTR:PowerCC
L1:RG2:HTR:DACOutV_AI
L1:RG2:HTR:DacRefAI
L1:RG2:HTR:PreChopVoltAI
L1:RG2:HTR:VoltageCC
L1:RG2:HTR:PowerCC
L1:RG1:KIK:PFNVoltageAI
L1:RG1:KIK:RackTempAI
L1:RG1:KIK:ThyFilVoltAI
L1:RG1:KIK:ThyResCurrAI
L1:RG1:KIK:ToleranceCALC
L1:RG1:KIK:chargeTimeAO
L1:RG1:KIK:sampleTimeAO
L1:RG1:KIK:trigTimeAO
L1:RG2:KIK:PFNVoltageAI 
L1:RG2:KIK:RackTempAI
L1:RG2:KIK:ThyFilVoltAI
L1:RG2:KIK:ThyResCurrAI
L1:RG2:KIK:ToleranceCALC
L1:RG2:KIK:chargeTimeAO
L1:RG2:KIK:sampleTimeAO
L1:RG2:KIK:trigTimeAO"

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"
if {1} {
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
} else {
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~


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

unset data

set root linacPSTopUp

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/linacPSTopUp/${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}.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}.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 ""

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~

