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

#Input: 
#       
#Output: BoosterBPM.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

set root BoosterBPM
set controlNames ""
set readbackNames ""

if {1} {
for {set m 1} {$m <= 4} {incr m} {
    for {set n 0} {$n <= 9} {incr n} {
        for {set k 1} {$k <= 2} {incr k} {
            lappend controlNames B${m}C${n}P${k}:ms:x
            lappend readbackNames B${m}C${n}P${k}:ms:x
            lappend controlNames B${m}C${n}P${k}:ms:y
            lappend readbackNames B${m}C${n}P${k}:ms:y
            lappend controlNames B${m}C${n}P${k}:ms:x:SetpointAO
            lappend readbackNames B${m}C${n}P${k}:ms:x:SetpointAO
            lappend controlNames B${m}C${n}P${k}:ms:y:SetpointAO
            lappend readbackNames B${m}C${n}P${k}:ms:y:SetpointAO
            lappend controlNames B${m}C${n}P${k}:ms:x:ErrorCC
            lappend readbackNames B${m}C${n}P${k}:ms:x:ErrorCC
            lappend controlNames B${m}C${n}P${k}:ms:y:ErrorCC
            lappend readbackNames B${m}C${n}P${k}:ms:y:ErrorCC
            lappend controlNames B${m}C${n}P${k}:x.SetpointAO
            lappend readbackNames B${m}C${n}P${k}:x.SetpointAO
            lappend controlNames B${m}C${n}P${k}:y.SetpointAO
            lappend readbackNames B${m}C${n}P${k}:y.SetpointAO
            lappend controlNames B${m}C${n}P${k}:x.ErrorCC
            lappend readbackNames B${m}C${n}P${k}:x.ErrorCC
            lappend controlNames B${m}C${n}P${k}:y.ErrorCC
            lappend readbackNames B${m}C${n}P${k}:y.ErrorCC
            lappend controlNames B${m}C${n}P${k}:singleTurn:Xposition
            lappend readbackNames B${m}C${n}P${k}:singleTurn:Xposition
            lappend controlNames B${m}C${n}P${k}:singleTurn:XsetpointAO
            lappend readbackNames B${m}C${n}P${k}:singleTurn:XsetpointAO
            lappend controlNames B${m}C${n}P${k}:singleTurn:XerrorCC 
            lappend readbackNames B${m}C${n}P${k}:singleTurn:XerrorCC 
            lappend controlNames B${m}C${n}P${k}:singleTurn:Xsum
            lappend readbackNames B${m}C${n}P${k}:singleTurn:Xsum
            lappend controlNames B${m}C${n}P${k}:singleTurn:Yposition
            lappend readbackNames B${m}C${n}P${k}:singleTurn:Yposition
            lappend controlNames B${m}C${n}P${k}:singleTurn:YsetpointAO
            lappend readbackNames B${m}C${n}P${k}:singleTurn:YsetpointAO
            lappend controlNames B${m}C${n}P${k}:singleTurn:YerrorCC 
            lappend readbackNames B${m}C${n}P${k}:singleTurn:YerrorCC 
            lappend controlNames B${m}C${n}P${k}:singleTurn:Ysum
            lappend readbackNames B${m}C${n}P${k}:singleTurn:Ysum
        }
    }
}
}

for {set n 1} {$n <= 100} {incr n} {
    lappend controlNames B:bpmT${n}_[expr $n + 7]:Delay_count_li
    lappend readbackNames B:bpmT${n}_[expr $n + 7]:Delay_count_li
    lappend controlNames B:bpmT${n}_[expr $n + 7]:Cycle_count_li
    lappend readbackNames B:bpmT${n}_[expr $n + 7]:Cycle_count_li
}

for {set i1 0} {$i1 <= 4} {incr i1} {
    for {set i2 0} {$i2 <= 9} {incr i2} {
        for {set i3 1} {$i3 <= 2} {incr i3} {
            for {set i4 0} {$i4 <= 9} {incr i4} {
                set pv B${i1}C${i2}P${i3}:region${i4}Avg:XPositionAI
                lappend controlNames $pv
                lappend readbackNames $pv
                set pv B${i1}C${i2}P${i3}:region${i4}Avg:YPositionAI
                lappend controlNames $pv
                lappend readbackNames $pv
            }
        }
    }
}

set data(ColumnNames) "ControlName ReadbackName"
set data(Column.ControlName) [list $controlNames]
set data(Column.ReadbackName) [list $readbackNames]

if {[catch {sdds save /tmp/${root}.mon data} results]} {
    puts "Error: $results"
    exit
}
if {[catch {exec sddsprocess /tmp/${root}.mon -print=column,Provider,ca -print=column,ExpectNumeric,y,type=character -print=column,ExpectFieldType,scalar -define=column,ExpectElements,1,type=long -nowarn} results]} {
    puts "ERROR: $results"
    exit
}


puts "Comparing against master PV list"
exec sddssort /tmp/${root}.mon -pipe=out -col=ControlName -num | sddsselect -pipe=in /home/helios/oagData/pvdata/iocRecNamesOAG.sdds ./../DataLogging/${root}.mon -match=ControlName=rec_name -nowarning -reuse

file delete -force /tmp/${root}.mon

sdds load ./../DataLogging/${root}.mon data
set data(ParameterNames) "InstallLocation"
set data(Parameter.InstallLocation) [list /home/helios/oagData/logging/${root}/${root}.mon]
set data(Layout.DataMode.Mode) "ascii"
sdds save ./../DataLogging/${root}.mon data

puts "use cppatch to install ${root}.mon"


