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

# input files:
#
# output files:
# SRCorSetpts.req
#

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

set magnets1 [APSGetMagnetPVNamesAndInfo -beamline SR -type corr]
set magnets2 [APSGetMagnetPVNamesAndInfo -beamline SR -type dipoletrim]
set magnets3 [APSGetMagnetPVNamesAndInfo -beamline SR -type fastCorr]
set magnets4 [APSGetMagnetPVNamesAndInfo -beamline SR -type quadtrim]
set magnets5 [APSGetMagnetPVNamesAndInfo -beamline SR -type dipole]

set data(ParameterNames) "InstallLocation"
set data(ColumnNames) "Category Tolerance ControlName Beamline IsNumerical OpsIntervention IsReadOnly IsProtected Description Units Provider ExpectNumeric ExpectFieldType ExpectElements"

set data(ParameterInfo.InstallLocation) "type SDDS_STRING"
set data(ColumnInfo.Category) "type SDDS_STRING"
set data(ColumnInfo.Tolerance) "type SDDS_DOUBLE"
set data(ColumnInfo.ControlName) "type SDDS_STRING"
set data(ColumnInfo.Beamline) "type SDDS_STRING"
set data(ColumnInfo.IsNumerical) "type SDDS_CHARACTER"
set data(ColumnInfo.OpsIntervention) "type SDDS_CHARACTER"
set data(ColumnInfo.IsReadOnly) "type SDDS_CHARACTER"
set data(ColumnInfo.IsProtected) "type SDDS_CHARACTER"
set data(ColumnInfo.Description) "type SDDS_STRING"
set data(ColumnInfo.Units) "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"

foreach mag $magnets1 {
    if {[string index $mag 5] == "H"} {
        lappend category HCorrectors
    } elseif {[string index $mag 5] == "V"} {
        lappend category VCorrectors
    } else {
        puts stderr "ERROR for corrector category"
        exit
    }
    lappend tolerance 5e-3
    lappend name $magnetPVs($mag.setCurrentPV)
    lappend beamline [string range $mag 0 2]
    lappend numerial y
    lappend ops n
    lappend readonly n
    lappend protected n
    lappend desc "Current Setpoint"
    lappend units A
    lappend provider ca
    lappend expNum y
    lappend expFT scalar
    lappend expEle 1
}
foreach mag $magnets2 {
    lappend category DipoleTrim
    lappend tolerance 5e-3
    lappend name $magnetPVs($mag.setCurrentPV)
    lappend beamline [string range $mag 0 2]
    lappend numerial y
    lappend ops n
    lappend readonly n
    lappend protected n
    lappend desc "Current Setpoint"
    lappend units A
    lappend provider ca
    lappend expNum y
    lappend expFT scalar
    lappend expEle 1
}
foreach mag $magnets3 {
    if {[string index $mag 6] == "H"} {
        lappend category FastHCorrectors
    } elseif {[string index $mag 6] == "V"} {
        lappend category FastVCorrectors
    } else {
        puts stderr "ERROR for corrector category"
        exit
    }
    lappend tolerance 5e-2
    lappend name $magnetPVs($mag.setCurrentPV)
    lappend beamline [string range $mag 0 2]
    lappend numerial y
    lappend ops n
    lappend readonly n
    lappend protected n
    lappend desc "Current Setpoint"
    lappend units A
    lappend provider ca
    lappend expNum y
    lappend expFT scalar
    lappend expEle 1
}
foreach mag $magnets4 {
    lappend category QuadTrim
    lappend tolerance 5e-3
    lappend name $magnetPVs($mag.setCurrentPV)
    lappend beamline [string range $mag 0 2]
    lappend numerial y
    lappend ops n
    lappend readonly n
    lappend protected n
    lappend desc "Current Setpoint"
    lappend units A
    lappend provider ca
    lappend expNum y
    lappend expFT scalar
    lappend expEle 1
}
foreach mag $magnets5 {
    if {[string index $mag 3] == "C"} {
        lappend category Dipole
        lappend tolerance 5e-3
        lappend name $magnetPVs($mag.setCurrentPV)
        lappend beamline [string range $mag 0 2]
        lappend numerial y
        lappend ops n
        lappend readonly n
        lappend protected n
        lappend desc "Current Setpoint"
        lappend units A
        lappend provider ca
        lappend expNum y
        lappend expFT scalar
        lappend expEle 1
    }
}

set data(Parameter.InstallLocation) "/home/helios/oagData/SCR/requestFiles/SRCorSetpts.req"
set data(Column.Category) [list $category]
set data(Column.Tolerance) [list $tolerance]
set data(Column.ControlName) [list $name]
set data(Column.Beamline) [list $beamline]
set data(Column.IsNumerical) [list $numerial]
set data(Column.OpsIntervention) [list $ops]
set data(Column.IsReadOnly) [list $readonly]
set data(Column.IsProtected) [list $protected]
set data(Column.Description) [list $desc]
set data(Column.Units) [list $units]
set data(Column.Provider) [list $provider]
set data(Column.ExpectNumeric) [list $expNum]
set data(Column.ExpectFieldType) [list $expFT]
set data(Column.ExpectElements) [list $expEle]

sdds save ../requestFiles/SRCorSetpts.req data

exec sddssort ../requestFiles/SRCorSetpts.req -col=ControlName -num -nowarn
file delete ../requestFiles/SRCorSetpts.req~

if {0} {
    exec sddsprocess ../requestFiles/SRCorSetpts.req ../requestFiles/SRCorSetpts.req.sr \
      -reprint=col,Category,SteeringPS -reprint=column,Beamline,SR "-delete=parameter,*"
}

if [catch {APSMakeSCRCategoryFiles -input ../requestFiles/SRCorSetpts.req} result] {
    puts stderr "Error for $argv0 in $pwd: $result"
    exit 1
}
if {[catch {exec sddsconvert ../requestFiles/SRCorSetpts.req.categories -pipe=out -ascii | \
              sddsprocess -pipe=in ../requestFiles/SRCorSetpts.req.categories -nowarn -delete=parameter,NumberCombined \
              -reprint=parameter,InstallLocation,/home/helios/oagData/SCR/requestFiles/SRCorSetPt.req.categories} result]} {
    puts stderr "error: $result"
    exit
}
if {[catch {exec sddsconvert ../requestFiles/SRCorSetpts.req.beamlines -pipe=out -ascii | \
              sddsprocess -pipe=in ../requestFiles/SRCorSetpts.req.beamlines -nowarn -delete=parameter,NumberCombined \
              -reprint=parameter,InstallLocation,/home/helios/oagData/SCR/requestFiles/SRCorSetPt.req.beamlines} result]} {
    puts stderr "error: $result"
    exit
}
file delete ../requestFiles/SRCorSetpts.req.categories~ ../requestFiles/SRCorSetpts.req.beamlines~
