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

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

for {set i 1} {$i < 40} {incr i} {
    append sectors "[format %02d $i] "
}

set data(ColumnNames) "ControlName ReadbackName"
set data(ParameterNames) "InstallLocation OutputRootname TriggerControlName MajorAlarm MinorAlarm NoAlarm TransitionDirection TransitionThreshold GlitchThreshold GlitchBaselineAutoReset GlitchScript"
set data(ParameterInfo.MajorAlarm)              "type SDDS_SHORT"
set data(ParameterInfo.MinorAlarm)              "type SDDS_SHORT"
set data(ParameterInfo.NoAlarm)                 "type SDDS_SHORT"
set data(ParameterInfo.TransitionDirection)     "type SDDS_SHORT"
set data(ParameterInfo.TransitionThreshold)     "type SDDS_DOUBLE"
set data(ParameterInfo.GlitchThreshold)         "type SDDS_DOUBLE"
set data(ParameterInfo.GlitchBaselineAutoReset) "type SDDS_SHORT"
set data(ParameterInfo.GlitchScript)            "type SDDS_STRING"


#Find all PVs P[A-B]:[00-40][ID-BM]:FAULT_NUM_10
set controlnames ""
foreach sector $sectors {
#puts $sector
    if {$sector != "06"} {
        lappend controlnames "PA:${sector}BM:FAULT_NUM_10"
        lappend controlnames "PB:${sector}BM:FAULT_NUM_10"
        lappend controlnames "PC:${sector}BM:WARN_NUM_10"
    }
    lappend controlnames "PA:${sector}ID:FAULT_NUM_10"
    lappend controlnames "PB:${sector}ID:FAULT_NUM_10"
    lappend controlnames "PC:${sector}ID:WARN_NUM_10"
}
set tempdata(ColumnNames) "ControlName"
set tempdata(Column.ControlName) [list $controlnames]

set tmpFile /tmp/[APSTmpString]
if {[catch {sdds save $tmpFile tempdata} result]} {
    catch {exec rm $tmpFile}
    puts stderr "Error: $result"
    exit
}

if {[catch {exec sddsselect $tmpFile /home/helios/oagData/pvdata/iocRecNamesOAG.sdds \
              -pipe=out -match=ControlName=rec_name -nowarning -reuse | \
              sdds2stream -pipe -col=ControlName} triggerPVs]} {
    catch {exec rm $tmpFile}
    puts stderr "Error: $triggerPVs"
    exit
}

catch {exec rm $tmpFile}

set lastbeamline ""


foreach triggerPV $triggerPVs {
#puts "TEST1 $triggerPV"

    set root [string range $triggerPV 0 6]
    set beamline [string range $triggerPV 3 6]
    lappend gen4($beamline) $root
}
foreach triggerPV $triggerPVs {
    set root [string range $triggerPV 0 6]
    set beamline [string range $triggerPV 3 6]
    set num "NUM"
    lappend data(Parameter.InstallLocation) "/home/helios/oagData/glitchLogs/FE-PSS/FE-PSS.atrig"
    lappend data(Parameter.OutputRootname)     "PSS-${beamline}"
    if {[string range $root 0 1] != "PC"} {
        lappend data(Parameter.TriggerControlName) "${root}:FAULT_${num}_10"
    } else {
        lappend data(Parameter.TriggerControlName) "${root}:WARN_${num}_10"
    }
    lappend data(Parameter.MajorAlarm) 0
    lappend data(Parameter.MinorAlarm) 0
    lappend data(Parameter.NoAlarm) 0
    lappend data(Parameter.TransitionDirection) 0
    lappend data(Parameter.TransitionThreshold) 0
    lappend data(Parameter.GlitchThreshold) .5
    lappend data(Parameter.GlitchBaselineAutoReset) 1
    lappend data(Parameter.GlitchScript) "/home/helios/oagData/glitchLogs/FE-PSS/emailFLT"
#I could get all ten levels but for now I will only get the first level. The levels seems to be
#labeled backward with 10 being the latest and 1 being the oldest.
    set controlNames ""
    set readbackNames ""
    if {$beamline != $lastbeamline} {
        foreach r $gen4($beamline) {
            for {set i 10} {$i >= 10} {incr i -1} {
                if {[string range $r 0 1] != "PC"} {
                lappend controlNames ${r}:FAULT_${num}_[format %02d $i]
                lappend readbackNames ${r}:FAULT_${num}_[format %02d $i]
                lappend controlNames ${r}:FAULT_YEAR_[format %02d $i]
                lappend readbackNames ${r}:FAULT_YEAR_[format %02d $i]
                lappend controlNames ${r}:FAULT_MONTH_[format %02d $i]
                lappend readbackNames ${r}:FAULT_MONTH_[format %02d $i]
                lappend controlNames ${r}:FAULT_DAY_[format %02d $i]
                lappend readbackNames ${r}:FAULT_DAY_[format %02d $i]
                lappend controlNames ${r}:FAULT_HOUR_[format %02d $i]
                lappend readbackNames ${r}:FAULT_HOUR_[format %02d $i]
                lappend controlNames ${r}:FAULT_MINUTE_[format %02d $i]
                lappend readbackNames ${r}:FAULT_MINUTE_[format %02d $i]
                lappend controlNames ${r}:FAULT_SECOND_[format %02d $i]
                lappend readbackNames ${r}:FAULT_SECOND_[format %02d $i]
                
                lappend controlNames ${r}:TRIP_${num}_[format %02d $i]
                lappend readbackNames ${r}:TRIP_${num}_[format %02d $i]
                lappend controlNames ${r}:TRIP_YEAR_[format %02d $i]
                lappend readbackNames ${r}:TRIP_YEAR_[format %02d $i]
                lappend controlNames ${r}:TRIP_MONTH_[format %02d $i]
                lappend readbackNames ${r}:TRIP_MONTH_[format %02d $i]
                lappend controlNames ${r}:TRIP_DAY_[format %02d $i]
                lappend readbackNames ${r}:TRIP_DAY_[format %02d $i]
                lappend controlNames ${r}:TRIP_HOUR_[format %02d $i]
                lappend readbackNames ${r}:TRIP_HOUR_[format %02d $i]
                lappend controlNames ${r}:TRIP_MINUTE_[format %02d $i]
                lappend readbackNames ${r}:TRIP_MINUTE_[format %02d $i]
                lappend controlNames ${r}:TRIP_SECOND_[format %02d $i]
                lappend readbackNames ${r}:TRIP_SECOND_[format %02d $i]
                }

                lappend controlNames ${r}:WARN_${num}_[format %02d $i]
                lappend readbackNames ${r}:WARN_${num}_[format %02d $i]
                lappend controlNames ${r}:WARN_YEAR_[format %02d $i]
                lappend readbackNames ${r}:WARN_YEAR_[format %02d $i]
                lappend controlNames ${r}:WARN_MONTH_[format %02d $i]
                lappend readbackNames ${r}:WARN_MONTH_[format %02d $i]
                lappend controlNames ${r}:WARN_DAY_[format %02d $i]
                lappend readbackNames ${r}:WARN_DAY_[format %02d $i]
                lappend controlNames ${r}:WARN_HOUR_[format %02d $i]
                lappend readbackNames ${r}:WARN_HOUR_[format %02d $i]
                lappend controlNames ${r}:WARN_MINUTE_[format %02d $i]
                lappend readbackNames ${r}:WARN_MINUTE_[format %02d $i]
                lappend controlNames ${r}:WARN_SECOND_[format %02d $i]
                lappend readbackNames ${r}:WARN_SECOND_[format %02d $i]
            }
        }
    }
    set lastbeamline $beamline
    lappend data(Column.ControlName) $controlNames
    lappend data(Column.ReadbackName) $readbackNames

    if {[string range $root 0 1] != "PC"} {
        
        lappend data(Parameter.InstallLocation) "/home/helios/oagData/glitchLogs/FE-PSS/FE-PSS.atrig"
        lappend data(Parameter.OutputRootname)     "PSS-${beamline}"
        lappend data(Parameter.TriggerControlName) "${root}:TRIP_${num}_10"
        lappend data(Parameter.MajorAlarm) 0
        lappend data(Parameter.MinorAlarm) 0
        lappend data(Parameter.NoAlarm) 0
        lappend data(Parameter.TransitionDirection) 0
        lappend data(Parameter.TransitionThreshold) 0
        lappend data(Parameter.GlitchThreshold) .5
        lappend data(Parameter.GlitchBaselineAutoReset) 1
        lappend data(Parameter.GlitchScript) "/home/helios/oagData/glitchLogs/FE-PSS/emailFLT"
        set controlNames ""
        set readbackNames ""
        lappend data(Column.ControlName) $controlNames
        lappend data(Column.ReadbackName) $readbackNames
        

        lappend data(Parameter.InstallLocation) "/home/helios/oagData/glitchLogs/FE-PSS/FE-PSS.atrig"
        lappend data(Parameter.OutputRootname)     "PSS-${beamline}"
        lappend data(Parameter.TriggerControlName) "${root}:WARN_${num}_10"
        lappend data(Parameter.MajorAlarm) 0
        lappend data(Parameter.MinorAlarm) 0
        lappend data(Parameter.NoAlarm) 0
        lappend data(Parameter.TransitionDirection) 0
        lappend data(Parameter.TransitionThreshold) 0
        lappend data(Parameter.GlitchThreshold) .5
        lappend data(Parameter.GlitchBaselineAutoReset) 1
        lappend data(Parameter.GlitchScript) "/home/helios/oagData/glitchLogs/FE-PSS/emailFLT"
        set controlNames ""
        set readbackNames ""
        lappend data(Column.ControlName) $controlNames
        lappend data(Column.ReadbackName) $readbackNames
    }

}




#Find all PVs P[A-B]:[00-40][ID-BM]:FAULT_NUM_10
set controlnames ""
foreach sector $sectors {
    lappend controlnames "PSS:${sector}BM:FAULTS_NUMBER_10"
    lappend controlnames "PSS:${sector}ID:FAULTS_NUMBER_10"
}
set tempdata(ColumnNames) "ControlName"
set tempdata(Column.ControlName) [list $controlnames]

set tmpFile /tmp/[APSTmpString]
if {[catch {sdds save $tmpFile tempdata} result]} {
    catch {exec rm $tmpFile}
    puts stderr "Error: $result"
    exit
}

if {[catch {exec sddsselect $tmpFile /home/helios/oagData/pvdata/iocRecNamesOAG.sdds \
              -pipe=out -match=ControlName=rec_name -nowarning -reuse | \
              sdds2stream -pipe -col=ControlName} triggerPVs]} {
    catch {exec rm $tmpFile}
    puts stderr "Error: $triggerPVs"
    exit
}

catch {exec rm $tmpFile}

set lastbeamline ""


foreach triggerPV $triggerPVs {
#puts "TEST2 $triggerPV"
    set root [string range $triggerPV 0 7]
    set beamline [string range $triggerPV 4 7]
    lappend gen4($beamline) $root
}
foreach triggerPV $triggerPVs {
    set root [string range $triggerPV 0 7]
    set beamline [string range $triggerPV 4 7]
    set num "NUMBER"
    lappend data(Parameter.InstallLocation) "/home/helios/oagData/glitchLogs/FE-PSS/FE-PSS.atrig"
    lappend data(Parameter.OutputRootname)     "PSS-${beamline}"
    lappend data(Parameter.TriggerControlName) "${root}:FAULTS_${num}_10"
    lappend data(Parameter.MajorAlarm) 0
    lappend data(Parameter.MinorAlarm) 0
    lappend data(Parameter.NoAlarm) 0
    lappend data(Parameter.TransitionDirection) 0
    lappend data(Parameter.TransitionThreshold) 0
    lappend data(Parameter.GlitchThreshold) .5
    lappend data(Parameter.GlitchBaselineAutoReset) 1
    lappend data(Parameter.GlitchScript) "/home/helios/oagData/glitchLogs/FE-PSS/emailFLT"
#I could get all ten levels but for now I will only get the first level. The levels seems to be
#labeled backward with 10 being the latest and 1 being the oldest.
    set controlNames ""
    set readbackNames ""
    if {$beamline != $lastbeamline} {
        foreach r $gen4($beamline) {
            for {set i 10} {$i >= 10} {incr i -1} {
                lappend controlNames ${r}:FAULTS_${num}_[format %02d $i]
                lappend readbackNames ${r}:FAULTS_${num}_[format %02d $i]
                lappend controlNames ${r}:FAULTS_YEAR_[format %02d $i]
                lappend readbackNames ${r}:FAULTS_YEAR_[format %02d $i]
                lappend controlNames ${r}:FAULTS_MONTH_[format %02d $i]
                lappend readbackNames ${r}:FAULTS_MONTH_[format %02d $i]
                lappend controlNames ${r}:FAULTS_DAY_[format %02d $i]
                lappend readbackNames ${r}:FAULTS_DAY_[format %02d $i]
                lappend controlNames ${r}:FAULTS_HOUR_[format %02d $i]
                lappend readbackNames ${r}:FAULTS_HOUR_[format %02d $i]
                lappend controlNames ${r}:FAULTS_MINUTE_[format %02d $i]
                lappend readbackNames ${r}:FAULTS_MINUTE_[format %02d $i]
                lappend controlNames ${r}:FAULTS_SECOND_[format %02d $i]
                lappend readbackNames ${r}:FAULTS_SECOND_[format %02d $i]
                
                lappend controlNames ${r}:TRIPS_${num}_[format %02d $i]
                lappend readbackNames ${r}:TRIPS_${num}_[format %02d $i]
                lappend controlNames ${r}:TRIPS_YEAR_[format %02d $i]
                lappend readbackNames ${r}:TRIPS_YEAR_[format %02d $i]
                lappend controlNames ${r}:TRIPS_MONTH_[format %02d $i]
                lappend readbackNames ${r}:TRIPS_MONTH_[format %02d $i]
                lappend controlNames ${r}:TRIPS_DAY_[format %02d $i]
                lappend readbackNames ${r}:TRIPS_DAY_[format %02d $i]
                lappend controlNames ${r}:TRIPS_HOUR_[format %02d $i]
                lappend readbackNames ${r}:TRIPS_HOUR_[format %02d $i]
                lappend controlNames ${r}:TRIPS_MINUTE_[format %02d $i]
                lappend readbackNames ${r}:TRIPS_MINUTE_[format %02d $i]
                lappend controlNames ${r}:TRIPS_SECOND_[format %02d $i]
                lappend readbackNames ${r}:TRIPS_SECOND_[format %02d $i]

                lappend controlNames ${r}:WARN_${num}_[format %02d $i]
                lappend readbackNames ${r}:WARN_${num}_[format %02d $i]
                lappend controlNames ${r}:WARN_YEAR_[format %02d $i]
                lappend readbackNames ${r}:WARN_YEAR_[format %02d $i]
                lappend controlNames ${r}:WARN_MONTH_[format %02d $i]
                lappend readbackNames ${r}:WARN_MONTH_[format %02d $i]
                lappend controlNames ${r}:WARN_DAY_[format %02d $i]
                lappend readbackNames ${r}:WARN_DAY_[format %02d $i]
                lappend controlNames ${r}:WARN_HOUR_[format %02d $i]
                lappend readbackNames ${r}:WARN_HOUR_[format %02d $i]
                lappend controlNames ${r}:WARN_MINUTE_[format %02d $i]
                lappend readbackNames ${r}:WARN_MINUTE_[format %02d $i]
                lappend controlNames ${r}:WARN_SECOND_[format %02d $i]
                lappend readbackNames ${r}:WARN_SECOND_[format %02d $i]
            }
        }
    }
    set lastbeamline $beamline
    lappend data(Column.ControlName) $controlNames
    lappend data(Column.ReadbackName) $readbackNames

    lappend data(Parameter.InstallLocation) "/home/helios/oagData/glitchLogs/FE-PSS/FE-PSS.atrig"
    lappend data(Parameter.OutputRootname)     "PSS-${beamline}"
    lappend data(Parameter.TriggerControlName) "${root}:TRIPS_${num}_10"
    lappend data(Parameter.MajorAlarm) 0
    lappend data(Parameter.MinorAlarm) 0
    lappend data(Parameter.NoAlarm) 0
    lappend data(Parameter.TransitionDirection) 0
    lappend data(Parameter.TransitionThreshold) 0
    lappend data(Parameter.GlitchThreshold) .5
    lappend data(Parameter.GlitchBaselineAutoReset) 1
    lappend data(Parameter.GlitchScript) "/home/helios/oagData/glitchLogs/FE-PSS/emailFLT"
    set controlNames ""
    set readbackNames ""
    lappend data(Column.ControlName) $controlNames
    lappend data(Column.ReadbackName) $readbackNames
    

    lappend data(Parameter.InstallLocation) "/home/helios/oagData/glitchLogs/FE-PSS/FE-PSS.atrig"
    lappend data(Parameter.OutputRootname)     "PSS-${beamline}"
    lappend data(Parameter.TriggerControlName) "${root}:WARNS_${num}_10"
    lappend data(Parameter.MajorAlarm) 0
    lappend data(Parameter.MinorAlarm) 0
    lappend data(Parameter.NoAlarm) 0
    lappend data(Parameter.TransitionDirection) 0
    lappend data(Parameter.TransitionThreshold) 0
    lappend data(Parameter.GlitchThreshold) .5
    lappend data(Parameter.GlitchBaselineAutoReset) 1
    lappend data(Parameter.GlitchScript) "/home/helios/oagData/glitchLogs/FE-PSS/emailFLT"
    set controlNames ""
    set readbackNames ""
    lappend data(Column.ControlName) $controlNames
    lappend data(Column.ReadbackName) $readbackNames

}


if {[catch {sdds save ./glitchLogs/FE-PSS.atrig data} result]} {
    catch {exec rm $tmpFile}
    puts stderr "Error: $result"
    exit
}
