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

# input files:
# 
#
# output files: SRDCPS-HVDE.mon
#               SRDCPS-HVD.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-HVDE

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

if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline SR -type fastCorr} fastCorr]} {
    puts "Error: $fastCorr"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline SR -type corr} corr]} {
    puts "Error: $corr"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline SR -type quadtrim} quadtrim]} {
    puts "Error: $quadtrim"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline SR -type skewquad} skewquad]} {
    puts "Error: $skewquad"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline SR -type dipole} dipole]} {
    puts "Error: $dipole"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline SR -type dipoletrim} dipoletrim]} {
    puts "Error: $dipoletrim"
    exit
}
set magnets "$fastCorr $corr $quadtrim $skewquad $dipoletrim"
foreach m $dipole {
    if {([string first "C:M1" $m] != -1) || \
          ([string first "C:M2" $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}.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}.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

    #Most of these don't exist but are instead S???:FC?:TC?:TemperatureM PVs
    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

}
for {set sector 1} {$sector <= 40} {incr sector} {
    set s [format %02d $sector]
    foreach letter "A B C" {
        for {set i 0} {$i < 5} {incr i} {
            for {set j 0} {$j < 5} {incr j} {
                set tempPV S${s}${letter}:FC${i}:TC${j}:TemperatureM
                lappend data(Column.ControlName) $tempPV
                lappend data(Column.ReadbackName) $tempPV
                lappend data(Column.Provider) ca
                lappend data(Column.ExpectNumeric) y
                lappend data(Column.ExpectFieldType) scalar
                lappend data(Column.ExpectElements) 1
            }
            set tempPV S${s}${letter}:HV${i}:TemperatureM
            lappend data(Column.ControlName) $tempPV
            lappend data(Column.ReadbackName) $tempPV
            lappend data(Column.Provider) ca
            lappend data(Column.ExpectNumeric) y
            lappend data(Column.ExpectFieldType) scalar
            lappend data(Column.ExpectElements) 1
 
            set tempPV S${s}${letter}:M${i}:TemperatureM
            lappend data(Column.ControlName) $tempPV
            lappend data(Column.ReadbackName) $tempPV
            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-HVD
set data(Parameter.InstallLocation) "/home/helios/oagData/logging/SRDCPS-HVD/${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~
