#!/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

if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline BTS -type corr} btsCorrMagnets]} {
    puts "Error: $btsCorrMagnets"
    exit
   }
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline BTS -type quad} btsQuadMagnets]} {
    puts "Error: $btsQuadMagnets"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline BTS -type skewquad} btsSkewQuadMagnets]} {
    puts "Error: $btsSkewQuadMagnets"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline Booster -type kicker} kickers]} {
    puts "Error: $kickers"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline Booster -type septum} septums]} {
    puts "Error: $septums"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline BTS -type dipole} dipoles]} {
    puts "Error: $dipoles"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline BTS -type raw} raws]} {
    puts "Error: $raws"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline SR -type kicker} SRkickers]} {
    puts "Error: $SRkickers"
    exit
}
if {[catch {APSGetMagnetPVNamesAndInfo -arrayName magnetPVs -beamline SR -type septum} SRseptums]} {
    puts "Error: $SRseptums"
    exit
}

set btsQMagnets "$btsQuadMagnets $btsSkewQuadMagnets"

set data(ColumnNames) "ControlName Description RelatedControlName BitDecoderArray"
set data(ColumnInfo.ControlName) "type SDDS_STRING"
set data(ColumnInfo.Description) "type SDDS_STRING"
set data(ColumnInfo.RelatedControlName) "type SDDS_STRING"
set data(ColumnInfo.BitDecoderArray) "type SDDS_STRING"

foreach name $btsCorrMagnets {
    if {[string range $magnetPVs(${name}.statusPV) end-9 end] == "StatusCALC"} {
        lappend cList $magnetPVs(${name}.statusPV)
        lappend dList ""
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit0BI
        lappend dList IGBT1+2_OT
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit1BI
        lappend dList Capacitory_OT
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit2BI
        lappend dList Bus_OV_|_CPS_OT
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit3BI
        lappend dList Mag_OT_|_Clamp
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit4BI
        lappend dList CPS_OT
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit5BI
        lappend dList Overcurrent
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit6BI
        lappend dList Water_OT
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit7BI
        lappend dList PS_Status
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:CurrentAI
        lappend dList ""
        lappend rList ${name}:CurrentAI
        lappend bList ""
        lappend cList ${name}:CurrentAO
        lappend dList ""
        lappend rList ${name}:CurrentAO
        lappend bList ""
        lappend cList ${name}:MagTempAI
        lappend dList ""
        lappend rList ${name}:MagTempAI
        lappend bList ""
        lappend cList ${name}:CapTempAI
        lappend dList ""
        lappend rList ${name}:CapTempAI
        lappend bList ""
        lappend cList ${name}:CurrentM
        lappend dList ""
        lappend rList ${name}:CurrentM
        lappend bList ""
        lappend cList ${name}:PS:SetCurrentC
        lappend dList ""
        lappend rList ${name}:PS:SetCurrentC
        lappend bList ""
        lappend cList ${name}:DacAI
        lappend dList ""
        lappend rList ${name}:DacAI
        lappend bList ""
        lappend cList ${name}:ToleranceCALC
        lappend dList ""
        lappend rList ${name}:ToleranceCALC
        lappend bList ""
    } else {
        lappend cList $magnetPVs(${name}.statusPV)
        lappend dList ""
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:PS:FaultStatusM
        lappend dList ""
        lappend rList ""
        lappend bList BiPolarFaultStatus
        lappend cList ${name}:PS:SetCurrentC
        lappend dList ""
        lappend rList ${name}:PS:SetCurrentC
        lappend bList ""
        lappend cList ${name}:PS:MeasCurrentM
        lappend dList ""
        lappend rList ${name}:PS:MeasCurrentM
        lappend bList ""
        lappend cList ${name}:PS:CapacitorTempM
        lappend dList ""
        lappend rList ${name}:PS:CapacitorTempM
        lappend bList ""
        lappend cList ${name}:PS:HeatSinkTempM
        lappend dList ""
        lappend rList ${name}:PS:HeatSinkTempM
        lappend bList ""
        lappend cList ${name}:PS:DampResTempM
        lappend dList ""
        lappend rList ${name}:PS:DampResTempM
        lappend bList ""
    }

}
foreach name $btsQMagnets {
    lappend cList $magnetPVs(${name}.statusPV)
    lappend dList ""
    lappend rList ""
    lappend bList ""
    lappend cList ${name}:PS:FaultsM
    lappend dList ""
    lappend rList ""
    lappend bList TdkUniPolarFaultStatus
    lappend cList ${name}:PS:SetCurrentC
    lappend dList ""
    lappend rList ${name}:PS:SetCurrentC
    lappend bList ""
    lappend cList ${name}:PS:MeasCurrentM
    lappend dList ""
    lappend rList ${name}:PS:MeasCurrentM
    lappend bList ""
    lappend cList ${name}:PS:CapacitorTempM
    lappend dList ""
    lappend rList ${name}:PS:CapacitorTempM
    lappend bList ""
    lappend cList ${name}:PS:BuckTempM
    lappend dList ""
    lappend rList ${name}:PS:BuckTempM
    lappend bList ""
    lappend cList ${name}:PS:AdcTempM
    lappend dList ""
    lappend rList ${name}:PS:AdcTempM
    lappend bList ""
    lappend cList ${name}:PS:CarrierTempM
    lappend dList ""
    lappend rList ${name}:PS:CarrierTempM
    lappend bList ""
    lappend cList ${name}:PS:AmbientTempM
    lappend dList ""
    lappend rList ${name}:PS:AmbientTempM
    lappend bList ""
    lappend cList ${name}:PS:ToleranceM
    lappend dList ""
    lappend rList ${name}:PS:ToleranceM
    lappend bList ""
    lappend cList ${name}:PS:SetMismatchM
    lappend dList ""
    lappend rList ${name}:PS:SetMismatchM
    lappend bList ""
    lappend cList ${name}:PS:ConstantCurrentM
    lappend dList ""
    lappend rList ${name}:PS:ConstantCurrentM
    lappend bList ""
    lappend cList ${name}:PS:ConstantPowerEnabledM
    lappend dList ""
    lappend rList ${name}:PS:ConstantPowerEnabledM
    lappend bList ""
    lappend cList ${name}:PS:ConstantPowerM
    lappend dList ""
    lappend rList ${name}:PS:ConstantPowerM
    lappend bList ""
    lappend cList ${name}:PS:ConstantVoltageM
    lappend dList ""
    lappend rList ${name}:PS:ConstantVoltageM
    lappend bList ""
}

foreach name $kickers {
    lappend cList $magnetPVs(${name}.statusPV)
    lappend dList ""
    lappend rList ""
    lappend bList ""
    lappend cList ${name}:HeaterAlarmAI
    lappend dList ""
    lappend rList ${name}:HeaterAlarmAI
    lappend bList ""
    lappend cList ${name}:RackTempAI
    lappend dList ""
    lappend rList ${name}:RackTempAI
    lappend bList ""
    lappend cList ${name}:OilTankTempAI
    lappend dList ""
    lappend rList ${name}:OilTankTempAI
    lappend bList ""
    lappend cList ${name}:VoltageSetSendAO
    lappend dList ""
    lappend rList ${name}:VoltageSetSendAO
    lappend bList ""
    lappend cList ${name}:PFNVoltageAI
    lappend dList ""
    lappend rList ${name}:PFNVoltageAI
    lappend bList ""
}
foreach name $septums {
    lappend cList $magnetPVs(${name}.statusPV)
    lappend dList ""
    lappend rList ""
    lappend bList ""
    lappend cList ${name}:MagTempAI
    lappend dList ""
    lappend rList ${name}:MagTempAI
    lappend bList ""
    lappend cList ${name}:VoltageSetSendAO
    lappend dList ""
    lappend rList ${name}:VoltageSetSendAO
    lappend bList ""
}

foreach name $dipoles {
    if {[string range $magnetPVs(${name}.statusPV) end-9 end] == "StatusCALC"} {
        lappend cList $magnetPVs(${name}.statusPV)
        lappend dList ""
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit0BI
        lappend dList Mag_OT
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit1BI
        lappend dList Remote_Interlock
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit2BI
        lappend dList Ground_Fault
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit6BI
        lappend dList Mag_Intlk_Sum
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:Bit7BI
        lappend dList PS_Status
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:CurrentAI
        lappend dList ""
        lappend rList ${name}:CurrentAI
        lappend bList ""
        lappend cList ${name}:CurrentAO
        lappend dList ""
        lappend rList ${name}:CurrentAO
        lappend bList ""
        lappend cList ${name}:MagTempAI
        lappend dList ""
        lappend rList ${name}:MagTempAI
        lappend bList ""
    } else {
        lappend cList $magnetPVs(${name}.statusPV)
        lappend dList ""
        lappend rList ""
        lappend bList ""
        lappend cList ${name}:PS:FaultsM
        lappend dList ""
        lappend rList ""
        lappend bList TdkUniPolarFaultStatus
        lappend cList ${name}:PS:SetCurrentC
        lappend dList ""
        lappend rList ${name}:PS:SetCurrentC
        lappend bList ""
        lappend cList ${name}:PS:MeasCurrentM
        lappend dList ""
        lappend rList ${name}:PS:MeasCurrentM
        lappend bList ""
        lappend cList ${name}:PS:CapacitorTempM
        lappend dList ""
        lappend rList ${name}:PS:CapacitorTempM
        lappend bList ""
        lappend cList ${name}:PS:BuckTempM
        lappend dList ""
        lappend rList ${name}:PS:BuckTempM
        lappend bList ""
        lappend cList ${name}:PS:AdcTempM
        lappend dList ""
        lappend rList ${name}:PS:AdcTempM
        lappend bList ""
        lappend cList ${name}:PS:CarrierTempM
        lappend dList ""
        lappend rList ${name}:PS:CarrierTempM
        lappend bList ""
        lappend cList ${name}:PS:AmbientTempM
        lappend dList ""
        lappend rList ${name}:PS:AmbientTempM
        lappend bList ""
        lappend cList ${name}:PS:ToleranceM
        lappend dList ""
        lappend rList ${name}:PS:ToleranceM
        lappend bList ""
        lappend cList ${name}:PS:SetMismatchM
        lappend dList ""
        lappend rList ${name}:PS:SetMismatchM
        lappend bList ""
    }
}
foreach name $raws {

    lappend cList $magnetPVs(${name}.statusPV)
    lappend dList ""
    lappend rList ""
    lappend bList ""
    
    lappend cList ${name}:VoltageAO
    lappend dList ""
    lappend rList ${name}:VoltageAO
    lappend bList ""
    
    lappend cList ${name}:PS:AmbientTempM
    lappend dList ""
    lappend rList ${name}:PS:AmbientTempM
    lappend bList ""
    
    lappend cList ${name}:PS:ConstantCurrentM
    lappend dList ""
    lappend rList ${name}:PS:ConstantCurrentM
    lappend bList ""
    
    lappend cList ${name}:PS:ConstantPowerEnabledM
    lappend dList ""
    lappend rList ${name}:PS:ConstantPowerEnabledM
    lappend bList ""
    
    lappend cList ${name}:PS:ConstantPowerM
    lappend dList ""
    lappend rList ${name}:PS:ConstantPowerM
    lappend bList ""
    
    lappend cList ${name}:PS:ConstantVoltageM
    lappend dList ""
    lappend rList ${name}:PS:ConstantVoltageM
    lappend bList ""
    
    lappend cList ${name}:PS:FaultsM
    lappend dList ""
    lappend rList ${name}:PS:FaultsM
    lappend bList ""
    
    lappend cList ${name}:PS:MeasCurrentM
    lappend dList ""
    lappend rList ${name}:PS:MeasCurrentM
    lappend bList ""
    
    lappend cList ${name}:PS:SetCurrentM
    lappend dList ""
    lappend rList ${name}:PS:SetCurrentM
    lappend bList ""
    
    lappend cList ${name}:PS:SetMismatchM
    lappend dList ""
    lappend rList ${name}:PS:SetMismatchM
    lappend bList ""
    
    lappend cList ${name}:PS:ToleranceM
    lappend dList ""
    lappend rList ${name}:PS:ToleranceM
    lappend bList ""
    
    lappend cList ${name}:ToleranceCALC
    lappend dList ""
    lappend rList ${name}:ToleranceCALC
    lappend bList ""
    
    lappend cList ${name}:PS:FaultStatusM
    lappend dList ""
    lappend rList ${name}:PS:FaultStatusM
    lappend bList ""
    
    lappend cList ${name}:PS:OnOffStatusM
    lappend dList ""
    lappend rList ${name}:PS:OnOffStatusM
    lappend bList ""
    
    lappend cList ${name}:PS:SetCurrentC
    lappend dList ""
    lappend rList ${name}:PS:SetCurrentC
    lappend bList ""

    lappend cList ${name}:Bit7BI
    lappend dList ""
    lappend rList ${name}:Bit7BI
    lappend bList ""
}


set data(Column.ControlName) [list $cList]
set data(Column.Description) [list $dList]
set data(Column.RelatedControlName) [list $rList]
set data(Column.BitDecoderArray) [list $bList]

set data(ArrayNames) "BiPolarFaultStatus TdkUniPolarFaultStatus"
set data(ArrayInfo.BiPolarFaultStatus) "type SDDS_STRING dimensions 1"
set data(ArrayInfo.TdkUniPolarFaultStatus) "type SDDS_STRING dimensions 1"

set data(Array.BiPolarFaultStatus) [list {0 DCCT_Ready 1 Over_Current 2 Magnet_Thermal_Switch 3 DC_Input_UV 4 Fan_Speed 5 Heatsink_Over_Temp 6 Capacitor_Over_Temp 7 Damping_Resistor_Over_Temp}]

set data(Array.TdkUniPolarFaultStatus) [list {0 Unused 1 AC_Fault 2 Over_Temp 3 Foldback_Fault 4 Over_Volt 5 Shut_Off_Signal 6 DC_Output_Off 7 Interlock_Fault 8 Enable_Fault 9 Under_Volt 10 Parallel_Acknowledge 11 General_Error 12 Parallel_Error 13 Parallel_Wait_Slave 14 Power_OFF 15 Comm_Watchdog_Timeout}]

sdds save ../Alarms/booster.alog.bts data

exec sddscombine -merge ../Alarms/booster.alog.bts ../Alarms/booster.alog.misc -pipe=out | \
  sddsconvert -pipe -ascii -delete=parameter,NumberCombined | \
  sddsprocess -pipe -print=parameter,InstallLocation,/home/helios/oagData/Alarms/booster.alog | \
  sddssort -pipe -col=ControlName -num -uniq | \
  sddsprocess -pipe -edit=column,SimpleControlName,ControlName,S?/./K | \
  sddsselect -pipe /home/helios/oagData/pvdata/iocRecNamesOAG.sdds \
  -match=SimpleControlName=rec_name -nowarning -reuse | \
  sddsconvert -pipe=in ../Alarms/booster.alog -delete=column,SimpleControlName

file delete ../Alarms/booster.alog.bts

exec sddsprocess ./../Alarms/booster.alog ./../Alarms/Booster-BTS-Alarm-Filter.sdds "-match=column,ControlName=BTS:*,ControlName=B:EK*,|,ControlName=B:ES*,|,ControlName=Mt:Bs:*,|,ControlName=It:Bs:*,|" -reprint=parameter,InstallLocation,/home/helios/oagData/Alarms/FilterFiles/Booster-BTS-Alarm-Filter.sdds -retain=column,ControlName "-delete=array,*"

exec sddsprocess ./../Alarms/booster.alog -pipe=out "-match=column,ControlName=B:*,ControlName=BRH*,|,ControlName=BRV*,|,ControlName=B1C??:*,|,ControlName=B2C??:*,|,ControlName=B3C??:*,|,ControlName=B4C??:*,|"  -reprint=parameter,InstallLocation,/home/helios/oagData/Alarms/FilterFiles/Booster-PS-Alarm-Filter.sdds -retain=column,ControlName "-delete=array,*" | sddsprocess -pipe=in ./../Alarms/Booster-PS-Alarm-Filter.sdds "-match=column,ControlName=B:RM*,!"

exec sddsprocess ./../Alarms/booster.alog ./../Alarms/Booster-ACIS-Alarm-Filter.sdds "-match=column,ControlName=*ACIS*" -reprint=parameter,InstallLocation,/home/helios/oagData/Alarms/FilterFiles/Booster-ACIS-Alarm-Filter.sdds -retain=column,ControlName "-delete=array,*"

exec sddsprocess ./../Alarms/booster.alog ./../Alarms/Booster-RF-Alarm-Filter.sdds "-match=column,ControlName=BRF*" -reprint=parameter,InstallLocation,/home/helios/oagData/Alarms/FilterFiles/Booster-RF-Alarm-Filter.sdds -retain=column,ControlName "-delete=array,*"

exec sddsprocess ./../Alarms/booster.alog ./../Alarms/Booster-AirWater-Alarm-Filter.sdds "-match=column,ControlName=B-SD:*TempAI,ControlName=VM:*,|,ControlName=G:PW:*,|" -reprint=parameter,InstallLocation,/home/helios/oagData/Alarms/FilterFiles/Booster-AirWater-Alarm-Filter.sdds -retain=column,ControlName "-delete=array,*"


